From d54ed873329fea235046ec3477e28eb2be8b3417 Mon Sep 17 00:00:00 2001 From: Adam Bratschi-Kaye Date: Tue, 15 Sep 2026 20:39:00 +0000 Subject: [PATCH 1/2] rand for WASIp3 --- src/lib.rs | 1 - src/rand/mod.rs | 3 +++ tests/rand.rs | 14 ++++++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 tests/rand.rs diff --git a/src/lib.rs b/src/lib.rs index c884ad2..84b8ba5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -65,7 +65,6 @@ pub mod io; pub mod iter; #[cfg(all(target_os = "wasi", target_env = "p2"))] pub mod net; -#[cfg(all(target_os = "wasi", target_env = "p2"))] pub mod rand; #[cfg(all(target_os = "wasi", target_env = "p2"))] pub mod runtime; diff --git a/src/rand/mod.rs b/src/rand/mod.rs index 8474b80..98a677c 100644 --- a/src/rand/mod.rs +++ b/src/rand/mod.rs @@ -1,6 +1,9 @@ //! Random number generation. +#[cfg(target_env = "p2")] use wasip2::random; +#[cfg(target_env = "p3")] +use wasip3::random; /// Fill the slice with cryptographically secure random bytes. pub fn get_random_bytes(buf: &mut [u8]) { diff --git a/tests/rand.rs b/tests/rand.rs new file mode 100644 index 0000000..7010217 --- /dev/null +++ b/tests/rand.rs @@ -0,0 +1,14 @@ +/// Check that the rand interface works with empty and non-empty buffers. +#[wstd::test] +async fn fills_random_bytes() { + let mut secure = [0; 32]; + wstd::rand::get_random_bytes(&mut secure); + assert!(secure.iter().any(|byte| *byte != 0)); + + let mut insecure = [0; 32]; + wstd::rand::get_insecure_random_bytes(&mut insecure); + assert!(insecure.iter().any(|byte| *byte != 0)); + + wstd::rand::get_random_bytes(&mut []); + wstd::rand::get_insecure_random_bytes(&mut []); +} From 729189edb2f4df871a02d82f6cdc7470eab762d2 Mon Sep 17 00:00:00 2001 From: Adam Bratschi-Kaye Date: Wed, 16 Sep 2026 14:00:10 +0000 Subject: [PATCH 2/2] only include module under wasi --- src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib.rs b/src/lib.rs index 84b8ba5..ad5aad4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -65,6 +65,7 @@ pub mod io; pub mod iter; #[cfg(all(target_os = "wasi", target_env = "p2"))] pub mod net; +#[cfg(target_os = "wasi")] pub mod rand; #[cfg(all(target_os = "wasi", target_env = "p2"))] pub mod runtime;