49 lines
1.3 KiB
OCaml
49 lines
1.3 KiB
OCaml
open OUnit2
|
|
|
|
open Mirage_crypto.Uncommon
|
|
open Mirage_crypto_pk
|
|
|
|
open Test_common
|
|
|
|
let n_encode_decode_selftest ~typ ~bound n =
|
|
typ ^ "selftest" >:: times ~n @@ fun _ ->
|
|
let r = Z_extra.gen bound in
|
|
let s = Z_extra.(of_octets_be @@ to_octets_be r)
|
|
and t = Z_extra.(of_octets_be @@ to_octets_be ~size:24 r) in
|
|
assert_equal r s;
|
|
assert_equal r t
|
|
|
|
let n_decode_reencode_selftest ~typ ~bytes n =
|
|
typ ^ " selftest" >:: times ~n @@ fun _ ->
|
|
let cs = Mirage_crypto_rng.generate bytes in
|
|
let cs' = Z_extra.(to_octets_be ~size:bytes @@ of_octets_be cs) in
|
|
assert_oct_equal cs cs'
|
|
|
|
let random_n_selftest ~typ n bounds =
|
|
typ ^ " selftest" >::: (
|
|
bounds |> List.map @@ fun (lo, hi) ->
|
|
"selftest" >:: times ~n @@ fun _ ->
|
|
let x = Z_extra.gen_r lo hi in
|
|
if x < lo || x >= hi then assert_failure "range error"
|
|
)
|
|
|
|
let int_safe_bytes = Sys.word_size // 8 - 1
|
|
|
|
let suite = [
|
|
"Numeric extraction 1" >::: [
|
|
n_encode_decode_selftest
|
|
~typ:"z" ~bound:Z.(of_int64 Int64.max_int) 2000 ;
|
|
] ;
|
|
|
|
"Numeric extraction 2" >::: [
|
|
n_decode_reencode_selftest ~typ:"z" ~bytes:37 2000 ;
|
|
];
|
|
|
|
"RNG extraction" >::: [
|
|
random_n_selftest ~typ:"Z" 1000 [
|
|
Z.(of_int 7, of_int 135);
|
|
Z.(of_int 0, of_int 536870913);
|
|
Z.(of_int 0, of_int64 2305843009213693953L)
|
|
] ;
|
|
]
|
|
]
|