Clear ML-KEM Keccak stack scratch#1771
Conversation
CBMC Results (ML-KEM-512)Full Results (191 proofs)
|
CBMC Results (ML-KEM-1024)Full Results (191 proofs)
|
CBMC Results (ML-KEM-768)Full Results (191 proofs)
|
There was a problem hiding this comment.
Mac Mini (M1, 2020) benchmarks
Details
| Benchmark suite | Current: e5b3150 | Previous: 799592d | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
12315 cycles |
12314 cycles |
1.00 |
ML-KEM-512 encaps |
14758 cycles |
14757 cycles |
1.00 |
ML-KEM-512 decaps |
19314 cycles |
19311 cycles |
1.00 |
ML-KEM-768 keypair |
21263 cycles |
21263 cycles |
1 |
ML-KEM-768 encaps |
23505 cycles |
23505 cycles |
1 |
ML-KEM-768 decaps |
30051 cycles |
30050 cycles |
1.00 |
ML-KEM-1024 keypair |
30315 cycles |
30314 cycles |
1.00 |
ML-KEM-1024 encaps |
34080 cycles |
34081 cycles |
1.00 |
ML-KEM-1024 decaps |
43697 cycles |
43696 cycles |
1.00 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
ppc64le (POWER10) benchmarks
Details
| Benchmark suite | Current: e5b3150 | Previous: 799592d | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
37995 cycles |
38031 cycles |
1.00 |
ML-KEM-512 encaps |
43524 cycles |
43673 cycles |
1.00 |
ML-KEM-512 decaps |
53817 cycles |
53684 cycles |
1.00 |
ML-KEM-768 keypair |
67254 cycles |
67972 cycles |
0.99 |
ML-KEM-768 encaps |
76024 cycles |
76571 cycles |
0.99 |
ML-KEM-768 decaps |
90493 cycles |
91370 cycles |
0.99 |
ML-KEM-1024 keypair |
107962 cycles |
107764 cycles |
1.00 |
ML-KEM-1024 encaps |
118593 cycles |
118422 cycles |
1.00 |
ML-KEM-1024 decaps |
137483 cycles |
136561 cycles |
1.01 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
Arm Cortex-A76 (Raspberry Pi 5) benchmarks
Details
| Benchmark suite | Current: e5b3150 | Previous: 799592d | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
28298 cycles |
28237 cycles |
1.00 |
ML-KEM-512 encaps |
34164 cycles |
34131 cycles |
1.00 |
ML-KEM-512 decaps |
44564 cycles |
44522 cycles |
1.00 |
ML-KEM-768 keypair |
47658 cycles |
47593 cycles |
1.00 |
ML-KEM-768 encaps |
53936 cycles |
53852 cycles |
1.00 |
ML-KEM-768 decaps |
68574 cycles |
68523 cycles |
1.00 |
ML-KEM-1024 keypair |
70415 cycles |
70156 cycles |
1.00 |
ML-KEM-1024 encaps |
78713 cycles |
78679 cycles |
1.00 |
ML-KEM-1024 decaps |
98408 cycles |
98306 cycles |
1.00 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
Intel Xeon 4th gen (c7i)
Details
| Benchmark suite | Current: e5b3150 | Previous: 799592d | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
11773 cycles |
11770 cycles |
1.00 |
ML-KEM-512 encaps |
13070 cycles |
13061 cycles |
1.00 |
ML-KEM-512 decaps |
17069 cycles |
17026 cycles |
1.00 |
ML-KEM-768 keypair |
19382 cycles |
19382 cycles |
1 |
ML-KEM-768 encaps |
20645 cycles |
20586 cycles |
1.00 |
ML-KEM-768 decaps |
26544 cycles |
26305 cycles |
1.01 |
ML-KEM-1024 keypair |
28072 cycles |
28114 cycles |
1.00 |
ML-KEM-1024 encaps |
30470 cycles |
30365 cycles |
1.00 |
ML-KEM-1024 decaps |
37798 cycles |
37411 cycles |
1.01 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
AMD EPYC 3rd gen (c6a)
Details
| Benchmark suite | Current: e5b3150 | Previous: 799592d | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
14557 cycles |
14446 cycles |
1.01 |
ML-KEM-512 encaps |
16074 cycles |
15942 cycles |
1.01 |
ML-KEM-512 decaps |
21443 cycles |
21333 cycles |
1.01 |
ML-KEM-768 keypair |
23963 cycles |
23765 cycles |
1.01 |
ML-KEM-768 encaps |
25383 cycles |
25215 cycles |
1.01 |
ML-KEM-768 decaps |
33155 cycles |
32939 cycles |
1.01 |
ML-KEM-1024 keypair |
33667 cycles |
33336 cycles |
1.01 |
ML-KEM-1024 encaps |
36141 cycles |
35874 cycles |
1.01 |
ML-KEM-1024 decaps |
46480 cycles |
46176 cycles |
1.01 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
Intel Xeon 3rd gen (c6i)
Details
| Benchmark suite | Current: e5b3150 | Previous: 799592d | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
17923 cycles |
17867 cycles |
1.00 |
ML-KEM-512 encaps |
20109 cycles |
20058 cycles |
1.00 |
ML-KEM-512 decaps |
26671 cycles |
26645 cycles |
1.00 |
ML-KEM-768 keypair |
31585 cycles |
29952 cycles |
1.05 |
ML-KEM-768 encaps |
32819 cycles |
32078 cycles |
1.02 |
ML-KEM-768 decaps |
44082 cycles |
41435 cycles |
1.06 |
ML-KEM-1024 keypair |
42114 cycles |
42375 cycles |
0.99 |
ML-KEM-1024 encaps |
44628 cycles |
45136 cycles |
0.99 |
ML-KEM-1024 decaps |
58195 cycles |
58003 cycles |
1.00 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
⚠️ Performance Alert ⚠️
Possible performance regression was detected for benchmark 'Intel Xeon 3rd gen (c6i)'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.03.
| Benchmark suite | Current: e5b3150 | Previous: 799592d | Ratio |
|---|---|---|---|
ML-KEM-768 keypair |
31585 cycles |
29952 cycles |
1.05 |
ML-KEM-768 decaps |
44082 cycles |
41435 cycles |
1.06 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
AMD EPYC 4th gen (c7a)
Details
| Benchmark suite | Current: e5b3150 | Previous: 799592d | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
12859 cycles |
12795 cycles |
1.01 |
ML-KEM-512 encaps |
14269 cycles |
14228 cycles |
1.00 |
ML-KEM-512 decaps |
19012 cycles |
18974 cycles |
1.00 |
ML-KEM-768 keypair |
21638 cycles |
21547 cycles |
1.00 |
ML-KEM-768 encaps |
22776 cycles |
22721 cycles |
1.00 |
ML-KEM-768 decaps |
29777 cycles |
29718 cycles |
1.00 |
ML-KEM-1024 keypair |
30797 cycles |
30490 cycles |
1.01 |
ML-KEM-1024 encaps |
32720 cycles |
32665 cycles |
1.00 |
ML-KEM-1024 decaps |
41970 cycles |
42061 cycles |
1.00 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
Intel Xeon 4th gen (c7i) (no-opt)
Details
| Benchmark suite | Current: e5b3150 | Previous: 799592d | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
27554 cycles |
27644 cycles |
1.00 |
ML-KEM-512 encaps |
35623 cycles |
35655 cycles |
1.00 |
ML-KEM-512 decaps |
44504 cycles |
44287 cycles |
1.00 |
ML-KEM-768 keypair |
44182 cycles |
44256 cycles |
1.00 |
ML-KEM-768 encaps |
54978 cycles |
55139 cycles |
1.00 |
ML-KEM-768 decaps |
68345 cycles |
68193 cycles |
1.00 |
ML-KEM-1024 keypair |
67648 cycles |
67860 cycles |
1.00 |
ML-KEM-1024 encaps |
79122 cycles |
79004 cycles |
1.00 |
ML-KEM-1024 decaps |
95874 cycles |
96202 cycles |
1.00 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
AMD EPYC 3rd gen (c6a) (no-opt)
Details
| Benchmark suite | Current: e5b3150 | Previous: 799592d | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
40251 cycles |
40234 cycles |
1.00 |
ML-KEM-512 encaps |
48390 cycles |
48398 cycles |
1.00 |
ML-KEM-512 decaps |
62212 cycles |
62216 cycles |
1.00 |
ML-KEM-768 keypair |
62728 cycles |
62819 cycles |
1.00 |
ML-KEM-768 encaps |
75017 cycles |
75293 cycles |
1.00 |
ML-KEM-768 decaps |
92545 cycles |
92353 cycles |
1.00 |
ML-KEM-1024 keypair |
95003 cycles |
95045 cycles |
1.00 |
ML-KEM-1024 encaps |
110032 cycles |
109931 cycles |
1.00 |
ML-KEM-1024 decaps |
132753 cycles |
132385 cycles |
1.00 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
AMD EPYC 4th gen (c7a) (no-opt)
Details
| Benchmark suite | Current: e5b3150 | Previous: 799592d | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
36783 cycles |
36774 cycles |
1.00 |
ML-KEM-512 encaps |
42828 cycles |
42816 cycles |
1.00 |
ML-KEM-512 decaps |
55578 cycles |
55560 cycles |
1.00 |
ML-KEM-768 keypair |
58043 cycles |
58004 cycles |
1.00 |
ML-KEM-768 encaps |
66972 cycles |
66910 cycles |
1.00 |
ML-KEM-768 decaps |
83573 cycles |
83667 cycles |
1.00 |
ML-KEM-1024 keypair |
88578 cycles |
88511 cycles |
1.00 |
ML-KEM-1024 encaps |
99096 cycles |
99027 cycles |
1.00 |
ML-KEM-1024 decaps |
120507 cycles |
120475 cycles |
1.00 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
Intel Xeon 3rd gen (c6i) (no-opt)
Details
| Benchmark suite | Current: e5b3150 | Previous: 799592d | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
46772 cycles |
46755 cycles |
1.00 |
ML-KEM-512 encaps |
55610 cycles |
55553 cycles |
1.00 |
ML-KEM-512 decaps |
71200 cycles |
71195 cycles |
1.00 |
ML-KEM-768 keypair |
74381 cycles |
74427 cycles |
1.00 |
ML-KEM-768 encaps |
85915 cycles |
85925 cycles |
1.00 |
ML-KEM-768 decaps |
107081 cycles |
107032 cycles |
1.00 |
ML-KEM-1024 keypair |
111359 cycles |
111559 cycles |
1.00 |
ML-KEM-1024 encaps |
126065 cycles |
126135 cycles |
1.00 |
ML-KEM-1024 decaps |
152142 cycles |
152221 cycles |
1.00 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
Graviton4
Details
| Benchmark suite | Current: e5b3150 | Previous: 799592d | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
17729 cycles |
17687 cycles |
1.00 |
ML-KEM-512 encaps |
20624 cycles |
20598 cycles |
1.00 |
ML-KEM-512 decaps |
27020 cycles |
27004 cycles |
1.00 |
ML-KEM-768 keypair |
29954 cycles |
29901 cycles |
1.00 |
ML-KEM-768 encaps |
32700 cycles |
32633 cycles |
1.00 |
ML-KEM-768 decaps |
41966 cycles |
41918 cycles |
1.00 |
ML-KEM-1024 keypair |
43841 cycles |
43725 cycles |
1.00 |
ML-KEM-1024 encaps |
48793 cycles |
48679 cycles |
1.00 |
ML-KEM-1024 decaps |
61484 cycles |
61384 cycles |
1.00 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
Graviton2
Details
| Benchmark suite | Current: e5b3150 | Previous: 799592d | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
28274 cycles |
28237 cycles |
1.00 |
ML-KEM-512 encaps |
34152 cycles |
34120 cycles |
1.00 |
ML-KEM-512 decaps |
44494 cycles |
44477 cycles |
1.00 |
ML-KEM-768 keypair |
47695 cycles |
47612 cycles |
1.00 |
ML-KEM-768 encaps |
53920 cycles |
53869 cycles |
1.00 |
ML-KEM-768 decaps |
68578 cycles |
68555 cycles |
1.00 |
ML-KEM-1024 keypair |
70435 cycles |
70258 cycles |
1.00 |
ML-KEM-1024 encaps |
78748 cycles |
78634 cycles |
1.00 |
ML-KEM-1024 decaps |
98581 cycles |
98283 cycles |
1.00 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
Graviton4 (no-opt)
Details
| Benchmark suite | Current: e5b3150 | Previous: 799592d | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
35298 cycles |
35283 cycles |
1.00 |
ML-KEM-512 encaps |
40041 cycles |
40023 cycles |
1.00 |
ML-KEM-512 decaps |
50626 cycles |
50624 cycles |
1.00 |
ML-KEM-768 keypair |
56805 cycles |
56808 cycles |
1.00 |
ML-KEM-768 encaps |
64051 cycles |
64053 cycles |
1.00 |
ML-KEM-768 decaps |
78491 cycles |
78497 cycles |
1.00 |
ML-KEM-1024 keypair |
87340 cycles |
87387 cycles |
1.00 |
ML-KEM-1024 encaps |
96702 cycles |
96684 cycles |
1.00 |
ML-KEM-1024 decaps |
114724 cycles |
114714 cycles |
1.00 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
Graviton3
Details
| Benchmark suite | Current: e5b3150 | Previous: 799592d | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
18736 cycles |
18663 cycles |
1.00 |
ML-KEM-512 encaps |
21898 cycles |
21857 cycles |
1.00 |
ML-KEM-512 decaps |
28867 cycles |
28843 cycles |
1.00 |
ML-KEM-768 keypair |
31634 cycles |
31578 cycles |
1.00 |
ML-KEM-768 encaps |
34737 cycles |
34670 cycles |
1.00 |
ML-KEM-768 decaps |
44835 cycles |
44807 cycles |
1.00 |
ML-KEM-1024 keypair |
46249 cycles |
46139 cycles |
1.00 |
ML-KEM-1024 encaps |
51597 cycles |
51481 cycles |
1.00 |
ML-KEM-1024 decaps |
65090 cycles |
64967 cycles |
1.00 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
Graviton2 (no-opt)
Details
| Benchmark suite | Current: e5b3150 | Previous: 799592d | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
58718 cycles |
58734 cycles |
1.00 |
ML-KEM-512 encaps |
68465 cycles |
68440 cycles |
1.00 |
ML-KEM-512 decaps |
87331 cycles |
87340 cycles |
1.00 |
ML-KEM-768 keypair |
94966 cycles |
94930 cycles |
1.00 |
ML-KEM-768 encaps |
109092 cycles |
109078 cycles |
1.00 |
ML-KEM-768 decaps |
134063 cycles |
134029 cycles |
1.00 |
ML-KEM-1024 keypair |
151632 cycles |
150888 cycles |
1.00 |
ML-KEM-1024 encaps |
165983 cycles |
165541 cycles |
1.00 |
ML-KEM-1024 decaps |
199536 cycles |
198797 cycles |
1.00 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
Arm Cortex-A55 (Snapdragon 888) benchmarks
Details
| Benchmark suite | Current: e5b3150 | Previous: 2c72415 | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
59822 cycles |
59790 cycles |
1.00 |
ML-KEM-512 encaps |
67496 cycles |
67441 cycles |
1.00 |
ML-KEM-512 decaps |
86491 cycles |
86510 cycles |
1.00 |
ML-KEM-768 keypair |
97527 cycles |
97515 cycles |
1.00 |
ML-KEM-768 encaps |
110905 cycles |
110878 cycles |
1.00 |
ML-KEM-768 decaps |
138093 cycles |
137955 cycles |
1.00 |
ML-KEM-1024 keypair |
154701 cycles |
154924 cycles |
1.00 |
ML-KEM-1024 encaps |
171035 cycles |
171448 cycles |
1.00 |
ML-KEM-1024 decaps |
208068 cycles |
208180 cycles |
1.00 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
Graviton3 (no-opt)
Details
| Benchmark suite | Current: e5b3150 | Previous: 799592d | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
38914 cycles |
38902 cycles |
1.00 |
ML-KEM-512 encaps |
44398 cycles |
44388 cycles |
1.00 |
ML-KEM-512 decaps |
56208 cycles |
56210 cycles |
1.00 |
ML-KEM-768 keypair |
62482 cycles |
62490 cycles |
1.00 |
ML-KEM-768 encaps |
70440 cycles |
70446 cycles |
1.00 |
ML-KEM-768 decaps |
86366 cycles |
86371 cycles |
1.00 |
ML-KEM-1024 keypair |
95816 cycles |
95879 cycles |
1.00 |
ML-KEM-1024 encaps |
106129 cycles |
106090 cycles |
1.00 |
ML-KEM-1024 decaps |
125761 cycles |
125742 cycles |
1.00 |
This comment was automatically generated by workflow using github-action-benchmark.
oqs-bot
left a comment
There was a problem hiding this comment.
SpacemiT K1 8 (Banana Pi F3) benchmarks
Details
| Benchmark suite | Current: e5b3150 | Previous: 799592d | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
143055 cycles |
143022 cycles |
1.00 |
ML-KEM-512 encaps |
151409 cycles |
151363 cycles |
1.00 |
ML-KEM-512 decaps |
189755 cycles |
189643 cycles |
1.00 |
ML-KEM-768 keypair |
233079 cycles |
233081 cycles |
1.00 |
ML-KEM-768 encaps |
250313 cycles |
250329 cycles |
1.00 |
ML-KEM-768 decaps |
304923 cycles |
304928 cycles |
1.00 |
ML-KEM-1024 keypair |
365633 cycles |
365497 cycles |
1.00 |
ML-KEM-1024 encaps |
388961 cycles |
387803 cycles |
1.00 |
ML-KEM-1024 decaps |
459330 cycles |
458211 cycles |
1.00 |
This comment was automatically generated by workflow using github-action-benchmark.
oqs-bot
left a comment
There was a problem hiding this comment.
Arm Cortex-A72 (Raspberry Pi 4) benchmarks
Details
| Benchmark suite | Current: e5b3150 | Previous: 799592d | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
51160 cycles |
50970 cycles |
1.00 |
ML-KEM-512 encaps |
59082 cycles |
59151 cycles |
1.00 |
ML-KEM-512 decaps |
75325 cycles |
75254 cycles |
1.00 |
ML-KEM-768 keypair |
86678 cycles |
86259 cycles |
1.00 |
ML-KEM-768 encaps |
96230 cycles |
94881 cycles |
1.01 |
ML-KEM-768 decaps |
117701 cycles |
117239 cycles |
1.00 |
ML-KEM-1024 keypair |
131729 cycles |
131888 cycles |
1.00 |
ML-KEM-1024 encaps |
143492 cycles |
142478 cycles |
1.01 |
ML-KEM-1024 decaps |
174559 cycles |
174909 cycles |
1.00 |
This comment was automatically generated by workflow using github-action-benchmark.
Wipe the AVX2, AArch64 scalar-hybrid, and Armv8.1-M MVE x4 Keccak scratch frames before returning, and refresh the covered HOL Light proof copies for the changed instruction streams. This keeps state-derived stack scratch from surviving past the permutation return path. Verification: - nix develop .#hol_light-cross-aarch64 -c make -B -C proofs/hol_light/aarch64 mlkem/keccak_f1600_x4_v8a_scalar_hybrid_aarch64_asm.correct - nix develop .#hol_light-cross-aarch64 -c make -B -C proofs/hol_light/aarch64 mlkem/keccak_f1600_x4_v8a_v84a_scalar_hybrid_aarch64_asm.correct - nix develop .#hol_light-cross-x86_64 -c make -B -C proofs/hol_light/x86_64 mlkem/keccak_f1600_x4_avx2_asm.correct Co-authored-by: Codex <codex@openai.com> Signed-off-by: Joe Doyle <joseph.doyle@trailofbits.com>
Regenerate the forced-cross Keccak outputs after adding stack clearing to the shared x4 source. The aarch64 host-local autogen path skipped the x86_64 generated files, but CI regenerates them on x86_64 and with forced cross toolchains. This expands the generated wipe-store blocks in the checked-in Armv8.1-M and x86_64 outputs so the native autogen and HOL-Light bytecode dry-run checks agree with the source. Co-authored-by: Codex <codex@openai.com> Signed-off-by: Joe Doyle <joseph.doyle@trailofbits.com>
e5b3150 to
dec107c
Compare
Clear ML-KEM Keccak stack scratch
Summary
Proof Diff Shape
The proof delta follows the changed postambles. The AArch64 x4 Keccak postambles grow from 48 bytes to 108 bytes after adding the zero stores, so the HOL Light proof scripts refresh the embedded bytecode, postamble length constants, and subroutine wrapper step counts. The x86_64 AVX2 proof steps through the additional wipe stores and carries the corresponding event-trace/maychange obligations through the subroutine safety wrapper.
Verification
nix develop .#hol_light-cross-aarch64 -c make -B -C proofs/hol_light/aarch64 mlkem/keccak_f1600_x4_v8a_scalar_hybrid_aarch64_asm.correctnix develop .#hol_light-cross-aarch64 -c make -B -C proofs/hol_light/aarch64 mlkem/keccak_f1600_x4_v8a_v84a_scalar_hybrid_aarch64_asm.correctnix develop .#hol_light-cross-x86_64 -c make -B -C proofs/hol_light/x86_64 mlkem/keccak_f1600_x4_avx2_asm.correctCo-authored-by: Codex codex@openai.com
Signed-off-by: Joe Doyle joseph.doyle@trailofbits.com
This work was completed by Trail of Bits as part of the Patch The Planet project in collaboration with OpenAI. The issue was identified primarily by the Codex coding agent, and manually reviewed before submission.