upstream: github.com/robur-coop/kdf
1let test_scrypt_kdf ~password ~salt ~n ~r ~p ~dk_len ~dk =
2 let dk = Ohex.decode dk in
3 fun () ->
4 let edk = Scrypt.derive ~password ~salt ~n ~r ~p ~dk_len in
5 Alcotest.check Alcotest.string "Scrypt test" edk dk
6
7let scrypt_kdf_test1 =
8 test_scrypt_kdf ~password:"" ~salt:"" ~n:16 ~r:1 ~p:1 ~dk_len:64l
9 ~dk:
10 "77d6576238657b203b19ca42c18a0497f16b4844e3074ae8dfdffa3fede21442fcd0069ded0948f8326a753a0fc81f17e8d3e0fb2e0d3628cf35e20c38d18906"
11
12let scrypt_kdf_test2 =
13 test_scrypt_kdf ~password:"password" ~salt:"NaCl" ~n:1024 ~r:8 ~p:16
14 ~dk_len:64l
15 ~dk:
16 "fdbabe1c9d3472007856e7190d01e9fe7c6ad7cbc8237830e77376634b3731622eaf30d92e22a3886ff109279d9830dac727afb94a83ee6d8360cbdfa2cc0640"
17
18let scrypt_kdf_test3 =
19 test_scrypt_kdf ~password:"pleaseletmein" ~salt:"SodiumChloride" ~n:16384 ~r:8
20 ~p:1 ~dk_len:64l
21 ~dk:
22 "7023bdcb3afd7348461c06cd81fd38ebfda8fbba904f8e3ea9b543f6545da1f2d5432955613f0fcf62d49705242a9af9e61e85dc0d651e40dfcf017b45575887"
23
24let scrypt_kdf_test4 =
25 test_scrypt_kdf ~password:"pleaseletmein" ~salt:"SodiumChloride" ~n:1048576
26 ~r:8 ~p:1 ~dk_len:64l
27 ~dk:
28 "2101cb9b6a511aaeaddbbe09cf70f881ec568d574a2ffd4dabe5ee9820adaa478e56fd8f4ba5d09ffa1c6d927c40f4c337304049e8a952fbcbf45c6fa77a41a4"
29
30let scrypt_kdf_tests () =
31 let tests =
32 [
33 ("Test Case 1", `Quick, scrypt_kdf_test1);
34 ("Test Case 2", `Quick, scrypt_kdf_test2);
35 ]
36 in
37 (* Skip test case 3 and 4 for architectures with 31 bit sizes or less, as it requires a buffer larger than Int.max_size in those cases *)
38 if Sys.int_size <= 31 then tests
39 else
40 tests
41 @ [
42 ("Test Case 3", `Quick, scrypt_kdf_test3);
43 ("Test Case 4", `Slow, scrypt_kdf_test4);
44 ]
45
46let suite = ("scrypt", scrypt_kdf_tests ())