use crate::types::Result;
use rand::rngs::OsRng;
use rand::RngCore;
pub struct RandomGen(OsRng);
impl RandomGen {
pub fn new() -> Result<RandomGen> {
let os_rng = OsRng {};
Ok(RandomGen(os_rng))
}
pub fn next_16_bytes(&mut self) -> [u8; 16] {
let mut buffer = [0u8; 16];
self.0.fill_bytes(&mut buffer);
buffer
}
pub fn next_32_bytes(&mut self) -> [u8; 32] {
let mut buffer = [0u8; 32];
self.0.fill_bytes(&mut buffer);
buffer
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_next_16_bytes_returns_random_bytes() {
let mut gen = RandomGen::new().unwrap();
let a = gen.next_16_bytes();
let b = gen.next_16_bytes();
assert!(a != b);
}
#[test]
fn test_next_32_bytes_returns_random_bytes() {
let mut gen = RandomGen::new().unwrap();
let a = gen.next_32_bytes();
let b = gen.next_32_bytes();
assert!(a != b);
}
}