forked from
gazagnaire.org/ocaml-crypto
upstream: https://github.com/mirage/mirage-crypto
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"