@zigc/lib 0.17.0-dev.224 → 0.17.0-dev.242
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.
- package/c/math.zig +31 -2
- package/compiler/build_runner.zig +1 -1
- package/compiler/reduce/Walk.zig +1 -6
- package/compiler/resinator/compile.zig +1 -1
- package/compiler/resinator/cvtres.zig +4 -4
- package/compiler/resinator/ico.zig +4 -4
- package/compiler/resinator/parse.zig +2 -2
- package/compiler/resinator/res.zig +1 -1
- package/compiler/translate-c/ast.zig +11 -21
- package/compiler_rt/atomics.zig +1 -1
- package/compiler_rt/cos.zig +1 -1
- package/compiler_rt/rem_pio2l.zig +1 -1
- package/compiler_rt/sin.zig +1 -1
- package/compiler_rt/sincos.zig +1 -1
- package/compiler_rt/ssp.zig +2 -2
- package/compiler_rt/tan.zig +1 -1
- package/docs/wasm/Walk.zig +1 -3
- package/docs/wasm/html_render.zig +1 -2
- package/package.json +1 -1
- package/std/Build/Step/ConfigHeader.zig +1 -1
- package/std/Io/Kqueue.zig +1 -1
- package/std/Io/Reader.zig +0 -5
- package/std/Io/Threaded.zig +4 -4
- package/std/Io/Writer.zig +1 -2
- package/std/Io/net/HostName.zig +11 -6
- package/std/Random/ChaCha.zig +2 -2
- package/std/Random/benchmark.zig +2 -2
- package/std/Thread.zig +2 -2
- package/std/base64.zig +5 -5
- package/std/bit_set.zig +83 -66
- package/std/c.zig +19 -19
- package/std/compress/flate/Decompress.zig +1 -1
- package/std/crypto/25519/curve25519.zig +2 -2
- package/std/crypto/25519/edwards25519.zig +3 -3
- package/std/crypto/25519/ristretto255.zig +2 -2
- package/std/crypto/25519/scalar.zig +6 -6
- package/std/crypto/25519/x25519.zig +1 -1
- package/std/crypto/Certificate.zig +1 -1
- package/std/crypto/Sha1.zig +1 -1
- package/std/crypto/aegis.zig +45 -39
- package/std/crypto/aes_ccm.zig +20 -20
- package/std/crypto/aes_gcm.zig +10 -12
- package/std/crypto/aes_ocb.zig +9 -9
- package/std/crypto/argon2.zig +15 -15
- package/std/crypto/bcrypt.zig +20 -10
- package/std/crypto/benchmark.zig +7 -7
- package/std/crypto/blake2.zig +100 -64
- package/std/crypto/cbc_mac.zig +1 -1
- package/std/crypto/chacha20.zig +10 -10
- package/std/crypto/cmac.zig +2 -2
- package/std/crypto/codecs/asn1.zig +1 -1
- package/std/crypto/codecs/base64_hex_ct.zig +1 -1
- package/std/crypto/ecdsa.zig +9 -9
- package/std/crypto/ff.zig +2 -2
- package/std/crypto/ghash_polyval.zig +4 -4
- package/std/crypto/hkdf.zig +1 -1
- package/std/crypto/isap.zig +3 -3
- package/std/crypto/kangarootwelve.zig +1 -1
- package/std/crypto/keccak_p.zig +7 -7
- package/std/crypto/md5.zig +1 -1
- package/std/crypto/ml_dsa.zig +33 -33
- package/std/crypto/ml_kem.zig +4 -4
- package/std/crypto/modes.zig +1 -1
- package/std/crypto/pbkdf2.zig +1 -1
- package/std/crypto/pcurves/p256/scalar.zig +3 -3
- package/std/crypto/pcurves/p384/scalar.zig +2 -2
- package/std/crypto/pcurves/secp256k1/scalar.zig +3 -3
- package/std/crypto/pcurves/tests/p256.zig +5 -5
- package/std/crypto/pcurves/tests/p384.zig +5 -5
- package/std/crypto/pcurves/tests/secp256k1.zig +3 -3
- package/std/crypto/salsa20.zig +8 -8
- package/std/crypto/sha2.zig +2 -2
- package/std/crypto/sha3.zig +2 -2
- package/std/crypto/siphash.zig +1 -1
- package/std/crypto/timing_safe.zig +5 -4
- package/std/crypto/tls/Client.zig +10 -9
- package/std/crypto.zig +3 -3
- package/std/debug/Dwarf.zig +1 -1
- package/std/debug.zig +6 -4
- package/std/elf.zig +1 -1
- package/std/enums.zig +3 -3
- package/std/fmt/parse_float/decimal.zig +1 -1
- package/std/fmt.zig +5 -1
- package/std/fs/path.zig +1 -1
- package/std/hash/Adler32.zig +3 -3
- package/std/hash/benchmark.zig +2 -2
- package/std/hash/wyhash.zig +1 -1
- package/std/heap/debug_allocator.zig +1 -1
- package/std/http.zig +1 -1
- package/std/json/static.zig +2 -2
- package/std/math/big/int.zig +3 -3
- package/std/math/float.zig +62 -0
- package/std/math/nextafter.zig +1 -2
- package/std/math/powi.zig +2 -3
- package/std/math/signbit.zig +0 -1
- package/std/math.zig +13 -18
- package/std/mem.zig +9 -8
- package/std/meta.zig +1 -1
- package/std/os/emscripten.zig +2 -2
- package/std/os/linux.zig +4 -4
- package/std/os/uefi/hii.zig +1 -1
- package/std/std.zig +3 -0
- package/std/tar/Writer.zig +39 -33
- package/std/tar.zig +8 -4
- package/std/testing.zig +1 -1
- package/std/unicode.zig +13 -8
- package/std/zig/Ast/Render.zig +1 -25
- package/std/zig/Ast.zig +5 -28
- package/std/zig/AstGen.zig +75 -184
- package/std/zig/AstRlAnnotate.zig +1 -11
- package/std/zig/AstSmith.zig +5 -11
- package/std/zig/LibCInstallation.zig +1 -1
- package/std/zig/Parse.zig +4 -69
- package/std/zig/TokenSmith.zig +0 -6
- package/std/zig/WindowsSdk.zig +1 -1
- package/std/zig/Zir.zig +0 -54
- package/std/zig/ZonGen.zig +0 -1
- package/std/zig/llvm/Builder.zig +3 -7
- package/std/zig/tokenizer.zig +4 -43
- package/std/zig.zig +0 -2
- package/compiler_rt/long_double.zig +0 -37
- package/libc/mingw/math/lrintl.c +0 -18
- package/libc/mingw/math/rintl.c +0 -16
- package/libc/musl/src/math/i386/lrintl.c +0 -8
- package/libc/musl/src/math/i386/rintl.c +0 -7
- package/libc/musl/src/math/lrintl.c +0 -36
- package/libc/musl/src/math/rintl.c +0 -29
- package/libc/musl/src/math/s390x/rintl.c +0 -15
- package/libc/musl/src/math/x32/lrintl.s +0 -7
- package/libc/musl/src/math/x32/rintl.s +0 -6
- package/libc/musl/src/math/x86_64/lrintl.c +0 -8
- package/libc/musl/src/math/x86_64/rintl.c +0 -7
package/std/crypto/blake2.zig
CHANGED
|
@@ -199,7 +199,9 @@ test "blake2s160 single" {
|
|
|
199
199
|
try htest.assertEqualHash(Blake2s160, h3, "The quick brown fox jumps over the lazy dog");
|
|
200
200
|
|
|
201
201
|
const h4 = "b60c4dc60e2681e58fbc24e77f07e02c69e72ed0";
|
|
202
|
-
|
|
202
|
+
const repeat_a_32: [32]u8 = @splat('a');
|
|
203
|
+
const repeat_b_32: [32]u8 = @splat('b');
|
|
204
|
+
try htest.assertEqualHash(Blake2s160, h4, &repeat_a_32 ++ &repeat_b_32);
|
|
203
205
|
}
|
|
204
206
|
|
|
205
207
|
test "blake2s160 streaming" {
|
|
@@ -227,27 +229,30 @@ test "blake2s160 streaming" {
|
|
|
227
229
|
|
|
228
230
|
const h3 = "b60c4dc60e2681e58fbc24e77f07e02c69e72ed0";
|
|
229
231
|
|
|
232
|
+
const repeat_a_32: [32]u8 = @splat('a');
|
|
233
|
+
const repeat_b_32: [32]u8 = @splat('b');
|
|
234
|
+
|
|
230
235
|
h = Blake2s160.init(.{});
|
|
231
|
-
h.update(
|
|
232
|
-
h.update(
|
|
236
|
+
h.update(&repeat_a_32);
|
|
237
|
+
h.update(&repeat_b_32);
|
|
233
238
|
h.final(out[0..]);
|
|
234
239
|
try htest.assertEqual(h3, out[0..]);
|
|
235
240
|
|
|
236
241
|
h = Blake2s160.init(.{});
|
|
237
|
-
h.update(
|
|
242
|
+
h.update(&repeat_a_32 ++ &repeat_b_32);
|
|
238
243
|
h.final(out[0..]);
|
|
239
244
|
try htest.assertEqual(h3, out[0..]);
|
|
240
245
|
|
|
241
246
|
const h4 = "4667fd60791a7fe41f939bca646b4529e296bd68";
|
|
242
247
|
|
|
243
|
-
h = Blake2s160.init(.{ .context =
|
|
244
|
-
h.update(
|
|
245
|
-
h.update(
|
|
248
|
+
h = Blake2s160.init(.{ .context = @splat(0x69), .salt = @splat(0x42) });
|
|
249
|
+
h.update(&repeat_a_32);
|
|
250
|
+
h.update(&repeat_b_32);
|
|
246
251
|
h.final(out[0..]);
|
|
247
252
|
try htest.assertEqual(h4, out[0..]);
|
|
248
253
|
|
|
249
|
-
h = Blake2s160.init(.{ .context =
|
|
250
|
-
h.update(
|
|
254
|
+
h = Blake2s160.init(.{ .context = @splat(0x69), .salt = @splat(0x42) });
|
|
255
|
+
h.update(&repeat_a_32 ++ &repeat_b_32);
|
|
251
256
|
h.final(out[0..]);
|
|
252
257
|
try htest.assertEqual(h4, out[0..]);
|
|
253
258
|
}
|
|
@@ -256,7 +261,7 @@ test "comptime blake2s160" {
|
|
|
256
261
|
//comptime
|
|
257
262
|
{
|
|
258
263
|
@setEvalBranchQuota(10000);
|
|
259
|
-
var block
|
|
264
|
+
var block: [Blake2s160.block_length]u8 = @splat(0);
|
|
260
265
|
var out: [Blake2s160.digest_length]u8 = undefined;
|
|
261
266
|
|
|
262
267
|
const h1 = "2c56ad9d0b2c8b474aafa93ab307db2f0940105f";
|
|
@@ -282,7 +287,9 @@ test "blake2s224 single" {
|
|
|
282
287
|
try htest.assertEqualHash(Blake2s224, h3, "The quick brown fox jumps over the lazy dog");
|
|
283
288
|
|
|
284
289
|
const h4 = "557381a78facd2b298640f4e32113e58967d61420af1aa939d0cfe01";
|
|
285
|
-
|
|
290
|
+
const repeat_a_32: [32]u8 = @splat('a');
|
|
291
|
+
const repeat_b_32: [32]u8 = @splat('b');
|
|
292
|
+
try htest.assertEqualHash(Blake2s224, h4, &repeat_a_32 ++ &repeat_b_32);
|
|
286
293
|
}
|
|
287
294
|
|
|
288
295
|
test "blake2s224 streaming" {
|
|
@@ -308,29 +315,32 @@ test "blake2s224 streaming" {
|
|
|
308
315
|
h.final(out[0..]);
|
|
309
316
|
try htest.assertEqual(h2, out[0..]);
|
|
310
317
|
|
|
318
|
+
const repeat_a_32: [32]u8 = @splat('a');
|
|
319
|
+
const repeat_b_32: [32]u8 = @splat('b');
|
|
320
|
+
|
|
311
321
|
const h3 = "557381a78facd2b298640f4e32113e58967d61420af1aa939d0cfe01";
|
|
312
322
|
|
|
313
323
|
h = Blake2s224.init(.{});
|
|
314
|
-
h.update(
|
|
315
|
-
h.update(
|
|
324
|
+
h.update(&repeat_a_32);
|
|
325
|
+
h.update(&repeat_b_32);
|
|
316
326
|
h.final(out[0..]);
|
|
317
327
|
try htest.assertEqual(h3, out[0..]);
|
|
318
328
|
|
|
319
329
|
h = Blake2s224.init(.{});
|
|
320
|
-
h.update(
|
|
330
|
+
h.update(&repeat_a_32 ++ &repeat_b_32);
|
|
321
331
|
h.final(out[0..]);
|
|
322
332
|
try htest.assertEqual(h3, out[0..]);
|
|
323
333
|
|
|
324
334
|
const h4 = "a4d6a9d253441b80e5dfd60a04db169ffab77aec56a2855c402828c3";
|
|
325
335
|
|
|
326
|
-
h = Blake2s224.init(.{ .context =
|
|
327
|
-
h.update(
|
|
328
|
-
h.update(
|
|
336
|
+
h = Blake2s224.init(.{ .context = @splat(0x69), .salt = @splat(0x42) });
|
|
337
|
+
h.update(&repeat_a_32);
|
|
338
|
+
h.update(&repeat_b_32);
|
|
329
339
|
h.final(out[0..]);
|
|
330
340
|
try htest.assertEqual(h4, out[0..]);
|
|
331
341
|
|
|
332
|
-
h = Blake2s224.init(.{ .context =
|
|
333
|
-
h.update(
|
|
342
|
+
h = Blake2s224.init(.{ .context = @splat(0x69), .salt = @splat(0x42) });
|
|
343
|
+
h.update(&repeat_a_32 ++ &repeat_b_32);
|
|
334
344
|
h.final(out[0..]);
|
|
335
345
|
try htest.assertEqual(h4, out[0..]);
|
|
336
346
|
}
|
|
@@ -338,7 +348,7 @@ test "blake2s224 streaming" {
|
|
|
338
348
|
test "comptime blake2s224" {
|
|
339
349
|
comptime {
|
|
340
350
|
@setEvalBranchQuota(10000);
|
|
341
|
-
var block
|
|
351
|
+
var block: [Blake2s224.block_length]u8 = @splat(0);
|
|
342
352
|
var out: [Blake2s224.digest_length]u8 = undefined;
|
|
343
353
|
|
|
344
354
|
const h1 = "86b7611563293f8c73627df7a6d6ba25ca0548c2a6481f7d116ee576";
|
|
@@ -364,7 +374,9 @@ test "blake2s256 single" {
|
|
|
364
374
|
try htest.assertEqualHash(Blake2s256, h3, "The quick brown fox jumps over the lazy dog");
|
|
365
375
|
|
|
366
376
|
const h4 = "8d8711dade07a6b92b9a3ea1f40bee9b2c53ff3edd2a273dec170b0163568977";
|
|
367
|
-
|
|
377
|
+
const repeat_a_32: [32]u8 = @splat('a');
|
|
378
|
+
const repeat_b_32: [32]u8 = @splat('b');
|
|
379
|
+
try htest.assertEqualHash(Blake2s256, h4, &repeat_a_32 ++ &repeat_b_32);
|
|
368
380
|
}
|
|
369
381
|
|
|
370
382
|
test "blake2s256 streaming" {
|
|
@@ -390,16 +402,19 @@ test "blake2s256 streaming" {
|
|
|
390
402
|
h.final(out[0..]);
|
|
391
403
|
try htest.assertEqual(h2, out[0..]);
|
|
392
404
|
|
|
405
|
+
const repeat_a_32: [32]u8 = @splat('a');
|
|
406
|
+
const repeat_b_32: [32]u8 = @splat('b');
|
|
407
|
+
|
|
393
408
|
const h3 = "8d8711dade07a6b92b9a3ea1f40bee9b2c53ff3edd2a273dec170b0163568977";
|
|
394
409
|
|
|
395
410
|
h = Blake2s256.init(.{});
|
|
396
|
-
h.update(
|
|
397
|
-
h.update(
|
|
411
|
+
h.update(&repeat_a_32);
|
|
412
|
+
h.update(&repeat_b_32);
|
|
398
413
|
h.final(out[0..]);
|
|
399
414
|
try htest.assertEqual(h3, out[0..]);
|
|
400
415
|
|
|
401
416
|
h = Blake2s256.init(.{});
|
|
402
|
-
h.update(
|
|
417
|
+
h.update(&repeat_a_32 ++ &repeat_b_32);
|
|
403
418
|
h.final(out[0..]);
|
|
404
419
|
try htest.assertEqual(h3, out[0..]);
|
|
405
420
|
}
|
|
@@ -410,18 +425,21 @@ test "blake2s256 keyed" {
|
|
|
410
425
|
const h1 = "10f918da4d74fab3302e48a5d67d03804b1ec95372a62a0f33b7c9fa28ba1ae6";
|
|
411
426
|
const key = "secret_key";
|
|
412
427
|
|
|
413
|
-
|
|
428
|
+
const repeat_a_64: [64]u8 = @splat('a');
|
|
429
|
+
const repeat_b_64: [64]u8 = @splat('b');
|
|
430
|
+
|
|
431
|
+
Blake2s256.hash(&repeat_a_64 ++ &repeat_b_64, &out, .{ .key = key });
|
|
414
432
|
try htest.assertEqual(h1, out[0..]);
|
|
415
433
|
|
|
416
434
|
var h = Blake2s256.init(.{ .key = key });
|
|
417
|
-
h.update(
|
|
435
|
+
h.update(&repeat_a_64 ++ &repeat_b_64);
|
|
418
436
|
h.final(out[0..]);
|
|
419
437
|
|
|
420
438
|
try htest.assertEqual(h1, out[0..]);
|
|
421
439
|
|
|
422
440
|
h = Blake2s256.init(.{ .key = key });
|
|
423
|
-
h.update(
|
|
424
|
-
h.update(
|
|
441
|
+
h.update(&repeat_a_64);
|
|
442
|
+
h.update(&repeat_b_64);
|
|
425
443
|
h.final(out[0..]);
|
|
426
444
|
|
|
427
445
|
try htest.assertEqual(h1, out[0..]);
|
|
@@ -430,7 +448,7 @@ test "blake2s256 keyed" {
|
|
|
430
448
|
test "comptime blake2s256" {
|
|
431
449
|
comptime {
|
|
432
450
|
@setEvalBranchQuota(10000);
|
|
433
|
-
var block
|
|
451
|
+
var block: [Blake2s256.block_length]u8 = @splat(0);
|
|
434
452
|
var out: [Blake2s256.digest_length]u8 = undefined;
|
|
435
453
|
|
|
436
454
|
const h1 = "ae09db7cd54f42b490ef09b6bc541af688e4959bb8c53f359a6f56e38ab454a3";
|
|
@@ -623,7 +641,9 @@ test "blake2b160 single" {
|
|
|
623
641
|
try htest.assertEqualHash(Blake2b160, h3, "The quick brown fox jumps over the lazy dog");
|
|
624
642
|
|
|
625
643
|
const h4 = "43758f5de1740f651f1ae39de92260fe8bd5a11f";
|
|
626
|
-
|
|
644
|
+
const repeat_a_64: [64]u8 = @splat('a');
|
|
645
|
+
const repeat_b_64: [64]u8 = @splat('b');
|
|
646
|
+
try htest.assertEqualHash(Blake2b160, h4, &repeat_a_64 ++ &repeat_b_64);
|
|
627
647
|
}
|
|
628
648
|
|
|
629
649
|
test "blake2b160 streaming" {
|
|
@@ -649,36 +669,39 @@ test "blake2b160 streaming" {
|
|
|
649
669
|
h.final(out[0..]);
|
|
650
670
|
try htest.assertEqual(h2, out[0..]);
|
|
651
671
|
|
|
672
|
+
const repeat_a_64: [64]u8 = @splat('a');
|
|
673
|
+
const repeat_b_64: [64]u8 = @splat('b');
|
|
674
|
+
|
|
652
675
|
const h3 = "43758f5de1740f651f1ae39de92260fe8bd5a11f";
|
|
653
676
|
|
|
654
677
|
h = Blake2b160.init(.{});
|
|
655
|
-
h.update(
|
|
678
|
+
h.update(&repeat_a_64 ++ &repeat_b_64);
|
|
656
679
|
h.final(out[0..]);
|
|
657
680
|
try htest.assertEqual(h3, out[0..]);
|
|
658
681
|
|
|
659
682
|
h = Blake2b160.init(.{});
|
|
660
|
-
h.update(
|
|
661
|
-
h.update(
|
|
683
|
+
h.update(&repeat_a_64);
|
|
684
|
+
h.update(&repeat_b_64);
|
|
662
685
|
h.final(out[0..]);
|
|
663
686
|
try htest.assertEqual(h3, out[0..]);
|
|
664
687
|
|
|
665
688
|
h = Blake2b160.init(.{});
|
|
666
|
-
h.update(
|
|
667
|
-
h.update(
|
|
689
|
+
h.update(&repeat_a_64);
|
|
690
|
+
h.update(&repeat_b_64);
|
|
668
691
|
h.final(out[0..]);
|
|
669
692
|
try htest.assertEqual(h3, out[0..]);
|
|
670
693
|
|
|
671
694
|
const h4 = "72328f8a8200663752fc302d372b5dd9b49dd8dc";
|
|
672
695
|
|
|
673
|
-
h = Blake2b160.init(.{ .context =
|
|
674
|
-
h.update(
|
|
675
|
-
h.update(
|
|
696
|
+
h = Blake2b160.init(.{ .context = @splat(0x69), .salt = @splat(0x42) });
|
|
697
|
+
h.update(&repeat_a_64);
|
|
698
|
+
h.update(&repeat_b_64);
|
|
676
699
|
h.final(out[0..]);
|
|
677
700
|
try htest.assertEqual(h4, out[0..]);
|
|
678
701
|
|
|
679
|
-
h = Blake2b160.init(.{ .context =
|
|
680
|
-
h.update(
|
|
681
|
-
h.update(
|
|
702
|
+
h = Blake2b160.init(.{ .context = @splat(0x69), .salt = @splat(0x42) });
|
|
703
|
+
h.update(&repeat_a_64);
|
|
704
|
+
h.update(&repeat_b_64);
|
|
682
705
|
h.final(out[0..]);
|
|
683
706
|
try htest.assertEqual(h4, out[0..]);
|
|
684
707
|
}
|
|
@@ -686,7 +709,7 @@ test "blake2b160 streaming" {
|
|
|
686
709
|
test "comptime blake2b160" {
|
|
687
710
|
comptime {
|
|
688
711
|
@setEvalBranchQuota(10000);
|
|
689
|
-
var block
|
|
712
|
+
var block: [Blake2b160.block_length]u8 = @splat(0);
|
|
690
713
|
var out: [Blake2b160.digest_length]u8 = undefined;
|
|
691
714
|
|
|
692
715
|
const h1 = "8d26f158f564e3293b42f5e3d34263cb173aa9c9";
|
|
@@ -712,7 +735,9 @@ test "blake2b384 single" {
|
|
|
712
735
|
try htest.assertEqualHash(Blake2b384, h3, "The quick brown fox jumps over the lazy dog");
|
|
713
736
|
|
|
714
737
|
const h4 = "b7283f0172fecbbd7eca32ce10d8a6c06b453cb3cf675b33eb4246f0da2bb94a6c0bdd6eec0b5fd71ec4fd51be80bf4c";
|
|
715
|
-
|
|
738
|
+
const repeat_a_64: [64]u8 = @splat('a');
|
|
739
|
+
const repeat_b_64: [64]u8 = @splat('b');
|
|
740
|
+
try htest.assertEqualHash(Blake2b384, h4, &repeat_a_64 ++ &repeat_b_64);
|
|
716
741
|
}
|
|
717
742
|
|
|
718
743
|
test "blake2b384 streaming" {
|
|
@@ -738,36 +763,39 @@ test "blake2b384 streaming" {
|
|
|
738
763
|
h.final(out[0..]);
|
|
739
764
|
try htest.assertEqual(h2, out[0..]);
|
|
740
765
|
|
|
766
|
+
const repeat_a_64: [64]u8 = @splat('a');
|
|
767
|
+
const repeat_b_64: [64]u8 = @splat('b');
|
|
768
|
+
|
|
741
769
|
const h3 = "b7283f0172fecbbd7eca32ce10d8a6c06b453cb3cf675b33eb4246f0da2bb94a6c0bdd6eec0b5fd71ec4fd51be80bf4c";
|
|
742
770
|
|
|
743
771
|
h = Blake2b384.init(.{});
|
|
744
|
-
h.update(
|
|
772
|
+
h.update(&repeat_a_64 ++ &repeat_b_64);
|
|
745
773
|
h.final(out[0..]);
|
|
746
774
|
try htest.assertEqual(h3, out[0..]);
|
|
747
775
|
|
|
748
776
|
h = Blake2b384.init(.{});
|
|
749
|
-
h.update(
|
|
750
|
-
h.update(
|
|
777
|
+
h.update(&repeat_a_64);
|
|
778
|
+
h.update(&repeat_b_64);
|
|
751
779
|
h.final(out[0..]);
|
|
752
780
|
try htest.assertEqual(h3, out[0..]);
|
|
753
781
|
|
|
754
782
|
h = Blake2b384.init(.{});
|
|
755
|
-
h.update(
|
|
756
|
-
h.update(
|
|
783
|
+
h.update(&repeat_a_64);
|
|
784
|
+
h.update(&repeat_b_64);
|
|
757
785
|
h.final(out[0..]);
|
|
758
786
|
try htest.assertEqual(h3, out[0..]);
|
|
759
787
|
|
|
760
788
|
const h4 = "934c48fcb197031c71f583d92f98703510805e72142e0b46f5752d1e971bc86c355d556035613ff7a4154b4de09dac5c";
|
|
761
789
|
|
|
762
|
-
h = Blake2b384.init(.{ .context =
|
|
763
|
-
h.update(
|
|
764
|
-
h.update(
|
|
790
|
+
h = Blake2b384.init(.{ .context = @splat(0x69), .salt = @splat(0x42) });
|
|
791
|
+
h.update(&repeat_a_64);
|
|
792
|
+
h.update(&repeat_b_64);
|
|
765
793
|
h.final(out[0..]);
|
|
766
794
|
try htest.assertEqual(h4, out[0..]);
|
|
767
795
|
|
|
768
|
-
h = Blake2b384.init(.{ .context =
|
|
769
|
-
h.update(
|
|
770
|
-
h.update(
|
|
796
|
+
h = Blake2b384.init(.{ .context = @splat(0x69), .salt = @splat(0x42) });
|
|
797
|
+
h.update(&repeat_a_64);
|
|
798
|
+
h.update(&repeat_b_64);
|
|
771
799
|
h.final(out[0..]);
|
|
772
800
|
try htest.assertEqual(h4, out[0..]);
|
|
773
801
|
}
|
|
@@ -775,7 +803,7 @@ test "blake2b384 streaming" {
|
|
|
775
803
|
test "comptime blake2b384" {
|
|
776
804
|
comptime {
|
|
777
805
|
@setEvalBranchQuota(20000);
|
|
778
|
-
var block
|
|
806
|
+
var block: [Blake2b384.block_length]u8 = @splat(0);
|
|
779
807
|
var out: [Blake2b384.digest_length]u8 = undefined;
|
|
780
808
|
|
|
781
809
|
const h1 = "e8aa1931ea0422e4446fecdd25c16cf35c240b10cb4659dd5c776eddcaa4d922397a589404b46eb2e53d78132d05fd7d";
|
|
@@ -801,7 +829,9 @@ test "blake2b512 single" {
|
|
|
801
829
|
try htest.assertEqualHash(Blake2b512, h3, "The quick brown fox jumps over the lazy dog");
|
|
802
830
|
|
|
803
831
|
const h4 = "049980af04d6a2cf16b4b49793c3ed7e40732073788806f2c989ebe9547bda0541d63abe298ec8955d08af48ae731f2e8a0bd6d201655a5473b4aa79d211b920";
|
|
804
|
-
|
|
832
|
+
const repeat_a_64: [64]u8 = @splat('a');
|
|
833
|
+
const repeat_b_64: [64]u8 = @splat('b');
|
|
834
|
+
try htest.assertEqualHash(Blake2b512, h4, &repeat_a_64 ++ &repeat_b_64);
|
|
805
835
|
}
|
|
806
836
|
|
|
807
837
|
test "blake2b512 streaming" {
|
|
@@ -827,16 +857,19 @@ test "blake2b512 streaming" {
|
|
|
827
857
|
h.final(out[0..]);
|
|
828
858
|
try htest.assertEqual(h2, out[0..]);
|
|
829
859
|
|
|
860
|
+
const repeat_a_64: [64]u8 = @splat('a');
|
|
861
|
+
const repeat_b_64: [64]u8 = @splat('b');
|
|
862
|
+
|
|
830
863
|
const h3 = "049980af04d6a2cf16b4b49793c3ed7e40732073788806f2c989ebe9547bda0541d63abe298ec8955d08af48ae731f2e8a0bd6d201655a5473b4aa79d211b920";
|
|
831
864
|
|
|
832
865
|
h = Blake2b512.init(.{});
|
|
833
|
-
h.update(
|
|
866
|
+
h.update(&repeat_a_64 ++ &repeat_b_64);
|
|
834
867
|
h.final(out[0..]);
|
|
835
868
|
try htest.assertEqual(h3, out[0..]);
|
|
836
869
|
|
|
837
870
|
h = Blake2b512.init(.{});
|
|
838
|
-
h.update(
|
|
839
|
-
h.update(
|
|
871
|
+
h.update(&repeat_a_64);
|
|
872
|
+
h.update(&repeat_b_64);
|
|
840
873
|
h.final(out[0..]);
|
|
841
874
|
try htest.assertEqual(h3, out[0..]);
|
|
842
875
|
}
|
|
@@ -847,18 +880,21 @@ test "blake2b512 keyed" {
|
|
|
847
880
|
const h1 = "8a978060ccaf582f388f37454363071ac9a67e3a704585fd879fb8a419a447e389c7c6de790faa20a7a7dccf197de736bc5b40b98a930b36df5bee7555750c4d";
|
|
848
881
|
const key = "secret_key";
|
|
849
882
|
|
|
850
|
-
|
|
883
|
+
const repeat_a_64: [64]u8 = @splat('a');
|
|
884
|
+
const repeat_b_64: [64]u8 = @splat('b');
|
|
885
|
+
|
|
886
|
+
Blake2b512.hash(&repeat_a_64 ++ &repeat_b_64, &out, .{ .key = key });
|
|
851
887
|
try htest.assertEqual(h1, out[0..]);
|
|
852
888
|
|
|
853
889
|
var h = Blake2b512.init(.{ .key = key });
|
|
854
|
-
h.update(
|
|
890
|
+
h.update(&repeat_a_64 ++ &repeat_b_64);
|
|
855
891
|
h.final(out[0..]);
|
|
856
892
|
|
|
857
893
|
try htest.assertEqual(h1, out[0..]);
|
|
858
894
|
|
|
859
895
|
h = Blake2b512.init(.{ .key = key });
|
|
860
|
-
h.update(
|
|
861
|
-
h.update(
|
|
896
|
+
h.update(&repeat_a_64);
|
|
897
|
+
h.update(&repeat_b_64);
|
|
862
898
|
h.final(out[0..]);
|
|
863
899
|
|
|
864
900
|
try htest.assertEqual(h1, out[0..]);
|
|
@@ -867,7 +903,7 @@ test "blake2b512 keyed" {
|
|
|
867
903
|
test "comptime blake2b512" {
|
|
868
904
|
comptime {
|
|
869
905
|
@setEvalBranchQuota(12000);
|
|
870
|
-
var block
|
|
906
|
+
var block: [Blake2b512.block_length]u8 = @splat(0);
|
|
871
907
|
var out: [Blake2b512.digest_length]u8 = undefined;
|
|
872
908
|
|
|
873
909
|
const h1 = "865939e120e6805438478841afb739ae4250cf372653078a065cdcfffca4caf798e6d462b65d658fc165782640eded70963449ae1500fb0f24981d7727e22c41";
|
package/std/crypto/cbc_mac.zig
CHANGED
|
@@ -21,7 +21,7 @@ pub fn CbcMac(comptime BlockCipher: type) type {
|
|
|
21
21
|
pub const mac_length = block_length;
|
|
22
22
|
|
|
23
23
|
cipher_ctx: BlockCipherCtx,
|
|
24
|
-
buf: Block =
|
|
24
|
+
buf: Block = @splat(0),
|
|
25
25
|
pos: usize = 0,
|
|
26
26
|
|
|
27
27
|
pub fn create(out: *[mac_length]u8, msg: []const u8, key: *const [key_length]u8) void {
|
package/std/crypto/chacha20.zig
CHANGED
|
@@ -648,7 +648,7 @@ fn ChaChaPoly1305(comptime rounds_nb: usize) type {
|
|
|
648
648
|
assert(c.len == m.len);
|
|
649
649
|
assert(m.len <= 64 * (@as(u39, 1 << 32) - 1));
|
|
650
650
|
|
|
651
|
-
var polyKey
|
|
651
|
+
var polyKey: [32]u8 = @splat(0);
|
|
652
652
|
ChaChaIETF(rounds_nb).xor(polyKey[0..], polyKey[0..], 0, k, npub);
|
|
653
653
|
|
|
654
654
|
ChaChaIETF(rounds_nb).xor(c[0..m.len], m, 1, k, npub);
|
|
@@ -656,13 +656,13 @@ fn ChaChaPoly1305(comptime rounds_nb: usize) type {
|
|
|
656
656
|
var mac = Poly1305.init(polyKey[0..]);
|
|
657
657
|
mac.update(ad);
|
|
658
658
|
if (ad.len % 16 != 0) {
|
|
659
|
-
const zeros
|
|
659
|
+
const zeros: [16]u8 = @splat(0);
|
|
660
660
|
const padding = 16 - (ad.len % 16);
|
|
661
661
|
mac.update(zeros[0..padding]);
|
|
662
662
|
}
|
|
663
663
|
mac.update(c[0..m.len]);
|
|
664
664
|
if (m.len % 16 != 0) {
|
|
665
|
-
const zeros
|
|
665
|
+
const zeros: [16]u8 = @splat(0);
|
|
666
666
|
const padding = 16 - (m.len % 16);
|
|
667
667
|
mac.update(zeros[0..padding]);
|
|
668
668
|
}
|
|
@@ -685,20 +685,20 @@ fn ChaChaPoly1305(comptime rounds_nb: usize) type {
|
|
|
685
685
|
pub fn decrypt(m: []u8, c: []const u8, tag: [tag_length]u8, ad: []const u8, npub: [nonce_length]u8, k: [key_length]u8) AuthenticationError!void {
|
|
686
686
|
assert(c.len == m.len);
|
|
687
687
|
|
|
688
|
-
var polyKey
|
|
688
|
+
var polyKey: [32]u8 = @splat(0);
|
|
689
689
|
ChaChaIETF(rounds_nb).xor(polyKey[0..], polyKey[0..], 0, k, npub);
|
|
690
690
|
|
|
691
691
|
var mac = Poly1305.init(polyKey[0..]);
|
|
692
692
|
|
|
693
693
|
mac.update(ad);
|
|
694
694
|
if (ad.len % 16 != 0) {
|
|
695
|
-
const zeros
|
|
695
|
+
const zeros: [16]u8 = @splat(0);
|
|
696
696
|
const padding = 16 - (ad.len % 16);
|
|
697
697
|
mac.update(zeros[0..padding]);
|
|
698
698
|
}
|
|
699
699
|
mac.update(c);
|
|
700
700
|
if (c.len % 16 != 0) {
|
|
701
|
-
const zeros
|
|
701
|
+
const zeros: [16]u8 = @splat(0);
|
|
702
702
|
const padding = 16 - (c.len % 16);
|
|
703
703
|
mac.update(zeros[0..padding]);
|
|
704
704
|
}
|
|
@@ -759,8 +759,8 @@ test "AEAD API" {
|
|
|
759
759
|
const ad = "Additional data";
|
|
760
760
|
|
|
761
761
|
inline for (aeads) |aead| {
|
|
762
|
-
const key
|
|
763
|
-
const nonce
|
|
762
|
+
const key: [aead.key_length]u8 = @splat(69);
|
|
763
|
+
const nonce: [aead.nonce_length]u8 = @splat(42);
|
|
764
764
|
var c: [m.len]u8 = undefined;
|
|
765
765
|
var tag: [aead.tag_length]u8 = undefined;
|
|
766
766
|
var out: [m.len]u8 = undefined;
|
|
@@ -1138,8 +1138,8 @@ test "open" {
|
|
|
1138
1138
|
}
|
|
1139
1139
|
|
|
1140
1140
|
test "xchacha20" {
|
|
1141
|
-
const key
|
|
1142
|
-
const nonce
|
|
1141
|
+
const key: [32]u8 = @splat(69);
|
|
1142
|
+
const nonce: [24]u8 = @splat(42);
|
|
1143
1143
|
const m = "Ladies and Gentlemen of the class of '99: If I could offer you only one tip for the future, sunscreen would be it.";
|
|
1144
1144
|
{
|
|
1145
1145
|
var c: [m.len]u8 = undefined;
|
package/std/crypto/cmac.zig
CHANGED
|
@@ -20,7 +20,7 @@ pub fn Cmac(comptime BlockCipher: type) type {
|
|
|
20
20
|
cipher_ctx: BlockCipherCtx,
|
|
21
21
|
k1: Block,
|
|
22
22
|
k2: Block,
|
|
23
|
-
buf: Block =
|
|
23
|
+
buf: Block = @splat(0),
|
|
24
24
|
pos: usize = 0,
|
|
25
25
|
|
|
26
26
|
pub fn create(out: *[mac_length]u8, msg: []const u8, key: *const [key_length]u8) void {
|
|
@@ -31,7 +31,7 @@ pub fn Cmac(comptime BlockCipher: type) type {
|
|
|
31
31
|
|
|
32
32
|
pub fn init(key: *const [key_length]u8) Self {
|
|
33
33
|
const cipher_ctx = BlockCipher.initEnc(key.*);
|
|
34
|
-
const zeros
|
|
34
|
+
const zeros: [block_length]u8 = @splat(0);
|
|
35
35
|
var k1: Block = undefined;
|
|
36
36
|
cipher_ctx.encrypt(&k1, &zeros);
|
|
37
37
|
k1 = double(k1);
|
|
@@ -233,7 +233,7 @@ test Element {
|
|
|
233
233
|
.slice = Element.Slice{ .start = 2, .end = short_form.len },
|
|
234
234
|
}, Element.decode(&short_form, 0));
|
|
235
235
|
|
|
236
|
-
const long_form = [_]u8{ 0x30, 129, 129 } ++ [
|
|
236
|
+
const long_form = [_]u8{ 0x30, 129, 129 } ++ @as([129]u8, @splat(0));
|
|
237
237
|
try std.testing.expectEqual(Element{
|
|
238
238
|
.tag = Tag.universal(.sequence, true),
|
|
239
239
|
.slice = Element.Slice{ .start = 3, .end = long_form.len },
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
//! This is designed to be used in cryptographic applications where timing attacks are a concern.
|
|
4
4
|
const std = @import("std");
|
|
5
5
|
const testing = std.testing;
|
|
6
|
-
const StaticBitSet = std.
|
|
6
|
+
const StaticBitSet = std.bit_set.Static;
|
|
7
7
|
|
|
8
8
|
pub const Error = error{
|
|
9
9
|
/// An invalid character was found in the input.
|
package/std/crypto/ecdsa.zig
CHANGED
|
@@ -212,7 +212,7 @@ pub fn Ecdsa(comptime Curve: type, comptime Hash: type) type {
|
|
|
212
212
|
fn finalizePrehashed(self: *Signer, msg_hash: [Hash.digest_length]u8) (IdentityElementError || NonCanonicalError)!Signature {
|
|
213
213
|
const scalar_encoded_length = Curve.scalar.encoded_length;
|
|
214
214
|
const h_len = @max(Hash.digest_length, scalar_encoded_length);
|
|
215
|
-
var h: [h_len]u8 = [
|
|
215
|
+
var h: [h_len]u8 = @as([h_len - Hash.digest_length]u8, @splat(0)) ++ msg_hash;
|
|
216
216
|
|
|
217
217
|
std.debug.assert(h.len >= scalar_encoded_length);
|
|
218
218
|
const z = reduceToScalar(scalar_encoded_length, h[0..scalar_encoded_length].*);
|
|
@@ -275,7 +275,7 @@ pub fn Ecdsa(comptime Curve: type, comptime Hash: type) type {
|
|
|
275
275
|
fn verifyPrehashed(self: *Verifier, msg_hash: [Hash.digest_length]u8) VerifyError!void {
|
|
276
276
|
const ht = Curve.scalar.encoded_length;
|
|
277
277
|
const h_len = @max(Hash.digest_length, ht);
|
|
278
|
-
var h: [h_len]u8 = [
|
|
278
|
+
var h: [h_len]u8 = @as([h_len - Hash.digest_length]u8, @splat(0)) ++ msg_hash;
|
|
279
279
|
|
|
280
280
|
const z = reduceToScalar(ht, h[0..ht].*);
|
|
281
281
|
if (z.isZero()) {
|
|
@@ -316,8 +316,8 @@ pub fn Ecdsa(comptime Curve: type, comptime Hash: type) type {
|
|
|
316
316
|
///
|
|
317
317
|
/// Except in tests, applications should generally call `generate()` instead of this function.
|
|
318
318
|
pub fn generateDeterministic(seed: [seed_length]u8) IdentityElementError!KeyPair {
|
|
319
|
-
const h
|
|
320
|
-
const k0
|
|
319
|
+
const h: [Hash.digest_length]u8 = @splat(0x00);
|
|
320
|
+
const k0: [SecretKey.encoded_length]u8 = @splat(0x01);
|
|
321
321
|
const secret_key = deterministicScalar(h, k0, seed).toBytes(.big);
|
|
322
322
|
return fromSecretKey(SecretKey{ .bytes = secret_key });
|
|
323
323
|
}
|
|
@@ -367,11 +367,11 @@ pub fn Ecdsa(comptime Curve: type, comptime Hash: type) type {
|
|
|
367
367
|
// Reduce the coordinate of a field element to the scalar field.
|
|
368
368
|
fn reduceToScalar(comptime unreduced_len: usize, s: [unreduced_len]u8) Curve.scalar.Scalar {
|
|
369
369
|
if (unreduced_len >= 48) {
|
|
370
|
-
var xs
|
|
370
|
+
var xs: [64]u8 = @splat(0);
|
|
371
371
|
@memcpy(xs[xs.len - s.len ..], s[0..]);
|
|
372
372
|
return Curve.scalar.Scalar.fromBytes64(xs, .big);
|
|
373
373
|
}
|
|
374
|
-
var xs
|
|
374
|
+
var xs: [48]u8 = @splat(0);
|
|
375
375
|
@memcpy(xs[xs.len - s.len ..], s[0..]);
|
|
376
376
|
return Curve.scalar.Scalar.fromBytes48(xs, .big);
|
|
377
377
|
}
|
|
@@ -379,9 +379,9 @@ pub fn Ecdsa(comptime Curve: type, comptime Hash: type) type {
|
|
|
379
379
|
// Create a deterministic scalar according to a secret key and optional noise.
|
|
380
380
|
// This uses the overly conservative scheme from the "Deterministic ECDSA and EdDSA Signatures with Additional Randomness" draft.
|
|
381
381
|
fn deterministicScalar(h: [Hash.digest_length]u8, secret_key: Curve.scalar.CompressedScalar, noise: ?[noise_length]u8) Curve.scalar.Scalar {
|
|
382
|
-
var k
|
|
383
|
-
var m
|
|
384
|
-
var t
|
|
382
|
+
var k: [h.len]u8 = @splat(0);
|
|
383
|
+
var m: [h.len + 1 + noise_length + secret_key.len + h.len]u8 = @splat(0);
|
|
384
|
+
var t: [Curve.scalar.encoded_length]u8 = @splat(0);
|
|
385
385
|
const m_v = m[0..h.len];
|
|
386
386
|
const m_i = &m[m_v.len];
|
|
387
387
|
const m_z = m[m_v.len + 1 ..][0..noise_length];
|
package/std/crypto/ff.zig
CHANGED
|
@@ -96,7 +96,7 @@ pub fn Uint(comptime max_bits: comptime_int) type {
|
|
|
96
96
|
|
|
97
97
|
/// The zero integer.
|
|
98
98
|
pub const zero: Self = .{
|
|
99
|
-
.limbs_buffer =
|
|
99
|
+
.limbs_buffer = @splat(0),
|
|
100
100
|
.limbs_len = max_limbs_count,
|
|
101
101
|
};
|
|
102
102
|
|
|
@@ -738,7 +738,7 @@ pub fn Modulus(comptime max_bits: comptime_int) type {
|
|
|
738
738
|
}
|
|
739
739
|
} else {
|
|
740
740
|
// Use a precomputation table for large exponents
|
|
741
|
-
var pc = [1]Fe{x} ++ [
|
|
741
|
+
var pc: [15]Fe = [1]Fe{x} ++ @as([14]Fe, @splat(self.zero));
|
|
742
742
|
if (!x.montgomery) {
|
|
743
743
|
self.toMontgomery(&pc[0]) catch unreachable;
|
|
744
744
|
}
|
|
@@ -417,8 +417,8 @@ fn Hash(comptime endian: std.builtin.Endian, comptime shift_key: bool) type {
|
|
|
417
417
|
const htest = @import("test.zig");
|
|
418
418
|
|
|
419
419
|
test "ghash" {
|
|
420
|
-
const key
|
|
421
|
-
const m
|
|
420
|
+
const key: [16]u8 = @splat(0x42);
|
|
421
|
+
const m: [256]u8 = @splat(0x69);
|
|
422
422
|
|
|
423
423
|
var st = Ghash.init(&key);
|
|
424
424
|
st.update(&m);
|
|
@@ -467,8 +467,8 @@ test "ghash2" {
|
|
|
467
467
|
}
|
|
468
468
|
|
|
469
469
|
test "polyval" {
|
|
470
|
-
const key
|
|
471
|
-
const m
|
|
470
|
+
const key: [16]u8 = @splat(0x42);
|
|
471
|
+
const m: [256]u8 = @splat(0x69);
|
|
472
472
|
|
|
473
473
|
var st = Polyval.init(&key);
|
|
474
474
|
st.update(&m);
|
package/std/crypto/hkdf.zig
CHANGED
|
@@ -72,7 +72,7 @@ pub fn Hkdf(comptime Hmac: type) type {
|
|
|
72
72
|
const htest = @import("test.zig");
|
|
73
73
|
|
|
74
74
|
test "Hkdf" {
|
|
75
|
-
const ikm
|
|
75
|
+
const ikm: [22]u8 = @splat(0x0b);
|
|
76
76
|
const salt = [_]u8{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c };
|
|
77
77
|
const context = [_]u8{ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9 };
|
|
78
78
|
const kdf = HkdfSha256;
|
package/std/crypto/isap.zig
CHANGED
|
@@ -42,7 +42,7 @@ pub const IsapA128A = struct {
|
|
|
42
42
|
break;
|
|
43
43
|
}
|
|
44
44
|
} else {
|
|
45
|
-
var padded
|
|
45
|
+
var padded: [8]u8 = @splat(0);
|
|
46
46
|
@memcpy(padded[0..left], m[i..]);
|
|
47
47
|
padded[left] = 0x80;
|
|
48
48
|
isap.st.addBytes(&padded);
|
|
@@ -169,8 +169,8 @@ pub const IsapA128A = struct {
|
|
|
169
169
|
};
|
|
170
170
|
|
|
171
171
|
test "ISAP" {
|
|
172
|
-
const k
|
|
173
|
-
const n
|
|
172
|
+
const k: [16]u8 = @splat(1);
|
|
173
|
+
const n: [16]u8 = @splat(2);
|
|
174
174
|
var tag: [16]u8 = undefined;
|
|
175
175
|
const ad = "ad";
|
|
176
176
|
var msg = "test";
|
|
@@ -881,7 +881,7 @@ fn ktMultiThreaded(
|
|
|
881
881
|
// Buffer for out-of-order results (select_buf slots get reused)
|
|
882
882
|
const pending_cv_buf = try allocator.alloc([leaves_per_batch * cv_size]u8, max_concurrent);
|
|
883
883
|
defer allocator.free(pending_cv_buf);
|
|
884
|
-
var pending_cv_lens: [256]usize =
|
|
884
|
+
var pending_cv_lens: [256]usize = @splat(0);
|
|
885
885
|
|
|
886
886
|
var select_outstanding: usize = 0;
|
|
887
887
|
var select: Select = .init(io, select_buf);
|