From 0981e754c40e2ee866f922b8af23be082b08ea9a Mon Sep 17 00:00:00 2001 From: David Sherret Date: Sat, 17 May 2025 11:06:46 -0400 Subject: [PATCH 1/2] feat: add no_op backend --- .github/workflows/build.yml | 11 +++++++++++ Cargo.toml | 2 +- README.md | 1 + src/backends.rs | 3 +++ src/backends/no_op.rs | 12 ++++++++++++ 5 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/backends/no_op.rs diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 79dba1d04..43888e9eb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -273,3 +273,14 @@ jobs: - env: RUSTFLAGS: -Dwarnings --cfg getrandom_backend="custom" run: cargo build --target riscv32i-unknown-none-elf + + no-op: + name: No-op + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + - uses: Swatinem/rust-cache@v2 + - env: + RUSTFLAGS: -Dwarnings --cfg getrandom_backend="no_op" + run: cargo build --target wasm32-unknown-unknown diff --git a/Cargo.toml b/Cargo.toml index 371bc817b..00ae648d5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -83,7 +83,7 @@ wasm-bindgen-test = "0.3" [lints.rust.unexpected_cfgs] level = "warn" check-cfg = [ - 'cfg(getrandom_backend, values("custom", "efi_rng", "rdrand", "rndr", "linux_getrandom", "linux_raw", "wasm_js"))', + 'cfg(getrandom_backend, values("custom", "efi_rng", "rdrand", "rndr", "linux_getrandom", "linux_raw", "wasm_js", "no_op"))', 'cfg(getrandom_msan)', 'cfg(getrandom_windows_legacy)', 'cfg(getrandom_test_linux_fallback)', diff --git a/README.md b/README.md index b0e17d477..87af036ad 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,7 @@ of randomness based on their specific needs: | `wasm_js` | Web Browser, Node.js | `wasm32‑unknown‑unknown`, `wasm32v1-none` | [`Crypto.getRandomValues`]. Requires feature `wasm_js` ([see below](#webassembly-support)). | `efi_rng` | UEFI | `*-unknown‑uefi` | [`EFI_RNG_PROTOCOL`] with `EFI_RNG_ALGORITHM_RAW` (requires `std` and Nigthly compiler) | `custom` | All targets | `*` | User-provided custom implementation (see [custom backend]) +| `no_op` | All targets | `*` | A backend that provides no randomness. Opt-in backends can be enabled using the `getrandom_backend` configuration flag. The flag can be set either by specifying the `rustflags` field in [`.cargo/config.toml`]: diff --git a/src/backends.rs b/src/backends.rs index 2c539df26..61071d2b0 100644 --- a/src/backends.rs +++ b/src/backends.rs @@ -38,6 +38,9 @@ cfg_if! { )); } } + } else if #[cfg(getrandom_backend = "no_op")] { + mod no_op; + pub use no_op::*; } else if #[cfg(all(target_os = "linux", target_env = ""))] { mod linux_raw; pub use linux_raw::*; diff --git a/src/backends/no_op.rs b/src/backends/no_op.rs new file mode 100644 index 000000000..e9cbd7192 --- /dev/null +++ b/src/backends/no_op.rs @@ -0,0 +1,12 @@ +//! Implementation that's not random and does a no-op. +use crate::Error; +use core::mem::MaybeUninit; + +pub use crate::util::{inner_u32, inner_u64}; + +pub fn fill_inner(dest: &mut [MaybeUninit]) -> Result<(), Error> { + for byte in dest { + byte.write(0); + } + Ok(()) +} From a62348b0d74d8abbb2547bcb84957edd60b8c882 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Sat, 17 May 2025 11:33:34 -0400 Subject: [PATCH 2/2] maybe fix no-op ci --- .github/workflows/build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 43888e9eb..0b9bdc3b1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -280,6 +280,8 @@ jobs: steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable + with: + targets: wasm32-unknown-unknown - uses: Swatinem/rust-cache@v2 - env: RUSTFLAGS: -Dwarnings --cfg getrandom_backend="no_op"