From d14f99c6af00365d07727e3b22fadfdaa254dd68 Mon Sep 17 00:00:00 2001 From: Zachery Aaron Shores-Chmielewski Date: Mon, 26 Jan 2026 09:10:56 +0700 Subject: [PATCH] feat: conditionally compile without a source of randomness --- Cargo.toml | 1 + src/lib.rs | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index 8b21fb6..1c39c18 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,7 @@ crate-type = ["cdylib", "rlib"] [features] default = ["getrandom"] getrandom = ["dep:getrandom"] +no_random = [] # compile without access to a source of randomness [dependencies] getrandom = { version = "0.2", optional = true } diff --git a/src/lib.rs b/src/lib.rs index 5ea2d6b..9403a29 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -12,6 +12,20 @@ pub(crate) fn get_random(buf: &mut [u8]) { 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::()]; + } +} + /// FIXME: remove hard coded defaults /// The strategy for message processing is such: ///