feat: conditionally compile without a source of randomness

This commit is contained in:
Zachery Aaron Shores-Chmielewski 2026-01-26 09:10:56 +07:00
parent 98a2733173
commit d14f99c6af
2 changed files with 15 additions and 0 deletions

View file

@ -9,6 +9,7 @@ crate-type = ["cdylib", "rlib"]
[features] [features]
default = ["getrandom"] default = ["getrandom"]
getrandom = ["dep:getrandom"] getrandom = ["dep:getrandom"]
no_random = [] # compile without access to a source of randomness
[dependencies] [dependencies]
getrandom = { version = "0.2", optional = true } getrandom = { version = "0.2", optional = true }

View file

@ -12,6 +12,20 @@ pub(crate) fn get_random(buf: &mut [u8]) {
getrandom::getrandom(buf).unwrap() getrandom::getrandom(buf).unwrap()
} }
#[cfg(feature = "no_random")]
pub(crate) fn get_random(buf: &mut [u8]) {
use core::sync::atomic::{AtomicUsize, Ordering};
static COUNTER: AtomicUsize = AtomicUsize::new(0);
let value = COUNTER.fetch_add(1, Ordering::Relaxed);
let bytes = value.to_ne_bytes();
for (i, byte) in buf.iter_mut().enumerate() {
*byte = bytes[i % core::mem::size_of::<usize>()];
}
}
/// FIXME: remove hard coded defaults /// FIXME: remove hard coded defaults
/// The strategy for message processing is such: /// The strategy for message processing is such:
/// ///