Skip to content

Commit 88593f8

Browse files
committed
ML-DSA: max values based on available parameters
When building wolfSSL implementation, make maximum sizes based on available parameter sets. Add wc_MlDsaKey_SignCtx and wc_MlDsaKey_VerifyCtx macros.
1 parent 6264c11 commit 88593f8

File tree

1 file changed

+63
-15
lines changed

1 file changed

+63
-15
lines changed

wolfssl/wolfcrypt/dilithium.h

Lines changed: 63 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,50 @@
541541
#endif /* LITTLE_ENDIAN_ORDER && WOLFSSL_DILITHIUM_ALIGNMENT == 0 */
542542
#endif
543543

544+
#ifndef WOLFSSL_NO_ML_DSA_87
545+
546+
#define DILITHIUM_MAX_KEY_SIZE DILITHIUM_LEVEL5_KEY_SIZE
547+
#define DILITHIUM_MAX_SIG_SIZE DILITHIUM_LEVEL5_SIG_SIZE
548+
#define DILITHIUM_MAX_PUB_KEY_SIZE DILITHIUM_LEVEL5_PUB_KEY_SIZE
549+
#define DILITHIUM_MAX_PRV_KEY_SIZE DILITHIUM_LEVEL5_PRV_KEY_SIZE
550+
/* Buffer sizes large enough to store exported DER encoded keys */
551+
#define DILITHIUM_MAX_PUB_KEY_DER_SIZE DILITHIUM_LEVEL5_PUB_KEY_DER_SIZE
552+
#define DILITHIUM_MAX_PRV_KEY_DER_SIZE DILITHIUM_LEVEL5_PRV_KEY_DER_SIZE
553+
#define DILITHIUM_MAX_BOTH_KEY_DER_SIZE DILITHIUM_LEVEL5_BOTH_KEY_DER_SIZE
554+
/* PEM size with the header "-----BEGIN ML_DSA_LEVEL5 PRIVATE KEY-----" and
555+
* the footer "-----END ML_DSA_LEVEL5 PRIVATE KEY-----" */
556+
#define DILITHIUM_MAX_BOTH_KEY_PEM_SIZE DILITHIUM_LEVEL5_BOTH_KEY_PEM_SIZE
557+
558+
#elif !defined(WOLFSSL_NO_ML_DSA_65)
559+
560+
#define DILITHIUM_MAX_KEY_SIZE DILITHIUM_LEVEL3_KEY_SIZE
561+
#define DILITHIUM_MAX_SIG_SIZE DILITHIUM_LEVEL3_SIG_SIZE
562+
#define DILITHIUM_MAX_PUB_KEY_SIZE DILITHIUM_LEVEL3_PUB_KEY_SIZE
563+
#define DILITHIUM_MAX_PRV_KEY_SIZE DILITHIUM_LEVEL3_PRV_KEY_SIZE
564+
/* Buffer sizes large enough to store exported DER encoded keys */
565+
#define DILITHIUM_MAX_PUB_KEY_DER_SIZE DILITHIUM_LEVEL3_PUB_KEY_DER_SIZE
566+
#define DILITHIUM_MAX_PRV_KEY_DER_SIZE DILITHIUM_LEVEL3_PRV_KEY_DER_SIZE
567+
#define DILITHIUM_MAX_BOTH_KEY_DER_SIZE DILITHIUM_LEVEL3_BOTH_KEY_DER_SIZE
568+
/* PEM size with the header "-----BEGIN ML_DSA_LEVEL5 PRIVATE KEY-----" and
569+
* the footer "-----END ML_DSA_LEVEL5 PRIVATE KEY-----" */
570+
#define DILITHIUM_MAX_BOTH_KEY_PEM_SIZE DILITHIUM_LEVEL3_BOTH_KEY_PEM_SIZE
571+
572+
#else
573+
574+
#define DILITHIUM_MAX_KEY_SIZE DILITHIUM_LEVEL2_KEY_SIZE
575+
#define DILITHIUM_MAX_SIG_SIZE DILITHIUM_LEVEL2_SIG_SIZE
576+
#define DILITHIUM_MAX_PUB_KEY_SIZE DILITHIUM_LEVEL2_PUB_KEY_SIZE
577+
#define DILITHIUM_MAX_PRV_KEY_SIZE DILITHIUM_LEVEL2_PRV_KEY_SIZE
578+
/* Buffer sizes large enough to store exported DER encoded keys */
579+
#define DILITHIUM_MAX_PUB_KEY_DER_SIZE DILITHIUM_LEVEL2_PUB_KEY_DER_SIZE
580+
#define DILITHIUM_MAX_PRV_KEY_DER_SIZE DILITHIUM_LEVEL2_PRV_KEY_DER_SIZE
581+
#define DILITHIUM_MAX_BOTH_KEY_DER_SIZE DILITHIUM_LEVEL2_BOTH_KEY_DER_SIZE
582+
/* PEM size with the header "-----BEGIN ML_DSA_LEVEL5 PRIVATE KEY-----" and
583+
* the footer "-----END ML_DSA_LEVEL5 PRIVATE KEY-----" */
584+
#define DILITHIUM_MAX_BOTH_KEY_PEM_SIZE DILITHIUM_LEVEL2_BOTH_KEY_PEM_SIZE
585+
586+
#endif
587+
544588
#elif defined(HAVE_LIBOQS)
545589

546590
#define DILITHIUM_LEVEL2_KEY_SIZE OQS_SIG_ml_dsa_44_ipd_length_secret_key
@@ -621,8 +665,6 @@
621665
* the footer "-----END ML_DSA_LEVEL5 PRIVATE KEY-----" */
622666
#define ML_DSA_LEVEL5_BOTH_KEY_PEM_SIZE DILITHIUM_LEVEL5_BOTH_KEY_PEM_SIZE
623667

624-
#endif
625-
626668
#define DILITHIUM_MAX_KEY_SIZE DILITHIUM_LEVEL5_KEY_SIZE
627669
#define DILITHIUM_MAX_SIG_SIZE DILITHIUM_LEVEL5_SIG_SIZE
628670
#define DILITHIUM_MAX_PUB_KEY_SIZE DILITHIUM_LEVEL5_PUB_KEY_SIZE
@@ -634,6 +676,8 @@
634676
/* PEM size with the header "-----BEGIN ML_DSA_LEVEL5 PRIVATE KEY-----" and
635677
* the footer "-----END ML_DSA_LEVEL5 PRIVATE KEY-----" */
636678
#define DILITHIUM_MAX_BOTH_KEY_PEM_SIZE DILITHIUM_LEVEL5_BOTH_KEY_PEM_SIZE
679+
#endif
680+
637681

638682

639683
#ifdef WOLF_PRIVATE_KEY_ID
@@ -1012,33 +1056,37 @@ WOLFSSL_LOCAL void wc_mldsa_poly_make_pos_avx2(sword32* a);
10121056
#define MlDsaKey dilithium_key
10131057

10141058

1015-
#define wc_MlDsaKey_Init(key, heap, devId) \
1059+
#define wc_MlDsaKey_Init(key, heap, devId) \
10161060
wc_dilithium_init_ex(key, heap, devId)
1017-
#define wc_MlDsaKey_SetParams(key, id) \
1061+
#define wc_MlDsaKey_SetParams(key, id) \
10181062
wc_dilithium_set_level(key, id)
1019-
#define wc_MlDsaKey_GetParams(key, id) \
1063+
#define wc_MlDsaKey_GetParams(key, id) \
10201064
wc_dilithium_get_level(key, id)
1021-
#define wc_MlDsaKey_MakeKey(key, rng) \
1065+
#define wc_MlDsaKey_MakeKey(key, rng) \
10221066
wc_dilithium_make_key(key, rng)
1023-
#define wc_MlDsaKey_ExportPrivRaw(key, out, outLen) \
1067+
#define wc_MlDsaKey_ExportPrivRaw(key, out, outLen) \
10241068
wc_dilithium_export_private_only(key, out, outLen)
1025-
#define wc_MlDsaKey_ImportPrivRaw(key, in, inLen) \
1069+
#define wc_MlDsaKey_ImportPrivRaw(key, in, inLen) \
10261070
wc_dilithium_import_private_only(in, inLen, key)
1027-
#define wc_MlDsaKey_Sign(key, sig, sigSz, msg, msgSz, rng) \
1071+
#define wc_MlDsaKey_Sign(key, sig, sigSz, msg, msgSz, rng) \
10281072
wc_dilithium_sign_msg(msg, msgSz, sig, sigSz, key, rng)
1029-
#define wc_MlDsaKey_Free(key) \
1073+
#define wc_MlDsaKey_SignCtx(key, ctx, ctxSz, sig, sigSz, msg, msgSz, rng) \
1074+
wc_dilithium_sign_ctx_msg(ctx, ctxSz, msg, msgSz, sig, sigSz, key, rng)
1075+
#define wc_MlDsaKey_Free(key) \
10301076
wc_dilithium_free(key)
1031-
#define wc_MlDsaKey_ExportPubRaw(key, out, outLen) \
1077+
#define wc_MlDsaKey_ExportPubRaw(key, out, outLen) \
10321078
wc_dilithium_export_public(key, out, outLen)
1033-
#define wc_MlDsaKey_ImportPubRaw(key, in, inLen) \
1079+
#define wc_MlDsaKey_ImportPubRaw(key, in, inLen) \
10341080
wc_dilithium_import_public(in, inLen, key)
1035-
#define wc_MlDsaKey_Verify(key, sig, sigSz, msg, msgSz, res) \
1081+
#define wc_MlDsaKey_Verify(key, sig, sigSz, msg, msgSz, res) \
10361082
wc_dilithium_verify_msg(sig, sigSz, msg, msgSz, res, key)
1083+
#define wc_MlDsaKey_VerifyCtx(key, sig, sigSz, ctx, ctxSz, msg, msgSz, res) \
1084+
wc_dilithium_verify_msg_ctx(sig, sigSz, ctx, ctxSz, msg, msgSz, res, key)
10371085

1038-
#define wc_MlDsaKey_PublicKeyToDer(key, output, len, withAlg) \
1086+
#define wc_MlDsaKey_PublicKeyToDer(key, output, len, withAlg) \
10391087
wc_Dilithium_PublicKeyToDer(key, output, len, withAlg)
10401088

1041-
#define wc_MlDsaKey_PrivateKeyToDer(key, output, len) \
1089+
#define wc_MlDsaKey_PrivateKeyToDer(key, output, len) \
10421090
wc_Dilithium_PrivateKeyToDer(key, output, len)
10431091

10441092

0 commit comments

Comments
 (0)