@@ -2328,7 +2328,29 @@ TEST_P(SSLVersionTest, PeerTmpKey) {
23282328 GTEST_SKIP ();
23292329 }
23302330
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" ));
23322354 ASSERT_TRUE (Connect ());
23332355 for (SSL *ssl : {client_.get (), server_.get ()}) {
23342356 SCOPED_TRACE (SSL_is_server (ssl) ? " server" : " client" );
0 commit comments