Skip to content

Commit f4821eb

Browse files
Merge pull request wolfSSL#8827 from SparkiDev/ml_kem_codepoints
ML_KEM IDs backward compat
2 parents 570c1fc + 7eca4fb commit f4821eb

5 files changed

Lines changed: 76 additions & 1 deletion

File tree

.wolfssl_known_macro_extras

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -724,6 +724,7 @@ WOLFSSL_MLKEM_MAKEKEY_SMALL_MEM
724724
WOLFSSL_MLKEM_NO_LARGE_CODE
725725
WOLFSSL_MLKEM_NO_MALLOC
726726
WOLFSSL_MLKEM_NTT_UNROLL
727+
WOLFSSL_ML_KEM_USE_OLD_IDS
727728
WOLFSSL_MONT_RED_CT
728729
WOLFSSL_MP_COND_COPY
729730
WOLFSSL_MP_INVMOD_CONSTANT_TIME

src/internal.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35358,6 +35358,11 @@ static int DoSessionTicket(WOLFSSL* ssl, const byte* input, word32* inOutIdx,
3535835358
case WOLFSSL_P521_ML_KEM_1024:
3535935359
case WOLFSSL_X25519_ML_KEM_512:
3536035360
case WOLFSSL_X448_ML_KEM_768:
35361+
#ifdef WOLFSSL_ML_KEM_USE_OLD_IDS
35362+
case WOLFSSL_P256_ML_KEM_512_OLD:
35363+
case WOLFSSL_P384_ML_KEM_768_OLD:
35364+
case WOLFSSL_P521_ML_KEM_1024_OLD:
35365+
#endif
3536135366
#endif
3536235367
#ifdef WOLFSSL_MLKEM_KYBER
3536335368
case WOLFSSL_P256_KYBER_LEVEL3:

src/ssl.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15591,6 +15591,10 @@ const char* wolfSSL_get_curve_name(WOLFSSL* ssl)
1559115591
return "ML_KEM_512";
1559215592
case WOLFSSL_P256_ML_KEM_512:
1559315593
return "P256_ML_KEM_512";
15594+
#ifdef WOLFSSL_ML_KEM_USE_OLD_IDS
15595+
case WOLFSSL_P256_ML_KEM_512_OLD:
15596+
return "P256_ML_KEM_512_OLD";
15597+
#endif
1559415598
#ifdef HAVE_CURVE25519
1559515599
case WOLFSSL_X25519_ML_KEM_512:
1559615600
return "X25519_ML_KEM_512";
@@ -15601,6 +15605,10 @@ const char* wolfSSL_get_curve_name(WOLFSSL* ssl)
1560115605
return "ML_KEM_768";
1560215606
case WOLFSSL_P384_ML_KEM_768:
1560315607
return "P384_ML_KEM_768";
15608+
#ifdef WOLFSSL_ML_KEM_USE_OLD_IDS
15609+
case WOLFSSL_P384_ML_KEM_768_OLD:
15610+
return "P384_ML_KEM_768_OLD";
15611+
#endif
1560415612
case WOLFSSL_P256_ML_KEM_768:
1560515613
return "P256_ML_KEM_768";
1560615614
#ifdef HAVE_CURVE25519
@@ -15617,6 +15625,10 @@ const char* wolfSSL_get_curve_name(WOLFSSL* ssl)
1561715625
return "ML_KEM_1024";
1561815626
case WOLFSSL_P521_ML_KEM_1024:
1561915627
return "P521_ML_KEM_1024";
15628+
#ifdef WOLFSSL_ML_KEM_USE_OLD_IDS
15629+
case WOLFSSL_P521_ML_KEM_1024_OLD:
15630+
return "P521_ML_KEM_1024_OLD";
15631+
#endif
1562015632
case WOLFSSL_P384_ML_KEM_1024:
1562115633
return "P384_ML_KEM_1024";
1562215634
#endif

src/tls.c

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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
}

wolfssl/ssl.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4617,6 +4617,11 @@ enum {
46174617
* https://github.com/open-quantum-safe/oqs-provider/blob/main/oqs-template/
46184618
* oqs-kem-info.md
46194619
*/
4620+
#ifdef WOLFSSL_ML_KEM_USE_OLD_IDS
4621+
WOLFSSL_P256_ML_KEM_512_OLD = 12103,
4622+
WOLFSSL_P384_ML_KEM_768_OLD = 12104,
4623+
WOLFSSL_P521_ML_KEM_1024_OLD = 12105,
4624+
#endif
46204625
WOLFSSL_P256_ML_KEM_512 = 12107,
46214626
WOLFSSL_P384_ML_KEM_768 = 12108,
46224627
WOLFSSL_P521_ML_KEM_1024 = 12109,

0 commit comments

Comments
 (0)