Skip to content

Commit adc644d

Browse files
committed
OpensslPkg: Register ECX, ML-KEM, and hybrid algorithms
Extend the UEFI built-in OpenSSL provider (uefiprov.c) so that libssl can discover the algorithms required for the post-quantum TLS 1.3 key exchange groups defined by IANA codepoints 0x11EB (SecP256r1MLKEM768), 0x11EC (X25519MLKEM768), and 0x11ED (SecP384r1MLKEM1024), as well as the classical X25519 / X448 groups. The UEFI provider previously omitted ECX (X25519, X448), ML-KEM, and the ML-KEM hybrid algorithms. Without keymgmt and KEM dispatch entries, SSL_set1_groups_list() would reject those names and TlsSetEcCurve() would return EFI_UNSUPPORTED for both classical and PQC groups. Add the following entries (gated to match per-variant source coverage in the OpensslLib*.inf files): * deflt_keyexch[]: X25519, X448 (gated by OPENSSL_NO_EC / OPENSSL_NO_ECX) * deflt_keymgmt[]: X25519, X448, ML-KEM-768/1024, X25519MLKEM768, SecP256r1MLKEM768, SecP384r1MLKEM1024 * deflt_asym_kem[] (new table): RSA, EC, X25519, X448, ML-KEM-768/1024, and the three TLS hybrid KEMs * deflt_query(): dispatch OSSL_OP_KEM to the new deflt_asym_kem table Verified against the TlsLib host unit tests: X25519 / X448 report SUPPORTED, and all three PQC hybrid groups report SUPPORTED (3 / 3). All 119 host unit tests continue to pass. Signed-off-by: Doug Flick <dougflick@microsoft.com>
1 parent 033e592 commit adc644d

1 file changed

Lines changed: 51 additions & 0 deletions

File tree

  • OpensslPkg/Library/OpensslLib/OpensslStub

OpensslPkg/Library/OpensslLib/OpensslStub/uefiprov.c

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,10 @@ static const OSSL_ALGORITHM deflt_keyexch[] = {
183183
#endif
184184
#ifndef OPENSSL_NO_EC
185185
{ PROV_NAMES_ECDH, "provider=default", ossl_ecdh_keyexch_functions },
186+
# ifndef OPENSSL_NO_ECX
187+
{ PROV_NAMES_X25519, "provider=default", ossl_x25519_keyexch_functions },
188+
{ PROV_NAMES_X448, "provider=default", ossl_x448_keyexch_functions },
189+
# endif
186190
#endif
187191
{ PROV_NAMES_TLS1_PRF, "provider=default", ossl_kdf_tls1_prf_keyexch_functions },
188192
{ PROV_NAMES_HKDF, "provider=default", ossl_kdf_hkdf_keyexch_functions },
@@ -215,6 +219,29 @@ static const OSSL_ALGORITHM deflt_asym_cipher[] = {
215219
{ NULL, NULL, NULL }
216220
};
217221

222+
static const OSSL_ALGORITHM deflt_asym_kem[] = {
223+
{ PROV_NAMES_RSA, "provider=default", ossl_rsa_asym_kem_functions },
224+
#ifndef OPENSSL_NO_EC
225+
{ PROV_NAMES_EC, "provider=default", ossl_ec_asym_kem_functions },
226+
# ifndef OPENSSL_NO_ECX
227+
{ PROV_NAMES_X25519, "provider=default", ossl_ecx_asym_kem_functions },
228+
{ PROV_NAMES_X448, "provider=default", ossl_ecx_asym_kem_functions },
229+
# endif
230+
#endif
231+
#ifndef OPENSSL_NO_ML_KEM
232+
{ PROV_NAMES_ML_KEM_768, "provider=default", ossl_ml_kem_asym_kem_functions },
233+
{ PROV_NAMES_ML_KEM_1024, "provider=default", ossl_ml_kem_asym_kem_functions },
234+
# ifndef OPENSSL_NO_EC
235+
# ifndef OPENSSL_NO_ECX
236+
{ PROV_NAMES_X25519MLKEM768, "provider=default", ossl_mlx_kem_asym_kem_functions },
237+
# endif
238+
{ PROV_NAMES_SecP256r1MLKEM768, "provider=default", ossl_mlx_kem_asym_kem_functions },
239+
{ PROV_NAMES_SecP384r1MLKEM1024, "provider=default", ossl_mlx_kem_asym_kem_functions },
240+
# endif
241+
#endif
242+
{ NULL, NULL, NULL }
243+
};
244+
218245
static const OSSL_ALGORITHM deflt_keymgmt[] = {
219246
#ifndef OPENSSL_NO_DH
220247
{ PROV_NAMES_DH, "provider=default", ossl_dh_keymgmt_functions,
@@ -230,6 +257,12 @@ static const OSSL_ALGORITHM deflt_keymgmt[] = {
230257
#ifndef OPENSSL_NO_EC
231258
{ PROV_NAMES_EC, "provider=default", ossl_ec_keymgmt_functions,
232259
PROV_DESCS_EC },
260+
# ifndef OPENSSL_NO_ECX
261+
{ PROV_NAMES_X25519, "provider=default", ossl_x25519_keymgmt_functions,
262+
PROV_DESCS_X25519 },
263+
{ PROV_NAMES_X448, "provider=default", ossl_x448_keymgmt_functions,
264+
PROV_DESCS_X448 },
265+
# endif
233266
#endif
234267
{ PROV_NAMES_TLS1_PRF, "provider=default", ossl_kdf_keymgmt_functions,
235268
PROV_DESCS_TLS1_PRF_SIGN },
@@ -244,6 +277,22 @@ static const OSSL_ALGORITHM deflt_keymgmt[] = {
244277
PROV_DESCS_ML_DSA_65 },
245278
{ PROV_NAMES_ML_DSA_87, "provider=default", ossl_ml_dsa_87_keymgmt_functions,
246279
PROV_DESCS_ML_DSA_87 },
280+
#endif
281+
#ifndef OPENSSL_NO_ML_KEM
282+
{ PROV_NAMES_ML_KEM_768, "provider=default", ossl_ml_kem_768_keymgmt_functions,
283+
PROV_DESCS_ML_KEM_768 },
284+
{ PROV_NAMES_ML_KEM_1024, "provider=default", ossl_ml_kem_1024_keymgmt_functions,
285+
PROV_DESCS_ML_KEM_1024 },
286+
# ifndef OPENSSL_NO_EC
287+
# ifndef OPENSSL_NO_ECX
288+
{ PROV_NAMES_X25519MLKEM768, "provider=default", ossl_mlx_x25519_kem_kmgmt_functions,
289+
PROV_DESCS_X25519MLKEM768 },
290+
# endif
291+
{ PROV_NAMES_SecP256r1MLKEM768, "provider=default", ossl_mlx_p256_kem_kmgmt_functions,
292+
PROV_DESCS_SecP256r1MLKEM768 },
293+
{ PROV_NAMES_SecP384r1MLKEM1024, "provider=default", ossl_mlx_p384_kem_kmgmt_functions,
294+
PROV_DESCS_SecP384r1MLKEM1024 },
295+
# endif
247296
#endif
248297

249298
{ NULL, NULL, NULL }
@@ -279,6 +328,8 @@ static const OSSL_ALGORITHM *deflt_query(void *provctx, int operation_id,
279328
return deflt_signature;
280329
case OSSL_OP_ASYM_CIPHER:
281330
return deflt_asym_cipher;
331+
case OSSL_OP_KEM:
332+
return deflt_asym_kem;
282333
case OSSL_OP_DECODER:
283334
return deflt_decoder;
284335
}

0 commit comments

Comments
 (0)