Crypt::Stream::XChaCha(3) User Contributed Perl Documentation NAME Crypt::Stream::XChaCha - Stream cipher XChaCha20 SYNOPSIS use Crypt::Stream::XChaCha; # encrypt my $key = "12345678901234567890123456789012"; # 32 bytes my $nonce = "123456789012345678901234"; # 24 bytes my $enc_stream = Crypt::Stream::XChaCha->new($key, $nonce); my $ct = $enc_stream->crypt("plain message"); # decrypt my $dec_stream = Crypt::Stream::XChaCha->new($key, $nonce); my $pt = $dec_stream->crypt($ct); DESCRIPTION Since: CryptX-0.089 Provides an interface to the XChaCha20 stream cipher, an extended-nonce variant of ChaCha20 using a 192-bit (24-byte) nonce. METHODS Unless noted otherwise, assume $stream is an existing stream object created via "new", for example: my $stream = Crypt::Stream::XChaCha->new($key, $nonce); new my $stream = Crypt::Stream::XChaCha->new($key, $nonce); #or my $stream = Crypt::Stream::XChaCha->new($key, $nonce, $rounds); # $key .. [binary string] 32 bytes # $nonce .. [binary string] 24 bytes # $rounds .. [integer] optional, rounds (DEFAULT: 20) crypt Encrypts or decrypts data. The output has the same length as the input. Returns a binary string (raw bytes). The input is converted using Perl's usual scalar stringification. Passing "undef" is treated as an empty string with the usual warning, and numeric scalars are stringified before processing. my $ciphertext = $stream->crypt($plaintext); #or my $plaintext = $stream->crypt($ciphertext); keystream Returns $length bytes of raw keystream as a binary string. The length is taken using Perl's usual numeric coercion. Values that coerce to an oversized unsigned length are rejected as too large. my $random_bytes = $stream->keystream($length); clone Returns a copy of the stream cipher object in its current state. my $stream2 = $stream->clone; SEE ALSO o Crypt::Stream::ChaCha, Crypt::Stream::XSalsa20 o perl v5.42.2 2026-05-12 Crypt::Stream::XChaCha(3)