---
name: "Math::Prime::Util::ChaCha"
section: "3pm"
platform: "linux"
package: "libmath-prime-util-perl"
version: "0.73-2+b5"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Math::Prime::Util::ChaCha"
---

# Math::Prime::Util::ChaCha(3pm)

Pure Perl ChaCha20 CSPRNG

## NAME

Math::Prime::Util::ChaCha - Pure Perl ChaCha20 CSPRNG

## VERSION

Version 0.73

## SYNOPSIS

## DESCRIPTION

A pure Perl implementation of ChaCha20 with a CSPRNG interface.

## FUNCTIONS

### csrand

Takes a binary string as input and seeds the internal CSPRNG.

### srand

A method for sieving the CSPRNG with a small value.  This will not be secure but can be useful for simulations and emulating the system `"srand"`.

With no argument, chooses a random number, seeds and returns the number. With a single integer argument, seeds and returns the number.

### irand

Returns a random 32-bit integer.

### irand64

Returns a random 64-bit integer.

### random\_bytes

Takes an unsigned number `"n"` as input and returns that many random bytes as a single binary string.

###

## AUTHORS

Dana Jacobsen \<dana@acm.org\>

## ACKNOWLEDGEMENTS

Daniel J. Bernstein wrote the ChaCha family of stream ciphers in 2008 as an update to the popular Salsa20 cipher from 2005.

RFC7539: "ChaCha20 and Poly1305 for IETF Protocols" was used to create both the C and Perl implementations.  Test vectors from that document are used here as well.

For final optimizations I got ideas from Christopher Madsen's Crypt::Salsa20 for how to best work around some of Perl's aggressive dynamic typing. Our core is still about 20% slower than Salsa20.

## COPYRIGHT

Copyright 2017 by Dana Jacobsen \<dana@acm.org\>

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
