Skip to content
Merged
16 changes: 13 additions & 3 deletions Lib/test/test_ssl.py
Original file line number Diff line number Diff line change
Expand Up @@ -4034,8 +4034,18 @@ def test_no_legacy_server_connect(self):

@unittest.skipIf(Py_DEBUG_WIN32, "Avoid mixing debug/release CRT on Windows")
def test_dh_params(self):
# Check we can get a connection with ephemeral Diffie-Hellman
# Check we can get a connection with ephemeral finite-field Diffie-
# Hellman (if supported).
client_context, server_context, hostname = testing_context()
dhe_aliases = {"ADH", "EDH", "DHE"}
def supports_dhe(ctx) -> bool:
for cipher in ctx.get_ciphers():
for alias in dhe_aliases:
if f"Kx={alias}" in cipher['description']:
return True
return False
if not (supports_dhe(client_context) and supports_dhe(server_context)):
self.skipTest("libssl doesn't support ephemeral DH")
# test scenario needs TLS <= 1.2
client_context.maximum_version = ssl.TLSVersion.TLSv1_2
server_context.load_dh_params(DHFILE)
Expand All @@ -4045,8 +4055,8 @@ def test_dh_params(self):
chatty=True, connectionchatty=True,
sni_name=hostname)
cipher = stats["cipher"][0]
parts = cipher.split("-")
if "ADH" not in parts and "EDH" not in parts and "DHE" not in parts:
parts = set(cipher.split("-"))
if not dhe_aliases.intersection(parts):
self.fail("Non-DH key exchange: " + cipher[0])

def test_ecdh_curve(self):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
``test_ssl.test_dh_params`` is skipped if the underlying TLS library does not support finite-field ephemeral Diffie-Hellman.
Loading