gecko-dev/third_party/rust/rand_jitter
Bastien Orivel 8a3f3e785c Bug 1550903 - Part 2: Revendor dependencies. r=emilio,kats,froydnj
It was unhappy about the new LICENSE (fuchsia-cprng) but it's the same
as the other fuschia crates. Since I don't think this is used at build
time but has the same license as the other fuschia crates, I put it in
the RUNTIME_LICENSE_PACKAGE_WHITELIST list. I also removed sha1 from
that list as it's not used anymore

Differential Revision: https://phabricator.services.mozilla.com/D30746

--HG--
rename : third_party/rust/httparse/Cargo.toml => third_party/rust/autocfg/Cargo.toml
rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/autocfg/LICENSE-APACHE
rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/autocfg/LICENSE-MIT
rename : third_party/rust/httparse/Cargo.toml => third_party/rust/cloudabi/Cargo.toml
rename : third_party/rust/httparse/Cargo.toml => third_party/rust/fuchsia-cprng/Cargo.toml
rename : third_party/rust/sha1/LICENSE => third_party/rust/fuchsia-cprng/LICENSE
rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/mio-extras/LICENSE-APACHE
rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/mio-extras/LICENSE-MIT
rename : third_party/rust/rand/.cargo-checksum.json => third_party/rust/rand-0.4.3/.cargo-checksum.json
rename : third_party/rust/rand/CHANGELOG.md => third_party/rust/rand-0.4.3/CHANGELOG.md
rename : third_party/rust/rand/Cargo.toml => third_party/rust/rand-0.4.3/Cargo.toml
rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/rand-0.4.3/LICENSE-APACHE
rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/rand-0.4.3/LICENSE-MIT
rename : third_party/rust/rand/README.md => third_party/rust/rand-0.4.3/README.md
rename : third_party/rust/rand/appveyor.yml => third_party/rust/rand-0.4.3/appveyor.yml
rename : third_party/rust/rand/benches/bench.rs => third_party/rust/rand-0.4.3/benches/bench.rs
rename : third_party/rust/rand/benches/distributions/exponential.rs => third_party/rust/rand-0.4.3/benches/distributions/exponential.rs
rename : third_party/rust/rand/benches/distributions/gamma.rs => third_party/rust/rand-0.4.3/benches/distributions/gamma.rs
rename : third_party/rust/rand/benches/distributions/mod.rs => third_party/rust/rand-0.4.3/benches/distributions/mod.rs
rename : third_party/rust/rand/benches/distributions/normal.rs => third_party/rust/rand-0.4.3/benches/distributions/normal.rs
rename : third_party/rust/rand/benches/generators.rs => third_party/rust/rand-0.4.3/benches/generators.rs
rename : third_party/rust/rand/benches/misc.rs => third_party/rust/rand-0.4.3/benches/misc.rs
rename : third_party/rust/rand/src/distributions/exponential.rs => third_party/rust/rand-0.4.3/src/distributions/exponential.rs
rename : third_party/rust/rand/src/distributions/gamma.rs => third_party/rust/rand-0.4.3/src/distributions/gamma.rs
rename : third_party/rust/rand/src/distributions/mod.rs => third_party/rust/rand-0.4.3/src/distributions/mod.rs
rename : third_party/rust/rand/src/distributions/normal.rs => third_party/rust/rand-0.4.3/src/distributions/normal.rs
rename : third_party/rust/rand/src/distributions/range.rs => third_party/rust/rand-0.4.3/src/distributions/range.rs
rename : third_party/rust/rand/src/distributions/ziggurat_tables.rs => third_party/rust/rand-0.4.3/src/distributions/ziggurat_tables.rs
rename : third_party/rust/rand/src/jitter.rs => third_party/rust/rand-0.4.3/src/jitter.rs
rename : third_party/rust/rand/src/lib.rs => third_party/rust/rand-0.4.3/src/lib.rs
rename : third_party/rust/rand/src/os.rs => third_party/rust/rand-0.4.3/src/os.rs
rename : third_party/rust/rand/src/prng/chacha.rs => third_party/rust/rand-0.4.3/src/prng/chacha.rs
rename : third_party/rust/rand/src/prng/isaac.rs => third_party/rust/rand-0.4.3/src/prng/isaac.rs
rename : third_party/rust/rand/src/prng/isaac64.rs => third_party/rust/rand-0.4.3/src/prng/isaac64.rs
rename : third_party/rust/rand/src/prng/mod.rs => third_party/rust/rand-0.4.3/src/prng/mod.rs
rename : third_party/rust/rand/src/prng/xorshift.rs => third_party/rust/rand-0.4.3/src/prng/xorshift.rs
rename : third_party/rust/rand/src/rand_impls.rs => third_party/rust/rand-0.4.3/src/rand_impls.rs
rename : third_party/rust/rand/src/read.rs => third_party/rust/rand-0.4.3/src/read.rs
rename : third_party/rust/rand/src/reseeding.rs => third_party/rust/rand-0.4.3/src/reseeding.rs
rename : third_party/rust/rand/src/seq.rs => third_party/rust/rand-0.4.3/src/seq.rs
rename : third_party/rust/rand/utils/ziggurat_tables.py => third_party/rust/rand-0.4.3/utils/ziggurat_tables.py
rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/rand_chacha/LICENSE-APACHE
rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/rand_chacha/LICENSE-MIT
rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/rand_core-0.3.1/LICENSE-APACHE
rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/rand_core-0.3.1/LICENSE-MIT
rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/rand_core/LICENSE-APACHE
rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/rand_core/LICENSE-MIT
rename : third_party/rust/httparse/Cargo.toml => third_party/rust/rand_hc/Cargo.toml
rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/rand_hc/LICENSE-APACHE
rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/rand_hc/LICENSE-MIT
rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/rand_isaac/LICENSE-APACHE
rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/rand_isaac/LICENSE-MIT
rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/rand_jitter/LICENSE-APACHE
rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/rand_jitter/LICENSE-MIT
rename : third_party/rust/rand/src/jitter.rs => third_party/rust/rand_jitter/src/lib.rs
rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/rand_os/LICENSE-APACHE
rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/rand_os/LICENSE-MIT
rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/rand_pcg/LICENSE-APACHE
rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/rand_pcg/LICENSE-MIT
rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/rand_xorshift/LICENSE-APACHE
rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/rand_xorshift/LICENSE-MIT
rename : third_party/rust/httparse/Cargo.toml => third_party/rust/rdrand/Cargo.toml
rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/sha-1/LICENSE-APACHE
rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/sha-1/LICENSE-MIT
extra : moz-landing-system : lando
2019-05-18 13:39:31 +00:00
..
benches Bug 1550903 - Part 2: Revendor dependencies. r=emilio,kats,froydnj 2019-05-18 13:39:31 +00:00
src Bug 1550903 - Part 2: Revendor dependencies. r=emilio,kats,froydnj 2019-05-18 13:39:31 +00:00
tests Bug 1550903 - Part 2: Revendor dependencies. r=emilio,kats,froydnj 2019-05-18 13:39:31 +00:00
.cargo-checksum.json Bug 1550903 - Part 2: Revendor dependencies. r=emilio,kats,froydnj 2019-05-18 13:39:31 +00:00
CHANGELOG.md Bug 1550903 - Part 2: Revendor dependencies. r=emilio,kats,froydnj 2019-05-18 13:39:31 +00:00
COPYRIGHT Bug 1550903 - Part 2: Revendor dependencies. r=emilio,kats,froydnj 2019-05-18 13:39:31 +00:00
Cargo.toml Bug 1550903 - Part 2: Revendor dependencies. r=emilio,kats,froydnj 2019-05-18 13:39:31 +00:00
LICENSE-APACHE Bug 1550903 - Part 2: Revendor dependencies. r=emilio,kats,froydnj 2019-05-18 13:39:31 +00:00
LICENSE-MIT Bug 1550903 - Part 2: Revendor dependencies. r=emilio,kats,froydnj 2019-05-18 13:39:31 +00:00
README.md Bug 1550903 - Part 2: Revendor dependencies. r=emilio,kats,froydnj 2019-05-18 13:39:31 +00:00

README.md

rand_jitter

Build Status Build Status Latest version Book API API Minimum rustc version

Non-physical true random number generator based on timing jitter.

This crate depends on rand_core and is part of the Rand project.

This crate aims to support all of Rust's std platforms with a system-provided entropy source. Unlike other Rand crates, this crate does not support no_std (handling this gracefully is a current discussion topic).

Links:

Features

This crate has optional std support which is disabled by default; this feature is required to provide the JitterRng::new function; without std support a timer must be supplied via JitterRng::new_with_timer.

Quality testing

JitterRng::new() has build-in, but limited, quality testing, however before using JitterRng on untested hardware, or after changes that could effect how the code is optimized (such as a new LLVM version), it is recommend to run the much more stringent NIST SP 800-90B Entropy Estimation Suite.

Use the following code using timer_stats to collect the data:

use rand_jitter::JitterRng;

use std::error::Error;
use std::fs::File;
use std::io::Write;

fn main() -> Result<(), Box<Error>> {
    let mut rng = JitterRng::new()?;

    // 1_000_000 results are required for the
    // NIST SP 800-90B Entropy Estimation Suite
    const ROUNDS: usize = 1_000_000;
    let mut deltas_variable: Vec<u8> = Vec::with_capacity(ROUNDS);
    let mut deltas_minimal: Vec<u8> = Vec::with_capacity(ROUNDS);

    for _ in 0..ROUNDS {
        deltas_variable.push(rng.timer_stats(true) as u8);
        deltas_minimal.push(rng.timer_stats(false) as u8);
    }

    // Write out after the statistics collection loop, to not disturb the
    // test results.
    File::create("jitter_rng_var.bin")?.write(&deltas_variable)?;
    File::create("jitter_rng_min.bin")?.write(&deltas_minimal)?;
    Ok(())
}

This will produce two files: jitter_rng_var.bin and jitter_rng_min.bin. Run the Entropy Estimation Suite in three configurations, as outlined below. Every run has two steps. One step to produce an estimation, another to validate the estimation.

  1. Estimate the expected amount of entropy that is at least available with each round of the entropy collector. This number should be greater than the amount estimated with 64 / test_timer().
    python noniid_main.py -v jitter_rng_var.bin 8
    restart.py -v jitter_rng_var.bin 8 <min-entropy>
    
  2. Estimate the expected amount of entropy that is available in the last 4 bits of the timer delta after running noice sources. Note that a value of 3.70 is the minimum estimated entropy for true randomness.
    python noniid_main.py -v -u 4 jitter_rng_var.bin 4
    restart.py -v -u 4 jitter_rng_var.bin 4 <min-entropy>
    
  3. Estimate the expected amount of entropy that is available to the entropy collector if both noise sources only run their minimal number of times. This measures the absolute worst-case, and gives a lower bound for the available entropy.
    python noniid_main.py -v -u 4 jitter_rng_min.bin 4
    restart.py -v -u 4 jitter_rng_min.bin 4 <min-entropy>
    

License

rand_jitter is distributed under the terms of both the MIT license and the Apache License (Version 2.0).

See LICENSE-APACHE and LICENSE-MIT, and COPYRIGHT for details.