
    <ex                    	   d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZ	 d dlZn# e $ r dZY nw xY w e
j!        d          Z" ej#        d	          Z$d dl%Z%d d
l$m&Z&m'Z'm(Z(m)Z)  e*e d          Z+e+o
e j        dk    Z, e-e$j.                  Z/ej0        Z0e$j1        dk    Z2 ej3        d          Z4i Z5dD ]4\  Z6Z7	  e8e$e6          Z6 e8e$j&        e7          Z7n# e9$ r Y +w xY we7e5e6<   5d Z: e:d          Z; ej<        e;          Z= e:d          Z> e:d          Z? ej<        e>          Z@ ej<        e?          ZA e:d          ZB e:d          ZCdZD e:d          ZE ej<        eE          ZF e:dd          ZG e:dd          ZHdddddddd ZI e:d!          ZJ e:d"          ZKd#ZLd$d%d&d'd(d)d*dddd+
ZM e:d,          ZNd-ZO e:d.          ZPd/ZQ e:dd0          ZR e:d1          ZS e:d2          ZT e:d3          ZUd#ZVd4ZW e:d5          ZX e:d6          ZY e:d7          ZZ e:d8          Z[ e:d9          Z\ e:d:          Z] e:d;          Z^ e:d<          Z_ ej<        e_          Z` e8e$d=d           Za e8e$d>d           Zb e8e$d?d           Zc e8e$d@d           Zd e8e$dAd           ZedB Zf ef            rdC ZgndD ZgdE Zheji        dF             ZjdG ZkdH ZldI Zm e
jn        eoJ          Zpe$jq        dddddKdLZreKfdMdNdOZs G dP dQejt                  Zu G dR dSejt                  Zv G dT dUejt                  Zw G dV dWejt                  Zx G dX dYejt                  Zy G dZ d[ejt                  Zz ej{        d\           G d] d^ejt                              Z|d{d_Z}d` Z~d dalmZ  G db dcej                  Z G dd deej                  Z	 	 	 d|dhZ	 d}diZ G dj dkejt                  Z ej         ejdl          dm           G dn doejt                              Z e*e$j        dp          Z ej        edq          Z G dr dsejt                  Zdt Z G du dvejt                  Z G dw dxejt                  Zdy Zedzk    r ej                     dS dS )~    N)support)import_helper)	os_helper)socket_helper)threading_helper)warnings_helperasyncoressl)
TLSVersion_TLSContentType_TLSMessageType_TLSAlertTypegettotalrefcountwin32)   r   r   PY_SSL_DEFAULT_CIPHERS))PROTOCOL_SSLv23SSLv3)PROTOCOL_TLSv1TLSv1)PROTOCOL_TLSv1_1TLSv1_1c                  t    t          j        j        t           j                            t                    g| R  S N)ospathjoindirname__file__names    $/usr/lib/python3.11/test/test_ssl.py	data_filer#   A   s*    7<119D9999    zkeycert.pemzssl_cert.pemzssl_key.pemzkeycert.passwd.pemzssl_key.passwd.pemsomepasscapathz
4e1295a3.0z
5ed36f99.0))countryNameXY)localityNamezCastle Anthrax)organizationNamezPython Software Foundation))
commonName	localhostzAug 26 14:23:15 2028 GMTzAug 29 14:23:15 2018 GMT98A7CF88C74A32ED))DNSr/   r   issuernotAfter	notBeforeserialNumbersubjectsubjectAltNameversionzrevocation.crlzkeycert3.pemr/   )z)http://testca.pythontest.net/testca/ocsp/)z0http://testca.pythontest.net/testca/pycacert.cer)z2http://testca.pythontest.net/testca/revocation.crl)r'   ))r-   Python Software Foundation CA))r.   zour-ca-serverzOct 28 14:23:16 2037 GMTzAug 29 14:23:16 2018 GMTCB2D80995A69525C)
OCSP	caIssuerscrlDistributionPointsr3   r4   r5   r6   r7   r8   r9   zkeycert4.pemfakehostnamezkeycertecc.pemzlocalhost-eccz
ceff1710.0zallsans.pemzidnsans.pemz	nosan.pemzself-signed.pythontest.netnullcert.pembadcert.pemzXXXnonexisting.pem
badkey.pemz	nokia.pemznullbytecert.pemztalos-2019-0758.pemzffdh3072.pemOP_NO_COMPRESSIONOP_SINGLE_DH_USEOP_SINGLE_ECDH_USEOP_CIPHER_SERVER_PREFERENCEOP_ENABLE_MIDDLEBOX_COMPATc                      	 t          dd          5 } d|                                 v cd d d            S # 1 swxY w Y   d S # t          $ r Y dS w xY w)Nz/etc/os-releasezutf-8)encodingubuntuF)openreadFileNotFoundError)fs    r"   	is_ubunturO      s     #g666 	(!qvvxx'	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(   uus,   A 6A :A :A 
AAc                      | D ]A}t          |d          r/|j        t          j        j        k    r|                    d           BdS )z@"Lower security level to '1' and allow all ciphers for TLS 1.0/1minimum_versionz@SECLEVEL=1:ALLN)hasattrrQ   r
   r   r   set_ciphers)ctxsctxs     r"   seclevel_workaroundrV      sU     	3 	3C.//3#s~'=== 1222	3 	3r$   c                      d S r    )rT   s    r"   rV   rV      s    r$   c                 2   t          | t                    r1|                     d          sJ t          t          | d          } | dS | t          j        t          j        t          j        hv rdS | j        }t          |t          d          d                   S )zCheck if a TLS protocol is available and enabled

    :param protocol: enum ssl._SSLMethod member or name
    :return: bool
    	PROTOCOL_NFT)
isinstancestr
startswithgetattrr
   PROTOCOL_TLSPROTOCOL_TLS_SERVERPROTOCOL_TLS_CLIENTr!   has_tls_versionlen)protocolr!   s     r"   has_tls_protocolre      s     (C   "";/////3$//5#1  
 t=D4K 0 0 1 12333r$   c                    | dk    rdS t          | t                    rt          j        j        |          } t          t          d| j                   sdS t          r| t          j        j        k     rdS t          	                    t          j
                  }t          |d          r'|j        t          j        j        k    r| |j        k     rdS t          |d          r'|j        t          j        j        k    r| |j        k    rdS dS )z{Check if a TLS/SSL version is enabled

    :param version: TLS version name or ssl.TLSVersion member
    :return: bool
    SSLv2FHAS_rQ   maximum_versionT)r[   r\   r
   r   __members__r^   r!   IS_OPENSSL_3_0_0TLSv1_2
SSLContextra   rR   rQ   MINIMUM_SUPPORTEDri   MAXIMUM_SUPPORTED)r9   rU   s     r"   rb   rb      s    'u'3 6.,W5 3-w|--.. u Gcn&<<<u ..0
1
1CC*++3>#CCCc)))u&''s~???#%%%u4r$   c                       fd}|S )zDecorator to skip tests when a required TLS version is not available

    :param version: TLS version name or ssl.TLSVersion member
    :return:
    c                 J     t          j                    fd            }|S )Nc                  `    t                    st          j         d           | i |S )Nz is not available.)rb   unittestSkipTest)argskwfuncr9   s     r"   wrapperz8requires_tls_version.<locals>.decorator.<locals>.wrapper   sB    "7++ )'7(F(F(FGGGtT(R(((r$   )	functoolswraps)rw   rx   r9   s   ` r"   	decoratorz'requires_tls_version.<locals>.decorator   s>    				) 	) 	) 	) 	) 
		)
 r$   rX   )r9   r{   s   ` r"   requires_tls_versionr|      s$         r$   c                     d                     t          j        t          j                               }t
          j        r$t          j                            | |z              d S d S )N )	r   	tracebackformat_exceptionsysexc_infor   verbosestdoutwrite)prefix
exc_formats     r"   handle_errorr   	  sV    )4clnnEFFJ .
*,-----. .r$   c                      t           j        r)t          j                    j        dk    rt           j         S t           j         S Nr   )timedaylight	localtimetm_isdstaltzonetimezonerX   r$   r"   
utc_offsetr     s5    } ))2Q66}M>r$   )category)	cert_reqsca_certscipherscertfilekeyfilec                   |                     d          s/t          |d<   t                              t          j                  }n$t                              t          j                  }||t          j        k    rd|_        ||_        ||	                    |           |||
                    ||           ||                    |            |j        | fi |S )Nserver_sideserver_hostnameF)getSIGNED_CERTFILE_HOSTNAMEr
   rm   ra   r`   	CERT_NONEcheck_hostnameverify_modeload_verify_locationsload_cert_chainrS   wrap_socket)sockr   r   r   r   r   kwargscontexts           r"   test_wrap_socketr     s     ::m$$ :$< !..!899..!899%%%*G"'%%h///w2'222G$$$7t..v...r$   Tserver_chainc                   | t           k    rt          }n5| t          k    rt          }n"| t          k    rt
          }nt          |           t                              t          j	                  }|
                    t                     t                              t          j                  }|                    |            |r|
                    t                     |||fS )zUCreate context

    client_context, server_context, hostname = testing_context()
    )SIGNED_CERTFILEr   SIGNED_CERTFILE2SIGNED_CERTFILE2_HOSTNAME	NOSANFILENOSAN_HOSTNAME
ValueErrorr
   rm   ra   r   
SIGNING_CAr`   r   )server_certr   hostnameclient_contextserver_contexts        r"   testing_contextr   1  s    
 o%%+	(	(	(,			!	!!%%%^^C$;<<N((444^^C$;<<N"";/// 9,,Z888>833r$   c                   T   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zej        d             Zd Zd Zd Zed             Zd Zd Zd Zd Zed             Zd Zd Z ej        dej         v d          d             Z!d Z"d Z# ej        e$j%        dk    d          d             Z& ej        e$j%        dk    d          d              Z'd! Z(d" Z)d# Z*d$ Z+d% Z, ej         e-            d&          d'             Z.d( Z/ ej0        d)d*          d+             Z1d, Z2d- Z3d.S )/BasicSocketTestsc                    t           j         t           j         t           j         t           j         t           j         t           j         t           j         |                     t           j	        d           |                     t           j
        d           |                     t           j        d           |                     t           j        d           t           j         t           j         t           j         t           j         t           j         t           j         |                     t           j        t           j                   d S )NT)r
   r   CERT_OPTIONALCERT_REQUIREDrF   rD   rE   rC   assertEqualHAS_SNIHAS_ECDHHAS_TLSv1_2HAS_TLSv1_3OP_NO_SSLv2OP_NO_SSLv3OP_NO_TLSv1OP_NO_TLSv1_3OP_NO_TLSv1_1OP_NO_TLSv1_2r_   r   selfs    r"   test_constantszBasicSocketTests.test_constantsL  s    ''d+++t,,,$///$///)3+>?????r$   c                    t           j        t           j        t           j        t           j        t           j        t           j        g}|D ]j}|                     |          5  |                     t          d          5  d |_
        d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   kt          j        | t           j                   d S )N)ssl_typezimmutable type)_ssl_SSLContext
_SSLSocket	MemoryBIOCertificate
SSLSessionSSLErrorsubTestassertRaisesRegex	TypeErrorvaluer   check_disallow_instantiation)r   	ssl_typesr   s      r"   test_ssl_typeszBasicSocketTests.test_ssl_types`  s5   ONOM
	 " 	* 	*Hx00 * *++I7GHH * *%)HN* * * * * * * * * * * * * * ** * * * * * * * * * * * * * * 	,T43CDDDDDs6   B&;BB&BB&BB&&B*	-B*	c                     |                      t          d          5  t          j                    5 }t                              |           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S Nzpublic constructor)r   r   socketr
   	SSLSocketr   ss     r"   test_private_initz"BasicSocketTests.test_private_inito  s    ##I/CDD 	! 	! !Aa   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s4   A/AA/A	A/A	A//A36A3c                 H   t           j        }|                     t          |          d|j        z             |                     t          |          t          |j                             t                               |          }|                     |j        |           d S )Nz$<_SSLMethod.PROTOCOL_TLS_CLIENT: %r>)	r
   ra   r   reprr   r\   rm   assertIsrd   r   protorU   s      r"   test_str_for_enumsz#BasicSocketTests.test_str_for_enumst  s     'e&Lu{&Z[[[US%5%5666nnU##clE*****r$   c                 *   t                                           }t          j        r(t          j                            d||rdpdfz             t          j                    5  t           	                    d          \  }}d d d            n# 1 swxY w Y   | 
                    t          |          d           | 
                    ||dk               |r>t                               d          }| 
                    t          |          d           n+|                     t           j        t           j        d           |                     t          t           j        d           t          j                    5  |                     t          t           j	        d           d d d            n# 1 swxY w Y   t                               dd           t                               d	d           t                               t#          d
          d           d S )Nz
 RAND_status is %d (%s)
zsufficient randomnesszinsufficient randomness      zthis is a random stringg     R@s   this is a random bytes objects!   this is a random bytearray object)r
   RAND_statusr   r   r   r   r   r   check_warningsRAND_pseudo_bytesr   rc   
RAND_bytesassertRaisesr   r   RAND_add	bytearray)r   vdatais_cryptographics       r"   test_randomzBasicSocketTests.test_random}  s[   OO? 	<J: !A$A*A $: 9 ;; < < < +-- 	? 	?%(%:%:2%>%>"D"	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?TB''')16222 	@>>"%%DSYY++++clCNB??? 	*cnb999+-- 	E 	Ej#*?DDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	.5555t<<<YCDDdKKKKKs$   !BBB7'F**F.1F.c                    |                      t          j                            t                    t
                     |                      t          j                            t                    t                     t          j                            t                    }t          j
        r7t          j                            dt          j        |          z   dz              |                      |d         d           |                      |d         d           |                      |d         d           |                      |d         d	           d S )
N
r8   ))r1   zprojects.developer.nokia.com)r1   zprojects.forum.nokia.comr<   )zhttp://ocsp.verisign.comr=   )z0http://SVRIntl-G3-aia.verisign.com/SVRIntlG3.cerr>   )z0http://SVRIntl-G3-crl.verisign.com/SVRIntlG3.crl)r   r
   r   _test_decode_certCERTFILECERTFILE_INFOr   SIGNED_CERTFILE_INFO	NOKIACERTr   r   r   r   r   pprintpformatr   ps     r"   test_parse_certz BasicSocketTests.test_parse_cert  sE    	H&&x00	
 	
 	
 	H&&77 	
 	
 	
 H&&y11? 	>JTFN1$5$55<===+,?	 	 	
 	6$ABBB;N	P 	P 	P23N	P 	P 	P 	P 	Pr$   c                    t           j                            t                    }t          j        r7t          j                            dt          j
        |          z   dz              |                     |dddddddd	           d S )
Nr   ))r(   UK))r.   zcody-cazJun 14 18:00:58 2028 GMTzJun 18 18:00:58 2018 GMT02)r  ))r.   #codenomicon-vm-2.test.lal.cisco.com))r1   r  r   r2   )r
   r   r   TALOS_INVALID_CRLDPr   r   r   r   r   r   r   r   r   s     r"   test_parse_cert_CVE_2019_5010z.BasicSocketTests.test_parse_cert_CVE_2019_5010  s    H&&':;;? 	>JTFN1$5$55<===L67 $H#E 	
 	
 	
 	
 	
r$   c                    t           j                            t                    }t          j        r7t          j                            dt          j
        |          z   dz              d}|                     |d         |           |                     |d         |           t           j        dk    rd}nd}|                     |d         |           d S )	Nr   ))r(   US))stateOrProvinceNameOregon))r+   	Beavertonr,   ))organizationalUnitNamezPython Core Development)r.   null.python.org example.org))emailAddresszpython-dev@python.orgr7   r3   )r   	      )r1   zaltnull.python.org example.comemailz null@python.org user@example.orgURIz)http://null.python.org http://example.org
IP Addressz	192.0.2.1)r  z2001:DB8:0:0:0:0:0:1)r  r  r  r  )r  z	<invalid>r8   )r
   r   r   NULLBYTECERTr   r   r   r   r   r   r   r   _OPENSSL_API_VERSION)r   r   r7   sans       r"   test_parse_cert_CVE_2013_4238z.BasicSocketTests.test_parse_cert_CVE_2013_4238  s    H&&|44? 	>JTFN1$5$55<===A 	9w///8g...#y00;CC0C 	+,c22222r$   c                     t           j                            t                    }|                     |d         d           d S )Nr8   )
)r1   allsans	othername<unsupported>r!  )r  zuser@example.org)r1   zwww.example.org)DirName)r'   r*   r,   ))r.   zdirname example)r  zhttps://www.python.org/r  	127.0.0.1)r  z0:0:0:0:0:0:0:1)zRegistered IDz	1.2.3.4.5)r
   r   r   
ALLSANFILEr   r   s     r"   test_parse_all_sansz$BasicSocketTests.test_parse_all_sans  sF    H&&z22+,	
 	
 	
 	
 	
r$   c                 B   t          t          d          5 }|                                }d d d            n# 1 swxY w Y   t                              |          }t                              |          }t                              |          }|                     ||           |                    t          j        dz             s| 	                    d|z             |
                    dt          j        z   dz             s| 	                    d|z             d S d S )Nrr   z-DER-to-PEM didn't include correct header:
%r
z-DER-to-PEM didn't include correct footer:
%r
)rK   CAFILE_CACERTrL   r
   PEM_cert_to_DER_certDER_cert_to_PEM_certr   r]   
PEM_HEADERfailendswith
PEM_FOOTER)r   rN   pemd1p2d2s         r"   test_DER_to_PEMz BasicSocketTests.test_DER_to_PEM  s?   -%% 	&&((C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	%%c**%%b))%%b))R   }}S^d233 	NIIG"LMMM{{4#.04788 	NIIG"LMMMMM	N 	Ns   7;;c                    t           j        }t           j        }t           j        }|                     |t
                     |                     |t                     |                     |t                     |                     |d           | 	                    |d           |\  }}}}}|                     |d           | 	                    |d           |                     |d           | 	                    |d           |                     |d           | 	                    |d           |                     |d           | 
                    |d           |                     |d           | 
                    |d           d	|d
}	|dk    rd|d
d|d
d|d
}
nd|d
d|d
d|d
}
|                     |                    |
|	f          ||t          |          f           d S )Ni i   @r      r      ?      z	LibreSSL dr   zOpenSSL .)r
   OPENSSL_VERSION_NUMBEROPENSSL_VERSION_INFOOPENSSL_VERSIONassertIsInstanceinttupler\   assertGreaterEqual
assertLessassertLessEqual
assertTruer]   hex)r   ntr   majorminorfixpatchstatuslibressl_veropenssl_vers              r"   test_openssl_versionz%BasicSocketTests.test_openssl_version  s   &$a%%%a'''a%%% 	:...:&&&+,(uc5&q)))q!!!q)))s###Q'''S!!!q)))UB'''***VR(((,5,,,A::BUBBBuBBBBBBKK@U@@@u@@@@@@KLL+|4553q66N	
 	
 	
 	
 	
r$   c                 ,   t          j         t           j                  }t          |          }t          j        |          }t          j        dt          f          5  ~d d d            n# 1 swxY w Y   |                      |            d            d S )N )	r   AF_INETr   weakrefrefr   r   ResourceWarningr   )r   r   sswrs       r"   test_refcyclezBasicSocketTests.test_refcycle*  s     M&.))a  [__+R,ABB 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	t$$$$$s   A++A/2A/c           	         t          j         t           j                  }t          |          5 }|                     t          |j        d           |                     t          |j        t          d                     |                     t          |j        d           |                     t          |j	        t          d          d           |                     t          |j
        d           |                     t          |j        dd           |                     t          |j                   |                     t          |j        dgddd           |                     t          |j        d           |                     t          |j        t          d          g           d d d            d S # 1 swxY w Y   d S )Nr      x)z0.0.0.0r   rX   r   d   )r   rU  r   r   OSErrorrecv	recv_intor   recvfromrecvfrom_intosendsendtoNotImplementedErrordupsendmsgrecvmsgrecvmsg_intor   r   rY  s      r"   test_wrapped_unconnectedz)BasicSocketTests.test_wrapped_unconnected5  s    M&.))a   	0Bgrw222gr|Yt__EEEgr{A666gr'74!LLLgrw555gry$GGG126:::12:#fb!^= = =12:sCCC12?(~~.0 0 0	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   E8F33F7:F7c                    dD ]}t          j         t           j                  }|                    |           t          |          5 }|                     ||                                           d d d            n# 1 swxY w Y   d S )N)Ng              @)r   rU  
settimeoutr   r   
gettimeout)r   timeoutr   rY  s       r"   test_timeoutzBasicSocketTests.test_timeoutG  s     ( 	; 	;Gfn--ALL!!!!!$$ ;  "--//:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;	; 	;s   )A<<B 	B 	c                    t           j        t           j        t           j        t           j        g}t           j        t           j        t           j        t           j        g}t           j	        j
        t           j	        j        t           j	        j        g}|D ]}|                     |          5  t                               t           j                  }|                     t"                    5 }|xj        |z  c_        d d d            n# 1 swxY w Y   |                     dt)          |j                             d d d            n# 1 swxY w Y   |D ]}t-          |          s|                     |          5  |                     t"                    5 }t                               |           d d d            n# 1 swxY w Y   |                     d|j         dt)          |j                             d d d            n# 1 swxY w Y   |D ]}t1          |          s|                     |          5  t                               t           j                  }|                     t"                    5 }||_        d d d            n# 1 swxY w Y   |j        j        d|j        }	|                     d|	 dt)          |j                             d d d            n# 1 swxY w Y   d S )N)optionz4ssl.OP_NO_SSL*/ssl.OP_NO_TLS* options are deprecated)rd   zssl.z is deprecated)r9   r=  )r
   r   r   r   r   r   r   PROTOCOL_TLSv1_2r_   r   r   r   r   r   rm   ra   assertWarnsDeprecationWarningoptionsr   r\   warningre   r!   rb   rQ   	__class____name__)
r   rx  	protocolsversionsrt  rU   cmrd   r9   version_texts
             r"   test_openssl111_deprecationsz-BasicSocketTests.test_openssl111_deprecationsP  s.   O	
   	
	 N N N"
  	 	FV,,  nnS%<==%%&899 *RKK6)KK* * * * * * * * * * * * * * *  J
OO  	               " 		 		H#H-- x00  %%&899 -RNN8,,,- - - - - - - - - - - - - - -  88=888
OO                   	 	G"7++ g..  nnS%<==%%&899 2R*1C'2 2 2 2 2 2 2 2 2 2 2 2 2 2 2*1*;*D*D*DgllS  7<777
OO                	 	s   )?E(D9ED		ED	+EE	E	:HF<0H<G  HG 4HH	H	:?K&9JK&JK&JAK&&K*	-K*	c                    t          j                     }|                     t          dt          j        |t
                     |                     t          dt          j        |d           |                     t          dt          j        |dd           t                              |dt
                    5 }|                     t          d|j        t          d	f           d d d            n# 1 swxY w Y   |                     t                    5 }t          j                     5 }t                              |t          
           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     |j        j        t          j                   |                     t                    5 }t          j                     5 }t                              |t
          t                     d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     |j        j        t          j                   |                     t                    5 }t          j                     5 }t                              |t          t                     d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     |j        j        t          j                   d S )Nzcertfile must be specifiedr   z5certfile must be specified for server-side operationsTr   rT  r   r   z!can't connect in server-side modei  r   r   r   )r   r   r   r
   r   r   connectHOSTr   r_  NONEXISTINGCERTr   	exceptionerrnoENOENT)r   r   r   r~  s       r"   test_errors_sslwrapz$BasicSocketTests.test_errors_sslwrap  s   }z4x 	 	A 	A 	A 	zO4 	 	A 	A 	A 	zO$D2 	 	O 	O 	O __Tth_GG 	>1"":/R%&Yt> > >	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> w'' 	@2 @D???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	+U\:::w'' 	@2 @D%   @ @ @@ @ @ @ @ @ @ @ @ @ @ @ @ @ @	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	+U\:::w'' 	G2 GD,o   G G GG G G G G G G G G G G G G G G	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	+U\:::::s   7*C--C14C1E+&"EE+E	E+E	E++E/2E/:H(H6HH	H	H	
HH H(K<(J0$K0J4	4K7J4	8KKKc                    t           j                            t           j                            t                    pt           j        |          }t          j                    }|                     |j                   | 	                    t          j                  5  t          ||           ddd           dS # 1 swxY w Y   dS )z;Check that trying to use the given client certificate failsr  N)r   r   r   r   r   curdirr   
addCleanupcloser   r
   r   r   r   r   r   s      r"   bad_cert_testzBasicSocketTests.bad_cert_test  s    7<< 9 9 FRY#+- -}
###s|,, 	0 	0T&.0 0 0 0	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   B::B>B>c                 0    |                      d           dS )z Wrapping with an empty cert filer@   Nr  r   s    r"   test_empty_certz BasicSocketTests.test_empty_cert  s    >*****r$   c                 0    |                      d           dS )z:Wrapping with a badly formatted certificate (syntax error)rA   Nr  r   s    r"   test_malformed_certz$BasicSocketTests.test_malformed_cert  s    =)))))r$   c                 0    |                      d           dS )z2Wrapping with a badly formatted key (syntax error)rB   Nr  r   s    r"   test_malformed_keyz#BasicSocketTests.test_malformed_key  s    <(((((r$   c                 t    d } fd}ddi} ||d            ||d            ||d            ||d            ||d	            ||d
           ddi} ||d            ||d            ||d            ||d            ||d           ddi} ||d            ||d            ||d            ||d            ||d           ddi} ||d            ||d	            ||d           ddi} ||d            ||d            ||d            ||d           ddi} ||d            ||d            ||d           d                     d                              d          }dd |fffi} |||           dd!i} |||           dd"i} |||           d#                     d                              d          }dd |fffi} ||d$                     d                              d                      ||d%                     d                              d                      ||d&                     d                              d                      ||d'                     d                              d                     d(d)d*d+} ||d,            ||d-            ||d.            ||d/           d0d1d2} ||d3            ||d4            ||d5           dd6d7} ||d8            ||d9            ||d:            ||d;            ||d<            ||d=            ||d>           t          j        rMdd?d7} ||d@            ||dA            ||dB            ||dC            ||dD            ||d>           d0dEd2} ||d3           dFdGdHd+} ||d3           dFdEdHd+} ||dI                                t
          t          j        d d                                t
          t          j        i d           ddJi}                     t          j	        dK          5  t                              |dL           d d d            n# 1 swxY w Y   ddMi}                     t          j	        dN          5  t                              |dO           d d d            n# 1 swxY w Y   ddPi}                     t          j	        dQ          5  t                              |dR           d d d            n# 1 swxY w Y   ddSi}                     t          j	        dT          5  t                              |dU           d d d            n# 1 swxY w Y   ddVi}                     t          j	        dW          5  t                              |dX           d d d            n# 1 swxY w Y   dYD ]N}                     t
                    5  t          
                    |           d d d            n# 1 swxY w Y   OdZD ]/}                     t          
                    |                     0t          j        r2d[D ]1}                     t          
                    |                     0d S d S )\Nc                 <    t                               | |           d S r   )r
   match_hostname)certr   s     r"   okz0BasicSocketTests.test_match_hostname.<locals>.ok  s    tX.....r$   c                 `                         t          j        t          j        | |           d S r   )r   r
   CertificateErrorr  )r  r   r   s     r"   r/  z2BasicSocketTests.test_match_hostname.<locals>.fail  s9    c2!0$B B B B Br$   r7   )))r.   example.comr  zExAmple.cOmzwww.example.comz.example.comzexample.orgexampleXcom)))r.   z*.a.comz	foo.a.comzbar.foo.a.comza.comzXa.comz.a.com)))r.   zf*.comzfoo.comzf.comzbar.comzbar.foo.com)r  r  znull.python.org)))r.   z	*.*.a.com)))r.   za.*.comz	a.foo.comza..comu   püthon.python.orgidnaasciir.   )))r.   zx*.python.org)))r.   zxn--p*.python.orgu   www*.pythön.orgu   www.pythön.orgu   www1.pythön.orgu   ftp.pythön.orgu   pythön.orgzJun 26 21:41:46 2011 GMT)))r.   linuxfrz.org))r1   linuxfr.org)r1   linuxfr.comr!  )r4   r7   r8   r  r  r#  r  zDec 18 23:59:59 2011 GMT)r	  )r  
California)r+   zMountain View)r-   z
Google Inc)r.   mail.google.com)r4   r7   r  z	gmail.comr  )r1   r  )r  10.11.12.13)r  14.15.16.17r%  )r7   r8   r  r  z127.1z14.15.16.17 z14.15.16.17 extra dataz14.15.16.18zexample.net)r  )r  z2001:0:0:0:0:0:0:CAFE
)r  z2003:0:0:0:0:0:0:BABA
z
2001::cafez
2003::babaz2003::baba z2003::baba extra dataz
2003::bebe)r	  r  r  r  zDec 18 23:59:59 2099 GMT)r	  r  r  r  ))r"  blablaz
google.com)))r.   za*b.example.comz5partial wildcards in leftmost label are not supportedzaxxb.example.com)))r.   zwww.*.example.comz2wildcard can only be present in the leftmost labelzwww.sub.example.com)))r.   za*b*.example.comztoo many wildcardszaxxbxxc.example.com)))r.   *z7sole wildcard without additional labels are not supporthost)))r.   z*.comz%hostname 'com' doesn't match '\*.com'com)1rT  z1.2.3z	256.0.0.1z127.0.0.1/24)r&  z192.168.0.1)z::1z2001:db8:85a3::8a2e:370:7334)encodedecoder   IPV6_ENABLEDr   r   r
   r  r   r  _inet_patonrG  )r   r  r/  r  r  invalidipaddrs   `      r"   test_match_hostnamez$BasicSocketTests.test_match_hostname  s
   	/ 	/ 	/	B 	B 	B 	B 	B >?
4
4T$%%%T>"""T=!!!T=!!!:;
4T?###T7T8T8 9:T9T7T9T;T=!!!  D E
41222T=!!!T$%%% <=T?###T7T8T8:;T;T8T7 $**62299'BBlD1356
4@AT4DET4 "((0077@@lD1356T$++F33::7CCDDDT%,,V44;;GDDEEET$++F33::7CCDDDT=''//66w??@@@ 7?#CD D
 	4
4T?###T>""" 7BC C 	4"###T;T<    ?#@A A
 	4
4T7T>"""T+,,,T=!!!T=!!! % 	&B'CD DD
 Bt\"""Bt\"""D}%%%D.///D|$$$D}%%%
 7CD D
 	T$%%% 7B #>? ? 	4"### 7C #=> > 	T<    	*c&8$NNN*c&8"mLLL BC##$GI I 	9 	9 t%7888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9
 DE##$DF F 	< 	< t%:;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<
 CD##$$& & 	< 	< t%:;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<
 45##$IK K 	- 	- tV,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-
 89##$8: : 	, 	, tU+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, G 	) 	)G"":.. ) )((() ) ) ) ) ) ) ) ) ) ) ) ) ) )2 	5 	5FOOCOOF334444% 	9A 9 9 7 78888	9 	99 9sl   &RRR=S%%S),S)T<<U U +VVVW**W.1W.X::X>	X>	c                     t                               t           j                  }t          j                    5 }|                     t
          |j        |dd           d d d            d S # 1 swxY w Y   d S )NTzsome.hostnamer   )r
   rm   r`   r   r   r   r   )r   rU   r   s      r"   test_server_sidez!BasicSocketTests.test_server_side  s    nnS455]__ 	?j#/4.=  ? ? ?	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s   %A**A.1A.c                    t          j        d          }t          j         t           j                  }|                    |                                           t          |d          5 }|                     t                    5  |                    d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |	                                 d S )Nr&  r   Fdo_handshake_on_connectzunknown-type)
r   create_serverrU  r  getsocknamer   r   r   get_channel_bindingr  )r   r   crY  s       r"   test_unknown_channel_bindingz-BasicSocketTests.test_unknown_channel_binding  s3    !122M&.))			!--//"""a??? 	72"":.. 7 7&&~6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	
					s6   +B?B(B?(B,	,B?/B,	0B??CC
tls-unique*'tls-unique' channel binding not availablec                    t          j         t           j                  }t          |          5 }|                     |                    d                     d d d            n# 1 swxY w Y   t          j         t           j                  }t          |dt
                    5 }|                     |                    d                     d d d            d S # 1 swxY w Y   d S )Nr  Tr  )r   rU  r   assertIsNoner  r   rk  s      r"   test_tls_unique_channel_bindingz0BasicSocketTests.test_tls_unique_channel_binding  se    M&.))a   	DBb44\BBCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D M&.))aTHEEE 	Db44\BBCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds#   )A##A'*A'#)CC Cc                 n   t          t          j        t          j                            }t          |          }|                     t
                    5 }d }t          j                     d d d            n# 1 swxY w Y   |                     |t          |j
        j        d                              d S r   )r   r   rU  r   rv  rX  r   
gc_collectassertInr\   ry  ru   )r   rY  r*  r~  s       r"   test_dealloc_warnz"BasicSocketTests.test_dealloc_warn  s    fmFN;;<<HHo.. 	!"B   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	aRZ_Q/0011111s   A77A;>A;c                    t                                           }|                     t          |          d           |                     |t           j                   t          j                    5 }t          |d<   t          |d<   t                                           }|                     |j
        t                     |                     |j        t                     d d d            d S # 1 swxY w Y   d S )N   SSL_CERT_DIRSSL_CERT_FILE)r
   get_default_verify_pathsr   rc   rA  DefaultVerifyPathsr   EnvironmentVarGuardCAPATHr   cafiler&   )r   pathsenvs      r"   test_get_default_verify_pathsz.BasicSocketTests.test_get_default_verify_paths  s   ,,..UQ'''eS%;<<<*,, 	3"(C#+C 0022EU\8444U\6222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s   0A.C++C/2C/r   Windows specificc                    |                      t                              d                     |                      t                              d                     |                     t          t          j                   |                     t
          t          j        d           t                      }dD ]}t                              |          }|                     |t                     |D ]}|                     |t                     | 
                    t          |          d           |\  }}}|                     |t                     |                     |ddh           |                     |t          t          t          f           t!          |t          t          f          r|                    |           Ӑd}|                     ||           d S )	NCAROOTrT  )r  r  r   x509_asn
pkcs_7_asn1.3.6.1.5.5.7.3.1)rG  r
   enum_certificatesr   r   WindowsErrorsetrA  listrC  r   rc   bytesr  	frozensetboolr[   update)	r   
trust_oids	storenamestoreelementr  enctrust
serverAuths	            r"   test_enum_certificatesz'BasicSocketTests.test_enum_certificates  s   --d33444--f55666)S%:;;;,(=rBBBUU
' 	- 	-I)))44E!!%...  - -%%gu555  Wq111#* c5%%dE222cJ#=>>>%%eid-CDDDei%566 -%%e,,,- )
j*-----r$   c                 d   |                      t                              d                     |                     t          t          j                   |                     t
          t          j        d           t                              d          }|                     |t                     |D ]}|                     |t                     | 	                    t          |          d           |                     |d         t                     |                     |d         ddh           d S )Nr  rT     r   r   r  r  )rG  r
   	enum_crlsr   r   r  rA  r  rC  r   rc   r  r  )r   crlsr  s      r"   test_enum_crlszBasicSocketTests.test_enum_crls  s   d++,,,)S]333,r:::}}T""dD))) 	B 	BG!!'5111S\\1---!!'!*e444MM'!*z<&@AAAA		B 	Br$   c                 0   d}t                               d          }|                     ||           |                     |j        d           |                     |j        d           |                     |j        d           |                     |j        d           |                     |t           j                   |                     t          t           j        d           t           j        
                    d          }|                     ||           |                     |t           j                   |                     t          t           j        j
        d           |                     t          d          5  t           j        
                    d           d d d            n# 1 swxY w Y   t          d	          D ]}	 t           j        
                    |          }|                     |j        t                     |                     |j        t                     |                     |j        t                     |                     |j        t          t          d           f           # t          $ r Y w xY wt           j                            d          }|                     ||           |                     |t           j                   |                     t           j                            d          |           |                     t           j                            d          |           |                     t          d
          5  t           j                            d           d d d            d S # 1 swxY w Y   d S )N)   r  TLS Web Server Authenticationr  r  r  r  r  zunknown NID 100000i   zunknown object 'serverauth'
serverauth)r
   _ASN1Objectr   nid	shortnamelongnameoidrA  r   r   fromnidr   rangerB  r\   typefromname)r   expectedvaliobjs        r"   test_asn1objectz BasicSocketTests.test_asn1object  s   ) oo122h'''#&&&555'FGGG"5666c3?333*co|DDDo%%c**h'''c3?333*co&=rBBB##J0DEE 	, 	,O##F+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,t 		B 		BABo--a00 %%cgs333%%cmS999%%clC888%%cgT$ZZ/@AAAA     o&&'FGGh'''c3?33311,??JJJ112EFF!	# 	# 	###J0MNN 	3 	3O$$\222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s6     F,,F03F0	I88
JJ NNNc                    t                               d          }|                     t           j        j        t           j                   |                     t           j        j        |           |                     t           j        j        j        d           |                     t           j        j        j        d           |                     t           j        j        j        d           t                               d          }|                     t           j        j	        t           j                   |                     t           j        j	        |           |                     t           j        j	        j        d           |                     t           j        j	        j        d           |                     t           j        j	        j        d           d S )Nr  r  r  z1.3.6.1.5.5.7.3.2   
clientAuth)
r
   r  rA  PurposeSERVER_AUTHr   r  r  r  CLIENT_AUTH)r   r  s     r"   test_purpose_enumz"BasicSocketTests.test_purpose_enum   sd   oo122ck5sGGG0#66604c:::0:LIII041	3 	3 	3 oo122ck5sGGG0#66604c:::0:LIII041	3 	3 	3 	3 	3r$   c                    t          j         t           j        t           j                  }|                     |j                   |                     t                    5 }t          |t          j	                   d d d            n# 1 swxY w Y   | 
                    t          |j                  d           t                              t          j                  }|                     t                    5 }|                    |           d d d            n# 1 swxY w Y   | 
                    t          |j                  d           d S )Nr   z!only stream sockets are supported)r   rU  
SOCK_DGRAMr  r  r   rf  r   r
   r   r   r\   r  rm   ra   r   )r   r   cxrU   s       r"   test_unsupported_dtlsz&BasicSocketTests.test_unsupported_dtls  s}   M&.&*;<<   233 	9rQ#-8888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9R\**,OPPPnnS455233 	rOOA	 	 	 	 	 	 	 	 	 	 	 	 	 	 	R\**,OPPPPPs$   BB
B
7DD Dc                 b    |                      t                              |          |           d S r   )r   r
   cert_time_to_seconds)r   
timestring	timestamps      r"   cert_time_okzBasicSocketTests.cert_time_ok  s,    11*==yIIIIIr$   c                     |                      t                    5  t                              |           d d d            d S # 1 swxY w Y   d S r   )r   r   r
   r  )r   r  s     r"   cert_time_failzBasicSocketTests.cert_time_fail  s    z** 	1 	1$$Z000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   AA
Az)local time needs to be different from UTCc                 ^    |                      dd           |                      dd           d S )NzMay  9 00:00:00 2007 GMTg   CAJan  5 09:34:43 2018 GMT  ѓA)r  r   s    r"   "test_cert_time_to_seconds_timezonez3BasicSocketTests.test_cert_time_to_seconds_timezone#  s8    
 	4lCCC4lCCCCCr$   c                 L   d}d}|                      ||           |                     t                              |          |           |                      d|           |                      d|           |                     d           |                     d           |                     d           |                     d	           |                     d
           |                     d           |                     d           d}|                      d|           |                      d|           |                      dd           |                      dd           |                      dd           |                     d           |                      dd           d S )Nr#  r$  )	cert_timezJan 05 09:34:43 2018 GMTzJaN  5 09:34:43 2018 GmTzJan  5 09:34 2018 GMTzJan  5 09:34:43 2018zJan  5 09:34:43 2018 UTCzJan 35 09:34:43 2018 GMTzJon  5 09:34:43 2018 GMTzJan  5 24:00:00 2018 GMTzJan  5 09:60:43 2018 GMTg   WAzDec 31 23:59:60 2008 GMTzJan  1 00:00:00 2009 GMTzJan  5 09:34:59 2018 GMTiFOZzJan  5 09:34:60 2018 GMTiFOZzJan  5 09:34:61 2018 GMTiFOZzJan  5 09:34:62 2018 GMTzDec 31 23:59:59 9999 GMTg  MB)r  r   r
   r  r!  )r   r  ts
newyear_tss       r"   test_cert_time_to_secondsz*BasicSocketTests.test_cert_time_to_seconds+  s   /
*b)))11J1GGLLL4b9994b9993444233367776777677767776777!
4jAAA4jAAA4jAAA4jAAA4jAAA6777 	4nEEEEEr$   LC_ALLrT  c                     d } |                                             dk    r|                     d           |                     dd           |                      |            dz              d S )Nc                  ,    t          j        dd          S )Nz%b)	r   r  r   r8     r  r   r   r   )r   strftimerX   r$   r"   local_february_namezNBasicSocketTests.test_cert_time_to_seconds_locale.<locals>.local_february_nameR  s    ='BCCCr$   febz>locale-specific month name needs to be different from C localezFeb  9 00:00:00 2007 GMTg   `rAz  9 00:00:00 2007 GMT)lowerskipTestr  r!  )r   r0  s     r"    test_cert_time_to_seconds_localez1BasicSocketTests.test_cert_time_to_seconds_localeN  s    	D 	D 	D   &&((E11MM 4 5 5 5 	4lCCC//114KKLLLLLr$   c                     t          j         t           j                  }|                     |j                   t	          j        |          }t          t          j         t           j                  t          j                  }|                     |j                   |	                    t          |f          }t          j        t          j        t          j        t          j        f}|                     ||           d S )Nr  )r   rU  r  r  r   	bind_portr   r
   r   
connect_exr  r  ECONNREFUSEDEHOSTUNREACH	ETIMEDOUTEWOULDBLOCKr  )r   serverportr   rcerrorss         r"   test_connect_ex_errorz&BasicSocketTests.test_connect_ex_error]  s    v~..%%%&v..V]6>::&)&79 9 9   \\4,''  2EO
 	b&!!!!!r$   c                    t                      \  }}}t          |          }|5  |                    t          j                    |          5 }|                    t
          |j        f           |                     |                    d          d           |                     |	                    d          d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   r  r   r$   )
r   ThreadedEchoServerr   r   r  r  r=  r   r`  rd  r   r   r   r   r<  r   s         r"   test_read_write_zeroz%BasicSocketTests.test_read_write_zerom  sb   3B3D3D0#N;;; 	1 	1++FMOO<D , F F 1IJ		4-...  C000  a000	1 1 1 1 1 1 1 1 1 1 1 1 1 1 1	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s6   )C&A4CC&C	C&C	C&&C*-C*N)4r{  
__module____qualname__r   r   r   r   r   r   r  r  r(  r6  rR  r   cpython_onlyr[  rl  rr  r  ignore_deprecationr  r  r  r  r  r  r  r  rs   
skipUnlessr
   CHANNEL_BINDING_TYPESr  r  r  r   platformr  r  r  r  r  r  r!  r   r%  r*  run_with_localer4  r@  rE  rX   r$   r"   r   r   J  sf       @ @ @(E E E! ! !
+ + +L L L4P P P:
 
 
*3 3 3:
 
 
*
N 
N 
N!
 !
 !
F % % %0 0 0$; ; ;3 3 3j ; ; ;:0 0 0+ + +* * *) ) ) D9 D9 D9L? ? ?   X)BBEG GD DG GD2 2 2
3 
3 
3 X02DEE. . FE.0 X02DEEB B FEB%3 %3 %3N3 3 3"	Q 	Q 	QJ J J1 1 1 XDF FD DF FD!F !F !FF WXr**M M +*M" " " 	1 	1 	1 	1 	1r$   r   c                      e Zd Zd Zd Z ej        edk    d          d             Zd Z	d Z
d Zd	 Zed
             Z ej         eej        d          d          d             Zd Zd Zd Zd Z ej        ed          d             Zd Zd Z ej        ej        d          d             Zd Zd Zd Z d Z!d Z" ej        e#j$        dk    d          d             Z% ej        e#j$        dk    d            ej         ee#d!          d"          d#                         Z&d$ Z'd% Z(d& Z)d' Z*d( Z+d) Z,d* Z-d+S ),ContextTestsc                 b   t           D ]q}t          |          r`t          j                    5  t                              |          }d d d            n# 1 swxY w Y   |                     |j        |           rt          j                    5  t                                          }d d d            n# 1 swxY w Y   |                     |j        t          j                   | 	                    t          t          j        d           | 	                    t          t          j        d           d S )Nr  *   )	PROTOCOLSre   r   r   r
   rm   r   rd   r_   r   r   )r   rd   rU   s      r"   test_constructorzContextTests.test_constructor{  sw   ! 	9 	9H)) 9$355 3 3..22C3 3 3 3 3 3 3 3 3 3 3 3 3 3 3  x888+-- 	# 	#..""C	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s'7888*cnb999*cnb99999s#   AA	A	B33B7:B7c                 >   t                               t           j                  }|                    d           |                    d           |                     t           j        d          5  |                    d           d d d            d S # 1 swxY w Y   d S )NALLDEFAULTNo cipher can be selected^$:,;?*'dorothyx)r
   rm   ra   rS   r   r   r   rU   s     r"   test_cipherszContextTests.test_ciphers  s    nnS455	"""##CL2MNN 	0 	0OO.///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   /BBBr   z+Test applies only to Python default ciphersc                 l   t                               t           j                  }|                                }|D ]x}|d         }|                     d|           |                     d|           |                     d|           |                     d|           |                     d|           yd S )Nr!   PSKSRPMD5RC43DES)r
   rm   ra   get_ciphersassertNotIn)r   rU   r   suiter!   s        r"   test_python_ciphersz ContextTests.test_python_ciphers  s     nnS455//## 	+ 	+E=DUD)))UD)))UD)))UD)))VT****	+ 	+r$   c           
         t                               t           j                  }|                    d           t	          d |                                D                       }h d}|                    |          }|                     t          |          ddt          |           dt          |                      d S )NAESGCMc              3   &   K   | ]}|d          V  dS )r!   NrX   ).0r<  s     r"   	<genexpr>z0ContextTests.test_get_ciphers.<locals>.<genexpr>  s&      99!AfI999999r$   >   AES128-GCM-SHA256AES256-GCM-SHA384DHE-RSA-AES128-GCM-SHA256DHE-RSA-AES256-GCM-SHA384ECDHE-RSA-AES128-GCM-SHA256ECDHE-RSA-AES256-GCM-SHA384ECDHE-ECDSA-AES128-GCM-SHA256ECDHE-ECDSA-AES256-GCM-SHA384r  z
got: z
expected: )
r
   rm   ra   rS   r  ra  intersectionrD  rc   sorted)r   rU   namesr
  rr  s        r"   test_get_cipherszContextTests.test_get_ciphers  s    nnS455!!!99s'8'899999	
 	
 	
 ))(33q"YF5MM"Y"YvhGWGW"Y"Y	
 	
 	
 	
 	
r$   c                    t                               t           j                  }t           j        t           j        z  t           j        z  }|t          t          z  t          z  t          z  t          z  z  }|                     ||j                   t          j                    5  |xj        t           j        z  c_        d d d            n# 1 swxY w Y   |                     |t           j        z  |j                   t          j                    5  |j        t           j         z  |_        d d d            n# 1 swxY w Y   |                     ||j                   d|_        |                     d|j        t           j         z             d S r   )r
   rm   ra   OP_ALLr   r   rC   rF   rD   rE   rG   r   rx  r   r   r   )r   rU   defaults      r"   test_optionszContextTests.test_options  s   nnS455:/#/A%(CC$%'9:./ 	0 	#+...+-- 	+ 	+KK3?*KK	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+3?2CK@@@+-- 	; 	;;#/)99CK	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;#+...CK3?*::;;;;;s$   #C

CCD77D;>D;c                    t          j                    5  t                              t          j                  }d d d            n# 1 swxY w Y   |                     |j        t          j                   t          j        |_        |                     |j        t          j                   t          j	        |_        |                     |j        t          j	                   t          j        |_        |                     |j        t          j                   | 
                    t                    5  d |_        d d d            n# 1 swxY w Y   | 
                    t                    5  d|_        d d d            n# 1 swxY w Y   t                              t          j                  }|                     |j        t          j                   |                     |j                   t                              t          j                  }|                     |j        t          j	                   |                     |j                   d S NrQ  )r   r   r
   rm   r_   r   r   r   r   r   r   r   r   r`   assertFalser   ra   rG  rY  s     r"   test_verify_mode_protocolz&ContextTests.test_verify_mode_protocol  st   +-- 	3 	3..!122C	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	#-888+#*;<<<+#*;<<<-#-888y)) 	# 	#"CO	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#z** 	! 	! CO	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! nnS455#-888+,,,nnS455#*;<<<*+++++s5   %AA	A	1EE	E	*E>>FFc                    t                               t           j                  }|                     |j                   t           j        red|_        |                     |j                   d|_        |                     |j                   d|_        |                     |j                   d S |                     t                    5  d|_        d d d            d S # 1 swxY w Y   d S NTF)	r
   rm   ra   rG  hostname_checks_common_nameHAS_NEVER_CHECK_COMMON_NAMEr|  r   AttributeErrorrY  s     r"    test_hostname_checks_common_namez-ContextTests.test_hostname_checks_common_name  s   nnS4557888* 		7.2C+OOC;<<<.3C+S<===.2C+OOC;<<<<<"">22 7 726/7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s   
CC#&C#c                    t                               t           j                  }t           j        j        t           j        j        t           j        j        h}t           j        j        t           j        j        h}| 	                    |j
        |           | 	                    |j        |           t           j        j        |_
        t           j        j        |_        |                     |j
        t           j        j                   |                     |j        t           j        j                   t           j        j        |_
        t           j        j        |_        |                     |j
        t           j        j                   |                     |j        t           j        j                   t           j        j        |_        |                     |j        t           j        j                   t           j        j        |_        | 	                    |j        t           j        j        t           j        j        t           j        j        h           t           j        j        |_
        | 	                    |j
        t           j        j        t           j        j        h           |                     t                     5  d|_
        d d d            n# 1 swxY w Y   t#          t           j                  rt                               t           j                  }| 	                    |j
        |           |                     |j        t           j        j                   |                     t                     5  t           j        j        |_
        d d d            n# 1 swxY w Y   |                     t                     5  t           j        j        |_        d d d            d S # 1 swxY w Y   d S d S r{  )r
   rm   r`   r   rn   r   rl   ro   TLSv1_3r  rQ   ri   r   r   r   r   r   re   r   )r   rU   minimum_rangemaximum_ranges       r"   test_min_max_versionz!ContextTests.test_min_max_version  s   nnS455
 N,N N"
 N,N"	
 		
 	
 	
 		
 	
 	
 "n4!n4!7	
 	
 	
 	!7	
 	
 	
 "n>!n2!A	
 	
 	
 	!5	
 	
 	
 "n>!A	
 	
 	
 "n>^!3>#93>;OP	
 	
 	

 "n>^#S^%;<	
 	
 	

 z** 	% 	%"$C	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% C011 	;..!566CMM#]   #S^%E   "":.. G G&)n&F#G G G G G G G G G G G G G G G"":.. ; ;&)n&:#; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;	; 	;s6   ;KKK6NN N>O""O&)O&security_levelzrequires OpenSSL >= 1.1.0c                     t                               t           j                  }h d}|                     |j        |           d S )N>   r   r   r  r   r8  r.  )r
   rm   ra   r  r  )r   rU   security_level_ranges      r"   test_security_levelz ContextTests.test_security_level6  sJ    
 nnS455 
  
  
 	c(*>?????r$   c                    t                               t           j                  }t          t           dd          }|                     |j        t           j        |z             t           j        |_        |                     |j        t           j                   t           j        |_        |                     |j        t           j                   t           j        |_        |                     |j        t           j                   t           j	        |_        |                     |j        t           j	                   t           j        t           j
        z  |_        |                     |j        t           j        t           j
        z             |                     t                    5  d |_        d d d            d S # 1 swxY w Y   d S )NVERIFY_X509_TRUSTED_FIRSTr   )r
   rm   r`   r^   r   verify_flagsVERIFY_DEFAULTVERIFY_CRL_CHECK_LEAFVERIFY_CRL_CHECK_CHAINVERIFY_ALLOW_PROXY_CERTSVERIFY_X509_STRICTr   r   )r   rU   tfs      r"   test_verify_flagszContextTests.test_verify_flagsI  s   nnS455S5q99)3+=+BCCC4)3+DEEE5)3+EFFF-)3+=>>>7)3+GHHH4s7MM)2S5KK	M 	M 	My)) 	$ 	$#C	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s   %F::F>F>c                    t                               t           j                  }|                    t          d            |                    t          t                     |                     t          |j        t                     |                     t                    5 }|                    t                     d d d            n# 1 swxY w Y   | 	                    |j
        j        t          j                   |                     t           j        d          5  |                    t                     d d d            n# 1 swxY w Y   |                     t           j        d          5  |                    t                      d d d            n# 1 swxY w Y   t                               t           j                  }|                    t"          t$                     |                    t"          t$                     |                    t&          t(                     |                     t           j        d          5  |                    t"                     d d d            n# 1 swxY w Y   |                     t           j        d          5  |                    t$                     d d d            n# 1 swxY w Y   |                     t           j        d          5  |                    t$          t"                     d d d            n# 1 swxY w Y   t                               t           j                  }|                     t           j        d          5  |                    t*          t$                     d d d            n# 1 swxY w Y   |                    t,          t.                     |                    t,          t.                                                     |                    t,          t3          t.                                                               |                    t"          t4          t.                     |                    t"          t4          t.                                                     |                    t"          t4          t3          t.                                                               |                     t          d          5  |                    t,          d           d d d            n# 1 swxY w Y   |                     t           j                  5  |                    t,          d           d d d            n# 1 swxY w Y   |                     t6          d	          5  |                    t,          d
dz             d d d            n# 1 swxY w Y   d }d }d }d }d }d }d }	 G d d          }
|                    t,          |           |                    t,          |           |                    t,          |           |                    t,           |
                       |                    t,           |
            j                   |                     t           j                  5  |                    t,          |           d d d            n# 1 swxY w Y   |                     t6          d	          5  |                    t,          |           d d d            n# 1 swxY w Y   |                     t          d          5  |                    t,          |           d d d            n# 1 swxY w Y   |                     t:          d          5  |                    t,          |	           d d d            n# 1 swxY w Y   |                    t          |	           d S )Nr  PEM libr  zkey values mismatch)passwordzshould be a stringTbadpasszcannot be longer   ai  c                      t           S r   KEY_PASSWORDrX   r$   r"   getpass_unicodez:ContextTests.test_load_cert_chain.<locals>.getpass_unicode  s    r$   c                  4    t                                           S r   )r  r  rX   r$   r"   getpass_bytesz8ContextTests.test_load_cert_chain.<locals>.getpass_bytes  s    &&(((r$   c                  N    t          t                                                    S r   )r   r  r  rX   r$   r"   getpass_bytearrayz<ContextTests.test_load_cert_chain.<locals>.getpass_bytearray  s    \0022333r$   c                      dS )Nr  rX   rX   r$   r"   getpass_badpassz:ContextTests.test_load_cert_chain.<locals>.getpass_badpass  s    9r$   c                      ddz  S )Nr  i   rX   rX   r$   r"   getpass_hugez7ContextTests.test_load_cert_chain.<locals>.getpass_huge  s    ;''r$   c                      dS )Nr  rX   rX   r$   r"   getpass_bad_typez;ContextTests.test_load_cert_chain.<locals>.getpass_bad_type  s    1r$   c                       t          d          )Ngetpass error)	ExceptionrX   r$   r"   getpass_exceptionz<ContextTests.test_load_cert_chain.<locals>.getpass_exception  s    O,,,r$   c                       e Zd Zd Zd ZdS ):ContextTests.test_load_cert_chain.<locals>.GetPassCallablec                     t           S r   r  r   s    r"   __call__zCContextTests.test_load_cert_chain.<locals>.GetPassCallable.__call__      ##r$   c                     t           S r   r  r   s    r"   getpasszBContextTests.test_load_cert_chain.<locals>.GetPassCallable.getpass  r  r$   N)r{  rF  rG  r  r  rX   r$   r"   GetPassCallabler    s2        $ $ $$ $ $ $ $r$   r  zmust return a stringr  )r
   rm   r`   r   r   r   r   r_  r  r   r  r  r  r   r   BADCERT	EMPTYCERTONLYCERTONLYKEYBYTES_ONLYCERTBYTES_ONLYKEYr+  CERTFILE_PROTECTEDr  r  r   ONLYKEY_PROTECTEDr   r  r  )r   rU   r~  r  r  r  r  r  r  r  r  s              r"   test_load_cert_chainz!ContextTests.test_load_cert_chain]  s
   nnS455Hd333Hh777)S%8(KKKw'' 	12000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1+U\:::##CL)<< 	) 	)(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)##CL)<< 	+ 	+	***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ nnS455Hg...Xw???^]KKK##CL)<< 	* 	*)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*##CL)<< 	) 	)(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)##CL)<< 	D 	D(CCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D nnS455##CL2GHH 	8 	8w777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	.FFF.9L9L9N9NOOO.%.|/B/B/D/D%E%E 	 	G 	G 	GH&7FFFH&79L9L9N9NOOOH&7%l&9&9&;&;<<	> 	> 	>##I/CDD 	C 	C 2TBBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cs|,, 	H 	H 2YGGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H##J0BCC 	L 	L  2TF]KKK		L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L	  	  	 	) 	) 	)	4 	4 	4	 	 		( 	( 	(	 	 		- 	- 	-	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$
 	.III.GGG.9JKKK.9J9JKKK.%4_%6%6%> 	 	@ 	@ 	@s|,, 	N 	N 2_MMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N##J0BCC 	K 	K 2\JJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K##I/EFF 	O 	O 2=MNNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O##I?? 	P 	P 2=NOOO	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	H/@AAAAAs   #C

CCEE
E
1FFF	I00I47I4KK	K-"LL"L*!NNN4TT!$T!U00U47U4 WW	W/[[[>\''\+.\+]66]:=]:__	_	c                    t                               t           j                  }|                    t                     |                    t          d            |                    t
                     |                    t
          d            |                     t          |j                   |                     t          |j        d d d            |                     t                    5 }|                    t                     d d d            n# 1 swxY w Y   | 
                    |j        j        t          j                   |                     t           j        d          5  |                    t                      d d d            n# 1 swxY w Y   |                    t          t"                     |                    t          t$                     |                     t          |j        d d           d S )N)r  r&   r  r&   T)r
   rm   r`   r   r   BYTES_CERTFILEr   r   r_  r  r   r  r  r  r   r   r  r  BYTES_CAPATHr   rU   r~  s      r"   test_load_verify_locationsz'ContextTests.test_load_verify_locations  s   nnS455!!(+++!!$!???!!.111!!!EEE)S%>???)S%>dDQQQw'' 	72%%o666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7+U\:::##CL)<< 	/ 	/%%g...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/!!(F333!!(<!@@@ 	)S%>dKKKKKs$   .DDD*FFFc                 
   t          t                    5 }|                                }d d d            n# 1 swxY w Y   t                              |          }t          t
                    5 }|                                }d d d            n# 1 swxY w Y   t                              |          }t                              t          j                  }|                     |	                                d         d           |
                    |           |                     |	                                d         d           |
                    |           |                     |	                                d         d           |
                    |           |                     |	                                d         d           t                              t          j                  }d                    ||f          }|
                    |           |                     |	                                d         d           t                              t          j                  }d|d|d	|d
g}|
                    d                    |                     |                     |	                                d         d           t                              t          j                  }|
                    |           |
                    |           |                     |	                                d         d           |
                    |           |                     |	                                d         d           t                              t          j                  }d                    ||f          }|
                    |           |                     |	                                d         d           t                              t          j                  }|                     t          |j
        t                     |                     t          j        d          5  |
                    d           d d d            n# 1 swxY w Y   |                     t          j        d          5  |
                    d           d d d            d S # 1 swxY w Y   d S )Nx509_car   cadatar   r  r   headotheragaintailr$   z4no start line: cadata does not contain a certificatebrokenz6not enough data: cadata does not contain a certificates   broken)rK   r+  rL   r
   r,  CAFILE_NEURONIOrm   ra   r   cert_store_statsr   r   r   r   objectr   r   )r   rN   
cacert_pem
cacert_derneuronio_pemneuronio_derrU   combineds           r"   test_load_verify_cadataz$ContextTests.test_load_verify_cadata  sJ   -   	"AJ	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"--j99
/"" 	$a6688L	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$//== nnS455--//	:A>>>!!!444--//	:A>>>!!!666--//	:A>>>!!!666--//	:A>>> nnS45599j,788!!!222--//	:A>>> nnS455Jw &*!!8)<)<!===--//	:A>>> nnS455!!!444!!!666--//	:A>>>!!!444--//	:A>>> nnS45588Z677!!!222--//	:A>>> nnS455)S%>vNNN##LB
 
 	7 	7 %%X%666		7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7
 ##LD
 
 	8 	8 %%Y%777		8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8sB   6::/BBBR%%R),R)S44S8;S8)Avoid mixing debug/release CRT on Windowsc                    t                               t           j                  }|                    t                     t
          j        dk    r|                    t                     |                     t          |j                   |                     t          |j        d            |                     t                    5 }|                    t                     d d d            n# 1 swxY w Y   |                     |j        j        t          j                   |                     t           j                  5 }|                    t"                     d d d            d S # 1 swxY w Y   d S )Nnt)r
   rm   r`   load_dh_paramsDHFILEr   r!   BYTES_DHFILEr   r   rM   r  r   r  r  r  r   r   r  s      r"   test_load_dh_paramsz ContextTests.test_load_dh_params  s   nnS4556"""7d??|,,,)S%7888)S%7>>>011 	0R///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0+U\:::s|,, 	)x(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s$   C++C/2C/?E''E+.E+c                     t           j        t           j        hD ]P}t                               |          }|                     |                                dddddddddddd           Qd S )Nr   )numberr  connect_goodconnect_renegotiateacceptaccept_goodaccept_renegotiatehitsmissestimeouts
cache_full)r
   ra   r`   rm   r   session_statsr   s      r"   test_session_statszContextTests.test_session_stats  s    -s/FG 	 	E..''CS..00 !'( &'3 3    	 	r$   c                 v    t                               t           j                  }|                                 d S r   )r
   rm   ra   set_default_verify_pathsrY  s     r"   test_set_default_verify_pathsz*ContextTests.test_set_default_verify_paths!  s0     nnS455$$&&&&&r$   z#ECDH disabled on this OpenSSL buildc                    t                               t           j                  }|                    d           |                    d           |                     t
          |j                   |                     t
          |j        d            |                     t          |j        d           |                     t          |j        d           d S )N
prime256v1s
   prime256v1foo   foo)r
   rm   r`   set_ecdh_curver   r   r   rY  s     r"   test_set_ecdh_curvez ContextTests.test_set_ecdh_curve'  s    nnS455<(((=))))S%7888)S%7>>>*c&8%@@@*c&8&AAAAAr$   c                    t                               t           j                  }|                     t          |j                   |                     t          |j        d           |                     t          |j        d           |                     t          |j        |           d }|                    d            |                    |           d S )Nr8  rT  c                     d S r   rX   )r   
servernamerU   s      r"   dummycallbackz5ContextTests.test_sni_callback.<locals>.dummycallback:      Dr$   )r
   rm   r`   r   r   set_servername_callback)r   rU   r  s      r"   test_sni_callbackzContextTests.test_sni_callback1  s    nnS455 	)S%@AAA)S%@!DDD)S%@"EEE)S%@#FFF	 	 	##D)))##M22222r$   c                    t                               t           j                  }|fd}|                    |           t	          j        |          }~~t          j                     |                      |            d            d S )Nc                     d S r   rX   )r   r  rU   cycles       r"   r  z>ContextTests.test_sni_callback_refcycle.<locals>.dummycallbackC  r  r$   )	r
   rm   r`   r  rV  rW  gccollectr   )r   rU   r  rZ  s       r"   test_sni_callback_refcyclez'ContextTests.test_sni_callback_refcycle?  s     nnS4557: 	 	 	 	##M222[

bbddD!!!!!r$   c                 J   t                               t           j                  }|                     |                                dddd           |                    t                     |                     |                                dddd           |                    t                     |                     |                                dddd           |                    t                     |                     |                                dddd           d S )Nr   )r  crlx509r   r  )	r
   rm   ra   r   r  r   r   r   r+  rY  s     r"   test_cert_store_statsz"ContextTests.test_cert_store_statsK  s(   nnS455--//!Q//	1 	1 	1H%%%--//!Q//	1 	1 	1!!(+++--//!Q//	1 	1 	1!!-000--//!Q//	1 	1 	1 	1 	1r$   c                    t                               t           j                  }|                     |                                g            |                    t                     |                     |                                g            |                    t                     |                     |                                ddddddddg           t          t                    5 }|	                                }d d d            n# 1 swxY w Y   t           
                    |          }|                     |                    d          |g           d S )	N)))r-   zRoot CA))r  zhttp://www.cacert.org))r.   zCA Cert Signing Authority))r  zsupport@cacert.orgzMar 29 12:29:49 2033 GMTzMar 30 12:29:49 2003 GMT00)z!https://www.cacert.org/revoke.crlr   )r3   r4   r5   r6   r>   r7   r9   T)r
   rm   ra   r   get_ca_certsr   r   r+  rK   rL   r,  )r   rU   rN   r2  ders        r"   test_get_ca_certszContextTests.test_get_ca_certsY  s   nnS455))++R000!!(+++))++R000!!-000))++D 55"'ME   	 	 	 -   	A&&((C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	&&s++))$//#77777s   .DDDc                    t                               t           j                  }|                                 t                               t           j                  }|                    t           j        j                   |                                 t                               t           j                  }|                    t           j        j                   t                               t           j                  }|                     t          |j        d            |                     t          |j        d           d S )Nr  )	r
   rm   ra   load_default_certsr  r  r  r   r   rY  s     r"   test_load_default_certsz$ContextTests.test_load_default_certsu  s    nnS455   nnS455s{6777   nnS455s{6777nnS455)S%;TBBB)S%;]KKKKKr$   r   znot-Windows specificc                 N   t                               t           j                  }t          j                    5 }t
          |d<   t          |d<   |                                 |                     |	                                dddd           d d d            d S # 1 swxY w Y   d S )Nr  r  r   r   )r  r  r  )
r
   rm   ra   r   r  r  r   r  r   r  )r   rU   r  s      r"   test_load_default_certs_envz(ContextTests.test_load_default_certs_env  s    nnS455*,, 	Z"(C#+C ""$$$S1133QVW5X5XYYY		Z 	Z 	Z 	Z 	Z 	Z 	Z 	Z 	Z 	Z 	Z 	Z 	Z 	Z 	Z 	Z 	Z 	Zs   ABB!Br  r   z3Debug build does not share environment between CRTsc                    t                               t           j                  }|                                 |                                }t                               t           j                  }t          j                    5 }t          |d<   t          |d<   |                                 |dxx         dz  cc<   | 	                    |                                |           d d d            d S # 1 swxY w Y   d S )Nr  r  r  r   )
r
   rm   ra   r  r  r   r  r  r   r   )r   rU   statsr  s       r"   #test_load_default_certs_env_windowsz0ContextTests.test_load_default_certs_env_windows  s    nnS455   $$&&nnS455*,, 	<"(C#+C ""$$$&MMMQMMMS1133U;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   A!C22C69C6c                    |                      |j        t          j        z  t          j                   t          dk    r(|                      |j        t          z  t                     t
          dk    r(|                      |j        t
          z  t
                     t          dk    r(|                      |j        t          z  t                     t          dk    r*|                      |j        t          z  t                     d S d S r   )r   rx  r
   r   rC   rD   rE   rF   rY  s     r"   _assert_context_optionsz$ContextTests._assert_context_options  s    s6HHH!!S[+<<.0 0 0q  S[+;;-/ / /""S[+==/1 1 1&!++S[+FF8: : : : : ,+r$   c                    t                                           }|                     |j        t           j                   |                     |j        t           j                   |                     |j                   | 	                    |           t          t                    5 }|                                }d d d            n# 1 swxY w Y   t                               t          t          |          }|                     |j        t           j                   |                     |j        t           j                   | 	                    |           t                               t           j        j                  }|                     |j        t           j                   |                     |j        t           j                   | 	                    |           d S )N)r  r&   r  )r
   create_default_contextr   rd   ra   r   r   rG  r   r  rK   r   rL   r  r  r  r`   r   )r   rU   rN   r  s       r"   test_create_default_contextz(ContextTests.test_create_default_context  s   ((**s'>???#*;<<<*+++$$S)))* 	VVXXF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	((
606 ) 8 8s'>???#*;<<<$$S)))(()@AAs'>???#-888$$S)))))s   'CCCc                 t   t                                           }|                     |j        t           j                   |                     |j        t           j                   |                     |j                   | 	                    |           t          t           j                  rt          j                    5  t                               t           j                  }d d d            n# 1 swxY w Y   |                     |j        t           j                   |                     |j        t           j                   | 	                    |           t          j                    5  t                               t           j        t           j        d          }d d d            n# 1 swxY w Y   |                     |j        t           j                   |                     |j        t           j                   |                     |j                   | 	                    |           t                               t           j        j                  }|                     |j        t           j                   |                     |j        t           j                   | 	                    |           d S )NT)r   r   )purpose)r
   _create_stdlib_contextr   rd   ra   r   r   r|  r   r  re   r   r   r   ru  r   rG  r  r  r`   rY  s     r"   test__create_stdlib_contextz(ContextTests.test__create_stdlib_context  s   ((**s'>???#-888+,,,$$S)))C.// 	. /11 E E001CDDE E E E E E E E E E E E E E ES\3+=>>>S_cm<<<((---+-- 	 	,,$+# -  C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s';<<<#*;<<<*+++$$S)))((1H(IIs'>???#-888$$S)))))s$   ?%C00C47C4-2F++F/2F/c                     t          j                    5  t                              t          j                  }d d d            n# 1 swxY w Y   |                     |j                   |                     |j        t          j	                   d|_        | 
                    |j                   |                     |j        t          j                   d|_        t          j        |_        |                     |j                   |                     |j        t          j                   d|_        t          j	        |_        d|_        |                     |j                   |                     |j        t          j	                   d|_        | 
                    |j                   |                     |j        t          j                   d|_        t          j        |_        d|_        |                     |j                   |                     |j        t          j                   d|_        | 
                    |j                   |                     |j        t          j                   |                     t                    5  t          j	        |_        d d d            n# 1 swxY w Y   d|_        |                     |j                   t          j	        |_        |                     |j        t          j	                   d S r  )r   r   r
   rm   r_   r|  r   r   r   r   rG  r   r   r   r   rY  s     r"   test_check_hostnamez ContextTests.test_check_hostname  s   +-- 	3 	3..!122C	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3+,,,#-888 "*+++#*;<<<"++,,,#*;<<< #-"+,,,#-888!*+++#*;<<<"+"+,,,#*;<<<!*+++#*;<<< z** 	, 	,!mCO	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,"+,,,-#-88888s#   %AA	A	J,,J03J0c                    t                               t           j                  }|                     |j                   |                     |j        t           j                   t                               t           j                  }| 	                    |j                   |                     |j        t           j
                   d S r   )r
   rm   ra   rG  r   r   r   r   r`   r|  r   rY  s     r"   test_context_client_serverz'ContextTests.test_context_client_server
  s    nnS455*+++#*;<<< nnS455+,,,#-88888r$   c                 .    G d dt           j                  } G d dt           j                  }t                               t           j                  }||_        ||_        |                    t          j                    d          5 }| 	                    ||           d d d            n# 1 swxY w Y   |
                    t                                           t                                           d          }| 	                    ||           d S )Nc                       e Zd ZdS );ContextTests.test_context_custom_class.<locals>.MySSLSocketNr{  rF  rG  rX   r$   r"   MySSLSocketr!            Dr$   r#  c                       e Zd ZdS );ContextTests.test_context_custom_class.<locals>.MySSLObjectNr"  rX   r$   r"   MySSLObjectr&    r$  r$   r'  Tr  )r
   r   	SSLObjectrm   r`   sslsocket_classsslobject_classr   r   rA  wrap_bior   )r   r#  r'  rU   r   r  s         r"   test_context_custom_classz&ContextTests.test_context_custom_class  sG   	 	 	 	 	#- 	 	 		 	 	 	 	#- 	 	 	 nnS455))__V]__$_?? 	54!!$444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5ll3==??CMMOOlNNc;/////s   B..B25B2c                    t                               t           j                  }|                     |j        d           d|_        |                     |j        d           d|_        |                     |j        d           |                     t                    5  d|_        d d d            n# 1 swxY w Y   |                     t                    5  d |_        d d d            n# 1 swxY w Y   t                               t           j                  }|                     |j        d           |                     t                    5  d|_        d d d            d S # 1 swxY w Y   d S )Nr  r   r   r  )	r
   rm   r`   r   num_ticketsr   r   r   ra   rY  s     r"   test_num_tickestzContextTests.test_num_tickest%  s   nnS455!,,,!,,,!,,,z** 	! 	! CO	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!y)) 	# 	#"CO	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# nnS455!,,,z** 	  	 CO	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s6   B22B69B6C++C/2C/E$$E(+E(N).r{  rF  rG  rS  rZ  rs   rJ  r   rd  ru  ry  r}  r  rI  r  rR   r
   rm   r  r  r  r  r  skipIfPy_DEBUG_WIN32r  r  r  r   r  r  r   r  r	  r  r   rL  r  r  r  r  r  r  r  r,  r/  rX   r$   r"   rO  rO  y  s       
: 
: 
:0 0 0 X/14FH H	+ 	+H H	+
 
 
&< < <&, , ,07 7 7 L; L; L;\ X 011# @ @	 @$ $ $(QB QB QBfL L L&=8 =8 =8~ X_^%PQQ) ) RQ)  "' ' ' X'LMMB B NMB3 3 3
" 
" 
"1 1 18 8 88L L L X_S\W,.DEEZ Z FEZ X02DEEX_WWS"4557lmm< < nm FE<: : :* * *** * *<*9 *9 *9X	9 	9 	90 0 0          r$   rO  c                   T    e Zd Zd Z ej        ed          d             Zd Zd Z	dS )SSLErrorTestsc                 j   t                               dd          }|                     t          |          d           |                     |j        d           t                               dd          }|                     t          |          d           |                     |j        d           d S )Nr   r  )r
   r   r   r\   r  SSLZeroReturnError)r   es     r"   test_strzSSLErrorTests.test_str9  s    LLE""Q'''!$$$""1e,,Q'''!$$$$$r$   r  c                    t                               t           j                  }|                     t           j                  5 }|                    t                     d d d            n# 1 swxY w Y   |                     |j        j	        d           |                     |j        j
        d           t          |j                  }|                     |                    d          |           d S )NPEMNO_START_LINEz"[PEM: NO_START_LINE] no start line)r
   rm   ra   r   r   r  r   r   r  libraryreasonr\   rG  r]   )r   rU   r~  r   s       r"   test_lib_reasonzSSLErrorTests.test_lib_reasonC  s     nnS455s|,, 	)x(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)-u555,o>>>%IJJANNNNNs   A++A/2A/c                    t                               t           j                  }d|_        t           j        |_        t          j        d          5 }t          j        |	                                          }|
                    d           |                    |dd          5 }|                     t           j                  5 }|                                 d d d            n# 1 swxY w Y   t          |j                  }|                     |                    d          |           |                     |j        j        t           j                   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NFr  r  z%The operation did not complete (read))r
   rm   ra   r   r   r   r   r  create_connectionr  setblockingr   r   SSLWantReadErrordo_handshaker\   r  rG  r]   r   r  SSL_ERROR_WANT_READ)r   rU   r   r  r~  s        r"   test_subclasszSSLErrorTests.test_subclassN  s    nnS455"-!"233 		Nq(99AMM%   E5II NQ&&s';<< %NN$$$% % % % % % % % % % % % % % %%%-T U UWXYYY  !3S5LMMMN N N N N N N N N N N N N N N		N 		N 		N 		N 		N 		N 		N 		N 		N 		N 		N 		N 		N 		N 		N 		N 		N 		Ns\   AE<% E$C&E$&C**E$-C*.A*E$E<$E(	(E<+E(	,E<<F F c                 
   t                                           }|                     t                    5  |                    t                                           t                                           d           d d d            n# 1 swxY w Y   |                     t                    5  |                    t                                           t                                           d           d d d            n# 1 swxY w Y   |                     t                    5  |                    t                                           t                                           d           d d d            d S # 1 swxY w Y   d S )NrT  r  z.example.orgzexample.org evil.com)r
   r  r   r   r+  r   r   rY  s     r"   test_bad_server_hostnamez&SSLErrorTests.test_bad_server_hostname`  s   ((**z** 	- 	-LL#--//)+  - - -	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- z** 	9 	9LL#--//)7  9 9 9	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 y)) 	D 	DLL#--//)B  D D D	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds8   ABBB,AC??DD$AE88E<?E<N)
r{  rF  rG  r7  rs   r0  r1  r=  rD  rF  rX   r$   r"   r3  r3  7  sx        % % % X_^%PQQO O RQON N N$
D 
D 
D 
D 
Dr$   r3  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )MemoryBIOTestsc                    t                                           }|                    d           |                     |                                d           |                     |                                d           |                    d           |                    d           |                     |                                d           |                     |                                d           |                    d           |                     |                    d          d           |                     |                    d          d	           |                     |                    d          d           d S )
Nr  r$      bars   foobar   bazr  s   bar      z)r
   r   r   r   rL   r   bios     r"   test_read_writezMemoryBIOTests.test_read_writeo  s5   mmoo		&V,,,S)))		&		&Y///S)))		&!e,,,!d+++!c*****r$   c                 :   t                                           }|                     |j                   |                     |                                d           |                     |j                   |                    d           |                     |j                   |                                 |                     |j                   |                     |                    d          d           |                     |j                   |                     |                    d          d           |                     |j                   |                     |                                d           |                     |j                   d S )Nr$   r  r  s   for      o)	r
   r   r|  eofr   rL   r   	write_eofrG  rM  s     r"   test_eofzMemoryBIOTests.test_eof}  sF   mmoo!!!S)))!!!		&!!!!!!!e,,,!!!!d+++   S)))     r$   c                 F   t                                           }|                     |j        d           |                    d           |                     |j        d           t          d          D ]8}|                    d           |                     |j        d|z
  dz
             9t          d          D ]5}|                    d           |                     |j        |dz              6|                                 |                     |j        d           d S )Nr   r  r   r   r]  )r
   r   r   pendingr   r  rL   )r   rN  r  s      r"   test_pendingzMemoryBIOTests.test_pending  s   mmooa(((		&a(((q 	1 	1AHHQKKKS[!A#a%0000q 	/ 	/AIIdOOOS[!A#....


a(((((r$   c                    t                                           }|                    d           |                     |                                d           |                    t          d                     |                     |                                d           |                    t          d                     |                     |                                d           d S )Nr  rJ  rK  )r
   r   r   r   rL   r   
memoryviewrM  s     r"   test_buffer_typesz MemoryBIOTests.test_buffer_types  s    mmoo		&V,,,		)F##$$$V,,,		*V$$%%%V,,,,,r$   c                 @   t                                           }|                     t          |j        d           |                     t          |j        d            |                     t          |j        d           |                     t          |j        d           d S )Nr  Tr   )r
   r   r   r   r   rM  s     r"   test_error_typeszMemoryBIOTests.test_error_types  s}    mmoo)SY666)SY555)SY555)SY22222r$   N)r{  rF  rG  rO  rT  rW  rZ  r\  rX   r$   r"   rH  rH  m  s_        + + +! ! ! ) ) )- - -3 3 3 3 3r$   rH  c                       e Zd Zd Zd ZdS )SSLObjectTestsc                     t                                           }|                     t          d          5  t                               ||           d d d            d S # 1 swxY w Y   d S r   )r
   r   r   r   r(  rM  s     r"   r   z SSLObjectTests.test_private_init  s    mmoo##I/CDD 	$ 	$MM#s###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s   AA"%A"c                    t                      \  }}}t                                          }t                                          }t                                          }t                                          }|                    |||          }|                    ||d          }	t	          d          D ]}
	 |                                 n# t          j        $ r Y nw xY w|j        r'|                    |	                                           	 |	                                 n# t          j        $ r Y nw xY w|j        r'|                    |	                                           |                                 |	                                 | 
                    t          j                  5  |                                 d d d            n# 1 swxY w Y   |                    |	                                           |	                                 |                    |	                                           |                                 d S )Nr  Tr  r.  )r   r
   r   r+  r  rB  rA  rV  r   rL   r   unwrap)r   
client_ctx
server_ctxr   c_inc_outs_ins_outclientr<  _s              r"   test_unwrapzSSLObjectTests.test_unwrap  sK   +:+<+<(
J}}}}$$T5($KK$$T5d$CC q 	) 	)A##%%%%'   } )

5::<<(((##%%%%'   } )

5::<<((( s344 	 	MMOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 	

5::<<    	

5::<<   s6   9CC C D''D98D92GGGN)r{  rF  rG  r   rj  rX   r$   r"   r^  r^    s2        $ $ $
( ( ( ( (r$   r^  c                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Z ej        ej        dk    d          d             Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )SimpleBackgroundTestsz?Tests that connect to a simple server running in the backgroundc                    t                               t           j                  | _        | j                            t
                     t          | j                  }|                     |           t          |j	        f| _
        d S )NrB  )r
   rm   r`   r   r   r   rC  enterContextr  r=  server_addr)r   r<  s     r"   setUpzSimpleBackgroundTests.setUp  sl    !nnS-DEE++O<<<#D,?@@@&!!! &+.r$   c                    t          t          j        t          j                  t          j                  5 }|                    | j                   |                     i |                                           | 	                    |j
                   d d d            n# 1 swxY w Y   t          t          j        t          j                  t          j        t                    5 }|                    | j                   |                     |                                           | 	                    |j
                   d d d            d S # 1 swxY w Y   d S )Nr  r   r   )r   r   rU  r
   r   r  ro  r   getpeercertr|  r   r   r   rG  r   s     r"   test_connectz"SimpleBackgroundTests.test_connect  s   fmFN;;&)m5 5 5 	,89IId&'''R111Q]+++		, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, fmFN;;&)&7%/1 1 1 	,45IId&'''OOAMMOO,,,Q]+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s%   AB!!B%(B%)AEEEc                     t          t          j        t          j                  t          j                  }|                     |j                   |                     t          j        d|j	        | j
                   d S )Nr  certificate verify failed)r   r   rU  r
   r   r  r  r   r   r  ro  r   s     r"   test_connect_failz'SimpleBackgroundTests.test_connect_fail  ss     V]6>::&)&79 9 9   s|-H y$*:	< 	< 	< 	< 	<r$   c                 ^   t          t          j        t          j                  t          j        t
                    }|                     |j                   |                     d|	                    | j
                             |                     |                                           d S )Nrr  r   )r   r   rU  r
   r   r   r  r  r   r7  ro  rG  rs  r   s     r"   test_connect_exz%SimpleBackgroundTests.test_connect_ex  s    V]6>::&)&7%/1 1 1 	   ALL)9::;;;(((((r$   c                    t          t          j        t          j                  t          j        t
          d          }|                     |j                   |                    d           |	                    | j
                  }|                     |dt          j        t          j        f           t          j        g |gg d           	 	 |                                 nV# t          j        $ r t          j        |gg g d           Y n,t          j        $ r t          j        g |gg d           Y nw xY wl|                     |                                           d S )NF)r   r   r  r   rn  )r   r   rU  r
   r   r   r  r  r@  r7  ro  r  r  EINPROGRESSr;  selectrB  rA  SSLWantWriteErrorrG  rs  r   r   r>  s      r"   test_non_blocking_connect_exz2SimpleBackgroundTests.test_non_blocking_connect_ex  sZ    V]6>::&)&7%/49; ; ; 	   	e\\$*++b1e/1BCDDDb1#r3'''	00   ' 0 0 0qc2r3/////( 0 0 0b1#r3/////0	0 	(((((s   C$ $'D6&D65D6c                    t                               t           j                  }d|_        t           j        |_        |                    t          j        t          j                            5 }|	                    | j
                   |                     i |                                           d d d            n# 1 swxY w Y   |                    t          j        t          j                  d          5 }|	                    | j
                   d d d            n# 1 swxY w Y   t           j        |_        |                    t                     |                    t          j        t          j                            5 }|	                    | j
                   |                                }|                     |           d d d            d S # 1 swxY w Y   d S )NFdummyr  )r
   rm   ra   r   r   r   r   r   rU  r  ro  r   rs  r   r   r   rG  r   rU   r   r  s       r"   test_connect_with_contextz/SimpleBackgroundTests.test_connect_with_context"  s1   nnS455"-__V]6>::;; 	2qIId&'''R111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 __V]6>::,3  5 5 	(89IId&'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( +!!*---__V]6>::;; 	"qIId&'''==??DOOD!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s8   .AB==CC;D""D&)D&	AGG!Gc                 J   t                               t           j                  }|                    t	          j        t          j                  t                    }|                     |j                   | 	                    t           j
        d|j        | j                   d S )Nr  rv  )r
   rm   ra   r   r   rU  r   r  r  r   r   r  ro  )r   rU   r   s      r"   test_connect_with_context_failz4SimpleBackgroundTests.test_connect_with_context_fail6  s     nnS455OOM&.))4  
 
 	   s|-H !	4+;	= 	= 	= 	= 	=r$   c                 P   t                               t           j                  }|                    t                     |                    t          j        t          j                  t                    5 }|	                    | j
                   |                                }|                     |           d d d            n# 1 swxY w Y   t                               t           j                  }|                    t                     |                    t          j        t          j                  t                    5 }|	                    | j
                   |                                }|                     |           d d d            d S # 1 swxY w Y   d S )Nr  r  )r
   rm   ra   r   r  r   r   rU  r   r  ro  rs  rG  r  r  s       r"   test_connect_capathz)SimpleBackgroundTests.test_connect_capathC  s    nnS455!!!000__V]6>::-E  G G 	"JKIId&'''==??DOOD!!!		" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" nnS455!!!666__V]6>::-E  G G 	"JKIId&'''==??DOOD!!!		" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s&   8ACCC
AFF"Fc                    t          t                    5 }|                                }d d d            n# 1 swxY w Y   t                              |          }t                              t          j                  }|                    |           |                    t          j	        t          j
                  t                    5 }|                    | j                   |                                }|                     |           d d d            n# 1 swxY w Y   t                              t          j                  }|                    |           |                    t          j	        t          j
                  t                    5 }|                    | j                   |                                }|                     |           d d d            d S # 1 swxY w Y   d S )Nr  r  )rK   r   rL   r
   r,  rm   ra   r   r   r   rU  r   r  ro  rs  rG  )r   rN   r2  r  rU   r   r  s          r"   test_connect_cadataz)SimpleBackgroundTests.test_connect_cadataZ  sO   * 	&&((C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	&&s++nnS455!!!---__V]6>::-E  G G 	"JKIId&'''==??DOOD!!!		" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" nnS455!!!---__V]6>::-E  G G 	"JKIId&'''==??DOOD!!!		" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s2   6::ADD!$D!AG++G/2G/r  z*Can't use a socket as a file under Windowsc                 b   t          t          j        t          j                            }|                    | j                   |                                }|                                }|                                 t          j	        |d           |                                 t          j                     |                     t                    5 }t          j	        |d           d d d            n# 1 swxY w Y   |                     |j        j        t           j                   d S r   )r   r   rU  r  ro  filenomakefiler  r   rL   r  r  r   r_  r   r  r  EBADF)r   rY  fdrN   r6  s        r"   test_makefile_closez)SimpleBackgroundTests.test_makefile_closeo  s   
 fmFN;;<<


4#$$$YY[[KKMM				
A





w'' 	1GBNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	*EK88888s   C::C>C>c                 P   t          j         t           j                  }|                    | j                   |                    d           t          |t          j        d          }|                     |j	                   d}	 	 |dz  }|
                                 nT# t          j        $ r t          j        |gg g            Y n+t          j        $ r t          j        g |gg            Y nw xY wot          j        r$t           j                            d|z             d S d S )NFr   r  r   Tr   z9
Needed %d calls to do_handshake() to establish session.
)r   rU  r  ro  r@  r   r
   r   r  r  rB  rA  r|  r}  r   r   r   r   r   )r   r   counts      r"   test_non_blocking_handshakez1SimpleBackgroundTests.test_non_blocking_handshake  sE   M&.))			$"###	eQ&)m49; ; ; 	   	++
   ' + + +qc2r*****( + + +b1#r*****+	+ ? 	dJZ]bbccccc	d 	ds   B" "&C2
%C21C2c                 :    t          | g| j        R dt          i d S )Nr  )_test_get_server_certificatero  r   r   s    r"   test_get_server_certificatez1SimpleBackgroundTests.test_get_server_certificate  s)    $TND,<NNN:NNNNNr$   c           	         | j         \  }}g fd}| j                            |           t                              ||f          }|s|                     d|d|d           t                              ||ft                    }|s|                     d|d|d           t          j        r)t          j
                            d|d|d|d           |                     ||g           d S )	Nc                 2                         |           d S r   )append)ssl_sockserver_nameinitial_contextserver_namess      r"   servername_cbzLSimpleBackgroundTests.test_get_server_certificate_sni.<locals>.servername_cb  s    ,,,,,r$   No server certificate on :!r   
Verified certificate for  is
r   )ro  r   r  r
   get_server_certificater/  r   r   r   r   r   r   r   )r   r  r=  r  r2  r  s        @r"   test_get_server_certificate_sniz5SimpleBackgroundTests.test_get_server_certificate_sni  s(   %
d	- 	- 	- 	- 	-33MBBB(($66 	HIII444FGGG(($
(KK 	HIII444FGGG? 	^JDDDRVRVRVX[X[X[\]]]d|44444r$   c                 *    t          | g| j        R   d S r   )!_test_get_server_certificate_failro  r   s    r"    test_get_server_certificate_failz6SimpleBackgroundTests.test_get_server_certificate_fail  s#     	*$B1ABBBBBBr$   c                     d }| j                             |           |                     t          j                  5  t
                              | j        t          d           d d d            d S # 1 swxY w Y   d S )Nc                 .    t          j        d           d S )N皙?)r   sleepr  r  r  s      r"   r  zPSimpleBackgroundTests.test_get_server_certificate_timeout.<locals>.servername_cb  s    JsOOOOOr$   皙?)r   rq  )	r   r  r   r   rq  r
   r  ro  r   )r   r  s     r"   #test_get_server_certificate_timeoutz9SimpleBackgroundTests.test_get_server_certificate_timeout  s    	 	 	33MBBBv~.. 	4 	4&&t'7*/2 ' 4 4 4	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   (A22A69A6c                    t          t          j        t          j                  t          j        d          5 }|                    | j                   d d d            n# 1 swxY w Y   t          t          j        t          j                  t          j        d          5 }|                    | j                   d d d            n# 1 swxY w Y   |                     t          j        d          5  t          j        t          j                  5 }t          |t          j        d          }|                    | j                   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NrU  )r   r   rV  rW  rX  )	r   r   rU  r
   r   r  ro  r   r   )r   r   r   s      r"   rZ  z"SimpleBackgroundTests.test_ciphers  sG   fmFN;;'*}eE E E 	(HIIId&'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( fmFN;;'*}iI I I 	(LMIId&'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( ##CL2MNN 	, 	,v~.. ,$$T.1mEWY Y Y		$*+++, , , , , , , , , , , , , , ,	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,sY   A  A$'A$#C

CC5E/7EE/E	E/E	E//E36E3c                 Z   t                               t           j                  }|                    t                     |                     |                                g            |                    t          j        t          j	                  d          5 }|
                    | j                   |                                }|                     |           d d d            n# 1 swxY w Y   |                     t          |                                          d           d S )Nr  r/   r  r   )r
   rm   ra   r   r  r   r  r   r   rU  r  ro  rs  rG  rc   r  s       r"   test_get_ca_certs_capathz.SimpleBackgroundTests.test_get_ca_certs_capath  s2   nnS455!!!000))++R000__V]6>::-8  : : 	"=>IId&'''==??DOOD!!!		" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"
 	S--//00!44444s   AC++C/2C/c                    t                               t           j                  }|                    t                     t                               t           j                  }|                    t                     t          j        t
          j                  }|                    |d          5 }|                    | j	                   | 
                    |j        |           | 
                    |j        j        |           ||_        | 
                    |j        |           | 
                    |j        j        |           d d d            d S # 1 swxY w Y   d S )Nr  r/   r  )r
   rm   ra   r   r  r   rU  r   r  ro  r   r   _sslobj)r   ctx1ctx2r   rY  s        r"   test_context_setgetz)SimpleBackgroundTests.test_context_setget  s]   ~~c566""&"111~~c566""&"111M&.))a== 	4JJt'(((MM"*d+++MM"*,d333BJMM"*d+++MM"*,d333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   4BEE Ec                    |                     dt          j                  }t          j                    |z   }d}		 t          j                    |k    r|                     d           d }
|	dz  }		  || }nC# t          j        $ r1}|j        t          j	        t          j
        fvr |j        }
Y d }~nd }~ww xY w|                                }|                    |           |
nR|
t          j	        k    rA|                    d          }|r|                    |           n|                                 t          j        r)t"          j                            d|	|j        fz             |S )Nrq  r   Tr   i   z"Needed %d calls to complete %s().
)r   r   SHORT_TIMEOUTr   	monotonicr/  r
   r   r  rC  SSL_ERROR_WANT_WRITErL   sendallr`  r   rS  r   r   r   r{  )r   r   incomingoutgoingrw   ru   r   rq  deadliner  r  retr6  bufs                 r"   ssl_io_loopz!SimpleBackgroundTests.ssl_io_loop  s    **Y(=>>>##g-	)~(**		)$$$EQJE dDk<      73#:#&#;#= = =	  --//CLL }#111ii&& )NN3''''&&(((3	)4 ? 	7JB %t}56 7 7 7
s   .A4 4B4'B//B4c                    t          j         t           j                  }|                     |j                   |                    | j                   t                                          }t                                          }t                              t          j	                  }| 
                    |j                   |                     |j        t          j                   |                    t                      |                    ||dt$                    }|                     |j        j        |           |                     |                                           |                     |                                           |                     |                                           |                     t6          |j                   dt          j        v r(|                     |                    d                     |                     ||||j                    | 
                    |                                           |                     |                                           | !                    |                                           | 
                    |                                           dt          j        v r(| 
                    |                    d                     	 |                     ||||j"                   n# t          j#        $ r Y nw xY w|                     t          j$        |j%        d           d S )NFr  r  )&r   rU  r  r  r  ro  r
   r   rm   ra   rG  r   r   r   r   r   r   r+  r   r   r  ownerr  cipherr9   shared_ciphersr   r   rs  rK  r  r  rB  assertIsNotNonera  SSLSyscallErrorr   r   )r   r   r  r  rU   sslobjs         r"   test_bio_handshakez(SimpleBackgroundTests.test_bio_handshake	  s   }V^,,
###T%&&&==??==??nnS455*+++#*;<<<!!*---h%68 8fn*F333&--//***&..**+++&//11222*f&89993444f88FFGGGx63FGGG(((&//11222V^^--...**,,---3444OOF66|DDEEE	T8Xv}EEEE" 	 	 	 D	 	#,f=====s   :L L*)L*c                    t          j         t           j                  }|                     |j                   |                    | j                   t                                          }t                                          }t                              t          j	                  }d|_
        t          j        |_        |                    ||d          }|                     ||||j                   d}|                     ||||j        |           |                     ||||j        d          }|                     |d           |                     ||||j                   d S )NF   FOO
   s   foo
)r   rU  r  r  r  ro  r
   r   rm   ra   r   r   r   r+  r  rB  r   rL   r   ra  )r   r   r  r  rU   r  reqr  s           r"   test_bio_read_write_dataz.SimpleBackgroundTests.test_bio_read_write_data-	  s%   }V^,,
###T%&&&==??==??nnS455"-h%88x63FGGGx6<EEEtXxdKKh'''x6=AAAAAr$   c                    t                      \  }}}t          j        t          j                  5 }|                    | j                   t
                                          }t
                                          }|                    |||          }|                     ||||j	                   |
                                 |                     t
          j        |j                   d d d            d S # 1 swxY w Y   d S )Nr  )r   r   rU  r  ro  r
   r   r+  r  rB  rS  r   SSLEOFErrorrL   )r   r   r   r   r   r  r  r  s           r"   test_transport_eofz(SimpleBackgroundTests.test_transport_eof>	  s$   3B3D3D0]6>** 
	<dLL)***}}H}}H#,,Xx=E - G GFT8Xv7JKKK    cov{;;;
	< 
	< 
	< 
	< 
	< 
	< 
	< 
	< 
	< 
	< 
	< 
	< 
	< 
	< 
	< 
	< 
	< 
	<s   B;C99C= C=N)r{  rF  rG  __doc__rp  rt  rw  ry  r  r  r  r  r  rs   r0  r   r!   r  r  r  r  r  r  rZ  r  r  r  r  r  r  rX   r$   r"   rl  rl    s       II/ / /, , ,< < <) ) )) ) )4" " "(= = =" " "." " "* X_RW_&RSS9 9 TS9$d d d*O O O5 5 5*C C C
4 4 4, , ,
5 
5 
54 4 4# # #J >  >  >DB B B"< < < < <r$   rl  networkc                   R    e Zd Zd Z ej        ej        d          d             ZdS )NetworkedTestsc                 J   t          j        t                    5  t          t	          j        t          j                  t          j        d          }|                     |j	                   |
                    d           |                    t          df          }|dk    r|                     d           n%|t          j        k    r|                     d           |                     |t          j        t          j        f           d d d            d S # 1 swxY w Y   d S )NFr  gHz>  r   z!REMOTE_HOST responded too quicklyzNetwork unreachable.)r   transient_internetREMOTE_HOSTr   r   rU  r
   r   r  r  ro  r7  r3  r  ENETUNREACHr  EAGAINr;  r~  s      r"   test_timeout_connect_exz&NetworkedTests.test_timeout_connect_exP	  sT    -k:: 	A 	A v~!>!>*-*;8=? ? ?A OOAG$$$LL###{C011BQwwABBBBu(((4555MM"u|U->?@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As   C1DDDz
Needs IPv6c                     t          j        d          5  t          | dd           t          | dd           d d d            d S # 1 swxY w Y   d S )Nzipv6.google.comr  )r   r  r  r  r   s    r"    test_get_server_certificate_ipv6z/NetworkedTests.test_get_server_certificate_ipv6`	  s    -.?@@ 	L 	L(/@#FFF-d4EsKKK	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	Ls   #AA	A	N)	r{  rF  rG  r  rs   rJ  r   r  r  rX   r$   r"   r  r  M	  sZ        A A A  X3\BBL L CBL L Lr$   r  c           	      `   t                               ||f          }|s|                     d|d|d           t                               ||f|          }|s|                     d|d|d           t          j        r+t
          j                            d|d|d|d           d S d S )Nr  r  r  r  r  r  r   )r
   r  r/  r   r   r   r   r   )testr  r=  r  r2  s        r"   r  r  g	  s    

$
$dD\
2
2C D			tttTTTBCCC

$
$dD\D
$
A
AC D			tttTTTBCCC Z
dddTWTWTWXYYYYYZ Zr$   c           	      .   	 t                               ||ft                    }|                     d|d|d|d           d S # t           j        $ r?}t
          j        r(t          j        	                    d|z             Y d }~d S Y d }~d S d }~ww xY w)Nr  zGot server certificate z for r  r  z%s
)
r
   r  r   r/  r   r   r   r   r   r   )r  r  r=  r2  xs        r"   r  r  r	  s    N(($(II 				CCCtttLMMMMM < ) ) )? 	)JVaZ(((((((((	) 	) 	) 	) 	) 	))s   #A B.BB)make_https_serverc                   l    e Zd Z G d dej                  Z	 	 	 	 	 ddZd Zd Zdd	Z	d
 Z
d Zd ZdS )rC  c                   6    e Zd ZdZd Zd Zd Zd Zd Zd Z	dS )	$ThreadedEchoServer.ConnectionHandlerzA mildly complicated class, because we want it to work both
        with and without the SSL wrapper around the socket connection, so
        that we can test the STARTTLS functionality.c                     || _         d| _        || _        || _        | j                            d           d | _        t          j                            |            d| _	        d S NFT)
r<  runningr   addrr@  sslconn	threadingThread__init__daemon)r   r<  connsockr  s       r"   r  z-ThreadedEchoServer.ConnectionHandler.__init__	  s]     DK DL DIDII!!$'''DL%%d+++DKKKr$   c                    	 | j         j                            | j        d          | _        | j         j                            | j                                                   | j         j                            | j                                                   | j         j        j	        t          j        k    r| j                                        }t          j        rC| j         j        r7t           j                            dt'          j        |          z   dz              | j                            d          }t          j        r^| j         j        rR| t           j                            d           n0t           j                            dt+          |           d           | j                                        }t          j        r>| j         j        r2t           j                            dt/          |          z   dz              dS # t0          t2          t4          f$ r}| j         j                            t/          |                     | j         j        r't9          d	t;          | j                  z   d
z              d| _        |                                   Y d }~dS d }~wt          j!        tD          f$ r}| j         j                            t/          |                     | j         j        r't9          d	t;          | j                  z   d
z              |j#        tF          j$        k    rDt           j%        dk    r4d| _        | j         &                                 |                                   Y d }~dS d }~ww xY w)NTr  z client cert is r   z client did not provide a cert
z cert binary is zb
z" server: connection cipher is now z'
 server:  bad connection attempt from z:
Fdarwin)'r<  r   r   r   r  selected_alpn_protocolsr  selected_alpn_protocolr  r   r
   r   rs  r   r   chattyr   r   r   r   r   rc   r  r\   ConnectionResetErrorBrokenPipeErrorConnectionAbortedErrorconn_errorsr   r   r  r  r  r   r_  r  
EPROTOTYPErL  stop)r   r  cert_binaryr  r6  s        r"   	wrap_connz.ThreadedEchoServer.ConnectionHandler.wrap_conn	  s   ;#{2>>I4  ?  1  13::4<;^;^;`;`aaaT *11$,2M2M2O2OPPP;&2c6GGG<3355D [4;+= [
(();fnT>R>R)RUY)YZZZ"&,":":4"@"@K W4;+= W&.J,,-OPPPPJ,,-UK@P@P-U-U-UVVV,,..? `t{'9 `J$$%ICPVKK%WZ^%^___to )/;QR    '..s1vv666;% g !KdSWS\oo!]`e!efff$

uuuuuL'*    '..s1vv666;% g !KdSWS\oo!]`e!efff
 7e...3<83K3K#(DLK$$&&&JJLLLuuuuu-s&   A!H	 	M< A:J  M<9B8M77M<c                 v    | j         r| j                                         S | j                            d          S )Nr  )r  rL   r   r`  r   s    r"   rL   z)ThreadedEchoServer.ConnectionHandler.read	  s4    | ,|((***y~~d+++r$   c                 x    | j         r| j                             |          S | j                            |          S r   )r  r   r   rd  )r   r  s     r"   r   z*ThreadedEchoServer.ConnectionHandler.write	  s6    | -|))%000y~~e,,,r$   c                 |    | j         r| j                                          d S | j                                         d S r   )r  r  r   r   s    r"   r  z*ThreadedEchoServer.ConnectionHandler.close	  s>    | """$$$$$	!!!!!r$   c                    d| _         | j        j        s|                                 sd S | j         r	 |                                 }|                                }|sTd| _         	 | j                                        | _        d | _        n# t          $ r Y nw xY w| 
                                 n|dk    rMt          j        r+| j        j        rt          j                            d           | 
                                 d S | j        j        rj|dk    rdt          j        r+| j        j        rt          j                            d           |                     d           |                                 sd S n| j        j        r| j        r|dk    rt          j        r+| j        j        rt          j                            d	           |                     d           | j                                        | _        d | _        t          j        r+| j        j        rt          j                            d
           n>|dk    rt          j        r+| j        j        rt          j                            d           | j                            d          }|                     t%          |                              d          dz              n|dk    rt          j        r+| j        j        rt          j                            d           	 | j                                         |                     d           n?# t*          j        $ rC}|                     t%          |                              d          dz              Y d }~nd }~ww xY w|dk    rG| j                                        |                     d           n|                     d           n|dk    rS| j                                        }|                     t%          |                              d          dz              nD|dk    rX| j        j                                        }|                     t5          |                              dd          dz              n|dk    rX| j        j                                        }|                     t5          |                              dd          dz              nt          j        rU| j        j        rI| j        rdpd}t          j                            d|d|d|                                d|d	           |                     |                                           n# t          $ r}| j        j        rHt          j        r<t?          |t@                    rtC          d | j"                    ntG          d!           	 |                     d"           n# t          $ r Y nw xY w| 
                                 d| _         | j        $                                 Y d }~nd }~ww xY w| j         d S d S )#NTFs   overz" server: client closed connection
   STARTTLSz2 server: read STARTTLS from client, sending OK...
   OK
   ENDTLSz0 server: read ENDTLS from client, sending OK...
z* server: connection is now unencrypted...
s   CB tls-uniquez@ server: read CB tls-unique from client, sending our CB data...
r  us-ascii   
   PHAz( server: initiating post handshake auth
   HASCERT   TRUE
   FALSE
   GETCERTs   VERIFIEDCHAINr   bigs   UNVERIFIEDCHAIN	encryptedunencryptedz server: read z (z), sending back z)...
z Connection reset by peer: zTest server failure:
s   ERROR
)%r  r<  starttls_serverr  rL   stripr  ra  r   r_  r  r   r   connectionchattyr   r   r   r  r   r  verify_client_post_handshaker
   r   rs  r  get_verified_chainrc   to_bytesget_unverified_chainr2  r  r[   ConnectionErrorprintr  r   r  )r   msgstrippedr   r6  r  certsctypes           r"   runz(ThreadedEchoServer.ConnectionHandler.run	  sY   DL;. ~~'' F, ^']'))++C"yy{{H# D0',0(,(;(;(=(=DI ,0DLL  ' ! ! ! !D	! 

!W,,"? Tt{/K TJ,,-RSSS

+5 20"k11"? dt{/K dJ,,-bccc

7+++#~~// #"F#+5 +0$, +0&)33"? bt{/K bJ,,-`aaa

7+++$(L$7$7$9$9	'+"? \t{/K \J,,-Z[[[!%555"? rt{/K rJ,,-pqqq#|??MM

4::#4#4Z#@#@5#HIIII!V++"? Zt{/K ZJ,,-XYYY0 LEEGGG !JJw////  #| K K K JJtAww~~j'A'AE'IJJJJJJJJK "Z//<3355A JJy1111 JJz2222!Z//#|7799

4::#4#4Z#@#@5#HIIII!%555 $ 4 G G I I

3u::#6#6q%#@#@5#HIIII!%777 $ 4 I I K K

3u::#6#6q%#@#@5#HIIII#O Q K8Q%)\%Ak$SmEJ,,,03UUUCIIKKKK.P Q Q Q

399;;/// ' ' '{) 	Cgo 	C%a99 C " Idi I I    ))ABBB

:...."   JJLLL#(DL K$$&&&&&&&&+'S , ^' ^' ^' ^' ^'s   1U< %B U< 
BU< BA*U< A2U< 8FU< L< %U< <N8N	U< 	NG-U< <
X?AX:W10X:1
W>;X:=W>>7X::X?N)
r{  rF  rG  r  r  r  rL   r   r  r  rX   r$   r"   ConnectionHandlerr  	  s~        	8 	8	 	 	<	 <	 <	|	, 	, 	,	- 	- 	-	" 	" 	"c	' c	' c	' c	' c	'r$   r  NTFc                    |
r|
| _         nt                              ||nt          j                  | _         ||nt          j        | j         _        |r| j                             |           |r| j                             |           |r| j                             |           |	r| j         	                    |	           || _
        || _        || _        t          j                    | _        t          j        | j                  | _        d | _        d| _        g | _        g | _        g | _        t.          j                            |            d| _        d S r  )r   r
   rm   r`   r   r   r   r   set_alpn_protocolsrS   r  r  r  r   r   r   r6  r=  flagactiver  r  r  r  r  r  r  )r   certificatessl_versioncertreqscacertsr  r  r  alpn_protocolsr   r   s              r"   r  zThreadedEchoServer.__init__F
  sS   
  	2"DLL>>-8-D +6+/2/FH HDL 5=4H-0] L$ <227;;; :,,[999 @//??? 2((111 0.MOO	!+DI66		')$ !!$'''r$   c                     |                      t          j                               | j                                         | S r   startr  Eventr"  waitr   s    r"   	__enter__zThreadedEchoServer.__enter__h
  3    

9?$$%%%	r$   c                 V    |                                   |                                  d S r   )r  r   r   ru   s     r"   __exit__zThreadedEchoServer.__exit__m
  s     				r$   c                 R    || _         t          j                            |            d S r   r"  r  r  r+  r   r"  s     r"   r+  zThreadedEchoServer.startq
  &    	t$$$$$r$   c                    | j                             d           | j                             d           d| _        | j        r| j                                         | j        rf	 | j                                         \  }}t          j        r9| j	        r2t          j                            dt          |          z   dz              |                     | ||          }|                                 |                                 n# t"          $ r9}t          j        r#t          j                            d|d           Y d }~n~d }~wt$          $ r |                                  Y n[t(          $ rO}t          j        r9| j	        r2t          j                            dt          |          z   dz              Y d }~nd }~ww xY w| j        f|                                  d S )Ng      ?r.  Tz server:  new connection from r   z connection timeout z connection handling failed: )r   ro  listenr#  r"  r  r  r   r   r  r   r   r   r   r  r+  r   TimeoutErrorKeyboardInterruptr  BaseExceptionr  )r   newconnconnaddrhandlerr6  s        r"   r  zThreadedEchoServer.runu
  s   	S!!!	9 	IMMOOOk 	JJ$(I$4$4$6$6!? >t{ >J$$%E'+H~~&68<&= > > >00wII E E E? EJ$$%CA%C%C%CDDD$   		  J J J? Jt{ JJ$$7$q''ADHJ J JJ k 	J& 	

s,   %B D 
F?/E!F?'	F?0AF::F?c                 X    | j         "| j                                          d | _         d S d S r   )r   r  r   s    r"   r  zThreadedEchoServer.close
  s/    9 IOODIII ! r$   c                     d| _         d S NF)r#  r   s    r"   r  zThreadedEchoServer.stop
  s    r$   )
NNNNTFFNNNr   )r{  rF  rG  r  r  r  r  r.  r2  r+  r  r  r  rX   r$   r"   rC  rC  	  s        C' C' C' C' C'I, C' C' C'J 6:(,FK $'+	       D  
  % % % %  8  
    r$   rC  c                   `    e Zd Z G d dej                  Zd Zd Zd Zd Z	ddZ
d	 Zd
 ZdS )AsyncoreEchoServerc                   F    e Zd Z G d dej                  Zd Zd Zd ZdS )AsyncoreEchoServer.EchoServerc                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )/AsyncoreEchoServer.EchoServer.ConnectionHandlerc                     t          |d|d          | _        t          j                            | | j                   d| _        |                                  d S )NTF)r   r   r  )r   r   r	   dispatcher_with_sendr  _ssl_accepting_do_ssl_handshake)r   connr   s      r"   r  z8AsyncoreEchoServer.EchoServer.ConnectionHandler.__init__
  sb    .t7?FKM M M -66tT[III&*#&&(((((r$   c                     t          | j        t          j                  rN| j                                        dk    r1|                                  | j                                        dk    1dS )Nr   T)r[   r   r
   r   rV  handle_read_eventr   s    r"   readablez8AsyncoreEchoServer.EchoServer.ConnectionHandler.readable
  sc    dk3=99 1+--//!33..000 +--//!33tr$   c                    	 | j                                          d| _        d S # t          j        t          j        f$ r Y d S t          j        $ r |                                 cY S t          j        $ r  t          $ r?}|j
        d         t          j        k    r|                                 cY d }~S Y d }~d S d }~ww xY w)NFr   )r   rB  rJ  r
   rA  r}  r  handle_closer   r_  ru   r  ECONNABORTEDr   errs     r"   rK  zAAsyncoreEchoServer.EchoServer.ConnectionHandler._do_ssl_handshake
  s    0K,,... +0D''' ,c.CD   FF / / /,,.....|    3 3 3x{e&888#0022222222 9888883s'   $ B="B=&B=>.B8,B=8B=c                 ^   | j         r|                                  d S |                     d          }t          j        r/t
          j                            dt          |          z             |s| 	                                 d S | 
                    |                                           d S )Nr  z server:  read %s from client
)rJ  rK  r`  r   r   r   r   r   r   r  rd  r2  )r   r   s     r"   handle_readz;AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_read
  s    & 	0**,,,,,99T??D Y
(()JTRVZZ)WXXX 0

		$**,,/////r$   c                     |                                   t          j        r)t          j                            d| j        z             d S d S )Nz server:  closed connection %s
)r  r   r   r   r   r   r   r   s    r"   rQ  z<AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_close
  sJ    

? WJ$$%G$+%UVVVVVW Wr$   c                       r   rX   r   s    r"   r   z<AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_error
  s    r$   N)	r{  rF  rG  r  rO  rK  rV  rQ  r   rX   r$   r"   r  rG  
  sq        ) ) )  0 0 0
0 
0 
0W W W
    r$   r  c                    || _         t          j        t          j        t          j                  }t	          j        |d          | _        t          j        	                    | |           | 
                    d           d S )NrT  r.  )r   r   rU  SOCK_STREAMr   r6  r=  r	   
dispatcherr  r8  r  s      r"   r  z&AsyncoreEchoServer.EchoServer.__init__
  s_    $DM=1CDDD%/b99DI((t444KKNNNNNr$   c                     t           j        r"t          j                            d|z             |                     || j                   d S )Nz$ server:  new connection from %s:%s
)r   r   r   r   r   r  r   )r   sock_objr  s      r"   handle_acceptedz-AsyncoreEchoServer.EchoServer.handle_accepted
  sG     P
  !H$!NOOO""8T];;;;;r$   c                       r   rX   r   s    r"   r   z*AsyncoreEchoServer.EchoServer.handle_error
  s    r$   N)	r{  rF  rG  r	   rI  r  r  r^  r   rX   r$   r"   
EchoServerrE  
  so        1	 1	 1	 1	 1	 = 1	 1	 1	f	 	 		< 	< 	<
	 	 	 	 	r$   r`  c                     d | _         d| _        |                     |          | _        | j        j        | _        t
          j                            |            d| _        d S r  )	r"  r#  r`  r<  r=  r  r  r  r  )r   r   s     r"   r  zAsyncoreEchoServer.__init__
  sQ    	ooh//K$	!!$'''r$   c                 2    d| j         j        d| j        dS )N<r~   >)rz  r{  r<  r   s    r"   __str__zAsyncoreEchoServer.__str__
  s       N333T[[[AAr$   c                     |                      t          j                               | j                                         | S r   r*  r   s    r"   r.  zAsyncoreEchoServer.__enter__
  r/  r$   c                    t           j        rt          j                            d           |                                  t           j        rt          j                            d           |                                  t           j        rt          j                            d           t                              d           d S )Nz cleanup: stopping server.
z! cleanup: joining server thread.
z cleanup: successfully joined.
T)
ignore_all)	r   r   r   r   r   r  r   r	   	close_allr1  s     r"   r2  zAsyncoreEchoServer.__exit__
  s    ? 	=J;<<<		? 	CJABBB		? 	AJ?@@@d+++++r$   Nc                 R    || _         t          j                            |            d S r   r4  r5  s     r"   r+  zAsyncoreEchoServer.start
  r6  r$   c                     d| _         | j        r| j                                         | j         r,	 t                              d           n#  Y nxY w| j         *d S d S )NTr   )r#  r"  r  r	   loopr   s    r"   r  zAsyncoreEchoServer.run  st    9 	IMMOOOk 	a    	 k 	 	 	 	 	s   A Ac                 F    d| _         | j                                         d S rA  )r#  r<  r  r   s    r"   r  zAsyncoreEchoServer.stop  s#    r$   r   )r{  rF  rG  r	   r[  r`  r  re  r.  r2  r+  r  r  rX   r$   r"   rC  rC  
  s        B B B B Bh) B B BH  B B B  

, 
, 
,% % % %      r$   rC  r  Fc                 &   i }t          ||d          }|5  |                     t          j                    ||          5 }	|	                    t          |j        f           |t          |          t          |          fD ]}
|r.t          j	        r"t          j                            d|z             |	                    |
           |	                                }|r.t          j	        r"t          j                            d|z             ||                                k    rRt          d|dd         t!          |          |dd                                         t!          |          fz            |	                    d	           |r+t          j	        rt          j                            d
           |                    |	                                |	                                |	                                |	                                |	                                |	j        |	j        d           |	                                 ddd           n# 1 swxY w Y   |j        |d<   |j        |d<   ddd           n# 1 swxY w Y   |S )zW
    Launch a server, connect a client to it and try various reads
    and writes.
    Fr   r  r  )r   session client:  sending %r...
 client:  read %r
4bad data <<%r>> (%d) received; expected <<%r>> (%d)
N      over
 client:  closing connection.
)compressionr  peercertclient_alpn_protocolr9   session_reusedrp  server_alpn_protocolsserver_shared_ciphers)rC  r   r   r  r  r=  r   rY  r   r   r   r   r   rL   r2  AssertionErrorrc   r  rw  r  rs  r  r9   rz  rp  r  r  r  )r   r   indatar  r  sni_namerp  r  r<  r   argoutdatas               r"   server_params_testr    s    E'-168 8 8F 
 "? "?'' (' ( ; ; 	>?IItV[)***	& 1 1:f3E3EF > ># B B
((7&@B B B&&((# J J
(()>)HIIIfllnn,,(O"3B3<W!#2#;,,..F==> > > -
 GGI H? HJ$$%FGGGLL }}((**MMOO()(@(@(B(B99;;"#"29     GGIII?	 	 	 	 	 	 	 	 	 	 	 	 	 	 	@ *0)G%&)/)>%&E"? "? "? "? "? "? "? "? "? "? "? "? "? "? "?F Ls6   *JHIJI	J"I	#JJ
J
c                    |t           j        }t           j        dt           j        dt           j        di|         }t          j        r[|rdpd}t          j                            |t           	                    |          t           	                    |           |fz             t          j                    5  t                               |          }|xj        |z  c_        t                               |           }	|	xj        |z  c_        ddd           n# 1 swxY w Y   t                              |d          }
|
]t!          |	d          rM| t           j        k    r=|	j        |
k    r2t          j                    5  |
|	_        ddd           n# 1 swxY w Y   |j        t           j        k    r|                    d           t+          |	|           ||	fD ]=}||_        |                    t0                     |                    t4                     >	 t7          ||	d	d	
          }|sFt9          dt           	                    |          dt           	                    |           d          |dur'||d         k    rt9          d|d|d                   dS dS # t           j        $ r |r Y dS t<          $ r#}|s|j        t>          j         k    r Y d}~dS d}~ww xY w)a<  
    Try to SSL-connect using *client_protocol* to *server_protocol*.
    If *expect_success* is true, assert that the connection succeeds,
    if it's false, assert that the connection fails.
    Also, if *expect_success* is a string, assert that it is the protocol
    version actually used by the connection.
    Nr   r   r   z %s->%s %s
z {%s->%s} %s
rQ   rU  F)r  r  zClient protocol z  succeeded with server protocol r  Tr9   zversion mismatch: expected z, got )!r
   r   r   r   r   r   r   r   r   get_protocol_namer   r   rm   rx  PROTOCOL_TO_TLS_VERSIONr   rR   r_   rQ   rd   rS   rV   r   r   r   r   r   r  r}  r   r_  r  
ECONNRESET)server_protocolclient_protocolexpect_success	certsreqsserver_optionsclient_optionscerttype	formatstrr   r   min_versionrU   r  r6  s                 r"   try_protocol_combor  ?  s    M	{?? 	H
  %#6K;K	
//@@//@@"$$ 	% 	% 	%
 
	'	)	) 1 188.088.01 1 1 1 1 1 1 1 1 1 1 1 1 1 1 *--otDDK N$566 	  s///*[88 +-- 	9 	9-8N*	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 #"222""5)))777/ . .#O,,,!!*----G">>*/%I I I  	G .((9999((9999;< < < D(( E)$444 .$2NNE)4D4D"F G G G )(44 <    		 	 	    	QW(888 988888sC   5ADDD<FFFJ" "K#7	K# KK#c                   ,   e Zd Zd Zd Zd Zd Z ej        e	j
        d          d             Zd Zd Zd	 Zd
 Z ed          d             Zd Zd Z ed          d             Zd Z ed          d             Z ed          d             Z ed          d             Z ed          d             Zd Zd Zd Zd Zd Zd Zd  Z d! Z!d" Z"d# Z#d$ Z$d% Z% ed          d&             Z& ed           ed          e'd'                                     Z( ed          e'd(                         Z) ed           ed          e'd)                                     Z* ed          d*             Z+d+ Z, ej        d,e	j-        v d-          d.             Z.d/ Z/ ej         e0e	d0          d1          d2             Z1 ej2        e3d3          d4             Z4d5 Z5d6 Z6d7 Z7d8 Z8d9 Z9d: Z:d; Z;d< Z<d= Z=d> Z>d? Z?d@ Z@dA ZAdB ZBdC ZCdD ZDdES )FThreadedTestsc           	      ~   t           j        rt          j                            d           t                      \  }}}|                     t          j        t          j	                  5  t          ||dd|           ddd           n# 1 swxY w Y   d|_        |                     t          j	        t          j                  5  |                     t          j                  5 }t          ||dd|           ddd           n# 1 swxY w Y   |                     dt          |j                             ddd           n# 1 swxY w Y   |                     t          j	        t          j	                  5  |                     t          j                  5 }t          ||dd           ddd           n# 1 swxY w Y   |                     dt          |j                             ddd           n# 1 swxY w Y   |                     t          j        t          j                  5  |                     t          j                  5 }t          ||dd           ddd           n# 1 swxY w Y   |                     dt          |j                             ddd           dS # 1 swxY w Y   dS )	z2Basic test of an SSL client connecting to a serverr   )rh  r<  T)r   r   r  r  r  NFz@Cannot create a client socket with a PROTOCOL_TLS_SERVER context)r   r   r  r  )r   r   r   r   r   r   r   r
   ra   r`   r  r   r   r   r  r\   r  )r   r   r   r   r6  s        r"   	test_echozThreadedTests.test_echo  sw   ? 	#JT"""3B3D3D0\\!8AX\YY 	2 	2n.<&*T(02 2 2 2	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 ).%\\!8AX\YY 		 		""3<00 6A".2@*.,46 6 6 66 6 6 6 6 6 6 6 6 6 6 6 6 6 6
 MMRAK    		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 \\!8AX\YY 	 	""3<00 GA".2@*.G G G GG G G G G G G G G G G G G G G MMRAK    	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 \\!8AX\YY 	" 	"""3<00 GA".2@*.G G G GG G G G G G G G G G G G G G G MMRAK  " " "	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s   )B

BB E'D<ED	ED	+EEE= G<F=1G<=G	G<G	+G<<H H 2 J2I2&J22I6	6J29I6	:+J22J69J6c                 N   t           j        rt          j                            d           t                      \  }}}t          |d          }|5  |                    t          j                    d|          5 }|	                    t          |j        f           |                     t                    5  |                                 d d d            n# 1 swxY w Y   |                                 |                                }|                     |d           |                                }t           j        rft          j                            t%          j        |          dz              t          j                            dt)          |          z   dz              d|vr*|                     d	t%          j        |          z             d
|d         vr|                     d           |                     d|           |                     d|           t.                              |d                   }t.                              |d                   }	|                     ||	           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   Fr   r  )r  r   Can't get peer certificate.zConnection cipher is z.
r7   z$No subject field in certificate: %s.r,   zkMissing or invalid 'organizationName' field in certificate subject; should be 'Python Software Foundation'.r5   r4   )r   r   r   r   r   r   rC  r   r   r  r  r=  r   r   rs  rB  rG  r  r   r   r\   r/  r  r
   r  rE  )
r   r   r   r   r<  r   r  r  beforeafters
             r"   test_getpeercertzThreadedTests.test_getpeercert  s,   ? 	#JT"""3B3D3D0#N5III 	/ 	/++FMOODI<D , F F /IJ		4-... &&z22 $ $MMOOO$ $ $ $ $ $ $ $ $ $ $ $ $ $ $   }}&CDDD? TJ$$V^D%9%9D%@AAAJ$$%<s6{{%JU%RSSSD((IID$nT223 4 4 4I	?+ +IIBC C C k4000j$///11${2CDD00j1ABB...7/ / / / / / / / / / / / / / /	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s[   *J;<J7CJCJC FJ6JJ	J	J	
JJ!Jc                    t           j        rt          j                            d           t                      \  }}}t          t          dd          }|                     |j	        t          j
        |z             t          |d          }|5  |                    t          j                    |          5 }|                    t          |j        f           |                                }|                     |d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |xj	        t          j        z  c_	        t          |d          }|5  |                    t          j                    |          5 }|                     t          j        d          5  |                    t          |j        f           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                    t.                     t          |d          }|5  |                    t          j                    |          5 }|                    t          |j        f           |                                }|                     |d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )	Nr   r  r   Tr  r  r  rv  )r   r   r   r   r   r   r^   r
   r   r  r  rC  r   r   r  r  r=  rs  rG  r  r   r   r   CRLFILE)r   r   r   r   r  r<  r   r  s           r"   test_crl_checkzThreadedTests.test_crl_check  s   ? 	#JT"""3B3D3D0S5q994c6H26MNNN $N4HHH 	E 	E++FMOO<D , F F EIJ		4-...}}&CDDD	E E E E E E E E E E E E E E E	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	##s'@@###N4HHH 	3 	3++FMOO<D , F F 3IJ++CL,GI I 3 3IItV[12223 3 3 3 3 3 3 3 3 3 3 3 3 3 33 3 3 3 3 3 3 3 3 3 3 3 3 3 3	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	,,W555#N4HHH 	E 	E++FMOO<D , F F EIJ		4-...}}&CDDD	E E E E E E E E E E E E E E E	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	Es   )D'8ADD'D	D'D	D''D+.D+)H!G.)"GG.GG.GG."H.G2	2H5G2	6HH	H	=)K&AJ>2K>K	KK	KKKc                    t           j        rt          j                            d           t                      \  }}}t          |d          }|5  |                    t          j                    |          5 }|	                    t          |j        f           |                                }|                     |d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          |d          }|5  |                    t          j                    d          5 }|                     t          j        d          5  |	                    t          |j        f           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          |d          }|5  t          j                    5 }|                     t"          d          5  |                    |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )	Nr   Tr  r  r  r  z:Hostname mismatch, certificate is not valid for 'invalid'.z'check_hostname requires server_hostname)r   r   r   r   r   r   rC  r   r   r  r  r=  rs  rG  r   r
   r  r   )r   r   r   r   r<  r   r  s          r"   r  z!ThreadedTests.test_check_hostname  sW   ? 	#JT"""3B3D3D0 $N4HHH 	E 	E++FMOO<D , F F EIJ		4-...}}&CDDD	E E E E E E E E E E E E E E E	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E $N4HHH 	3 	3++FMOO<E , G G 3JK++,TV V 3 3 IItV[12223 3 3 3 3 3 3 3 3 3 3 3 3 3 33 3 3 3 3 3 3 3 3 3 3 3 3 3 3	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 $N4HHH 	2 	2 2A++J,UW W 2 2"..q1112 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   )C):ACC)C	C)C	C))C-0C-)F-0!F"E?3F?FFFF
F-F	F-F	F--F14F1IH4;HH4H!!H4$H!%H4(I4H8	8I;H8	<IIIz)test requires hostname_checks_common_namec                 (   t                      \  }}}|j        sJ d|_        t          |d          }|5  |                    t	          j                    |          5 }|                    t          |j        f           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          t                    \  }}}d|_        t          |d          }|5  |                    t	          j                    |          5 }| 	                    t          j                  5  |                    t          |j        f           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NFTr  r  )r   r  rC  r   r   r  r  r=  r   r   r
   SSLCertVerificationErrorrD  s         r"   r  z.ThreadedTests.test_hostname_checks_common_name(  s    4C3D3D099995:2 $N4HHH 	/ 	/++FMOO<D , F F /IJ		4-.../ / / / / / / / / / / / / / /	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/
 4C93M3M05:2#N4HHH 	3 	3++FMOO<D , F F 3IJ&&s'CDD 3 3IItV[12223 3 3 3 3 3 3 3 3 3 3 3 3 3 33 3 3 3 3 3 3 3 3 3 3 3 3 3 3	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s   )B$"BB$B	B$B	B$$B(+B(!)F
 E/*"EE/EE/E E/#F/E3	3F6E3	7FFFc                 :   t                               t           j                  }|                    t                     |                    d           t          }t                               t           j                  }|                    t                     t          |d          }|5  |                    t          j                    |          5 }|                    t          |j        f           |                                }|                     |d           |                                d                             d          }|                     |d d         d	           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S 
NzECDHE:ECDSA:!NULL:!aRSATr  r  r  r   -r  )ECDHEECDSA)r
   rm   ra   r   r   rS   SIGNED_CERTFILE_ECC_HOSTNAMEr`   r   SIGNED_CERTFILE_ECCrC  r   r   r  r  r=  rs  rG  r  splitr   r   r   r   r<  r   r  r  s           r"   test_ecc_certzThreadedTests.test_ecc_cert@  s   (?@@,,Z888""#<===/(?@@&&':;;; $N4HHH 	@ 	@++FMOO<D , F F @IJ		4-...}}&CDDDA,,S11rr
,>???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s7   ,)FBE8,F8E<	<F?E<	 FFFc                    t                               t           j                  }|                    t                     t           j        j        |_        |                    d           t          }t                               t           j
                  }|                    t                     |                    t                     t          |d          }|5  |                    t!          j                    |          5 }|                    t$          |j        f           |                                }|                     |d           |                                d                             d          }|                     |d d         d	           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S r  )r
   rm   ra   r   r   r   rl   ri   rS   r  r`   r   r  r   rC  r   r   r  r  r=  rs  rG  r  r  r  s           r"   test_dual_rsa_ecczThreadedTests.test_dual_rsa_eccU  s$   (?@@,,Z888 *-)?&""#<===/(?@@&&':;;;&&777 $N4HHH 	@ 	@++FMOO<D , F F @IJ		4-...}}&CDDDA,,S11rr
,>???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s7   )G BF(G (F,	,G /F,	0G  GGc                    t           j        rt          j                            d           t
                              t
          j                  }|                    t                     t
                              t
          j
                  }t
          j        |_        d|_        |                    t                     g d}|D ]\  }}t!          |d          }|5  |                    t%          j                    |          5 }|                     |j        |           |                    t,          |j        f           |                                }|                     |j        |           |                     |d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t!          |d          }|5  |                    t%          j                    d          5 }|                     t
          j                  5  |                    t,          |j        f           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   T))u   könig.idn.pythontest.netxn--knig-5qa.idn.pythontest.net)r  r  )s   xn--knig-5qa.idn.pythontest.netr  )u(   königsgäßchen.idna2003.pythontest.net.xn--knigsgsschen-lcb0w.idna2003.pythontest.net)r  r  )s.   xn--knigsgsschen-lcb0w.idna2003.pythontest.netr  ).xn--knigsgchen-b4a3dun.idna2008.pythontest.netr  )s.   xn--knigsgchen-b4a3dun.idna2008.pythontest.netr  r  r  r  zpython.example.org)r   r   r   r   r   r
   rm   r`   r   IDNSANSFILEra   r   r   r   r   r   rC  r   r   r   r   r  r  r=  rs  rG  r   r  )	r   r   r   idn_hostnamesr   expected_hostnamer<  r   r  s	            r"   test_check_hostname_idnz%ThreadedTests.test_check_hostname_idno  s   ? 	#JT"""(?@@&&{333..!899!/!%%%j111
 
 
. 3@ 		I 		I.O.'tLLLF I I((9H ) J J IMN$$Q%68IJJJIItV[1222==??D$$Q%68IJJJOOD*GHHHI I I I I I I I I I I I I I II I I I I I I I I I I I I I I $N4HHH 	3 	3$$V]__5I % K K 3NO&&s';<< 3 3IItV[12223 3 3 3 3 3 3 3 3 3 3 3 3 3 33 3 3 3 3 3 3 3 3 3 3 3 3 3 3	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s   )F,BF	F,FF,FF,,F0	3F0	)I14 I"I6III	I
II1I	I1 I	!I11I58I5c                 6   t                      \  }}}|                    t                     t          j        |_        t          j        j        |_        t          |dd          }|5  |
                    t          j                    |          5 }	 |                    t          |j        f           |                     d           n# t          j        $ r8}t"          j        r"t&          j                            d|z             Y d}~n^d}~wt,          $ rN}|j        t.          j        k    r t"          j        r"t&          j                            d|z             Y d}~nd}~ww xY wddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )zConnecting when the server rejects the client's certificate

        Launch a server with CERT_REQUIRED, and check that trying to
        connect to it with a wrong client certificate fails.
        Tro  r  z'Use of invalid cert should have failed!z
SSLError is %r
Nz
socket.error is %r
)r   r   r   r
   r   r   r   rl   ri   rC  r   r   r  r  r=  r/  r   r   r   r   r   r   r_  r  r  r   r   r   r   r<  r   r6  s          r"   test_wrong_cert_tls12z#ThreadedTests.test_wrong_cert_tls12  sI    4C3D3D0&&x000%(%6"),)?&#"4$
 
 
  	E 	E**6=??;C + E E	EHIE 		4-... 		CDDDD < ? ? ?? ?J$$%9A%=>>> C C C7e...? CJ$$%=%ABBB	C	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	Ess   ()FE6!C
4E6
E'.DE6E'AE"E6"E''E6*F6E:	:F=E:	>FFFr  c                    t                      \  }}}|                    t                     t          j        |_        t          j        j        |_        t          j        j        |_        t          |dd          }|5  |
                    t          j                    |d          5 }|                    t          |j        f           |                     t          j        d          5  |                    d           |                    d           |                    d           |                    d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )	NTro  Fr   suppress_ragged_eofszalert unknown ca|EOF occurred   datar  s   should have failed already)r   r   r   r
   r   r   r   r  rQ   rC  r   r   r  r  r=  r   r   r   rL   rD  s         r"   test_wrong_cert_tls13z#ThreadedTests.test_wrong_cert_tls13  s'   3B3D3D0&&x000%(%6"),)?&),)?&#"4$
 
 
  	 	''8@=B ( D D	 HIIItV[)***''/   
    t5666t              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s\   >*E:(AE"*AE?E"EE"EE"E:"E&	&E:)E&	*E::E>E>c                     t          j                    t          j                    t          j                    t          j        t
                    fd} fd}t          j        |          }|                                 	  |             |                                 dS # |                                 w xY w)ztA brutal shutdown of an SSL server should raise an OSError
        in the client when attempting handshake.
        c                                                                                                                         \  } }|                                                                                                    d S r   )r8  r  r  r  )newsockr  listener_gonelistener_readyr   s     r"   listenerz2ThreadedTests.test_rude_shutdown.<locals>.listener  se    HHJJJ   HHJJMGTMMOOOGGIIIr$   c                  T                                     t          j                    5 } |                     t          f                                             	 t	          |           }                    d           n# t          $ r Y nw xY wd d d            d S # 1 swxY w Y   d S )Nz2connecting to closed SSL socket should have failed)r-  r   r  r  r   r/  r_  )r  r  r  r  r=  r   s     r"   	connectorz3ThreadedTests.test_rude_shutdown.<locals>.connector  s
   !!! TA		4,'''""$$$T/22H IIRSSSS    DT T T T T T T T T T T T T T T T T Ts5   1BB *B 
B
BBBB!$B!targetN)	r  r,  r   r   r6  r  r  r+  r   )r   r  r  rJ  r  r  r=  r   s   `   @@@@r"   test_rude_shutdownz ThreadedTests.test_rude_shutdown  s     #**!))MOO&q$//	  	  	  	  	  	  	 
	T 
	T 
	T 
	T 
	T 
	T 
	T 
	T H---					IKKKFFHHHHHAFFHHHHs   
B2 2Cc           	         t           j        rt          j                            d           t
                              t
          j                  }|                    t                     t
                              t
          j
                  }t          |d          }|5  |                    t          j                    t                    5 }	 |                    t           |j        f           n# t
          j        $ r}d}|                     |t
          j                   |                     |j        d           |                     |j        |           |                     |t3          |                     |                     dt3          |                     Y d }~nd }~ww xY wd d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   Tr  r  z&unable to get local issuer certificatert  rv  )r   r   r   r   r   r
   rm   r`   r   r   ra   rC  r   r   r   r  r  r=  r   rA  r  r   verify_codeverify_messager  r   )r   r   r   r<  r   r6  r  s          r"   test_ssl_cert_verify_errorz(ThreadedTests.test_ssl_cert_verify_error  sS   ? 	#JT"""(?@@&&777..!899#N4HHH 	H 	H$$V]__5M % O O 
HRSHIItV[12222| H H HBC))!S-IJJJ$$Q]B777$$Q%5s;;;MM#tAww///MM"=tAwwGGGGGGGGH	
H 
H 
H 
H 
H 
H 
H 
H 
H 
H 
H 
H 
H 
H 
H	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	Hsa   !.GF9!C32F93F*BF% F9%F**F9-G9F=	=G F=	GGGrg   c                 &   t           j        rt          j                            d           t          t          j        t          j        d           t          t          j        t          j        dt          j                   t          t          j        t          j        dt          j	                   t          t          j        t          j
        d           t          d          r%t          t          j        t          j        d           t          t          j        t          j        d           t          t          j        t          j
        dt          j                   t          t          j        t          j
        dt          j                   dS )z9Connecting to an SSLv2 server with various client optionsr   TFr   r  N)r   r   r   r   r   r  r
   PROTOCOL_SSLv2r   r   r_   rb   PROTOCOL_SSLv3r   r   r   r   s    r"   test_protocol_sslv2z!ThreadedTests.test_protocol_sslv2'  s)    ? 	#JT"""3-s/A4HHH3-s/A4IZ[[[3-s/A4IZ[[[3-s/?GGG7## 	Ns133EuMMM3-s/A5III3-s/?*-/	; 	; 	; 	;3-s/?*-/	; 	; 	; 	; 	; 	;r$   c                    t           j        rt          j                            d           t          d          ry	 t          t          j        t          j	        d           nR# t          $ rE}t           j        r/t          j                            dt          |          z             Y d}~nd}~ww xY wt          d          r%t          t          j        t          j        d           t          t          j        t          j        d           t          d          r%t          t          j        t          j        d           t          d          r0t          t          j        t          j        dt          j                   t          t          j        t          j        dt          j                   t          d          r0t          t          j        t          j        dt          j                   t          d          r0t          t          j        t          j        dt          j                   t          t          j        t          j        dt          j                   t          d          r0t          t          j        t          j        dt          j                   t          d          r1t          t          j        t          j        dt          j        	           t          t          j        t          j        dt          j        t          j        z  	           t          d          r3t          t          j        t          j        dt          j        	           dS dS )
z:Connecting to an SSLv23 server with various client optionsr   rg   Tz; SSL2 client to SSL23 server test unexpectedly failed:
 %s
Nr   Fr   )r  )r   r   r   r   r   rb   r  r
   r_   r  r_  r\   r  r   r   r   r   r   r   )r   r  s     r"   test_PROTOCOL_TLSzThreadedTests.test_PROTOCOL_TLS9  s   ? 	#JT"""7## 	"""3#3S5GNNNN " " "? "J$$Wa&&!" " "" 7## 	Ls/1CUKKK3+S-=tDDD7## 	Ns/1CWMMM7## 	_s/1CUCL]^^^3+S-=tSEVWWW7## 	as/1CWcN_```7## 	_s/1CUCL]^^^3+S-=tSEVWWW7## 	as/1CWcN_``` 7## 	;s/1CU*-/; ; ; ; 	3+S-=t*-/CO*K	M 	M 	M 	M7## 	?s/1CU.1o? ? ? ? ? ?	? 	?s   %A" "
B1,;B,,B1r   c                 z   t           j        rt          j                            d           t          t          j        t          j        d           t          t          j        t          j        dt          j                   t          t          j        t          j        dt          j	                   t          d          r%t          t          j        t          j        d           t          t          j        t          j        dt          j                   t          t          j        t          j        d           dS )z9Connecting to an SSLv3 server with various client optionsr   r   rg   Fr  N)r   r   r   r   r   r  r
   r  r   r   rb   r  r_   r   r   r   s    r"   test_protocol_sslv3z!ThreadedTests.test_protocol_sslv3c  s     ? 	#JT"""3-s/A7KKK3-s/A7CL]^^^3-s/A7CL]^^^7## 	Ns133EuMMM3-s/?*-/	; 	; 	; 	;3-s/A5IIIIIr$   r   c                    t           j        rt          j                            d           t          t          j        t          j        d           t          t          j        t          j        dt          j                   t          t          j        t          j        dt          j	                   t          d          r%t          t          j        t          j        d           t          d          r%t          t          j        t          j        d           t          t          j        t          j        dt          j                   dS )z8Connecting to a TLSv1 server with various client optionsr   r   rg   Fr   r  N)r   r   r   r   r   r  r
   r   r   r   rb   r  r  r_   r   r   s    r"   test_protocol_tlsv1z!ThreadedTests.test_protocol_tlsv1q  s     ? 	#JT"""3-s/A7KKK3-s/A7CL]^^^3-s/A7CL]^^^7## 	Ns133EuMMM7## 	Ns133EuMMM3-s/?*-/	; 	; 	; 	; 	; 	;r$   r   c                    t           j        rt          j                            d           t          t          j        t          j        d           t          d          r%t          t          j        t          j	        d           t          d          r%t          t          j        t          j
        d           t          t          j        t          j        dt          j                   t          t          j        t          j        d           t          t          j        t          j        d           t          t          j        t          j        d           dS )zjConnecting to a TLSv1.1 server with various client options.
           Testing against older TLS versions.r   TLSv1.1rg   Fr   r  N)r   r   r   r   r   r  r
   r   rb   r  r  r_   r   ru  r   s    r"   test_protocol_tlsv1_1z#ThreadedTests.test_protocol_tlsv1_1  s    ? 	#JT"""3/1EyQQQ7## 	Ps3S5GOOO7## 	Ps3S5GOOO3/1A5*-*;	= 	= 	= 	= 	3+S-A9MMM3/1EuMMM3/1EuMMMMMr$   rl   c                    t           j        rt          j                            d           t          t          j        t          j        dt          j        t          j	        z  t          j        t          j	        z             t          d          r%t          t          j        t          j        d           t          d          r%t          t          j        t          j        d           t          t          j        t          j        dt          j                   t          t          j        t          j        d           t          t          j                  rJt          t          j        t          j        d           t          t          j        t          j        d           t          t          j                  rLt          t          j        t          j        d           t          t          j        t          j        d           dS dS )	zjConnecting to a TLSv1.2 server with various client options.
           Testing against older TLS versions.r   TLSv1.2)r  r  rg   Fr   r  N)r   r   r   r   r   r  r
   ru  r   r   rb   r  r  r_   r   re   r   r   r   s    r"   test_protocol_tlsv1_2z#ThreadedTests.test_protocol_tlsv1_2  s    ? 	#JT"""3/1Ey*-/#/*I*-/#/*I	L 	L 	L 	L 7## 	Ps3S5GOOO7## 	Ps3S5GOOO3/1A5*-*;	= 	= 	= 	= 	3+S-A9MMMC.// 	Ps3S5GOOOs133GOOOC011 	Rs3S5I5QQQs3S5I5QQQQQ	R 	Rr$   c                    d}t          t          ddd          }d}|5  t          j                    }|                    d           |                    t
          |j        f           t          j        rt          j
                            d           |D ]}t          j        r"t          j
                            d|z             |r*|                    |           |                                }n*|                    |           |                    d          }|                                                                }|dk    rV|                    d	          rAt          j        r"t          j
                            d
|z             t%          |          }d}	|dk    r[|                    d	          rFt          j        r"t          j
                            d|z             |                                }d}jt          j        r"t          j
                            d|z             t          j        rt          j
                            d           |r|                    d           n|                    d           |r|                                 n|                                 ddd           dS # 1 swxY w Y   dS )z6Switching from clear text to encrypted and back again.)s   msg 1s   MSG 2r  s   MSG 3s   msg 4r  s   msg 5s   msg 6T)r  r  r  Fr   rq  r  r  s   okz/ client:  read %r from server, starting TLS...
r  z- client:  read %r from server, ending TLS...
z client:  read %r from server
rv  ru  N)rC  r   r   r@  r  r  r=  r   r   r   r   r   rL   rd  r`  r  r2  r]   r   ra  r  )	r   msgsr<  wrappedr   r~  rL  r  r  s	            r"   test_starttlszThreadedTests.test_starttls  s   c#H48+/59; ; ;  .	 .	AMM$IItV[)*** '
  &&& E E? >J$$3f<> > > +JJv&&&"iikkGGFF6NNNffTllGmmoo++--[((S^^E-B-B( #
((N!"# # # ,A..D"GGy((S^^E-B-B( #
((L!"# # # A#GG E
((=CE E E D
  !BCCC "

9%%%%y!!! 

			].	 .	 .	 .	 .	 .	 .	 .	 .	 .	 .	 .	 .	 .	 .	 .	 .	 .	s   JK  KKc                    t          | t                    }t          j        rt          j                            d           t          t          d          5 }|	                                }ddd           n# 1 swxY w Y   d}d|j
        t          j                            t                    d         fz  }t                              t                     }t"          j                            ||	          }	 |                                                    d
          }|rrt-          |          dk    r_|	                    t-          |                    }t          j        r1t          j                            dt/          |          |fz             |                                 n# |                                 w xY w|                     ||           dS )z8Using socketserver to create and manage SSL connections.r  r   rbNrT  zhttps://localhost:%d/%sr   r  rB  zcontent-lengthr   z/ client: read %d bytes from remote server '%s'
)r  r   r   r   r   r   r   rK   r   rL   r=  r   r   r  r
   r  r   urllibrequesturlopeninfor   rB  rc   r  r   )r   r<  rN   r3  r5  urlr   dlens           r"   test_socketserverzThreadedTests.test_socketserver  s   "4/BBB? 	#JT"""(D!! 	QB	 	 	 	 	 	 	 	 	 	 	 	 	 	 	'Kx003+5 5,,J,??N""3"88		6688<< 011D -TQVVCII&&? -J$$Jr77F+,- - - GGIIIIAGGIIIIR     s   A88A<?A<;BF+ +Gc           
         t           j        rt          j                            d           d}t          t                    }|5  t          t          j                              }|	                    d|j
        f           t           j        r"t          j                            d|z             |                    |           |                                }t           j        r"t          j                            d|z             ||                                k    rX|                     d|dd         t          |          |dd                                         t          |          fz             |                    d	           t           j        rt          j                            d
           |                                 t           j        rt          j                            d           ddd           dS # 1 swxY w Y   dS )z'Check the example asyncore integration.r   r  r&  rq  rr  rs  Nrt  ru  rv  z client:  connection closed.
)r   r   r   r   r   rC  r   r   r   r  r=  rL   r2  r/  rc   r  )r   r~  r<  r   r  s        r"   test_asyncore_serverz"ThreadedTests.test_asyncore_server  s   ? 	#JT"""#H-- 	C 	C 11AII{FK0111 :
  /&8: : :GGFOOOffhhG B
  !6!@AAA&,,..((		Kss|S\\crc{((**CKK99: : : GGI D
  !BCCCGGIII C
  !ABBB)	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cs   F1HH	Hc                    t           j        rt          j                            d           t          t          t          j        t          j	        t          dd          }|5  t          t          j                    dt          t          t          j                                      t          |j        f           fd}fd}dj        dg t           fd	j        dd
gt           fdj        dg d fg}dj        dg fdj        dd
gfd|dg fd|dg fg}d}|D ]r\  }}}	}
}||z                       d          }	  ||g|
R  }d                    |          }|                     | ||          |                                           }||                                k    rW|                     d                    ||dd         t!          |          |dd         t!          |                               # t6          $ r}|	r)|                     d                    |                     t9          |                              |          s*|                     d                    ||                     Y d}~ld}~ww xY w|D ]L\  }}}	}
||z                       d          }	                     |            ||
 }||                                k    rW|                     d                    ||dd         t!          |          |dd         t!          |                               # t6          $ r}|	r)|                     d                    |                     t9          |                              |          s*|                     d                    ||                                                      Y d}~Fd}~ww xY wd}                    |           t=          t!          |                    }|                                         d |          t!          |                     |                     ||           t>          nt>          j         t!          |          z  }|!                    |          }                    |           |                                                     |           | "                    tF          j$                   | "                    tF          j%        dg           | "                    tF          j&        d!           | "                    tF          j'        t=          d!          g                               d"           | "                    t6          j        d            | "                    t6          j        d            (                                 ddd           dS # 1 swxY w Y   dS )#z Test recv(), send() and friends.r   TFr&  r%  r'  r  r  r   r   r   r   c                  `    t          d          }                     |           }| d |         S Nsd                                                                                                       )r   ra  )br  r   s     r"   
_recv_intoz0ThreadedTests.test_recv_send.<locals>._recv_into-  s-    i((A%y r$   c                  f    t          d          }                     |           \  }}| d |         S r  )r   rc  )r  r  r  r   s      r"   _recvfrom_intoz4ThreadedTests.test_recv_send.<locals>._recvfrom_into2  s3    i((ooa00t%y r$   rd  re  zsome.addressr  c                     d S r   rX   )r  s    r"   <lambda>z.ThreadedTests.test_recv_send.<locals>.<lambda>;  s    4 r$   r`  rb  ra  rc  PREFIX_r  zsending with {}r  zpWhile sending with <<{name:s}>> bad data <<{outdata:r}>> ({nout:d}) received; expected <<{indata:r}>> ({nin:d})
Nrt  )r!   r  noutr~  ninz>Failed to send with method <<{name:s}>>; expected to succeed.
r    zFMethod <<{name:s}>> failed with unexpected exception message: {exp:s}
)r!   expzrWhile receiving with <<{name:s}>> bad data <<{outdata:r}>> ({nout:d}) received; expected <<{indata:r}>> ({nin:d})
zAFailed to receive with method <<{name:s}>>; expected to succeed.
r  r  r^  ru  ))r   r   r   r   r   rC  r   r
   r   r`   r   r   r  r  r=  rd  rc   re  r  r`  rb  r  formatr   rL   r2  r/  r   r\   r]   r   ctypesc_ubytefrom_buffer_copyr   rf  rg  rh  ri  rj  r  )r   r<  r  r  send_methodsrecv_methodsdata_prefix	meth_name	send_methr  ru   ret_val_methr~  r  r  r  r6  	recv_methr   bufferubyte	bytesliker   s                         @r"   test_recv_sendzThreadedTests.test_recv_send  s   ? 	#JT"""#H-0]030G,4+/5:< < <  {	 {	 ,1)1)1*--	9 9 9A
 IItV[)***! ! ! ! !
! ! ! ! ! r3/18U^,<cBAItR@L r*QZ0@Aj$3 .%<	L $K &2  "I~t %	199'BB#)F2T222C+229==C$$S,,v*>*>C$HHHffhhG&,,..00		BBH&%.%(\\'-crc{F CI C C   "   % 		55;VV5K5K   q66,,Y77 		;;A6%.A <B < <   ?K  :	9nd%	199'BBFF6NNN'i.G&,,..00		BBH&%.%(\\'-crc{F CI C C   "   % 		55;VV5K5K   q66,,Y77 		;;A6%.A <B < <   FFHHHHHHHH" DFF4LLLs4yy))FQVVB//T;;;VT*** !T2!22488			)$$$  4000
 115999119wiHHH119cBBB1ny~~.>@ @ @GGIj!&"555j!&"555GGIIIw{	 {	 {	 {	 {	 {	 {	 {	 {	 {	 {	 {	 {	 {	 {	 {	 {	 {	sl   "CW=CH ?W 
J
A7JWJ%W2B	L<;W<
OBOWOG5WW"%W"c                 &   t          t                    }|                     |           t          j        t
          |j        f          }|                     |j                   t          |d          }|                     |j                   |
                    d           |                     |                    d          d           |                     |                    d          d           |                     |                                d           |                    d           |                     |                    d          d           |                     |                    t!                                d           d S )NF)r  r  r   r$   )rC  r   rn  r   r?  r  r=  r  r  r   rd  r   r`  rL   r@  ra  r   )r   r<  r   s      r"   test_recv_zerozThreadedTests.test_recv_zero  sC   #H--&!!!$dFK%899   QU;;;    	
wC(((C(((7+++ 	
eC(((Y[[11155555r$   c                 X   t          t          t          j        t          j        t          dd          }|5  t          t          j                    dt          t          t          j                                      t          |j	        f           
                    d           t          d          fd}|                     t          j        t          j        f|           
                    d                                            d d d            d S # 1 swxY w Y   d S )NTFr  r  i    c                  2    	                                  r   )rd  )r  r   s   r"   fill_bufferz8ThreadedTests.test_nonblocking_send.<locals>.fill_buffer  s     FF3KKK r$   )rC  r   r
   r   r`   r   r   r  r  r=  r@  r   r   r}  rA  r  )r   r<  r  r  r   s      @@r"   test_nonblocking_sendz#ThreadedTests.test_nonblocking_send  sm   #H-0]030G,4+/5:< < <  	 	 ,1)1)1*--	9 9 9A
 IItV[)***MM%    D//C            s4"356AC C C MM$GGIII)	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   CDD#&D#c                 <   t          j         t           j                  d}t          j                  }t	          j                    dfd}t	          j        |          }|                                                                  	 	 t          j         t           j                  }|	                    d           |
                    ||f           |                     t          dt          |           |                                 n# |                                 w xY w	 t          j         t           j                  }t          |          }|	                    d           |                     t          d|j
        ||f           |                                 n# |                                 w xY w	 d|                                                                  d S # d|                                                                  w xY w)Nr&  Fc                  0                                                                      g } sOt          j        gg g d          \  }}}|v r-|                                                     d                    O| D ]}|                                 d S )Nr  r   )r8  r  r|  r  r  r  )connsr*  wr6  r   finishr<  starteds        r"   servez3ThreadedTests.test_handshake_timeout.<locals>.serve  s    MMOOOKKMMME 5 -"b#>>1aQ;; LL!3444  5   

 r$   r  r  z	timed outT)r   rU  r   r6  r  r,  r  r+  r-  ro  r  r   r9  r   r  r   )	r   r  r=  r  rJ  r  r  r<  r  s	         @@@r"   test_handshake_timeoutz$ThreadedTests.test_handshake_timeout  s   v~..&v../##	 	 	 	 	 	 	 E***					M&.11S!!!		4,'''&&|['7< < < 								M&.11$Q''S!!!&&|['(y4,@ @ @ 									FFFHHHLLNNNNN FFFHHHLLNNNNs8   A,D ?G/ D**G/ .A&F) G/ )F??G/ /,Hc                   
 t                      \  }}}t          j        t          j                  d}t          j                  }|                    d          |                     j                   t          j	                    
d d 
fd}t          j
        |          }|                                 
                                 |                    t          j                    |          }|                    ||f           |                    d           |                                 |                                }	|                                 |                                                                                                   |                     t(          j                   |                     |	           d S )Nr&  Tr  c                                                                                                                          \                                          d                     d S )Nr8  )r8  r  r  rd  r`  )evtpeerremoter<  s   r"   r  z/ThreadedTests.test_server_accept.<locals>.serve  sP    MMOOOGGIII!==??LFDKKA'''''r$   r  r  r  )r   r   rU  r   r6  r   rG  r   r  r,  r  r+  r-  r  rd  r`  r  r  r   rA  r
   r   r   )r   rb  rc  r   r  r=  r  rJ  rh  client_addrr  r  r  r<  s             @@@@r"   test_server_acceptz ThreadedTests.test_server_accept  s    ,;+<+<(
Jv~..&v..''D'AA*+++o	( 	( 	( 	( 	( 	( 	( 	( E***				


''MOOX ( 
 
 	$'(((G((**	fcm444{+++++r$   c                    t                               t           j                  }d|_        |                    t          j                              5 }|                     t                    5 }|                                 d d d            n# 1 swxY w Y   | 	                    |j
        j        t          j                   d d d            d S # 1 swxY w Y   d S rA  )r
   rm   ra   r   r   r   r   r_  rs  r   r  r  ENOTCONNr   r   r   r~  s       r"   test_getpeercert_enotconnz'ThreadedTests.test_getpeercert_enotconn+  sA   ..!899!&  11 	AT""7++ #r  """# # # # # # # # # # # # # # #R\/@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A6   C-BCB	CB	-CCCc                    t                               t           j                  }d|_        |                    t          j                              5 }|                     t                    5 }|                                 d d d            n# 1 swxY w Y   | 	                    |j
        j        t          j                   d d d            d S # 1 swxY w Y   d S rA  )r
   rm   ra   r   r   r   r   r_  rB  r   r  r  r"  r#  s       r"   test_do_handshake_enotconnz(ThreadedTests.test_do_handshake_enotconn3  sA   ..!899!&  11 	AT""7++ $r!!###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $R\/@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	Ar%  c                 b   t                      \  }}}t          j        j        |_        |                    d           |                    d           t          |          5 }|                    t          j                    |          5 }| 	                    t                    5  |                    t          |j        f           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     d|j        d                    d S )NAES128AES256rB  r  zno shared cipherr   )r   r
   r   rl   ri   rS   rC  r   r   r   r_  r  r  r=  r  r  rD  s         r"   test_no_shared_ciphersz$ThreadedTests.test_no_shared_ciphers;  s   3B3D3D0),)?&""8,,,""8,,,777 	36++FMOO<D , F F 3IJ&&w// 3 3IItV[12223 3 3 3 3 3 3 3 3 3 3 3 3 3 33 3 3 3 3 3 3 3 3 3 3 3 3 3 3	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3
 	(&*<Q*?@@@@@sZ   #)DC,'"C	C,CC,CC, D,C0	0D3C0	4DD
Dc                    t                               t           j                  }d|_        t           j        |_        t          t          t           j        d          5 }|	                    t          j
                              5 }|                     |                                d           |                     |j        d           |                    t          |j        f           |                     |                                d           ddd           n# 1 swxY w Y   |                     |j        d           |                     |                                d           ddd           dS # 1 swxY w Y   dS )zt
        Basic tests for SSLSocket.version().
        More tests are done in the test_protocol_*() methods.
        F)r%  r  NTLSv1.3)r
   rm   ra   r   r   r   rC  r   r`   r   r   r   r9   r  r  r  r=  r   )r   r   r<  r   s       r"   test_version_basicz ThreadedTests.test_version_basicI  s   
 ..!899!&!m,/,C',. . . 		-17$$V]__55 9aiikk4000ai...		4-...  i888	9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
 MM!)T***MM!))++t,,,		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		-s8   'E9BDE9D"	"E9%D"	&AE99E= E=c                    t                      \  }}}t          j        j        |_        t          |          5 }|                    t          j                    |          5 }|                    t          |j
        f           |                     |                                d         h d           |                     |                                d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NrB  r  r   >   TLS_AES_128_GCM_SHA256TLS_AES_256_GCM_SHA384TLS_CHACHA20_POLY1305_SHA256r-  )r   r
   r   r  rQ   rC  r   r   r  r  r=  r  r  r   r9   rD  s         r"   test_tls1_3zThreadedTests.test_tls1_3\  sz   3B3D3D0),)?&777 		96++FMOO<D , F F 9IJ		4-...ahhjjm . . .   
   i8889 9 9 9 9 9 9 9 9 9 9 9 9 9 9		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9s6   )D "A:C(D (C,	,D /C,	0D  DDc                 >   t                      \  }}}t          j        j        |_        t          j        j        |_        t          j        j        |_        t          j        j        |_        t          |          5 }|                    t          j	                    |          5 }|
                    t          |j        f           |                     |                                d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NrB  r  r  )r   r
   r   r   rQ   rl   ri   rC  r   r   r  r  r=  r   r9   rD  s         r"   test_min_max_version_tlsv1_2z*ThreadedTests.test_min_max_version_tlsv1_2k  so    4C3D3D0),)=&),)?&),)?&),)?&777 	96++FMOO<D , F F 9IJ		4-...  i8889 9 9 9 9 9 9 9 9 9 9 9 9 9 9	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s7   ;)D$A
C:.D:C>	>DC>	DDDc                 ^   t                      \  }}}t          j        j        |_        t          j        j        |_        t          j        j        |_        t          j        j        |_        t          ||           t          |          5 }|
                    t          j                    |          5 }|                    t          |j        f           |                     |                                d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NrB  r  r  )r   r
   r   r   rQ   rl   ri   r   rV   rC  r   r   r  r  r=  r   r9   rD  s         r"   test_min_max_version_tlsv1_1z*ThreadedTests.test_min_max_version_tlsv1_1}  s    4C3D3D0),)=&),)?&),)=&),)?&NN;;;777 	96++FMOO<D , F F 9IJ		4-...  i8889 9 9 9 9 9 9 9 9 9 9 9 9 9 9	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s7   )D"4A
D
>D"
D	D"D	D""D&)D&c                    t                      \  }}}t          j        j        |_        t          j        j        |_        t          j        j        |_        t          j        j        |_        t          ||           t          |          5 }|	                    t          j
                    |          5 }|                     t          j                  5 }|                    t          |j        f           d d d            n# 1 swxY w Y   |                     dt#          |j                             d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NrB  r  alert)r   r
   r   rl   ri   rQ   r   rV   rC  r   r   r   r   r  r  r=  r  r\   r  r  s          r"   test_min_max_version_mismatchz+ThreadedTests.test_min_max_version_mismatch  s    4C3D3D0),)?&),)?&),)=&),)=&NN;;;777 	96++FMOO<D , F F 9IJ&&s|44 3IItV[12223 3 3 3 3 3 3 3 3 3 3 3 3 3 3gs1;'7'7888	9 9 9 9 9 9 9 9 9 9 9 9 9 9 9	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9sZ   )E4 E"D6EDE	D
+E5EE	EE		EE Ec                 2   t                      \  }}}t          j        j        |_        t          j        j        |_        t          j        j        |_        t          ||           t          |          5 }|                    t          j	                    |          5 }|
                    t          |j        f           |                     |                                d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NrB  r  r   )r   r
   r   r   rQ   ri   rV   rC  r   r   r  r  r=  r   r9   rD  s         r"   test_min_max_version_sslv3z(ThreadedTests.test_min_max_version_sslv3  so   3B3D3D0),)=&),)=&),)=&NN;;;777 	76++FMOO<D , F F 7IJ		4-...  g6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s7   5)DA
C4(D4C8	8D;C8	<DDDc                    t                      \  }}}t          j        j        |_        t          |          5 }|                    t          j                    |          5 }|                    t          |j
        f           |                     d|                                d                    d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NrB  r  ECDHr   )r   r
   r   rl   ri   rC  r   r   r  r  r=  r  r  rD  s         r"   test_default_ecdh_curvez%ThreadedTests.test_default_ecdh_curve  sN    4C3D3D0 *-)?&
  777 	56++FMOO<D , F F 5IJ		4-...fahhjjm4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s6   )C"AB>2C>C	CC	CCCr  r  c                 j   t           j        rt          j                            d           t                      \  }}}t          |dd          }|5  |                    t          j                    |          5 }|	                    t          |j        f           |                    d          }t           j        r2t          j                            d                    |                     |                     |           |                                dk    r$|                     t#          |          d	           n#|                     t#          |          d
           |                    d           |                                                                }|                     |t)          |                              d                     ddd           n# 1 swxY w Y   |                    t          j                    |          5 }|	                    t          |j        f           |                    d          }t           j        r2t          j                            d                    |                     |                     ||           |                     |           |                                dk    r$|                     t#          |          d	           n#|                     t#          |          d
           |                    d           |                                                                }|                     |t)          |                              d                     ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z Test tls-unique channel binding.r   TFro  r  r  z! got channel binding data: {0!r}
r-  0      s   CB tls-unique
r  Nz(got another channel binding data: {0!r}
)r   r   r   r   r   r   rC  r   r   r  r  r=  r  r  r  r9   r   rc   rL   r  r   r  assertNotEqual)	r   r   r   r   r<  r   cb_datapeer_data_reprnew_cb_datas	            r"   r  z-ThreadedTests.test_tls_unique_channel_binding  sQ    ? 	#JT"""3B3D3D0#N+/5:< < <  -	G -	G++MOO$, , . . C12		4-...//==? NJ$$<CCGLLN N N $$W---99;;)++$$S\\26666$$S\\2666 *+++!"!1!1  !%g!5!5j!A!AC C C)C C C C C C C C C C C C C C C0  ++MOO$, , . . G12		4-...33LAA? J$$CJJ') )  
 ##G[999$$W---99;;)++$$S\\26666$$S\\2666*+++!"!1!1  !%k!2!2!9!9*!E!EG G G'G G G G G G G G G G G G G G G3-	G -	G -	G -	G -	G -	G -	G -	G -	G -	G -	G -	G -	G -	G -	G -	G -	G -	Gs\   )N(;EG!N(!G%	%N((G%	)+N(E0NN(N	N(N	N((N,/N,c                    t                      \  }}}t          ||dd|          }t          j        r8t          j                            d                    |d                              |                     |d         h d           d S )NTr  r  r  z got compression: {!r}
rw  >   NRLEZLIB)	r   r  r   r   r   r   r   r  r  r   r   r   r   r  s        r"   test_compressionzThreadedTests.test_compression  s    3B3D3D0">>*.,46 6 6 ? 	VJ7>>u]?STTUUUeM*,C,C,CDDDDDr$   rC   z*ssl.OP_NO_COMPRESSION needed for this testc                     t                      \  }}}|xj        t          j        z  c_        |xj        t          j        z  c_        t	          ||dd|          }|                     |d         d            d S )NTrH  rw  )r   rx  r
   rC   r  r   rK  s        r"   test_compression_disabledz'ThreadedTests.test_compression_disabled  s     4C3D3D0#"77#"77">>*.,46 6 6 	eM*D11111r$   r  c                    t                      \  }}}t          j        j        |_        |                    t                     |                    d           t          j        j        |_        t          ||dd|          }|d         d         }|	                    d          }d|vr(d|vr&d	|vr$| 
                    d
|d         z              d S d S d S d S )NkEDHTrH  r  r   r  ADHEDHDHEzNon-DH cipher: )r   r
   r   rl   ri   r  r  rS   r  r  r/  )r   r   r   r   r  r  partss          r"   test_dh_paramszThreadedTests.test_dh_params  s     4C3D3D0),)?&%%f---""6***),)?&">>*.,46 6 6 x#S!!%u"4"4e9K9KII'&)344444 "4"49K9Kr$   c                    t                      \  }}}|                    d           |                    d           t          j        j        |_        t          ||dd|          }t                      \  }}}|                    d           |                    d           t          j        j        |_        t          ||dd|          }t                      \  }}}|                    d           |                    d           |                    d           t          j        j        |_        |                     t          j	                  5  t          ||dd|           d d d            d S # 1 swxY w Y   d S )N	secp384r1zECDHE:!eNULL:!aNULLTrH  r  )
r   r  rS   r
   r   rl   rQ   r  r   r   rK  s        r"   test_ecdh_curvezThreadedTests.test_ecdh_curve!  s   3B3D3D0%%k222""#8999),)?&">>*.,46 6 6
 4C3D3D0%%k222""#8999),)?&">>*.,46 6 6
 4C3D3D0%%l333%%k222""#8999),)?&s|,, 	2 	2~~&*T(02 2 2 2	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   E55E9<E9c                     t                      \  }}}t          ||dd|          }|                     |d         d            d S )NTrH  ry  )r   r  r   rK  s        r"   test_selected_alpn_protocolz)ThreadedTests.test_selected_alpn_protocol@  sV    3B3D3D0">>*.,46 6 6 	e23T:::::r$   c                     t                      \  }}}|                    ddg           t          ||dd|          }|                     |d         d            d S )Nr  barTrH  ry  )r   r!  r  r   rK  s        r"   /test_selected_alpn_protocol_if_server_uses_alpnz=ThreadedTests.test_selected_alpn_protocol_if_server_uses_alpnH  sn    3B3D3D0))5%.999">>*.,46 6 6 	e23T:::::r$   c           	      \   g d}ddgdfddgdfdgdfddgd fg}|D ]\  }}t                      \  }}}|                    |           |                    |           	 t          ||dd|          }n# t          j        $ r}	|	}Y d }	~	nd }	~	ww xY wd	t          |          d
t          |          dt          |          d}
|d         }|                     |||
|dfz             t          |d                   r|d         d         nd}|                     |||
|dfz             d S )N)r  r\  	milkshaker  r\  r_  zhttp/3.0zhttp/4.0TrH  zfailed trying z	 (s) and z (c).
was expecting z, but got %s from the %sry  rh  r{  r  nothingr<  )r   r!  r  r
   r   r\   r   rc   )r   server_protocolsprotocol_testsclient_protocolsr
  r   r   r   r  r6  r  client_resultserver_results                r"   test_alpn_protocolsz!ThreadedTests.test_alpn_protocolsQ  s   666U^U#U^U#]K(*%t,	
 +9 	> 	>&h7F7H7H4NNH--.>???--.>???*>+926<@4<	> > >
 <   
 +,,,,c2B.C.C.C.CH'C ""89M]H M8#<<> > > u4566FE"9:2>><E ]H M8#<<> > > >/	> 	>s   A44BB

Bc                 "    t           j        rJ d S r   )r
   HAS_NPNr   s    r"   test_npn_protocolsz ThreadedTests.test_npn_protocolss  s    ;r$   c                    t                               t           j                  }|                    t                     t                               t           j                  }|                    t
                     t                               t           j                  }|                    t                     |||fS r   )	r
   rm   r`   r   r   r   ra   r   r   )r   r   other_contextr   s       r"   sni_contextszThreadedTests.sni_contextsv  s    (?@@&&777s'>??%%&6777(?@@,,Z888}n<<r$   c                 T    |d         }|                      d|ff|d                    d S )Nrx  r.   r7   )r  )r   r  r!   r  s       r"   check_common_namezThreadedTests.check_common_name  s2    Z d+-tI?????r$   c                 N   g |                                  \  }}d|_        fd}|                    |           t          ||dd          }|                     d|fg           |                     |d           g t          ||dd           }|                     d |fg           |                     |t                     g |                    d            t          ||dd          }|                     |t                     |                     g            d S )NFc                 L                         ||f           |	| _        d S d S r   )r  r   )r  r  r  callsrk  s      r"   r  z6ThreadedTests.test_sni_callback.<locals>.servername_cb  s6    LL+7888&#0    '&r$   Tsupermessager  r  r?   notfunny)rl  r   r  r  r   rn  r   )r   r   r   r  r  rq  rk  s        @@r"   r  zThreadedTests.test_sni_callback  sy   8<8I8I8K8K5~(-%	1 	1 	1 	1 	1 	1 	..}===">>*.,:< < <
 	..!A BCCCun555">>*.,02 2 2 	$!7 8999u&>??? ..t444">>*.,68 8 8 	u&>???#####r$   c                 :   |                                  \  }}}d }|                    |           |                     t          j                  5 }t          ||dd          }d d d            n# 1 swxY w Y   |                     |j        j        d           d S )Nc                     t           j        S r   )r
   ALERT_DESCRIPTION_ACCESS_DENIEDr  s      r"   cb_returning_alertzAThreadedTests.test_sni_callback_alert.<locals>.cb_returning_alert  s    66r$   Frr  rs  TLSV1_ALERT_ACCESS_DENIED)	rl  r  r   r
   r   r  r   r  r<  )r   r   rk  r   rx  r~  r  s          r"   test_sni_callback_alertz%ThreadedTests.test_sni_callback_alert  s    8<8I8I8K8K5~	7 	7 	7../ABBBs|,, 	@&~~.30>@ @ @E	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	,.IJJJJJs   A00A47A4c                    |                                  \  }}}d }|                    |           t          j                    5 }|                     t
          j                  5 }t          ||dd          }d d d            n# 1 swxY w Y   |                     |j	        j
        d           |                     |j        j        t                     d d d            d S # 1 swxY w Y   d S )Nc                     ddz   d S )Nr   r   rX   r  s      r"   
cb_raisingz;ThreadedTests.test_sni_callback_raising.<locals>.cb_raising  s    aCCCCr$   Frr  rs  SSLV3_ALERT_HANDSHAKE_FAILURE)rl  r  r   catch_unraisable_exceptionr   r
   r   r  r   r  r<  
unraisableexc_typeZeroDivisionError)r   r   rk  r   r}  catchr~  r  s           r"   test_sni_callback_raisingz'ThreadedTests.test_sni_callback_raising  s   8<8I8I8K8K5~	 	 	..z:::/11 	KU""3<00 DB*>>274BD D DD D D D D D D D D D D D D D D
 R\0<> > >U-68IJJJ	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K7    C!$B8C!B	C!B	AC!!C%(C%c                    |                                  \  }}}d }|                    |           t          j                    5 }|                     t
          j                  5 }t          ||dd          }d d d            n# 1 swxY w Y   |                     |j	        j
        d           |                     |j        j        t                     d d d            d S # 1 swxY w Y   d S )Nc                     dS )Nr  rX   r  s      r"   cb_wrong_return_typezOThreadedTests.test_sni_callback_wrong_return_type.<locals>.cb_wrong_return_type  s    5r$   Frr  rs  TLSV1_ALERT_INTERNAL_ERROR)rl  r  r   r  r   r
   r   r  r   r  r<  r  r  r   )r   r   rk  r   r  r  r~  r  s           r"   #test_sni_callback_wrong_return_typez1ThreadedTests.test_sni_callback_wrong_return_type  s    9=8I8I8K8K5~	 	 	../CDDD/11 	CU""3<00 DB*>>274BD D DD D D D D D D D D D D D D D D R\02NOOOU-6	BBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cr  c                   	 t                      \  }}}|                    d           |                    d           g d}t          |||          }|d         d         }|                     t	          |          d           |D ]6\  	}}t          	fd|D                       s|                     	           7d S )NzAES128:AES256zAES256:eNULL)r*  zAES-256TLS_CHACHA20TLS_AESr  r|  r   c              3       K   | ]}|v V  	d S r   rX   )rh  algr!   s     r"   ri  z4ThreadedTests.test_shared_ciphers.<locals>.<genexpr>  s'      <<ssd{<<<<<<r$   )r   rS   r  assertGreaterrc   anyr/  )
r   r   r   r   expected_algsr  r   tls_versionbitsr!   s
            @r"   test_shared_ciphersz!ThreadedTests.test_shared_ciphers  s    3B3D3D0""?333"">222
 
 
 #>>,46 6 6/033w<<+++'. 	  	 #D+t<<<<m<<<<<  		$	  	 r$   c                    t                      \  }}}t          |d          }|5  |                    t          j                    |          }|                    t
          |j        f           |                                 |                     t          |j
        d           |                     t          |j        d           d d d            d S # 1 swxY w Y   d S )NFr  r  r  s   hello)r   rC  r   r   r  r  r=  r  r   r   rL   r   rD  s         r"   ,test_read_write_after_close_raises_valuerrorz:ThreadedTests.test_read_write_after_close_raises_valuerror  s   3B3D3D0#N5III 	= 	=**6=??;C + E EAIItV[)***GGIIIj!&$777j!'8<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s   B CCCc                 
   d}t          t          j        d          5 }|                    |           d d d            n# 1 swxY w Y   |                     t          j        t          j                   t                      \  }}}t          |d          }|5  |                    t          j	                    |          5 }|
                    t          |j        f           t          t          j        d          5 }|                    |           |                     |                    d          |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Ns   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwbFr  r  r  r  )rK   r   TESTFNr   r  unlinkr   rC  r   r   r  r  r=  sendfiler   r`  )	r   	TEST_DATArN   r   r   r   r<  r   files	            r"   test_sendfilezThreadedTests.test_sendfile  sQ   	)"D)) 	QGGI	 	 	 	 	 	 	 	 	 	 	 	 	 	 		()*:;;;3B3D3D0#N5III 	> 	>++FMOO<D , F F >IJ		4-...)*D11 >TJJt$$$$$QVVD\\9===> > > > > > > > > > > > > > >> > > > > > > > > > > > > > >	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>si   ?AA)E8<E >?E	=E 	EE EE E8 E$	$E8'E$	(E88E<?E<c                    t                      \  }}}t          j        j        |_        t          |||          }|d         }|                     |j                   |                     |j	        d           |                     |j
        d           |                     |j                   |                     |j        d           |                     |d                    |                                }|                     |d         d           |                     |d         d           t          ||||          }|                                }|                     |d         d	           |                     |d         d           |                     |d                    |d         }|                     |j        |j                   |                     ||           |                     ||           |                     |j	        |j	                   |                     |j
        |j
                   t          |||          }|                     |d                    |d         }|                     |j        |j                   |                     ||           |                                }|                     |d         d
           |                     |d         d           t          ||||          }|                     |d                    |d         }	|                     |	j        |j                   |                     |	|           |                     |	j	        |j	                   |                     |	j
        |j
                   |                                }|                     |d         d           |                     |d         d	           d S )Nr  rp  r   rz  r  r   r  )rp  r  r  r   r8  )r   r
   r   rl   ri   r  rG  idr  r   rq  
has_ticketticket_lifetime_hintr|  r  r   assertIsNotrD  rC  )
r   r   r   r   r  rp  	sess_statsession2session3session4s
             r"   test_sessionzThreadedTests.test_session  s   3B3D3D0),)?& #>>,46 6 6	"
###7<+++7?A...*+++77;;;/0111"0022	8,a0006*A... #>>+2XG G G"0022	8,a0006*A..../000#gj1117+++7+++w|<<< 0'/BBB #>>,46 6 6/0111#HK444Hg..."0022	8,a0006*A... #>>+2XG G G./000#gj1117+++w|<<< 0'/BBB"0022	8,a0006*A.....r$   c                    t                      \  }}}t                      \  }}}t          j        j        |_        t          j        j        |_        t          |d          }|5  |                    t          j                    |          5 }|                     |j	        d            |                     |j
        d            |                    t          |j        f           |j	        }|                     |           |                     t                     5 }	t"          |_	        d d d            n# 1 swxY w Y   |                     t%          |	j                  d           d d d            n# 1 swxY w Y   |                    t          j                    |          5 }|                    t          |j        f           |                     t(                    5 }	||_	        d d d            n# 1 swxY w Y   |                     t%          |	j                  d           d d d            n# 1 swxY w Y   |                    t          j                    |          5 }||_	        |                    t          |j        f           |                     |j	        j        |j                   |                     |j	        |           |                     |j
        d           d d d            n# 1 swxY w Y   |                    t          j                    |          5 }|                     t(                    5 }	||_	        |                    t          |j        f           d d d            n# 1 swxY w Y   |                     t%          |	j                  d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NFr  r  zValue is not a SSLSession.z#Cannot set session after handshake.Tz)Session refers to a different SSLContext.)r   r
   r   rl   ri   rC  r   r   r   rp  rz  r  r  r=  rG  r   r   r  r\   r  r   r  )
r   r   r   r   client_context2ri  r<  r   rp  r6  s
             r"   test_session_handlingz#ThreadedTests.test_session_handlingD  s   3B3D3D0 / 1 1A *-)?&*-.*@'#N5III '	N '	N++FMOO<D , F F 
QIJ  D111  !14888		4-...)(((&&y11 'Q &AI' ' ' ' ' ' ' ' ' ' ' ' ' ' '  Q[!1!13OPPP
Q 
Q 
Q 
Q 
Q 
Q 
Q 
Q 
Q 
Q 
Q 
Q 
Q 
Q 
Q  ++FMOO<D , F F HIJ		4-...&&z22 (a 'AI( ( ( ( ( ( ( ( ( ( ( ( ( ( (  Q[!1!1!FH H HH H H H H H H H H H H H H H H  ++FMOO<D , F F 9IJ $			4-...  wz:::  G444  !148889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 !,,V]__=E - G G NJK&&z22 3a 'AIIItV[12223 3 3 3 3 3 3 3 3 3 3 3 3 3 3   Q[!1!1!LN N NN N N N N N N N N N N N N N NA'	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	N '	Ns  $)OBE3D4(E34D88E3;D8<+E3'O3E7	7O:E7	;+O&<H5"G6*H56G::H5=G:>+H5)O5H9	9O<H9	=+O(BK8,O8K<	<O?K<	 +O+N:)M;/N:;M??N:M?+N:.O:N>	>ON>	OOON)Er{  rF  rG  r  r  r  r  rs   rJ  r
   r  r  r  r  r  r  r|   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r$  r'  r+  r.  r3  rI  r5  r7  r:  r<  r?  rK  r  rL  rR   rN  r0  r1  rU  rX  rZ  r]  rf  ri  rl  rn  r  rz  r  r  r  r  r  r  r  rX   r$   r"   r  r    s       *" *" *"X"/ "/ "/H&E &E &EP2 2 2B X')T 3 3 3*@ @ @*@ @ @463 63 63p#E #E #EJ )$$  %$4' ' 'RH H H. '""; ; #";"(? (? (?T '""J J #"J '""; ; #"; )$$N N %$N" )$$R R %$R.7 7 7r! ! !4C C C:F F FP6 6 6&  :/ / /b&, &, &,PA A AA A AA A A- - -& )$$9 9 %$9 )$$'""9 9  #" %$9 )$$9 9  %$9 )$$'""9 9  #" %$9  '""7 7 #"75 5 5" X)BBEG G8G 8GG G8GtE E E X&9::EG G2 2G G2 X_^%PQQ5 5 RQ5 2 2 2>; ; ;; ; ; >  >  >D  = = =@ @ @&$ &$ &$PK K KK K K$C C C&     $= = => > >7/ 7/ 7/r0N 0N 0N 0N 0Nr$   r  r  zTest needs TLS 1.3c                   P    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZdS )TestPostHandshakeAuthc                    t           j        t           j        g}|D ]J}t                               |          }|                     |j        d           d|_        |                     |j        d           t           j        |_        |                     |j        t           j                   |                     |j        d           d|_        |                     |j        t           j                   |                     |j        d           t           j        |_        d|_        |                     |j        t           j                   |                     |j        d           Ld S r  )	r
   r`   ra   rm   r   post_handshake_authr   r   r   )r   r|  rd   rU   s       r"   test_pha_setterz%TestPostHandshakeAuth.test_pha_settery  s=   #S%<
	 " 	< 	<H..**CS4e<<<&*C#S4d;;;!/COS_c.?@@@S4d;;;&+C#S_c.?@@@S4e<<<!/CO&*C#S_c.?@@@S4d;;;;%	< 	<r$   c                 L   t                      \  }}}d|_        t          j        |_        d|_        |                    t                     t          |d          }|5  |                    t          j	                    |          5 }|
                    t          |j        f           |                    d           |                     |                    d          d           |                    d           |                     |                    d          d	           |                    d           |                     |                    d          d
           |                    d           |                     |                    d          d	           |                    d           |                    d                              d          }|                     d|           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NTFr  r  r
  r  r  r	  r  r  r  i   r  r:   )r   r  r
   r   r   r   r   rC  r   r   r  r  r=  r   r   r`  r  r  )r   r   r   r   r<  r   	cert_texts          r"   test_pha_requiredz'TestPostHandshakeAuth.test_pha_required  s}   3B3D3D0-1*%(%6"-1*&&777#N5III 	J 	J++FMOO<D , F F JIJ		4-...
###  z:::  w777
###  y999  w777
###FF4LL//
;;	=yIIIJ J J J J J J J J J J J J J J	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	Js7   )HE-H5HH	HH		HH Hc                    t                      \  }}}d|_        t          j        |_        d|_        d }||_        ||_        t          |d          }|5  |                    t          j                    |d          5 }|	                    t          |j        f           |                    d           |                     t          j        d          5  |                    d          }|                     |d	           |                    d
           |                    d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NTc                     t           j        r=|t          j        k    r/| |||||f}t          j                            d|d           d S d S d S )NzTLS: r   )r   r   r   ALERTr   r   r   )rL  	directionr9   content_typemsg_typer   r  s          r"   msg_cbz>TestPostHandshakeAuth.test_pha_required_nocert.<locals>.msg_cb  sc     5<?3H#H#Hi,$O
  !3!3!3!3444445 5#H#Hr$   r  Fr  r	  z#(certificate required|EOF occurred)r  r  r
  )r   r  r
   r   r   _msg_callbackrC  r   r   r  r  r=  r   r   r   r`  r   )r   r   r   r   r  r<  r   r   s           r"   test_pha_required_nocertz.TestPostHandshakeAuth.test_pha_required_nocert  s3   3B3D3D0-1*%(%6"-1*	5 	5 	5
 (.$'-$#N4HHH 	! 	!++FMOO<DAF , H H !KL		4-... ++L9  ! !
 66$<<D$$T7333 GGJ''' FF4LLL! ! ! ! ! ! ! ! ! ! ! ! ! ! !! ! ! ! ! ! ! ! ! ! ! ! ! ! !	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s\   *E( AEAD9-E9D==E D=EE(E	E(E	E((E,/E,c                    t           j        rt          j                            d           t                      \  }}}d|_        t          j        |_	        d|_        |
                    t                     t          j        |_	        t          |d          }|5  |                    t          j                    |          5 }|                    t"          |j        f           |                    d           |                     |                    d          d           |                    d	           |                     |                    d          d
           |                    d           |                     |                    d          d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   TFr  r  r
  r  r  r	  r  r  )r   r   r   r   r   r   r  r
   r   r   r   r   r   rC  r   r   r  r  r=  r   r`  rD  s         r"   test_pha_optionalz'TestPostHandshakeAuth.test_pha_optional  s   ? 	#JT"""3B3D3D0-1*%(%6"-1*&&777 &)%6"#N5III 		: 		:++FMOO<D , F F :IJ		4-...
###  z:::  w777
###  y999: : : : : : : : : : : : : : :		: 		: 		: 		: 		: 		: 		: 		: 		: 		: 		: 		: 		: 		: 		: 		: 		: 		:s7   )GCF, G,F0	0G3F0	4GGGc                 L   t           j        rt          j                            d           t                      \  }}}d|_        t          j        |_	        d|_        t          |d          }|5  |                    t          j                    |          5 }|                    t          |j        f           |                    d           |                     |                    d          d           |                    d	           |                     |                    d          d
           |                    d           |                     |                    d          d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   TFr  r  r
  r  r  r	  r  )r   r   r   r   r   r   r  r
   r   r   rC  r   r   r  r  r=  r   r`  rD  s         r"   test_pha_optional_nocertz.TestPostHandshakeAuth.test_pha_optional_nocert  s   ? 	#JT"""3B3D3D0-1*%(%6"-1*#N5III 
	; 
	;++FMOO<D , F F 	;IJ		4-...
###  z:::  w777
###  z:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;
	; 
	; 
	; 
	; 
	; 
	; 
	; 
	; 
	; 
	; 
	; 
	; 
	; 
	; 
	; 
	; 
	; 
	;s7   0)FCF5FF	FF		FF Fc                    t                      \  }}}d|_        t          j        |_        |                    t                     t          |d          }|5  |                    t          j	                    |          5 }|
                    t          |j        f           |                     t          j        d          5  |                                 d d d            n# 1 swxY w Y   |                    d           |                     d|                    d                     d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )	NTFr  r  z
not serverr	  s   extension not receivedr  )r   r  r
   r   r   r   r   rC  r   r   r  r  r=  r   r   r  r   r  r`  rD  s         r"   test_pha_no_pha_clientz,TestPostHandshakeAuth.test_pha_no_pha_client  s   3B3D3D0-1*%(%6"&&777#N5III 	G 	G++FMOO<D , F F GIJ		4-...++CL,GG 5 5224445 5 5 5 5 5 5 5 5 5 5 5 5 5 57FFFG G G G G G G G G G G G G G G	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs\   )EAD9C$D9$C((D9+C(,AD9-E9D=	=E D=	EEEc                    t                      \  }}}t          j        |_        d|_        |                    t                     t          |d          }|5  |                    t          j	                    |          5 }|
                    t          |j        f           |                    d           |                     |                    d          d           |                    d           |                     |                    d          d	           |                    d           |                     |                    d          d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )
NTFr  r  r
  r  r  r	  r  )r   r
   r   r   r  r   r   rC  r   r   r  r  r=  r   r   r`  rD  s         r"   test_pha_no_pha_serverz,TestPostHandshakeAuth.test_pha_no_pha_server  s   3B3D3D0%(%6"-1*&&777#N5III 
	: 
	:++FMOO<D , F F 	:IJ		4-...
###  y999  w777
###  y999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:
	: 
	: 
	: 
	: 
	: 
	: 
	: 
	: 
	: 
	: 
	: 
	: 
	: 
	: 
	: 
	: 
	: 
	:s7   )FCE)F)E-	-F0E-	1FFFc                 P   t                      \  }}}t          j        |_        t          j        j        |_        d|_        |                    t                     t          |d          }|5  |                    t          j                    |          5 }|                    t          |j        f           |                    d           |                     d|                    d                     d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NTFr  r  r	  s   WRONG_SSL_VERSIONr  )r   r
   r   r   r   rl   ri   r  r   r   rC  r   r   r  r  r=  r   r  r`  rD  s         r"   test_pha_not_tls13z(TestPostHandshakeAuth.test_pha_not_tls13!  s   3B3D3D0%(%6"),)?&-1*&&777#N5III 	B 	B++FMOO<D , F F BIJ		4-...2AFF4LLAAAB B B B B B B B B B B B B B B	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs7   .)DA D7DD	D
D	DD"Dc                    t           }t                              t          j                  }d|_        |                    t                     d|_        t          j        |_	        t                              t          j
                  }|                    t                     |                    t                     d|_        t          j        |_	        t          |d          }|5  |                    t!          j                    |          5 }|                    t$          |j        f           |                    d           |                     |                    d          d           |                    d           |                     |                    d          d	           |                    d           |                     |                    d          d
           |                     |                                i            d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NTFr  r  r
  r  r  r	  r  r  )r   r
   rm   ra   r  r   r   r   r   r   r`   r   r   r   rC  r   r   r  r  r=  r   r   r`  rs  )r   r   r   r   r<  r   s         r"   test_bpo37428_pha_cert_nonez1TestPostHandshakeAuth.test_bpo37428_pha_cert_none2  s[    ,(?@@-1*&&777(-%%(]"(?@@&&777,,Z888-1*%(%6"#N5III 	6 	6++FMOO<D , F F 
6IJ		4-...
###  z:::  w777
###  y999  "555
6 
6 
6 
6 
6 
6 
6 
6 
6 
6 
6 
6 
6 
6 
6	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s7   ()H9DH!H9!H%	%H9(H%	)H99H= H=c           	         t          d          \  }}}t          |d          }|5  |                    t          j                    |          5 }|                    t
          |j        f           |j                                        }| 	                    t          |          d           |\  }}|j                                        }	| 	                    t          |	          d           | 	                    ||	d                    | 	                    t          |          t          |	d                              | 	                    t          |          t          |	d                              |                     ||           |                     t          |          t          |                     |                     t          |          t          |                     |                     |                                |                                           |                     dt          |                     |                     d	t          |                     |                    t$          j                  }
|                    t$          j                  }|                     |
t,                     |                     d
|
           |                     |t.                     | 	                    t0                              |
          |           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NFr   r  r  r  r   r   zCN=localhostzCN=our-ca-serverz-----BEGIN CERTIFICATE-----)r   rC  r   r   r  r  r=  r  r  r   rc   r  hashr   rC  get_infor  public_bytesr   ENCODING_PEMENCODING_DERrA  r\   r  r
   r,  )r   r   r   r   r<  r   vceecauvcr2  r  s               r"   test_internal_chain_clientz0TestPostHandshakeAuth.test_internal_chain_clientQ  sI   3B4
 4
 4
0 $N5III 	 	++ ( ,    		4-...Y1133  R!,,,Bi4466  S1---  SV,,,  b4A<<888  b4A<<888##B+++##DHHd2hh777##DHHd2hh777##BKKMM2;;==AAAnd2hh7770$r((;;;ood&788ood&788%%c3///;SAAA%%c5111  ,,S113  7              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s6   )M
KL2&M
2L6	6M
9L6	:M

MMc                    t                      \  }}}|                    t                     t          j        |_        t          j        j        |_        t          |d          }|5  |
                    t          j                    |          5 }|                    t          |j        f           |                    d           |                    d          }|                     |d           |                    d           |                    d          }|                     |d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NFr  r  s   VERIFIEDCHAIN
r  s   
s   UNVERIFIEDCHAIN
)r   r   r   r
   r   r   r   rl   ri   rC  r   r   r  r  r=  r   r`  r   )r   r   r   r   r<  r   ress          r"   test_internal_chain_serverz0TestPostHandshakeAuth.test_internal_chain_serverv  s   3B3D3D0&&777%(%6"),)?&#N5III 	1 	1++ ( ,   
1 		4-...*+++ffTll  i000,---ffTll  i000
1 
1 
1 
1 
1 
1 
1 
1 
1 
1 
1 
1 
1 
1 
1	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s7   ')EB"D>2E>E	EE	EEEN)r{  rF  rG  r  r  r  r  r  r  r  r  r  r  r  rX   r$   r"   r  r  w  s        < < <0J J J2#! #! #!J: : :0; ; ;,G G G : : :(B B B"6 6 6># # #J1 1 1 1 1r$   r  keylog_filenamez0test requires OpenSSL 1.1.1 with keylog callbackc                   B   e Zd Zej        fdZe ej        e	d          d                         Z
e ej        e	d          d                         Ze ej        ej        j        d           ej        e	d          d                                     Zd Zd Zd	 Zd
S )TestSSLDebugc                     t          |          5 }t          t          |                    cd d d            S # 1 swxY w Y   d S r   )rK   rc   r  )r   fnamerN   s      r"   keylog_lineszTestSSLDebug.keylog_lines  s~    %[[ 	 AtAww<<	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   9= =r  c                 D   |                      t          j        t          j                   t                              t          j                  }|                     |j        d            | 	                    t          j                            t          j                             t          j        |_        |                     |j        t          j                   |                     t          j                            t          j                             |                     |                                 d           d |_        |                     |j        d            |                     t           t"          f          5  t          j                            t          j                            t          j                            |_        d d d            n# 1 swxY w Y   |                     t(                    5  d|_        d d d            d S # 1 swxY w Y   d S )Nr   )r  r   r  r  r
   rm   ra   r   r  r|  r   r   isfilerG  r  r   IsADirectoryErrorPermissionErrorr   abspathr   rY  s     r"   test_keylog_defaultsz!TestSSLDebug.test_keylog_defaults  s    		()*:;;;nnS455,d333	(899:::'.,i.>???y'788999**,,a000",d333 1?CDD 	3 	3"$'//	 011#3 #3C	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3
 y)) 	$ 	$"#C	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s%   AGG"G HHHc                 h   |                      t          j        t          j                   t	                      \  }}}t          j        |_        t          |d          }|5  |                    t          j                    |          5 }|	                    t          |j        f           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     |                                 d           d |_        t          j        |_        t          |d          }|5  |                    t          j                    |          5 }|	                    t          |j        f           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     |                                 d           t          j        |_        t          j        |_        t          |d          }|5  |                    t          j                    |          5 }|	                    t          |j        f           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     |                                 d           d |_        d |_        d S )NFr  r  r        )r  r   r  r  r   r  rC  r   r   r  r  r=  r   r  rD  rD  s         r"   test_keylog_filenamez!TestSSLDebug.test_keylog_filename  s    		()*:;;;3B3D3D0)2)9&#N5III 	/ 	/++FMOO<D , F F /IJ		4-.../ / / / / / / / / / / / / / /	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/
 	**,,a000)-&)2)9&#N5III 	/ 	/++FMOO<D , F F /IJ		4-.../ / / / / / / / / / / / / / /	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	 1 1 3 3R888)2)9&)2)9&#N5III 	/ 	/++FMOO<D , F F /IJ		4-.../ / / / / / / / / / / / / / /	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	 1 1 3 3R888)-&)-&&&s   !)C
"B8,C8B<	<C?B<	 CCC-)F"F8FF	FF	FF"F)I1,"II1I	I1!I	"I11I58I5z.test is not compatible with ignore_environmentc                    |                      t          j        t          j                   t          j        j                            t          j	                  5  t          j        t          j	        d<   | 
                    t          j	        d         t          j                   t                              t          j                  }| 
                    |j        d            t                                          }| 
                    |j        t          j                   t                                          }| 
                    |j        t          j                   d d d            d S # 1 swxY w Y   d S )NSSLKEYLOGFILE)r  r   r  r  rs   mockrN  dictr   environr   r
   rm   ra   r  r  r  rY  s     r"   test_keylog_envzTestSSLDebug.test_keylog_env  sg   
 		()*:;;;] %%bj11 	D 	D*3*:BJ'RZ8):JKKK..!899CS0$777,,..CS0)2BCCC,,..CS0)2BCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds   DE++E/2E/c                 6   t                      \  }}}d }|                     |j        d            ||_        |                     |j        |           |                     t                    5  t                      |_        d d d            d S # 1 swxY w Y   d S )Nc                     d S r   rX   rL  r  r9   r  r  r   s         r"   r  z.TestSSLDebug.test_msg_callback.<locals>.msg_cb  r  r$   )r   r   r  r   r   r  )r   r   r   r   r  s        r"   test_msg_callbackzTestSSLDebug.test_msg_callback  s    3B3D3D0	 	 	 	n2D999'-$n2F;;;y)) 	4 	4+188N(	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   -BBBc                 p    t                      \  }}}t          j        j        |_        g  fd}||_        t          |d          }|5  |                    t          j                    |          5 }|	                    t          |j        f           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y                        dt          j        t          j        t          j        f                                dt          j        t          j        t          j        f           d S )Nc                                          | t          j                                        |t                                         |ddh                               ||||f           d S )NrL   r   )rA  r
   r   r  r  r  )rL  r  r9   r  r  r   r  r   s         r"   r  z4TestSSLDebug.test_msg_callback_tls12.<locals>.msg_cb  sk    !!$666!!$...MM)fg%6777JJ	7L(CDDDDDr$   Fr  r  rL   r   )r   r
   r   rl   ri   r  rC  r   r   r  r  r=  r  r   	HANDSHAKEr   SERVER_KEY_EXCHANGECHANGE_CIPHER_SPEC)r   r   r   r   r  r<  r   r  s   `      @r"   test_msg_callback_tls12z$TestSSLDebug.test_msg_callback_tls12  s   3B3D3D0),)?&	E 	E 	E 	E 	E 	E (.$#N5III 	/ 	/++FMOO<D , F F /IJ		4-.../ / / / / / / / / / / / / / /	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/
 	Z')B02	
 	
 	

 	j(/*L/1	
 	
 	
 	
 	
s6   )B;6"B$B;$B(	(B;+B(	,B;;B?B?c                 \   t                      \  }}}t                      d         d }fd}||_        ||_        t          |d          }|5  |                    t          j                    |          5 }|                    t          |j        f           d d d            n# 1 swxY w Y   |                    t          j                    |          5 }|                    t          |j        f           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   c                     d S r   rX   r  s         r"   r  z@TestSSLDebug.test_msg_callback_deadlock_bpo43577.<locals>.msg_cb  r  r$   c                     | _         d S r   rB  )r   r  rU   server_context2s      r"   sni_cbz@TestSSLDebug.test_msg_callback_deadlock_bpo43577.<locals>.sni_cb  s    *DLLLr$   Fr  r  )	r   r  sni_callbackrC  r   r   r  r  r=  )	r   r   r   r   r  r  r<  r   r  s	           @r"   #test_msg_callback_deadlock_bpo43577z0TestSSLDebug.test_msg_callback_deadlock_bpo43577  s   3B3D3D0)++A.	 	 		+ 	+ 	+ 	+ 	+ (.$&,##N5III 	/ 	/++FMOO<D , F F /IJ		4-.../ / / / / / / / / / / / / / /  ++FMOO<D , F F /IJ		4-.../ / / / / / / / / / / / / / /		/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/sZ   )D!:"B(D!(B,	,D!/B,	0+D!"D	=D!	D	D!D	D!!D%(D%N)r{  rF  rG  r   r  r  requires_keylogrs   r0  r1  r  r  r   flagsignore_environmentr  r  r  r  rX   r$   r"   r  r    s*       !*!1         X_^%PQQ$ $ RQ _$, X_^%PQQ .  . RQ _ .D X_SY1EG GX_^%PQQD D RQG G _D
4 
4 
4
 
 
>/ / / / /r$   r  c           	          |                      t          j        t          j        t	          j        ddd                     d S )Niir   r   )
setsockoptr   
SOL_SOCKET	SO_LINGERstructpack)r   s    r"   )set_socket_so_linger_on_with_zero_timeoutr
  &  s2    OOF%v'7T1a9P9PQQQQQr$   c                   P    e Zd ZdZ G d dej                  Zd Zd Zd Z	d Z
dS )	TestPreHandshakeClosezQVerify behavior of close sockets with received data before to the handshake.
    c                   @     e Zd Zdd fd
Zd Zd Z fdZd Z xZS )6TestPreHandshakeClose.SingleConnectionTestServerThreadN)rq  c                    || _         d| _        d | _        d | _        d | _        |t
          j        | _        n|| _        t                      	                    |           d S )Nr$   r    )
call_after_acceptreceived_data
wrap_errorr  r=  r   r  rq  superr  )r   r!   r  rq  rz  s       r"   r  z?TestPreHandshakeClose.SingleConnectionTestServerThread.__init__0  sa    %6D"!$D"DO DMDI&4&GG$'''''r$   c                 .    |                                   | S r   )r+  r   s    r"   r.  z@TestPreHandshakeClose.SingleConnectionTestServerThread.__enter__<  s    JJLLLKr$   c                     	 | j         r| j                                          n# t          $ r Y nw xY w|                                  d | _        d S r   )r  r  r_  r   r  r1  s     r"   r2  z?TestPreHandshakeClose.SingleConnectionTestServerThread.__exit__@  s^    = *M'')))   IIKKK"DOOOs    # 
00c                 :   t                               t           j        j                  | _        t           j        | j        _        | j                            t                     | j        	                    t          t                     t          j                    | _        t          j        | j                  | _        | j                            | j                   | j                            d           t'                                                       d S )Nr  r  r   )r
   r  r  r  ssl_ctxr   r   r   r  r   r  r   r  r   r6  r=  ro  rq  r8  r  r+  )r   rz  s    r"   r+  z<TestPreHandshakeClose.SingleConnectionTestServerThread.startI  s    55ck6MNNDL'*'8DL$L..h.???L(((G(LLL"MOODM%/>>DIM$$T\222M  ###GGMMOOOOOr$   c                 R   	 | j                                         \  }}n*# t          $ r Y | j                                          d S w xY w	 | j                                          n# | j                                          w xY w|5  |                     |          r	 d d d            d S 	 | j                            |d          }	 |                    d          | _        n.# t          $ r Y n"w xY w# t          $ r}|| _
        Y d }~nd }~ww xY wd d d            d S # 1 swxY w Y   d S )NTr    )r  r  r9  r  r  r  r   r`  r  r_  r  )r   rL  address
tls_socketrT  s        r"   r  z:TestPreHandshakeClose.SingleConnectionTestServerThread.runT  s   & $ 4 4 6 6gg   ##%%%%%	 
 ##%%%%##%%%%  ))$//        !%!9!9$D!9!Q!QJ-7__S-A-A**"     * * *&)DOOOOOO*                 s    A$ 
AA$ AA$ $A?D)C1C! D!
C.+D-C..D1
D;DDDDD #D )	r{  rF  rG  r  r.  r2  r+  r  __classcell__)rz  s   @r"    SingleConnectionTestServerThreadr  .  s        ?C 
	( 
	( 
	( 
	( 
	( 
	( 
	(	 	 		# 	# 	#		 		 		 		 			 	 	 	 	 	 	r$   r  c                 h   t           j        dk    rd S t          |t                    sYt          |t                    r|j        t
          j        k    s/t          j        dt          |dd          t          j
                  r1	 |                     dt           j         d|           d }d S # d }w xY wd S )Nlinuxzwrong.version.numberr<  rT  z!Could not recreate conditions on z: err=)r   rL  r[   r  r_  r  EINVALresearchr^   Ir3  rS  s     r"   "non_linux_skip_if_other_okay_errorz8TestPreHandshakeClose.non_linux_skip_if_other_okay_errorj  s    <7""Fs011 	W%%	*-)u|*C*CI,gc8R.H.H"$OO +D )#, ) )"%) ) * * * d



 +D*Cs   %B+ +B/c                 z   t          j                    t          j                    fd}|                     |d          }|                     |           t	          j                    5 }|                    |j                                                   t          |           |	                    d           
                                 |                    d           |                                 d d d            n# 1 swxY w Y                                    |                                 |j        }d |_        	 |                     d|j                   |                     |t&                     |                     |           |                     |t*          j                   |                     d|j        d                    |                     d|j                   |                     d	|j        d	                    |                     |j        d
           d }d }d S # d }d }w xY w)Nc                                                                           t          j                  st	          d          dS )Nz+wrap_socket event never set, test may fail.F)r  r-  r   r  RuntimeError)unusedready_for_server_wrap_socketserver_accept_calleds    r"   r  zPTestPreHandshakeClose.test_preauth_data_to_tls_server.<locals>.call_after_accept  sC     $$&&&/44W5JKK R"#PQQQ5r$   preauth_data_to_tls_serverr  r!   Fs   DELETE /data HTTP/1.0

r$   before TLS handshake with datar   r   attr must existr  )r  r,  r  rn  r   r  r  r  r
  r@  r-  rd  r  r  r   r  r   r  rA  r_  r$  r
   r   r  ru   r<  rC  r  r;  )r   r  r<  rh  r  r)  r*  s        @@r"   test_preauth_data_to_tls_serverz5TestPreHandshakeClose.test_preauth_data_to_tls_server  sl   (00'0'8'8$	 	 	 	 	 	 66"31 7 3 3 	&!!!]__ 	NN6?66889995f===u%%% %%'''KK8999LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	%((***&
 	S&"6777!!*g66633J???!!*cl;;;MM:JOA<NOOOMM:J<MNNN:?1#5666j06GHHH JFFF JFMMMMs    .BDDD
C$H4 4H:c                   	
 t          j                    
t          j                    		
fd}|                     |d          }|                     |           t	          |j                   t          j                    5 }|                    |j                                                   
	                                 	
                    t          j                  s|                     d           t                                          }	 |                    |d          }d }|                    d          }|                                 n# t&          $ r}|}d}Y d }~nd }~ww xY wd d d            n# 1 swxY w Y   |                                 	 |                     d|           |                     |t&                     |                     |           |                     |t          j                   |                     d	|j        d
                    |                     d	|j                   |                     d|j        d                    |                     |j        d           d }d }d S # d }d }w xY w)Nc                                          t          j                  st          d           t	          |            |                     d           |                                                                   dS )Nz ERROR: test client took too longsW   HTTP/1.0 307 Temporary Redirect
Location: https://example.com/someone-elses-server

T)r-  r   r  r  r
  rd  r  r  )conn_to_client$client_can_continue_with_wrap_socket$server_can_continue_with_wrap_sockets    r"   r  zPTestPreHandshakeClose.test_preauth_data_to_tls_client.<locals>.call_after_accept  s    7<<W=RSS :8999 6nEEE     """0446664r$   preauth_data_to_tls_clientr,  ztest server took too longr/   r  r  r$   r-  r   r   r.  r  )r  r,  r  rn  r
  r  r   r  r  r  r-  r   r  r/  r
   r  r   r`  r  r_  r   r   rA  r$  r   r  ru   r<  rC  r  r;  )r   r  r<  rh  r  
tls_clientr  r  rT  r3  r4  s            @@r"   test_preauth_data_to_tls_clientz5TestPreHandshakeClose.test_preauth_data_to_tls_client  s   /8/@/@,/8/@/@,	 	 	 	 	 	 66"31 7 3 3 	&!!!1&/BBB]__ 	#NN6?66889990446667<<W=RSS 7		56660022G	#$00 1 = =
 "
 * 4 4  """"  $ $ $ 
 #$	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#$ 		S-000!!*g66633J???!!*cl;;;MM:JOA<NOOOMM:J<MNNN:?1#5666j06GHHH JFFF JFMMMMsJ   BE;E(,E;
E,E'"E;'E,,E;;E?E?CJ   Jc                 t   t          j                     G fddt          j        j                  }fd}d}|                     |d|          }|                     |           t          |j                    ||j        	                                d         |j
        t                                          |          }|                     t                    5  |                    d	d
ddi           |                                }d d d            n# 1 swxY w Y   |                                 d S )Nc                       e Zd Z fdZdS )eTestPreHandshakeClose.test_https_client_non_tls_response_ignored.<locals>.SynchronizedHTTPSConnectionc                 :   t           j        j                            |                                t
          j                  s+t
          j        rt          j	        
                    d           | j                            | j        | j                  | _        d S )Nz"server_responding event never set.r  )httprh  HTTPConnectionr  r-  r   r  r   r   r   r   _contextr   r   r  )r   server_respondings    r"   r  zmTestPreHandshakeClose.test_https_client_non_tls_response_ignored.<locals>.SynchronizedHTTPSConnection.connect  s     *224888 )--g.CDD K KJ$$%IJJJ M55	49 6 > >			r$   N)r{  rF  rG  r  )r?  s   r"   SynchronizedHTTPSConnectionr:    s.        	> 	> 	> 	> 	> 	> 	>r$   r@  c                     t          |            |                     d           |                                                                   dS )Ns!   HTTP/1.0 402 Payment Required

T)r
  rd  r  r  )r2  r?  s    r"   r  z[TestPreHandshakeClose.test_https_client_non_tls_response_ignored.<locals>.call_after_accept  sY    5nEEE     """!!###4r$   g       @non_tls_http_RST_responder)r  r!   rq  r   )r=  r   rq  HEADz/testHostr/   )headers)r  r,  r<  rh  HTTPSConnectionr  rn  r
  r  r  r=  r
   r  r   r_  r  getresponser   )r   r@  r  rq  r<  
connectionresponser?  s          @r"   *test_https_client_non_tls_response_ignoredz@TestPreHandshakeClose.test_https_client_non_tls_response_ignored  s   %O--
	> 
	> 
	> 
	> 
	> 
	> 
	>$+*E 
	> 
	> 
	>	 	 	 	 	 66"31 7 ! ! 	&!!!1&/BBB00++--a0[2244	
 
 

 w'' 	0 	0vw8MNNN!--//H	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	s   /DD DN)r{  rF  rG  r  r  r  r  r$  r/  r7  rJ  rX   r$   r"   r  r  *  s         : : : : :9+; : : :x  2* * *X8 8 8t2 2 2 2 2r$   r  c                   J    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )TestEnumerationsc                 j     G d dt           j                  }t          j        |t                     d S )Nc                   p    e Zd Zej        Zej        Zej        Z	ej
        Zej        Zej        Zej        ZdS );TestEnumerations.test_tlsversion.<locals>.CheckedTLSVersionN)r{  rF  rG  r   PROTO_MINIMUM_SUPPORTEDrn   PROTO_SSLv3r   PROTO_TLSv1r   PROTO_TLSv1_1r   PROTO_TLSv1_2rl   PROTO_TLSv1_3r  PROTO_MAXIMUM_SUPPORTEDro   rX   r$   r"   CheckedTLSVersionrO  !  sJ         $ <$E$E(G(G(G $ <r$   rW  )enumIntEnum_test_simple_enumr   )r   rW  s     r"   test_tlsversionz TestEnumerations.test_tlsversion   sJ    	= 	= 	= 	= 	= 	= 	= 	= 	0*=====r$   c                 j     G d dt           j                  }t          j        |t                     d S )Nc                   *    e Zd ZdZdZdZdZdZdZdZ	dS )	DTestEnumerations.test_tlscontenttype.<locals>.Checked_TLSContentTypezPContent types (record layer)

            See RFC 8446, section B.1
            rt  r        r9    N)
r{  rF  rG  r  r  r  r  APPLICATION_DATAHEADERINNER_CONTENT_TYPErX   r$   r"   Checked_TLSContentTyper^  ,  s=          "$EI!F!&r$   re  )rX  rY  rZ  r   )r   re  s     r"   test_tlscontenttypez$TestEnumerations.test_tlscontenttype+  sJ    	' 	' 	' 	' 	'T\ 	' 	' 	' 	5GGGGGr$   c                 j     G d dt           j                  }t          j        |t                     d S )Nc                       e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$S )%@TestEnumerations.test_tlsalerttype.<locals>.Checked_TLSAlertTypezaAlert types for TLSContentType.ALERT messages

            See RFC 8466, section B.2
            r   
   rt  r  r_     (   )   rQ  +   ,   -   .   /   rA  1   2   3   <   F   G   P   V   Z   r^  m   n   o   p   q   r   s   t   x   N)&r{  rF  rG  r  CLOSE_NOTIFYUNEXPECTED_MESSAGEBAD_RECORD_MACDECRYPTION_FAILEDRECORD_OVERFLOWDECOMPRESSION_FAILUREHANDSHAKE_FAILURENO_CERTIFICATEBAD_CERTIFICATEUNSUPPORTED_CERTIFICATECERTIFICATE_REVOKEDCERTIFICATE_EXPIREDCERTIFICATE_UNKNOWNILLEGAL_PARAMETER
UNKNOWN_CAACCESS_DENIEDDECODE_ERRORDECRYPT_ERROREXPORT_RESTRICTIONPROTOCOL_VERSIONINSUFFICIENT_SECURITYINTERNAL_ERRORINAPPROPRIATE_FALLBACKUSER_CANCELEDNO_RENEGOTIATIONMISSING_EXTENSIONUNSUPPORTED_EXTENSIONCERTIFICATE_UNOBTAINABLEUNRECOGNIZED_NAMEBAD_CERTIFICATE_STATUS_RESPONSEBAD_CERTIFICATE_HASH_VALUEUNKNOWN_PSK_IDENTITYCERTIFICATE_REQUIREDNO_APPLICATION_PROTOCOLrX   r$   r"   Checked_TLSAlertTyperi  ;  s          L!#N " O$&! "N O&(#"$"$"$ "JMLM!#!$&!N%'"M" #$'!'*$ #.1+),&#& #& &)###r$   r  )rX  rY  rZ  r   )r   r  s     r"   test_tlsalerttypez"TestEnumerations.test_tlsalerttype:  sK    &	* &	* &	* &	* &	*4< &	* &	* &	*N 	3]CCCCCr$   c                 j     G d dt           j                  }t          j        |t                     d S )Nc                   j    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdS )DTestEnumerations.test_tlsmessagetype.<locals>.Checked_TLSMessageTypezVMessage types (handshake protocol)

            See RFC 8446, section B.3
            r   r   r  r   r8  r.  r  r  r  rB        r;  r   rt  r  r_  r`     C      ra  N)r{  rF  rG  r  HELLO_REQUESTCLIENT_HELLOSERVER_HELLOHELLO_VERIFY_REQUESTNEWSESSION_TICKETEND_OF_EARLY_DATAHELLO_RETRY_REQUESTENCRYPTED_EXTENSIONSCERTIFICATEr  CERTIFICATE_REQUESTSERVER_DONECERTIFICATE_VERIFYCLIENT_KEY_EXCHANGEFINISHEDCERTIFICATE_URLCERTIFICATE_STATUSSUPPLEMENTAL_DATA
KEY_UPDATE
NEXT_PROTOMESSAGE_HASHr  rX   r$   r"   Checked_TLSMessageTyper  e  s          MLL#$  ! !"##$ K"$"$K!#"$H O!# "JJL!'r$   r  )rX  rY  rZ  r   )r   r  s     r"   test_tlsmessagetypez$TestEnumerations.test_tlsmessagetyped  sJ    	( 	( 	( 	( 	(T\ 	( 	( 	(6 	5GGGGGr$   c                     t          j        t           j        ddd t          j                  }|j        |_        t          j        |t          j                   d S )N
_SSLMethodr
   c                 8    |                      d          o| dk    S )NrZ   r   r]   r    s    r"   r  z1TestEnumerations.test_sslmethod.<locals>.<lambda>  s    T__[99WdFW>W r$   source)	rX  _old_convert_rY  r
   r   r_   r   rZ  r  )r   Checked_SSLMethods     r"   test_sslmethodzTestEnumerations.test_sslmethod  sX     .lEWWx   ->,J)0#.AAAAAr$   c                     t          j        t           j        ddd t          j                  }t          j        |t          j                   d S )NOptionsr
   c                 ,    |                      d          S )NOP_r  r    s    r"   r  z/TestEnumerations.test_options.<locals>.<lambda>  s    T__U33 r$   r  )rX  r  IntFlagr
   r   rZ  r  )r   CheckedOptionss     r"   ry  zTestEnumerations.test_options  sJ    +i33x  
 	~s{;;;;;r$   c                     t          j        t           j        ddd t          j                  }t          j        |t          j                   d S )NAlertDescriptionr
   c                 ,    |                      d          S )NALERT_DESCRIPTION_r  r    s    r"   r  z8TestEnumerations.test_alertdescription.<locals>.<lambda>  s    T__-ABB r$   r  )rX  r  rY  r
   r   rZ  r  )r   CheckedAlertDescriptions     r"   test_alertdescriptionz&TestEnumerations.test_alertdescription  sN    "&"40%BBx# # #
 	68LMMMMMr$   c                     t          j        t           j        ddd t          j                  }t          j        |t          j                   d S )NSSLErrorNumberr
   c                 ,    |                      d          S )N
SSL_ERROR_r  r    s    r"   r  z6TestEnumerations.test_sslerrornumber.<locals>.<lambda>  s    T__\:: r$   r  )rX  r  rY  r
   r   rZ  r  )r   Checked_SSLErrorNumbers     r"   test_sslerrornumberz$TestEnumerations.test_sslerrornumber  sN    !%!3.::x" " "
 	5s7IJJJJJr$   c                     t          j        t           j        ddd t          j                  }t          j        |t          j                   d S )NVerifyFlagsr
   c                 ,    |                      d          S )NVERIFY_r  r    s    r"   r  z3TestEnumerations.test_verifyflags.<locals>.<lambda>  s    T__Y77 r$   r  )rX  r  r  r
   r   rZ  r  )r   CheckedVerifyFlagss     r"   test_verifyflagsz!TestEnumerations.test_verifyflags  sL    !/mU77x  
 	13?CCCCCr$   c                     t          j        t           j        ddd t          j                  }t          j        |t          j                   d S )N
VerifyModer
   c                 ,    |                      d          S )NCERT_r  r    s    r"   r  z2TestEnumerations.test_verifymode.<locals>.<lambda>  s    T__W55 r$   r  )rX  r  rY  r
   r   rZ  r  )r   CheckedVerifyModes     r"   test_verifymodez TestEnumerations.test_verifymode  sL     .lE55x  
 	0#.AAAAAr$   N)r{  rF  rG  r[  rf  r  r  r  ry  r  r  r  r  rX   r$   r"   rL  rL    s        	> 	> 	>H H H(D (D (DTH H H<B B B< < <N N NK K KD D DB B B B Br$   rL  c                     t           j        rt          j        t          j        d} |                                 D ]"\  }} |            }|r|d         r	|d|} n!#t          t          j                              }t          dt          j	        dt          j
                   t          d|z             t          dt          j        z             t          dt          j        z             	 t          dt          j        z             n# t          $ r Y nw xY wt          t           t"          t$          t&          t(          t*          t,          t.          t0          t2          t4          fD ]8}t6          j                            |          st          j        d	|z            9t?          j                     }tC          j"        t>          j#        g|R   d S )
N)MacWindowsr   r~   ztest_ssl: testing with z          under %sz          HAS_SNI = %rz          OP_ALL = 0x%8xz          OP_NO_TLSv1_1 = 0x%8xzCan't read certificate file %r)$r   r   rL  mac_ver	win32_veritemsr   r  r
   r@  r?  r   rw  r   r  r   r  r  r  r  r  r   r   r   r  BADKEYr  r   r   exists
TestFailedr   threading_setuprs   addModuleCleanupthreading_cleanup)platsr!   rw   platfilenamethread_infos         r"   setUpModuler    s    #)
 
  ++-- 	- 	-JD$466D Q "&$$-)++,,D   #":":< 	= 	= 	="T)***&4555(3:5666	3c6GGHHHH 	 	 	D	 	.'>=):	$ R R
 w~~h'' 	R$%E%PQQQ	R #244K.@O;OOOOOOs   2D 
DD__main__r   )r  TFNN)Nr   r   )r   rs   unittest.mockr  r   test.supportr   r   r   r   r   r!  r   r|  r  r   rX  r  http.clientr<  r   r  r   urllib.requestr  r  r   rV  rL  	sysconfigry   r  ImportErrorimport_deprecatedr	   import_moduler
   r   r   r   r   r   rR   Py_DEBUGr1  rs  _PROTOCOL_NAMESrR  r  r?  rk   get_config_varr   r  r   verr^   r  r#   r   fsencoder  r  r  r  r  r  r  r  r  r  r  r+  r   r  r   r   r   r   r   r  r  r   r'  r  r   r   r  r  r  r  r  r   r  r  r  r  rC   rD   rE   rF   rG   rO   rV   re   	lru_cacherb   r|   r   r   ignore_warningsrw  rI  r   r   r   TestCaser   rO  r3  rH  r^  rl  requires_resourcer  r  r  test.ssl_serversr  r  rC  rC  r  r  r  rJ  r  rm   
HAS_KEYLOGr   r  r
  r  rL  r  r{  mainrX   r$   r"   <module>r     s
   


            & & & & & & " " " " " " & & & & & & ) ) ) ) ) ) ( ( ( ( ( ( 				      				     				                        MMMM   FFF -?,Z88 "m!%((  K K K K K K K K K K K K73*++5clg5F3&''	+y8 112JKK   
) 
)JE3
U##gcnc**   %(E"": : : 9]##X&&9^$$
)M
"
"X&&G$$Y344 I233 	8		r{6"")Hl33	(L11/ ++&- . " )$
%
% )N++&  ;FT0 ++&- .  $ 9^,, * i 011 .  Yx..
Y}%%
i&&Ik""	*In%%	
)M
"
")011	<	 	 Ik""	y+,,i 566 	>	"	"r{6"" GC!4a88 73 2A66 WS"6:: %gc+H!LL $WS*FJJ    9;; 3 3 3 3  4 4 4* % % %P  ". . .   5_4     #}t!D$/ / / / /, !0 4 4 4 4 4 42l1 l1 l1 l1 l1x( l1 l1 l1^{
  {
  {
  {
  {
 8$ {
  {
  {
 |3D 3D 3D 3D 3DH% 3D 3D 3Dl<3 <3 <3 <3 <3X& <3 <3 <3~. . . . .X& . . .`n< n< n< n< n<H- n< n< n<b 9%%L L L L LX& L L &%L2	Z 	Z 	Z 	ZN N N / . . . . .X X X X X) X X Xtt t t t t) t t tl ?GEI#. . . .b IJKG KG KG KG\gN gN gN gN gNH% gN gN gNT/ __Y//1EFFP1 P1 P1 P1 P1H- P1 P1 GFP1f WS^%677
%(%BD DT/ T/ T/ T/ T/8$ T/ T/ T/nR R Rq q q q qH- q q qhTB TB TB TB TBx( TB TB TBn P  P  PF zHMOOOOO s$   :A? ?B	B	D//D76D7