[][src]Struct rand::prng::hc128::Hc128Rng

pub struct Hc128Rng(_);

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.

References


  1. Hongjun Wu (2008). "The Stream Cipher HC-128". The eSTREAM Finalists, LNCS 4986, pp. 39–47, Springer-Verlag. 

  2. eSTREAM: the ECRYPT Stream Cipher Project 

  3. Internet Engineering Task Force (February 2015), "Prohibiting RC4 Cipher Suites"

  4. Hongjun Wu, Stream Ciphers HC-128 and HC-256 

  5. Shashwat Raizada (January 2015),"Some Results On Analysis And Implementation Of HC-128 Stream Cipher"

Trait Implementations

impl Clone for Hc128Rng
[src]

fn clone_from(&mut self, source: &Self)
1.0.0
[src]

Performs copy-assignment from source. Read more

impl Debug for Hc128Rng
[src]

impl CryptoRng for Hc128Rng
[src]

impl SeedableRng for Hc128Rng
[src]

type Seed = <Hc128Core as SeedableRng>::Seed

Seed type, which is restricted to types mutably-dereferencable as u8 arrays (we recommend [u8; N] for some N). Read more

fn seed_from_u64(state: u64) -> Self
[src]

Create a new PRNG using a u64 seed. Read more

impl RngCore for Hc128Rng
[src]

Auto Trait Implementations

impl Send for Hc128Rng

impl Sync for Hc128Rng

Blanket Implementations

impl<R> Rng for R where
    R: RngCore + ?Sized
[src]

fn gen<T>(&mut self) -> T where
    Standard: Distribution<T>, 
[src]

Return a random value supporting the [Standard] distribution. Read more

fn gen_range<T: PartialOrd + SampleUniform>(&mut self, low: T, high: T) -> T
[src]

Generate a random value in the range [low, high), i.e. inclusive of low and exclusive of high. Read more

fn sample<T, D: Distribution<T>>(&mut self, distr: D) -> T
[src]

Sample a new value, using the given distribution. Read more

Important traits for DistIter<'a, D, R, T>
fn sample_iter<'a, T, D: Distribution<T>>(
    &'a mut self,
    distr: &'a D
) -> DistIter<'a, D, Self, T> where
    Self: Sized
[src]

Create an iterator that generates values using the given distribution. Read more

fn fill<T: AsByteSliceMut + ?Sized>(&mut self, dest: &mut T)
[src]

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

fn try_fill<T: AsByteSliceMut + ?Sized>(
    &mut self,
    dest: &mut T
) -> Result<(), Error>
[src]

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

fn gen_bool(&mut self, p: f64) -> bool
[src]

Return a bool with a probability p of being true. Read more

fn choose<'a, T>(&mut self, values: &'a [T]) -> Option<&'a T>
[src]

Return a random element from values. Read more

fn choose_mut<'a, T>(&mut self, values: &'a mut [T]) -> Option<&'a mut T>
[src]

Return a mutable pointer to a random element from values. Read more

fn shuffle<T>(&mut self, values: &mut [T])
[src]

Shuffle a mutable slice in place. Read more

Important traits for Generator<T, R>
fn gen_iter<T>(&mut self) -> Generator<T, &mut Self> where
    Standard: Distribution<T>, 
[src]

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

fn gen_weighted_bool(&mut self, n: u32) -> bool
[src]

Deprecated since 0.5.0:

use gen_bool instead

Return a bool with a 1 in n chance of true Read more

Important traits for AsciiGenerator<R>
fn gen_ascii_chars(&mut self) -> AsciiGenerator<&mut Self>
[src]

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

impl<R> FromEntropy for R where
    R: SeedableRng
[src]

impl<T> From for T
[src]

impl<T, U> Into for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

impl<T, U> TryFrom for T where
    T: From<U>, 
[src]

type Error = !

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

impl<T> Borrow for T where
    T: ?Sized
[src]

impl<T> BorrowMut for T where
    T: ?Sized
[src]

impl<T, U> TryInto for T where
    U: TryFrom<T>, 
[src]

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.

impl<T> Any for T where
    T: 'static + ?Sized
[src]