summaryrefslogtreecommitdiff
path: root/test/test.ml
diff options
context:
space:
mode:
Diffstat (limited to 'test/test.ml')
-rw-r--r--test/test.ml86
1 files changed, 78 insertions, 8 deletions
diff --git a/test/test.ml b/test/test.ml
index d5b7690..8ebfaff 100644
--- a/test/test.ml
+++ b/test/test.ml
@@ -41,6 +41,10 @@ let test test_number answer correct_answer =
printf " %d..." test_number
end
+(* Whether to run the most expensive tests or not *)
+
+let long_tests = ref false
+
(* Useful auxiliaries *)
let hex s = transform_string (Hexa.decode()) s
@@ -318,6 +322,7 @@ let _ =
(hex "84983E441C3BD26EBAAE4AA1F95129E5E54670F1");
test 6 (hash_million_a (Hash.sha1()))
(hex "34AA973CD4C4DAA4F61EEB2BDBAD27316534016F");
+ if !long_tests then
test 99 (hash_extremely_long (Hash.sha1()))
(hex "7789f0c9 ef7bfc40 d9331114 3dfbe69e 2017f592")
@@ -346,6 +351,7 @@ let _ =
(hex "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1");
test 4 (hash_million_a (Hash.sha2 256))
(hex "cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0");
+ if !long_tests then
test 99 (hash_extremely_long (Hash.sha256()))
(hex "50e72a0e 26442fe2 552dc393 8ac58658 228c0cbf b1d2ca87 2ae43526 6fcd055e")
@@ -376,6 +382,7 @@ let _ =
(hex "8e959b75dae313da 8cf4f72814fc143f 8f7779c6eb9f7fa1 7299aeadb6889018 501d289e4900f7e4 331b99dec4b5433a c7d329eeb6dd2654 5e96e55b874be909");
test 5 (hash_million_a (Hash.sha2 512))
(hex "e718483d0ce76964 4e2e42c7bc15b463 8e1f98b13b204428 5632a803afa973eb de0ff244877ea60a 4cb0432ce577c31b eb009c5c2c49aa2e 4eadb217ad8cc09b");
+ if !long_tests then
test 99 (hash_extremely_long (Hash.sha2 512))
(hex "b47c933421ea2db1 49ad6e10fce6c7f9 3d0752380180ffd7 f4629a712134831d 77be6091b819ed35 2c2967a2e2d4fa50 50723c9630691f1a 05a7281dbe6c1086")
@@ -427,6 +434,7 @@ let _ =
(hex "eee9e24d78c18553 37983451df97c8ad 9eedf256c6334f8e 948d252d5e0e7684 7aa0774ddb90a842 190d2c558b4b8340");
test 20 (hash_million_a (Hash.sha3 512))
(hex "3c3a876da14034ab 60627c077bb98f7e 120a2a5370212dff b3385a18d4f38859 ed311d0a9d5141ce 9cc5c66ee689b266 a8aa18ace8282a0e 0db596c90b0a7b87");
+ if !long_tests then
test 99 (hash_extremely_long (Hash.sha3 512))
(hex "235ffd53504ef836 a1342b488f483b39 6eabbfe642cf78ee 0d31feec788b23d0 d18d5c339550dd59 58a500d4b95363da 1b5fa18affc1bab2 292dc63b7d85097c")
@@ -479,11 +487,67 @@ let _ =
(hex "2c23146a63a29acf 99e73b88f8c24eaa 7dc60aa771780ccc 006afbfa8fe2479b 2dd2b21362337441 ac12b515911957ff");
test 20 (hash 512 s)
(hex "0eab42de4c3ceb92 35fc91acffe746b2 9c29a8c366b7c60e 4e67c466f36a4304 c00fa9caf9d87976 ba469bcbe06713b4 35f091ef2769fb16 0cdab33d3670680e");
+ if !long_tests then
test 98 (hash_extremely_long (Hash.keccak 256))
(hex "5f313c39963dcf79 2b5470d4ade9f3a3 56a3e4021748690a 958372e2b06f82a4");
+ if !long_tests then
test 99 (hash_extremely_long (Hash.keccak 512))
(hex "3e122edaf3739823 1cfaca4c7c216c9d 66d5b899ec1d7ac6 17c40c7261906a45 fc01617a021e5da3 bd8d4182695b5cb7 85a28237cbb16759 0e34718e56d8aab8")
+(* BLAKE2b *)
+
+let _ =
+ testing_function "BLAKE2b-512";
+ let hash s = hash_string (Hash.blake2b512 ()) s in
+ test 1 (hash "")
+ (hex "786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2ce");
+ test 2 (hash "abc")
+ (hex "ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d17d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923");
+ test 3 (hash "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu")
+ (hex "ce741ac5930fe346811175c5227bb7bfcd47f42612fae46c0809514f9e0e3a11ee1773287147cdeaeedff50709aa716341fe65240f4ad6777d6bfaf9726e5e52")
+
+let _ =
+ testing_function "BLAKE2b-512 (keyed)";
+ let mkstring n = String.init n (fun i -> Char.chr i) in
+ let key = mkstring 0x40 in
+ let hash s = hash_string (MAC.blake2b512 key) s in
+ List.iter
+ (fun (len, result) -> test len (hash (mkstring len)) (hex result))
+ [
+0, "10ebb67700b1868efb4417987acf4690ae9d972fb7a590c2f02871799aaa4786b5e996e8f0f4eb981fc214b005f42d2ff4233499391653df7aefcbc13fc51568";
+1, "961f6dd1e4dd30f63901690c512e78e4b45e4742ed197c3c5e45c549fd25f2e4187b0bc9fe30492b16b0d0bc4ef9b0f34c7003fac09a5ef1532e69430234cebd";
+2, "da2cfbe2d8409a0f38026113884f84b50156371ae304c4430173d08a99d9fb1b983164a3770706d537f49e0c916d9f32b95cc37a95b99d857436f0232c88a965";
+3, "33d0825dddf7ada99b0e7e307104ad07ca9cfd9692214f1561356315e784f3e5a17e364ae9dbb14cb2036df932b77f4b292761365fb328de7afdc6d8998f5fc1";
+4, "beaa5a3d08f3807143cf621d95cd690514d0b49efff9c91d24b59241ec0eefa5f60196d407048bba8d2146828ebcb0488d8842fd56bb4f6df8e19c4b4daab8ac";
+5, "098084b51fd13deae5f4320de94a688ee07baea2800486689a8636117b46c1f4c1f6af7f74ae7c857600456a58a3af251dc4723a64cc7c0a5ab6d9cac91c20bb";
+6, "6044540d560853eb1c57df0077dd381094781cdb9073e5b1b3d3f6c7829e12066bbaca96d989a690de72ca3133a83652ba284a6d62942b271ffa2620c9e75b1f";
+7, "7a8cfe9b90f75f7ecb3acc053aaed6193112b6f6a4aeeb3f65d3de541942deb9e2228152a3c4bbbe72fc3b12629528cfbb09fe630f0474339f54abf453e2ed52";
+128, "72065ee4dd91c2d8509fa1fc28a37c7fc9fa7d5b3f8ad3d0d7a25626b57b1b44788d4caf806290425f9890a3a2a35a905ab4b37acfd0da6e4517b2525c9651e4";
+192, "8d6cf87c08380d2d1506eee46fd4222d21d8c04e585fbfd08269c98f702833a156326a0724656400ee09351d57b440175e2a5de93cc5f80db6daf83576cf75fa";
+255, "142709d62e28fcccd0af97fad0f8465b971e82201dc51070faa0372aa43e92484be1c1e73ba10906d5d1853db6a4106e0a7bf9800d373d6dee2d46d62ef2a461"
+ ]
+
+let _ =
+ testing_function "BLAKE2s-256 (keyed)";
+ let mkstring n = String.init n (fun i -> Char.chr i) in
+ let key = mkstring 0x20 in
+ let hash s = hash_string (MAC.blake2s256 key) s in
+ List.iter
+ (fun (len, result) -> test len (hash (mkstring len)) (hex result))
+ [
+0, "48a8997da407876b3d79c0d92325ad3b89cbb754d86ab71aee047ad345fd2c49";
+1, "40d15fee7c328830166ac3f918650f807e7e01e177258cdc0a39b11f598066f1";
+2, "6bb71300644cd3991b26ccd4d274acd1adeab8b1d7914546c1198bbe9fc9d803";
+3, "1d220dbe2ee134661fdf6d9e74b41704710556f2f6e5a091b227697445dbea6b";
+4, "f6c3fbadb4cc687a0064a5be6e791bec63b868ad62fba61b3757ef9ca52e05b2";
+5, "49c1f21188dfd769aea0e911dd6b41f14dab109d2b85977aa3088b5c707e8598";
+6, "fdd8993dcd43f696d44f3cea0ff35345234ec8ee083eb3cada017c7f78c17143";
+7, "e6c8125637438d0905b749f46560ac89fd471cf8692e28fab982f73f019b83a9";
+128, "0c311f38c35a4fb90d651c289d486856cd1413df9b0677f53ece2cd9e477c60a";
+192, "5950d39a23e1545f301270aa1a12f2e6c453776e4d6355de425cc153f9818867";
+255, "3fb735061abc519dfe979e54c1ee5bfad0a9d858b3315bad34bde999efd724dd"
+ ]
+
(* RIPEMD-160 *)
let _ =
testing_function "RIPEMD-160";
@@ -904,14 +968,20 @@ let chisquare b =
let t = Char.code (Bytes.get b i) in
freq.(t) <- freq.(t) + 1
done;
- let t = Array.fold_left (fun s x -> let x = float x in s +. x *. x) 0.0 freq
- and r = float r
- and n = float n in
- let sr = 2.0 *. sqrt r in
- abs_float ((r *. t /. n) -. n -. r) <= sr
-
-let test_rng ?(len = 100000) (r: Random.rng) =
- let b = Bytes.create len in
+ let expected = float n /. float r in
+ let t =
+ Array.fold_left
+ (fun s x -> let d = float x -. expected in d *. d +. s)
+ 0.0 freq in
+ let chi2 = t /. expected in
+ let degfree = float r -. 1.0 in
+ (* The degree of freedom is high, so we approximate as a normal
+ distribution with mean equal to degfree and variance 2 * degfree.
+ Four sigmas correspond to a 99.9936% confidence interval. *)
+ chi2 <= degfree +. 4.0 *. sqrt (2.0 *. degfree)
+
+let test_rng ?(len = 10000) (r: Random.rng) =
+ let b = Bytes.make len '\000' in
r#random_bytes b 0 len;
r#wipe;
printf "chi^2 %s\n"