@@ -133,27 +133,23 @@ kex_gen_client(struct ssh *ssh)
133133 break ;
134134 case KEX_KEM_MLKEM768X25519_SHA256 :
135135 if (FIPS_mode ()) {
136- logit_f ("Key exchange type mlkem768x25519 is not allowed in FIPS mode" );
137- r = SSH_ERR_INVALID_ARGUMENT ;
136+ EVP_KEM * mlkem = EVP_KEM_fetch (NULL , "mlkem768" , NULL );
137+ if (mlkem == NULL ) {
138+ logit_f ("Key exchange type mlkem768x25519 is not allowed in FIPS mode" );
139+ r = SSH_ERR_INVALID_ARGUMENT ;
140+ } else {
141+ EVP_KEM_free (mlkem );
142+ r = kex_kem_mlkem768x25519_keypair (kex );
143+ }
138144 } else {
139145 r = kex_kem_mlkem768x25519_keypair (kex );
140146 }
141147 break ;
142148 case KEX_KEM_MLKEM768NISTP256_SHA256 :
143- if (FIPS_mode ()) {
144- logit_f ("Key exchange type mlkem768nistp256 is not allowed in FIPS mode" );
145- r = SSH_ERR_INVALID_ARGUMENT ;
146- } else {
147149 r = kex_kem_mlkem768nistp256_keypair (kex );
148- }
149150 break ;
150151 case KEX_KEM_MLKEM1024NISTP384_SHA384 :
151- if (FIPS_mode ()) {
152- logit_f ("Key exchange type mlkem1024nistp384 is not allowed in FIPS mode" );
153- r = SSH_ERR_INVALID_ARGUMENT ;
154- } else {
155152 r = kex_kem_mlkem1024nistp384_keypair (kex );
156- }
157153 break ;
158154 default :
159155 r = SSH_ERR_INVALID_ARGUMENT ;
@@ -239,30 +235,27 @@ input_kex_gen_reply(int type, u_int32_t seq, struct ssh *ssh)
239235 break ;
240236 case KEX_KEM_MLKEM768X25519_SHA256 :
241237 if (FIPS_mode ()) {
242- logit_f ("Key exchange type mlkem768x25519 is not allowed in FIPS mode" );
243- r = SSH_ERR_INVALID_ARGUMENT ;
238+ EVP_KEM * mlkem = EVP_KEM_fetch (NULL , "mlkem768" , NULL );
239+ if (mlkem == NULL ) {
240+ logit_f ("Key exchange type mlkem768x25519 is not allowed in FIPS mode" );
241+ r = SSH_ERR_INVALID_ARGUMENT ;
242+ } else {
243+ EVP_KEM_free (mlkem );
244+ r = kex_kem_mlkem768x25519_dec (kex , server_blob ,
245+ & shared_secret );
246+ }
244247 } else {
245248 r = kex_kem_mlkem768x25519_dec (kex , server_blob ,
246249 & shared_secret );
247250 }
248251 break ;
249252 case KEX_KEM_MLKEM768NISTP256_SHA256 :
250- if (FIPS_mode ()) {
251- logit_f ("Key exchange type mlkem768nistp256 is not allowed in FIPS mode" );
252- r = SSH_ERR_INVALID_ARGUMENT ;
253- } else {
254253 r = kex_kem_mlkem768nistp256_dec (kex , server_blob ,
255254 & shared_secret );
256- }
257255 break ;
258256 case KEX_KEM_MLKEM1024NISTP384_SHA384 :
259- if (FIPS_mode ()) {
260- logit_f ("Key exchange type mlkem1024nistp384 is not allowed in FIPS mode" );
261- r = SSH_ERR_INVALID_ARGUMENT ;
262- } else {
263257 r = kex_kem_mlkem1024nistp384_dec (kex , server_blob ,
264258 & shared_secret );
265- }
266259 break ;
267260 default :
268261 r = SSH_ERR_INVALID_ARGUMENT ;
@@ -398,30 +391,27 @@ input_kex_gen_init(int type, u_int32_t seq, struct ssh *ssh)
398391 break ;
399392 case KEX_KEM_MLKEM768X25519_SHA256 :
400393 if (FIPS_mode ()) {
401- logit_f ("Key exchange type mlkem768x25519 is not allowed in FIPS mode" );
402- r = SSH_ERR_INVALID_ARGUMENT ;
394+ EVP_KEM * mlkem = EVP_KEM_fetch (NULL , "mlkem768" , NULL );
395+ if (mlkem == NULL ) {
396+ logit_f ("Key exchange type mlkem768x25519 is not allowed in FIPS mode" );
397+ r = SSH_ERR_INVALID_ARGUMENT ;
398+ } else {
399+ EVP_KEM_free (mlkem );
400+ r = kex_kem_mlkem768x25519_enc (kex , client_pubkey ,
401+ & server_pubkey , & shared_secret );
402+ }
403403 } else {
404404 r = kex_kem_mlkem768x25519_enc (kex , client_pubkey ,
405405 & server_pubkey , & shared_secret );
406406 }
407407 break ;
408408 case KEX_KEM_MLKEM768NISTP256_SHA256 :
409- if (FIPS_mode ()) {
410- logit_f ("Key exchange type mlkem768nistp256 is not allowed in FIPS mode" );
411- r = SSH_ERR_INVALID_ARGUMENT ;
412- } else {
413409 r = kex_kem_mlkem768nistp256_enc (kex , client_pubkey ,
414410 & server_pubkey , & shared_secret );
415- }
416411 break ;
417412 case KEX_KEM_MLKEM1024NISTP384_SHA384 :
418- if (FIPS_mode ()) {
419- logit_f ("Key exchange type mlkem1024nistp384 is not allowed in FIPS mode" );
420- r = SSH_ERR_INVALID_ARGUMENT ;
421- } else {
422413 r = kex_kem_mlkem1024nistp384_enc (kex , client_pubkey ,
423414 & server_pubkey , & shared_secret );
424- }
425415 break ;
426416 default :
427417 r = SSH_ERR_INVALID_ARGUMENT ;
0 commit comments