Skip to content

Commit a619c1e

Browse files
committed
Add tests for individual ML-KEM levels (based on wolfSSL#9777)
Also fix minor problems found with these tests
1 parent dcec5b4 commit a619c1e

7 files changed

Lines changed: 69 additions & 26 deletions

File tree

.github/workflows/pq-all.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,13 @@ jobs:
2727
'--enable-intelasm --enable-sp-asm --enable-all --enable-testcert --enable-acert --enable-dtls13 --enable-dtls-mtu --enable-dtls-frag-ch --enable-dtlscid --enable-quic --with-sys-crypto-policy --enable-experimental --enable-mlkem=yes,kyber,ml-kem --enable-lms --enable-xmss --enable-dilithium --enable-dual-alg-certs --disable-qt CPPFLAGS="-pedantic -Wdeclaration-after-statement -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE -DWOLFSSL_TLSX_PQC_MLKEM_STORE_OBJ"',
2828
'--disable-intelasm --enable-all --enable-testcert --enable-acert --enable-dtls13 --enable-dtls-mtu --enable-dtls-frag-ch --enable-dtlscid --enable-quic --with-sys-crypto-policy --enable-experimental --enable-mlkem=yes,kyber,ml-kem,small --enable-lms=yes,small --enable-xmss=yes,small --enable-dilithium=yes,small --enable-dual-alg-certs --disable-qt CPPFLAGS="-pedantic -Wdeclaration-after-statement -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE -DWOLFSSL_MLKEM_MAKEKEY_SMALL_MEM -DWOLFSSL_MLKEM_ENCAPSULATE_SMALL_MEM -DWOLFSSL_MLKEM_NO_LARGE_CODE -DWOLFSSL_DILITHIUM_SIGN_SMALL_MEM -DWOLFSSL_DILITHIUM_VERIFY_SMALL_MEM -DWOLFSSL_DILITHIUM_MAKE_KEY_SMALL_MEM -DWOLFSSL_DILITHIUM_NO_LARGE_CODE"',
2929
'--disable-intelasm --enable-smallstack --enable-smallstackcache --enable-all --enable-testcert --enable-acert --enable-dtls13 --enable-dtls-mtu --enable-dtls-frag-ch --enable-dtlscid --enable-quic --with-sys-crypto-policy --enable-experimental --enable-mlkem=yes,kyber,ml-kem,small --enable-lms=yes,small --enable-xmss=yes,small --enable-dilithium=yes,small --enable-dual-alg-certs --disable-qt CPPFLAGS="-pedantic -Wdeclaration-after-statement -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE -DWOLFSSL_MLKEM_MAKEKEY_SMALL_MEM -DWOLFSSL_MLKEM_ENCAPSULATE_SMALL_MEM -DWOLFSSL_MLKEM_NO_LARGE_CODE -DWOLFSSL_DILITHIUM_SIGN_SMALL_MEM -DWOLFSSL_DILITHIUM_VERIFY_SMALL_MEM -DWOLFSSL_DILITHIUM_MAKE_KEY_SMALL_MEM -DWOLFSSL_DILITHIUM_NO_LARGE_CODE"',
30+
'--enable-intelasm --enable-sp-asm --enable-all --enable-testcert --enable-dtls13 --enable-dtls-mtu --enable-dtls-frag-ch --enable-dtlscid --enable-mlkem=make,enc,dec,512 --enable-tls-mlkem-standalone --disable-qt CPPFLAGS="-pedantic -Wdeclaration-after-statement -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE"',
31+
'--enable-intelasm --enable-sp-asm --enable-all --enable-testcert --enable-dtls13 --enable-dtls-mtu --enable-dtls-frag-ch --enable-dtlscid --enable-mlkem=make,enc,dec,768 --disable-qt CPPFLAGS="-pedantic -Wdeclaration-after-statement -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE"',
32+
'--enable-intelasm --enable-sp-asm --enable-all --enable-testcert --enable-dtls13 --enable-dtls-mtu --enable-dtls-frag-ch --enable-dtlscid --enable-mlkem=make,enc,dec,768 --enable-tls-mlkem-standalone --disable-qt CPPFLAGS="-pedantic -Wdeclaration-after-statement -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE"',
33+
'--enable-intelasm --enable-sp-asm --enable-all --enable-testcert --enable-dtls13 --enable-dtls-mtu --enable-dtls-frag-ch --enable-dtlscid --enable-mlkem=make,enc,dec,768 --enable-tls-mlkem-standalone --disable-pqc-hybrids --disable-qt CPPFLAGS="-pedantic -Wdeclaration-after-statement -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE"',
34+
'--enable-intelasm --enable-sp-asm --enable-all --enable-testcert --enable-dtls13 --enable-dtls-mtu --enable-dtls-frag-ch --enable-dtlscid --enable-mlkem=make,enc,dec,1024 --disable-qt CPPFLAGS="-pedantic -Wdeclaration-after-statement -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE"',
35+
'--enable-intelasm --enable-sp-asm --enable-all --enable-testcert --enable-dtls13 --enable-dtls-mtu --enable-dtls-frag-ch --enable-dtlscid --enable-mlkem=make,enc,dec,1024 --enable-tls-mlkem-standalone --disable-qt CPPFLAGS="-pedantic -Wdeclaration-after-statement -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE"',
36+
'--enable-intelasm --enable-sp-asm --enable-all --enable-testcert --enable-dtls13 --enable-dtls-mtu --enable-dtls-frag-ch --enable-dtlscid --enable-mlkem=make,enc,dec,1024 --enable-tls-mlkem-standalone --disable-pqc-hybrids --disable-qt CPPFLAGS="-pedantic -Wdeclaration-after-statement -DWOLFCRYPT_TEST_LINT -DNO_WOLFSSL_CIPHER_SUITE_TEST -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE"',
3037
]
3138
name: make check
3239
if: github.repository_owner == 'wolfssl'

configure.ac

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1864,14 +1864,20 @@ then
18641864
if test "$ENABLED_MLKEM" = "no"
18651865
then
18661866
ENABLED_PQC_HYBRIDS=no
1867+
elif test "$ENABLED_MLKEM768" = "" && test "$ENABLED_MLKEM1024" = ""; then
1868+
AC_MSG_NOTICE([PQC hybrid combinations require either ML-KEM 768 or ML-KEM 1024, but both disabled.])
1869+
ENABLED_PQC_HYBRIDS=no
18671870
else
18681871
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_PQC_HYBRIDS"
18691872
fi
18701873
fi
18711874

1872-
if test "$ENABLED_MLKEM" = "yes" && test "$ENABLED_TLS13" = "yes" && test "$ENABLED_PQC_HYBRIDS" = "no" && test "$ENABLED_MLKEM_STANDALONE" = "no"
1875+
if test "$ENABLED_MLKEM" != "no"
18731876
then
1874-
AC_MSG_ERROR([Both hybrid PQ/T and standalone ML-KEM are disabled, so no PQC hybrid combinations will be available.])
1877+
if test "$ENABLED_PQC_HYBRIDS" = "no" && test "$ENABLED_MLKEM_STANDALONE" = "no" && test "$ENABLED_CRYPTONLY" = "no"
1878+
then
1879+
AC_MSG_ERROR([Both hybrid PQ/T and standalone ML-KEM are disabled, so no PQC hybrid combinations will be available.])
1880+
fi
18751881
fi
18761882

18771883
# Extra PQ/T Hybrid combinations

src/tls.c

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4492,14 +4492,15 @@ int TLSX_IsGroupSupported(int namedGroup)
44924492
#ifndef WOLFSSL_NO_ML_KEM_512
44934493
#ifndef WOLFSSL_TLS_NO_MLKEM_STANDALONE
44944494
case WOLFSSL_ML_KEM_512:
4495+
break;
44954496
#endif /* !WOLFSSL_TLS_NO_MLKEM_STANDALONE */
44964497
#ifdef WOLFSSL_EXTRA_PQC_HYBRIDS
44974498
case WOLFSSL_SECP256R1MLKEM512:
44984499
#if defined(HAVE_CURVE25519) && ECC_MIN_KEY_SZ <= 256
44994500
case WOLFSSL_X25519MLKEM512:
45004501
#endif /* HAVE_CURVE25519 */
4501-
#endif /* WOLFSSL_EXTRA_PQC_HYBRIDS */
45024502
break;
4503+
#endif /* WOLFSSL_EXTRA_PQC_HYBRIDS */
45034504
#endif /* WOLFSSL_NO_ML_KEM_512 */
45044505
#ifndef WOLFSSL_NO_ML_KEM_768
45054506
#ifndef WOLFSSL_TLS_NO_MLKEM_STANDALONE
@@ -8486,9 +8487,8 @@ static int mlkem_id2type(int id, int *type)
84868487
#endif
84878488

84888489
#if defined(WOLFSSL_NO_ML_KEM_768) && defined(WOLFSSL_NO_ML_KEM_1024) && \
8489-
!defined(WOLFSSL_EXTRA_PQC_HYBRIDS)
8490-
#error "Non-experimental PQC hybrid combinations require either "
8491-
"ML-KEM 768 or ML-KEM 1024"
8490+
defined(WOLFSSL_PQC_HYBRIDS)
8491+
#error "PQC hybrid combinations require either ML-KEM 768 or ML-KEM 1024"
84928492
#endif
84938493

84948494
/* Structures and objects needed for hybrid key exchanges using both classic
@@ -10913,11 +10913,18 @@ int TLSX_KeyShare_Use(const WOLFSSL* ssl, word16 group, word16 len, byte* data,
1091310913
#if !defined(WOLFSSL_ASYNC_CRYPT)
1091410914
if (ssl->options.side == WOLFSSL_SERVER_END &&
1091510915
WOLFSSL_NAMED_GROUP_IS_PQC_HYBRID(group)) {
10916-
ret = TLSX_KeyShare_HandlePqcHybridKeyServer((WOLFSSL*)ssl,
10917-
keyShareEntry,
10918-
data, len);
10919-
if (ret != 0)
10920-
return ret;
10916+
if (TLSX_IsGroupSupported(group)) {
10917+
ret = TLSX_KeyShare_HandlePqcHybridKeyServer((WOLFSSL*)ssl,
10918+
keyShareEntry,
10919+
data, len);
10920+
if (ret != 0)
10921+
return ret;
10922+
}
10923+
else {
10924+
XFREE(keyShareEntry->ke, ssl->heap, DYNAMIC_TYPE_PUBLIC_KEY);
10925+
keyShareEntry->ke = NULL;
10926+
keyShareEntry->keLen = 0;
10927+
}
1092110928
}
1092210929
else
1092310930
#endif

tests/api.c

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30670,19 +30670,38 @@ static int test_dtls13_frag_ch_pq(void)
3067030670
byte buf[255];
3067130671
#if !defined(WOLFSSL_TLS_NO_MLKEM_STANDALONE)
3067230672
#if defined(WOLFSSL_MLKEM_KYBER)
30673+
#if !defined(WOLFSSL_NO_KYBER1024)
3067330674
int group = WOLFSSL_KYBER_LEVEL5;
3067430675
const char *group_name = "KYBER_LEVEL5";
30676+
#elif !defined(WOLFSSL_NO_KYBER768)
30677+
int group = WOLFSSL_KYBER_LEVEL3;
30678+
const char *group_name = "KYBER_LEVEL3";
30679+
#else
30680+
int group = WOLFSSL_KYBER_LEVEL1;
30681+
const char *group_name = "KYBER_LEVEL1";
30682+
#endif
3067530683
#else
30684+
#if !defined(WOLFSSL_NO_ML_KEM_1024)
3067630685
int group = WOLFSSL_ML_KEM_1024;
3067730686
const char *group_name = "ML_KEM_1024";
30687+
#elif !defined(WOLFSSL_NO_ML_KEM_768)
30688+
int group = WOLFSSL_ML_KEM_768;
30689+
const char *group_name = "ML_KEM_768";
30690+
#else
30691+
int group = WOLFSSL_ML_KEM_512;
30692+
const char *group_name = "ML_KEM_512";
30693+
#endif
3067830694
#endif
3067930695
#elif defined(WOLFSSL_PQC_HYBRIDS)
30680-
#if defined(HAVE_CURVE25519)
30696+
#if defined(HAVE_CURVE25519) && !defined(WOLFSSL_NO_ML_KEM_768)
3068130697
int group = WOLFSSL_X25519MLKEM768;
3068230698
const char *group_name = "X25519MLKEM768";
30683-
#else
30699+
#elif !defined(WOLFSSL_NO_ML_KEM_768)
3068430700
int group = WOLFSSL_SECP256R1MLKEM768;
3068530701
const char *group_name = "SecP256r1MLKEM768";
30702+
#else
30703+
int group = WOLFSSL_SECP384R1MLKEM1024;
30704+
const char *group_name = "SecP384r1MLKEM1024";
3068630705
#endif
3068730706
#endif /* WOLFSSL_TLS_NO_MLKEM_STANDALONE */
3068830707

tests/api/test_dtls.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1619,15 +1619,23 @@ int test_dtls_rtx_across_epoch_change(void)
16191619
*into two messages */
16201620
int helloMsgCount = 2;
16211621
int groups[2] = {
1622-
#if defined(HAVE_CURVE25519) && defined(WOLFSSL_PQC_HYBRIDS)
1622+
#if defined(HAVE_CURVE25519) && defined(WOLFSSL_PQC_HYBRIDS) && \
1623+
!defined(WOLFSSL_NO_ML_KEM_768)
16231624
WOLFSSL_X25519MLKEM768,
1624-
#elif defined(HAVE_ECC) && defined(WOLFSSL_PQC_HYBRIDS)
1625+
#elif defined(HAVE_ECC) && defined(WOLFSSL_PQC_HYBRIDS) && \
1626+
!defined(WOLFSSL_NO_ML_KEM_768)
16251627
WOLFSSL_SECP256R1MLKEM768,
1628+
#elif defined(HAVE_ECC) && defined(WOLFSSL_PQC_HYBRIDS) && \
1629+
!defined(WOLFSSL_NO_ML_KEM_1024)
1630+
WOLFSSL_SECP384R1MLKEM1024,
16261631
#elif !defined(WOLFSSL_NO_ML_KEM_1024) && \
16271632
!defined(WOLFSSL_TLS_NO_MLKEM_STANDALONE)
16281633
WOLFSSL_ML_KEM_1024,
1629-
#else
1634+
#elif !defined(WOLFSSL_NO_ML_KEM_768) && \
1635+
!defined(WOLFSSL_TLS_NO_MLKEM_STANDALONE)
16301636
WOLFSSL_ML_KEM_768,
1637+
#else
1638+
WOLFSSL_ML_KEM_512,
16311639
#endif
16321640
WOLFSSL_ECC_SECP256R1,
16331641
};

tests/api/test_tls13.c

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -160,12 +160,8 @@ int test_tls13_apis(void)
160160
":SecP256r1MLKEM512"
161161
#elif !defined(WOLFSSL_NO_ML_KEM_768) && defined(WOLFSSL_PQC_HYBRIDS)
162162
":SecP256r1MLKEM768"
163-
#elif !defined(WOLFSSL_NO_ML_KEM_1024) && \
164-
!defined(WOLFSSL_TLS_NO_MLKEM_STANDALONE)
165-
":ML_KEM_1024"
166-
#elif !defined(WOLFSSL_NO_ML_KEM_768) && \
167-
!defined(WOLFSSL_TLS_NO_MLKEM_STANDALONE)
168-
":ML_KEM_768"
163+
#elif !defined(WOLFSSL_NO_ML_KEM_1024) && defined(WOLFSSL_PQC_HYBRIDS)
164+
":SecP384r1MLKEM1024"
169165
#endif
170166
#endif
171167
#endif
@@ -184,11 +180,11 @@ int test_tls13_apis(void)
184180
":KYBER_LEVEL5"
185181
#endif
186182
#elif !defined(WOLFSSL_TLS_NO_MLKEM_STANDALONE)
187-
#ifndef WOLFSSL_NO_KYBER512
183+
#if !defined(WOLFSSL_NO_ML_KEM_512)
188184
":ML_KEM_512"
189-
#elif !defined(WOLFSSL_NO_KYBER768)
185+
#elif !defined(WOLFSSL_NO_ML_KEM_768)
190186
":ML_KEM_768"
191-
#else
187+
#elif !defined(WOLFSSL_NO_ML_KEM_1024)
192188
":ML_KEM_1024"
193189
#endif
194190
#endif

wolfssl/internal.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1752,7 +1752,7 @@ enum Misc {
17521752
ECDHE_SIZE = 32, /* ECDHE server size defaults to 256 bit */
17531753
#endif
17541754
MAX_EXPORT_ECC_SZ = 256, /* Export ANSI X9.62 max future size */
1755-
MAX_CURVE_NAME_SZ = 18, /* Maximum size of curve name string */
1755+
MAX_CURVE_NAME_SZ = 20, /* Maximum size of curve name string */
17561756

17571757
NEW_SA_MAJOR = 8, /* Most significant byte used with new sig algos */
17581758
RSA_PSS_RSAE_SHA256_MINOR = 0x04,

0 commit comments

Comments
 (0)