Crypt::...::ChaCha(3)

πŸ’… Crypt::Stream::ChaCha β€” User Contributed Perl Documentation

okay bestie, welcome to the Crypt::...::ChaCha(3) page from User Contributed Perl Documentation ✨ this is the manual for Crypt::Stream::ChaCha, and we're gonna go through it together, no cap. 🫢

🌸 NAME 🌸

Crypt::Stream::ChaCha β€” Stream cipher ChaCha πŸ¦‹

πŸ’– SYNOPSIS πŸ’–

like, here's the whole vibe in code, bestie:

use Crypt::Stream::ChaCha;

# encrypt
my $key = "12345678901234567890123456789012";  # 32 bytes
my $nonce  = "123456789012";                      # 12 bytes
my $enc_stream = Crypt::Stream::ChaCha->new($key, $nonce);
my $ct = $enc_stream->crypt("plain message");

# decrypt
my $dec_stream = Crypt::Stream::ChaCha->new($key, $nonce);
my $pt = $dec_stream->crypt($ct);

πŸŽ€ DESCRIPTION πŸŽ€

This module gives you an interface to the ChaCha stream cipher. That's the whole description, short and iconic. πŸ’…

πŸ”₯ METHODS πŸ”₯

Unless noted otherwise, assume $stream is an existing stream object created via new, like this:

my $stream = Crypt::Stream::ChaCha->new($key, $nonce);

✨ new ✨

Make a new stream object, bestie:

my $stream = Crypt::Stream::ChaCha->new($key, $nonce);
#or
my $stream = Crypt::Stream::ChaCha->new($key, $nonce, $counter, $rounds);

# $key     .. [binary string] 32 or 16 bytes
# $nonce   .. [binary string] 8 or 12 bytes
# $counter .. [integer] initial counter value (DEFAULT: 0)
#             for 12-byte nonces the counter must be <= 0xFFFFFFFF
# $rounds  .. [integer] rounds (DEFAULT: 20)

The args are giving:

  • $key β€” [binary string] 32 or 16 bytes
  • $nonce β€” [binary string] 8 or 12 bytes
  • $counter β€” [integer] initial counter value (DEFAULT: 0); for 12-byte nonces the counter must be <= 0xFFFFFFFF
  • $rounds β€” [integer] 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_key = $stream->keystream($length);

πŸ¦‹ clone πŸ¦‹

Returns a copy of the stream cipher object in its current state. Main character energy, but for objects πŸ’…

my $stream2 = $stream->clone();

πŸ‘‘ SEE ALSO πŸ‘‘

  • Crypt::Stream::XChaCha, Crypt::Stream::RC4, Crypt::Stream::Sober128, Crypt::Stream::Salsa20, Crypt::Stream::Sosemanuk β€” the whole friend group 🫢
  • <https://www.rfc-editor.org/rfc/rfc7539> β€” the RFC link, iykyk

That's the whole page, bestie πŸ’– this was perl v5.42.0, dated 2026-05-11, and it's the Crypt::...::ChaCha(3) manual page. slay ✨

πŸ“¦ where this page comes from