use rand::RngCore;
pub fn fill_random(buf: &mut [u8]) {
rand::thread_rng().fill_bytes(buf);
}
pub fn random_bytes<const N: usize>() -> [u8; N] {
let mut buf = [0u8; N];
fill_random(&mut buf);
buf
}
pub fn random_nonce_32() -> [u8; 32] {
random_bytes()
}
pub fn random_nonce_12() -> [u8; 12] {
random_bytes()
}
pub fn random_salt_16() -> [u8; 16] {
random_bytes()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_random_bytes_not_zero() {
let bytes: [u8; 32] = random_bytes();
assert!(bytes.iter().any(|&b| b != 0));
}
#[test]
fn test_random_bytes_unique() {
let a: [u8; 32] = random_bytes();
let b: [u8; 32] = random_bytes();
assert_ne!(a, b);
}
#[test]
fn test_fill_random() {
let mut buf = [0u8; 64];
fill_random(&mut buf);
assert!(buf.iter().any(|&b| b != 0));
}
}