Skip to main content

Source

Struct Source 

Source
pub struct Source { /* private fields */ }
Expand description

Deterministic pseudorandom number generator based on ChaCha8.

Wraps ChaCha8Rng to provide reproducible random sampling for lattice-based cryptographic operations. Given the same 32-byte seed, the output sequence is identical across platforms.

Not suitable for cryptographic key generation. This type is intended for deterministic test vectors, noise sampling, and reproducible benchmarks, not for generating secrets.

Implementations§

Source§

impl Source

Source

pub fn new(seed: [u8; 32]) -> Source

Creates a new Source from a 32-byte seed.

The same seed always produces the same pseudorandom sequence.

Source

pub fn branch(&mut self) -> ([u8; 32], Source)

Derives an independent child Source for sub-stream splitting.

Draws a fresh 32-byte seed from self and returns both the seed and a new Source seeded with it. The parent and child streams are statistically independent.

Source

pub fn new_seed(&mut self) -> [u8; 32]

Draws 32 random bytes suitable for use as a derived seed.

Source

pub fn next_u64n(&mut self, max: u64, mask: u64) -> u64

Returns a uniformly distributed u64 in [0, max) using rejection sampling with bitmask mask.

mask should be max.next_power_of_two() - 1 (or wider). Each iteration draws one u64 and masks it; values >= max are rejected. Expected iterations: at most 2 when mask is tight.

Source

pub fn next_f64(&mut self, min: f64, max: f64) -> f64

Returns a uniformly distributed f64 in [min, max).

§Panics

Panics if min > max.

Source

pub fn next_i32(&mut self) -> i32

Returns a uniformly distributed i32 (bit-reinterpretation of a random u32).

Source

pub fn next_i64(&mut self) -> i64

Returns a uniformly distributed i64 (bit-reinterpretation of a random u64).

Source

pub fn next_i128(&mut self) -> i128

Returns a uniformly distributed i128 (bit-reinterpretation of a random u128).

Source

pub fn next_u128(&mut self) -> u128

Returns a uniformly distributed u128 by concatenating two u64 draws.

Trait Implementations§

Source§

impl TryRng for Source

Implements TryRng by delegating to the inner ChaCha8Rng. The blanket impl<R: TryRng<Error = Infallible>> Rng for R in rand_core then provides Rng automatically.

Source§

type Error = Infallible

The type returned in the event of a RNG error. Read more
Source§

fn try_next_u32(&mut self) -> Result<u32, <Source as TryRng>::Error>

Return the next random u32.
Source§

fn try_next_u64(&mut self) -> Result<u64, <Source as TryRng>::Error>

Return the next random u64.
Source§

fn try_fill_bytes( &mut self, bytes: &mut [u8], ) -> Result<(), <Source as TryRng>::Error>

Fill dst entirely with random data.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<R> TryRngCore for R
where R: TryRng,

Source§

type Error = <R as TryRng>::Error

👎Deprecated since 0.10.0:

use TryRng instead

Error type.
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<R> Rng for R
where R: TryRng<Error = Infallible> + ?Sized,

Source§

fn next_u32(&mut self) -> u32

Return the next random u32.
Source§

fn next_u64(&mut self) -> u64

Return the next random u64.
Source§

fn fill_bytes(&mut self, dst: &mut [u8])

Fill dest with random data. Read more
Source§

impl<R> RngExt for R
where R: Rng + ?Sized,

Source§

fn random<T>(&mut self) -> T

Return a random value via the StandardUniform distribution. Read more
Source§

fn random_iter<T>(self) -> Iter<StandardUniform, Self, T>

Return an iterator over random variates Read more
Source§

fn random_range<T, R>(&mut self, range: R) -> T
where T: SampleUniform, R: SampleRange<T>,

Generate a random value in the given range. Read more
Source§

fn random_bool(&mut self, p: f64) -> bool

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

fn random_ratio(&mut self, numerator: u32, denominator: u32) -> bool

Return a bool with a probability of numerator/denominator of being true. Read more
Source§

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

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

fn sample_iter<T, D>(self, distr: D) -> Iter<D, Self, T>
where D: Distribution<T>, Self: Sized,

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

fn fill<T>(&mut self, dest: &mut [T])
where T: Fill,

Fill any type implementing Fill with random data Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<R> RngCore for R
where R: Rng,