RFC: Add incremental encaps API to support ML-KEM Braid#1619
RFC: Add incremental encaps API to support ML-KEM Braid#1619mkannwischer wants to merge 2 commits into
Conversation
325ab51 to
285fc8a
Compare
There was a problem hiding this comment.
Intel Xeon 4th gen (c7i)
Details
| Benchmark suite | Current: 856b540 | Previous: c0fb232 | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
11667 cycles |
11774 cycles |
0.99 |
ML-KEM-512 encaps |
13401 cycles |
13356 cycles |
1.00 |
ML-KEM-512 decaps |
17333 cycles |
17522 cycles |
0.99 |
ML-KEM-768 keypair |
20339 cycles |
20211 cycles |
1.01 |
ML-KEM-768 encaps |
21438 cycles |
21480 cycles |
1.00 |
ML-KEM-768 decaps |
27521 cycles |
27490 cycles |
1.00 |
ML-KEM-1024 keypair |
28756 cycles |
28747 cycles |
1.00 |
ML-KEM-1024 encaps |
30828 cycles |
30705 cycles |
1.00 |
ML-KEM-1024 decaps |
38764 cycles |
38459 cycles |
1.01 |
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: 856b540 | Previous: c0fb232 | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
59376 cycles |
59560 cycles |
1.00 |
ML-KEM-512 encaps |
72055 cycles |
72057 cycles |
1.00 |
ML-KEM-512 decaps |
91812 cycles |
91947 cycles |
1.00 |
ML-KEM-768 keypair |
98208 cycles |
98659 cycles |
1.00 |
ML-KEM-768 encaps |
114736 cycles |
115076 cycles |
1.00 |
ML-KEM-768 decaps |
140432 cycles |
140831 cycles |
1.00 |
ML-KEM-1024 keypair |
148862 cycles |
148847 cycles |
1.00 |
ML-KEM-1024 encaps |
167902 cycles |
167928 cycles |
1.00 |
ML-KEM-1024 decaps |
198941 cycles |
199093 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)
Details
| Benchmark suite | Current: 856b540 | Previous: c0fb232 | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
13939 cycles |
13907 cycles |
1.00 |
ML-KEM-512 encaps |
15689 cycles |
15691 cycles |
1.00 |
ML-KEM-512 decaps |
21157 cycles |
21253 cycles |
1.00 |
ML-KEM-768 keypair |
23701 cycles |
23709 cycles |
1.00 |
ML-KEM-768 encaps |
25099 cycles |
25155 cycles |
1.00 |
ML-KEM-768 decaps |
33133 cycles |
33007 cycles |
1.00 |
ML-KEM-1024 keypair |
33205 cycles |
33204 cycles |
1.00 |
ML-KEM-1024 encaps |
35665 cycles |
35641 cycles |
1.00 |
ML-KEM-1024 decaps |
46453 cycles |
46195 cycles |
1.01 |
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 'AMD EPYC 3rd gen (c6a)'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.03.
| Benchmark suite | Current: a4e4e31 | Previous: 2bf8e59 | Ratio |
|---|---|---|---|
ML-KEM-512 encaps |
16707 cycles |
15974 cycles |
1.05 |
ML-KEM-768 decaps |
35711 cycles |
33345 cycles |
1.07 |
ML-KEM-1024 decaps |
50650 cycles |
46735 cycles |
1.08 |
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: 856b540 | Previous: c0fb232 | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
28423 cycles |
28218 cycles |
1.01 |
ML-KEM-512 encaps |
35312 cycles |
36635 cycles |
0.96 |
ML-KEM-512 decaps |
45241 cycles |
45192 cycles |
1.00 |
ML-KEM-768 keypair |
46322 cycles |
46296 cycles |
1.00 |
ML-KEM-768 encaps |
55233 cycles |
55812 cycles |
0.99 |
ML-KEM-768 decaps |
69681 cycles |
69913 cycles |
1.00 |
ML-KEM-1024 keypair |
70870 cycles |
70293 cycles |
1.01 |
ML-KEM-1024 encaps |
83960 cycles |
82553 cycles |
1.02 |
ML-KEM-1024 decaps |
101882 cycles |
98932 cycles |
1.03 |
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: 856b540 | Previous: c0fb232 | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
12697 cycles |
12706 cycles |
1.00 |
ML-KEM-512 encaps |
14226 cycles |
14177 cycles |
1.00 |
ML-KEM-512 decaps |
19050 cycles |
19036 cycles |
1.00 |
ML-KEM-768 keypair |
21894 cycles |
21905 cycles |
1.00 |
ML-KEM-768 encaps |
22989 cycles |
22946 cycles |
1.00 |
ML-KEM-768 decaps |
30055 cycles |
29897 cycles |
1.01 |
ML-KEM-1024 keypair |
30714 cycles |
30697 cycles |
1.00 |
ML-KEM-1024 encaps |
32722 cycles |
32787 cycles |
1.00 |
ML-KEM-1024 decaps |
42327 cycles |
42190 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 'AMD EPYC 4th gen (c7a)'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.03.
| Benchmark suite | Current: a4e4e31 | Previous: 2bf8e59 | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
13236 cycles |
12779 cycles |
1.04 |
ML-KEM-512 encaps |
15642 cycles |
14273 cycles |
1.10 |
ML-KEM-768 decaps |
32957 cycles |
30058 cycles |
1.10 |
ML-KEM-1024 keypair |
34340 cycles |
32987 cycles |
1.04 |
ML-KEM-1024 decaps |
47071 cycles |
42393 cycles |
1.11 |
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: 856b540 | Previous: c0fb232 | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
17471 cycles |
17431 cycles |
1.00 |
ML-KEM-512 encaps |
19845 cycles |
19836 cycles |
1.00 |
ML-KEM-512 decaps |
26406 cycles |
26354 cycles |
1.00 |
ML-KEM-768 keypair |
29863 cycles |
29796 cycles |
1.00 |
ML-KEM-768 encaps |
31769 cycles |
31052 cycles |
1.02 |
ML-KEM-768 decaps |
41439 cycles |
41419 cycles |
1.00 |
ML-KEM-1024 keypair |
42329 cycles |
42318 cycles |
1.00 |
ML-KEM-1024 encaps |
45595 cycles |
45892 cycles |
0.99 |
ML-KEM-1024 decaps |
59304 cycles |
61098 cycles |
0.97 |
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: a4e4e31 | Previous: 2bf8e59 | Ratio |
|---|---|---|---|
ML-KEM-512 encaps |
20660 cycles |
19953 cycles |
1.04 |
ML-KEM-768 keypair |
32264 cycles |
31153 cycles |
1.04 |
ML-KEM-1024 decaps |
61128 cycles |
58193 cycles |
1.05 |
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: 856b540 | Previous: c0fb232 | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
40231 cycles |
40276 cycles |
1.00 |
ML-KEM-512 encaps |
48480 cycles |
48441 cycles |
1.00 |
ML-KEM-512 decaps |
62705 cycles |
62607 cycles |
1.00 |
ML-KEM-768 keypair |
63832 cycles |
63754 cycles |
1.00 |
ML-KEM-768 encaps |
74842 cycles |
75005 cycles |
1.00 |
ML-KEM-768 decaps |
93488 cycles |
93641 cycles |
1.00 |
ML-KEM-1024 keypair |
95299 cycles |
95232 cycles |
1.00 |
ML-KEM-1024 encaps |
109171 cycles |
109421 cycles |
1.00 |
ML-KEM-1024 decaps |
132011 cycles |
132194 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: 856b540 | Previous: c0fb232 | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
36582 cycles |
36601 cycles |
1.00 |
ML-KEM-512 encaps |
43100 cycles |
43070 cycles |
1.00 |
ML-KEM-512 decaps |
55713 cycles |
55708 cycles |
1.00 |
ML-KEM-768 keypair |
58695 cycles |
58652 cycles |
1.00 |
ML-KEM-768 encaps |
67682 cycles |
67635 cycles |
1.00 |
ML-KEM-768 decaps |
84507 cycles |
84425 cycles |
1.00 |
ML-KEM-1024 keypair |
89091 cycles |
88991 cycles |
1.00 |
ML-KEM-1024 encaps |
99378 cycles |
99229 cycles |
1.00 |
ML-KEM-1024 decaps |
121053 cycles |
120563 cycles |
1.00 |
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: a4e4e31 | Previous: 2bf8e59 | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
28285 cycles |
28220 cycles |
1.00 |
ML-KEM-512 encaps |
34092 cycles |
34106 cycles |
1.00 |
ML-KEM-512 decaps |
44329 cycles |
44333 cycles |
1.00 |
ML-KEM-768 keypair |
47645 cycles |
47614 cycles |
1.00 |
ML-KEM-768 encaps |
53834 cycles |
53939 cycles |
1.00 |
ML-KEM-768 decaps |
68301 cycles |
68365 cycles |
1.00 |
ML-KEM-1024 keypair |
70227 cycles |
70253 cycles |
1.00 |
ML-KEM-1024 encaps |
78707 cycles |
78729 cycles |
1.00 |
ML-KEM-1024 decaps |
98290 cycles |
98443 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: 856b540 | Previous: c0fb232 | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
17676 cycles |
17646 cycles |
1.00 |
ML-KEM-512 encaps |
20593 cycles |
20606 cycles |
1.00 |
ML-KEM-512 decaps |
27028 cycles |
27084 cycles |
1.00 |
ML-KEM-768 keypair |
29923 cycles |
29905 cycles |
1.00 |
ML-KEM-768 encaps |
32788 cycles |
32773 cycles |
1.00 |
ML-KEM-768 decaps |
41939 cycles |
41963 cycles |
1.00 |
ML-KEM-1024 keypair |
43711 cycles |
43739 cycles |
1.00 |
ML-KEM-1024 encaps |
48758 cycles |
48736 cycles |
1.00 |
ML-KEM-1024 decaps |
61406 cycles |
61382 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: 856b540 | Previous: c0fb232 | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
45684 cycles |
45722 cycles |
1.00 |
ML-KEM-512 encaps |
54598 cycles |
54423 cycles |
1.00 |
ML-KEM-512 decaps |
69928 cycles |
69779 cycles |
1.00 |
ML-KEM-768 keypair |
73225 cycles |
74154 cycles |
0.99 |
ML-KEM-768 encaps |
86160 cycles |
86032 cycles |
1.00 |
ML-KEM-768 decaps |
106234 cycles |
106582 cycles |
1.00 |
ML-KEM-1024 keypair |
112133 cycles |
112073 cycles |
1.00 |
ML-KEM-1024 encaps |
124870 cycles |
124711 cycles |
1.00 |
ML-KEM-1024 decaps |
150839 cycles |
150591 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: 856b540 | Previous: c0fb232 | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
35448 cycles |
35408 cycles |
1.00 |
ML-KEM-512 encaps |
41305 cycles |
40111 cycles |
1.03 |
ML-KEM-512 decaps |
51288 cycles |
51135 cycles |
1.00 |
ML-KEM-768 keypair |
56738 cycles |
56671 cycles |
1.00 |
ML-KEM-768 encaps |
64836 cycles |
65149 cycles |
1.00 |
ML-KEM-768 decaps |
79062 cycles |
79291 cycles |
1.00 |
ML-KEM-1024 keypair |
88013 cycles |
87860 cycles |
1.00 |
ML-KEM-1024 encaps |
97113 cycles |
96876 cycles |
1.00 |
ML-KEM-1024 decaps |
116135 cycles |
115825 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: 856b540 | Previous: c0fb232 | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
18674 cycles |
18640 cycles |
1.00 |
ML-KEM-512 encaps |
21835 cycles |
21878 cycles |
1.00 |
ML-KEM-512 decaps |
28794 cycles |
28869 cycles |
1.00 |
ML-KEM-768 keypair |
31593 cycles |
31542 cycles |
1.00 |
ML-KEM-768 encaps |
34796 cycles |
34773 cycles |
1.00 |
ML-KEM-768 decaps |
44735 cycles |
44779 cycles |
1.00 |
ML-KEM-1024 keypair |
46064 cycles |
46077 cycles |
1.00 |
ML-KEM-1024 encaps |
51462 cycles |
51494 cycles |
1.00 |
ML-KEM-1024 decaps |
65067 cycles |
65017 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: 856b540 | Previous: c0fb232 | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
28337 cycles |
28270 cycles |
1.00 |
ML-KEM-512 encaps |
34209 cycles |
34120 cycles |
1.00 |
ML-KEM-512 decaps |
44538 cycles |
44375 cycles |
1.00 |
ML-KEM-768 keypair |
47612 cycles |
47674 cycles |
1.00 |
ML-KEM-768 encaps |
53936 cycles |
53909 cycles |
1.00 |
ML-KEM-768 decaps |
68333 cycles |
68363 cycles |
1.00 |
ML-KEM-1024 keypair |
70349 cycles |
70257 cycles |
1.00 |
ML-KEM-1024 encaps |
78617 cycles |
78760 cycles |
1.00 |
ML-KEM-1024 decaps |
98461 cycles |
98451 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: 856b540 | Previous: c0fb232 | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
38934 cycles |
38890 cycles |
1.00 |
ML-KEM-512 encaps |
46774 cycles |
44600 cycles |
1.05 |
ML-KEM-512 decaps |
56788 cycles |
56685 cycles |
1.00 |
ML-KEM-768 keypair |
62284 cycles |
62295 cycles |
1.00 |
ML-KEM-768 encaps |
71210 cycles |
72323 cycles |
0.98 |
ML-KEM-768 decaps |
86947 cycles |
87695 cycles |
0.99 |
ML-KEM-1024 keypair |
96359 cycles |
96156 cycles |
1.00 |
ML-KEM-1024 encaps |
106402 cycles |
106137 cycles |
1.00 |
ML-KEM-1024 decaps |
126922 cycles |
126582 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: 856b540 | Previous: c0fb232 | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
59254 cycles |
59136 cycles |
1.00 |
ML-KEM-512 encaps |
69196 cycles |
68627 cycles |
1.01 |
ML-KEM-512 decaps |
87340 cycles |
87348 cycles |
1.00 |
ML-KEM-768 keypair |
95410 cycles |
95336 cycles |
1.00 |
ML-KEM-768 encaps |
110535 cycles |
109885 cycles |
1.01 |
ML-KEM-768 decaps |
134324 cycles |
134360 cycles |
1.00 |
ML-KEM-1024 keypair |
145962 cycles |
147936 cycles |
0.99 |
ML-KEM-1024 encaps |
161958 cycles |
163772 cycles |
0.99 |
ML-KEM-1024 decaps |
193999 cycles |
195429 cycles |
0.99 |
This comment was automatically generated by workflow using github-action-benchmark.
CBMC Results (ML-KEM-512)Full Results (198 proofs)
|
CBMC Results (ML-KEM-768)Full Results (198 proofs)
|
CBMC Results (ML-KEM-1024)
Full Results (198 proofs)
|
hanno-becker
left a comment
There was a problem hiding this comment.
What's the purpose of 0a01cc4? Tests also serve as documentation, and using internal constants rather than public ones sets a wrong example.
If this is needed, can it be done in a preparatory PR? It seems unrelated to this PR.
The main question here is if we want to add the new API in mlkem_native.h or not. If we don't, we can't test the API in the standard test_mlkem.c, but we could add it in a separate test that includes kem.h, but not mlkem_native.h. I agree with you that we don't want to keep it as is right now. |
|
Seeing that you also observed a slowdown on x86, I wonder if we should treat the incremental API as internal by default and only expose it in the public API if some new option |
There was a problem hiding this comment.
⚠️ Performance Alert ⚠️
Possible performance regression was detected for benchmark 'Intel Xeon 4th gen (c7i)'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.03.
| Benchmark suite | Current: a4e4e31 | Previous: 2bf8e59 | Ratio |
|---|---|---|---|
ML-KEM-1024 decaps |
40620 cycles |
39396 cycles |
1.03 |
This comment was automatically generated by workflow using github-action-benchmark.
4f0ace1 to
732adb5
Compare
There was a problem hiding this comment.
Mac Mini (M1, 2020) benchmarks
Details
| Benchmark suite | Current: 856b540 | Previous: c0fb232 | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
12320 cycles |
12320 cycles |
1 |
ML-KEM-512 encaps |
15047 cycles |
14999 cycles |
1.00 |
ML-KEM-512 decaps |
19599 cycles |
19552 cycles |
1.00 |
ML-KEM-768 keypair |
21264 cycles |
21264 cycles |
1 |
ML-KEM-768 encaps |
23880 cycles |
23870 cycles |
1.00 |
ML-KEM-768 decaps |
30427 cycles |
30414 cycles |
1.00 |
ML-KEM-1024 keypair |
30323 cycles |
30327 cycles |
1.00 |
ML-KEM-1024 encaps |
34616 cycles |
34573 cycles |
1.00 |
ML-KEM-1024 decaps |
44229 cycles |
44193 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: 856b540 | Previous: c0fb232 | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
59787 cycles |
59728 cycles |
1.00 |
ML-KEM-512 encaps |
67447 cycles |
67429 cycles |
1.00 |
ML-KEM-512 decaps |
86139 cycles |
86125 cycles |
1.00 |
ML-KEM-768 keypair |
97408 cycles |
97470 cycles |
1.00 |
ML-KEM-768 encaps |
110758 cycles |
110896 cycles |
1.00 |
ML-KEM-768 decaps |
137357 cycles |
138405 cycles |
0.99 |
ML-KEM-1024 keypair |
154780 cycles |
154989 cycles |
1.00 |
ML-KEM-1024 encaps |
171299 cycles |
172090 cycles |
1.00 |
ML-KEM-1024 decaps |
207123 cycles |
209372 cycles |
0.99 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
Arm Cortex-A72 (Raspberry Pi 4) benchmarks
Details
| Benchmark suite | Current: 856b540 | Previous: c0fb232 | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
50693 cycles |
51223 cycles |
0.99 |
ML-KEM-512 encaps |
58494 cycles |
59547 cycles |
0.98 |
ML-KEM-512 decaps |
74583 cycles |
75793 cycles |
0.98 |
ML-KEM-768 keypair |
85700 cycles |
86166 cycles |
0.99 |
ML-KEM-768 encaps |
93550 cycles |
94272 cycles |
0.99 |
ML-KEM-768 decaps |
117423 cycles |
117661 cycles |
1.00 |
ML-KEM-1024 keypair |
130295 cycles |
129800 cycles |
1.00 |
ML-KEM-1024 encaps |
141861 cycles |
142914 cycles |
0.99 |
ML-KEM-1024 decaps |
173922 cycles |
174806 cycles |
0.99 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
SpacemiT K1 8 (Banana Pi F3) benchmarks
Details
| Benchmark suite | Current: 856b540 | Previous: c0fb232 | Ratio |
|---|---|---|---|
ML-KEM-512 keypair |
155501 cycles |
155510 cycles |
1.00 |
ML-KEM-512 encaps |
163235 cycles |
163424 cycles |
1.00 |
ML-KEM-512 decaps |
206715 cycles |
206679 cycles |
1.00 |
ML-KEM-768 keypair |
249857 cycles |
249912 cycles |
1.00 |
ML-KEM-768 encaps |
270337 cycles |
270404 cycles |
1.00 |
ML-KEM-768 decaps |
332607 cycles |
332257 cycles |
1.00 |
ML-KEM-1024 keypair |
395706 cycles |
396307 cycles |
1.00 |
ML-KEM-1024 encaps |
423713 cycles |
423343 cycles |
1.00 |
ML-KEM-1024 decaps |
505216 cycles |
507057 cycles |
1.00 |
This comment was automatically generated by workflow using github-action-benchmark.
1ce787b to
a4e4e31
Compare
a4e4e31 to
856b540
Compare
ab8f4bf to
37d5620
Compare
d488734 to
a51ea38
Compare
Split K-PKE.Encrypt and ML-KEM.Encaps into two phases (u and v) to support protocols like MLKEMBraid that transmit large KEM components in parallel over bandwidth-constrained channels. CPA level (indcpa): - mlk_indcpa_enc_u: computes ct_u from ek_seed, outputs intermediate state (sp, epp, sp_cache) - mlk_indcpa_enc_v: computes ct_v from ek_vector using intermediate state from enc_u CCA KEM level (kem): - mlk_kem_enc_derand_u: FO transform + enc_u, outputs shared secret and intermediate state; only needs ek_seed and H(pk) - mlk_kem_enc_v: modulus check on ek_vector + enc_v; only needs ek_vector epp is serialized as 4-bit nibbles (ETA2 - x) to provide a natural coefficient bound on deserialization; sp is serialized as 16-bit LE. The shared sp mulcache is computed once and threaded through enc_u/enc_v. Includes CBMC contracts and proofs for the new functions, the MLK_CONFIG_ENABLE_MLKEM_BRAID configuration option exposing the API, recomputed peak stack consumption values, and OpenTitan work buffer size updates. The test verifies that the incremental API produces identical ciphertexts and shared secrets as the standard API across all three parameter sets. Co-authored-by: Hanno Becker <beckphan@amazon.co.uk> Signed-off-by: Matthias J. Kannwischer <matthias@zerorisc.com> Signed-off-by: Rod Chapman <rodchap@amazon.com>
Signed-off-by: Rod Chapman <rodchap@amazon.com>
a1672a8 to
e9ea411
Compare
Split ML-KEM encapsulation into two phases (mlk_kem_enc_derand_u / mlk_kem_enc_v) to support protocols like Braid that need to interleave encapsulation with other operations between computing the u- and v-components of the ciphertext. The first phase only requires the public seed and H(pk), not the full public key vector. Internally, K-PKE.Encrypt is refactored into mlk_indcpa_enc_u + mlk_indcpa_enc_v. The non-incremental KEM path calls mlk_indcpa_enc directly to avoid serialization overhead. The intermediate noise polynomial epp is serialized as 4-bit nibbles (128 bytes) - this is primarily done to not require a pre-condition on the allowed values.