@@ -11164,10 +11164,14 @@ int TLSX_KeyShare_Empty(WOLFSSL* ssl)
1116411164 return ret;
1116511165}
1116611166
11167+ /* Compile-time gating must stay aligned with TLSX_PopulateSupportedGroups().
11168+ * Runtime-only conditions in that function (TLS 1.3 version check, FFDHE
11169+ * key-size bounds, session-resumption short-circuit, downgrade-aware
11170+ * Brainpool TLS 1.2 selection) are intentionally not represented here. */
1116711171static const word16 preferredGroup[] = {
1116811172 /* Sort by strength, but prefer non-experimental PQ/T hybrid groups */
11169- #if defined(WOLFSSL_HAVE_MLKEM ) && ! defined(WOLFSSL_NO_ML_KEM ) && \
11170- defined(WOLFSSL_PQC_HYBRIDS)
11173+ #if defined(WOLFSSL_TLS13 ) && defined(WOLFSSL_HAVE_MLKEM ) && \
11174+ !defined(WOLFSSL_NO_ML_KEM) && defined(WOLFSSL_PQC_HYBRIDS)
1117111175 #if !defined(WOLFSSL_NO_ML_KEM_768) && defined(HAVE_CURVE25519) && \
1117211176 ECC_MIN_KEY_SZ <= 256
1117311177 WOLFSSL_X25519MLKEM768,
@@ -11182,50 +11186,96 @@ static const word16 preferredGroup[] = {
1118211186 ECC_MIN_KEY_SZ <= 256
1118311187 WOLFSSL_SECP256R1MLKEM768,
1118411188 #endif
11185- #endif /* WOLFSSL_HAVE_MLKEM && !WOLFSSL_NO_ML_KEM && WOLFSSL_PQC_HYBRIDS */
11186- #if defined(WOLFSSL_HAVE_MLKEM) && !defined(WOLFSSL_NO_ML_KEM) && \
11187- !defined(WOLFSSL_NO_ML_KEM_1024) && !defined(WOLFSSL_TLS_NO_MLKEM_STANDALONE)
11189+ #endif /* WOLFSSL_TLS13 && WOLFSSL_HAVE_MLKEM && !WOLFSSL_NO_ML_KEM &&
11190+ * WOLFSSL_PQC_HYBRIDS */
11191+ #if defined(WOLFSSL_TLS13) && defined(WOLFSSL_HAVE_MLKEM) && \
11192+ !defined(WOLFSSL_NO_ML_KEM) && !defined(WOLFSSL_NO_ML_KEM_1024) && \
11193+ !defined(WOLFSSL_TLS_NO_MLKEM_STANDALONE)
1118811194 WOLFSSL_ML_KEM_1024,
1118911195#endif
11190- #if defined(HAVE_ECC) && (! defined(NO_ECC521 ) || \
11191- defined(HAVE_ALL_CURVES)) && !defined(NO_ECC_SECP) && ECC_MIN_KEY_SZ <= 521
11196+ #if defined(HAVE_ECC) && (defined(HAVE_ECC521 ) || defined(HAVE_ALL_CURVES)) && \
11197+ !defined(NO_ECC_SECP) && ECC_MIN_KEY_SZ <= 521
1119211198 WOLFSSL_ECC_SECP521R1,
1119311199#endif
11194- #if defined(HAVE_ECC) && defined(HAVE_ECC512) && \
11200+ #if defined(HAVE_ECC) && ( defined(HAVE_ECC512) || defined(HAVE_ALL_CURVES) ) && \
1119511201 defined(HAVE_ECC_BRAINPOOL) && ECC_MIN_KEY_SZ <= 512
1119611202 WOLFSSL_ECC_BRAINPOOLP512R1TLS13,
11203+ WOLFSSL_ECC_BRAINPOOLP512R1,
1119711204#endif
11198- #if defined(WOLFSSL_HAVE_MLKEM) && !defined(WOLFSSL_NO_ML_KEM) && \
11199- !defined(WOLFSSL_NO_ML_KEM_768) && !defined(WOLFSSL_TLS_NO_MLKEM_STANDALONE)
11205+ #if defined(WOLFSSL_TLS13) && defined(WOLFSSL_HAVE_MLKEM) && \
11206+ !defined(WOLFSSL_NO_ML_KEM) && !defined(WOLFSSL_NO_ML_KEM_768) && \
11207+ !defined(WOLFSSL_TLS_NO_MLKEM_STANDALONE)
1120011208 WOLFSSL_ML_KEM_768,
1120111209#endif
11202- #if defined(HAVE_ECC) && (!defined(NO_ECC384) || \
11203- defined(HAVE_ALL_CURVES)) && !defined(NO_ECC_SECP) && ECC_MIN_KEY_SZ <= 384
11210+ #if defined(HAVE_ECC) && (defined(HAVE_ECC384) || defined(HAVE_ALL_CURVES)) && \
11211+ ECC_MIN_KEY_SZ <= 384
11212+ #ifndef NO_ECC_SECP
1120411213 WOLFSSL_ECC_SECP384R1,
11205- #if defined(HAVE_ECC_BRAINPOOL)
11214+ #endif
11215+ #ifdef HAVE_ECC_BRAINPOOL
1120611216 WOLFSSL_ECC_BRAINPOOLP384R1TLS13,
11217+ WOLFSSL_ECC_BRAINPOOLP384R1,
11218+ #endif
1120711219#endif
11208- #endif
11209- #if defined(HAVE_CURVE448) && ECC_MIN_KEY_SZ <= 448
11220+ #if !defined(HAVE_FIPS) && defined(HAVE_CURVE448) && ECC_MIN_KEY_SZ <= 448
1121011221 WOLFSSL_ECC_X448,
1121111222#endif
11212- #if defined(WOLFSSL_HAVE_MLKEM) && !defined(WOLFSSL_NO_ML_KEM) && \
11213- !defined(WOLFSSL_NO_ML_KEM_512) && !defined(WOLFSSL_TLS_NO_MLKEM_STANDALONE)
11223+ #if defined(WOLFSSL_TLS13) && defined(WOLFSSL_HAVE_MLKEM) && \
11224+ !defined(WOLFSSL_NO_ML_KEM) && !defined(WOLFSSL_NO_ML_KEM_512) && \
11225+ !defined(WOLFSSL_TLS_NO_MLKEM_STANDALONE)
1121411226 WOLFSSL_ML_KEM_512,
1121511227#endif
11216- #if defined(HAVE_ECC) && (!defined(NO_ECC256) || \
11217- defined(HAVE_ALL_CURVES)) && !defined(NO_ECC_SECP) && ECC_MIN_KEY_SZ <= 256
11228+ #if defined(HAVE_ECC) && (!defined(NO_ECC256) || defined(HAVE_ALL_CURVES)) && \
11229+ ECC_MIN_KEY_SZ <= 256
11230+ #ifndef NO_ECC_SECP
1121811231 WOLFSSL_ECC_SECP256R1,
11219- #if !defined(HAVE_FIPS) && defined(WOLFSSL_SM2)
11220- WOLFSSL_ECC_SM2P256V1,
11221- #endif
11222- #if defined(HAVE_ECC_BRAINPOOL)
11232+ #endif
11233+ #ifdef HAVE_ECC_KOBLITZ
11234+ WOLFSSL_ECC_SECP256K1,
11235+ #endif
11236+ #ifdef HAVE_ECC_BRAINPOOL
1122311237 WOLFSSL_ECC_BRAINPOOLP256R1TLS13,
11238+ WOLFSSL_ECC_BRAINPOOLP256R1,
11239+ #endif
11240+ #if !defined(HAVE_FIPS) && defined(WOLFSSL_SM2)
11241+ WOLFSSL_ECC_SM2P256V1,
11242+ #endif
1122411243#endif
11225- #endif
11226- #if defined(HAVE_CURVE25519) && ECC_MIN_KEY_SZ <= 256
11244+ #if !defined(HAVE_FIPS) && defined(HAVE_CURVE25519) && ECC_MIN_KEY_SZ <= 256
1122711245 WOLFSSL_ECC_X25519,
1122811246#endif
11247+ #if defined(HAVE_ECC) && (defined(HAVE_ECC224) || defined(HAVE_ALL_CURVES)) && \
11248+ ECC_MIN_KEY_SZ <= 224
11249+ #ifndef NO_ECC_SECP
11250+ WOLFSSL_ECC_SECP224R1,
11251+ #endif
11252+ #ifdef HAVE_ECC_KOBLITZ
11253+ WOLFSSL_ECC_SECP224K1,
11254+ #endif
11255+ #endif
11256+ #if !defined(HAVE_FIPS) && defined(HAVE_ECC)
11257+ #if (defined(HAVE_ECC192) || defined(HAVE_ALL_CURVES)) && \
11258+ ECC_MIN_KEY_SZ <= 192
11259+ #ifndef NO_ECC_SECP
11260+ WOLFSSL_ECC_SECP192R1,
11261+ #endif
11262+ #ifdef HAVE_ECC_KOBLITZ
11263+ WOLFSSL_ECC_SECP192K1,
11264+ #endif
11265+ #endif
11266+ #if (defined(HAVE_ECC160) || defined(HAVE_ALL_CURVES)) && \
11267+ ECC_MIN_KEY_SZ <= 160
11268+ #ifndef NO_ECC_SECP
11269+ WOLFSSL_ECC_SECP160R1,
11270+ #endif
11271+ #ifdef HAVE_ECC_SECPR2
11272+ WOLFSSL_ECC_SECP160R2,
11273+ #endif
11274+ #ifdef HAVE_ECC_KOBLITZ
11275+ WOLFSSL_ECC_SECP160K1,
11276+ #endif
11277+ #endif
11278+ #endif /* !HAVE_FIPS && HAVE_ECC */
1122911279#if defined(HAVE_FFDHE_8192)
1123011280 WOLFSSL_FFDHE_8192,
1123111281#endif
@@ -11241,35 +11291,52 @@ static const word16 preferredGroup[] = {
1124111291#if defined(HAVE_FFDHE_2048)
1124211292 WOLFSSL_FFDHE_2048,
1124311293#endif
11244- #ifndef WOLFSSL_NO_ML_KEM
11245- #if !defined(WOLFSSL_NO_ML_KEM_1024) && \
11246- defined(WOLFSSL_EXTRA_PQC_HYBRIDS)
11294+ #if defined(WOLFSSL_TLS13) && defined(WOLFSSL_HAVE_MLKEM) && \
11295+ !defined(WOLFSSL_NO_ML_KEM) && defined(WOLFSSL_EXTRA_PQC_HYBRIDS)
11296+ #if !defined(WOLFSSL_NO_ML_KEM_1024) && defined(HAVE_ECC) && \
11297+ (defined(HAVE_ECC521) || defined(HAVE_ALL_CURVES)) && \
11298+ ECC_MIN_KEY_SZ <= 521
1124711299 WOLFSSL_SECP521R1MLKEM1024,
1124811300 #endif
11249- #if !defined(WOLFSSL_NO_ML_KEM_768) && \
11250- defined(WOLFSSL_EXTRA_PQC_HYBRIDS)
11301+ #if !defined(WOLFSSL_NO_ML_KEM_768) && defined(HAVE_ECC) && \
11302+ (defined(HAVE_ECC384) || defined(HAVE_ALL_CURVES)) && \
11303+ ECC_MIN_KEY_SZ <= 384
1125111304 WOLFSSL_SECP384R1MLKEM768,
11252- #if defined(HAVE_CURVE448) && ECC_MIN_KEY_SZ <= 448
11305+ #endif
11306+ #if !defined(WOLFSSL_NO_ML_KEM_768) && defined(HAVE_CURVE448) && \
11307+ ECC_MIN_KEY_SZ <= 448
1125311308 WOLFSSL_X448MLKEM768,
11254- #endif /* HAVE_CURVE448 */
1125511309 #endif
11256- #if !defined(WOLFSSL_NO_ML_KEM_512) && \
11257- defined(WOLFSSL_EXTRA_PQC_HYBRIDS)
11310+ #if !defined(WOLFSSL_NO_ML_KEM_512) && defined(HAVE_ECC) && \
11311+ (!defined(NO_ECC256) || defined(HAVE_ALL_CURVES)) && \
11312+ ECC_MIN_KEY_SZ <= 256
1125811313 WOLFSSL_SECP256R1MLKEM512,
11259- #if defined(HAVE_CURVE25519) && ECC_MIN_KEY_SZ <= 256
11314+ #endif
11315+ #if !defined(WOLFSSL_NO_ML_KEM_512) && defined(HAVE_CURVE25519) && \
11316+ ECC_MIN_KEY_SZ <= 256
1126011317 WOLFSSL_X25519MLKEM512,
11261- #endif /* HAVE_CURVE25519 */
1126211318 #endif
11263- #endif /* !WOLFSSL_NO_ML_KEM */
11264- #ifdef WOLFSSL_MLKEM_KYBER
11319+ #endif /* WOLFSSL_TLS13 && WOLFSSL_HAVE_MLKEM && !WOLFSSL_NO_ML_KEM &&
11320+ * WOLFSSL_EXTRA_PQC_HYBRIDS */
11321+ #if defined(WOLFSSL_TLS13) && defined(WOLFSSL_HAVE_MLKEM) && \
11322+ defined(WOLFSSL_MLKEM_KYBER)
1126511323 #ifdef WOLFSSL_KYBER1024
1126611324 WOLFSSL_KYBER_LEVEL5,
11325+ #if defined(HAVE_ECC) && (defined(HAVE_ECC521) || \
11326+ defined(HAVE_ALL_CURVES)) && ECC_MIN_KEY_SZ <= 521
1126711327 WOLFSSL_P521_KYBER_LEVEL5,
1126811328 #endif
11329+ #endif
1126911330 #ifdef WOLFSSL_KYBER768
1127011331 WOLFSSL_KYBER_LEVEL3,
11332+ #if defined(HAVE_ECC) && (defined(HAVE_ECC384) || \
11333+ defined(HAVE_ALL_CURVES)) && ECC_MIN_KEY_SZ <= 384
1127111334 WOLFSSL_P384_KYBER_LEVEL3,
11335+ #endif
11336+ #if defined(HAVE_ECC) && (!defined(NO_ECC256) || \
11337+ defined(HAVE_ALL_CURVES)) && ECC_MIN_KEY_SZ <= 256
1127211338 WOLFSSL_P256_KYBER_LEVEL3,
11339+ #endif
1127311340 #if defined(HAVE_CURVE25519) && ECC_MIN_KEY_SZ <= 256
1127411341 WOLFSSL_X25519_KYBER_LEVEL3,
1127511342 #endif
@@ -11279,12 +11346,15 @@ static const word16 preferredGroup[] = {
1127911346 #endif
1128011347 #ifdef WOLFSSL_KYBER512
1128111348 WOLFSSL_KYBER_LEVEL1,
11349+ #if defined(HAVE_ECC) && (!defined(NO_ECC256) || \
11350+ defined(HAVE_ALL_CURVES)) && ECC_MIN_KEY_SZ <= 256
1128211351 WOLFSSL_P256_KYBER_LEVEL1,
11352+ #endif
1128311353 #if defined(HAVE_CURVE25519) && ECC_MIN_KEY_SZ <= 256
1128411354 WOLFSSL_X25519_KYBER_LEVEL1,
1128511355 #endif
1128611356 #endif
11287- #endif /* WOLFSSL_MLKEM_KYBER */
11357+ #endif /* WOLFSSL_TLS13 && WOLFSSL_HAVE_MLKEM && WOLFSSL_MLKEM_KYBER */
1128811358 WOLFSSL_NAMED_GROUP_INVALID
1128911359};
1129011360
@@ -15649,7 +15719,7 @@ static int TLSX_PopulateSupportedGroups(WOLFSSL* ssl, TLSX** extensions)
1564915719 if (ret != WOLFSSL_SUCCESS) return ret;
1565015720 }
1565115721 #endif
15652- #ifdef WOLFSSL_SM2
15722+ #if !defined(HAVE_FIPS) && defined( WOLFSSL_SM2)
1565315723 ret = TLSX_UseSupportedCurve(extensions,
1565415724 WOLFSSL_ECC_SM2P256V1, ssl->heap);
1565515725 if (ret != WOLFSSL_SUCCESS) return ret;
0 commit comments