High-quality splittable pseudorandom number generator
This package contains an implementation of a high-quality splittable
pseudorandom number generator. The generator is based on a
cryptographic hash function built on top of the ThreeFish block
cipher. See the paper
Splittable Pseudorandom Number Generators
Using Cryptographic Hashing by Claessen, Pałka for details and the
rationale of the design.
The package provides the following:
- A splittable PRNG that implements the standard
System.Random.RandomGen class.
- The generator also implements an alternative version of the
System.Random.TF.Gen.RandomGen class (exported from
System.Random.TF.Gen), which requires the generator to return
pseudorandom integers from the full 32-bit range, and contains an
n-way split function.
- An alternative version of the Random class is provided,
which is linked to the new RandomGen class, together with
Random instances for some integral types.
- Two functions for initialising the generator with a
non-deterministic seed: one using the system time, and one using the
/dev/urandom UNIX special file.
The package uses an adapted version of the reference C implementation
of ThreeFish from the reference package of the Skein hash function
(
https://www.schneier.com/skein.html), originally written by
Doug Whiting.
Please note that even though the generator provides very high-quality
pseudorandom numbers, it has not been designed with cryptographic
applications in mind.