wasmtime_wasi/p3/random/
host.rs1use crate::p3::bindings::random::{insecure, insecure_seed, random};
2use crate::random::WasiRandomCtx;
3use cap_rand::Rng;
4use cap_rand::distributions::Standard;
5
6impl random::Host for WasiRandomCtx {
7 fn get_random_bytes(&mut self, len: u64) -> wasmtime::Result<Vec<u8>> {
8 Ok((&mut self.random)
9 .sample_iter(Standard)
10 .take(len.min(self.max_size) as usize)
11 .collect())
12 }
13
14 fn get_random_u64(&mut self) -> wasmtime::Result<u64> {
15 Ok(self.random.sample(Standard))
16 }
17}
18
19impl insecure::Host for WasiRandomCtx {
20 fn get_insecure_random_bytes(&mut self, len: u64) -> wasmtime::Result<Vec<u8>> {
21 Ok((&mut self.insecure_random)
22 .sample_iter(Standard)
23 .take(len.min(self.max_size) as usize)
24 .collect())
25 }
26
27 fn get_insecure_random_u64(&mut self) -> wasmtime::Result<u64> {
28 Ok(self.insecure_random.sample(Standard))
29 }
30}
31
32impl insecure_seed::Host for WasiRandomCtx {
33 fn get_insecure_seed(&mut self) -> wasmtime::Result<(u64, u64)> {
34 let seed: u128 = self.insecure_random_seed;
35 Ok((seed as u64, (seed >> 64) as u64))
36 }
37}