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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
(* TEST
*)
module Test(H: Digest.S) = struct
let string (msg, hh) =
if not ( (H.(equal (string msg) (of_hex hh))))
then (
Printf.printf "Expecting %S\
\nGot %S\n" hh (H.to_hex (H.string msg)); assert false)
let file wlen rlen =
let data = String.init wlen Char.unsafe_chr in
Out_channel.with_open_bin "data.tmp"
(fun oc -> Out_channel.output_string oc data);
let h1 = H.file "data.tmp" in
assert (H.equal h1 (H.string data));
let h2 =
In_channel.with_open_bin "data.tmp"
(fun ic -> H.channel ic rlen) in
assert (H.equal h2 (H.substring data 0 rlen));
Sys.remove "data.tmp"
let run_tests tests =
List.iter string tests;
file 100 99;
file 100_000 10_000
end
(* Test inputs *)
let in1 = ""
let in2 = "a"
let in3 = "abc"
let in4 = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno\
ijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"
let in5 = String.make 100_000 'a'
(* Test vectors *)
module TestMD5 = Test(Digest.MD5)
let _ = TestMD5.run_tests
[in1, "d41d8cd98f00b204e9800998ecf8427e";
in2, "0cc175b9c0f1b6a831c399e269772661";
in3, "900150983cd24fb0d6963f7d28e17f72";
in4, "03dd8807a93175fb062dfb55dc7d359c";
in5, "1af6d6f2f682f76f80e606aeaaee1680"]
module TestBLAKE512 = Test(Digest.BLAKE512)
let _ = TestBLAKE512.run_tests
[in1, "786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419\
d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2ce";
in2, "333fcb4ee1aa7c115355ec66ceac917c8bfd815bf7587d325aec1864edd24e34\
d5abe2c6b1b5ee3face62fed78dbef802f2a85cb91d455a8f5249d330853cb3c";
in3, "ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d1\
7d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923";
in4, "ce741ac5930fe346811175c5227bb7bfcd47f42612fae46c0809514f9e0e3a11\
ee1773287147cdeaeedff50709aa716341fe65240f4ad6777d6bfaf9726e5e52";
in5, "fe89a110a412012e7cc5c0e05b03b48a6b9d0ba108187826c5ac82ce7aa45e7e\
31b054979ec8ca5acd0bcc85f379d848f90f9d1593358cba8d88c7cd94ea8eee"]
module TestBLAKE256 = Test(Digest.BLAKE256)
let _ = TestBLAKE256.run_tests
[in1, "0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8";
in2, "8928aae63c84d87ea098564d1e03ad813f107add474e56aedd286349c0c03ea4";
in3, "bddd813c634239723171ef3fee98579b94964e3bb1cb3e427262c8c068d52319";
in4, "90a0bcf5e5a67ac1578c2754617994cfc248109275a809a0721feebd1e918738";
in5, "b717c86cf745507ec5373f12f21350eb8550039b4263f7ba6e8df9030b5673c6"]
module TestBLAKE128 = Test(Digest.BLAKE128)
let _ = TestBLAKE128.run_tests
[in1, "cae66941d9efbd404e4d88758ea67670";
in2, "27c35e6e9373877f29e562464e46497e";
in3, "cf4ab791c62b8d2b2109c90275287816";
in4, "8fa81cd08c10a6e4dd94583e6fb48c2f";
in5, "5c4b4b762807b3290e7eee0aa9b18655"]
|