|
| 1 | +(* TEST |
| 2 | +*) |
| 3 | + |
| 4 | +module Test(H: Digest.S) = struct |
| 5 | + |
| 6 | + let string (msg, hh) = |
| 7 | + if not ( (H.(equal (string msg) (of_hex hh)))) |
| 8 | + then ( |
| 9 | + Printf.printf "Expecting %S\ |
| 10 | + \nGot %S\n" hh (H.to_hex (H.string msg)); assert false) |
| 11 | + |
| 12 | + let file wlen rlen = |
| 13 | + let data = String.init wlen Char.unsafe_chr in |
| 14 | + Out_channel.with_open_bin "data.tmp" |
| 15 | + (fun oc -> Out_channel.output_string oc data); |
| 16 | + let h1 = H.file "data.tmp" in |
| 17 | + assert (H.equal h1 (H.string data)); |
| 18 | + let h2 = |
| 19 | + In_channel.with_open_bin "data.tmp" |
| 20 | + (fun ic -> H.channel ic rlen) in |
| 21 | + assert (H.equal h2 (H.substring data 0 rlen)); |
| 22 | + Sys.remove "data.tmp" |
| 23 | + |
| 24 | + let run_tests tests = |
| 25 | + List.iter string tests; |
| 26 | + file 100 99; |
| 27 | + file 100_000 10_000 |
| 28 | +end |
| 29 | + |
| 30 | +(* Test inputs *) |
| 31 | + |
| 32 | +let in1 = "" |
| 33 | +let in2 = "a" |
| 34 | +let in3 = "abc" |
| 35 | +let in4 = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno\ |
| 36 | + ijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" |
| 37 | +let in5 = String.make 100_000 'a' |
| 38 | + |
| 39 | +(* Test vectors *) |
| 40 | + |
| 41 | +module TestMD5 = Test(Digest.MD5) |
| 42 | +let _ = TestMD5.run_tests |
| 43 | + [in1, "d41d8cd98f00b204e9800998ecf8427e"; |
| 44 | + in2, "0cc175b9c0f1b6a831c399e269772661"; |
| 45 | + in3, "900150983cd24fb0d6963f7d28e17f72"; |
| 46 | + in4, "03dd8807a93175fb062dfb55dc7d359c"; |
| 47 | + in5, "1af6d6f2f682f76f80e606aeaaee1680"] |
| 48 | + |
| 49 | +module TestBLAKE512 = Test(Digest.BLAKE512) |
| 50 | +let _ = TestBLAKE512.run_tests |
| 51 | + [in1, "786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419\ |
| 52 | + d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2ce"; |
| 53 | + in2, "333fcb4ee1aa7c115355ec66ceac917c8bfd815bf7587d325aec1864edd24e34\ |
| 54 | + d5abe2c6b1b5ee3face62fed78dbef802f2a85cb91d455a8f5249d330853cb3c"; |
| 55 | + in3, "ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d1\ |
| 56 | + 7d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923"; |
| 57 | + in4, "ce741ac5930fe346811175c5227bb7bfcd47f42612fae46c0809514f9e0e3a11\ |
| 58 | + ee1773287147cdeaeedff50709aa716341fe65240f4ad6777d6bfaf9726e5e52"; |
| 59 | + in5, "fe89a110a412012e7cc5c0e05b03b48a6b9d0ba108187826c5ac82ce7aa45e7e\ |
| 60 | + 31b054979ec8ca5acd0bcc85f379d848f90f9d1593358cba8d88c7cd94ea8eee"] |
| 61 | + |
| 62 | +module TestBLAKE256 = Test(Digest.BLAKE256) |
| 63 | +let _ = TestBLAKE256.run_tests |
| 64 | + [in1, "0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8"; |
| 65 | + in2, "8928aae63c84d87ea098564d1e03ad813f107add474e56aedd286349c0c03ea4"; |
| 66 | + in3, "bddd813c634239723171ef3fee98579b94964e3bb1cb3e427262c8c068d52319"; |
| 67 | + in4, "90a0bcf5e5a67ac1578c2754617994cfc248109275a809a0721feebd1e918738"; |
| 68 | + in5, "b717c86cf745507ec5373f12f21350eb8550039b4263f7ba6e8df9030b5673c6"] |
| 69 | + |
| 70 | +module TestBLAKE128 = Test(Digest.BLAKE128) |
| 71 | +let _ = TestBLAKE128.run_tests |
| 72 | + [in1, "cae66941d9efbd404e4d88758ea67670"; |
| 73 | + in2, "27c35e6e9373877f29e562464e46497e"; |
| 74 | + in3, "cf4ab791c62b8d2b2109c90275287816"; |
| 75 | + in4, "8fa81cd08c10a6e4dd94583e6fb48c2f"; |
| 76 | + in5, "5c4b4b762807b3290e7eee0aa9b18655"] |
0 commit comments