From 4c04ba306bf7673778798dc2923cc1ba0924776c Mon Sep 17 00:00:00 2001 From: Takashi Kojo Date: Fri, 13 Mar 2026 10:47:35 +0900 Subject: [PATCH 1/5] fix error case in d2iTryAltDhKey --- wolfcrypt/src/evp_pk.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wolfcrypt/src/evp_pk.c b/wolfcrypt/src/evp_pk.c index 719548ffe4..500f91f445 100644 --- a/wolfcrypt/src/evp_pk.c +++ b/wolfcrypt/src/evp_pk.c @@ -708,7 +708,7 @@ static int d2iTryAltDhKey(WOLFSSL_EVP_PKEY** out, const unsigned char* mem, /* Create DH key object from data. */ dhObj = wolfSSL_DH_new(); if (dhObj == NULL) { - ret = 0; + ret = WOLFSSL_FATAL_ERROR; } if (ret == 1) { From 1a6dee2bb30c15a47e32aa8e06943c4f0ec320db Mon Sep 17 00:00:00 2001 From: Takashi Kojo Date: Fri, 13 Mar 2026 10:57:58 +0900 Subject: [PATCH 2/5] Add ML-DSA to X509_get_pubkey and EVP_PKEY_base_id --- certs/mldsa/include.am | 11 ++- certs/mldsa/mldsa44-cert.der | Bin 0 -> 4121 bytes certs/mldsa/mldsa44-cert.pem | 88 +++++++++++++++++++ certs/mldsa/mldsa44-key.pem | 57 +++++++++++++ certs/mldsa/mldsa65-cert.der | Bin 0 -> 5650 bytes certs/mldsa/mldsa65-cert.pem | 120 ++++++++++++++++++++++++++ certs/mldsa/mldsa65-key.pem | 88 +++++++++++++++++++ certs/mldsa/mldsa87-cert.der | Bin 0 -> 7608 bytes certs/mldsa/mldsa87-cert.pem | 161 +++++++++++++++++++++++++++++++++++ certs/mldsa/mldsa87-key.pem | 106 +++++++++++++++++++++++ certs/renewcerts.sh | 47 ++++++++++ src/x509.c | 7 ++ tests/api.c | 1 + tests/api/test_mldsa.c | 53 ++++++++++++ tests/api/test_mldsa.h | 1 + wolfcrypt/src/evp.c | 4 + 16 files changed, 743 insertions(+), 1 deletion(-) create mode 100644 certs/mldsa/mldsa44-cert.der create mode 100644 certs/mldsa/mldsa44-cert.pem create mode 100644 certs/mldsa/mldsa44-key.pem create mode 100644 certs/mldsa/mldsa65-cert.der create mode 100644 certs/mldsa/mldsa65-cert.pem create mode 100644 certs/mldsa/mldsa65-key.pem create mode 100644 certs/mldsa/mldsa87-cert.der create mode 100644 certs/mldsa/mldsa87-cert.pem create mode 100644 certs/mldsa/mldsa87-key.pem diff --git a/certs/mldsa/include.am b/certs/mldsa/include.am index 94868dc610..75ea975def 100644 --- a/certs/mldsa/include.am +++ b/certs/mldsa/include.am @@ -20,4 +20,13 @@ EXTRA_DIST += \ certs/mldsa/mldsa87_seed-priv.der \ certs/mldsa/mldsa87_oqskeypair.der \ certs/mldsa/mldsa87_bare-seed.der \ - certs/mldsa/mldsa87_bare-priv.der + certs/mldsa/mldsa87_bare-priv.der \ + certs/mldsa/mldsa44-key.pem \ + certs/mldsa/mldsa44-cert.pem \ + certs/mldsa/mldsa44-cert.der \ + certs/mldsa/mldsa65-key.pem \ + certs/mldsa/mldsa65-cert.pem \ + certs/mldsa/mldsa65-cert.der \ + certs/mldsa/mldsa87-key.pem \ + certs/mldsa/mldsa87-cert.pem \ + certs/mldsa/mldsa87-cert.der diff --git a/certs/mldsa/mldsa44-cert.der b/certs/mldsa/mldsa44-cert.der new file mode 100644 index 0000000000000000000000000000000000000000..0b722a19d4d88e8dc324c72c5c232ba351d6ac5b GIT binary patch literal 4121 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 literal 0 HcmV?d00001 diff --git a/certs/mldsa/mldsa87-cert.pem b/certs/mldsa/mldsa87-cert.pem new file mode 100644 index 0000000000..f2e0a9ba19 --- /dev/null +++ b/certs/mldsa/mldsa87-cert.pem @@ -0,0 +1,161 @@ +-----BEGIN CERTIFICATE----- +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 +3wAAAAAAAAAAAAAAAAAAAAcPGB8mLTM8 +-----END CERTIFICATE----- diff --git a/certs/mldsa/mldsa87-key.pem b/certs/mldsa/mldsa87-key.pem new file mode 100644 index 0000000000..b365956072 --- /dev/null +++ b/certs/mldsa/mldsa87-key.pem @@ -0,0 +1,106 @@ +-----BEGIN PRIVATE KEY----- +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 +PSqF3MdQsdUlbUFt53W7Kzg5 +-----END PRIVATE KEY----- diff --git a/certs/renewcerts.sh b/certs/renewcerts.sh index 78be54efe3..5d04a9c5d3 100755 --- a/certs/renewcerts.sh +++ b/certs/renewcerts.sh @@ -1035,6 +1035,53 @@ EOF echo "End of section" echo "---------------------------------------------------------------------" + ############################################################ + #### ML-DSA (FIPS 204) self-signed certificates ### + ############################################################ + # ML-DSA requires OpenSSL 3.3+ (oqsprovider or built-in support). + # Search for a versioned binary if the system default lacks ML-DSA support. + OPENSSL3="" + for candidate in \ + "/usr/local/opt/openssl@3.2/bin/openssl" \ + "/usr/local/opt/openssl@3/bin/openssl" \ + "/opt/homebrew/opt/openssl@3.2/bin/openssl" \ + "/opt/homebrew/opt/openssl@3/bin/openssl" \ + "openssl"; do + if "$candidate" genpkey -algorithm mldsa44 -out /dev/null 2>/dev/null; then + OPENSSL3="$candidate" + break + fi + done + + if [ -n "$OPENSSL3" ]; then + echo "Generating ML-DSA certificates using: $OPENSSL3" + echo "" + mkdir -p mldsa + + for level in 44 65 87; do + echo "Generating ML-DSA-${level} key and self-signed certificate..." + + "$OPENSSL3" genpkey -algorithm "mldsa${level}" \ + -out "mldsa/mldsa${level}-key.pem" + check_result $? "ML-DSA-${level} key generation" + + "$OPENSSL3" req -new -x509 -key "mldsa/mldsa${level}-key.pem" \ + -out "mldsa/mldsa${level}-cert.pem" -days 3650 \ + -subj "/C=US/ST=Montana/L=Bozeman/O=wolfSSL/CN=ML-DSA-${level}" + check_result $? "ML-DSA-${level} certificate generation" + + "$OPENSSL3" x509 -inform PEM -in "mldsa/mldsa${level}-cert.pem" \ + -outform DER -out "mldsa/mldsa${level}-cert.der" + check_result $? "ML-DSA-${level} DER conversion" + + echo "End of ML-DSA-${level} section" + done + echo "---------------------------------------------------------------------" + else + echo "Skipping ML-DSA cert generation (no OpenSSL 3.3+ with ML-DSA support found)" + echo "---------------------------------------------------------------------" + fi + #cleanup the file system now that we're done echo "Performing final steps, cleaning up the file system..." echo "" diff --git a/src/x509.c b/src/x509.c index ae044624bc..d61dfcd695 100644 --- a/src/x509.c +++ b/src/x509.c @@ -6346,6 +6346,13 @@ WOLFSSL_EVP_PKEY* wolfSSL_X509_get_pubkey(WOLFSSL_X509* x509) else if (x509->pubKeyOID == DSAk) { key->type = WC_EVP_PKEY_DSA; } + #ifdef HAVE_DILITHIUM + else if (x509->pubKeyOID == ML_DSA_LEVEL2k || + x509->pubKeyOID == ML_DSA_LEVEL3k || + x509->pubKeyOID == ML_DSA_LEVEL5k) { + key->type = WC_EVP_PKEY_DILITHIUM; + } + #endif else { key->type = WC_EVP_PKEY_EC; } diff --git a/tests/api.c b/tests/api.c index b3193c5ad0..5aff1b410d 100644 --- a/tests/api.c +++ b/tests/api.c @@ -37048,6 +37048,7 @@ TEST_CASE testCases[] = { TEST_MLKEM_DECLS, /* Dilithium */ TEST_MLDSA_DECLS, + TEST_DECL(test_mldsa_x509_pubkey_sigtype), /* SLH-DSA */ TEST_SLHDSA_DECLS, /* Signature API */ diff --git a/tests/api/test_mldsa.c b/tests/api/test_mldsa.c index 4e8cf78d24..e74f7ad53e 100644 --- a/tests/api/test_mldsa.c +++ b/tests/api/test_mldsa.c @@ -30266,3 +30266,56 @@ int test_mldsa_pkcs12(void) #endif return EXPECT_RESULT(); } + +/* Test wolfSSL_X509_get_signature_type() and wolfSSL_X509_get_pubkey() / + * wolfSSL_EVP_PKEY_base_id() with ML-DSA self-signed certificates loaded + * from PEM files (certs/mldsa/mldsa{44,65,87}-cert.pem). + * + * These certs are generated by renewcerts.sh using OpenSSL 3.3+. */ +int test_mldsa_x509_pubkey_sigtype(void) +{ + EXPECT_DECLS; +#if defined(HAVE_DILITHIUM) && defined(OPENSSL_EXTRA) && \ + !defined(NO_CERTS) && !defined(NO_FILESYSTEM) + static const struct { + const char* pem_path; + word32 expected_sig_oid; /* CTC_ML_DSA_LEVEL* */ + } cases[] = { + { "./certs/mldsa/mldsa44-cert.pem", CTC_ML_DSA_LEVEL2 }, + { "./certs/mldsa/mldsa65-cert.pem", CTC_ML_DSA_LEVEL3 }, + { "./certs/mldsa/mldsa87-cert.pem", CTC_ML_DSA_LEVEL5 }, + }; + int i; + int n = (int)(sizeof(cases) / sizeof(cases[0])); + + for (i = 0; i < n; i++) { + WOLFSSL_X509* x509 = NULL; + WOLFSSL_EVP_PKEY* pkey = NULL; + int sig_oid; + int base_id; + + /* Load PEM certificate */ + ExpectNotNull(x509 = wolfSSL_X509_load_certificate_file( + cases[i].pem_path, WOLFSSL_FILETYPE_PEM)); + if (x509 == NULL) + continue; + + /* wolfSSL_X509_get_signature_type() must return the ML-DSA OID sum */ + sig_oid = wolfSSL_X509_get_signature_type(x509); + ExpectIntEQ((word32)sig_oid, cases[i].expected_sig_oid); + + /* wolfSSL_X509_get_pubkey() must succeed */ + ExpectNotNull(pkey = wolfSSL_X509_get_pubkey(x509)); + + if (pkey != NULL) { + /* wolfSSL_EVP_PKEY_base_id() must identify the key as Dilithium */ + base_id = wolfSSL_EVP_PKEY_base_id(pkey); + ExpectIntEQ(base_id, WC_EVP_PKEY_DILITHIUM); + wolfSSL_EVP_PKEY_free(pkey); + } + + wolfSSL_X509_free(x509); + } +#endif /* HAVE_DILITHIUM && OPENSSL_EXTRA && !NO_CERTS && !NO_FILESYSTEM */ + return EXPECT_RESULT(); +} diff --git a/tests/api/test_mldsa.h b/tests/api/test_mldsa.h index 73825bf61d..6fddda73df 100644 --- a/tests/api/test_mldsa.h +++ b/tests/api/test_mldsa.h @@ -45,6 +45,7 @@ int test_mldsa_pkcs8_import_OpenSSL_form(void); int test_mldsa_pkcs8_export_import_wolfSSL_form(void); int test_wc_dilithium_encode_w1_large_values(void); int test_mldsa_pkcs12(void); +int test_mldsa_x509_pubkey_sigtype(void); #define TEST_MLDSA_DECLS \ TEST_DECL_GROUP("mldsa", test_wc_dilithium), \ diff --git a/wolfcrypt/src/evp.c b/wolfcrypt/src/evp.c index 8ea053427f..074c200925 100644 --- a/wolfcrypt/src/evp.c +++ b/wolfcrypt/src/evp.c @@ -10057,6 +10057,10 @@ int wolfSSL_EVP_PKEY_type(int type) return WC_EVP_PKEY_EC; case WC_EVP_PKEY_DH: return WC_EVP_PKEY_DH; + #ifdef HAVE_DILITHIUM + case WC_EVP_PKEY_DILITHIUM: + return WC_EVP_PKEY_DILITHIUM; + #endif default: return WC_NID_undef; } From 69854c1cfd2742de8527a957fa78e35da46426ad Mon Sep 17 00:00:00 2001 From: Takashi Kojo Date: Wed, 25 Mar 2026 10:39:39 +0900 Subject: [PATCH 3/5] Fix for the comments --- tests/api/test_mldsa.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tests/api/test_mldsa.c b/tests/api/test_mldsa.c index e74f7ad53e..6d1d518ff4 100644 --- a/tests/api/test_mldsa.c +++ b/tests/api/test_mldsa.c @@ -30279,11 +30279,12 @@ int test_mldsa_x509_pubkey_sigtype(void) !defined(NO_CERTS) && !defined(NO_FILESYSTEM) static const struct { const char* pem_path; - word32 expected_sig_oid; /* CTC_ML_DSA_LEVEL* */ + int expected_sig_oid; /* CTC_ML_DSA_LEVEL* (stored as int, + * same bit pattern as word32 return) */ } cases[] = { - { "./certs/mldsa/mldsa44-cert.pem", CTC_ML_DSA_LEVEL2 }, - { "./certs/mldsa/mldsa65-cert.pem", CTC_ML_DSA_LEVEL3 }, - { "./certs/mldsa/mldsa87-cert.pem", CTC_ML_DSA_LEVEL5 }, + { "./certs/mldsa/mldsa44-cert.pem", (int)CTC_ML_DSA_LEVEL2 }, + { "./certs/mldsa/mldsa65-cert.pem", (int)CTC_ML_DSA_LEVEL3 }, + { "./certs/mldsa/mldsa87-cert.pem", (int)CTC_ML_DSA_LEVEL5 }, }; int i; int n = (int)(sizeof(cases) / sizeof(cases[0])); @@ -30302,7 +30303,7 @@ int test_mldsa_x509_pubkey_sigtype(void) /* wolfSSL_X509_get_signature_type() must return the ML-DSA OID sum */ sig_oid = wolfSSL_X509_get_signature_type(x509); - ExpectIntEQ((word32)sig_oid, cases[i].expected_sig_oid); + ExpectIntEQ(sig_oid, cases[i].expected_sig_oid); /* wolfSSL_X509_get_pubkey() must succeed */ ExpectNotNull(pkey = wolfSSL_X509_get_pubkey(x509)); From 048a2e66e1458f09aa385e410ce359426818c664 Mon Sep 17 00:00:00 2001 From: Takashi Kojo Date: Wed, 25 Mar 2026 11:08:25 +0900 Subject: [PATCH 4/5] check candidate runnability before probing ML-DSA support --- certs/renewcerts.sh | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/certs/renewcerts.sh b/certs/renewcerts.sh index 5d04a9c5d3..c24b57476d 100755 --- a/certs/renewcerts.sh +++ b/certs/renewcerts.sh @@ -1038,8 +1038,8 @@ EOF ############################################################ #### ML-DSA (FIPS 204) self-signed certificates ### ############################################################ - # ML-DSA requires OpenSSL 3.3+ (oqsprovider or built-in support). - # Search for a versioned binary if the system default lacks ML-DSA support. + # ML-DSA requires an OpenSSL 3.x binary with ML-DSA support + # (via oqsprovider or built-in). Detect support by probing candidates. OPENSSL3="" for candidate in \ "/usr/local/opt/openssl@3.2/bin/openssl" \ @@ -1047,6 +1047,13 @@ EOF "/opt/homebrew/opt/openssl@3.2/bin/openssl" \ "/opt/homebrew/opt/openssl@3/bin/openssl" \ "openssl"; do + if [ "$candidate" = "openssl" ]; then + # Skip if 'openssl' is not available on PATH. + command -v openssl >/dev/null 2>&1 || continue + else + # Skip non-existent or non-executable absolute paths. + [ -x "$candidate" ] || continue + fi if "$candidate" genpkey -algorithm mldsa44 -out /dev/null 2>/dev/null; then OPENSSL3="$candidate" break From 582f505abfdc77c0db4bcbb8154bfd7c2e180ef6 Mon Sep 17 00:00:00 2001 From: Takashi Kojo Date: Thu, 30 Apr 2026 18:47:19 +0900 Subject: [PATCH 5/5] test_mldsa_x509_pubkey_sigtype to TEST_MLDSA_DECLS --- tests/api.c | 1 - tests/api/test_mldsa.h | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/api.c b/tests/api.c index 5aff1b410d..b3193c5ad0 100644 --- a/tests/api.c +++ b/tests/api.c @@ -37048,7 +37048,6 @@ TEST_CASE testCases[] = { TEST_MLKEM_DECLS, /* Dilithium */ TEST_MLDSA_DECLS, - TEST_DECL(test_mldsa_x509_pubkey_sigtype), /* SLH-DSA */ TEST_SLHDSA_DECLS, /* Signature API */ diff --git a/tests/api/test_mldsa.h b/tests/api/test_mldsa.h index 6fddda73df..ed98e30fa9 100644 --- a/tests/api/test_mldsa.h +++ b/tests/api/test_mldsa.h @@ -68,6 +68,7 @@ int test_mldsa_x509_pubkey_sigtype(void); TEST_DECL_GROUP("mldsa", test_mldsa_pkcs8_import_OpenSSL_form), \ TEST_DECL_GROUP("mldsa", test_mldsa_pkcs8_export_import_wolfSSL_form), \ TEST_DECL_GROUP("mldsa", test_wc_dilithium_encode_w1_large_values), \ - TEST_DECL_GROUP("mldsa", test_mldsa_pkcs12) + TEST_DECL_GROUP("mldsa", test_mldsa_pkcs12), \ + TEST_DECL_GROUP("mldsa", test_mldsa_x509_pubkey_sigtype) #endif /* WOLFCRYPT_TEST_MLDSA_H */