@@ -261,10 +261,9 @@ def utc_offset(): #NOTE: ignore issues like #1647654
261261)
262262
263263
264- def test_wrap_socket (sock , * ,
265- cert_reqs = ssl .CERT_NONE , ca_certs = None ,
266- ciphers = None , certfile = None , keyfile = None ,
267- ** kwargs ):
264+ def test_wrap_socket (sock , * , cert_reqs = ssl .CERT_NONE , ca_certs = None ,
265+ ciphers = None , ciphersuites = None , min_version = None ,
266+ certfile = None , keyfile = None , ** kwargs ):
268267 if not kwargs .get ("server_side" ):
269268 kwargs ["server_hostname" ] = SIGNED_CERTFILE_HOSTNAME
270269 context = ssl .SSLContext (ssl .PROTOCOL_TLS_CLIENT )
@@ -280,6 +279,10 @@ def test_wrap_socket(sock, *,
280279 context .load_cert_chain (certfile , keyfile )
281280 if ciphers is not None :
282281 context .set_ciphers (ciphers )
282+ if ciphersuites is not None :
283+ context .set_ciphersuites (ciphersuites )
284+ if min_version is not None :
285+ context .minimum_version = min_version
283286 return context .wrap_socket (sock , ** kwargs )
284287
285288
@@ -2109,6 +2112,28 @@ def test_ciphers(self):
21092112 cert_reqs = ssl .CERT_NONE , ciphers = "^$:,;?*'dorothyx" )
21102113 s .connect (self .server_addr )
21112114
2115+ def test_ciphersuites (self ):
2116+ with test_wrap_socket (socket .socket (socket .AF_INET ),
2117+ cert_reqs = ssl .CERT_NONE ,
2118+ min_version = ssl .TLSVersion .TLSv1_3 ) as s :
2119+ s .connect (self .server_addr )
2120+ self .assertEqual (s .cipher ()[1 ], "TLSv1.3" )
2121+ with test_wrap_socket (socket .socket (socket .AF_INET ),
2122+ cert_reqs = ssl .CERT_NONE ,
2123+ ciphersuites = "TLS_AES_256_GCM_SHA384" ,
2124+ min_version = ssl .TLSVersion .TLSv1_3 ) as s :
2125+ s .connect (self .server_addr )
2126+ self .assertEqual (s .cipher (),
2127+ ("TLS_AES_256_GCM_SHA384" , "TLSv1.3" , 256 ))
2128+ # Error checking can happen at instantiation or when connecting
2129+ with self .assertRaisesRegex (ssl .SSLError ,
2130+ "No cipher suite can be selected" ):
2131+ with socket .socket (socket .AF_INET ) as sock :
2132+ s = test_wrap_socket (sock , cert_reqs = ssl .CERT_NONE ,
2133+ ciphersuites = "XXX" ,
2134+ min_version = ssl .TLSVersion .TLSv1_3 )
2135+ s .connect (self .server_addr )
2136+
21122137 def test_get_ca_certs_capath (self ):
21132138 # capath certs are loaded on request
21142139 ctx = ssl .SSLContext (ssl .PROTOCOL_TLS_CLIENT )
0 commit comments