1--TEST-- 2Check for libsodium secretstream 3--SKIPIF-- 4<?php 5if (!extension_loaded("sodium")) print "skip extension not loaded"; 6if (!defined('SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES')) print "skip libsodium without secretbytes"; 7?> 8--FILE-- 9<?php 10echo "secretstream_xchacha20poly1305:\n"; 11 12$msg1 = random_bytes(random_int(1, 1000)); 13$msg2 = random_bytes(random_int(1, 1000)); 14$key = sodium_crypto_secretstream_xchacha20poly1305_keygen(); 15$ad = random_bytes(random_int(1, 1000)); 16 17$res = sodium_crypto_secretstream_xchacha20poly1305_init_push($key); 18$stream = $res[0]; 19$header = $res[1]; 20 21$c1 = sodium_crypto_secretstream_xchacha20poly1305_push($stream, $msg1, $ad); 22$c2 = sodium_crypto_secretstream_xchacha20poly1305_push($stream, $msg2, '', SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_TAG_FINAL); 23 24$stream = sodium_crypto_secretstream_xchacha20poly1305_init_pull($header, $key); 25 26$r1 = sodium_crypto_secretstream_xchacha20poly1305_pull($stream, $c1, $ad); 27$r2 = sodium_crypto_secretstream_xchacha20poly1305_pull($stream, $c2); 28 29var_dump($msg1 === $r1[0]); 30var_dump($msg2 === $r2[0]); 31var_dump($r1[1]); 32var_dump($r2[1]); 33 34var_dump(sodium_crypto_secretstream_xchacha20poly1305_pull($stream, $c2)); 35var_dump(sodium_crypto_secretstream_xchacha20poly1305_pull($stream, 'x')); 36 37$stream = sodium_crypto_secretstream_xchacha20poly1305_init_pull($header, $key); 38$r1 = sodium_crypto_secretstream_xchacha20poly1305_pull($stream, $c1); 39var_dump($r1); 40$r1 = sodium_crypto_secretstream_xchacha20poly1305_pull($stream, $c1, $ad); 41var_dump($msg1 === $r1[0]); 42 43$stream = sodium_crypto_secretstream_xchacha20poly1305_init_pull($header, $key); 44sodium_crypto_secretstream_xchacha20poly1305_rekey($stream); 45$r1 = sodium_crypto_secretstream_xchacha20poly1305_pull($stream, $c1, $ad); 46var_dump($r1); 47$r2 = sodium_crypto_secretstream_xchacha20poly1305_pull($stream, $c2); 48var_dump($r2); 49--EXPECT-- 50secretstream_xchacha20poly1305: 51bool(true) 52bool(true) 53int(0) 54int(3) 55bool(false) 56bool(false) 57bool(false) 58bool(true) 59bool(false) 60bool(false) 61