Skip to content

Commit 00f6734

Browse files
committed
Runtime: support for blake2b
1 parent 67f110b commit 00f6734

File tree

8 files changed

+440
-9
lines changed

8 files changed

+440
-9
lines changed

.ocamlformat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@ break-separators=before
1010
dock-collection-brackets=false
1111
margin=90
1212
module-item-spacing=sparse
13-
version=0.26.0
13+
version=0.26.1
1414
ocaml-version=4.08.0

compiler/lib-runtime-files/js_of_ocaml_compiler_runtime_files.ml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ let runtime =
5757
; effect
5858
; zstd
5959
; runtime_events
60+
; blake2
6061
]
6162

6263
include Files

compiler/lib-runtime-files/tests/all.ml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ let%expect_test _ =
1515
+backtrace.js
1616
+bigarray.js
1717
+bigstring.js
18+
+blake2.js
1819
+compare.js
1920
+domain.js
2021
+dynlink.js
@@ -59,6 +60,7 @@ let%expect_test _ =
5960
+backtrace.js
6061
+bigarray.js
6162
+bigstring.js
63+
+blake2.js
6264
+compare.js
6365
+domain.js
6466
+effect.js

compiler/tests-full/stdlib.cma.expected.js

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24020,6 +24020,9 @@
2402024020
cst_Digest_of_hex$1 = "Digest.of_hex",
2402124021
cst_Digest_substring$1 = "Digest.substring",
2402224022
cst_Digest_to_hex$1 = "Digest.to_hex",
24023+
caml_blake2_final = runtime.caml_blake2_final,
24024+
caml_blake2_string = runtime.caml_blake2_string,
24025+
caml_blake2_update = runtime.caml_blake2_update,
2402324026
caml_bytes_unsafe_set = runtime.caml_bytes_unsafe_set,
2402424027
caml_create_bytes = runtime.caml_create_bytes,
2402524028
caml_maybe_attach_backtrace = runtime.caml_maybe_attach_backtrace,
@@ -24122,7 +24125,7 @@
2412224125
compare = Stdlib_String[10],
2412324126
equal = Stdlib_String[9];
2412424127
function string(str){
24125-
/*<<digest.ml:85:4>>*/ return /*<<digest.ml:85:4>>*/ runtime.caml_blake2_string
24128+
/*<<digest.ml:85:4>>*/ return /*<<digest.ml:85:4>>*/ caml_blake2_string
2412624129
(hash_length, cst, str, 0, caml_ml_string_length(str));
2412724130
/*<<digest.ml:85:58>>*/ }
2412824131
function bytes(b){
@@ -24140,7 +24143,7 @@
2414024143
if(_g_)
2414124144
/*<<digest.ml:92:9>>*/ /*<<digest.ml:92:9>>*/ caml_call1
2414224145
(Stdlib[1], cst_Digest_substring);
24143-
/*<<digest.ml:93:4>>*/ return /*<<digest.ml:93:4>>*/ runtime.caml_blake2_string
24146+
/*<<digest.ml:93:4>>*/ return /*<<digest.ml:93:4>>*/ caml_blake2_string
2414424147
(hash_length, cst, str, ofs, len);
2414524148
/*<<digest.ml:93:44>>*/ }
2414624149
function subbytes(b, ofs, len){
@@ -24160,7 +24163,7 @@
2416024163
var toread$0 = toread;
2416124164
/*<<digest.ml:111:8>>*/ for(;;){
2416224165
if(0 === toread$0)
24163-
/*<<digest.ml:111:27>>*/ return /*<<digest.ml:111:27>>*/ runtime.caml_blake2_final
24166+
/*<<digest.ml:111:27>>*/ return /*<<digest.ml:111:27>>*/ caml_blake2_final
2416424167
(ctx, hash_length);
2416524168
/*<<digest.ml:112:44>>*/ var
2416624169
/*<<digest.ml:112:44>>*/ _e_ =
@@ -24172,7 +24175,7 @@
2417224175
/*<<digest.ml:113:10>>*/ if(0 === n)
2417324176
/*<<digest.ml:114:15>>*/ throw /*<<digest.ml:114:15>>*/ caml_maybe_attach_backtrace
2417424177
(Stdlib[12], 1);
24175-
/*<<digest.ml:116:12>>*/ /*<<digest.ml:116:12>>*/ runtime.caml_blake2_update
24178+
/*<<digest.ml:116:12>>*/ /*<<digest.ml:116:12>>*/ caml_blake2_update
2417624179
(ctx,
2417724180
/*<<digest.ml:116:23>>*/ caml_call1(Stdlib_Bytes[44], buf),
2417824181
0,
@@ -24187,9 +24190,9 @@
2418724190
/*<<digest.ml:104:16>>*/ caml_call4
2418824191
(Stdlib_In_channel[16], ic, buf, 0, buf_size);
2418924192
/*<<digest.ml:105:8>>*/ if(0 === n$0)
24190-
/*<<digest.ml:106:13>>*/ return /*<<digest.ml:106:13>>*/ runtime.caml_blake2_final
24193+
/*<<digest.ml:106:13>>*/ return /*<<digest.ml:106:13>>*/ caml_blake2_final
2419124194
(ctx, hash_length);
24192-
/*<<digest.ml:107:14>>*/ /*<<digest.ml:107:14>>*/ runtime.caml_blake2_update
24195+
/*<<digest.ml:107:14>>*/ /*<<digest.ml:107:14>>*/ caml_blake2_update
2419324196
(ctx,
2419424197
/*<<digest.ml:107:25>>*/ caml_call1(Stdlib_Bytes[44], buf),
2419524198
0,
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
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"]

compiler/tests-ocaml/lib-digest/dune

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
(executables
2-
(names md5)
2+
(names md5 digests)
33
(libraries)
44
(modes js))
55

@@ -16,3 +16,9 @@
1616
(deps md5.reference md5.referencejs)
1717
(action
1818
(diff md5.reference md5.referencejs)))
19+
20+
(rule
21+
(alias runtest)
22+
(deps digests.bc.js)
23+
(action
24+
(run node ./digests.bc.js)))

0 commit comments

Comments
 (0)