@@ -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:
@@ -5866,6 +5873,23 @@ int TLSX_UseSupportedCurve(TLSX** extensions, word16 name, void* heap)
58665873 heap);
58675874 if (ret != 0)
58685875 return ret;
5876+ #ifdef WOLFSSL_ML_KEM_USE_OLD_IDS
5877+ if (name == WOLFSSL_P256_ML_KEM_512) {
5878+ ret = TLSX_SupportedCurve_Append((SupportedCurve*)extension->data,
5879+ WOLFSSL_P256_ML_KEM_512_OLD, heap);
5880+ }
5881+ else if (name == WOLFSSL_P384_ML_KEM_768) {
5882+ ret = TLSX_SupportedCurve_Append((SupportedCurve*)extension->data,
5883+ WOLFSSL_P384_ML_KEM_768_OLD, heap);
5884+ }
5885+ else if (name == WOLFSSL_P521_ML_KEM_1024) {
5886+ ret = TLSX_SupportedCurve_Append((SupportedCurve*)extension->data,
5887+ WOLFSSL_P521_ML_KEM_1024_OLD, heap);
5888+ }
5889+ if (ret != 0) {
5890+ return ret;
5891+ }
5892+ #endif
58695893 }
58705894
58715895 return WOLFSSL_SUCCESS;
@@ -8436,6 +8460,11 @@ static const PqcHybridMapping pqc_hybrid_mapping[] = {
84368460 {WOLFSSL_P256_ML_KEM_768, WOLFSSL_ECC_SECP256R1, WOLFSSL_ML_KEM_768, 0},
84378461 {WOLFSSL_P521_ML_KEM_1024, WOLFSSL_ECC_SECP521R1, WOLFSSL_ML_KEM_1024, 0},
84388462 {WOLFSSL_P384_ML_KEM_1024, WOLFSSL_ECC_SECP384R1, WOLFSSL_ML_KEM_1024, 0},
8463+ #ifdef WOLFSSL_ML_KEM_USE_OLD_IDS
8464+ {WOLFSSL_P256_ML_KEM_512_OLD, WOLFSSL_ECC_SECP256R1, WOLFSSL_ML_KEM_512, 0},
8465+ {WOLFSSL_P384_ML_KEM_768_OLD, WOLFSSL_ECC_SECP384R1, WOLFSSL_ML_KEM_768, 0},
8466+ {WOLFSSL_P521_ML_KEM_1024_OLD, WOLFSSL_ECC_SECP521R1, WOLFSSL_ML_KEM_1024, 0},
8467+ #endif
84398468#ifdef HAVE_CURVE25519
84408469 {WOLFSSL_X25519_ML_KEM_512, WOLFSSL_ECC_X25519, WOLFSSL_ML_KEM_512, 1},
84418470 {WOLFSSL_X25519_ML_KEM_768, WOLFSSL_ECC_X25519, WOLFSSL_ML_KEM_768, 1},
@@ -10541,6 +10570,18 @@ int TLSX_KeyShare_Use(const WOLFSSL* ssl, word16 group, word16 len, byte* data,
1054110570 /* Try to find the key share entry with this group. */
1054210571 keyShareEntry = (KeyShareEntry*)extension->data;
1054310572 while (keyShareEntry != NULL) {
10573+ #ifdef WOLFSSL_ML_KEM_USE_OLD_IDS
10574+ if ((group == WOLFSSL_P256_ML_KEM_512_OLD &&
10575+ keyShareEntry->group == WOLFSSL_P256_ML_KEM_512) ||
10576+ (group == WOLFSSL_P384_ML_KEM_768_OLD &&
10577+ keyShareEntry->group == WOLFSSL_P384_ML_KEM_768) ||
10578+ (group == WOLFSSL_P521_ML_KEM_1024_OLD &&
10579+ keyShareEntry->group == WOLFSSL_P521_ML_KEM_1024)) {
10580+ keyShareEntry->group = group;
10581+ break;
10582+ }
10583+ else
10584+ #endif
1054410585 if (keyShareEntry->group == group)
1054510586 break;
1054610587 keyShareEntry = keyShareEntry->next;
@@ -10778,9 +10819,20 @@ static int TLSX_KeyShare_GroupRank(const WOLFSSL* ssl, int group)
1077810819 return WOLFSSL_FATAL_ERROR;
1077910820#endif
1078010821
10781- for (i = 0; i < numGroups; i++)
10822+ for (i = 0; i < numGroups; i++) {
10823+ #ifdef WOLFSSL_ML_KEM_USE_OLD_IDS
10824+ if ((group == WOLFSSL_P256_ML_KEM_512_OLD &&
10825+ groups[i] == WOLFSSL_P256_ML_KEM_512) ||
10826+ (group == WOLFSSL_P384_ML_KEM_768_OLD &&
10827+ groups[i] == WOLFSSL_P384_ML_KEM_768) ||
10828+ (group == WOLFSSL_P521_ML_KEM_1024_OLD &&
10829+ groups[i] == WOLFSSL_P521_ML_KEM_1024)) {
10830+ return i;
10831+ }
10832+ #endif
1078210833 if (groups[i] == (word16)group)
1078310834 return i;
10835+ }
1078410836
1078510837 return WOLFSSL_FATAL_ERROR;
1078610838}
0 commit comments