Skip to content

Commit 27bbf00

Browse files
committed
mldsa_native.h: Add PCT-aware MLD_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). MLD_TOTAL_ALLOC_*_KEYPAIR now automatically selects the appropriate value based on MLD_CONFIG_KEYGEN_PCT. For legacy configs, assume PCT is enabled (conservative). Also correct REDUCE_RAM KEYPAIR values which were previously using PCT values unconditionally. The default alloc test config no longer enables PCT; PCT is tested via config-variations. Signed-off-by: Matthias J. Kannwischer <matthias@kannwischer.eu>
1 parent 052ee8d commit 27bbf00

File tree

4 files changed

+32
-18
lines changed

4 files changed

+32
-18
lines changed

mldsa/mldsa_native.h

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -827,33 +827,52 @@ int MLD_API_NAMESPACE(pk_from_sk)(
827827
*/
828828
/* check-magic: off */
829829
#if defined(MLD_API_LEGACY_CONFIG) || !defined(MLD_CONFIG_REDUCE_RAM)
830-
#define MLD_TOTAL_ALLOC_44_KEYPAIR 56640
830+
#define MLD_TOTAL_ALLOC_44_KEYPAIR_NO_PCT 45248
831+
#define MLD_TOTAL_ALLOC_44_KEYPAIR_PCT 56640
831832
#define MLD_TOTAL_ALLOC_44_SIGN 52896
832833
#define MLD_TOTAL_ALLOC_44_VERIFY 38816
833-
#define MLD_TOTAL_ALLOC_65_KEYPAIR 85856
834+
#define MLD_TOTAL_ALLOC_65_KEYPAIR_NO_PCT 71872
835+
#define MLD_TOTAL_ALLOC_65_KEYPAIR_PCT 85856
834836
#define MLD_TOTAL_ALLOC_65_SIGN 80576
835837
#define MLD_TOTAL_ALLOC_65_VERIFY 62432
836-
#define MLD_TOTAL_ALLOC_87_KEYPAIR 130816
838+
#define MLD_TOTAL_ALLOC_87_KEYPAIR_NO_PCT 112832
839+
#define MLD_TOTAL_ALLOC_87_KEYPAIR_PCT 130816
837840
#define MLD_TOTAL_ALLOC_87_SIGN 123584
838841
#define MLD_TOTAL_ALLOC_87_VERIFY 99552
839842
#else /* MLD_API_LEGACY_CONFIG || !MLD_CONFIG_REDUCE_RAM */
840-
#define MLD_TOTAL_ALLOC_44_KEYPAIR 36192
843+
#define MLD_TOTAL_ALLOC_44_KEYPAIR_NO_PCT 32992
844+
#define MLD_TOTAL_ALLOC_44_KEYPAIR_PCT 36192
841845
#define MLD_TOTAL_ALLOC_44_SIGN 32448
842846
#define MLD_TOTAL_ALLOC_44_VERIFY 26560
843-
#define MLD_TOTAL_ALLOC_65_KEYPAIR 50048
847+
#define MLD_TOTAL_ALLOC_65_KEYPAIR_NO_PCT 46304
848+
#define MLD_TOTAL_ALLOC_65_KEYPAIR_PCT 50048
844849
#define MLD_TOTAL_ALLOC_65_SIGN 44768
845850
#define MLD_TOTAL_ALLOC_65_VERIFY 36864
846-
#define MLD_TOTAL_ALLOC_87_KEYPAIR 66336
851+
#define MLD_TOTAL_ALLOC_87_KEYPAIR_NO_PCT 62688
852+
#define MLD_TOTAL_ALLOC_87_KEYPAIR_PCT 66336
847853
#define MLD_TOTAL_ALLOC_87_SIGN 59104
848854
#define MLD_TOTAL_ALLOC_87_VERIFY 49408
849855
#endif /* !(MLD_API_LEGACY_CONFIG || !MLD_CONFIG_REDUCE_RAM) */
850856
/* check-magic: on */
851857

858+
/*
859+
* MLD_TOTAL_ALLOC_*_KEYPAIR adapts based on MLD_CONFIG_KEYGEN_PCT.
860+
* For legacy config, we don't know which options are used, so assume
861+
* the worst case (PCT enabled).
862+
*/
863+
#if defined(MLD_API_LEGACY_CONFIG) || defined(MLD_CONFIG_KEYGEN_PCT)
864+
#define MLD_TOTAL_ALLOC_44_KEYPAIR MLD_TOTAL_ALLOC_44_KEYPAIR_PCT
865+
#define MLD_TOTAL_ALLOC_65_KEYPAIR MLD_TOTAL_ALLOC_65_KEYPAIR_PCT
866+
#define MLD_TOTAL_ALLOC_87_KEYPAIR MLD_TOTAL_ALLOC_87_KEYPAIR_PCT
867+
#else
868+
#define MLD_TOTAL_ALLOC_44_KEYPAIR MLD_TOTAL_ALLOC_44_KEYPAIR_NO_PCT
869+
#define MLD_TOTAL_ALLOC_65_KEYPAIR MLD_TOTAL_ALLOC_65_KEYPAIR_NO_PCT
870+
#define MLD_TOTAL_ALLOC_87_KEYPAIR MLD_TOTAL_ALLOC_87_KEYPAIR_NO_PCT
871+
#endif
872+
852873
/*
853874
* `MLD_MAX_TOTAL_ALLOC_{KEYPAIR,SIGN,VERIFY}` is the maximum across all
854875
* parameter sets for each operation.
855-
* `MLD_MAX_TOTAL_ALLOC` is the maximum across all parameter sets and
856-
* operations.
857876
*/
858877
#define MLD_MAX_TOTAL_ALLOC_KEYPAIR MLD_TOTAL_ALLOC_87_KEYPAIR
859878
#define MLD_MAX_TOTAL_ALLOC_SIGN MLD_TOTAL_ALLOC_87_SIGN

test/configs/configs.yml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -409,11 +409,6 @@ configs:
409409
description: "Using custom allocation that can be made fail at specific invocation"
410410
defines:
411411
MLD_CONFIG_NAMESPACE_PREFIX: mld
412-
MLD_CONFIG_KEYGEN_PCT:
413-
content: |
414-
#if !defined(MLD_CONFIG_KEYGEN_PCT)
415-
#define MLD_CONFIG_KEYGEN_PCT
416-
#endif
417412
MLD_CONFIG_CUSTOM_ALLOC_FREE:
418413
content: |
419414
#define MLD_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 mldsa/mldsa_native_config.h in
3232
* the following places:
3333
* - MLD_CONFIG_NAMESPACE_PREFIX
34-
* - MLD_CONFIG_KEYGEN_PCT
3534
* - MLD_CONFIG_CUSTOM_ALLOC_FREE
3635
*/
3736

@@ -630,10 +629,7 @@ void custom_free(void *p, size_t sz, const char *file, int line,
630629
* key generation.
631630
*
632631
*****************************************************************************/
633-
#if !defined(MLD_CONFIG_KEYGEN_PCT)
634-
#define MLD_CONFIG_KEYGEN_PCT
635-
#endif
636-
632+
/* #define MLD_CONFIG_KEYGEN_PCT */
637633

638634
/******************************************************************************
639635
* Name: MLD_CONFIG_KEYGEN_PCT_BREAKAGE_TEST

test/src/test_alloc.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
* Level-dependent allocation limit macros.
1818
* These expand to the right MLD_TOTAL_ALLOC_{44,65,87}_* constant
1919
* based on MLD_CONFIG_API_PARAMETER_SET.
20+
*
21+
* Note: MLD_TOTAL_ALLOC_*_KEYPAIR in the header automatically adapts
22+
* based on MLD_CONFIG_KEYGEN_PCT.
2023
*/
2124
#define MLD_TOTAL_ALLOC_KEYPAIR__(LVL) MLD_TOTAL_ALLOC_##LVL##_KEYPAIR
2225
#define MLD_TOTAL_ALLOC_KEYPAIR_(LVL) MLD_TOTAL_ALLOC_KEYPAIR__(LVL)
@@ -644,6 +647,7 @@ int main(void)
644647
/*
645648
* For parameter set 87, also check that the high watermarks match
646649
* the MLD_MAX_TOTAL_ALLOC_* constants (which are defined as the 87 values).
650+
* MLD_MAX_TOTAL_ALLOC_KEYPAIR adapts based on MLD_CONFIG_KEYGEN_PCT.
647651
*/
648652
#if MLD_CONFIG_API_PARAMETER_SET == 87
649653
CHECK_ALLOC_MATCH(global_bump_high_mark_keypair, MLD_MAX_TOTAL_ALLOC_KEYPAIR);

0 commit comments

Comments
 (0)