1 use crate::p3::bindings::random::{insecure, insecure_seed, random};
2 use crate::random::WasiRandomCtx;
3 use cap_rand::Rng;
4 use cap_rand::distributions::Standard;
5 
6 impl random::Host for WasiRandomCtx {
get_random_bytes(&mut self, len: u64) -> wasmtime::Result<Vec<u8>>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 
get_random_u64(&mut self) -> wasmtime::Result<u64>14     fn get_random_u64(&mut self) -> wasmtime::Result<u64> {
15         Ok(self.random.sample(Standard))
16     }
17 }
18 
19 impl insecure::Host for WasiRandomCtx {
get_insecure_random_bytes(&mut self, len: u64) -> wasmtime::Result<Vec<u8>>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 
get_insecure_random_u64(&mut self) -> wasmtime::Result<u64>27     fn get_insecure_random_u64(&mut self) -> wasmtime::Result<u64> {
28         Ok(self.insecure_random.sample(Standard))
29     }
30 }
31 
32 impl insecure_seed::Host for WasiRandomCtx {
get_insecure_seed(&mut self) -> wasmtime::Result<(u64, u64)>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 }
38