authorgravatar for 124872+jedisct1@users.noreply.github.comFrank Denis <124872+jedisct1@users.noreply.github.com> 2026-10-10 12:43:57+02:00
committergravatar for 124872+jedisct1@users.noreply.github.comFrank Denis <124872+jedisct1@users.noreply.github.com> 2026-10-10 12:43:57+02:00
log3626a240e43d4e40cda191a4e780a94c4ec601bc
treefdf9fcb4204b51ddea949e18781e5334c7acc5cd
parent0e494a3345f1c635d5979571dd55a1c663992d97
parentf1fac3c25e6227ad81a0075a08f708b8c81a68b3

Merge pull request 'crypto.ml_kem: work around LLVM23 miscompilation on riscv64' (#37135) from jedisct1/zig:riscv64workaround into master

Reviewed-on: https://codeberg.org/ziglang/zig/pulls/37135 Reviewed-by: Alex Rønne Petersen <alex@alexrp.com>

2 files changed, 1 insertions(+), 69 deletions(-)

lib/std/crypto/hybrid_kem.zig-61
......@@ -13,7 +13,6 @@
1313//! The combiner uses the C2PRI construction to derive the final shared secret
1414//! from the component shared secrets, ciphertext, and public key.
1515
16const builtin = @import("builtin");
1716const std = @import("std");
1817const crypto = std.crypto;
1918const fmt = std.fmt;
......@@ -371,8 +370,6 @@ test "MLKEM768-X25519 basic round trip" {
371370}
372371
373372test "MLKEM768-X25519 test vector 0" {
374 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
375
376373 var seed: [32]u8 = undefined;
377374 var expected_ek: [1216]u8 = undefined;
378375 var randomness: [64]u8 = undefined;
......@@ -397,8 +394,6 @@ test "MLKEM768-X25519 test vector 0" {
397394}
398395
399396test "MLKEM768-X25519 test vector 1" {
400 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
401
402397 var seed: [32]u8 = undefined;
403398 var expected_ek: [1216]u8 = undefined;
404399 var randomness: [64]u8 = undefined;
......@@ -423,8 +418,6 @@ test "MLKEM768-X25519 test vector 1" {
423418}
424419
425420test "MLKEM768-X25519 test vector 2" {
426 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
427
428421 var seed: [32]u8 = undefined;
429422 var expected_ek: [1216]u8 = undefined;
430423 var randomness: [64]u8 = undefined;
......@@ -449,8 +442,6 @@ test "MLKEM768-X25519 test vector 2" {
449442}
450443
451444test "MLKEM768-X25519 test vector 3" {
452 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
453
454445 var seed: [32]u8 = undefined;
455446 var expected_ek: [1216]u8 = undefined;
456447 var randomness: [64]u8 = undefined;
......@@ -475,8 +466,6 @@ test "MLKEM768-X25519 test vector 3" {
475466}
476467
477468test "MLKEM768-X25519 test vector 4" {
478 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
479
480469 var seed: [32]u8 = undefined;
481470 var expected_ek: [1216]u8 = undefined;
482471 var randomness: [64]u8 = undefined;
......@@ -501,8 +490,6 @@ test "MLKEM768-X25519 test vector 4" {
501490}
502491
503492test "MLKEM768-X25519 test vector 5" {
504 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
505
506493 var seed: [32]u8 = undefined;
507494 var expected_ek: [1216]u8 = undefined;
508495 var randomness: [64]u8 = undefined;
......@@ -527,8 +514,6 @@ test "MLKEM768-X25519 test vector 5" {
527514}
528515
529516test "MLKEM768-X25519 test vector 6" {
530 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
531
532517 var seed: [32]u8 = undefined;
533518 var expected_ek: [1216]u8 = undefined;
534519 var randomness: [64]u8 = undefined;
......@@ -553,8 +538,6 @@ test "MLKEM768-X25519 test vector 6" {
553538}
554539
555540test "MLKEM768-X25519 test vector 7" {
556 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
557
558541 var seed: [32]u8 = undefined;
559542 var expected_ek: [1216]u8 = undefined;
560543 var randomness: [64]u8 = undefined;
......@@ -579,8 +562,6 @@ test "MLKEM768-X25519 test vector 7" {
579562}
580563
581564test "MLKEM768-X25519 test vector 8" {
582 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
583
584565 var seed: [32]u8 = undefined;
585566 var expected_ek: [1216]u8 = undefined;
586567 var randomness: [64]u8 = undefined;
......@@ -605,8 +586,6 @@ test "MLKEM768-X25519 test vector 8" {
605586}
606587
607588test "MLKEM768-X25519 test vector 9" {
608 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
609
610589 var seed: [32]u8 = undefined;
611590 var expected_ek: [1216]u8 = undefined;
612591 var randomness: [64]u8 = undefined;
......@@ -631,8 +610,6 @@ test "MLKEM768-X25519 test vector 9" {
631610}
632611
633612test "MLKEM768-P256 test vector 0" {
634 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
635
636613 var seed: [32]u8 = undefined;
637614 var expected_ek: [1249]u8 = undefined;
638615 var randomness: [160]u8 = undefined;
......@@ -657,8 +634,6 @@ test "MLKEM768-P256 test vector 0" {
657634}
658635
659636test "MLKEM768-P256 test vector 1" {
660 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
661
662637 var seed: [32]u8 = undefined;
663638 var expected_ek: [1249]u8 = undefined;
664639 var randomness: [160]u8 = undefined;
......@@ -683,8 +658,6 @@ test "MLKEM768-P256 test vector 1" {
683658}
684659
685660test "MLKEM768-P256 test vector 2" {
686 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
687
688661 var seed: [32]u8 = undefined;
689662 var expected_ek: [1249]u8 = undefined;
690663 var randomness: [160]u8 = undefined;
......@@ -709,8 +682,6 @@ test "MLKEM768-P256 test vector 2" {
709682}
710683
711684test "MLKEM768-P256 test vector 3" {
712 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
713
714685 var seed: [32]u8 = undefined;
715686 var expected_ek: [1249]u8 = undefined;
716687 var randomness: [160]u8 = undefined;
......@@ -735,8 +706,6 @@ test "MLKEM768-P256 test vector 3" {
735706}
736707
737708test "MLKEM768-P256 test vector 4" {
738 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
739
740709 var seed: [32]u8 = undefined;
741710 var expected_ek: [1249]u8 = undefined;
742711 var randomness: [160]u8 = undefined;
......@@ -761,8 +730,6 @@ test "MLKEM768-P256 test vector 4" {
761730}
762731
763732test "MLKEM768-P256 test vector 5" {
764 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
765
766733 var seed: [32]u8 = undefined;
767734 var expected_ek: [1249]u8 = undefined;
768735 var randomness: [160]u8 = undefined;
......@@ -787,8 +754,6 @@ test "MLKEM768-P256 test vector 5" {
787754}
788755
789756test "MLKEM768-P256 test vector 6" {
790 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
791
792757 var seed: [32]u8 = undefined;
793758 var expected_ek: [1249]u8 = undefined;
794759 var randomness: [160]u8 = undefined;
......@@ -813,8 +778,6 @@ test "MLKEM768-P256 test vector 6" {
813778}
814779
815780test "MLKEM768-P256 test vector 7" {
816 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
817
818781 var seed: [32]u8 = undefined;
819782 var expected_ek: [1249]u8 = undefined;
820783 var randomness: [160]u8 = undefined;
......@@ -839,8 +802,6 @@ test "MLKEM768-P256 test vector 7" {
839802}
840803
841804test "MLKEM768-P256 test vector 8" {
842 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
843
844805 var seed: [32]u8 = undefined;
845806 var expected_ek: [1249]u8 = undefined;
846807 var randomness: [160]u8 = undefined;
......@@ -865,8 +826,6 @@ test "MLKEM768-P256 test vector 8" {
865826}
866827
867828test "MLKEM768-P256 test vector 9" {
868 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
869
870829 var seed: [32]u8 = undefined;
871830 var expected_ek: [1249]u8 = undefined;
872831 var randomness: [160]u8 = undefined;
......@@ -891,8 +850,6 @@ test "MLKEM768-P256 test vector 9" {
891850}
892851
893852test "MLKEM1024-P384 test vector 0" {
894 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
895
896853 var seed: [32]u8 = undefined;
897854 var expected_ek: [1665]u8 = undefined;
898855 var randomness: [80]u8 = undefined;
......@@ -917,8 +874,6 @@ test "MLKEM1024-P384 test vector 0" {
917874}
918875
919876test "MLKEM1024-P384 test vector 1" {
920 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
921
922877 var seed: [32]u8 = undefined;
923878 var expected_ek: [1665]u8 = undefined;
924879 var randomness: [80]u8 = undefined;
......@@ -943,8 +898,6 @@ test "MLKEM1024-P384 test vector 1" {
943898}
944899
945900test "MLKEM1024-P384 test vector 2" {
946 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
947
948901 var seed: [32]u8 = undefined;
949902 var expected_ek: [1665]u8 = undefined;
950903 var randomness: [80]u8 = undefined;
......@@ -969,8 +922,6 @@ test "MLKEM1024-P384 test vector 2" {
969922}
970923
971924test "MLKEM1024-P384 test vector 3" {
972 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
973
974925 var seed: [32]u8 = undefined;
975926 var expected_ek: [1665]u8 = undefined;
976927 var randomness: [80]u8 = undefined;
......@@ -995,8 +946,6 @@ test "MLKEM1024-P384 test vector 3" {
995946}
996947
997948test "MLKEM1024-P384 test vector 4" {
998 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
999
1000949 var seed: [32]u8 = undefined;
1001950 var expected_ek: [1665]u8 = undefined;
1002951 var randomness: [80]u8 = undefined;
......@@ -1021,8 +970,6 @@ test "MLKEM1024-P384 test vector 4" {
1021970}
1022971
1023972test "MLKEM1024-P384 test vector 5" {
1024 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
1025
1026973 var seed: [32]u8 = undefined;
1027974 var expected_ek: [1665]u8 = undefined;
1028975 var randomness: [80]u8 = undefined;
......@@ -1047,8 +994,6 @@ test "MLKEM1024-P384 test vector 5" {
1047994}
1048995
1049996test "MLKEM1024-P384 test vector 6" {
1050 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
1051
1052997 var seed: [32]u8 = undefined;
1053998 var expected_ek: [1665]u8 = undefined;
1054999 var randomness: [80]u8 = undefined;
......@@ -1073,8 +1018,6 @@ test "MLKEM1024-P384 test vector 6" {
10731018}
10741019
10751020test "MLKEM1024-P384 test vector 7" {
1076 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
1077
10781021 var seed: [32]u8 = undefined;
10791022 var expected_ek: [1665]u8 = undefined;
10801023 var randomness: [80]u8 = undefined;
......@@ -1099,8 +1042,6 @@ test "MLKEM1024-P384 test vector 7" {
10991042}
11001043
11011044test "MLKEM1024-P384 test vector 8" {
1102 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
1103
11041045 var seed: [32]u8 = undefined;
11051046 var expected_ek: [1665]u8 = undefined;
11061047 var randomness: [80]u8 = undefined;
......@@ -1125,8 +1066,6 @@ test "MLKEM1024-P384 test vector 8" {
11251066}
11261067
11271068test "MLKEM1024-P384 test vector 9" {
1128 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
1129
11301069 var seed: [32]u8 = undefined;
11311070 var expected_ek: [1665]u8 = undefined;
11321071 var randomness: [80]u8 = undefined;
lib/std/crypto/ml_kem.zig+1-8
......@@ -1179,6 +1179,7 @@ const Poly = struct {
11791179
11801180 const T = switch (builtin.target.cpu.arch) {
11811181 .x86_64, .x86 => u32, // Generates better code on Intel CPUs
1182 .riscv64 => u32, // Work around LLVM miscompiling coefficient extraction with u64 batches https://codeberg.org/ziglang/zig/issues/37128
11821183 else => u64, // u128 might be faster on some other CPUs.
11831184 };
11841185
......@@ -1522,8 +1523,6 @@ test "Compression" {
15221523}
15231524
15241525test "noise" {
1525 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
1526
15271526 var seed: [32]u8 = undefined;
15281527 for (&seed, 0..) |*s, i| {
15291528 s.* = @as(u8, @intCast(i));
......@@ -1657,20 +1656,14 @@ test "Test happy flow" {
16571656// Code to test NIST Known Answer Tests (KAT), see PQCgenKAT.c.
16581657
16591658test "NIST KAT test d00.Kyber512" {
1660 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
1661
16621659 try testNistKat(d00.Kyber512, "e9c2bd37133fcb40772f81559f14b1f58dccd1c816701be9ba6214d43baf4547");
16631660}
16641661
16651662test "NIST KAT test d00.Kyber1024" {
1666 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
1667
16681663 try testNistKat(d00.Kyber1024, "89248f2f33f7f4f7051729111f3049c409a933ec904aedadf035f30fa5646cd5");
16691664}
16701665
16711666test "NIST KAT test d00.Kyber768" {
1672 if (builtin.zig_backend == .stage2_llvm and builtin.target.cpu.arch.isRiscv64()) return error.SkipZigTest; // https://codeberg.org/ziglang/zig/issues/37128
1673
16741667 try testNistKat(d00.Kyber768, "a1e122cad3c24bc51622e4c242d8b8acbcd3f618fee4220400605ca8f9ea02c2");
16751668}
16761669