File: test_entropy.ml

package info (click to toggle)
ocaml-mirage-crypto 2.0.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 12,524 kB
  • sloc: ansic: 91,925; ml: 9,700; makefile: 5
file content (48 lines) | stat: -rw-r--r-- 1,464 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

let data = ref ""

let cpu_bootstrap_check () =
  match Mirage_crypto_rng.Entropy.cpu_rng_bootstrap with
  | Error `Not_supported -> print_endline "no CPU RNG available"
  | Ok cpu_rng_bootstrap ->
    match cpu_rng_bootstrap 1 with
    | exception Failure _ -> print_endline "bad CPU RNG"
    | data' ->
      data := data';
      for i = 0 to 10 do
        try
          let data' = cpu_rng_bootstrap 1 in
          if String.equal !data data' then begin
            Ohex.pp Format.std_formatter data';
            failwith ("same data from CPU bootstrap at " ^ string_of_int i);
          end;
          data := data'
        with Failure _ -> print_endline ("CPU RNG failed at " ^ string_of_int i)
      done

let whirlwind_bootstrap_check () =
  for i = 0 to 10 do
    let data' = Mirage_crypto_rng.Entropy.whirlwind_bootstrap 1 in
    if String.equal !data data' then begin
      Ohex.pp Format.std_formatter data';
      failwith ("same data from whirlwind bootstrap at " ^ string_of_int i);
    end;
    data := data'
  done

let timer_check () =
  for i = 0 to 10 do
    Unix.sleepf 0.01;
    let data' = Mirage_crypto_rng.Entropy.interrupt_hook () in
    if String.equal !data data' then begin
      Ohex.pp Format.std_formatter data';
      failwith ("same data from timer at " ^ string_of_int i);
    end;
    data := data'
  done

let () =
  timer_check ();
  cpu_bootstrap_check ();
  whirlwind_bootstrap_check ();
  print_endline "test entropy OK"