c2pa-rs

A fork of https://github.com/contentauth/c2pa-rs/
git clone git://archive.git.mtrnord.blog/mtrnords-photography-manager/c2pa-rs.git
Log | Files | Refs | README

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 }