Skip to content

Commit 1646a4b

Browse files
committed
Reflect review
1 parent 1252d69 commit 1646a4b

5 files changed

Lines changed: 183 additions & 118 deletions

File tree

tests/api.c

Lines changed: 0 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -13933,119 +13933,6 @@ static int test_wolfSSL_PKCS8_ED448(void)
1393313933
return EXPECT_RESULT();
1393413934
}
1393513935

13936-
static int test_wolfSSL_PKCS8_MLDSA(void)
13937-
{
13938-
EXPECT_DECLS;
13939-
#if !defined(NO_ASN) && defined(HAVE_PKCS8) && \
13940-
defined(HAVE_DILITHIUM) && !defined(NO_TLS) && \
13941-
(!defined(NO_WOLFSSL_CLIENT) || !defined(NO_WOLFSSL_SERVER))
13942-
13943-
WOLFSSL_CTX* ctx = NULL;
13944-
size_t i;
13945-
const int derMaxSz = 8192; /* Largest size will be 7520 of separated format, WC_ML_DSA_87, DER */
13946-
const int tempMaxSz = 10240; /* Largest size will be 10239 of separated format, WC_MLS_DSA_87, PEM */
13947-
byte* der = NULL;
13948-
byte* temp = NULL; /* Store PEM or intermediate key */
13949-
word32 derSz = 0;
13950-
word32 pemSz = 0;
13951-
word32 keySz = 0;
13952-
dilithium_key mldsa_key;
13953-
WC_RNG rng;
13954-
word32 size;
13955-
13956-
struct {
13957-
int wcId;
13958-
int oidSum;
13959-
int keySz;
13960-
} test_variant[] = {{WC_ML_DSA_44, ML_DSA_LEVEL2k, ML_DSA_LEVEL2_PRV_KEY_SIZE},
13961-
{WC_ML_DSA_65, ML_DSA_LEVEL3k, ML_DSA_LEVEL3_PRV_KEY_SIZE},
13962-
{WC_ML_DSA_87, ML_DSA_LEVEL5k, ML_DSA_LEVEL5_PRV_KEY_SIZE}};
13963-
13964-
(void) pemSz;
13965-
13966-
ExpectNotNull(der = (byte*) XMALLOC(derMaxSz, NULL, DYNAMIC_TYPE_TMP_BUFFER));
13967-
ExpectNotNull(temp = (byte*) XMALLOC(tempMaxSz, NULL, DYNAMIC_TYPE_TMP_BUFFER));
13968-
13969-
#ifndef NO_WOLFSSL_SERVER
13970-
ExpectNotNull(ctx = wolfSSL_CTX_new(wolfSSLv23_server_method()));
13971-
#else
13972-
ExpectNotNull(ctx = wolfSSL_CTX_new(wolfSSLv23_client_method()));
13973-
#endif /* NO_WOLFSSL_SERVER */
13974-
13975-
ExpectIntEQ(wc_InitRng(&rng), 0);
13976-
ExpectIntEQ(wc_dilithium_init(&mldsa_key), 0);
13977-
13978-
/* Test private + public key (separated format) */
13979-
for(i = 0; i < sizeof(test_variant) / sizeof(test_variant[0]); ++i) {
13980-
ExpectIntEQ(wc_dilithium_set_level(&mldsa_key, test_variant[i].wcId), 0);
13981-
ExpectIntEQ(wc_dilithium_make_key(&mldsa_key, &rng), 0);
13982-
13983-
ExpectIntGT(derSz = wc_Dilithium_KeyToDer(&mldsa_key, der, derMaxSz), 0);
13984-
ExpectIntEQ(wolfSSL_CTX_use_PrivateKey_buffer(ctx, der, derSz,
13985-
WOLFSSL_FILETYPE_ASN1), WOLFSSL_SUCCESS);
13986-
13987-
#ifdef WOLFSSL_DER_TO_PEM
13988-
ExpectIntGT(pemSz = wc_DerToPem(der, derSz, temp, tempMaxSz, PKCS8_PRIVATEKEY_TYPE), 0);
13989-
ExpectIntEQ(wolfSSL_CTX_use_PrivateKey_buffer(ctx, temp, pemSz,
13990-
WOLFSSL_FILETYPE_PEM), WOLFSSL_SUCCESS);
13991-
#endif /* WOLFSSL_DER_TO_PEM */
13992-
}
13993-
13994-
/* Test private key only */
13995-
for(i = 0; i < sizeof(test_variant) / sizeof(test_variant[0]); ++i) {
13996-
ExpectIntEQ(wc_dilithium_set_level(&mldsa_key, test_variant[i].wcId), 0);
13997-
ExpectIntEQ(wc_dilithium_make_key(&mldsa_key, &rng), 0);
13998-
13999-
ExpectIntGT(derSz = wc_Dilithium_PrivateKeyToDer(&mldsa_key, der, derMaxSz), 0);
14000-
ExpectIntEQ(wolfSSL_CTX_use_PrivateKey_buffer(ctx, der, derSz,
14001-
WOLFSSL_FILETYPE_ASN1), WOLFSSL_SUCCESS);
14002-
14003-
#ifdef WOLFSSL_DER_TO_PEM
14004-
ExpectIntGT(pemSz = wc_DerToPem(der, derSz, temp, tempMaxSz, PKCS8_PRIVATEKEY_TYPE), 0);
14005-
ExpectIntEQ(wolfSSL_CTX_use_PrivateKey_buffer(ctx, temp, pemSz,
14006-
WOLFSSL_FILETYPE_PEM), WOLFSSL_SUCCESS);
14007-
#endif /* WOLFSSL_DER_TO_PEM */
14008-
}
14009-
14010-
/* Test private + public key (integrated format) */
14011-
for(i = 0; i < sizeof(test_variant) / sizeof(test_variant[0]); ++i) {
14012-
ExpectIntEQ(wc_dilithium_set_level(&mldsa_key, test_variant[i].wcId), 0);
14013-
ExpectIntEQ(wc_dilithium_make_key(&mldsa_key, &rng), 0);
14014-
14015-
keySz = 0;
14016-
temp[0] = 0x04; /* ASN.1 OCTET STRING */
14017-
temp[1] = 0x82; /* 2 bytes length field */
14018-
temp[2] = (test_variant[i].keySz >> 8) & 0xff; /* MSB of the length */
14019-
temp[3] = test_variant[i].keySz & 0xff; /* LSB of the length */
14020-
keySz += 4;
14021-
size = tempMaxSz - keySz;
14022-
ExpectIntEQ(wc_dilithium_export_private(&mldsa_key, temp + keySz, &size), 0);
14023-
keySz += size;
14024-
size = tempMaxSz - keySz;
14025-
ExpectIntEQ(wc_dilithium_export_public(&mldsa_key, temp + keySz, &size), 0);
14026-
keySz += size;
14027-
derSz = derMaxSz;
14028-
ExpectIntGT(wc_CreatePKCS8Key(der, &derSz, temp, keySz, test_variant[i].oidSum, NULL, 0), 0);
14029-
ExpectIntEQ(wolfSSL_CTX_use_PrivateKey_buffer(ctx, der, derSz,
14030-
WOLFSSL_FILETYPE_ASN1), WOLFSSL_SUCCESS);
14031-
14032-
#ifdef WOLFSSL_DER_TO_PEM
14033-
ExpectIntGT(pemSz = wc_DerToPem(der, derSz, temp, tempMaxSz, PKCS8_PRIVATEKEY_TYPE), 0);
14034-
ExpectIntEQ(wolfSSL_CTX_use_PrivateKey_buffer(ctx, temp, pemSz,
14035-
WOLFSSL_FILETYPE_PEM), WOLFSSL_SUCCESS);
14036-
#endif /* WOLFSSL_DER_TO_PEM */
14037-
}
14038-
14039-
wc_dilithium_free(&mldsa_key);
14040-
ExpectIntEQ(wc_FreeRng(&rng), 0);
14041-
wolfSSL_CTX_free(ctx);
14042-
XFREE(temp, NULL, DYNAMIC_TYPE_TMP_BUFFER);
14043-
XFREE(der, NULL, DYNAMIC_TYPE_TMP_BUFFER);
14044-
14045-
#endif
14046-
return EXPECT_RESULT();
14047-
}
14048-
1404913936
/* Testing functions dealing with PKCS5 */
1405013937
static int test_wolfSSL_PKCS5(void)
1405113938
{
@@ -67632,7 +67519,6 @@ TEST_CASE testCases[] = {
6763267519
TEST_DECL(test_wolfSSL_PKCS8),
6763367520
TEST_DECL(test_wolfSSL_PKCS8_ED25519),
6763467521
TEST_DECL(test_wolfSSL_PKCS8_ED448),
67635-
TEST_DECL(test_wolfSSL_PKCS8_MLDSA),
6763667522

6763767523
#ifdef HAVE_IO_TESTS_DEPENDENCIES
6763867524
TEST_DECL(test_wolfSSL_get_finished),

tests/api/test_mldsa.c

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16658,3 +16658,130 @@ int test_wc_dilithium_verify_kats(void)
1665816658
return EXPECT_RESULT();
1665916659
}
1666016660

16661+
int test_mldsa_pkcs8(void)
16662+
{
16663+
EXPECT_DECLS;
16664+
#if !defined(NO_ASN) && defined(HAVE_PKCS8) && \
16665+
defined(HAVE_DILITHIUM) && !defined(NO_TLS) && \
16666+
(!defined(NO_WOLFSSL_CLIENT) || !defined(NO_WOLFSSL_SERVER))
16667+
16668+
WOLFSSL_CTX* ctx = NULL;
16669+
size_t i;
16670+
const int derMaxSz = DILITHIUM_MAX_BOTH_KEY_DER_SIZE;
16671+
const int tempMaxSz = DILITHIUM_MAX_BOTH_KEY_PEM_SIZE;
16672+
byte* der = NULL;
16673+
byte* temp = NULL; /* Store PEM or intermediate key */
16674+
word32 derSz = 0;
16675+
word32 pemSz = 0;
16676+
word32 keySz = 0;
16677+
dilithium_key mldsa_key;
16678+
WC_RNG rng;
16679+
word32 size;
16680+
16681+
struct {
16682+
int wcId;
16683+
int oidSum;
16684+
int keySz;
16685+
} test_variant[] = {
16686+
{WC_ML_DSA_44, ML_DSA_LEVEL2k, ML_DSA_LEVEL2_PRV_KEY_SIZE},
16687+
{WC_ML_DSA_65, ML_DSA_LEVEL3k, ML_DSA_LEVEL3_PRV_KEY_SIZE},
16688+
{WC_ML_DSA_87, ML_DSA_LEVEL5k, ML_DSA_LEVEL5_PRV_KEY_SIZE}
16689+
};
16690+
16691+
(void) pemSz;
16692+
16693+
ExpectNotNull(der = (byte*) XMALLOC(derMaxSz, NULL,
16694+
DYNAMIC_TYPE_TMP_BUFFER));
16695+
ExpectNotNull(temp = (byte*) XMALLOC(tempMaxSz, NULL,
16696+
DYNAMIC_TYPE_TMP_BUFFER));
16697+
16698+
#ifndef NO_WOLFSSL_SERVER
16699+
ExpectNotNull(ctx = wolfSSL_CTX_new(wolfSSLv23_server_method()));
16700+
#else
16701+
ExpectNotNull(ctx = wolfSSL_CTX_new(wolfSSLv23_client_method()));
16702+
#endif /* NO_WOLFSSL_SERVER */
16703+
16704+
ExpectIntEQ(wc_InitRng(&rng), 0);
16705+
ExpectIntEQ(wc_dilithium_init(&mldsa_key), 0);
16706+
16707+
/* Test private + public key (separated format) */
16708+
for(i = 0; i < sizeof(test_variant) / sizeof(test_variant[0]); ++i) {
16709+
ExpectIntEQ(wc_dilithium_set_level(&mldsa_key,
16710+
test_variant[i].wcId), 0);
16711+
ExpectIntEQ(wc_dilithium_make_key(&mldsa_key, &rng), 0);
16712+
16713+
ExpectIntGT(derSz = wc_Dilithium_KeyToDer(&mldsa_key, der, derMaxSz),
16714+
0);
16715+
ExpectIntEQ(wolfSSL_CTX_use_PrivateKey_buffer(ctx, der, derSz,
16716+
WOLFSSL_FILETYPE_ASN1), WOLFSSL_SUCCESS);
16717+
16718+
#ifdef WOLFSSL_DER_TO_PEM
16719+
ExpectIntGT(pemSz = wc_DerToPem(der, derSz, temp, tempMaxSz,
16720+
PKCS8_PRIVATEKEY_TYPE), 0);
16721+
ExpectIntEQ(wolfSSL_CTX_use_PrivateKey_buffer(ctx, temp, pemSz,
16722+
WOLFSSL_FILETYPE_PEM), WOLFSSL_SUCCESS);
16723+
#endif /* WOLFSSL_DER_TO_PEM */
16724+
}
16725+
16726+
/* Test private key only */
16727+
for(i = 0; i < sizeof(test_variant) / sizeof(test_variant[0]); ++i) {
16728+
ExpectIntEQ(wc_dilithium_set_level(&mldsa_key, test_variant[i].wcId),
16729+
0);
16730+
ExpectIntEQ(wc_dilithium_make_key(&mldsa_key, &rng), 0);
16731+
16732+
ExpectIntGT(derSz = wc_Dilithium_PrivateKeyToDer(&mldsa_key, der,
16733+
derMaxSz), 0);
16734+
ExpectIntEQ(wolfSSL_CTX_use_PrivateKey_buffer(ctx, der, derSz,
16735+
WOLFSSL_FILETYPE_ASN1), WOLFSSL_SUCCESS);
16736+
16737+
#ifdef WOLFSSL_DER_TO_PEM
16738+
ExpectIntGT(pemSz = wc_DerToPem(der, derSz, temp, tempMaxSz,
16739+
PKCS8_PRIVATEKEY_TYPE), 0);
16740+
ExpectIntEQ(wolfSSL_CTX_use_PrivateKey_buffer(ctx, temp, pemSz,
16741+
WOLFSSL_FILETYPE_PEM), WOLFSSL_SUCCESS);
16742+
#endif /* WOLFSSL_DER_TO_PEM */
16743+
}
16744+
16745+
/* Test private + public key (integrated format) */
16746+
for(i = 0; i < sizeof(test_variant) / sizeof(test_variant[0]); ++i) {
16747+
ExpectIntEQ(wc_dilithium_set_level(&mldsa_key, test_variant[i].wcId),
16748+
0);
16749+
ExpectIntEQ(wc_dilithium_make_key(&mldsa_key, &rng), 0);
16750+
16751+
keySz = 0;
16752+
temp[0] = 0x04; /* ASN.1 OCTET STRING */
16753+
temp[1] = 0x82; /* 2 bytes length field */
16754+
temp[2] = (test_variant[i].keySz >> 8) & 0xff; /* MSB of the length */
16755+
temp[3] = test_variant[i].keySz & 0xff; /* LSB of the length */
16756+
keySz += 4;
16757+
size = tempMaxSz - keySz;
16758+
ExpectIntEQ(wc_dilithium_export_private(&mldsa_key, temp + keySz,
16759+
&size), 0);
16760+
keySz += size;
16761+
size = tempMaxSz - keySz;
16762+
ExpectIntEQ(wc_dilithium_export_public(&mldsa_key, temp + keySz, &size),
16763+
0);
16764+
keySz += size;
16765+
derSz = derMaxSz;
16766+
ExpectIntGT(wc_CreatePKCS8Key(der, &derSz, temp, keySz,
16767+
test_variant[i].oidSum, NULL, 0), 0);
16768+
ExpectIntEQ(wolfSSL_CTX_use_PrivateKey_buffer(ctx, der, derSz,
16769+
WOLFSSL_FILETYPE_ASN1), WOLFSSL_SUCCESS);
16770+
16771+
#ifdef WOLFSSL_DER_TO_PEM
16772+
ExpectIntGT(pemSz = wc_DerToPem(der, derSz, temp, tempMaxSz,
16773+
PKCS8_PRIVATEKEY_TYPE), 0);
16774+
ExpectIntEQ(wolfSSL_CTX_use_PrivateKey_buffer(ctx, temp, pemSz,
16775+
WOLFSSL_FILETYPE_PEM), WOLFSSL_SUCCESS);
16776+
#endif /* WOLFSSL_DER_TO_PEM */
16777+
}
16778+
16779+
wc_dilithium_free(&mldsa_key);
16780+
ExpectIntEQ(wc_FreeRng(&rng), 0);
16781+
wolfSSL_CTX_free(ctx);
16782+
XFREE(temp, NULL, DYNAMIC_TYPE_TMP_BUFFER);
16783+
XFREE(der, NULL, DYNAMIC_TYPE_TMP_BUFFER);
16784+
16785+
#endif
16786+
return EXPECT_RESULT();
16787+
}

tests/api/test_mldsa.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ int test_wc_dilithium_der(void);
3535
int test_wc_dilithium_make_key_from_seed(void);
3636
int test_wc_dilithium_sig_kats(void);
3737
int test_wc_dilithium_verify_kats(void);
38+
int test_mldsa_pkcs8(void);
3839

3940
#define TEST_MLDSA_DECLS \
4041
TEST_DECL_GROUP("mldsa", test_wc_dilithium), \
@@ -47,6 +48,7 @@ int test_wc_dilithium_verify_kats(void);
4748
TEST_DECL_GROUP("mldsa", test_wc_dilithium_der), \
4849
TEST_DECL_GROUP("mldsa", test_wc_dilithium_make_key_from_seed), \
4950
TEST_DECL_GROUP("mldsa", test_wc_dilithium_sig_kats), \
50-
TEST_DECL_GROUP("mldsa", test_wc_dilithium_verify_kats)
51+
TEST_DECL_GROUP("mldsa", test_wc_dilithium_verify_kats), \
52+
TEST_DECL_GROUP("mldsa", test_mldsa_pkcs8)
5153

5254
#endif /* WOLFCRYPT_TEST_MLDSA_H */

wolfcrypt/src/dilithium.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9664,7 +9664,7 @@ int wc_Dilithium_PrivateKeyDecode(const byte* input, word32* inOutIdx,
96649664

96659665
if (ret == 0) {
96669666
/* Get OID sum for level. */
9667-
if(key->level == 0) { /* Check first, because key->params will be NULL
9667+
if (key->level == 0) { /* Check first, because key->params will be NULL
96689668
* when key->level = 0 */
96699669
/* Level not set by caller, decode from DER */
96709670
keytype = ANONk;

0 commit comments

Comments
 (0)