Crypt::Stream::ChaCha(3p)

NAME
Crypt::Stream::ChaCha - Stream cipher ChaCha

SYNOPSIS
   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
Provides an interface to the ChaCha stream cipher.

METHODS
Unless noted otherwise, assume $stream is an existing stream object created via "new", for example:

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

  new
 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)

  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.

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

SEE ALSO

•   Crypt::Stream::XChaCha, Crypt::Stream::RC4, Crypt::Stream::Sober128, Crypt::Stream::Salsa20, Crypt::Stream::Sosemanuk

•   <https://www.rfc-editor.org/rfc/rfc7539>