# randombytes_buf(out, crypto_secretstream_xchacha20poly1305_HEADERBYTES);
$out =
random_bytes(24
);
# crypto_core_hchacha20(state->k, out, k, NULL);
$subkey = ParagonIE_Sodium_Core_HChaCha20::
hChaCha20($out,
$key);
$state =
new ParagonIE_Sodium_Core_SecretStream_State( $subkey,
ParagonIE_Sodium_Core_Util::
substr($out, 16, 8
) .
str_repeat("\0", 4
) );
# _crypto_secretstream_xchacha20poly1305_counter_reset(state);
$state->
counterReset();
# memcpy(STATE_INONCE(state), out + crypto_core_hchacha20_INPUTBYTES,
# crypto_secretstream_xchacha20poly1305_INONCEBYTES);
# memset(state->_pad, 0, sizeof state->_pad);
return array
( $state->
toString(),
$out );
} /**
* @param string $key
* @param string $header
* @return string Returns a state.
* @throws Exception
*/