Skip to content

Commit 3be61e1

Browse files
authored
Merge pull request #188 from Frauschi/mldsa_rename
ML-DSA rename
2 parents 4bac443 + c830c78 commit 3be61e1

5 files changed

Lines changed: 52 additions & 49 deletions

File tree

README.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,11 @@ insecure. Please consider using a different mode of AES.
5656

5757
### Optional: PQC ML-DSA Support
5858

59-
To have ML-DSA support in wolfPKCS11, configure wolfSSL with ML-DSA (Dilithium)
60-
support enabled, either by adding `--enable-mldsa` to `./configure` or by
61-
setting `WOLFSSL_DILITHIUM` to `yes` in CMake.
59+
To have ML-DSA support in wolfPKCS11, configure wolfSSL with ML-DSA support
60+
enabled, either by adding `--enable-mldsa` to `./configure` or by setting
61+
`WOLFSSL_MLDSA` to `yes` in CMake. wolfPKCS11 uses the canonical
62+
`wc_MlDsaKey` API and `WC_MLDSA_*` sizing macros (FIPS 204 spelling) and
63+
therefore requires a wolfSSL build that incorporate these.
6264

6365
As ML-DSA is a feature of PKCS#11 version 3.2, support for that is required,
6466
too. Hence, to enable all in wolfPKCS11, add `--enable-pkcs11v32 --enable-mldsa`

src/internal.c

Lines changed: 40 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ struct WP11_Object {
258258
ecc_key* ecKey; /* EC key object */
259259
#endif
260260
#ifdef WOLFPKCS11_MLDSA
261-
MlDsaKey* mldsaKey; /* ML-DSA key object */
261+
wc_MlDsaKey* mldsaKey; /* ML-DSA key object */
262262
#endif
263263
#ifndef NO_DH
264264
WP11_DhKey* dhKey; /* DH parameters object */
@@ -2517,13 +2517,13 @@ int wp11_Object_AllocateTypeData(WP11_Object* object)
25172517
#ifdef WOLFPKCS11_MLDSA
25182518
case CKK_ML_DSA:
25192519
if (object->data.mldsaKey == NULL) {
2520-
object->data.mldsaKey = (MlDsaKey*)XMALLOC(
2521-
sizeof(MlDsaKey), NULL, DYNAMIC_TYPE_DILITHIUM);
2520+
object->data.mldsaKey = (wc_MlDsaKey*)XMALLOC(
2521+
sizeof(wc_MlDsaKey), NULL, DYNAMIC_TYPE_MLDSA);
25222522
if (object->data.mldsaKey == NULL) {
25232523
ret = MEMORY_E;
25242524
}
25252525
else {
2526-
XMEMSET(object->data.mldsaKey, 0, sizeof(MlDsaKey));
2526+
XMEMSET(object->data.mldsaKey, 0, sizeof(wc_MlDsaKey));
25272527
}
25282528
}
25292529
break;
@@ -4340,7 +4340,7 @@ static int wp11_Object_Store_EccKey(WP11_Object* object, int tokenId, int objId)
43404340
#endif /* HAVE_ECC */
43414341

43424342
#ifdef WOLFPKCS11_MLDSA
4343-
static int MldsaKeyTryDecode(MlDsaKey* key, byte level, byte* data,
4343+
static int MldsaKeyTryDecode(wc_MlDsaKey* key, byte level, byte* data,
43444344
word32 len, CK_OBJECT_CLASS class)
43454345
{
43464346
int ret = 0;
@@ -4356,11 +4356,11 @@ static int MldsaKeyTryDecode(MlDsaKey* key, byte level, byte* data,
43564356
if (ret == 0) {
43574357
if (class == CKO_PRIVATE_KEY) {
43584358
/* Decode ML-DSA private key. */
4359-
ret = wc_Dilithium_PrivateKeyDecode(data, &idx, key, len);
4359+
ret = wc_MlDsaKey_PrivateKeyDecode(key, data, len, &idx);
43604360
}
43614361
else {
43624362
/* Decode ML-DSA public key. */
4363-
ret = wc_Dilithium_PublicKeyDecode(data, &idx, key, len);
4363+
ret = wc_MlDsaKey_PublicKeyDecode(key, data, len, &idx);
43644364
}
43654365
}
43664366

@@ -8872,7 +8872,7 @@ void WP11_Object_Free(WP11_Object* object)
88728872
#ifdef WOLFPKCS11_MLDSA
88738873
if (object->type == CKK_ML_DSA && object->data.mldsaKey != NULL) {
88748874
wc_MlDsaKey_Free(object->data.mldsaKey);
8875-
XFREE(object->data.mldsaKey, NULL, DYNAMIC_TYPE_DILITHIUM);
8875+
XFREE(object->data.mldsaKey, NULL, DYNAMIC_TYPE_MLDSA);
88768876
object->data.mldsaKey = NULL;
88778877
}
88788878
#endif
@@ -9273,7 +9273,7 @@ int WP11_Object_SetEcKey(WP11_Object* object, unsigned char** data,
92739273
* Other -ve on failure.
92749274
* 0 on success.
92759275
*/
9276-
static int mldsaSetParameters(MlDsaKey* key,
9276+
static int mldsaSetParameters(wc_MlDsaKey* key,
92779277
CK_ML_DSA_PARAMETER_SET_TYPE* params,
92789278
int len)
92799279
{
@@ -9318,7 +9318,7 @@ int WP11_Object_SetMldsaKey(WP11_Object* object, unsigned char** data,
93189318
CK_ULONG* len)
93199319
{
93209320
int ret;
9321-
MlDsaKey* key;
9321+
wc_MlDsaKey* key;
93229322
int seedUsed = 0;
93239323

93249324
if (object->onToken)
@@ -9339,11 +9339,11 @@ int WP11_Object_SetMldsaKey(WP11_Object* object, unsigned char** data,
93399339
if (object->objClass != CKO_PRIVATE_KEY) {
93409340
ret = BAD_FUNC_ARG;
93419341
}
9342-
else if (len[1] != DILITHIUM_SEED_SZ) {
9342+
else if (len[1] != MLDSA_SEED_SZ) {
93439343
ret = BAD_FUNC_ARG;
93449344
}
93459345
else {
9346-
ret = wc_dilithium_make_key_from_seed(key, data[1]);
9346+
ret = wc_MlDsaKey_MakeKeyFromSeed(key, data[1]);
93479347
seedUsed = 1;
93489348
}
93499349
}
@@ -9372,7 +9372,7 @@ int WP11_Object_SetMldsaKey(WP11_Object* object, unsigned char** data,
93729372
byte* expandedKey = NULL;
93739373
word32 expandedKeyLen = 0;
93749374

9375-
expandedKeyLen = wc_dilithium_size(key);
9375+
expandedKeyLen = wc_MlDsaKey_Size(key);
93769376
if (expandedKeyLen != len[2]) {
93779377
ret = BAD_FUNC_ARG;
93789378
}
@@ -10369,7 +10369,7 @@ static int EcObject_GetAttr(WP11_Object* object, CK_ATTRIBUTE_TYPE type,
1036910369
#endif
1037010370

1037110371
#ifdef WOLFPKCS11_MLDSA
10372-
static int GetMldsaParams(MlDsaKey* key, byte* data, CK_ULONG* len)
10372+
static int GetMldsaParams(wc_MlDsaKey* key, byte* data, CK_ULONG* len)
1037310373
{
1037410374
int ret = 0;
1037510375
CK_ML_DSA_PARAMETER_SET_TYPE params;
@@ -10401,7 +10401,7 @@ static int GetMldsaParams(MlDsaKey* key, byte* data, CK_ULONG* len)
1040110401
return ret;
1040210402
}
1040310403

10404-
static int GetMldsaPublicKey(MlDsaKey* key, byte* data, CK_ULONG* len)
10404+
static int GetMldsaPublicKey(wc_MlDsaKey* key, byte* data, CK_ULONG* len)
1040510405
{
1040610406
int ret = 0;
1040710407
word32 dataLen = 0;
@@ -10412,11 +10412,11 @@ static int GetMldsaPublicKey(MlDsaKey* key, byte* data, CK_ULONG* len)
1041210412
return ret;
1041310413

1041410414
if (level == WC_ML_DSA_44)
10415-
dataLen = ML_DSA_LEVEL2_PUB_KEY_SIZE;
10415+
dataLen = WC_MLDSA_44_PUB_KEY_SIZE;
1041610416
else if (level == WC_ML_DSA_65)
10417-
dataLen = ML_DSA_LEVEL3_PUB_KEY_SIZE;
10417+
dataLen = WC_MLDSA_65_PUB_KEY_SIZE;
1041810418
else if (level == WC_ML_DSA_87)
10419-
dataLen = ML_DSA_LEVEL5_PUB_KEY_SIZE;
10419+
dataLen = WC_MLDSA_87_PUB_KEY_SIZE;
1042010420
else
1042110421
return ASN_PARSE_E;
1042210422

@@ -10433,7 +10433,7 @@ static int GetMldsaPublicKey(MlDsaKey* key, byte* data, CK_ULONG* len)
1043310433
return ret;
1043410434
}
1043510435

10436-
static int GetMldsaPrivateKey(MlDsaKey* key, byte* data, CK_ULONG* len)
10436+
static int GetMldsaPrivateKey(wc_MlDsaKey* key, byte* data, CK_ULONG* len)
1043710437
{
1043810438
int ret = 0;
1043910439
word32 dataLen = 0;
@@ -10444,11 +10444,11 @@ static int GetMldsaPrivateKey(MlDsaKey* key, byte* data, CK_ULONG* len)
1044410444
return ret;
1044510445

1044610446
if (level == WC_ML_DSA_44)
10447-
dataLen = ML_DSA_LEVEL2_KEY_SIZE;
10447+
dataLen = WC_MLDSA_44_KEY_SIZE;
1044810448
else if (level == WC_ML_DSA_65)
10449-
dataLen = ML_DSA_LEVEL3_KEY_SIZE;
10449+
dataLen = WC_MLDSA_65_KEY_SIZE;
1045010450
else if (level == WC_ML_DSA_87)
10451-
dataLen = ML_DSA_LEVEL5_KEY_SIZE;
10451+
dataLen = WC_MLDSA_87_KEY_SIZE;
1045210452
else
1045310453
return ASN_PARSE_E;
1045410454

@@ -13098,7 +13098,7 @@ int WP11_Mldsa_GenerateKeyPair(WP11_Object* pub, WP11_Object* priv,
1309813098
WC_RNG rng;
1309913099
byte level = 0;
1310013100

13101-
/* Both MlDsaKey object inside the pub and priv WP11_Objects are
13101+
/* Both wc_MlDsaKey objects inside the pub and priv WP11_Objects are
1310213102
* already initialized. The pub key is also set to a proper level
1310313103
* within WP11_Object_SetMldsaKey() based on the given parameter
1310413104
* set. */
@@ -13203,9 +13203,10 @@ int WP11_Mldsa_Sign(unsigned char* data, word32 dataLen, unsigned char* sig,
1320313203
/* FIPS 204: 32 zeros as seed for deterministic ML-DSA */
1320413204
byte seed[32];
1320513205
XMEMSET(seed, 0x00, sizeof(seed));
13206-
ret = wc_dilithium_sign_ctx_msg_with_seed(params->ctx, params->ctxSz,
13207-
data, dataLen, sig, sigLen,
13208-
priv->data.mldsaKey, seed);
13206+
ret = wc_MlDsaKey_SignCtxWithSeed(priv->data.mldsaKey,
13207+
params->ctx, params->ctxSz,
13208+
sig, sigLen, data, dataLen,
13209+
seed);
1320913210
}
1321013211
else {
1321113212
ret = BAD_FUNC_ARG;
@@ -13214,18 +13215,18 @@ int WP11_Mldsa_Sign(unsigned char* data, word32 dataLen, unsigned char* sig,
1321413215
else {
1321513216
if (params->hedgeType == CKH_HEDGE_PREFERRED ||
1321613217
params->hedgeType == CKH_HEDGE_REQUIRED) {
13217-
ret = wc_dilithium_sign_ctx_hash(params->ctx, params->ctxSz,
13218-
params->preHashType, data, dataLen,
13219-
sig, sigLen, priv->data.mldsaKey,
13220-
&rng);
13218+
ret = wc_MlDsaKey_SignCtxHash(priv->data.mldsaKey,
13219+
params->ctx, params->ctxSz,
13220+
sig, sigLen, data, dataLen,
13221+
params->preHashType, &rng);
1322113222
}
1322213223
else if (params->hedgeType == CKH_DETERMINISTIC_REQUIRED) {
1322313224
/* FIPS 204: 32 zeros as seed for deterministic ML-DSA */
1322413225
byte seed[32];
1322513226
XMEMSET(seed, 0x00, sizeof(seed));
13226-
ret = wc_dilithium_sign_ctx_hash_with_seed(params->ctx,
13227-
params->ctxSz, params->preHashType, data, dataLen, sig,
13228-
sigLen, priv->data.mldsaKey, seed);
13227+
ret = wc_MlDsaKey_SignCtxHashWithSeed(priv->data.mldsaKey,
13228+
params->ctx, params->ctxSz, sig, sigLen, data, dataLen,
13229+
params->preHashType, seed);
1322913230
}
1323013231
else {
1323113232
ret = BAD_FUNC_ARG;
@@ -13271,14 +13272,14 @@ int WP11_Mldsa_Verify(unsigned char* sig, word32 sigLen, unsigned char* data,
1327113272

1327213273
if (ret == 0) {
1327313274
if (params->preHashType == WC_HASH_TYPE_NONE) {
13274-
ret = wc_dilithium_verify_ctx_msg(sig, sigLen, params->ctx,
13275-
params->ctxSz, data, dataLen,
13276-
stat, pub->data.mldsaKey);
13275+
ret = wc_MlDsaKey_VerifyCtx(pub->data.mldsaKey, sig, sigLen,
13276+
params->ctx, params->ctxSz, data,
13277+
dataLen, stat);
1327713278
}
1327813279
else {
13279-
ret = wc_dilithium_verify_ctx_hash(sig, sigLen, params->ctx,
13280-
params->ctxSz, params->preHashType, data, dataLen, stat,
13281-
pub->data.mldsaKey);
13280+
ret = wc_MlDsaKey_VerifyCtxHash(pub->data.mldsaKey, sig, sigLen,
13281+
params->ctx, params->ctxSz, data, dataLen,
13282+
params->preHashType, stat);
1328213283
}
1328313284
}
1328413285

src/slot.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -629,14 +629,14 @@ static CK_MECHANISM_INFO ecdhMechInfo = {
629629
#ifdef WOLFPKCS11_MLDSA
630630
/* Info on ML-DSA key generation mechanism. */
631631
static CK_MECHANISM_INFO mldsaKgMechInfo = {
632-
ML_DSA_LEVEL2_PUB_KEY_SIZE,
633-
ML_DSA_LEVEL5_PUB_KEY_SIZE,
632+
WC_MLDSA_44_PUB_KEY_SIZE,
633+
WC_MLDSA_87_PUB_KEY_SIZE,
634634
CKF_GENERATE_KEY_PAIR
635635
};
636636
/* Info on ML-DSA mechanism (also for pre-hash variant). */
637637
static CK_MECHANISM_INFO mldsaMechInfo = {
638-
ML_DSA_LEVEL2_PUB_KEY_SIZE,
639-
ML_DSA_LEVEL5_PUB_KEY_SIZE,
638+
WC_MLDSA_44_PUB_KEY_SIZE,
639+
WC_MLDSA_87_PUB_KEY_SIZE,
640640
CKF_SIGN | CKF_VERIFY
641641
};
642642
#endif

tests/pkcs11v3test.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -642,7 +642,7 @@ static CK_RV mldsa_sign_verify(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE privK
642642
CHECK_CKR(ret, "ML-DSA Sign out size no out");
643643
}
644644
if (ret == CKR_OK) {
645-
CHECK_COND(sigSz == DILITHIUM_ML_DSA_44_SIG_SIZE,
645+
CHECK_COND(sigSz == WC_MLDSA_44_SIG_SIZE,
646646
ret, "ML-DSA Sign out size");
647647
}
648648
if (ret == CKR_OK) {

wolfpkcs11/internal.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
#include <wolfssl/wolfcrypt/wc_encrypt.h>
3434

3535
#ifdef WOLFPKCS11_MLDSA
36-
#include <wolfssl/wolfcrypt/dilithium.h>
36+
#include <wolfssl/wolfcrypt/wc_mldsa.h>
3737
#endif
3838

3939
#include <wolfpkcs11/pkcs11.h>
@@ -109,7 +109,7 @@ C_EXTRA_FLAGS="-DWOLFSSL_PUBLIC_MP -DWC_RSA_DIRECT"
109109
#endif
110110
#endif
111111

112-
#if defined(WOLFPKCS11_MLDSA) && !defined(HAVE_DILITHIUM)
112+
#if defined(WOLFPKCS11_MLDSA) && !defined(WOLFSSL_HAVE_MLDSA)
113113
#error Compiling with ML-DSA requires ML-DSA support in wolfSSL.
114114
#endif
115115

0 commit comments

Comments
 (0)