upstream: https://github.com/mirage/mirage-crypto
at main 47 lines 1.5 kB view raw
1let data = ref "" 2 3let cpu_bootstrap_check () = 4 match Crypto_rng.Entropy.cpu_rng_bootstrap with 5 | Error `Not_supported -> print_endline "no CPU RNG available" 6 | Ok cpu_rng_bootstrap -> ( 7 match cpu_rng_bootstrap 1 with 8 | exception Failure _ -> print_endline "bad CPU RNG" 9 | data' -> 10 data := data'; 11 for i = 0 to 10 do 12 try 13 let data' = cpu_rng_bootstrap 1 in 14 if String.equal !data data' then begin 15 Ohex.pp Format.std_formatter data'; 16 failwith ("same data from CPU bootstrap at " ^ string_of_int i) 17 end; 18 data := data' 19 with Failure _ -> 20 print_endline ("CPU RNG failed at " ^ string_of_int i) 21 done) 22 23let whirlwind_bootstrap_check () = 24 for i = 0 to 10 do 25 let data' = Crypto_rng.Entropy.whirlwind_bootstrap 1 in 26 if String.equal !data data' then begin 27 Ohex.pp Format.std_formatter data'; 28 failwith ("same data from whirlwind bootstrap at " ^ string_of_int i) 29 end; 30 data := data' 31 done 32 33let timer_check () = 34 for i = 0 to 10 do 35 let data' = Crypto_rng.Entropy.interrupt_hook () in 36 if String.equal !data data' then begin 37 Ohex.pp Format.std_formatter data'; 38 failwith ("same data from timer at " ^ string_of_int i) 39 end; 40 data := data' 41 done 42 43let () = 44 timer_check (); 45 cpu_bootstrap_check (); 46 whirlwind_bootstrap_check (); 47 print_endline "test entropy OK"