Skip to content

Commit 9f85d21

Browse files
committed
Align preferredGroup array with TLSX_PopulateSupportedGroups()
1 parent 460a871 commit 9f85d21

1 file changed

Lines changed: 110 additions & 40 deletions

File tree

src/tls.c

Lines changed: 110 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -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. */
1116711171
static 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

Comments
 (0)