use crypto_core::{CryptoError, RngFailureKind, RngOutputKind};
use getrandom::{rand_core::TryRng, SysRng};
pub trait SecureRandom {
fn fill_secure(&mut self, output: &mut [u8], kind: RngOutputKind) -> Result<(), CryptoError>;
}
#[derive(Default)]
pub struct OsSecureRandom;
impl SecureRandom for OsSecureRandom {
fn fill_secure(&mut self, output: &mut [u8], kind: RngOutputKind) -> Result<(), CryptoError> {
SysRng.try_fill_bytes(output).map_err(|_| CryptoError::Rng {
output: kind,
kind: RngFailureKind::EntropyUnavailable,
})
}
}