blake3-rb 1.5.4 → 1.5.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Cargo.lock +143 -58
- data/Cargo.toml +1 -0
- data/ext/digest/blake3_ext/Cargo.toml +10 -2
- data/ext/digest/blake3_ext/build.rs +4 -0
- data/ext/digest/blake3_ext/src/lib.rs +138 -40
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 79bfa02f801439d4336e9cc5d1c6f66b3fea5ee900fa327c98a76006289610cb
|
|
4
|
+
data.tar.gz: a84aff893fc9fb311103464071c2628fe398feb370f8afb2092c8a72663fd473
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f55aad4696d2c13f956472e3193c68501fef7f1a698d86757bb251d533c6a44d2799d24842053e49ddab0f2ca01462d34583daf8fd9a61513a0341ac0bfde95c
|
|
7
|
+
data.tar.gz: 06ffcdbc95270b3ae7b3b7a9ff242cd5cb9388aef94d8e7fcfc669d24e357d2913b09f1566eb24785c55e39044fa971c342eb97dfee343f16bc8161e13434e06
|
data/Cargo.lock
CHANGED
|
@@ -4,9 +4,9 @@ version = 3
|
|
|
4
4
|
|
|
5
5
|
[[package]]
|
|
6
6
|
name = "aho-corasick"
|
|
7
|
-
version = "1.1.
|
|
7
|
+
version = "1.1.3"
|
|
8
8
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
9
|
-
checksum = "
|
|
9
|
+
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
|
|
10
10
|
dependencies = [
|
|
11
11
|
"memchr",
|
|
12
12
|
]
|
|
@@ -45,15 +45,15 @@ dependencies = [
|
|
|
45
45
|
|
|
46
46
|
[[package]]
|
|
47
47
|
name = "bitflags"
|
|
48
|
-
version = "2.
|
|
48
|
+
version = "2.5.0"
|
|
49
49
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
50
|
-
checksum = "
|
|
50
|
+
checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1"
|
|
51
51
|
|
|
52
52
|
[[package]]
|
|
53
53
|
name = "blake3"
|
|
54
|
-
version = "1.5.
|
|
54
|
+
version = "1.5.1"
|
|
55
55
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
56
|
-
checksum = "
|
|
56
|
+
checksum = "30cca6d3674597c30ddf2c587bf8d9d65c9a84d2326d941cc79c9842dfe0ef52"
|
|
57
57
|
dependencies = [
|
|
58
58
|
"arrayref",
|
|
59
59
|
"arrayvec",
|
|
@@ -67,17 +67,18 @@ name = "blake3_ext"
|
|
|
67
67
|
version = "0.1.0"
|
|
68
68
|
dependencies = [
|
|
69
69
|
"blake3",
|
|
70
|
+
"hex",
|
|
71
|
+
"rand",
|
|
70
72
|
"rb-sys",
|
|
73
|
+
"rb-sys-env",
|
|
74
|
+
"rb-sys-test-helpers",
|
|
71
75
|
]
|
|
72
76
|
|
|
73
77
|
[[package]]
|
|
74
78
|
name = "cc"
|
|
75
|
-
version = "1.0.
|
|
79
|
+
version = "1.0.97"
|
|
76
80
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
77
|
-
checksum = "
|
|
78
|
-
dependencies = [
|
|
79
|
-
"libc",
|
|
80
|
-
]
|
|
81
|
+
checksum = "099a5357d84c4c61eb35fc8eafa9a79a902c2f76911e5747ced4e032edd8d9b4"
|
|
81
82
|
|
|
82
83
|
[[package]]
|
|
83
84
|
name = "cexpr"
|
|
@@ -113,9 +114,20 @@ checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2"
|
|
|
113
114
|
|
|
114
115
|
[[package]]
|
|
115
116
|
name = "either"
|
|
116
|
-
version = "1.
|
|
117
|
+
version = "1.11.0"
|
|
117
118
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
118
|
-
checksum = "
|
|
119
|
+
checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2"
|
|
120
|
+
|
|
121
|
+
[[package]]
|
|
122
|
+
name = "getrandom"
|
|
123
|
+
version = "0.2.15"
|
|
124
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
125
|
+
checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
|
|
126
|
+
dependencies = [
|
|
127
|
+
"cfg-if",
|
|
128
|
+
"libc",
|
|
129
|
+
"wasi",
|
|
130
|
+
]
|
|
119
131
|
|
|
120
132
|
[[package]]
|
|
121
133
|
name = "glob"
|
|
@@ -123,6 +135,12 @@ version = "0.3.1"
|
|
|
123
135
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
124
136
|
checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
|
|
125
137
|
|
|
138
|
+
[[package]]
|
|
139
|
+
name = "hex"
|
|
140
|
+
version = "0.4.3"
|
|
141
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
142
|
+
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
|
|
143
|
+
|
|
126
144
|
[[package]]
|
|
127
145
|
name = "itertools"
|
|
128
146
|
version = "0.12.1"
|
|
@@ -146,25 +164,25 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
|
|
|
146
164
|
|
|
147
165
|
[[package]]
|
|
148
166
|
name = "libc"
|
|
149
|
-
version = "0.2.
|
|
167
|
+
version = "0.2.154"
|
|
150
168
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
151
|
-
checksum = "
|
|
169
|
+
checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346"
|
|
152
170
|
|
|
153
171
|
[[package]]
|
|
154
172
|
name = "libloading"
|
|
155
|
-
version = "0.8.
|
|
173
|
+
version = "0.8.3"
|
|
156
174
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
157
|
-
checksum = "
|
|
175
|
+
checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19"
|
|
158
176
|
dependencies = [
|
|
159
177
|
"cfg-if",
|
|
160
|
-
"windows-
|
|
178
|
+
"windows-targets",
|
|
161
179
|
]
|
|
162
180
|
|
|
163
181
|
[[package]]
|
|
164
182
|
name = "memchr"
|
|
165
|
-
version = "2.7.
|
|
183
|
+
version = "2.7.2"
|
|
166
184
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
167
|
-
checksum = "
|
|
185
|
+
checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d"
|
|
168
186
|
|
|
169
187
|
[[package]]
|
|
170
188
|
name = "minimal-lexical"
|
|
@@ -182,38 +200,74 @@ dependencies = [
|
|
|
182
200
|
"minimal-lexical",
|
|
183
201
|
]
|
|
184
202
|
|
|
203
|
+
[[package]]
|
|
204
|
+
name = "ppv-lite86"
|
|
205
|
+
version = "0.2.17"
|
|
206
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
207
|
+
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
|
|
208
|
+
|
|
185
209
|
[[package]]
|
|
186
210
|
name = "proc-macro2"
|
|
187
|
-
version = "1.0.
|
|
211
|
+
version = "1.0.82"
|
|
188
212
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
189
|
-
checksum = "
|
|
213
|
+
checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b"
|
|
190
214
|
dependencies = [
|
|
191
215
|
"unicode-ident",
|
|
192
216
|
]
|
|
193
217
|
|
|
194
218
|
[[package]]
|
|
195
219
|
name = "quote"
|
|
196
|
-
version = "1.0.
|
|
220
|
+
version = "1.0.36"
|
|
197
221
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
198
|
-
checksum = "
|
|
222
|
+
checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
|
|
199
223
|
dependencies = [
|
|
200
224
|
"proc-macro2",
|
|
201
225
|
]
|
|
202
226
|
|
|
227
|
+
[[package]]
|
|
228
|
+
name = "rand"
|
|
229
|
+
version = "0.8.5"
|
|
230
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
231
|
+
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
|
|
232
|
+
dependencies = [
|
|
233
|
+
"libc",
|
|
234
|
+
"rand_chacha",
|
|
235
|
+
"rand_core",
|
|
236
|
+
]
|
|
237
|
+
|
|
238
|
+
[[package]]
|
|
239
|
+
name = "rand_chacha"
|
|
240
|
+
version = "0.3.1"
|
|
241
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
242
|
+
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
|
|
243
|
+
dependencies = [
|
|
244
|
+
"ppv-lite86",
|
|
245
|
+
"rand_core",
|
|
246
|
+
]
|
|
247
|
+
|
|
248
|
+
[[package]]
|
|
249
|
+
name = "rand_core"
|
|
250
|
+
version = "0.6.4"
|
|
251
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
252
|
+
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
|
|
253
|
+
dependencies = [
|
|
254
|
+
"getrandom",
|
|
255
|
+
]
|
|
256
|
+
|
|
203
257
|
[[package]]
|
|
204
258
|
name = "rb-sys"
|
|
205
|
-
version = "0.9.
|
|
259
|
+
version = "0.9.97"
|
|
206
260
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
207
|
-
checksum = "
|
|
261
|
+
checksum = "47d30bcad206b51f2f66121190ca678dce1fdf3a2eae0ac5d838d1818b19bdf5"
|
|
208
262
|
dependencies = [
|
|
209
263
|
"rb-sys-build",
|
|
210
264
|
]
|
|
211
265
|
|
|
212
266
|
[[package]]
|
|
213
267
|
name = "rb-sys-build"
|
|
214
|
-
version = "0.9.
|
|
268
|
+
version = "0.9.97"
|
|
215
269
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
216
|
-
checksum = "
|
|
270
|
+
checksum = "3cbd92f281615f3c2dcb9dcb0f0576624752afbf9a7f99173b37c4b55b62dd8a"
|
|
217
271
|
dependencies = [
|
|
218
272
|
"bindgen",
|
|
219
273
|
"lazy_static",
|
|
@@ -224,11 +278,38 @@ dependencies = [
|
|
|
224
278
|
"syn",
|
|
225
279
|
]
|
|
226
280
|
|
|
281
|
+
[[package]]
|
|
282
|
+
name = "rb-sys-env"
|
|
283
|
+
version = "0.1.2"
|
|
284
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
285
|
+
checksum = "a35802679f07360454b418a5d1735c89716bde01d35b1560fc953c1415a0b3bb"
|
|
286
|
+
|
|
287
|
+
[[package]]
|
|
288
|
+
name = "rb-sys-test-helpers"
|
|
289
|
+
version = "0.2.0"
|
|
290
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
291
|
+
checksum = "bbd592029353df7955a76ca0b1bf0d9ccc57feab96615f80d1fe756462864949"
|
|
292
|
+
dependencies = [
|
|
293
|
+
"rb-sys",
|
|
294
|
+
"rb-sys-env",
|
|
295
|
+
"rb-sys-test-helpers-macros",
|
|
296
|
+
]
|
|
297
|
+
|
|
298
|
+
[[package]]
|
|
299
|
+
name = "rb-sys-test-helpers-macros"
|
|
300
|
+
version = "0.2.0"
|
|
301
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
302
|
+
checksum = "c21f156459adb755d58f73dbd783dc1de8b403635e637f7d1daec1c7a920c1f5"
|
|
303
|
+
dependencies = [
|
|
304
|
+
"quote",
|
|
305
|
+
"syn",
|
|
306
|
+
]
|
|
307
|
+
|
|
227
308
|
[[package]]
|
|
228
309
|
name = "regex"
|
|
229
|
-
version = "1.10.
|
|
310
|
+
version = "1.10.4"
|
|
230
311
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
231
|
-
checksum = "
|
|
312
|
+
checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c"
|
|
232
313
|
dependencies = [
|
|
233
314
|
"aho-corasick",
|
|
234
315
|
"memchr",
|
|
@@ -238,9 +319,9 @@ dependencies = [
|
|
|
238
319
|
|
|
239
320
|
[[package]]
|
|
240
321
|
name = "regex-automata"
|
|
241
|
-
version = "0.4.
|
|
322
|
+
version = "0.4.6"
|
|
242
323
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
243
|
-
checksum = "
|
|
324
|
+
checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea"
|
|
244
325
|
dependencies = [
|
|
245
326
|
"aho-corasick",
|
|
246
327
|
"memchr",
|
|
@@ -249,9 +330,9 @@ dependencies = [
|
|
|
249
330
|
|
|
250
331
|
[[package]]
|
|
251
332
|
name = "regex-syntax"
|
|
252
|
-
version = "0.8.
|
|
333
|
+
version = "0.8.3"
|
|
253
334
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
254
|
-
checksum = "
|
|
335
|
+
checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56"
|
|
255
336
|
|
|
256
337
|
[[package]]
|
|
257
338
|
name = "rustc-hash"
|
|
@@ -273,9 +354,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
|
|
|
273
354
|
|
|
274
355
|
[[package]]
|
|
275
356
|
name = "syn"
|
|
276
|
-
version = "2.0.
|
|
357
|
+
version = "2.0.64"
|
|
277
358
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
278
|
-
checksum = "
|
|
359
|
+
checksum = "7ad3dee41f36859875573074334c200d1add8e4a87bb37113ebd31d926b7b11f"
|
|
279
360
|
dependencies = [
|
|
280
361
|
"proc-macro2",
|
|
281
362
|
"quote",
|
|
@@ -289,23 +370,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
289
370
|
checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
|
|
290
371
|
|
|
291
372
|
[[package]]
|
|
292
|
-
name = "
|
|
293
|
-
version = "0.
|
|
373
|
+
name = "wasi"
|
|
374
|
+
version = "0.11.0+wasi-snapshot-preview1"
|
|
294
375
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
295
|
-
checksum = "
|
|
296
|
-
dependencies = [
|
|
297
|
-
"windows-targets",
|
|
298
|
-
]
|
|
376
|
+
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
|
|
299
377
|
|
|
300
378
|
[[package]]
|
|
301
379
|
name = "windows-targets"
|
|
302
|
-
version = "0.
|
|
380
|
+
version = "0.52.5"
|
|
303
381
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
304
|
-
checksum = "
|
|
382
|
+
checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb"
|
|
305
383
|
dependencies = [
|
|
306
384
|
"windows_aarch64_gnullvm",
|
|
307
385
|
"windows_aarch64_msvc",
|
|
308
386
|
"windows_i686_gnu",
|
|
387
|
+
"windows_i686_gnullvm",
|
|
309
388
|
"windows_i686_msvc",
|
|
310
389
|
"windows_x86_64_gnu",
|
|
311
390
|
"windows_x86_64_gnullvm",
|
|
@@ -314,42 +393,48 @@ dependencies = [
|
|
|
314
393
|
|
|
315
394
|
[[package]]
|
|
316
395
|
name = "windows_aarch64_gnullvm"
|
|
317
|
-
version = "0.
|
|
396
|
+
version = "0.52.5"
|
|
318
397
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
319
|
-
checksum = "
|
|
398
|
+
checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263"
|
|
320
399
|
|
|
321
400
|
[[package]]
|
|
322
401
|
name = "windows_aarch64_msvc"
|
|
323
|
-
version = "0.
|
|
402
|
+
version = "0.52.5"
|
|
324
403
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
325
|
-
checksum = "
|
|
404
|
+
checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6"
|
|
326
405
|
|
|
327
406
|
[[package]]
|
|
328
407
|
name = "windows_i686_gnu"
|
|
329
|
-
version = "0.
|
|
408
|
+
version = "0.52.5"
|
|
409
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
410
|
+
checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670"
|
|
411
|
+
|
|
412
|
+
[[package]]
|
|
413
|
+
name = "windows_i686_gnullvm"
|
|
414
|
+
version = "0.52.5"
|
|
330
415
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
331
|
-
checksum = "
|
|
416
|
+
checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9"
|
|
332
417
|
|
|
333
418
|
[[package]]
|
|
334
419
|
name = "windows_i686_msvc"
|
|
335
|
-
version = "0.
|
|
420
|
+
version = "0.52.5"
|
|
336
421
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
337
|
-
checksum = "
|
|
422
|
+
checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf"
|
|
338
423
|
|
|
339
424
|
[[package]]
|
|
340
425
|
name = "windows_x86_64_gnu"
|
|
341
|
-
version = "0.
|
|
426
|
+
version = "0.52.5"
|
|
342
427
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
343
|
-
checksum = "
|
|
428
|
+
checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9"
|
|
344
429
|
|
|
345
430
|
[[package]]
|
|
346
431
|
name = "windows_x86_64_gnullvm"
|
|
347
|
-
version = "0.
|
|
432
|
+
version = "0.52.5"
|
|
348
433
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
349
|
-
checksum = "
|
|
434
|
+
checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596"
|
|
350
435
|
|
|
351
436
|
[[package]]
|
|
352
437
|
name = "windows_x86_64_msvc"
|
|
353
|
-
version = "0.
|
|
438
|
+
version = "0.52.5"
|
|
354
439
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
355
|
-
checksum = "
|
|
440
|
+
checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
|
data/Cargo.toml
CHANGED
|
@@ -10,5 +10,13 @@ publish = false
|
|
|
10
10
|
crate-type = ["cdylib"]
|
|
11
11
|
|
|
12
12
|
[dependencies]
|
|
13
|
-
rb-sys = { version = "0.9
|
|
14
|
-
blake3 = { version = "1.5
|
|
13
|
+
rb-sys = { version = "0.9", features = ["stable-api-compiled-fallback"] }
|
|
14
|
+
blake3 = { version = "1.5" }
|
|
15
|
+
|
|
16
|
+
[dev-dependencies]
|
|
17
|
+
hex = "0.4.3"
|
|
18
|
+
rand = "0.8.5"
|
|
19
|
+
rb-sys-test-helpers = "0.2.0"
|
|
20
|
+
|
|
21
|
+
[build-dependencies]
|
|
22
|
+
rb-sys-env = "0.1.2"
|
|
@@ -5,57 +5,61 @@ use rb_sys::{
|
|
|
5
5
|
rb_cObject, rb_const_get, rb_define_class_under, rb_intern, rb_ivar_set, rb_require, size_t,
|
|
6
6
|
};
|
|
7
7
|
use std::ffi::{c_int, c_uchar, c_void};
|
|
8
|
+
use std::mem::MaybeUninit;
|
|
8
9
|
use std::os::raw::c_char;
|
|
9
10
|
|
|
10
11
|
use bindings::{rb_digest_make_metadata, RbDigestMetadataT, RUBY_DIGEST_API_VERSION};
|
|
11
12
|
|
|
12
|
-
const BLOCK_LEN: usize = 64;
|
|
13
|
-
const DIGEST_LEN: usize = 32;
|
|
14
|
-
|
|
15
13
|
#[repr(C)]
|
|
16
|
-
#[derive(Debug)]
|
|
17
|
-
struct
|
|
18
|
-
|
|
14
|
+
#[derive(Debug, Default)]
|
|
15
|
+
struct Blake3 {
|
|
16
|
+
hasher: Hasher,
|
|
19
17
|
}
|
|
20
18
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
block_len: BLOCK_LEN as _,
|
|
25
|
-
ctx_size: std::mem::size_of::<Blake3Ctx>() as _,
|
|
26
|
-
init_func: blake3_init,
|
|
27
|
-
update_func: blake3_update,
|
|
28
|
-
finish_func: blake3_finish,
|
|
29
|
-
};
|
|
19
|
+
impl Blake3 {
|
|
20
|
+
const BLOCK_LEN: usize = 64;
|
|
21
|
+
const DIGEST_LEN: usize = 32;
|
|
30
22
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
23
|
+
fn digest_metadata() -> &'static RbDigestMetadataT {
|
|
24
|
+
static DIGEST_METADATA: RbDigestMetadataT = RbDigestMetadataT {
|
|
25
|
+
api_version: RUBY_DIGEST_API_VERSION,
|
|
26
|
+
digest_len: Blake3::DIGEST_LEN as _,
|
|
27
|
+
block_len: Blake3::BLOCK_LEN as _,
|
|
28
|
+
ctx_size: std::mem::size_of::<Blake3>() as _,
|
|
29
|
+
init_func: Blake3::init_in_place,
|
|
30
|
+
update_func: Blake3::update,
|
|
31
|
+
finish_func: Blake3::finish,
|
|
32
|
+
};
|
|
33
|
+
&DIGEST_METADATA
|
|
34
|
+
}
|
|
38
35
|
|
|
39
|
-
//
|
|
40
|
-
extern "C" fn
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
36
|
+
// Initialize the context, which has already been allocated by Ruby.
|
|
37
|
+
extern "C" fn init_in_place(ctx: *mut c_void) -> c_int {
|
|
38
|
+
let ctx = ctx as *mut MaybeUninit<Blake3>;
|
|
39
|
+
let ctx = unsafe { &mut *ctx };
|
|
40
|
+
ctx.write(Blake3::default());
|
|
41
|
+
true as _
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Update the context with the given data.
|
|
45
|
+
extern "C" fn update(ctx: *mut c_void, data: *mut c_uchar, len: size_t) {
|
|
46
|
+
let ctx = ctx as *mut MaybeUninit<Blake3>;
|
|
47
|
+
let ctx = unsafe { &mut *ctx };
|
|
48
|
+
let ctx = unsafe { ctx.assume_init_mut() };
|
|
44
49
|
let slice = unsafe { std::slice::from_raw_parts(data, len as _) };
|
|
45
|
-
|
|
50
|
+
|
|
51
|
+
ctx.hasher.update(slice);
|
|
46
52
|
}
|
|
47
|
-
}
|
|
48
53
|
|
|
49
|
-
// Finalize the context and write the digest to the given pointer.
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
let
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
0
|
|
54
|
+
// Finalize the context and write the digest to the given pointer. The
|
|
55
|
+
// memory for the digest is managed by Ruby, so we don't need to free it.
|
|
56
|
+
extern "C" fn finish(ctx: *mut c_void, digest: *mut c_uchar) -> c_int {
|
|
57
|
+
let ctx = ctx as *mut MaybeUninit<Blake3>;
|
|
58
|
+
let ctx = unsafe { &mut *ctx };
|
|
59
|
+
let ctx = unsafe { ctx.assume_init_mut() };
|
|
60
|
+
let outbuf = unsafe { std::slice::from_raw_parts_mut(digest, Self::DIGEST_LEN) };
|
|
61
|
+
ctx.hasher.finalize_xof().fill(outbuf);
|
|
62
|
+
true as _
|
|
59
63
|
}
|
|
60
64
|
}
|
|
61
65
|
|
|
@@ -71,7 +75,101 @@ pub unsafe extern "C" fn Init_blake3_ext() {
|
|
|
71
75
|
"Blake3\0".as_ptr() as *const c_char,
|
|
72
76
|
digest_base,
|
|
73
77
|
);
|
|
74
|
-
let meta = rb_digest_make_metadata(
|
|
78
|
+
let meta = rb_digest_make_metadata(Blake3::digest_metadata());
|
|
75
79
|
let metadata_id = rb_intern("metadata\0".as_ptr() as *const c_char);
|
|
76
80
|
rb_ivar_set(klass, metadata_id, meta);
|
|
77
81
|
}
|
|
82
|
+
|
|
83
|
+
#[cfg(test)]
|
|
84
|
+
mod tests {
|
|
85
|
+
use rb_sys::{
|
|
86
|
+
rb_cObject, rb_const_get, rb_enc_set_index, rb_funcallv_public, rb_intern, rb_str_new,
|
|
87
|
+
rb_utf8_encindex, RSTRING_LEN, RSTRING_PTR,
|
|
88
|
+
};
|
|
89
|
+
use rb_sys_test_helpers::{protect, ruby_test};
|
|
90
|
+
|
|
91
|
+
use crate::Init_blake3_ext;
|
|
92
|
+
|
|
93
|
+
#[ruby_test]
|
|
94
|
+
fn fuzz_parity_binary() {
|
|
95
|
+
setup();
|
|
96
|
+
|
|
97
|
+
for _ in 0..1024 {
|
|
98
|
+
let input_data = gen_random_bytes(4096);
|
|
99
|
+
let expected = compute_rust_digest(input_data.as_slice());
|
|
100
|
+
let actual = compute_ruby_digest(input_data.as_slice(), rb_utf8_encindex);
|
|
101
|
+
|
|
102
|
+
assert_eq!(expected, actual);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
#[ruby_test]
|
|
107
|
+
fn fuzz_parity_utf8() {
|
|
108
|
+
setup();
|
|
109
|
+
|
|
110
|
+
for _ in 0..1024 {
|
|
111
|
+
let input_data = gen_random_string(512);
|
|
112
|
+
let expected = compute_rust_digest(&input_data);
|
|
113
|
+
let actual = compute_ruby_digest(&input_data, rb_utf8_encindex);
|
|
114
|
+
|
|
115
|
+
assert_eq!(expected, actual);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
fn setup() {
|
|
120
|
+
static INIT: std::sync::Once = std::sync::Once::new();
|
|
121
|
+
INIT.call_once(|| {
|
|
122
|
+
protect(|| unsafe { Init_blake3_ext() })
|
|
123
|
+
.expect("Failed to initialize Blake3 extension");
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
fn gen_random_bytes(max_len: usize) -> Vec<u8> {
|
|
128
|
+
let size = rand::random::<usize>() % max_len;
|
|
129
|
+
(0..size).map(|_| rand::random::<u8>()).collect()
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
fn gen_random_string(max_len: usize) -> String {
|
|
133
|
+
let size = rand::random::<usize>() % max_len;
|
|
134
|
+
(0..size)
|
|
135
|
+
.map(|_| rand::random::<char>())
|
|
136
|
+
.collect::<String>()
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
fn compute_rust_digest<T: AsRef<[u8]>>(input: T) -> String {
|
|
140
|
+
let mut hasher = blake3::Hasher::new();
|
|
141
|
+
hasher.update(input.as_ref());
|
|
142
|
+
let mut result = [0u8; 32];
|
|
143
|
+
hasher.finalize_xof().fill(&mut result);
|
|
144
|
+
hex::encode(result)
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
fn compute_ruby_digest<T: AsRef<[u8]>>(
|
|
148
|
+
input: T,
|
|
149
|
+
encoding: unsafe extern "C" fn() -> i32,
|
|
150
|
+
) -> String {
|
|
151
|
+
let input = input.as_ref();
|
|
152
|
+
let ruby_digest = protect(|| unsafe {
|
|
153
|
+
Init_blake3_ext();
|
|
154
|
+
let klass = rb_const_get(rb_cObject, rb_intern("Digest\0".as_ptr() as _));
|
|
155
|
+
let klass = rb_const_get(klass, rb_intern("Blake3\0".as_ptr() as _));
|
|
156
|
+
let string = rb_str_new(input.as_ptr() as _, input.len() as _);
|
|
157
|
+
rb_enc_set_index(string, encoding());
|
|
158
|
+
let mut args = [string];
|
|
159
|
+
rb_funcallv_public(
|
|
160
|
+
klass,
|
|
161
|
+
rb_intern("hexdigest\0".as_ptr() as _),
|
|
162
|
+
args.len() as _,
|
|
163
|
+
args.as_mut_ptr(),
|
|
164
|
+
)
|
|
165
|
+
})
|
|
166
|
+
.unwrap();
|
|
167
|
+
|
|
168
|
+
let rstring_ptr = unsafe { RSTRING_PTR(ruby_digest) };
|
|
169
|
+
let rstring_len = unsafe { RSTRING_LEN(ruby_digest) };
|
|
170
|
+
|
|
171
|
+
let bytes =
|
|
172
|
+
unsafe { std::slice::from_raw_parts(rstring_ptr as *const u8, rstring_len as _) };
|
|
173
|
+
std::str::from_utf8(bytes).unwrap().to_string()
|
|
174
|
+
}
|
|
175
|
+
}
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: blake3-rb
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.5.4
|
|
4
|
+
version: 1.5.4.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ian Ker-Seymer
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2024-
|
|
11
|
+
date: 2024-05-16 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rb_sys
|
|
@@ -36,6 +36,7 @@ files:
|
|
|
36
36
|
- LICENSE.txt
|
|
37
37
|
- README.md
|
|
38
38
|
- ext/digest/blake3_ext/Cargo.toml
|
|
39
|
+
- ext/digest/blake3_ext/build.rs
|
|
39
40
|
- ext/digest/blake3_ext/extconf.rb
|
|
40
41
|
- ext/digest/blake3_ext/src/bindings.rs
|
|
41
42
|
- ext/digest/blake3_ext/src/lib.rs
|