Add WOLFSSL_DILITHIUM_ALLOC_KEY for dynamic ML-DSA key buffers#3
Closed
Add WOLFSSL_DILITHIUM_ALLOC_KEY for dynamic ML-DSA key buffers#3
Conversation
Frauschi
commented
Apr 8, 2026
This update introduces the WOLFSSL_DILITHIUM_DYNAMIC_KEYS option, allowing for dynamic memory allocation of public and private key buffers. This change reduces memory usage by allocating buffers only when needed.
b2808b8 to
293ca19
Compare
Frauschi
pushed a commit
that referenced
this pull request
May 3, 2026
Negative findings from review of 3b2d711: - Drop redundant `(word16)` inner cast in `wc_xmss_impl.c` (#1): `(word16)((word16)hs * n)` -> `(word16)(hs * n)`. The inner cast added nothing; word8 promotes to int regardless. - Normalize `(word32)1` to `(word32)1U` across the file (#5) so the pre-existing call sites match the style of the new shifts. - Defensive guard in `wc_xmss_hash_message` (#2): if `idx_len > params->n` ever holds, the explicit `(word32)(params->n - idx_len)` cast that silenced the warning would otherwise produce a ~4 GB XMEMSET. Set state->ret = WC_FAILURE and bail; the invariant is structural for valid parameter sets. - Defensive guard in `wc_idx_copy` (#3): if `dl < sl` is ever passed, the word32 subtraction wraps and the XMEMSET corrupts memory. Same structural invariant; early return rather than crash. - Extend `test_xmss_runtime` (#7, #8) from 2 to 4 configurations: 1. --enable-xmss (default) 2. --enable-xmss=yes,small 3. --enable-xmss=yes,verify-only (NEW: RFC 8391 test vectors) 4. --enable-xmss --enable-32bit -m32 (NEW: catches 32-bit width-dependent bugs in tree-index arithmetic; XmssIdx narrows to word32 there) The 32-bit row needs gcc-multilib so the job now installs it. Verified locally: - All 13 build_library matrix rows compile clean under the conversion flags. - testwolfcrypt's "XMSS Vfy" / "XMSS" pass for --enable-xmss, --enable-xmss=yes,small, --enable-xmss=yes,verify-only, and --enable-xmss --enable-32bit (4/4). - bench_xmss_xmssmt re-run with `-DBENCH_MIN_RUNTIME_SEC=5.0F` for longer averaging. Sign/verify deltas range -10% to +15% with no coherent regression pattern across parameter sets (the largest moves in either direction are on neighbouring rows of the same hash family), consistent with shared-system run-to-run noise rather than a real perf change. Single-sample keygens (1 op per measurement) carry expectedly high variance (-7% to +57%); sign/verify with hundreds to thousands of ops per measurement are the meaningful signal. https://claude.ai/code/session_01EJmy1bKDgHseTwZ5Qqpu1g
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
WOLFSSL_DILITHIUM_ALLOC_KEYthat makes the public (p) and private (k) key buffers indilithium_keydynamically heap-allocated instead of static arraysWOLFSSL_DILITHIUM_ASSIGN_KEY(compile-time#error)WC_DILITHIUM_CACHE_MATRIX_A,WC_DILITHIUM_CACHE_PRIV_VECTORS,WC_DILITHIUM_CACHE_PUB_VECTORS),WOLFSSL_DILITHIUM_CHECK_KEY,WOLFSSL_DILITHIUM_VERIFY_ONLY,USE_INTEL_SPEEDUP, and the OQS backendTest plan
CFLAGS=-DWOLFSSL_DILITHIUM_ALLOC_KEY— compiles cleanlytestwolfcryptDILITHIUM test passes./tests/unit.test --group mldsa)#errorfires when combined withWOLFSSL_DILITHIUM_ASSIGN_KEYWOLFSSL_DILITHIUM_VERIFY_ONLY+WOLFSSL_DILITHIUM_ALLOC_KEYWC_DILITHIUM_CACHE_*combinations🤖 Generated with Claude Code