util.rs (1248B)
1 use web_sys::Crypto; 2 3 use crate::{wasm::context::WindowOrWorker, Error, Result}; 4 5 pub fn get_random_values(len: usize) -> Result<Vec<u8>> { 6 let context = WindowOrWorker::new(); 7 let crypto: Crypto = context?.crypto()?; 8 let mut values = vec![0u8; len]; 9 crypto 10 .get_random_values_with_u8_array(&mut values) 11 .map_err(|_err| Error::WasmNoCrypto)?; 12 13 Ok(values) 14 } 15 16 #[cfg(test)] 17 pub mod tests { 18 #![allow(clippy::unwrap_used)] 19 20 #[cfg(target_arch = "wasm32")] 21 use wasm_bindgen_test::*; 22 23 use super::*; 24 25 #[cfg(target_arch = "wasm32")] 26 wasm_bindgen_test::wasm_bindgen_test_configure!(run_in_browser); 27 28 #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)] 29 #[wasm_bindgen_test] 30 fn test_get_random_values() { 31 let len: usize = 32; 32 let random1 = get_random_values(len).unwrap(); 33 let random2 = get_random_values(len).unwrap(); 34 let sum_fn = |sum: u32, i: &u8| sum + (*i as u32); 35 let sum1 = random1.iter().fold(0u32, sum_fn); 36 let sum2 = random2.iter().fold(0u32, sum_fn); 37 38 assert_eq!(random1.len(), len); 39 assert_eq!(random2.len(), len); 40 assert_ne!(sum1, sum2); 41 assert!(sum1 > 0); 42 assert!(sum2 > 0); 43 } 44 }