Skip to content

Commit 5956c93

Browse files
committed
mlkem_native.h: Add PCT-aware MLK_TOTAL_ALLOC constants
Split KEYPAIR allocation constants into _NO_PCT and _PCT variants to accurately reflect memory usage with and without pairwise consistency testing (PCT). MLK_TOTAL_ALLOC_*_KEYPAIR now automatically selects the appropriate value based on MLK_CONFIG_KEYGEN_PCT. For legacy configs, assume PCT is enabled (conservative). The default alloc test config no longer enables PCT; PCT is tested via config-variations. - Ported from pq-code-package/mldsa-native#869 Signed-off-by: Matthias J. Kannwischer <matthias@kannwischer.eu>
1 parent 6876ac6 commit 5956c93

File tree

6 files changed

+38
-15
lines changed

6 files changed

+38
-15
lines changed

mlkem/mlkem_native.S

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,14 +177,20 @@
177177
#undef MLK_TOTAL_ALLOC_1024_DECAPS
178178
#undef MLK_TOTAL_ALLOC_1024_ENCAPS
179179
#undef MLK_TOTAL_ALLOC_1024_KEYPAIR
180+
#undef MLK_TOTAL_ALLOC_1024_KEYPAIR_NO_PCT
181+
#undef MLK_TOTAL_ALLOC_1024_KEYPAIR_PCT
180182
#undef MLK_TOTAL_ALLOC_512
181183
#undef MLK_TOTAL_ALLOC_512_DECAPS
182184
#undef MLK_TOTAL_ALLOC_512_ENCAPS
183185
#undef MLK_TOTAL_ALLOC_512_KEYPAIR
186+
#undef MLK_TOTAL_ALLOC_512_KEYPAIR_NO_PCT
187+
#undef MLK_TOTAL_ALLOC_512_KEYPAIR_PCT
184188
#undef MLK_TOTAL_ALLOC_768
185189
#undef MLK_TOTAL_ALLOC_768_DECAPS
186190
#undef MLK_TOTAL_ALLOC_768_ENCAPS
187191
#undef MLK_TOTAL_ALLOC_768_KEYPAIR
192+
#undef MLK_TOTAL_ALLOC_768_KEYPAIR_NO_PCT
193+
#undef MLK_TOTAL_ALLOC_768_KEYPAIR_PCT
188194
#undef crypto_kem_check_pk
189195
#undef crypto_kem_check_sk
190196
#undef crypto_kem_dec

mlkem/mlkem_native.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,14 +166,20 @@
166166
#undef MLK_TOTAL_ALLOC_1024_DECAPS
167167
#undef MLK_TOTAL_ALLOC_1024_ENCAPS
168168
#undef MLK_TOTAL_ALLOC_1024_KEYPAIR
169+
#undef MLK_TOTAL_ALLOC_1024_KEYPAIR_NO_PCT
170+
#undef MLK_TOTAL_ALLOC_1024_KEYPAIR_PCT
169171
#undef MLK_TOTAL_ALLOC_512
170172
#undef MLK_TOTAL_ALLOC_512_DECAPS
171173
#undef MLK_TOTAL_ALLOC_512_ENCAPS
172174
#undef MLK_TOTAL_ALLOC_512_KEYPAIR
175+
#undef MLK_TOTAL_ALLOC_512_KEYPAIR_NO_PCT
176+
#undef MLK_TOTAL_ALLOC_512_KEYPAIR_PCT
173177
#undef MLK_TOTAL_ALLOC_768
174178
#undef MLK_TOTAL_ALLOC_768_DECAPS
175179
#undef MLK_TOTAL_ALLOC_768_ENCAPS
176180
#undef MLK_TOTAL_ALLOC_768_KEYPAIR
181+
#undef MLK_TOTAL_ALLOC_768_KEYPAIR_NO_PCT
182+
#undef MLK_TOTAL_ALLOC_768_KEYPAIR_PCT
177183
#undef crypto_kem_check_pk
178184
#undef crypto_kem_check_sk
179185
#undef crypto_kem_dec

mlkem/mlkem_native.h

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -484,22 +484,38 @@ int MLK_API_NAMESPACE(check_sk)(
484484
* fixed-sized buffer and a simple allocator (e.g., bump allocator).
485485
*/
486486
/* check-magic: off */
487-
#define MLK_TOTAL_ALLOC_512_KEYPAIR 10048
487+
#define MLK_TOTAL_ALLOC_512_KEYPAIR_NO_PCT 5824
488+
#define MLK_TOTAL_ALLOC_512_KEYPAIR_PCT 10048
488489
#define MLK_TOTAL_ALLOC_512_ENCAPS 8384
489490
#define MLK_TOTAL_ALLOC_512_DECAPS 9152
490-
#define MLK_TOTAL_ALLOC_768_KEYPAIR 15552
491+
#define MLK_TOTAL_ALLOC_768_KEYPAIR_NO_PCT 10176
492+
#define MLK_TOTAL_ALLOC_768_KEYPAIR_PCT 15552
491493
#define MLK_TOTAL_ALLOC_768_ENCAPS 13248
492494
#define MLK_TOTAL_ALLOC_768_DECAPS 14336
493-
#define MLK_TOTAL_ALLOC_1024_KEYPAIR 22400
495+
#define MLK_TOTAL_ALLOC_1024_KEYPAIR_NO_PCT 15552
496+
#define MLK_TOTAL_ALLOC_1024_KEYPAIR_PCT 22400
494497
#define MLK_TOTAL_ALLOC_1024_ENCAPS 19136
495498
#define MLK_TOTAL_ALLOC_1024_DECAPS 20704
496499
/* check-magic: on */
497500

501+
/*
502+
* MLK_TOTAL_ALLOC_*_KEYPAIR adapts based on MLK_CONFIG_KEYGEN_PCT.
503+
* For legacy config, we don't know which options are used, so assume
504+
* the worst case (PCT enabled).
505+
*/
506+
#if defined(MLK_API_LEGACY_CONFIG) || defined(MLK_CONFIG_KEYGEN_PCT)
507+
#define MLK_TOTAL_ALLOC_512_KEYPAIR MLK_TOTAL_ALLOC_512_KEYPAIR_PCT
508+
#define MLK_TOTAL_ALLOC_768_KEYPAIR MLK_TOTAL_ALLOC_768_KEYPAIR_PCT
509+
#define MLK_TOTAL_ALLOC_1024_KEYPAIR MLK_TOTAL_ALLOC_1024_KEYPAIR_PCT
510+
#else
511+
#define MLK_TOTAL_ALLOC_512_KEYPAIR MLK_TOTAL_ALLOC_512_KEYPAIR_NO_PCT
512+
#define MLK_TOTAL_ALLOC_768_KEYPAIR MLK_TOTAL_ALLOC_768_KEYPAIR_NO_PCT
513+
#define MLK_TOTAL_ALLOC_1024_KEYPAIR MLK_TOTAL_ALLOC_1024_KEYPAIR_NO_PCT
514+
#endif
515+
498516
/*
499517
* `MLK_MAX_TOTAL_ALLOC_{KEYPAIR,ENCAPS,DECAPS}` is the maximum across all
500518
* parameter sets for each operation.
501-
* `MLK_MAX_TOTAL_ALLOC` is the maximum across all parameter sets and
502-
* operations.
503519
*/
504520
#define MLK_MAX_TOTAL_ALLOC_KEYPAIR MLK_TOTAL_ALLOC_1024_KEYPAIR
505521
#define MLK_MAX_TOTAL_ALLOC_ENCAPS MLK_TOTAL_ALLOC_1024_ENCAPS

test/configs/configs.yml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -434,11 +434,6 @@ configs:
434434
description: "Using custom allocation that can be made fail at specific invocation"
435435
defines:
436436
MLK_CONFIG_NAMESPACE_PREFIX: mlk
437-
MLK_CONFIG_KEYGEN_PCT:
438-
content: |
439-
#if !defined(MLK_CONFIG_KEYGEN_PCT)
440-
#define MLK_CONFIG_KEYGEN_PCT
441-
#endif
442437
MLK_CONFIG_CONTEXT_PARAMETER: true
443438
MLK_CONFIG_CONTEXT_PARAMETER_TYPE: struct test_ctx_t *
444439
MLK_CONFIG_CUSTOM_ALLOC_FREE:

test/configs/test_alloc_config.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
* This configuration differs from the default mlkem/mlkem_native_config.h in
3232
* the following places:
3333
* - MLK_CONFIG_NAMESPACE_PREFIX
34-
* - MLK_CONFIG_KEYGEN_PCT
3534
* - MLK_CONFIG_CONTEXT_PARAMETER
3635
* - MLK_CONFIG_CONTEXT_PARAMETER_TYPE
3736
* - MLK_CONFIG_CUSTOM_ALLOC_FREE
@@ -635,10 +634,7 @@ void custom_free(struct test_ctx_t *ctx, void *p, size_t sz, const char *file,
635634
* key generation.
636635
*
637636
*****************************************************************************/
638-
#if !defined(MLK_CONFIG_KEYGEN_PCT)
639-
#define MLK_CONFIG_KEYGEN_PCT
640-
#endif
641-
637+
/* #define MLK_CONFIG_KEYGEN_PCT */
642638

643639
/******************************************************************************
644640
* Name: MLK_CONFIG_KEYGEN_PCT_BREAKAGE_TEST

test/src/test_alloc.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
* Level-dependent allocation limit macros.
1717
* These expand to the right MLK_TOTAL_ALLOC_{512,768,1024}_* constant
1818
* based on MLK_CONFIG_API_PARAMETER_SET.
19+
*
20+
* Note: MLK_TOTAL_ALLOC_*_KEYPAIR in the header automatically adapts
21+
* based on MLK_CONFIG_KEYGEN_PCT.
1922
*/
2023
#define MLK_TOTAL_ALLOC_KEYPAIR__(LVL) MLK_TOTAL_ALLOC_##LVL##_KEYPAIR
2124
#define MLK_TOTAL_ALLOC_KEYPAIR_(LVL) MLK_TOTAL_ALLOC_KEYPAIR__(LVL)
@@ -485,6 +488,7 @@ int main(void)
485488
/*
486489
* For parameter set 1024, also check that the high watermarks match
487490
* the MLK_MAX_TOTAL_ALLOC_* constants (which are defined as the 1024 values).
491+
* MLK_MAX_TOTAL_ALLOC_KEYPAIR adapts based on MLK_CONFIG_KEYGEN_PCT.
488492
*/
489493
#if MLK_CONFIG_API_PARAMETER_SET == 1024
490494
CHECK_ALLOC_MATCH(ctx.global_high_mark_keypair, MLK_MAX_TOTAL_ALLOC_KEYPAIR);

0 commit comments

Comments
 (0)