#[derive(Clone, Copy, Debug, Default)]
pub struct OsRng;
impl rand_core::RngCore for OsRng {
fn next_u32(&mut self) -> u32 {
let mut b = [0u8; 4];
self.fill_bytes(&mut b);
u32::from_ne_bytes(b)
}
fn next_u64(&mut self) -> u64 {
let mut b = [0u8; 8];
self.fill_bytes(&mut b);
u64::from_ne_bytes(b)
}
fn fill_bytes(&mut self, dest: &mut [u8]) {
getrandom::fill(dest).expect("OS CSPRNG (getrandom) failure");
}
fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), rand_core::Error> {
self.fill_bytes(dest);
Ok(())
}
}
impl rand_core::CryptoRng for OsRng {}