1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
//! CSPRNG (cryptographically secure pseudo random number generator)
//!
//! This trait is used for generating cryptographically secure data (such as a salsa20-poly1502 key). This trait is implemented by all of `rand`'s CSPRNGs.

/// CSPRNG trait used for generating CSPRNG data.
pub trait CSPRNG: Sized {
    fn generate(&mut self, data: &mut [u8]);
}

#[cfg(feature = "rand")]
impl<T> CSPRNG for T
where
    T: rand::Rng + rand::CryptoRng,
{
    fn generate(&mut self, data: &mut [u8]) {
        self.fill(data);
    }
}