@@ -4600,8 +4600,14 @@ static int TLSX_IsGroupSupported(int namedGroup)
46004600 case WOLFSSL_ML_KEM_1024:
46014601 case WOLFSSL_P521_ML_KEM_1024:
46024602 case WOLFSSL_P384_ML_KEM_1024:
4603+ break;
46034604 #endif
4605+ #ifdef WOLFSSL_ML_KEM_USE_OLD_IDS
4606+ case WOLFSSL_P256_ML_KEM_512_OLD:
4607+ case WOLFSSL_P384_ML_KEM_768_OLD:
4608+ case WOLFSSL_P521_ML_KEM_1024_OLD:
46044609 break;
4610+ #endif
46054611 #elif defined(HAVE_LIBOQS)
46064612 case WOLFSSL_ML_KEM_512:
46074613 case WOLFSSL_ML_KEM_768:
@@ -4619,6 +4625,7 @@ static int TLSX_IsGroupSupported(int namedGroup)
46194625 }
46204626 break;
46214627 }
4628+
46224629 case WOLFSSL_P256_ML_KEM_512:
46234630 case WOLFSSL_P384_ML_KEM_768:
46244631 case WOLFSSL_P256_ML_KEM_768:
@@ -5876,6 +5883,23 @@ int TLSX_UseSupportedCurve(TLSX** extensions, word16 name, void* heap)
58765883 heap);
58775884 if (ret != 0)
58785885 return ret;
5886+ #ifdef WOLFSSL_ML_KEM_USE_OLD_IDS
5887+ if (name == WOLFSSL_P256_ML_KEM_512) {
5888+ ret = TLSX_SupportedCurve_Append((SupportedCurve*)extension->data,
5889+ WOLFSSL_P256_ML_KEM_512_OLD, heap);
5890+ }
5891+ else if (name == WOLFSSL_P384_ML_KEM_768) {
5892+ ret = TLSX_SupportedCurve_Append((SupportedCurve*)extension->data,
5893+ WOLFSSL_P384_ML_KEM_768_OLD, heap);
5894+ }
5895+ else if (name == WOLFSSL_P521_ML_KEM_1024) {
5896+ ret = TLSX_SupportedCurve_Append((SupportedCurve*)extension->data,
5897+ WOLFSSL_P521_ML_KEM_1024_OLD, heap);
5898+ }
5899+ if (ret != 0) {
5900+ return ret;
5901+ }
5902+ #endif
58795903 }
58805904
58815905 return WOLFSSL_SUCCESS;
@@ -8446,6 +8470,11 @@ static const PqcHybridMapping pqc_hybrid_mapping[] = {
84468470 {WOLFSSL_P256_ML_KEM_768, WOLFSSL_ECC_SECP256R1, WOLFSSL_ML_KEM_768, 0},
84478471 {WOLFSSL_P521_ML_KEM_1024, WOLFSSL_ECC_SECP521R1, WOLFSSL_ML_KEM_1024, 0},
84488472 {WOLFSSL_P384_ML_KEM_1024, WOLFSSL_ECC_SECP384R1, WOLFSSL_ML_KEM_1024, 0},
8473+ #ifdef WOLFSSL_ML_KEM_USE_OLD_IDS
8474+ {WOLFSSL_P256_ML_KEM_512_OLD, WOLFSSL_ECC_SECP256R1, WOLFSSL_ML_KEM_512, 0},
8475+ {WOLFSSL_P384_ML_KEM_768_OLD, WOLFSSL_ECC_SECP384R1, WOLFSSL_ML_KEM_768, 0},
8476+ {WOLFSSL_P521_ML_KEM_1024_OLD, WOLFSSL_ECC_SECP521R1, WOLFSSL_ML_KEM_1024, 0},
8477+ #endif
84498478#ifdef HAVE_CURVE25519
84508479 {WOLFSSL_X25519_ML_KEM_512, WOLFSSL_ECC_X25519, WOLFSSL_ML_KEM_512, 1},
84518480 {WOLFSSL_X25519_ML_KEM_768, WOLFSSL_ECC_X25519, WOLFSSL_ML_KEM_768, 1},
@@ -10551,6 +10580,18 @@ int TLSX_KeyShare_Use(const WOLFSSL* ssl, word16 group, word16 len, byte* data,
1055110580 /* Try to find the key share entry with this group. */
1055210581 keyShareEntry = (KeyShareEntry*)extension->data;
1055310582 while (keyShareEntry != NULL) {
10583+ #ifdef WOLFSSL_ML_KEM_USE_OLD_IDS
10584+ if ((group == WOLFSSL_P256_ML_KEM_512_OLD &&
10585+ keyShareEntry->group == WOLFSSL_P256_ML_KEM_512) ||
10586+ (group == WOLFSSL_P384_ML_KEM_768_OLD &&
10587+ keyShareEntry->group == WOLFSSL_P384_ML_KEM_768) ||
10588+ (group == WOLFSSL_P521_ML_KEM_1024_OLD &&
10589+ keyShareEntry->group == WOLFSSL_P521_ML_KEM_1024)) {
10590+ keyShareEntry->group = group;
10591+ break;
10592+ }
10593+ else
10594+ #endif
1055410595 if (keyShareEntry->group == group)
1055510596 break;
1055610597 keyShareEntry = keyShareEntry->next;
@@ -10788,9 +10829,20 @@ static int TLSX_KeyShare_GroupRank(const WOLFSSL* ssl, int group)
1078810829 return WOLFSSL_FATAL_ERROR;
1078910830#endif
1079010831
10791- for (i = 0; i < numGroups; i++)
10832+ for (i = 0; i < numGroups; i++) {
10833+ #ifdef WOLFSSL_ML_KEM_USE_OLD_IDS
10834+ if ((group == WOLFSSL_P256_ML_KEM_512_OLD &&
10835+ groups[i] == WOLFSSL_P256_ML_KEM_512) ||
10836+ (group == WOLFSSL_P384_ML_KEM_768_OLD &&
10837+ groups[i] == WOLFSSL_P384_ML_KEM_768) ||
10838+ (group == WOLFSSL_P521_ML_KEM_1024_OLD &&
10839+ groups[i] == WOLFSSL_P521_ML_KEM_1024)) {
10840+ return i;
10841+ }
10842+ #endif
1079210843 if (groups[i] == (word16)group)
1079310844 return i;
10845+ }
1079410846
1079510847 return WOLFSSL_FATAL_ERROR;
1079610848}
0 commit comments