//! Random data from `/dev/urandom` //! //! Before `getentropy` was standardized in 2024, UNIX didn't have a standardized //! way of getting random data, so systems just followed the precedent set by //! Linux and exposed random devices at `/dev/random` and `/dev/urandom`. Thus, //! for the few systems that support neither `arc4random_buf` nor `getentropy` //! yet, we just read from the file. use crate::fs::File; use crate::io::Read; use crate::sync::OnceLock; static DEVICE: OnceLock = OnceLock::new(); pub fn fill_bytes(bytes: &mut [u8]) { DEVICE .get_or_try_init(|| File::open("/dev/urandom")) .and_then(|mut dev| dev.read_exact(bytes)) .expect("failed to generate random data"); }