A cryptographically secure random number generator that uses the HC-128
algorithm.
HC-128 is a stream cipher designed by Hongjun Wu1, that we use as an
RNG. It is selected as one of the "stream ciphers suitable for widespread
adoption" by eSTREAM2.
HC-128 is an array based RNG. In this it is similar to RC-4 and ISAAC before
it, but those have never been proven cryptographically secure (or have even
been significantly compromised, as in the case of RC-43).
Because HC-128 works with simple indexing into a large array and with a few
operations that parallelize well, it has very good performance. The size of
the array it needs, 4kb, can however be a disadvantage.
This implementation is not based on the version of HC-128 submitted to the
eSTREAM contest, but on a later version by the author with a few small
improvements from December 15, 20094.
HC-128 has no known weaknesses that are easier to exploit than doing a
brute-force search of 2128. A very comprehensive analysis of the
current state of known attacks / weaknesses of HC-128 is given in Some
Results On Analysis And Implementation Of HC-128 Stream Cipher5.
The average cycle length is expected to be
21024*32+10-1 = 232777.
We support seeding with a 256-bit array, which matches the 128-bit key
concatenated with a 128-bit IV from the stream cipher.
This implementation uses an output buffer of sixteen u32
words, and uses
BlockRng
to implement the RngCore
methods.
Performs copy-assignment from source
. Read more
Formats the value using the given formatter. Read more
Fill dest
entirely with random data. Read more
Seed type, which is restricted to types mutably-dereferencable as u8
arrays (we recommend [u8; N]
for some N
). Read more
Create a new PRNG using the given seed. Read more
Create a new PRNG seeded from another Rng
. Read more
Return a random value supporting the [Standard
] distribution. Read more
Generate a random value in the range [low
, high
), i.e. inclusive of low
and exclusive of high
. Read more
Sample a new value, using the given distribution. Read more
Important traits for DistIter<'a, D, R, T>
impl<'a, D, R, T> Iterator for DistIter<'a, D, R, T> where
D: Distribution<T>,
R: Rng + 'a, type Item = T;
[−]
Create an iterator that generates values using the given distribution. Read more
Fill dest
entirely with random bytes (uniform value distribution), where dest
is any type supporting [AsByteSliceMut
], namely slices and arrays over primitive integer types (i8
, i16
, u32
, etc.). Read more
Fill dest
entirely with random bytes (uniform value distribution), where dest
is any type supporting [AsByteSliceMut
], namely slices and arrays over primitive integer types (i8
, i16
, u32
, etc.). Read more
Return a bool with a probability p
of being true. Read more
Return a random element from values
. Read more
Return a mutable pointer to a random element from values
. Read more
Deprecated since 0.5.0
: use Rng::sample_iter(&Standard) instead
Return an iterator that will yield an infinite number of randomly generated items. Read more
[−]
Deprecated since 0.5.0
: use gen_bool instead
Return a bool with a 1 in n chance of true Read more
[−]
Deprecated since 0.5.0
: use sample_iter(&Alphanumeric) instead
Return an iterator of random characters from the set A-Z,a-z,0-9. Read more
[+]
[−]
Creates a new instance, automatically seeded with fresh entropy. Read more
[+]
[+]
[+]
type Owned = T
[−]
Creates owned data from borrowed data, usually by cloning. Read more
[−]
🔬 This is a nightly-only experimental API. (toowned_clone_into
)
recently added
Uses borrowed data to replace owned data, usually by cloning. Read more
[+]
type Error = !
🔬 This is a nightly-only experimental API. (try_from
)
The type returned in the event of a conversion error.
[−]
🔬 This is a nightly-only experimental API. (try_from
)
[+]
[+]
[+]
type Error = <U as TryFrom<T>>::Error
🔬 This is a nightly-only experimental API. (try_from
)
The type returned in the event of a conversion error.
[−]
🔬 This is a nightly-only experimental API. (try_from
)
[+]
[−]
🔬 This is a nightly-only experimental API. (get_type_id
)
this method will likely be replaced by an associated static