@@ -2328,7 +2328,29 @@ TEST_P(SSLVersionTest, PeerTmpKey) {
2328
2328
GTEST_SKIP ();
2329
2329
}
2330
2330
2331
- // Default should be using X5519 as the key exchange.
2331
+ ASSERT_TRUE (Connect ());
2332
+ for (SSL *ssl : {client_.get (), server_.get ()}) {
2333
+ SCOPED_TRACE (SSL_is_server (ssl) ? " server" : " client" );
2334
+ EVP_PKEY *key = nullptr ;
2335
+ uint16_t preferred_group = tls1_get_default_grouplist ()[0 ];
2336
+ if (getVersionParam ().version == TLS1_3_VERSION && preferred_group == SSL_GROUP_X25519_MLKEM768) {
2337
+ // TLS 1.3 default should be using X25519MLKEM768 as the key exchange.
2338
+ // We expect SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE because there is no EVP_PKEY type
2339
+ // for hybrid keys, only individual X25519 or MLKEM768 keys.
2340
+ ERR_clear_error ();
2341
+ EXPECT_FALSE (SSL_get_peer_tmp_key (ssl, &key));
2342
+ ErrorEquals (ERR_get_error (), ERR_LIB_SSL, SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE);
2343
+ } else {
2344
+ // Otherwise x25519 should be used
2345
+ EXPECT_TRUE (preferred_group == SSL_GROUP_X25519);
2346
+ EXPECT_TRUE (SSL_get_peer_tmp_key (ssl, &key));
2347
+ EXPECT_EQ (EVP_PKEY_id (key), EVP_PKEY_X25519);
2348
+ bssl::UniquePtr<EVP_PKEY> pkey (key);
2349
+ }
2350
+ }
2351
+
2352
+ // Check that x25519 works.
2353
+ ASSERT_TRUE (SSL_CTX_set1_groups_list (server_ctx_.get (), " x25519" ));
2332
2354
ASSERT_TRUE (Connect ());
2333
2355
for (SSL *ssl : {client_.get (), server_.get ()}) {
2334
2356
SCOPED_TRACE (SSL_is_server (ssl) ? " server" : " client" );
0 commit comments