o
    ±ó®g:4 ã                   @   s^  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zd dlZW n ey}   dZY nw d dlZe ¡  e de ¡ d dl!Z!W d  ƒ n1 s›w   Y  e "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j/Z/e#j0dkZ1e 2d¡Z3i Z4dD ]\Z5Z6ze7e#e5ƒZ5e7e#j%e6ƒZ6W n	 e8yñ   Y q×w e6e4e5< q×dd„ Z9e9dƒZ:e ;e:¡Z<e9dƒZ=e9dƒZ>e ;e=¡Z?e ;e>¡Z@e9dƒZAe9dƒZBdZCe9dƒZDe ;eD¡ZEe9ddƒZFe9ddƒZGddddddd d!œZHe9d"ƒZIe9d#ƒZJd$ZKd%d&d'd(d)d*d+ddd d,œ
ZLe9d-ƒZMd.ZNe9d/ƒZOd0ZPe9dd1ƒZQe9d2ƒZRe9d3ƒZSe9d4ƒZTd$ZUd5ZVe9d6ƒZWe9d7ƒZXe9d8ƒZYe9d9ƒZZe9d:ƒZ[e9d;ƒZ\e9d<ƒZ]e9d=ƒZ^e ;e^¡Z_e7e#d>d ƒZ`e7e#d?d ƒZae7e#d@d ƒZbe7e#dAd ƒZce7e#dBd ƒZde7e#dCd ƒZedDdE„ Zfefƒ rËdFdG„ ZgndHdG„ ZgdIdJ„ ZhejidKdL„ ƒZjdMdN„ ZkdOdP„ ZldQdR„ Zme
jne dSZoe#jpdddddTœdUdV„ZqeJfdWdXœdYdZ„ZrG d[d\„ d\ejsƒZtG d]d^„ d^ejsƒZuG d_d`„ d`ejsƒZvG dadb„ dbejsƒZwG dcdd„ ddejsƒZxG dedf„ dfejsƒZyG dgdh„ dhejsƒZzd…didj„Z{dkdl„ Z|d dml}m~Z~ G dndo„ doejƒZ€G dpdq„ dqejƒZ	r		d†dtdu„Z‚	 d‡dvdw„ZƒG dxdy„ dyejsƒZ„e …ejdzƒd{¡G d|d}„ d}ejsƒƒZ†e)e#j‡d~ƒZˆe …eˆd¡Z‰G d€d„ dejsƒZŠdˆd‚dƒ„Z‹eŒd„kr­e‹ƒ  dS dS )‰é    N)Úsupport)Úimport_helper)Ú	os_helper)Úsocket_helper)Úthreading_helper)Úwarnings_helperÚignoreÚssl)Ú
TLSVersionÚ_TLSContentTypeÚ_TLSMessageTypeÚ_TLSAlertTypeÚgettotalrefcountÚwin32)é   r   r   ÚPY_SSL_DEFAULT_CIPHERS))ÚPROTOCOL_SSLv23ÚSSLv3)ÚPROTOCOL_TLSv1ÚTLSv1)ÚPROTOCOL_TLSv1_1ÚTLSv1_1c                  G   s   t jjt j t¡g| ¢R Ž S ©N)ÚosÚpathÚjoinÚdirnameÚ__file__©Úname© r    úC/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_ssl.pyÚ	data_file?   ó   r"   zkeycert.pemzssl_cert.pemzssl_key.pemzkeycert.passwd.pemzssl_key.passwd.pemZsomepassÚcapathz
4e1295a3.0z
5ed36f99.0)©)ÚcountryNameZXY©)ÚlocalityNamezCastle Anthrax©)ÚorganizationNamezPython Software Foundation))Ú
commonNameÚ	localhostzAug 26 14:23:15 2028 GMTzAug 29 14:23:15 2018 GMTZ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 GMTZCB2D80995A69525C)
ÚOCSPÚ	caIssuersÚcrlDistributionPointsr/   r0   r1   r2   r3   r4   r5   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_COMPATÚOP_IGNORE_UNEXPECTED_EOFc                  C   sV   z t ddd} d|  ¡ v W  d   ƒ W S 1 sw   Y  W d S  ty*   Y dS w )Nz/etc/os-releasezutf-8)ÚencodingZubuntuF)ÚopenÚreadÚFileNotFoundError)Úfr    r    r!   Ú	is_ubuntu¢   s   
(ÿÿrI   c                  G   s2   	 | D ]}t |dƒr|jtjjkr| d¡ qd S )NÚminimum_versionz@SECLEVEL=1:ALL)ÚhasattrrJ   r	   r
   r   Úset_ciphers)ÚctxsÚctxr    r    r!   Úseclevel_workaround¬   s   ÿþ
€ûrO   c                  G   ó   d S r   r    )rM   r    r    r!   rO   µ   ó   c                 C   sV   	 t | tƒrtt| d ƒ} | d u rdS | tjtjtjhv rdS | j}t|t	dƒd … ƒS )NFTZ	PROTOCOL_)
Ú
isinstanceÚstrÚgetattrr	   ÚPROTOCOL_TLSÚPROTOCOL_TLS_SERVERÚPROTOCOL_TLS_CLIENTr   Úhas_tls_versionÚlen)Úprotocolr   r    r    r!   Úhas_tls_protocol¹   s   
þr[   c                 C   sª   	 | 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ƒrS|jtjjkrS| |jkrSdS dS )NÚSSLv2FZHAS_rJ   Úmaximum_versionT)rR   rS   r	   r
   Ú__members__rT   r   ÚIS_OPENSSL_3_0_0ÚTLSv1_2Ú
SSLContextrW   rK   rJ   ÚMINIMUM_SUPPORTEDr]   ÚMAXIMUM_SUPPORTED)r5   rN   r    r    r!   rX   Î   s2   
ÿþýÿþýrX   c                    s   	 ‡ fdd„}|S )Nc                    s   t  ˆ ¡‡ ‡fdd„ƒ}|S )Nc                     s&   t ˆƒst ˆ› d¡‚ˆ | i |¤ŽS )Nz is not available.)rX   ÚunittestZSkipTest)ÚargsÚkw)Úfuncr5   r    r!   Úwrapperþ   s   z8requires_tls_version.<locals>.decorator.<locals>.wrapper)Ú	functoolsÚwraps)rg   rh   ©r5   )rg   r!   Ú	decoratorý   s   z'requires_tls_version.<locals>.decoratorr    )r5   rl   r    rk   r!   Úrequires_tls_version÷   s   rm   c                 C   s2   d  tjt ¡ Ž ¡}tjrtj | | ¡ d S d S )Nú )	r   Ú	tracebackÚformat_exceptionÚsysÚexc_infor   ÚverboseÚstdoutÚwrite)ÚprefixZ
exc_formatr    r    r!   Úhandle_error  s   ÿrw   c                   C   s$   t jrt  ¡ jdkrt j S t j S ©Nr   )ÚtimeÚdaylightÚ	localtimeÚtm_isdstÚaltzoneÚtimezoner    r    r    r!   Ú
utc_offset  s   r   )Úcategory)Ú	cert_reqsÚca_certsÚciphersÚcertfileÚkeyfilec                K   sœ   |  d¡st|d< t tj¡}nt tj¡}|d ur%|tjkr"d|_||_|d ur.| 	|¡ |d us6|d ur<| 
||¡ |d urE| |¡ |j| fi |¤ŽS )NÚserver_sideÚserver_hostnameF)ÚgetÚSIGNED_CERTFILE_HOSTNAMEr	   ra   rW   rV   Ú	CERT_NONEÚcheck_hostnameÚverify_modeÚload_verify_locationsÚload_cert_chainrL   Úwrap_socket)Úsockr   r‚   rƒ   r„   r…   ÚkwargsÚcontextr    r    r!   Útest_wrap_socket  s   



r“   T©Úserver_chainc                C   sx   	 | t krt}n| tkrt}n| tkrt}nt| ƒ‚t tj	¡}| 
t¡ t tj¡}| | ¡ |r7| 
t¡ |||fS r   )ÚSIGNED_CERTFILEr‰   ÚSIGNED_CERTFILE2ÚSIGNED_CERTFILE2_HOSTNAMEÚ	NOSANFILEÚNOSAN_HOSTNAMEÚ
ValueErrorr	   ra   rW   r   Ú
SIGNING_CArV   rŽ   )Zserver_certr•   ÚhostnameÚclient_contextÚserver_contextr    r    r!   Útesting_context0  s   



r    c                   @   sš  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zejdd„ ƒZdd„ Zdd„ Zdd„ Zedd „ ƒZd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zed)d*„ ƒZd+d,„ Zd-d.„ Ze d/ej v d0¡d1d2„ ƒZ!d3d4„ Z"d5d6„ Z#e e$j%d7kd8¡d9d:„ ƒZ&e e$j%d7kd8¡d;d<„ ƒZ'd=d>„ Z(d?d@„ Z)dAdB„ Z*dCdD„ Z+dEdF„ Z,e e-ƒ dG¡dHdI„ ƒZ.dJdK„ Z/e 0dLdM¡dNdO„ ƒZ1dPdQ„ Z2dRdS„ Z3dTS )UÚBasicSocketTestsc                 C   sš   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_REQUIREDrA   r?   r@   r>   ÚassertEqualÚHAS_SNIÚHAS_ECDHZHAS_TLSv1_2ZHAS_TLSv1_3ÚOP_NO_SSLv2ÚOP_NO_SSLv3ÚOP_NO_TLSv1ÚOP_NO_TLSv1_3ÚOP_NO_TLSv1_1ÚOP_NO_TLSv1_2rU   r   ©Úselfr    r    r!   Útest_constantsK  s$   zBasicSocketTests.test_constantsc              
   C   s–   t jt jt jt jt jt jg}|D ]1}| j|d! |  t	d¡ d |_
W d   ƒ n1 s-w   Y  W d   ƒ q1 s<w   Y  qt | t j¡ d S )N)Ússl_typezimmutable type)Ú_sslZ_SSLContextZ
_SSLSocketÚ	MemoryBIOZCertificateZ
SSLSessionÚSSLErrorÚsubTestÚassertRaisesRegexÚ	TypeErrorÚvaluer   Zcheck_disallow_instantiation)r¯   Z	ssl_typesr±   r    r    r!   Útest_ssl_types_  s   úÿ€ÿzBasicSocketTests.test_ssl_typesc              	   C   st   |   td¡* t ¡ }t |¡ W d   ƒ n1 sw   Y  W d   ƒ d S W d   ƒ d S 1 s3w   Y  d S ©Nzpublic constructor)r¶   r·   Úsocketr	   Ú	SSLSocket©r¯   Úsr    r    r!   Útest_private_initn  s   
ÿÿ"ÿz"BasicSocketTests.test_private_initc                 C   s2   t j}|  t|ƒd¡ t  |¡}|  |j|¡ d S )Nz_SSLMethod.PROTOCOL_TLS_CLIENT)r	   rW   r¥   rS   ra   ÚassertIsrZ   ©r¯   ÚprotorN   r    r    r!   Útest_str_for_enumss  s   
z#BasicSocketTests.test_str_for_enumsc                 C   s&  t  ¡ }tjrtj d||rdpdf ¡ t ¡  t  	d¡\}}W d   ƒ n1 s+w   Y  |  
t|ƒd¡ |  
||dk¡ |rPt  d¡}|  
t|ƒd¡ n	|  t jt jd¡ |  tt jd¡ t ¡  |  tt j	d¡ W d   ƒ n1 sxw   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	   ZRAND_statusr   rs   rq   rt   ru   r   Úcheck_warningsZRAND_pseudo_bytesr¥   rY   Z
RAND_bytesÚassertRaisesr´   r›   ZRAND_addÚ	bytearray)r¯   ÚvÚdataZis_cryptographicr    r    r!   Útest_random{  s.   
ÿÿ
ÿ

ÿzBasicSocketTests.test_randomc                 C   s˜   |   tj t¡t¡ |   tj t¡t¡ tj t¡}t	j
r*tj dt |¡ d ¡ |   |d d¡ |   |d d¡ |   |d d¡ |   |d d	¡ d S )
NÚ
r4   ))r-   zprojects.developer.nokia.com)r-   zprojects.forum.nokia.comr7   )zhttp://ocsp.verisign.comr8   )z0http://SVRIntl-G3-aia.verisign.com/SVRIntlG3.cerr9   )z0http://SVRIntl-G3-crl.verisign.com/SVRIntlG3.crl)r¥   r	   r²   Ú_test_decode_certÚCERTFILEÚCERTFILE_INFOr–   ÚSIGNED_CERTFILE_INFOÚ	NOKIACERTr   rs   rq   rt   ru   ÚpprintÚpformat©r¯   Úpr    r    r!   Útest_parse_cert•  s*   
þ
þ
ÿ
ÿ
ÿz BasicSocketTests.test_parse_certc                 C   sL   t j t¡}tjrtj dt	 
|¡ d ¡ |  |dddddddd	œ¡ d S )
NrÍ   )©)r&   ZUK))r+   zcody-cazJun 14 18:00:58 2028 GMTzJun 18 18:00:58 2018 GMTZ02)rØ   ))r+   ú#codenomicon-vm-2.test.lal.cisco.com))r-   rÙ   r   r.   )r	   r²   rÎ   ÚTALOS_INVALID_CRLDPr   rs   rq   rt   ru   rÓ   rÔ   r¥   rÕ   r    r    r!   Útest_parse_cert_CVE_2019_5010²  s   õþz.BasicSocketTests.test_parse_cert_CVE_2019_5010c                 C   sx   t j t¡}tjrtj dt	 
|¡ d ¡ d}|  |d |¡ |  |d |¡ t jdkr0d}nd}|  |d |¡ d S )	NrÍ   )©)r&   ZUS))ÚstateOrProvinceNameZOregon))r(   Z	Beavertonr)   ))ÚorganizationalUnitNamezPython Core Development©)r+   únull.python.org example.org))ÚemailAddresszpython-dev@python.orgr3   r/   )r   é	   é   )©r-   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>r4   )r	   r²   rÎ   ÚNULLBYTECERTr   rs   rq   rt   ru   rÓ   rÔ   r¥   Z_OPENSSL_API_VERSION)r¯   rÖ   r3   Zsanr    r    r!   Útest_parse_cert_CVE_2013_4238Ç  s   
z.BasicSocketTests.test_parse_cert_CVE_2013_4238c                 C   s    t j t¡}|  |d d¡ d S )Nr4   )
)r-   Zallsans©Ú	othernameú<unsupported>rí   )ræ   zuser@example.org)r-   zwww.example.org)Z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Õ   r    r    r!   Útest_parse_all_sansä  s   
ÿz$BasicSocketTests.test_parse_all_sansc                 C   s¤   t tdƒ}| ¡ }W d   ƒ n1 sw   Y  t |¡}t |¡}t |¡}|  ||¡ | tjd ¡s=|  	d| ¡ | 
dtj d ¡sP|  	d| ¡ 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
)rE   ÚCAFILE_CACERTrF   r	   ÚPEM_cert_to_DER_certZDER_cert_to_PEM_certr¥   Ú
startswithZ
PEM_HEADERÚfailÚendswithZ
PEM_FOOTER)r¯   rH   ÚpemÚd1Zp2Úd2r    r    r!   Útest_DER_to_PEMù  s   
ÿ


ÿz BasicSocketTests.test_DER_to_PEMc                 C   s   t j}t j}t j}|  |t¡ |  |t¡ |  |t¡ |  |d¡ |  	|d¡ |\}}}}}|  |d¡ |  	|d¡ |  |d¡ |  	|d¡ |  |d¡ |  	|d¡ |  |d¡ |  
|d¡ |  |d¡ |  
|d¡ d	|d
›}	d|d
›d|d
›d|d
›}
|  | |
|	f¡||t|ƒf¡ d S )Ni i   @rÅ   é   r   é   é?   é   z	LibreSSL ÚdzOpenSSL Ú.)r	   ZOPENSSL_VERSION_NUMBERÚOPENSSL_VERSION_INFOÚOPENSSL_VERSIONÚassertIsInstanceÚintÚtuplerS   ÚassertGreaterEqualÚ
assertLessZassertLessEqualÚ
assertTruer÷   Úhex)r¯   ÚnÚtr¾   ÚmajorÚminorZfixÚpatchÚstatusZlibressl_verZopenssl_verr    r    r!   Útest_openssl_version  s2   þz%BasicSocketTests.test_openssl_versionc                 C   s`   t   t j¡}t|ƒ}t |¡}t dtf¡	 ~W d   ƒ n1 s"w   Y  |  |ƒ d ¡ d S )NÚ )	r»   ÚAF_INETr“   ÚweakrefÚrefr   rÇ   ÚResourceWarningr¥   )r¯   r¾   ÚssÚwrr    r    r!   Útest_refcycle$  s   
ÿzBasicSocketTests.test_refcyclec              	   C   sò   t   t j¡}t|ƒe}|  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¡ W d   ƒ d S 1 srw   Y  d S )NrÅ   ó   x)z0.0.0.0r   r    r   éd   )r»   r  r“   rÈ   ÚOSErrorÚrecvÚ	recv_intorÉ   ÚrecvfromÚrecvfrom_intoÚsendÚsendtoÚNotImplementedErrorÚdupÚsendmsgÚrecvmsgÚrecvmsg_into©r¯   r¾   r  r    r    r!   Útest_wrapped_unconnected/  s"   


ÿ
ÿ"õz)BasicSocketTests.test_wrapped_unconnectedc              	   C   s\   dD ])}t   t j¡}| |¡ t|ƒ}|  || ¡ ¡ W d   ƒ q1 s&w   Y  qd S )N)Ng        ç      @)r»   r  Ú
settimeoutr“   r¥   Ú
gettimeout)r¯   Útimeoutr¾   r  r    r    r!   Útest_timeoutA  s   

ÿýzBasicSocketTests.test_timeoutc           	   
   C   sà  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 ]C}| j|d3 t  t j¡}|  t¡}| j|O  _W d   ƒ n1 sGw   Y  |  dt|jƒ¡ W d   ƒ q!1 s_w   Y  q!|D ]@}| j|d0 |  t¡}t  |¡ W d   ƒ n1 s…w   Y  |  d|j› dt|jƒ¡ W d   ƒ qg1 s¢w   Y  qg|D ]C}| j|d3 t  t j¡}|  t¡}||_W d   ƒ n1 sÌw   Y  |  d|›dt|jƒ¡ W d   ƒ qª1 sèw   Y  qªd S )N)Úoptionz4ssl.OP_NO_SSL*/ssl.OP_NO_TLS* options are deprecated)rZ   zssl.z is deprecatedrk   )r	   rª   r¬   r­   r«   r   r   ÚPROTOCOL_TLSv1_2rU   r
   r   r   r   rµ   ra   rW   ÚassertWarnsÚDeprecationWarningÚoptionsr¥   rS   Úwarningr   rJ   )	r¯   r5  Ú	protocolsZversionsr1  rN   ÚcmrZ   r5   r    r    r!   Útest_openssl111_deprecationsJ  s^   üüýÿþü	ÿþýÿ
þüÿz-BasicSocketTests.test_openssl111_deprecationsc              	   C   sð  t   ¡ }| jtdtj|td | jtdtj|dd | jtdtj|ddd tj|dtd}|  td|jtd	f¡ W d   ƒ n1 sDw   Y  |  t	¡#}t   ¡ }tj|t
d
 W d   ƒ n1 sew   Y  W d   ƒ n1 stw   Y  |  |jjtj¡ |  t	¡$}t   ¡ }tj|tt
d W d   ƒ n1 sŸw   Y  W d   ƒ n1 s®w   Y  |  |jjtj¡ |  t	¡$}t   ¡ }tj|t
t
d W d   ƒ n1 sÙw   Y  W d   ƒ n1 sèw   Y  |  |jjtj¡ d S )Nzcertfile must be specified©r…   z5certfile must be specified for server-side operationsT©r†   r  ©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¾   r8  r    r    r!   Útest_errors_sslwrapz  sV   þþ
þ
ÿÿ
ÿ€ÿ
ÿÿ€ÿ
ÿÿ€ÿz$BasicSocketTests.test_errors_sslwrapc                 C   sp   	 t j t j t¡pt j|¡}t ¡ }|  |j¡ |  	t
j¡ t||d W d   ƒ d S 1 s1w   Y  d S )Nr=  )r   r   r   r   r   Úcurdirr»   Ú
addCleanupÚcloserÈ   r	   r´   r“   ©r¯   r„   r   r    r    r!   Úbad_cert_test˜  s   ÿÿ"ÿzBasicSocketTests.bad_cert_testc                 C   ó   	 |   d¡ d S )Nr;   ©rJ  r®   r    r    r!   Útest_empty_cert¢  ó   z BasicSocketTests.test_empty_certc                 C   rK  )Nr<   rL  r®   r    r    r!   Útest_malformed_cert¦  rN  z$BasicSocketTests.test_malformed_certc                 C   rK  )Nr=   rL  r®   r    r    r!   Útest_malformed_keyª  rN  z#BasicSocketTests.test_malformed_keyc              	      sL  dd„ }‡ fd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/ƒ ||d0ƒ ||d1ƒ d2d3d4œ}||d5ƒ ||d6ƒ ||d7ƒ dd8d9œ}||d:ƒ ||d;ƒ ||d<ƒ ||d=ƒ ||d>ƒ ||d?ƒ ||d@ƒ tjr„ddAd9œ}||dBƒ ||dCƒ ||dDƒ ||dEƒ ||dFƒ ||d@ƒ d2dGd4œ}||d5ƒ dHdIdJd-œ}||d5ƒ dHdGdJd-œ}||dKƒ ˆ  ttjd d¡ ˆ  ttji d¡ ddLi}ˆ  tj	dM¡ t |dN¡ W d   ƒ n	1 sÓw   Y  ddOi}ˆ  tj	dP¡ t |dQ¡ W d   ƒ n	1 sõw   Y  ddRi}ˆ  tj	dS¡ t |dT¡ W d   ƒ n	1 sw   Y  ddUi}ˆ  tj	dV¡ t |dW¡ W d   ƒ n	1 s9w   Y  ddXi}ˆ  tj	dY¡ t |dZ¡ W d   ƒ n	1 s[w   Y  d[D ]}ˆ  t¡ t 
|¡ W d   ƒ qb1 s{w   Y  qbd\D ]}ˆ  t 
|¡¡ q„tjr¢d]D ]}ˆ  t 
|¡¡ q–d S d S )^Nc                 S   s   t  | |¡ d S r   )r	   Úmatch_hostname©Úcertr   r    r    r!   Úok°  s   z0BasicSocketTests.test_match_hostname.<locals>.okc                    s   ˆ   tjtj| |¡ d S r   )rÈ   r	   ÚCertificateErrorrQ  rR  r®   r    r!   rø   ²  s   ÿz2BasicSocketTests.test_match_hostname.<locals>.failr3   )))r+   úexample.comrV  zExAmple.cOmzwww.example.comz.example.comzexample.orgZ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))r-   úlinuxfr.org)r-   úlinuxfr.comrí   )r0   r3   r4   rZ  r[  rï   rY  zDec 18 23:59:59 2011 GMT)rÜ   ©)rÝ   Ú
California©)r(   zMountain View©)r*   z
Google Inc©)r+   úmail.google.com)r0   r3   ra  z	gmail.comr]  )©r-   rV  )rê   ú10.11.12.13)rê   ú14.15.16.17rð   )r3   r4   rc  rd  z127.1z14.15.16.17 z14.15.16.17 extra dataz14.15.16.18zexample.net)rb  )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î   Z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'Zcom)Ú1r  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	   rQ  r¶   rU  Z_inet_patonr  )r¯   rT  rø   rS  rW  ÚinvalidZipaddrr    r®   r!   Útest_match_hostname®  s  




























þ



ÿ


ÿ






ÿ





ÿ
û
û
þýþýþýþýþý$ÿþz$BasicSocketTests.test_match_hostnamec                 C   sP   t  t j¡}t ¡ }| jt|j|ddd W d   ƒ d S 1 s!w   Y  d S )NTzsome.hostname©r‡   )r	   ra   rV   r»   rÈ   r›   r   )r¯   rN   r   r    r    r!   Útest_server_sideu  s   
ÿ"ÿz!BasicSocketTests.test_server_sidec              	   C   s   t  d¡}t   t j¡}| | ¡ ¡ t|dd"}|  t¡ | d¡ W d   ƒ n1 s.w   Y  W d   ƒ n1 s=w   Y  | 	¡  d S )N©rñ   r   F©Údo_handshake_on_connectzunknown-type)
r»   Úcreate_serverr  r?  Úgetsocknamer“   rÈ   r›   Úget_channel_bindingrH  )r¯   r¾   Úcr  r    r    r!   Útest_unknown_channel_binding|  s   
ÿ€ÿz-BasicSocketTests.test_unknown_channel_bindingú
tls-uniqueú*'tls-unique' channel binding not availablec                 C   s”   t   t j¡}t|ƒ}|  | d¡¡ W d   ƒ n1 sw   Y  t   t j¡}t|dtd}|  | d¡¡ W d   ƒ d S 1 sCw   Y  d S )Nrw  Tr<  )r»   r  r“   ÚassertIsNonert  rÏ   r*  r    r    r!   Útest_tls_unique_channel_binding†  s   
ÿ"ÿz0BasicSocketTests.test_tls_unique_channel_bindingc                 C   sj   t t tj¡ƒ}t|ƒ}|  t¡}d }t ¡  W d   ƒ n1 s"w   Y  |  |t	|j
jd ƒ¡ d S rx   )r“   r»   r  Úreprr3  r  r   Ú
gc_collectÚassertInrS   r6  re   )r¯   r  rô   r8  r    r    r!   Útest_dealloc_warn’  s   
þz"BasicSocketTests.test_dealloc_warnc                 C   sˆ   t  ¡ }|  t|ƒd¡ |  |t j¡ t ¡ #}t|d< t	|d< t  ¡ }|  |j
t	¡ |  |jt¡ W d   ƒ d S 1 s=w   Y  d S )Né   ÚSSL_CERT_DIRÚSSL_CERT_FILE)r	   Zget_default_verify_pathsr¥   rY   r  ZDefaultVerifyPathsr   ÚEnvironmentVarGuardÚCAPATHrÏ   Úcafiler$   )r¯   ÚpathsÚenvr    r    r!   Útest_get_default_verify_pathsš  s   
"ûz.BasicSocketTests.test_get_default_verify_pathsr   úWindows specificc           	      C   sî   |   t d¡¡ |   t d¡¡ |  ttj¡ |  ttjd¡ tƒ }dD ]H}t |¡}|  |t¡ |D ]8}|  |t	¡ |  
t|ƒd¡ |\}}}|  |t¡ |  |ddh¡ |  |tttf¡ t|ttfƒrk| |¡ q3q$d}|  ||¡ d S )	NÚCAÚROOTr  )r‰  rŠ  r   Úx509_asnÚ
pkcs_7_asnú1.3.6.1.5.5.7.3.1)r  r	   Zenum_certificatesrÈ   r·   ÚWindowsErrorÚsetr  Úlistr  r¥   rY   Úbytesr}  Ú	frozensetÚboolrR   Úupdate)	r¯   Z
trust_oidsZ	storenameZstoreÚelementrS  ÚencZtrustÚ
serverAuthr    r    r!   Útest_enum_certificates¦  s*   


€ø
z'BasicSocketTests.test_enum_certificatesc                 C   s’   |   t d¡¡ |  ttj¡ |  ttjd¡ t d¡}|  |t¡ |D ]"}|  |t¡ |  	t
|ƒd¡ |  |d t¡ |  |d ddh¡ q$d S )Nr‰  r  é   r   rÅ   r‹  rŒ  )r  r	   Z	enum_crlsrÈ   r·   rŽ  r  r  r  r¥   rY   r‘  r}  )r¯   Zcrlsr•  r    r    r!   Útest_enum_crls¿  s   
üzBasicSocketTests.test_enum_crlsc              	   C   sÞ  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¡ t j 
d¡ W d   ƒ n1 skw   Y  td	ƒD ]4}zt j 
|¡}W n	 t	y‡   Y qtw |  |jt¡ |  |jt¡ |  |jt¡ |  |jttd ƒf¡ qtt j d¡}|  ||¡ |  |t j¡ |  t j d¡|¡ |  t j d¡|¡ |  t	d
¡ t j d¡ W d   ƒ d S 1 sèw   Y  d S )N)é   r—  úTLS Web Server Authenticationr  r  r›  r—  rœ  éÿÿÿÿzunknown NID 100000i † éè  zunknown object 'serverauth'Z
serverauth)r	   Ú_ASN1Objectr¥   ÚnidÚ	shortnameZlongnameÚoidr  rÈ   r›   Zfromnidr¶   Úranger  rS   ÚtypeZfromname)r¯   ÚexpectedÚvalÚiÚobjr    r    r!   Útest_asn1objectÎ  sH   
ÿÿÿ"ÿz BasicSocketTests.test_asn1objectc                 C   sÈ   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é‚   Z
clientAuth)
r	   rŸ  r  ÚPurposeÚSERVER_AUTHr¥   r   r¡  r¢  ÚCLIENT_AUTH)r¯   r¦  r    r    r!   Útest_purpose_enumõ  s    
ÿ
ÿz"BasicSocketTests.test_purpose_enumc                 C   s¼   t   t jt j¡}|  |j¡ |  t¡}t|tj	d W d   ƒ n1 s%w   Y  |  
t|jƒd¡ t tj¡}|  t¡}| |¡ W d   ƒ n1 sNw   Y  |  
t|jƒd¡ d S )N©r   z!only stream sockets are supported)r»   r  Ú
SOCK_DGRAMrG  rH  rÈ   r%  r“   r	   rŠ   r¥   rS   rB  ra   rW   r   )r¯   r¾   ZcxrN   r    r    r!   Útest_unsupported_dtls  s   ÿÿz&BasicSocketTests.test_unsupported_dtlsc                 C   s   |   t |¡|¡ d S r   )r¥   r	   Úcert_time_to_seconds)r¯   Ú
timestringZ	timestampr    r    r!   Úcert_time_ok  s   zBasicSocketTests.cert_time_okc                 C   s:   |   t¡ t |¡ W d   ƒ d S 1 sw   Y  d S r   )rÈ   r›   r	   r²  )r¯   r³  r    r    r!   Úcert_time_fail  s   "ÿzBasicSocketTests.cert_time_failz)local time needs to be different from UTCc                 C   s   |   dd¡ |   dd¡ d S )NzMay  9 00:00:00 2007 GMTg   ÀCÑAúJan  5 09:34:43 2018 GMTç  À¬Ñ“ÖA)r´  r®   r    r    r!   Ú"test_cert_time_to_seconds_timezone  s   z3BasicSocketTests.test_cert_time_to_seconds_timezonec                 C   sà   d}d}|   ||¡ |  tj|d|¡ |   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·  )Z	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   àWÒAzDec 31 23:59:60 2008 GMTzJan  1 00:00:00 2009 GMTzJan  5 09:34:59 2018 GMTiÃFOZzJan  5 09:34:60 2018 GMTiÄFOZzJan  5 09:34:61 2018 GMTiÅFOZzJan  5 09:34:62 2018 GMTzDec 31 23:59:59 9999 GMTg €¿ úMB)r´  r¥   r	   r²  rµ  )r¯   r³  ZtsZ
newyear_tsr    r    r!   Útest_cert_time_to_seconds   s*   







z*BasicSocketTests.test_cert_time_to_secondsÚLC_ALLr  c                 C   s@   dd„ }|ƒ   ¡ dkr|  d¡ |  dd¡ |  |ƒ d ¡ d S )Nc                   S   s   t  dd¡S )Nz%b)	rÅ   r™  r   rþ   é   r  r   r   r   )ry   Ústrftimer    r    r    r!   Úlocal_february_nameG  ó   zNBasicSocketTests.test_cert_time_to_seconds_locale.<locals>.local_february_nameZfebz>locale-specific month name needs to be different from C localezFeb  9 00:00:00 2007 GMTg   `îrÑAz  9 00:00:00 2007 GMT)ÚlowerÚskipTestr´  rµ  )r¯   r½  r    r    r!   Ú test_cert_time_to_seconds_localeC  s
   
z1BasicSocketTests.test_cert_time_to_seconds_localec                 C   sv   t   t j¡}|  |j¡ t |¡}tt   t j¡tjd}|  |j¡ | 	t
|f¡}tjtjtjtjf}|  ||¡ d S )Nr¯  )r»   r  rG  rH  r   Ú	bind_portr“   r	   r¤   Ú
connect_exr@  rC  ZECONNREFUSEDZEHOSTUNREACHZ	ETIMEDOUTÚEWOULDBLOCKr}  )r¯   ÚserverÚportr¾   ÚrcÚerrorsr    r    r!   Útest_connect_ex_errorR  s   
ÿþz&BasicSocketTests.test_connect_ex_errorc              	   C   s¶   t ƒ \}}}t|d}|D |jt ¡ |d"}| t|jf¡ |  | d¡d¡ |  | 	d¡d¡ W d   ƒ n1 s<w   Y  W d   ƒ d S W d   ƒ d S 1 sTw   Y  d S )N©r’   rm  r   ó    )
r    ÚThreadedEchoServerr   r»   r?  r@  rÆ  r¥   r  r#  ©r¯   rž   rŸ   r   rÅ  r¾   r    r    r!   Útest_read_write_zerob  s   

ÿüÿ"ÿz%BasicSocketTests.test_read_write_zeroN)4Ú__name__Ú
__module__Ú__qualname__r°   r¹   r¿   rÃ   rÌ   r×   rÛ   rì   ró   rý   r  r   Zcpython_onlyr  r+  r0  r9  Úignore_deprecationrE  rJ  rM  rO  rP  rl  rn  rv  rd   Ú
skipUnlessr	   ÚCHANNEL_BINDING_TYPESrz  r~  r‡  rq   Úplatformr˜  rš  r©  r®  r±  r´  rµ  r   r¸  r¹  Zrun_with_localerÁ  rÉ  rÎ  r    r    r    r!   r¡   I  sh    

	0


 G
ÿ



'ÿ

#
r¡   c                   @   s|  e Zd Zdd„ Zdd„ Ze edkd¡dd„ ƒZd	d
„ Z	dd„ Z
dd„ Zdd„ Zedd„ ƒZe eejdƒd¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Ze ed¡d d!„ ƒZd"d#„ Zd$d%„ Ze ejd&¡d'd(„ ƒZd)d*„ Zd+d,„ Zd-d.„ Z d/d0„ Z!d1d2„ Z"e e#j$d3kd4¡d5d6„ ƒZ%e e#j$d3kd7¡e ee#d8ƒd9¡d:d;„ ƒƒZ&d<d=„ Z'd>d?„ Z(d@dA„ Z)dBdC„ Z*dDdE„ Z+dFdG„ Z,dHdI„ Z-dJS )KÚContextTestsc              	   C   s®   t D ]"}t ¡  t |¡}W d   ƒ n1 sw   Y  |  |j|¡ qt ¡  t ¡ }W d   ƒ n1 s8w   Y  |  |jtj¡ |  t	tjd¡ |  t	tjd¡ d S )Nr  é*   )
Ú	PROTOCOLSr   rÇ   r	   ra   r¥   rZ   rU   rÈ   r›   )r¯   rZ   rN   r    r    r!   Útest_constructorp  s   
ÿ

ÿzContextTests.test_constructorc                 C   s^   t  t j¡}| d¡ | d¡ |  t jd¡ | d¡ W d   ƒ d S 1 s(w   Y  d S )NÚALLÚDEFAULTúNo cipher can be selectedú^$:,;?*'dorothyx)r	   ra   rW   rL   r¶   r´   ©r¯   rN   r    r    r!   Útest_ciphers{  s   

"ÿzContextTests.test_ciphersrÅ   z+Test applies only to Python default ciphersc                 C   sf   t  t j¡}| ¡ }|D ]$}|d }|  d|¡ |  d|¡ |  d|¡ |  d|¡ |  d|¡ qd S )Nr   ZPSKZSRPZMD5ZRC4Z3DES)r	   ra   rW   Úget_ciphersZassertNotIn)r¯   rN   rƒ   Zsuiter   r    r    r!   Útest_python_ciphers‚  s   úz ContextTests.test_python_ciphersc                 C   sH   t  t j¡}| d¡ tdd„ | ¡ D ƒƒ}|  d|¡ |  d|¡ d S )NZAESGCMc                 s   s    | ]}|d  V  qdS )r   Nr    )Ú.0r  r    r    r!   Ú	<genexpr>’  ó   € z0ContextTests.test_get_ciphers.<locals>.<genexpr>zAES256-GCM-SHA384zAES128-GCM-SHA256)r	   ra   rW   rL   r  rà  r}  )r¯   rN   Únamesr    r    r!   Útest_get_ciphers  s
   
zContextTests.test_get_ciphersc                 C   sú   t  t j¡}t jt jB t jB }|ttB tB t	B t
B tB O }|  ||j¡ t ¡  | jt jO  _W d   ƒ n1 s;w   Y  |  |t jB |j¡ t ¡  |jt j @ |_W d   ƒ n1 saw   Y  |  ||j¡ d|_|  d|jt j @ ¡ d S rx   )r	   ra   rW   ÚOP_ALLr¨   r©   r>   rA   r?   r@   rB   rC   r¥   r5  r   rÇ   rª   )r¯   rN   Údefaultr    r    r!   Útest_options–  s,   ÿÿþý
ÿ
ÿzContextTests.test_optionsc                 C   s@  t  ¡  t tj¡}W d   ƒ n1 sw   Y  |  |jtj¡ tj|_|  |jtj¡ tj	|_|  |jtj	¡ tj|_|  |jtj¡ |  
t¡ d |_W d   ƒ n1 sYw   Y  |  
t¡ d|_W d   ƒ n1 sqw   Y  t tj¡}|  |jtj¡ |  |j¡ t tj¡}|  |jtj	¡ |  |j¡ d S ©Nr×  )r   rÇ   r	   ra   rU   r¥   rŒ   rŠ   r£   r¤   rÈ   r·   r›   rV   ÚassertFalser‹   rW   r  rÞ  r    r    r!   Útest_verify_mode_protocolª  s,   
ÿÿÿz&ContextTests.test_verify_mode_protocolc                 C   sŽ   t  t j¡}|  |j¡ t jr,d|_|  |j¡ d|_|  |j¡ d|_|  |j¡ d S |  t¡ d|_W d   ƒ d S 1 s@w   Y  d S ©NTF)	r	   ra   rW   r  Úhostname_checks_common_nameÚHAS_NEVER_CHECK_COMMON_NAMErë  rÈ   ÚAttributeErrorrÞ  r    r    r!   Ú test_hostname_checks_common_nameÂ  s   "ÿz-ContextTests.test_hostname_checks_common_namec                 C   sì  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h¡ t jj|_
|  	|j
t jjt jjh¡ |  t¡ d|_
W d   ƒ n1 s¤w   Y  t  t j¡}|  	|j
|¡ |  |jt jj¡ |  t¡ t jj|_
W d   ƒ n1 sÔw   Y  |  t¡ t jj|_W d   ƒ d S 1 sïw   Y  d S rê  )r	   ra   rV   r
   rb   r   r`   rc   ÚTLSv1_3r}  rJ   r]   r   r¥   r   rÈ   r›   r   )r¯   rN   Zminimum_rangeZmaximum_ranger    r    r!   Útest_min_max_versionÐ  sx   ú
üÿÿ


ÿ
ÿ


ÿ
ÿ

ÿ
þ
þÿÿ
ÿÿ"ÿz!ContextTests.test_min_max_versionÚsecurity_levelzrequires OpenSSL >= 1.1.0c                 C   s&   t  t j¡}h d£}|  |j|¡ d S )N>   r   rÅ   r™  r   rþ   r»  )r	   ra   rW   r}  rô  )r¯   rN   Zsecurity_level_ranger    r    r!   Útest_security_level  s   z ContextTests.test_security_levelc                 C   sæ   t  t j¡}tt ddƒ}|  |jt j|B ¡ t j|_|  |jt j¡ t j|_|  |jt j¡ t j|_|  |jt j¡ t j	|_|  |jt j	¡ t jt j
B |_|  |jt jt j
B ¡ |  t¡ d |_W d   ƒ d S 1 slw   Y  d S )NÚVERIFY_X509_TRUSTED_FIRSTr   )r	   ra   rV   rT   r¥   Úverify_flagsÚVERIFY_DEFAULTÚVERIFY_CRL_CHECK_LEAFZVERIFY_CRL_CHECK_CHAINZVERIFY_ALLOW_PROXY_CERTSZVERIFY_X509_STRICTrÈ   r·   )r¯   rN   Útfr    r    r!   Útest_verify_flags2  s$   
ÿ"ÿzContextTests.test_verify_flagsc                 C   sÐ  t  t j¡}|jtd d |jttd | jt|jtd |  t¡}| t¡ W d   ƒ n1 s2w   Y  |  	|j
jtj¡ |  t jd¡ | t¡ W d   ƒ n1 sWw   Y  |  t jd¡ | t¡ W d   ƒ n1 ssw   Y  t  t j¡}| tt¡ |jttd |jttd |  t jd¡ | t¡ W d   ƒ n1 s©w   Y  |  t jd¡ | t¡ W d   ƒ n1 sÅw   Y  |  t jd¡ |jttd W d   ƒ n1 sãw   Y  t  t j¡}|  t jd¡ | tt¡ W d   ƒ n	1 sw   Y  |jttd |jtt ¡ d |jttt ¡ ƒd | ttt¡ | ttt ¡ ¡ | tttt ¡ ƒ¡ |  td¡ |jtdd W d   ƒ n	1 s[w   Y  |  t j¡ |jtdd W d   ƒ n	1 syw   Y  |  td	¡ |jtd
d d W d   ƒ n	1 s™w   Y  dd„ }dd„ }dd„ }dd„ }dd„ }dd„ }dd„ }	G dd„ dƒ}
|jt|d |jt|d |jt|d |jt|
ƒ d |jt|
ƒ jd |  t j¡ |jt|d W d   ƒ n	1 s w   Y  |  td	¡ |jt|d W d   ƒ n	1 sw   Y  |  td¡ |jt|d W d   ƒ n	1 s<w   Y  |  td¡ |jt|	d W d   ƒ n	1 sZw   Y  |jt|	d d S )Nr:  úPEM libr>  zkey values mismatch)Úpasswordzshould be a stringTÚbadpasszcannot be longeró   ai  c                   S   ó   t S r   ©ÚKEY_PASSWORDr    r    r    r!   Úgetpass_unicodeu  rQ   z:ContextTests.test_load_cert_chain.<locals>.getpass_unicodec                   S   s   t  ¡ S r   )r  rh  r    r    r    r!   Úgetpass_bytesw  ó   z8ContextTests.test_load_cert_chain.<locals>.getpass_bytesc                   S   s   t t ¡ ƒS r   )rÉ   r  rh  r    r    r    r!   Úgetpass_bytearrayy  r¾  z<ContextTests.test_load_cert_chain.<locals>.getpass_bytearrayc                   S   ó   dS )Nrþ  r    r    r    r    r!   Úgetpass_badpass{  rQ   z:ContextTests.test_load_cert_chain.<locals>.getpass_badpassc                   S   s   dd S )Nrÿ  i   r    r    r    r    r!   Úgetpass_huge}  r  z7ContextTests.test_load_cert_chain.<locals>.getpass_hugec                   S   r  )Nrâ   r    r    r    r    r!   Úgetpass_bad_type  rQ   z;ContextTests.test_load_cert_chain.<locals>.getpass_bad_typec                   S   s   t dƒ‚)Núgetpass error)Ú	Exceptionr    r    r    r!   Úgetpass_exception  r  z<ContextTests.test_load_cert_chain.<locals>.getpass_exceptionc                   @   ó   e Zd Zdd„ Zdd„ ZdS )z:ContextTests.test_load_cert_chain.<locals>.GetPassCallablec                 S   r   r   r  r®   r    r    r!   Ú__call__„  rQ   zCContextTests.test_load_cert_chain.<locals>.GetPassCallable.__call__c                 S   r   r   r  r®   r    r    r!   Úgetpass†  rQ   zBContextTests.test_load_cert_chain.<locals>.GetPassCallable.getpassN)rÏ  rÐ  rÑ  r  r  r    r    r    r!   ÚGetPassCallableƒ  s    r  zmust return a stringr  )r	   ra   rV   rŽ   rÏ   rÈ   r·   r  rA  r¥   rB  rC  rD  r¶   r´   ÚBADCERTÚ	EMPTYCERTÚONLYCERTÚONLYKEYÚBYTES_ONLYCERTÚBYTES_ONLYKEYrõ   ÚCERTFILE_PROTECTEDr  rh  rÉ   ÚONLYKEY_PROTECTEDr›   r  r  )r¯   rN   r8  r  r  r  r  r	  r
  r  r  r    r    r!   Útest_load_cert_chainF  sœ   ÿÿÿÿÿÿÿ
ÿ
ÿÿÿüÿÿÿÿÿz!ContextTests.test_load_cert_chainc                 C   s  t  t j¡}| t¡ |jtd d | t¡ |jtd d |  t|j¡ |  t|jd d d ¡ |  t¡}| t	¡ W d   ƒ n1 sDw   Y  |  
|jjtj¡ |  t jd¡ | t¡ W d   ƒ n1 siw   Y  | tt¡ |jttd |  t|jd d¡ d S )N)r„  r$   rü  ©r$   T)r	   ra   rV   r   rÏ   ÚBYTES_CERTFILErÈ   r·   r  rA  r¥   rB  rC  rD  r¶   r´   r  rƒ  ÚBYTES_CAPATH©r¯   rN   r8  r    r    r!   Útest_load_verify_locations™  s"   

ÿÿz'ContextTests.test_load_verify_locationsc                 C   s   t tƒ}| ¡ }W d   ƒ n1 sw   Y  t |¡}t tƒ}| ¡ }W d   ƒ n1 s0w   Y  t |¡}t tj¡}|  | 	¡ d d¡ |j
|d |  | 	¡ d d¡ |j
|d |  | 	¡ d d¡ |j
|d |  | 	¡ d d¡ t tj¡}d ||f¡}|j
|d |  | 	¡ d d¡ t tj¡}d|d|d	|d
g}|j
d |¡d |  | 	¡ d d¡ t tj¡}|j
|d |j
|d |  | 	¡ d d¡ |j
|d |  | 	¡ d d¡ t tj¡}d ||f¡}|j
|d |  | 	¡ d d¡ t tj¡}| jt|j
td |  tjd¡ |j
dd W d   ƒ n	1 s*w   Y  |  tjd¡ |j
dd W d   ƒ d S 1 sIw   Y  d S )NÚx509_car   ©ÚcadatarÅ   r™  rÍ   ÚheadÚotherZagainÚtailrË  z4no start line: cadata does not contain a certificateÚbrokenz6not enough data: cadata does not contain a certificates   broken)rE   rõ   rF   r	   rö   ÚCAFILE_NEURONIOra   rW   r¥   Úcert_store_statsr   r   rÈ   r·   Úobjectr¶   r´   )r¯   rH   Z
cacert_pemZ
cacert_derZneuronio_pemZneuronio_derrN   Zcombinedr    r    r!   Útest_load_verify_cadata¬  sd   

ÿ


ÿ

ÿþüþ$üz$ContextTests.test_load_verify_cadataú)Avoid mixing debug/release CRT on Windowsc                 C   sÊ   t  t j¡}| t¡ tjdkr| t¡ |  t	|j¡ |  t	|jd ¡ |  t
¡}| t¡ W d   ƒ n1 s9w   Y  |  |jjtj¡ |  t j¡}| t¡ W d   ƒ d S 1 s^w   Y  d S )NÚnt)r	   ra   rV   Úload_dh_paramsÚDHFILEr   r   ÚBYTES_DHFILErÈ   r·   rG   rA  r¥   rB  rC  rD  r´   rÏ   r  r    r    r!   Útest_load_dh_paramsë  s   


ÿ"ÿz ContextTests.test_load_dh_paramsc                 C   sH   t jt jhD ]}t  |¡}|  | ¡ ddddddddddddœ¡ qd S )Nr   )Znumberr?  Zconnect_goodZconnect_renegotiateÚacceptZaccept_goodZaccept_renegotiateÚhitsÚmissesZtimeoutsZ
cache_full)r	   rW   rV   ra   r¥   Úsession_statsrÁ   r    r    r!   Útest_session_statsù  s    


õþzContextTests.test_session_statsc                 C   s   t  t j¡}| ¡  d S r   )r	   ra   rW   Zset_default_verify_pathsrÞ  r    r    r!   Útest_set_default_verify_paths
  s   z*ContextTests.test_set_default_verify_pathsz#ECDH disabled on this OpenSSL buildc                 C   sb   t  t j¡}| d¡ | d¡ |  t|j¡ |  t|jd ¡ |  t|jd¡ |  t|jd¡ d S )NÚ
prime256v1s
   prime256v1Úfooó   foo)r	   ra   rV   Úset_ecdh_curverÈ   r·   r›   rÞ  r    r    r!   Útest_set_ecdh_curve  s   

z ContextTests.test_set_ecdh_curvec                 C   sj   t  t j¡}|  t|j¡ |  t|jd¡ |  t|jd¡ |  t|j|¡ dd„ }| d ¡ | |¡ d S )Nrþ   r  c                 S   rP   r   r    ©r   Ú
servernamerN   r    r    r!   Údummycallback#  rQ   z5ContextTests.test_sni_callback.<locals>.dummycallback)r	   ra   rV   rÈ   r·   Úset_servername_callback)r¯   rN   r>  r    r    r!   Útest_sni_callback  s   
zContextTests.test_sni_callbackc                 C   sJ   t  t j¡}|fdd„}| |¡ t |¡}~~t ¡  |  |ƒ d ¡ d S )Nc                 S   rP   r   r    )r   r=  rN   Úcycler    r    r!   r>  ,  rQ   z>ContextTests.test_sni_callback_refcycle.<locals>.dummycallback)	r	   ra   rV   r?  r  r  ÚgcÚcollectrÀ   )r¯   rN   r>  r  r    r    r!   Útest_sni_callback_refcycle(  s   

z'ContextTests.test_sni_callback_refcyclec                 C   sŽ   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	   ra   rW   r¥   r(  rŽ   rÏ   r   rõ   rÞ  r    r    r!   Útest_cert_store_stats4  s    

ÿ


ÿ


ÿ


ÿz"ContextTests.test_cert_store_statsc                 C   s´   t  t j¡}|  | ¡ g ¡ | t¡ |  | ¡ g ¡ | t¡ |  | ¡ ddddddddœg¡ ttƒ}| 	¡ }W d   ƒ n1 sDw   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 GMTZ00)z!https://www.cacert.org/revoke.crlr   )r/   r0   r1   r2   r9   r3   r5   T)r	   ra   rW   r¥   Úget_ca_certsr   rÏ   rõ   rE   rF   rö   )r¯   rN   rH   rú   Úderr    r    r!   Útest_get_ca_certsB  s(   


ôÿ

ÿ
zContextTests.test_get_ca_certsc                 C   s€   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	   ra   rW   Úload_default_certsr«  r¬  r­  rÈ   r·   rÞ  r    r    r!   Útest_load_default_certs^  s   z$ContextTests.test_load_default_certsr   znot-Windows specificc                 C   sj   t  t j¡}t ¡ !}t|d< t|d< | ¡  |  | 	¡ ddddœ¡ W d   ƒ d S 1 s.w   Y  d S )Nr€  r  r   rÅ   )rE  rF  r   )
r	   ra   rW   r   r‚  rƒ  rÏ   rK  r¥   r(  )r¯   rN   r†  r    r    r!   Útest_load_default_certs_envm  s   
"üz(ContextTests.test_load_default_certs_envrˆ  r   z3Debug build does not share environment between CRTsc                 C   sŽ   t  t j¡}| ¡  | ¡ }t  t j¡}t ¡ %}t|d< t|d< | ¡  |d  d7  < |  	| ¡ |¡ W d   ƒ d S 1 s@w   Y  d S )Nr€  r  rF  rÅ   )
r	   ra   rW   rK  r(  r   r‚  rƒ  rÏ   r¥   )r¯   rN   Ústatsr†  r    r    r!   Ú#test_load_default_certs_env_windowsv  s   
"ûz0ContextTests.test_load_default_certs_env_windowsc                 C   s†   |   |jtj@ tj¡ tdkr|   |jt@ t¡ tdkr%|   |jt@ t¡ tdkr2|   |jt@ t¡ tdkrA|   |jt@ t¡ d S d S rx   )r¥   r5  r	   r¨   r>   r?   r@   rA   rÞ  r    r    r!   Ú_assert_context_options…  s$   ÿÿÿÿÿz$ContextTests._assert_context_optionsc                 C   sä   t  ¡ }|  |jt j¡ |  |jt j¡ |  |j¡ |  	|¡ t
tƒ}| ¡ }W d   ƒ n1 s2w   Y  t jtt|d}|  |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¥   rZ   rW   rŒ   r¤   r  r‹   rP  rE   rœ   rF   rƒ  r«  r­  rV   rŠ   )r¯   rN   rH   r"  r    r    r!   Útest_create_default_context”  s$   


ÿÿ
z(ContextTests.test_create_default_contextc                 C   sL  t  ¡ }|  |jt j¡ |  |jt j¡ |  |j¡ |  	|¡ t
 ¡  t  t j¡}W d   ƒ n1 s4w   Y  |  |jt j¡ |  |jt j¡ |  	|¡ t
 ¡  t jt jt jdd}W d   ƒ n1 sgw   Y  |  |jt j¡ |  |jt j¡ |  |j¡ |  	|¡ t jt jjd}|  |jt j¡ |  |jt j¡ |  	|¡ d S )NT)r   r‹   )Zpurpose)r	   Ú_create_stdlib_contextr¥   rZ   rW   rŒ   rŠ   rë  r‹   rP  r   rÇ   r   r2  r¤   r  r«  r­  rV   rÞ  r    r    r!   Útest__create_stdlib_context«  s4   

ÿ

ýÿ
z(ContextTests.test__create_stdlib_contextc                 C   s   t  ¡  t tj¡}W d   ƒ n1 s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¡ tj	|_W d   ƒ n1 s´w   Y  d|_|  |j¡ tj	|_|  |jtj	¡ d S rí  )r   rÇ   r	   ra   rU   rë  r‹   r¥   rŒ   rŠ   r  r¤   r£   rÈ   r›   rÞ  r    r    r!   Útest_check_hostnameÈ  sF   
ÿ
ÿz ContextTests.test_check_hostnamec                 C   sT   t  t j¡}|  |j¡ |  |jt j¡ t  t j¡}|  	|j¡ |  |jt j
¡ d S r   )r	   ra   rW   r  r‹   r¥   rŒ   r¤   rV   rë  rŠ   rÞ  r    r    r!   Útest_context_client_serverô  s   z'ContextTests.test_context_client_serverc                 C   s¢   G dd„ dt jƒ}G dd„ dt jƒ}t  t j¡}||_||_|jt ¡ dd}|  	||¡ W d   ƒ n1 s8w   Y  |j
t  ¡ t  ¡ dd}|  	||¡ d S )Nc                   @   ó   e Zd ZdS )z;ContextTests.test_context_custom_class.<locals>.MySSLSocketN©rÏ  rÐ  rÑ  r    r    r    r!   ÚMySSLSocket   ó    rY  c                   @   rW  )z;ContextTests.test_context_custom_class.<locals>.MySSLObjectNrX  r    r    r    r!   ÚMySSLObject  rZ  r[  Tr;  )r	   r¼   Ú	SSLObjectra   rV   Zsslsocket_classZsslobject_classr   r»   r  Úwrap_bior³   )r¯   rY  r[  rN   r   r¨  r    r    r!   Útest_context_custom_classÿ  s   ÿz&ContextTests.test_context_custom_classc                 C   sò   t  t j¡}|  |jd¡ d|_|  |jd¡ d|_|  |jd¡ |  t¡ d|_W d   ƒ n1 s4w   Y  |  t¡ d |_W d   ƒ n1 sLw   Y  t  t j¡}|  |jd¡ |  t¡ d|_W d   ƒ d S 1 srw   Y  d S )Nr™  rÅ   r   r  )	r	   ra   rV   r¥   Znum_ticketsrÈ   r›   r·   rW   rÞ  r    r    r!   Útest_num_tickest  s"   ÿÿ"ÿzContextTests.test_num_tickestN).rÏ  rÐ  rÑ  rÙ  rß  rd   rÓ  r   rá  ræ  ré  rì  rñ  rÒ  ró  rK   r	   ra   rõ  rû  r  r  r*  ÚskipIfÚPy_DEBUG_WIN32r0  r5  r6  r§   r;  r@  rD  rG  rJ  rL  rq   rÕ  rM  rO  rP  rR  rT  rU  rV  r^  r_  r    r    r    r!   rÖ  n  sZ    
ÿ

N
þ
S
?

	
,rÖ  c                   @   s8   e Zd Zdd„ Ze ed¡dd„ ƒZdd„ Zdd	„ Z	d
S )ÚSSLErrorTestsc                 C   sX   t  dd¡}|  t|ƒd¡ |  |jd¡ t  dd¡}|  t|ƒd¡ |  |jd¡ d S )NrÅ   r8  )r	   r´   r¥   rS   rC  ZSSLZeroReturnError)r¯   Úer    r    r!   Útest_str#  s   zSSLErrorTests.test_strr+  c                 C   s‚   t  t j¡}|  t j¡}| t¡ W d   ƒ n1 sw   Y  |  |jj	d¡ |  |jj
d¡ t|jƒ}|  | d¡|¡ d S )NZPEMZNO_START_LINEz"[PEM: NO_START_LINE] no start line)r	   ra   rW   rÈ   r´   r-  rÏ   r¥   rB  ZlibraryÚreasonrS   r  r÷   )r¯   rN   r8  r¾   r    r    r!   Útest_lib_reason-  s   ÿ
zSSLErrorTests.test_lib_reasonc              
   C   s  t  t j¡}d|_t j|_t d¡f}t | 	¡ ¡}| 
d¡ |j|ddd9}|  t j¡}| ¡  W d   ƒ n1 s=w   Y  t|jƒ}|  | d¡|¡ |  |jjt j¡ W d   ƒ n1 scw   Y  W d   ƒ d S W d   ƒ d S 1 s{w   Y  d S )NFro  rp  z%The operation did not complete (read))r	   ra   rW   r‹   rŠ   rŒ   r»   rr  Úcreate_connectionrs  Úsetblockingr   rÈ   ÚSSLWantReadErrorÚdo_handshakerS   rB  r  r÷   r¥   rC  ÚSSL_ERROR_WANT_READ)r¯   rN   r¾   ru  r8  r    r    r!   Útest_subclass8  s"   

ÿ
úý"ýzSSLErrorTests.test_subclassc                 C   sÔ   t  ¡ }|  t¡ |jt  ¡ t  ¡ dd W d   ƒ n1 s w   Y  |  t¡ |jt  ¡ t  ¡ dd W d   ƒ n1 sAw   Y  |  t¡ |jt  ¡ t  ¡ dd W d   ƒ d S 1 scw   Y  d S )Nr  rm  z.example.orgzexample.org evil.com)r	   rQ  rÈ   r›   r]  r³   r·   rÞ  r    r    r!   Útest_bad_server_hostnameJ  s    ÿÿÿÿÿ"ÿz&SSLErrorTests.test_bad_server_hostnameN)
rÏ  rÐ  rÑ  rd  rd   r`  ra  rf  rl  rm  r    r    r    r!   rb  !  s    



rb  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚMemoryBIOTestsc                 C   sª   t  ¡ }| d¡ |  | ¡ d¡ |  | ¡ d¡ | d¡ | d¡ |  | ¡ d¡ |  | ¡ d¡ | d¡ |  | d¡d¡ |  | d¡d	¡ |  | d¡d¡ d S )
Nr9  rË  ó   bars   foobaró   bazr™  s   barÅ   ó   z)r	   r³   ru   r¥   rF   ©r¯   Úbior    r    r!   Útest_read_writeY  s   



zMemoryBIOTests.test_read_writec                 C   s¶   t  ¡ }|  |j¡ |  | ¡ d¡ |  |j¡ | d¡ |  |j¡ | ¡  |  |j¡ |  | d¡d¡ |  |j¡ |  | d¡d¡ |  |j¡ |  | ¡ d¡ |  |j¡ d S )NrË  r9  r™  s   forÅ   ó   o)	r	   r³   rë  Úeofr¥   rF   ru   Ú	write_eofr  rr  r    r    r!   Útest_eofg  s   
zMemoryBIOTests.test_eofc                 C   s    t  ¡ }|  |jd¡ | d¡ |  |jd¡ tdƒD ]}| d¡ |  |jd| d ¡ qtdƒD ]}| d¡ |  |j|d ¡ q2| ¡  |  |jd¡ d S )Nr   r9  r   rÅ   r  )r	   r³   r¥   Úpendingru   r£  rF   )r¯   rs  r§  r    r    r!   Útest_pendingw  s   


zMemoryBIOTests.test_pendingc                 C   sb   t  ¡ }| d¡ |  | ¡ d¡ | tdƒ¡ |  | ¡ d¡ | tdƒ¡ |  | ¡ d¡ d S )Nr9  ro  rp  )r	   r³   ru   r¥   rF   rÉ   Ú
memoryviewrr  r    r    r!   Útest_buffer_types…  s   
z MemoryBIOTests.test_buffer_typesc                 C   sL   t  ¡ }|  t|jd¡ |  t|jd ¡ |  t|jd¡ |  t|jd¡ d S )Nr8  TrÅ   )r	   r³   rÈ   r·   ru   rr  r    r    r!   Útest_error_typesŽ  s
   zMemoryBIOTests.test_error_typesN)rÏ  rÐ  rÑ  rt  rx  rz  r|  r}  r    r    r    r!   rn  W  s    	rn  c                   @   r  )ÚSSLObjectTestsc                 C   sF   t  ¡ }|  td¡ t  ||¡ W d   ƒ d S 1 sw   Y  d S rº   )r	   r³   r¶   r·   r\  rr  r    r    r!   r¿   —  s   "ÿz SSLObjectTests.test_private_initc              	   C   s:  t ƒ \}}}t ¡ }t ¡ }t ¡ }t ¡ }|j|||d}|j||dd}	tdƒD ]8}
z| ¡  W n
 tjy<   Y nw |jrG| | 	¡ ¡ z|	 ¡  W n
 tjyW   Y nw |jrb| | 	¡ ¡ q*| ¡  |	 ¡  |  
tj¡ | ¡  W d   ƒ n1 s€w   Y  | | 	¡ ¡ |	 ¡  | | 	¡ ¡ | ¡  d S )Nrm  Tr;  r»  )r    r	   r³   r]  r£  rj  ri  ry  ru   rF   rÈ   Úunwrap)r¯   Ú
client_ctxÚ
server_ctxr   Zc_inZc_outZs_inZs_outÚclientrÅ  Ú_r    r    r!   Útest_unwrapœ  s@   ÿÿ€
ÿzSSLObjectTests.test_unwrapN)rÏ  rÐ  rÑ  r¿   r„  r    r    r    r!   r~  –  s    r~  c                   @   sÈ   e Zd Z	 dd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Ze ejdkd¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-S ).ÚSimpleBackgroundTestsc                 C   sP   t  t j¡| _| j t¡ t| jd}t|jf| _	| 
¡  |  |jd d d ¡ d S )NrÊ  )r	   ra   rV   rŸ   rŽ   r–   rÌ  r@  rÆ  Úserver_addrÚ	__enter__rG  Ú__exit__)r¯   rÅ  r    r    r!   ÚsetUpÉ  s   zSimpleBackgroundTests.setUpc                 C   sÂ   t t tj¡tjd}| | j¡ |  i | ¡ ¡ |  	|j
¡ W d   ƒ n1 s*w   Y  t t tj¡tjtd}| | j¡ |  | ¡ ¡ |  	|j
¡ W d   ƒ d S 1 sZw   Y  d S )Nr¯  ©r   r‚   )r“   r»   r  r	   rŠ   r?  r†  r¥   Úgetpeercertrë  r†   r¤   rœ   r  r½   r    r    r!   Útest_connectÑ  s"   ÿüþ"ûz"SimpleBackgroundTests.test_connectc                 C   s<   t t tj¡tjd}|  |j¡ |  tjd|j	| j
¡ d S )Nr¯  úcertificate verify failed)r“   r»   r  r	   r¤   rG  rH  r¶   r´   r?  r†  r½   r    r    r!   Útest_connect_failà  s   ÿ
ÿz'SimpleBackgroundTests.test_connect_failc                 C   sJ   t t tj¡tjtd}|  |j¡ |  d| 	| j
¡¡ |  | ¡ ¡ d S )NrŠ  r   )r“   r»   r  r	   r¤   rœ   rG  rH  r¥   rÃ  r†  r  r‹  r½   r    r    r!   Útest_connect_exê  s   þz%SimpleBackgroundTests.test_connect_exc              	   C   sÒ   t t tj¡tjtdd}|  |j¡ | d¡ | 	| j
¡}|  |dtjtjf¡ t g |gg d¡ 	 z| ¡  W q` tjyL   t |gg g d¡ Y n tjy^   t g |gg d¡ Y nw q3|  | ¡ ¡ d S )NF)r   r‚   rq  r   r,  T)r“   r»   r  r	   r¤   rœ   rG  rH  rh  rÃ  r†  r}  rC  ZEINPROGRESSrÄ  Úselectrj  ri  ÚSSLWantWriteErrorr  r‹  ©r¯   r¾   rÇ  r    r    r!   Útest_non_blocking_connect_exó  s*   ý
ÿú	z2SimpleBackgroundTests.test_non_blocking_connect_exc                 C   s  t  t j¡}d|_t j|_| t tj¡¡}| 	| j
¡ |  i | ¡ ¡ W d   ƒ n1 s/w   Y  |jt tj¡dd}| 	| j
¡ W d   ƒ n1 sPw   Y  t j|_| t¡ | t tj¡¡}| 	| j
¡ | ¡ }|  |¡ W d   ƒ d S 1 s‚w   Y  d S )NFZdummyrm  )r	   ra   rW   r‹   rŠ   rŒ   r   r»   r  r?  r†  r¥   r‹  r¤   r   rœ   r  ©r¯   rN   r¾   rS  r    r    r!   Útest_connect_with_context  s(   þÿþ
"ýz/SimpleBackgroundTests.test_connect_with_contextc                 C   sH   t  t j¡}|jt tj¡td}|  |j¡ |  	t j
d|j| j¡ d S )Nrm  r  )r	   ra   rW   r   r»   r  r‰   rG  rH  r¶   r´   r?  r†  )r¯   rN   r¾   r    r    r!   Útest_connect_with_context_fail!  s   
þ
ÿz4SimpleBackgroundTests.test_connect_with_context_failc                 C   sÞ   t  t j¡}|jtd |jt tj¡td}| 	| j
¡ | ¡ }|  |¡ W d   ƒ n1 s1w   Y  t  t j¡}|jtd |jt tj¡td}| 	| j
¡ | ¡ }|  |¡ W d   ƒ d S 1 shw   Y  d S )Nr  rm  )r	   ra   rW   r   rƒ  r   r»   r  r‰   r?  r†  r‹  r  r  r”  r    r    r!   Útest_connect_capath.  s(   ÿüÿ"üz)SimpleBackgroundTests.test_connect_capathc                 C   s  t tƒ}| ¡ }W d   ƒ n1 sw   Y  t |¡}t tj¡}|j|d |jt	 	t	j
¡td}| | j¡ | ¡ }|  |¡ W d   ƒ n1 sNw   Y  t tj¡}|j|d |jt	 	t	j
¡td}| | j¡ | ¡ }|  |¡ W d   ƒ d S 1 s…w   Y  d S )Nr!  rm  )rE   rœ   rF   r	   rö   ra   rW   r   r   r»   r  r‰   r?  r†  r‹  r  )r¯   rH   rú   rI  rN   r¾   rS  r    r    r!   Útest_connect_cadataE  s0   

ÿ
ÿüÿ"üz)SimpleBackgroundTests.test_connect_cadatar,  z*Can't use a socket as a file under Windowsc                 C   sœ   t t tj¡ƒ}| | j¡ | ¡ }| ¡ }| ¡  t 	|d¡ | ¡  t
 ¡  |  t¡}t 	|d¡ W d   ƒ n1 s>w   Y  |  |jjtj¡ d S rx   )r“   r»   r  r?  r†  ÚfilenoÚmakefilerH  r   rF   rB  rC  rÈ   r  r¥   rB  rC  ÚEBADF)r¯   r  ÚfdrH   rc  r    r    r!   Útest_makefile_closeZ  s   ÿz)SimpleBackgroundTests.test_makefile_closec                 C   sÀ   t   t j¡}| | j¡ | d¡ t|tjdd}|  |j	¡ d}	 z
|d7 }| 
¡  W qQ tjy>   t |gg g ¡ Y n tjyO   t g |gg ¡ Y nw q"tjr^tj d| ¡ d S d S )NF©r   rq  r   TrÅ   z9
Needed %d calls to do_handshake() to establish session.
)r»   r  r?  r†  rh  r“   r	   rŠ   rG  rH  rj  ri  r  r‘  r   rs   rq   rt   ru   )r¯   r¾   Úcountr    r    r!   Útest_non_blocking_handshakem  s.   
þÿù	ÿz1SimpleBackgroundTests.test_non_blocking_handshakec                 C   s   t | g| j¢R dtiŽ d S )NrS  )Ú_test_get_server_certificater†  rœ   r®   r    r    r!   Útest_get_server_certificate‚  r#   z1SimpleBackgroundTests.test_get_server_certificatec                    s¢   | j \}}g ‰ ‡ fdd„}| j |¡ t ||f¡}|s%|  d||f ¡ tj||ftd}|s9|  d||f ¡ tjrGt	j
 d|||f ¡ |  ˆ ||g¡ d S )Nc                    s   ˆ   |¡ d S r   )Úappend©Ússl_sockZserver_nameZinitial_context©Zserver_namesr    r!   Úservername_cbŠ  ó   zLSimpleBackgroundTests.test_get_server_certificate_sni.<locals>.servername_cbúNo server certificate on %s:%s!©r‚   ú&
Verified certificate for %s:%s is
%s
)r†  rŸ   r?  r	   Úget_server_certificaterø   rœ   r   rs   rq   rt   ru   r¥   )r¯   rf  rÆ  r§  rú   r    r¦  r!   Útest_get_server_certificate_sni…  s   
z5SimpleBackgroundTests.test_get_server_certificate_snic                 C   s   t | g| j¢R Ž  d S r   )Ú!_test_get_server_certificate_failr†  r®   r    r    r!   Ú test_get_server_certificate_failš  s   z6SimpleBackgroundTests.test_get_server_certificate_failc                 C   sX   dd„ }| j  |¡ |  tj¡ tj| jtdd W d   ƒ d S 1 s%w   Y  d S )Nc                 S   s   t  d¡ d S )Nçš™™™™™É?)ry   Úsleepr¤  r    r    r!   r§     r¨  zPSimpleBackgroundTests.test_get_server_certificate_timeout.<locals>.servername_cbçš™™™™™¹?)r‚   r/  )	rŸ   r?  rÈ   r»   r/  r	   r¬  r†  rœ   )r¯   r§  r    r    r!   Ú#test_get_server_certificate_timeoutŸ  s   
ÿ"ÿz9SimpleBackgroundTests.test_get_server_certificate_timeoutc              	   C   s  t t tj¡tjdd}| | j¡ W d   ƒ n1 sw   Y  t t tj¡tjdd}| | j¡ W d   ƒ n1 s?w   Y  |  tjd¡5 t tj¡}t |tjdd}| | j¡ W d   ƒ n1 skw   Y  W d   ƒ d S W d   ƒ d S 1 sƒw   Y  d S )NrÚ  )r   rƒ   rÛ  rÜ  rÝ  )	r“   r»   r  r	   rŠ   r?  r†  r¶   r´   )r¯   r¾   r   r    r    r!   rß  ¨  s,   ÿþÿþÿýÿ"ÿz"SimpleBackgroundTests.test_ciphersc                 C   s”   t  t j¡}|jtd |  | ¡ g ¡ |jt tj	¡dd}| 
| j¡ | ¡ }|  |¡ W d   ƒ n1 s9w   Y  |  t| ¡ ƒd¡ d S )Nr  r,   rm  rÅ   )r	   ra   rW   r   rƒ  r¥   rH  r   r»   r  r?  r†  r‹  r  rY   r”  r    r    r!   Útest_get_ca_certs_capath¶  s   ÿüz.SimpleBackgroundTests.test_get_ca_certs_capathc                 C   s¾   t  t j¡}|jtd t  t j¡}|jtd t tj¡}|j|dd0}| | j	¡ |  
|j|¡ |  
|jj|¡ ||_|  
|j|¡ |  
|jj|¡ W d   ƒ d S 1 sXw   Y  d S )Nr  r,   rm  )r	   ra   rW   r   rƒ  r»   r  r   r?  r†  rÀ   r’   Ú_sslobj)r¯   Zctx1Zctx2r¾   r  r    r    r!   Útest_context_setgetÂ  s   "úz)SimpleBackgroundTests.test_context_setgetc              
   O   sú   |  dtj¡}t ¡ | }d}		 t ¡ |kr|  d¡ d }
|	d7 }	z||Ž }W n  tjyG } z|jtj	tj
fvr:‚ |j}
W Y d }~nd }~ww | ¡ }| |¡ |
d u rVqm|
tj	krl| d¡}|rh| |¡ n| ¡  qtjr{tj d|	|jf ¡ |S )Nr/  r   TrÅ   i €  z"Needed %d calls to complete %s().
)rˆ   r   ZSHORT_TIMEOUTry   Ú	monotonicrø   r	   r´   rC  rk  ZSSL_ERROR_WANT_WRITErF   Úsendallr  ru   rw  rs   rq   rt   rÏ  )r¯   r   ÚincomingÚoutgoingrg   re   r‘   r/  ÚdeadlinerŸ  rC  Úretrc  Úbufr    r    r!   Ússl_io_loopÑ  sB   
ÿ€ü


çÿz!SimpleBackgroundTests.ssl_io_loopc                 C   s~  t   t j¡}|  |j¡ | | j¡ t ¡ }t ¡ }t tj	¡}|  
|j¡ |  |jtj¡ | t¡ | ||dt¡}|  |jj|¡ |  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ |  t|j¡ dtjv rl|  | d¡¡ |   ||||j!¡ |  
| ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ |  
| ¡ ¡ dtjv rž|  
| d¡¡ z|   ||||j"¡ W n
 tj#y³   Y nw |  tj$|j%d¡ d S )NFrw  r9  )&r»   r  rG  rH  r?  r†  r	   r³   ra   rW   r  r‹   r¥   rŒ   r¤   r   rœ   r]  r‰   rÀ   rµ  Úownerry  Úcipherr5   ÚassertIsNotNoneÚshared_ciphersrÈ   r›   r‹  rÔ  rt  r¾  rj  r  ZSSLSyscallErrorr´   ru   )r¯   r   r¹  rº  rN   Ússlobjr    r    r!   Útest_bio_handshakeö  s@   

ÿ

ýz(SimpleBackgroundTests.test_bio_handshakec                 C   s¼   t   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»   r  rG  rH  r?  r†  r	   r³   ra   rW   r‹   rŠ   rŒ   r]  r¾  rj  ru   rF   r¥   r  )r¯   r   r¹  rº  rN   rÃ  Zreqr½  r    r    r!   Útest_bio_read_write_data	  s   z.SimpleBackgroundTests.test_bio_read_write_dataN)rÏ  rÐ  rÑ  r‰  rŒ  rŽ  r  r“  r•  r–  r—  r˜  rd   r`  r   r   r  r   r¢  r­  r¯  r³  rß  r´  r¶  r¾  rÄ  rÇ  r    r    r    r!   r…  Æ  s0    
	
	%"r…  c                   @   s*   e Zd Zdd„ Ze ejd¡dd„ ƒZdS )ÚNetworkedTestsc                 C   s¨   t  t¡E tt tj¡tjdd}|  |j	¡ | 
d¡ | tdf¡}|dkr.|  d¡ n
|tjkr8|  d¡ |  |tjtjf¡ W d   ƒ d S 1 sMw   Y  d S )NFrž  gH¯¼šò×z>é»  r   z!REMOTE_HOST responded too quicklyzNetwork unreachable.)r   Útransient_internetÚREMOTE_HOSTr“   r»   r  r	   r¤   rG  rH  r-  rÃ  rÀ  rC  ZENETUNREACHr}  ÚEAGAINrÄ  r’  r    r    r!   Útest_timeout_connect_ex,	  s   þ


"õz&NetworkedTests.test_timeout_connect_exz
Needs IPv6c                 C   sH   t  d¡ t| ddƒ t| ddƒ W d   ƒ d S 1 sw   Y  d S )Nzipv6.google.comrÉ  )r   rÊ  r¡  r®  r®   r    r    r!   Ú test_get_server_certificate_ipv6<	  s   "þz/NetworkedTests.test_get_server_certificate_ipv6N)	rÏ  rÐ  rÑ  rÍ  rd   rÓ  r   rj  rÎ  r    r    r    r!   rÈ  *	  s    rÈ  c                 C   sp   t  ||f¡}|s|  d||f ¡ t j||f|d}|s&|  d||f ¡ tjr6tj d|||f ¡ d S d S )Nr©  rª  r«  )r	   r¬  rø   r   rs   rq   rt   ru   )Útestrf  rÆ  rS  rú   r    r    r!   r¡  C	  s   ÿr¡  c              
   C   s|   zt j||ftd}W n& t jy1 } ztjr&tj d| ¡ W Y d }~d S W Y d }~d S d }~ww |  	d|||f ¡ d S )Nrª  z%s
z$Got server certificate %s for %s:%s!)
r	   r¬  rÏ   r´   r   rs   rq   rt   ru   rø   )rÏ  rf  rÆ  rú   Úxr    r    r!   r®  N	  s   ÿ€þr®  )Úmake_https_serverc                   @   sd   e Zd ZG dd„ dejƒZ					ddd„Zdd	„ Zd
d„ Zddd„Z	dd„ Z
dd„ Zdd„ ZdS )rÌ  c                   @   s>   e Zd Z	 dd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )z$ThreadedEchoServer.ConnectionHandlerc                 C   s@   || _ d| _|| _|| _| j d¡ d | _tj | ¡ d| _	d S ©NFT)
rÅ  Úrunningr   Úaddrrh  ÚsslconnÚ	threadingÚThreadÚ__init__Údaemon)r¯   rÅ  ZconnsockrÔ  r    r    r!   rØ  c	  s   
z-ThreadedEchoServer.ConnectionHandler.__init__c              
   C   sô  z| j jj| jdd| _| j j | j ¡ ¡ W ny tt	t
fyL } z&| j j t|ƒ¡ | j jr:tdt| jƒ d ƒ d| _|  ¡  W Y d }~dS d }~w tjtfy } z6| j j t|ƒ¡ | j jrntdt| jƒ d ƒ |jtjkr…tjdkr…d| _| j  ¡  |  ¡  W Y d }~dS d }~ww | j j | j ¡ ¡ | j jjtjkrà| j ¡ }tj r¼| j jr¼tj! "dt# $|¡ d ¡ | j d¡}tj rà| j jrà|d u rÔtj! "d	¡ ntj! "d
t%|ƒ› d¡ | j &¡ }tj rø| j jrøtj! "dt|ƒ d ¡ dS )NTr;  z'
 server:  bad connection attempt from z:
FÚdarwinz client cert is rÍ   z client did not provide a cert
z cert binary is zb
z" server: connection cipher is now )'rÅ  r’   r   r   rÕ  Úselected_alpn_protocolsr£  Úselected_alpn_protocolÚConnectionResetErrorÚBrokenPipeErrorÚConnectionAbortedErrorÚconn_errorsrS   Úchattyrw   r{  rÔ  rÓ  rH  r	   r´   r  rC  Z
EPROTOTYPErq   rÕ  ÚstoprÂ  rŒ   r¤   r‹  r   rs   rt   ru   rÓ   rÔ   rY   rÀ  )r¯   rc  rS  Zcert_binaryrÀ  r    r    r!   Ú	wrap_connm	  sL   ÿ€
€ê

z.ThreadedEchoServer.ConnectionHandler.wrap_connc                 C   s   | j r| j  ¡ S | j d¡S )NrÆ  )rÕ  rF   r   r  r®   r    r    r!   rF   «	  s   
z)ThreadedEchoServer.ConnectionHandler.readc                 C   s   | j r	| j  |¡S | j |¡S r   )rÕ  ru   r   r#  )r¯   r‘  r    r    r!   ru   ±	  s   z*ThreadedEchoServer.ConnectionHandler.writec                 C   s"   | j r
| j  ¡  d S | j ¡  d S r   )rÕ  rH  r   r®   r    r    r!   rH  ·	  s   z*ThreadedEchoServer.ConnectionHandler.closec                 C   sÚ  d| _ | jjs|  ¡ sd S | j rëz†|  ¡ }| ¡ }|s;d| _ z| j ¡ | _W n	 t	y1   Y nw d | _|  
¡  n\|dkrStjrL| jjrLtj d¡ |  
¡  W d S | jjrv|dkrvtjrh| jjrhtj d¡ |  d¡ |  ¡ stW d S n!| jjrª| jrª|dkrªtjrŽ| jjrŽtj d	¡ |  d¡ | j ¡ | _d | _tjr©| jjr©tj d
¡ ní|dkrÎtjr»| jjr»tj d¡ | j d¡}|  t|ƒ d¡d ¡ nÉ|dkrtjrà| jjràtj d¡ z| j ¡  W n  tjy } z|  t|ƒ d¡d ¡ W Y d }~n”d }~ww |  d¡ n‰|dkr'| j ¡ d ur!|  d¡ nv|  d¡ np|dkr>| j ¡ }|  t|ƒ d¡d ¡ nY|dkrW| jj ¡ }|  t|ƒ dd¡d ¡ n@|dkrp| jj ¡ }|  t|ƒ dd¡d ¡ n'tjr| jjr| jr€dpd}tj d||| ¡ |f ¡ |  | ¡ ¡ W nM t	yå } z@| jjr½tjr½t|t ƒr¹t!d| j"› ƒ nt#dƒ z|  d¡ W n
 t	yÎ   Y nw |  
¡  d| _ | j $¡  W Y d }~nd }~ww | j s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...
rw  úus-asciió   
ó   PHAz( server: initiating post handshake auth
ó   HASCERTó   TRUE
ó   FALSE
ó   GETCERTs   VERIFIEDCHAINrÅ   Úbigs   UNVERIFIEDCHAINZ	encryptedZunencryptedz/ server: read %r (%s), sending back %r (%s)...
z Connection reset by peer: zTest server failure:
s   ERROR
)%rÓ  rÅ  Ústarttls_serverrã  rF   ÚstriprÕ  r  r   r  rH  r   rs   Úconnectionchattyrq   rt   ru   rt  r{  rh  Úverify_client_post_handshaker	   r´   r‹  rµ  Úget_verified_chainrY   Úto_bytesÚget_unverified_chainr¿  rá  rR   ÚConnectionErrorÚprintrÔ  rw   râ  )r¯   ÚmsgÚstrippedrË   rc  rS  ZcertsZctyper    r    r!   Úrun½	  sÂ   üÿ
ÿÿ
€
$€ÿ




ÿÿ€
ÿÿ€ë·z(ThreadedEchoServer.ConnectionHandler.runN)	rÏ  rÐ  rÑ  rØ  rã  rF   ru   rH  rú  r    r    r    r!   ÚConnectionHandler]	  s    
>rû  NTFc                 C   sÚ   |
r|
| _ n8t |d ur|ntj¡| _ |d ur|ntj| j _|r&| j  |¡ |r.| j  |¡ |r6| j  |¡ |	r>| j  	|	¡ || _
|| _|| _t ¡ | _t | j¡| _d | _d| _g | _g | _g | _tj | ¡ d| _d S rÒ  )r’   r	   ra   rV   rŠ   rŒ   r   rŽ   Úset_alpn_protocolsrL   rá  rñ  rï  r»   r   r   rÂ  rÆ  ÚflagÚactiverÛ  rÂ  rà  rÖ  r×  rØ  rÙ  )r¯   ZcertificateÚssl_versionÚcertreqsÚcacertsrá  rñ  rï  Zalpn_protocolsrƒ   r’   r    r    r!   rØ  "
  s<   ÿþÿ

zThreadedEchoServer.__init__c                 C   ó   |   t ¡ ¡ | j ¡  | S r   ©ÚstartrÖ  ÚEventrý  Úwaitr®   r    r    r!   r‡  D
  ó   
zThreadedEchoServer.__enter__c                 G   s   |   ¡  |  ¡  d S r   )râ  r   ©r¯   re   r    r    r!   rˆ  I
  s   zThreadedEchoServer.__exit__c                 C   ó   || _ tj | ¡ d S r   ©rý  rÖ  r×  r  ©r¯   rý  r    r    r!   r  M
  ó   zThreadedEchoServer.startc              
   C   s8  | j  d¡ | j  d¡ d| _| jr| j ¡  | jr–z*| j  ¡ \}}tjr4| j	r4t
j dt|ƒ d ¡ |  | ||¡}| ¡  | ¡  W nN tyc } ztjrYt
j d|›d¡ W Y d }~n4d }~w tyo   |  ¡  Y n$ ty’ } ztjrˆ| j	rˆt
j dt|ƒ d ¡ W Y d }~nd }~ww | js|  ¡  d S )Ng      ð?r»  Tz server:  new connection from rÍ   z connection timeout z connection handling failed: )r   r-  Úlistenrþ  rý  r  r1  r   rs   rá  rq   rt   ru   r{  rû  r  r   ÚTimeoutErrorÚKeyboardInterruptrâ  ÚBaseExceptionrH  )r¯   ZnewconnZconnaddrÚhandlerrc  r    r    r!   rú  Q
  s@   
ÿÿ€ÿ€þòzThreadedEchoServer.runc                 C   s"   | j d ur| j  ¡  d | _ d S d S r   )r   rH  r®   r    r    r!   rH  m
  s   


þzThreadedEchoServer.closec                 C   s
   d| _ d S ©NF)rþ  r®   r    r    r!   râ  r
  ó   
zThreadedEchoServer.stop)
NNNNTFFNNNr   )rÏ  rÐ  rÑ  rÖ  r×  rû  rØ  r‡  rˆ  r  rú  rH  râ  r    r    r    r!   rÌ  [	  s     F
ü"
rÌ  c                   @   sX   e Zd ZG dd„ dejƒZdd„ Zdd„ Zdd„ Zd	d
„ Z	ddd„Z
dd„ Zdd„ ZdS )ÚAsyncoreEchoServerc                   @   s6   e Zd ZG dd„ dejƒZdd„ Zdd„ Zdd„ Zd	S )
zAsyncoreEchoServer.EchoServerc                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )z/AsyncoreEchoServer.EchoServer.ConnectionHandlerc                 C   s4   t |d|dd| _tj | | j¡ d| _|  ¡  d S )NTF)r†   r„   rq  )r“   r»   ÚasyncoreÚdispatcher_with_sendrØ  Ú_ssl_acceptingÚ_do_ssl_handshake)r¯   Úconnr„   r    r    r!   rØ  }
  s   þz8AsyncoreEchoServer.EchoServer.ConnectionHandler.__init__c                 C   s6   t | jtjƒr| j ¡ dkr|  ¡  | j ¡ dksdS )Nr   T)rR   r»   r	   r¼   ry  Zhandle_read_eventr®   r    r    r!   Úreadable…
  s
   ÿz8AsyncoreEchoServer.EchoServer.ConnectionHandler.readablec              
   C   s¨   z| j  ¡  W nG tjtjfy   Y d S  tjy"   |  ¡  Y S  tjy*   ‚  tyN } z|j	d t
jkrC|  ¡ W  Y d }~S W Y d }~d S d }~ww d| _d S )Nr   F)r»   rj  r	   ri  r‘  ZSSLEOFErrorÚhandle_closer´   r  re   rC  ZECONNABORTEDr  )r¯   Úerrr    r    r!   r  ‹
  s   ÿ€ÿ
zAAsyncoreEchoServer.EchoServer.ConnectionHandler._do_ssl_handshakec                 C   sX   | j r	|  ¡  d S |  d¡}tjrtj dt|ƒ ¡ |s#|  	¡  d S |  
| ¡ ¡ d S )NrÆ  z server:  read %s from client
)r  r  r  r   rs   rq   rt   ru   r{  rH  r#  r¿  )r¯   rË   r    r    r!   Úhandle_readš
  s   
z;AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_readc                 C   s(   |   ¡  tjrtj d| j ¡ d S d S )Nz server:  closed connection %s
)rH  r   rs   rq   rt   ru   r»   r®   r    r    r!   r  ¦
  s   ÿz<AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_closec                  C   ó   ‚ r   r    r®   r    r    r!   rw   «
  ó   z<AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_errorN)	rÏ  rÐ  rÑ  rØ  r  r  r  r  rw   r    r    r    r!   rû  {
  s    rû  c                 C   s@   || _ t tjtj¡}t |d¡| _tj 	| |¡ |  
d¡ d S )Nr  r»  )r„   r»   r  ÚSOCK_STREAMr   rÂ  rÆ  r  Ú
dispatcherrØ  r  rI  r    r    r!   rØ  ®
  s
   z&AsyncoreEchoServer.EchoServer.__init__c                 C   s(   t jrtj d| ¡ |  || j¡ d S )Nz$ server:  new connection from %s:%s
)r   rs   rq   rt   ru   rû  r„   )r¯   Zsock_objrÔ  r    r    r!   Úhandle_acceptedµ
  s   z-AsyncoreEchoServer.EchoServer.handle_acceptedc                  C   r  r   r    r®   r    r    r!   rw   º
  r  z*AsyncoreEchoServer.EchoServer.handle_errorN)	rÏ  rÐ  rÑ  r  r  rû  rØ  r"  rw   r    r    r    r!   Ú
EchoServery
  s
    3r#  c                 C   s8   d | _ d| _|  |¡| _| jj| _tj | ¡ d| _d S rÒ  )	rý  rþ  r#  rÅ  rÆ  rÖ  r×  rØ  rÙ  )r¯   r„   r    r    r!   rØ  ½
  s   

zAsyncoreEchoServer.__init__c                 C   s   d| j j| jf S )Nz<%s %s>)Ú	__class__rÏ  rÅ  r®   r    r    r!   Ú__str__Å
  s   zAsyncoreEchoServer.__str__c                 C   r  r   r  r®   r    r    r!   r‡  È
  r  zAsyncoreEchoServer.__enter__c                 G   sV   t jr	tj d¡ |  ¡  t jrtj d¡ |  ¡  t jr#tj d¡ tjdd d S )Nz cleanup: stopping server.
z! cleanup: joining server thread.
z cleanup: successfully joined.
T)Z
ignore_all)	r   rs   rq   rt   ru   râ  r   r  Z	close_allr  r    r    r!   rˆ  Í
  s   zAsyncoreEchoServer.__exit__Nc                 C   r	  r   r
  r  r    r    r!   r  Ù
  r  zAsyncoreEchoServer.startc                 C   sB   d| _ | jr| j ¡  | j rzt d¡ W n   Y | j sd S d S )NTrÅ   )rþ  rý  r  r  Zloopr®   r    r    r!   rú  Ý
  s   
üzAsyncoreEchoServer.runc                 C   s   d| _ | j ¡  d S r  )rþ  rÅ  rH  r®   r    r    r!   râ  ç
  s   zAsyncoreEchoServer.stopr   )rÏ  rÐ  rÑ  r  r!  r#  rØ  r%  r‡  rˆ  r  rú  râ  r    r    r    r!   r  u
  s    D

r  rÅ  Fc                 C   sŠ  	 i }t ||dd}|¯ | jt ¡ ||dŠ}	|	 t|jf¡ |t|ƒt|ƒfD ]C}
|r8tj	r8t
j d| ¡ |	 |
¡ |	 ¡ }|rNtj	rNt
j d| ¡ || ¡ krltd|d d… t|ƒ|d d…  ¡ t|ƒf ƒ‚q)|	 d¡ |r}tj	r}t
j d	¡ | |	 ¡ |	 ¡ |	 ¡ |	 ¡ |	 ¡ |	j|	jd
œ¡ |	 ¡  W d   ƒ n1 s¤w   Y  |j|d< |j|d< W d   ƒ |S 1 s¾w   Y  |S )NF©r’   rá  rñ  )r‡   Úsessionú client:  sending %r...
ú client:  read %r
ú4bad data <<%r>> (%d) received; expected <<%r>> (%d)
é   ó   over
ú client:  closing connection.
)ÚcompressionrÀ  ÚpeercertÚclient_alpn_protocolr5   Úsession_reusedr'  Úserver_alpn_protocolsÚserver_shared_ciphers)rÌ  r   r»   r?  r@  rÆ  rÉ   r{  r   rs   rq   rt   ru   rF   r¿  ÚAssertionErrorrY   r”  r.  rÀ  r‹  rÜ  r5   r1  r'  rH  rÛ  rÂ  )rž   rŸ   Úindatará  rñ  Úsni_namer'  rN  rÅ  r¾   ÚargÚoutdatar    r    r!   Úserver_params_testë
  sj   þ
ÿÿ
ÿÿÿÿ
ù
	á
 
Þ#Ý#r9  c              
   C   s  	 |d u rt j}t jdt jdt jdi| }tjr/|rdpd}tj |t  	|¡t  	| ¡|f ¡ t
 ¡   t  |¡}| j|O  _t  | ¡}	|	 j|O  _W d   ƒ n1 sVw   Y  t |d ¡}
|
d ur‹t|	dƒr‹| t jkr‹|	j|
kr‹t
 ¡  |
|	_W d   ƒ n1 s†w   Y  |jt jkr–| d¡ t|	|ƒ ||	fD ]}||_| t¡ | t¡ qŸz
t||	ddd	}W n) t jyÇ   |rÄ‚ Y d S  tyâ } z|sÖ|jtjkr×‚ W Y d }~d S d }~ww |sót d
t  	|¡t  	| ¡f ƒ‚|dur	||d krt d||d f ƒ‚d S d S )NrŠ   r£   r¤   z %s->%s %s
z {%s->%s} %s
rJ   rÚ  F)rá  rñ  z5Client protocol %s succeeded with server protocol %s!Tr5   z%version mismatch: expected %r, got %r)!r	   rŠ   r£   r¤   r   rs   rq   rt   ru   Zget_protocol_namer   rÇ   ra   r5  ÚPROTOCOL_TO_TLS_VERSIONrˆ   rK   rU   rJ   rZ   rL   rO   rŒ   rŽ   r–   r   rœ   r9  r´   r  rC  Ú
ECONNRESETr4  )Zserver_protocolZclient_protocolÚexpect_successZ	certsreqsÚserver_optionsÚclient_optionsZcerttypeZ	formatstrrž   rŸ   Zmin_versionrN   rN  rc  r    r    r!   Útry_protocol_combo  sŒ   ýüþÿ


ûýüû
	ÿ



ÿÿÿ€ÿÿÿÿ

ÿ
ÿþr?  c                   @   s~  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Ze e	j
d	¡d
d„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zedƒdd„ ƒZdd„ Zdd„ Zedƒdd„ ƒZdd„ Zed ƒd!d"„ ƒZed#ƒd$d%„ ƒZed&ƒd'd(„ ƒZed)ƒd*d+„ ƒZd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Z d:d;„ Z!d<d=„ Z"d>d?„ Z#d@dA„ Z$dBdC„ Z%edƒdDdE„ ƒZ&ed)ƒed#ƒe'dFdG„ ƒƒƒZ(ed&ƒe'dHdI„ ƒƒZ)ed)ƒed#ƒe'dJdK„ ƒƒƒZ*ed ƒdLdM„ ƒZ+dNdO„ Z,e dPe	j-v dQ¡dRdS„ ƒZ.dTdU„ Z/e e0e	dVƒdW¡dXdY„ ƒZ1e 2e3dZ¡d[d\„ ƒZ4d]d^„ Z5d_d`„ Z6dadb„ Z7dcdd„ Z8dedf„ Z9dgdh„ Z:didj„ Z;dkdl„ Z<dmdn„ Z=dodp„ Z>dqdr„ Z?dsdt„ Z@dudv„ ZAdwdx„ ZBdydz„ ZCd{d|„ ZDd}S )~ÚThreadedTestsc              	   C   sò  	 t jr
tj d¡ tƒ \}}}| jtjtj	d t
||dd|d W d   ƒ n1 s-w   Y  d|_| jtj	tjd0 |  tj¡}t
||dd|d W d   ƒ n1 sYw   Y  |  dt|jƒ¡ W d   ƒ n1 sqw   Y  | jtj	tj	d/ |  tj¡}t
||ddd W d   ƒ n1 s™w   Y  |  dt|jƒ¡ W d   ƒ n1 s±w   Y  | jtjtjd0 |  tj¡}t
||ddd W d   ƒ n1 sÙw   Y  |  dt|jƒ¡ W d   ƒ d S 1 sòw   Y  d S )NrÍ   )r‚  rÅ  T)rž   rŸ   rá  rñ  r6  Fz@Cannot create a client socket with a PROTOCOL_TLS_SERVER context)rž   rŸ   rá  rñ  )r   rs   rq   rt   ru   r    rµ   r	   rW   rV   r9  r‹   rÈ   r´   r}  rS   rB  )r¯   rž   rŸ   r   rc  r    r    r!   Ú	test_echok  sb   ýÿýÿþúþÿþû
þÿþ"ûzThreadedTests.test_echoc           
   
   C   s¤  t jr	tj d¡ tƒ \}}}t|dd}|± |jt ¡ d|dŽ}| 	t
|jf¡ |  t¡ | ¡  W d   ƒ n1 s?w   Y  | ¡  | ¡ }|  |d¡ | ¡ }t jrptj t |¡d ¡ tj dt|ƒ d ¡ d|vr~|  d	t |¡ ¡ d
|d vr‰|  d¡ |  d|¡ |  d|¡ t |d ¡}t |d ¡}	|  ||	¡ W d   ƒ n1 s³w   Y  W d   ƒ d S W d   ƒ d S 1 sËw   Y  d S )NrÍ   F©r’   rá  )rq  r‡   úCan't get peer certificate.zConnection cipher is z.
r3   z$No subject field in certificate: %s.r)   zkMissing or invalid 'organizationName' field in certificate subject; should be 'Python Software Foundation'.r1   r0   )r   rs   rq   rt   ru   r    rÌ  r   r»   r?  r@  rÆ  rÈ   r›   r‹  rj  r  rÀ  rÓ   rÔ   rS   rø   r}  r	   r²  r
  )
r¯   rž   rŸ   r   rÅ  r¾   rS  rÀ  ÚbeforeZafterr    r    r!   Útest_getpeercert—  sP   
þ
ÿÿÿÿåÿ"ÿzThreadedTests.test_getpeercertc              
   C   s  t jr	tj d¡ tƒ \}}}ttddƒ}|  |j	tj
|B ¡ t|dd}|3 |jt ¡ |d}| t|jf¡ | ¡ }|  |d¡ W d   ƒ n1 sNw   Y  W d   ƒ n1 s]w   Y  | j	tjO  _	t|dd}|@ |jt ¡ |d'}|  tjd¡ | t|jf¡ W d   ƒ n1 s—w   Y  W d   ƒ n1 s¦w   Y  W d   ƒ n1 sµw   Y  | t¡ t|dd}|< |jt ¡ |d}| t|jf¡ | ¡ }|  |d¡ W d   ƒ n1 sîw   Y  W d   ƒ d S W d   ƒ d S 1 sw   Y  d S )	NrÍ   rö  r   TrB  rm  rC  r  )r   rs   rq   rt   ru   r    rT   r	   r¥   r÷  rø  rÌ  r   r»   r?  r@  rÆ  r‹  r  rù  r¶   r´   r   ÚCRLFILE)r¯   rž   rŸ   r   rú  rÅ  r¾   rS  r    r    r!   Útest_crl_check»  s^   
ÿü€ÿ
ÿÿþ€þ€ÿ

ÿüÿ$ÿzThreadedTests.test_crl_checkc              
   C   sè  t jr	tj d¡ tƒ \}}}t|dd}|3 |jt ¡ |d}| 	t
|jf¡ | ¡ }|  |d¡ W d   ƒ n1 s>w   Y  W d   ƒ n1 sMw   Y  t|dd}|@ |jt ¡ dd'}|  tjd¡ | 	t
|jf¡ W d   ƒ n1 sw   Y  W d   ƒ n1 sŽw   Y  W d   ƒ n1 sw   Y  t|dd}|@ t ¡ #}|  td¡ | |¡ W d   ƒ n1 sÆw   Y  W d   ƒ n1 sÕw   Y  W d   ƒ d S W d   ƒ d S 1 síw   Y  d S )	NrÍ   TrB  rm  rC  rk  z:Hostname mismatch, certificate is not valid for 'invalid'.z'check_hostname requires server_hostname)r   rs   rq   rt   ru   r    rÌ  r   r»   r?  r@  rÆ  r‹  r  r¶   r	   rU  r›   )r¯   rž   rŸ   r   rÅ  r¾   rS  r    r    r!   rU  ã  sX   
ÿü€ÿ
ÿþý€þ€ÿ	
ÿþ€ÿÿ"ÿz!ThreadedTests.test_check_hostnamez)test requires hostname_checks_common_namec              
   C   sL  t ƒ \}}}d|_t|dd}|) |jt ¡ |d}| t|jf¡ W d   ƒ n1 s.w   Y  W d   ƒ n1 s=w   Y  t tƒ\}}}d|_t|dd}|H |jt ¡ |d&}|  	t
j¡ | t|jf¡ W d   ƒ n1 sxw   Y  W d   ƒ n1 s‡w   Y  W d   ƒ d S W d   ƒ d S 1 sŸw   Y  d S )NFTrB  rm  )r    rî  rÌ  r   r»   r?  r@  rÆ  r™   rÈ   r	   ÚSSLCertVerificationErrorrÍ  r    r    r!   rñ    s8   
ÿþ€ÿ
ÿÿ€þÿ"ÿz.ThreadedTests.test_hostname_checks_common_namec              	   C   sü   t  t j¡}| t¡ | d¡ t}t  t j¡}| t	¡ t
|dd}|O |jt ¡ |d-}| t|jf¡ | ¡ }|  |d¡ | ¡ d  d¡}|  |d d… d	¡ W d   ƒ n1 s_w   Y  W d   ƒ d S W d   ƒ d S 1 sww   Y  d S ©
NzECDHE:ECDSA:!NULL:!aRSATrB  rm  rC  r   ú-r™  )ZECDHEZECDSA)r	   ra   rW   r   rœ   rL   ÚSIGNED_CERTFILE_ECC_HOSTNAMErV   rŽ   ÚSIGNED_CERTFILE_ECCrÌ  r   r»   r?  r@  rÆ  r‹  r  rÀ  Úsplit©r¯   rž   r   rŸ   rÅ  r¾   rS  rÀ  r    r    r!   Útest_ecc_cert  s*   



ÿúÿ"ÿzThreadedTests.test_ecc_certc              	   C   s  t  t j¡}| t¡ t jj|_| d¡ t	}t  t j
¡}| t¡ | t¡ t|dd}|O |jt ¡ |d-}| t|jf¡ | ¡ }|  |d¡ | ¡ d  d¡}|  |d d… d	¡ W d   ƒ n1 siw   Y  W d   ƒ d S W d   ƒ d S 1 sw   Y  d S rI  )r	   ra   rW   r   rœ   r
   r`   r]   rL   rK  rV   rŽ   rL  r–   rÌ  r   r»   r?  r@  rÆ  r‹  r  rÀ  rM  rN  r    r    r!   Útest_dual_rsa_ecc1  s.   





ÿúÿ"ÿzThreadedTests.test_dual_rsa_eccc           	   
   C   s¸  t jr	tj d¡ t tj¡}| t	¡ t tj
¡}tj|_d|_| t¡ g d¢}|D ]U\}}t|dd}|A |jt ¡ |d(}|  |j|¡ | t|jf¡ | ¡ }|  |j|¡ |  |d¡ W d   ƒ n1 smw   Y  W d   ƒ q,1 s|w   Y  q,t|dd}|H |jt ¡ dd&}|  tj¡ | t|jf¡ W d   ƒ n1 s®w   Y  W d   ƒ n1 s½w   Y  W d   ƒ d S W d   ƒ d S 1 sÕw   Y  d S )NrÍ   T))u   kÃ¶nig.idn.pythontest.netúxn--knig-5qa.idn.pythontest.net)rQ  rQ  )s   xn--knig-5qa.idn.pythontest.netrQ  )u(   kÃ¶nigsgÃ¤ÃŸchen.idna2003.pythontest.netú.xn--knigsgsschen-lcb0w.idna2003.pythontest.net)rR  rR  )s.   xn--knigsgsschen-lcb0w.idna2003.pythontest.netrR  )ú.xn--knigsgchen-b4a3dun.idna2008.pythontest.netrS  )s.   xn--knigsgchen-b4a3dun.idna2008.pythontest.netrS  rB  rm  rC  zpython.example.org)r   rs   rq   rt   ru   r	   ra   rV   rŽ   ÚIDNSANSFILErW   r¤   rŒ   r‹   r   rœ   rÌ  r   r»   r¥   r‡   r?  r@  rÆ  r‹  r  rÈ   rU  )	r¯   rŸ   r’   Zidn_hostnamesr‡   Zexpected_hostnamerÅ  r¾   rS  r    r    r!   Útest_check_hostname_idnK  sL   


ÿú€ÿ

ÿÿ€þÿ"ÿz%ThreadedTests.test_check_hostname_idnc                 C   sF  	 t ƒ \}}}| t¡ tj|_tjj|_t	|ddd}|{ |j
t ¡ |dY}z
| t|jf¡ W nA tjyQ } ztjrGtj d| ¡ W Y d }~n-d }~w tyt } z|jtjkr_‚ tjrjtj d| ¡ W Y d }~n
d }~ww |  d¡ W d   ƒ n1 s„w   Y  W d   ƒ d S W d   ƒ d S 1 sœw   Y  d S )NTr&  rm  ú
SSLError is %r
ú
socket.error is %r
ú'Use of invalid cert should have failed!)r    rŽ   rÏ   r	   r¤   rŒ   r
   r`   r]   rÌ  r   r»   r?  r@  rÆ  r´   r   rs   rq   rt   ru   r  rC  r;  rø   ©r¯   rž   rŸ   r   rÅ  r¾   rc  r    r    r!   Útest_wrong_cert_tls12ƒ  s<   

ÿ
ÿÿ€€ü
€Pïz#ThreadedTests.test_wrong_cert_tls12rò  c                 C   sx  t ƒ \}}}| t¡ tj|_tjj|_tjj|_t	|ddd}| |j
t ¡ |ddm}| t|jf¡ z| d¡ | d¡ | d¡ | d¡ W nA tjyj } ztjr`tj d| ¡ W Y d }~n-d }~w ty } z|jtjkrx‚ tjrƒtj d	| ¡ W Y d }~n
d }~ww |  d
¡ W d   ƒ n1 sw   Y  W d   ƒ d S W d   ƒ d S 1 sµw   Y  d S )NTr&  F©r‡   Úsuppress_ragged_eofsó   datarž  s   should have failed alreadyrV  rW  rX  )r    rŽ   rÏ   r	   r¤   rŒ   r
   rò  rJ   rÌ  r   r»   r?  r@  rÆ  ru   rF   r´   r   rs   rq   rt   r  rC  r;  rø   rY  r    r    r!   Útest_wrong_cert_tls13¨  sF   


ÿ
þÿ


€€ü
€Pìz#ThreadedTests.test_wrong_cert_tls13c                    s|   	 t  ¡ ‰t  ¡ ‰ t ¡ ‰t ˆt¡‰‡ ‡‡fdd„}‡ ‡‡‡fdd„}t j|d}| ¡  z
|ƒ  W | ¡  d S | ¡  w )Nc                     s8   ˆ  ¡  ˆ ¡  ˆ ¡ \} }|  ¡  ˆ ¡  ˆ  ¡  d S r   )r  r  r1  rH  )ZnewsockrÔ  )Úlistener_goneÚlistener_readyr¾   r    r!   ÚlistenerØ  s   z2ThreadedTests.test_rude_shutdown.<locals>.listenerc               	      s†   ˆ  ¡  t ¡ 1} |  tˆf¡ ˆ   ¡  zt| ƒ}W n	 ty#   Y nw ˆ d¡ W d   ƒ d S W d   ƒ d S 1 s<w   Y  d S )Nz2connecting to closed SSL socket should have failed)r  r»   r?  r@  r“   r  rø   )ru  r¥  )r_  r`  rÆ  r¯   r    r!   Ú	connectorà  s   
ÿø"úz3ThreadedTests.test_rude_shutdown.<locals>.connector©Útarget)	rÖ  r  r»   r   rÂ  r@  r×  r  r   )r¯   ra  rb  r  r    )r_  r`  rÆ  r¾   r¯   r!   Útest_rude_shutdownÊ  s   z ThreadedTests.test_rude_shutdownc                 C   s6  t jr	tj d¡ t tj¡}| t	¡ t tj
¡}t|dd}|o |jt ¡ tdM}z
| t|jf¡ W n: tjyq } z-d}|  |tj¡ |  |jd¡ |  |j|¡ |  |t|ƒ¡ |  dt|ƒ¡ W Y d }~nd }~ww W d   ƒ n1 s|w   Y  W d   ƒ d S W d   ƒ d S 1 s”w   Y  d S )NrÍ   TrB  rm  z&unable to get local issuer certificater+  r  )r   rs   rq   rt   ru   r	   ra   rV   rŽ   r–   rW   rÌ  r   r»   r‰   r?  r@  rÆ  r´   r  rH  r¥   Zverify_codeZverify_messager}  r{  )r¯   rŸ   r’   rÅ  r¾   rc  rø  r    r    r!   Útest_ssl_cert_verify_erroró  s6   

ÿ€ú€üÿ"ÿz(ThreadedTests.test_ssl_cert_verify_errorr\   c                 C   s´   	 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d ttjtj
dtjd d S )NrÍ   TFr   ©r>  )r   rs   rq   rt   ru   r?  r	   ÚPROTOCOL_SSLv2r£   r¤   rU   rX   ÚPROTOCOL_SSLv3r   r©   rª   r®   r    r    r!   Útest_protocol_sslv2
  s    ÿ
ÿz!ThreadedTests.test_protocol_sslv2c              
   C   s¨  	 t jr
tj d¡ tdƒr8z
ttjtj	dƒ W n t
y7 } zt jr-tj dt|ƒ ¡ W Y d }~nd }~ww tdƒrDttjtjdƒ ttjtjdƒ tdƒrXttjtjdƒ tdƒrft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jƒ tdƒrŒ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jƒ tdƒr³ttjtjdtjd ttjtjdtjtjB d tdƒrÒttjtjdtjd d S d S )	NrÍ   r\   Tz; SSL2 client to SSL23 server test unexpectedly failed:
 %s
r   Fr   )r=  )r   rs   rq   rt   ru   rX   r?  r	   rU   rh  r  rS   ri  r   r£   r¤   r©   r¨   rª   )r¯   rÐ  r    r    r!   Útest_PROTOCOL_TLS  sT   ÿÿ€ýÿ
ÿ
ÿÿzThreadedTests.test_PROTOCOL_TLSr   c                 C   sŽ   	 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ƒr2ttjtjdƒ ttjtjdtjd ttjtjdƒ d S )NrÍ   r   r\   Frg  )r   rs   rq   rt   ru   r?  r	   ri  r£   r¤   rX   rh  rU   r©   r   r®   r    r    r!   Útest_protocol_sslv3F  s   ÿz!ThreadedTests.test_protocol_sslv3r   c                 C   s–   	 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ƒr2ttjtjdƒ t
dƒr>ttjtjdƒ ttjtjdtjd d S )NrÍ   r   r\   Fr   rg  )r   rs   rq   rt   ru   r?  r	   r   r£   r¤   rX   rh  ri  rU   rª   r®   r    r    r!   Útest_protocol_tlsv1T  s   
ÿz!ThreadedTests.test_protocol_tlsv1r   c                 C   sž   	 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d ttjtjdƒ ttjtjdƒ ttjtjdƒ d S )NrÍ   úTLSv1.1r\   Fr   rg  )r   rs   rq   rt   ru   r?  r	   r   rX   rh  ri  rU   r¬   r2  r®   r    r    r!   Útest_protocol_tlsv1_1c  s   ÿz#ThreadedTests.test_protocol_tlsv1_1r`   c                 C   sÔ   	 t jr
tj d¡ ttjtjdtjtj	B tjtj	B d t
dƒr)ttjtjdƒ t
dƒr5ttjtjdƒ ttjtjdtjd ttjtjdƒ ttjtjdƒ ttjtjdƒ ttjtjdƒ ttjtjdƒ d S )NrÍ   úTLSv1.2)r=  r>  r\   Fr   rg  )r   rs   rq   rt   ru   r?  r	   r2  r©   r¨   rX   rh  ri  rU   r­   r   r   r®   r    r    r!   Útest_protocol_tlsv1_2u  s&   

þÿz#ThreadedTests.test_protocol_tlsv1_2c           	      C   s¤  	 d}t tdddd}d}|¹ t ¡ }| d¡ | t|jf¡ tjr*t	j
 d¡ |D ]j}tjr9t	j
 d| ¡ |rE| |¡ | ¡ }n
| |¡ | d¡}| ¡  ¡ }|dkrp| d	¡rptjrit	j
 d
| ¡ t|ƒ}d}q,|dkr‹| d	¡r‹tjr„t	j
 d| ¡ | ¡ }d}q,tjr–t	j
 d| ¡ q,tjr t	j
 d¡ |r¨| d¡ n| d¡ |r´| ¡  n| ¡  W d   ƒ d S W d   ƒ d S 1 sËw   Y  d S )N)s   msg 1s   MSG 2rä  s   MSG 3s   msg 4ræ  s   msg 5s   msg 6T)rï  rá  rñ  FrÍ   r(  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
r-  r,  )rÌ  rÏ   r»   rh  r?  r@  rÆ  r   rs   rq   rt   ru   rF   r#  r  rð  r¿  r÷   r“   r  rH  )	r¯   ZmsgsrÅ  Úwrappedr¾   r5  r  r8  rø  r    r    r!   Útest_starttls‹  sv   ý
ÿ



ÿÿÿÿÿ€


Ò,"ÔzThreadedTests.test_starttlsc                 C   sþ   	 t | td}tjrtj d¡ ttdƒ}| 	¡ }W d   ƒ n1 s$w   Y  d}d|j
tj t¡d f }tjtd}tjj||d}z+| ¡  d	¡}|rlt|ƒd
krl| 	t|ƒ¡}tjrltj dt|ƒ|f ¡ W | ¡  n| ¡  w |  ||¡ d S )Nr=  rÍ   Úrbr  zhttps://localhost:%d/%srÅ   )r„  rÊ  zcontent-lengthr   z/ client: read %d bytes from remote server '%s'
)rÑ  r–   r   rs   rq   rt   ru   rE   rÏ   rF   rÆ  r   r   rM  r	   rQ  rœ   ÚurllibZrequestÚurlopenÚinforˆ   r  rY   rH  r¥   )r¯   rÅ  rH   rû   rü   Úurlr’   Zdlenr    r    r!   Útest_socketserverÄ  s4   
ÿÿ
ÿÿ€zThreadedTests.test_socketserverc              	   C   s(  	 t jr
tj d¡ d}ttƒ}|x tt ¡ ƒ}| 	d|j
f¡ t jr,tj d| ¡ | |¡ | ¡ }t jr@tj d| ¡ || ¡ kr_|  d|d d… t|ƒ|d d…  ¡ t|ƒf ¡ | d¡ t jrmtj d	¡ | ¡  t jr‚tj d
¡ W d   ƒ d S W d   ƒ d S 1 sw   Y  d S )NrÍ   rÅ  rñ   r(  r)  r*  r+  r,  r-  z client:  connection closed.
)r   rs   rq   rt   ru   r  rÏ   r“   r»   r?  rÆ  rF   r¿  rø   rY   rH  )r¯   r5  rÅ  r¾   r8  r    r    r!   Útest_asyncore_serverÞ  sB   ÿ
ÿÿÿ
ì"íz"ThreadedTests.test_asyncore_serverc                    sÌ  	 t jr
tj d¡ tttjtj	tddd}|Â t
t ¡ dtttjd‰ ˆ  t|jf¡ ‡ fdd„}‡ fdd	„}d
ˆ jdg tfdˆ jddgtfdˆ jdg d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 ]x\}}}	}
}||  d¡}z<||g|
¢R Ž }d |¡}| j|||ƒ|d ˆ  ¡ }|| ¡ krº|  dj||d d… t|ƒ|d d… t|ƒd¡ W qq tyé } z"|	rÎ|  dj|d¡ t|ƒ |¡sß|  dj||d¡ W Y d }~qqd }~ww |D ]m\}}}	}
||  d¡}z+ˆ  |¡ ||
Ž }|| ¡ kr#|  dj||d d… t|ƒ|d d… t|ƒd¡ W qì tyY } z(|	r9|  d j|d¡ t|ƒ |¡sK|  dj||d¡ ˆ  ¡  W Y d }~qìd }~ww d!}ˆ  |¡ tt|ƒƒ}|  ˆ  d"|¡t|ƒ¡ |  ||¡ td ur—tj t|ƒ }| !|¡}ˆ  |¡ |  ˆ  ¡ |¡ |  "t#ˆ j$¡ |  "t#ˆ j%d!g¡ |  "t#ˆ j&d#¡ |  "t#ˆ j'td#ƒg¡ ˆ  d$¡ |  "tˆ jd"¡ |  "tˆ jd"¡ ˆ  (¡  W d   ƒ d S 1 sßw   Y  d S )%NrÍ   TF©r   rÿ  r  rá  rñ  ©r†   r„   r‚   r   c                     s   t dƒ} ˆ  | ¡}| d |… S ©Nsd                                                                                                       )rÉ   r   )ÚbrŸ  ©r¾   r    r!   Ú
_recv_into  s   
z0ThreadedTests.test_recv_send.<locals>._recv_intoc                     s"   t dƒ} ˆ  | ¡\}}| d |… S r}  )rÉ   r"  )r~  rŸ  rÔ  r  r    r!   Ú_recvfrom_into  s   z4ThreadedTests.test_recv_send.<locals>._recvfrom_intor#  r$  zsome.addressr¸  c                 S   rP   r   r    )rÐ  r    r    r!   Ú<lambda>  ó    z.ThreadedTests.test_recv_send.<locals>.<lambda>r  r!  r   r"  ZPREFIX_rX  zsending with {})rø  zpWhile sending with <<{name:s}>> bad data <<{outdata:r}>> ({nout:d}) received; expected <<{indata:r}>> ({nin:d})
r+  )r   r8  Znoutr5  Z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  r,  ))r   rs   rq   rt   ru   rÌ  rÏ   r	   rŠ   rV   r“   r»   r?  r@  rÆ  r#  rY   r$  r¸  r  r!  rh  Úformatr¥   rF   r¿  rø   r›   rS   r÷   rÉ   ÚctypesZc_ubyteZfrom_buffer_copyrÈ   r%  r&  r'  r(  r)  rH  )r¯   rÅ  r€  r  Zsend_methodsZrecv_methodsZdata_prefixZ	meth_nameZ	send_methr<  re   Zret_val_methr5  r¼  rø  r8  rc  Z	recv_methrË   ÚbufferZubyteZ	bytesliker    r  r!   Útest_recv_sendû  sì   ûüý

üÿ
ûÿ€	ÿÿþÿ€ù
ûÿ€	ÿÿþÿ€ò



ÿ

$…zThreadedTests.test_recv_sendc                 C   sÆ   t tƒ}| ¡  |  |jd d ¡ t t|jf¡}|  |j	¡ t
|dd}|  |j	¡ | d¡ |  | d¡d¡ |  | d¡d¡ |  | ¡ d¡ | d¡ |  | d¡d¡ |  | tƒ ¡d¡ d S )NF)r\  r]  r   rË  )rÌ  rÏ   r‡  rG  rˆ  r»   rg  r@  rÆ  rH  r“   r#  r¥   r  rF   rh  r   rÉ   )r¯   rÅ  r¾   r    r    r!   Útest_recv_zeroƒ  s   

zThreadedTests.test_recv_zeroc                    s°   t ttjtjtddd}|@ tt ¡ dtttjd‰ˆ t|j	f¡ ˆ 
d¡ tdƒ‰ ‡ ‡fdd„}|  tjtjf|¡ ˆ 
d¡ ˆ ¡  W d   ƒ d S 1 sQw   Y  d S )NTFr{  r|  i    c                      s   	 ˆ  ˆ ¡ qr¢   )r#  r    ©r½  r¾   r    r!   Úfill_bufferª  s   
ÿz8ThreadedTests.test_nonblocking_send.<locals>.fill_buffer)rÌ  rÏ   r	   rŠ   rV   r“   r»   r?  r@  rÆ  rh  rÉ   rÈ   r‘  ri  rH  )r¯   rÅ  r‹  r    rŠ  r!   Útest_nonblocking_send—  s4   ûü
ÿÿ

"ìz#ThreadedTests.test_nonblocking_sendc                    s  t   t j¡‰d}t ˆ¡}t ¡ ‰d‰ ‡ ‡‡fdd„}tj|d}| ¡  ˆ ¡  zYz t   t j¡}| 	d¡ | 
||f¡ |  tdt|¡ W | ¡  n| ¡  w z t   t j¡}t|ƒ}| 	d¡ |  td|j
||f¡ W | ¡  n| ¡  w W d‰ | ¡  ˆ ¡  d S d‰ | ¡  ˆ ¡  w )	Nrñ   Fc                     sd   ˆ  ¡  ˆ ¡  g } ˆ s't ˆgg g d¡\}}}ˆ|v r%|  ˆ ¡ d ¡ ˆ r| D ]}| ¡  q)d S )Nr²  r   )r  r  r  r£  r1  rH  )Zconnsrô   Úwrc  r   ©ZfinishrÅ  Ústartedr    r!   Úserve¼  s   û
ÿz3ThreadedTests.test_handshake_timeout.<locals>.serverc  r°  z	timed outT)r»   r  r   rÂ  rÖ  r  r×  r  r  r-  r?  r¶   r  r“   rH  r   )r¯   rf  rÆ  r  r  ru  r    rŽ  r!   Útest_handshake_timeout´  s@   

ÿ

ÿþ
z$ThreadedTests.test_handshake_timeoutc           
         sö   t ƒ \}}}t tj¡‰d}t ˆ¡}|jˆdd‰|  ˆj¡ t 	¡ ‰ d ‰d ‰‡ ‡‡‡fdd„}tj
|d}| ¡  ˆ  ¡  |jt ¡ |d}| ||f¡ | d¡ | ¡  | ¡ }	| ¡  | ¡  ˆ ¡  ˆ ¡  |  ˆtj¡ |  ˆ|	¡ d S )	Nrñ   Tr;  c                      s0   ˆ  ¡  ˆ  ¡  ˆ ¡ \‰‰ˆ ˆ d¡¡ d S )Nrþ   )r  r  r1  r#  r  r    ©ZevtZpeerZremoterÅ  r    r!   r  ò  s   z/ThreadedTests.test_server_accept.<locals>.serverc  rm  r]  )r    r»   r  r   rÂ  r   r  r†   rÖ  r  r×  r  r  r?  r#  r  rs  rH  r   r  r	   r¼   r¥   )
r¯   r€  r  r   rf  rÆ  r  r  r‚  Zclient_addrr    r’  r!   Útest_server_acceptå  s4   
ÿ
z ThreadedTests.test_server_acceptc              	   C   óŠ   t  t j¡}d|_| t ¡ ¡+}|  t¡}| ¡  W d   ƒ n1 s%w   Y  |  	|j
jtj¡ W d   ƒ d S 1 s>w   Y  d S r  )r	   ra   rW   r‹   r   r»   rÈ   r  r‹  r¥   rB  rC  ÚENOTCONN©r¯   r’   r   r8  r    r    r!   Útest_getpeercert_enotconn  ó   
ÿ"ýz'ThreadedTests.test_getpeercert_enotconnc              	   C   r”  r  )r	   ra   rW   r‹   r   r»   rÈ   r  rj  r¥   rB  rC  r•  r–  r    r    r!   Útest_do_handshake_enotconn  r˜  z(ThreadedTests.test_do_handshake_enotconnc              
   C   sÖ   t ƒ \}}}tjj|_| d¡ | d¡ t|d>}|jt ¡ |d%}|  	t
¡ | t|jf¡ W d   ƒ n1 s=w   Y  W d   ƒ n1 sLw   Y  W d   ƒ n1 s[w   Y  |  d|jd ¡ d S )NZAES128ÚAES256rÊ  rm  zno shared cipherr   )r    r	   r
   r`   r]   rL   rÌ  r   r»   rÈ   r  r?  r@  rÆ  r}  rà  rÍ  r    r    r!   Útest_no_shared_ciphers  s"   



ÿÿ€þ€ÿz$ThreadedTests.test_no_shared_ciphersc              	   C   sÜ   	 t  t j¡}d|_t j|_ttt jddN}| 	t
 
¡ ¡'}|  | ¡ d ¡ |  |jd ¡ | t|jf¡ |  | ¡ d¡ W d   ƒ n1 sHw   Y  |  |jd ¡ |  | ¡ d ¡ W d   ƒ d S 1 sgw   Y  d S )NF)rÿ  rá  úTLSv1.3)r	   ra   rW   r‹   rŠ   rŒ   rÌ  rÏ   rV   r   r»   rÀ   r5   rµ  r?  r@  rÆ  r¥   )r¯   r’   rÅ  r¾   r    r    r!   Útest_version_basic+  s$   þü"÷z ThreadedTests.test_version_basicc              	   C   sÀ   t ƒ \}}}tjj|_t|dF}|jt ¡ |d$}| t	|j
f¡ |  | ¡ d h d£¡ |  | ¡ d¡ W d   ƒ n1 sAw   Y  W d   ƒ d S W d   ƒ d S 1 sYw   Y  d S )NrÊ  rm  r   >   ZTLS_CHACHA20_POLY1305_SHA256ZTLS_AES_128_GCM_SHA256ZTLS_AES_256_GCM_SHA384rœ  )r    r	   r
   rò  rJ   rÌ  r   r»   r?  r@  rÆ  r}  rÀ  r¥   r5   rÍ  r    r    r!   Útest_tls1_3>  s   

ÿøÿ"ÿzThreadedTests.test_tls1_3c              	   C   sÆ   t ƒ \}}}tjj|_tjj|_tjj|_tjj|_t|d:}|jt	 	¡ |d}| 
t|jf¡ |  | ¡ d¡ W d   ƒ n1 sDw   Y  W d   ƒ d S W d   ƒ d S 1 s\w   Y  d S )NrÊ  rm  rp  )r    r	   r
   r   rJ   r`   r]   rÌ  r   r»   r?  r@  rÆ  r¥   r5   rÍ  r    r    r!   Útest_min_max_version_tlsv1_2M  s    




ÿýÿ"ÿz*ThreadedTests.test_min_max_version_tlsv1_2c              	   C   sÐ   t ƒ \}}}tjj|_tjj|_tjj|_tjj|_t||ƒ t	|d:}|j
t ¡ |d}| t|jf¡ |  | ¡ d¡ W d   ƒ n1 sIw   Y  W d   ƒ d S W d   ƒ d S 1 saw   Y  d S )NrÊ  rm  rn  )r    r	   r
   r   rJ   r`   r]   r   rO   rÌ  r   r»   r?  r@  rÆ  r¥   r5   rÍ  r    r    r!   Útest_min_max_version_tlsv1_1_  s"   





ÿýÿ"ÿz*ThreadedTests.test_min_max_version_tlsv1_1c              
   C   sþ   t ƒ \}}}tjj|_tjj|_tjj|_tjj|_t||ƒ t|dQ}|j	t
 
¡ |d/}|  tj¡}| t|jf¡ W d   ƒ n1 sHw   Y  |  dt|jƒ¡ W d   ƒ n1 s`w   Y  W d   ƒ d S W d   ƒ d S 1 sxw   Y  d S )NrÊ  rm  Zalert)r    r	   r
   r`   r]   rJ   r   rO   rÌ  r   r»   rÈ   r´   r?  r@  rÆ  r}  rS   rB  rY  r    r    r!   Útest_min_max_version_mismatchp  s&   





ÿÿüÿ"ÿz+ThreadedTests.test_min_max_version_mismatchc              	   C   sÆ   t ƒ \}}}tjj|_tjj|_tjj|_t||ƒ t|d:}|jt	 	¡ |d}| 
t|jf¡ |  | ¡ d¡ W d   ƒ n1 sDw   Y  W d   ƒ d S W d   ƒ d S 1 s\w   Y  d S )NrÊ  rm  r   )r    r	   r
   r   rJ   r]   rO   rÌ  r   r»   r?  r@  rÆ  r¥   r5   rÍ  r    r    r!   Útest_min_max_version_sslv3ƒ  s    




ÿýÿ"ÿz(ThreadedTests.test_min_max_version_sslv3c              	   C   s¬   t ƒ \}}}tjj|_t|d<}|jt ¡ |d}| t	|j
f¡ |  d| ¡ d ¡ W d   ƒ n1 s7w   Y  W d   ƒ d S W d   ƒ d S 1 sOw   Y  d S )NrÊ  rm  ZECDHr   )r    r	   r
   r`   r]   rÌ  r   r»   r?  r@  rÆ  r}  rÀ  rÍ  r    r    r!   Útest_default_ecdh_curve‘  s   

ÿýÿ"ÿz%ThreadedTests.test_default_ecdh_curverw  rx  c           	   	   C   s  	 t jr
tj d¡ tƒ \}}}t|ddd}|ß |jt ¡ |dS}| 	t
|jf¡ | d¡}t jr=tj d |¡¡ |  |¡ | ¡ dkrQ|  t|ƒd	¡ n|  t|ƒd
¡ | d¡ | ¡  ¡ }|  |t|ƒ d¡¡ W d   ƒ n1 syw   Y  |jt ¡ |dY}| 	t
|jf¡ | d¡}t jr¡tj d |¡¡ |  ||¡ |  |¡ | ¡ dkr»|  t|ƒd	¡ n|  t|ƒd
¡ | d¡ | ¡  ¡ }|  |t|ƒ d¡¡ W d   ƒ n1 sãw   Y  W d   ƒ d S W d   ƒ d S 1 sûw   Y  d S )NrÍ   TFr&  rm  rw  z! got channel binding data: {0!r}
rœ  é0   é   s   CB tls-unique
rç  z(got another channel binding data: {0!r}
)r   rs   rq   rt   ru   r    rÌ  r   r»   r?  r@  rÆ  rt  r…  rÁ  r5   r¥   rY   rF   rð  r{  rh  ÚassertNotEqual)	r¯   rž   rŸ   r   rÅ  r¾   Zcb_dataZpeer_data_reprZnew_cb_datar    r    r!   rz  ¢  sr   þþ
ÿ

ÿìþ
ÿÿ

ÿíç"çz-ThreadedTests.test_tls_unique_channel_bindingc                 C   sR   t ƒ \}}}t||dd|d}tjrtj d |d ¡¡ |  |d h d£¡ d S )NT©rá  rñ  r6  z got compression: {!r}
r.  >   NZRLEZZLIB)	r    r9  r   rs   rq   rt   ru   r…  r}  ©r¯   rž   rŸ   r   rN  r    r    r!   Útest_compressionÞ  s   þzThreadedTests.test_compressionr>   z*ssl.OP_NO_COMPRESSION needed for this testc                 C   sR   t ƒ \}}}| jtjO  _| jtjO  _t||dd|d}|  |d d ¡ d S )NTr§  r.  )r    r5  r	   r>   r9  rÀ   r¨  r    r    r!   Útest_compression_disabledç  s   þz'ThreadedTests.test_compression_disabledr+  c                 C   s–   t ƒ \}}}tjj|_| t¡ | d¡ tjj|_t||dd|d}|d d }| 	d¡}d|vrEd|vrGd	|vrI|  
d
|d  ¡ d S d S d S d S )NZkEDHTr§  rÀ  r   rJ  ZADHZEDHZDHEzNon-DH cipher: )r    r	   r
   r`   r]   r-  r.  rL   r9  rM  rø   )r¯   rž   rŸ   r   rN  rÀ  Úpartsr    r    r!   Útest_dh_paramsò  s   



þ
ÿzThreadedTests.test_dh_paramsc                 C   sð   t ƒ \}}}| d¡ | d¡ tjj|_t||dd|d}t ƒ \}}}| d¡ | d¡ tjj|_t||dd|d}t ƒ \}}}| d¡ | d¡ | d¡ tjj|_|  tj	¡ t||dd|d W d   ƒ d S 1 sqw   Y  d S )NZ	secp384r1zECDHE:!eNULL:!aNULLTr§  r7  )
r    r:  rL   r	   r
   r`   rJ   r9  rÈ   r´   r¨  r    r    r!   Útest_ecdh_curve  s6   


þ


þ



þ"ÿzThreadedTests.test_ecdh_curvec                 C   s2   t ƒ \}}}t||dd|d}|  |d d ¡ d S )NTr§  r0  )r    r9  rÀ   r¨  r    r    r!   Útest_selected_alpn_protocol"  s   þz)ThreadedTests.test_selected_alpn_protocolc                 C   s@   t ƒ \}}}| ddg¡ t||dd|d}|  |d d ¡ d S )Nr8  ÚbarTr§  r0  )r    rü  r9  rÀ   r¨  r    r    r!   Ú/test_selected_alpn_protocol_if_server_uses_alpn*  s   þz=ThreadedTests.test_selected_alpn_protocol_if_server_uses_alpnc                 C   s  g d¢}ddgdfddgdfdgdfddgd fg}|D ]j\}}t ƒ \}}}| |¡ | |¡ zt||dd|d}W n tjyO }	 z|	}W Y d }	~	nd }	~	ww d	t|ƒt|ƒt|ƒf }
|d
 }|  |||
|df ¡ t|d ƒrx|d d nd}|  |||
|df ¡ qd S )N)r8  r¯  Ú	milkshaker8  r¯  r±  zhttp/3.0zhttp/4.0Tr§  zKfailed trying %s (s) and %s (c).
was expecting %s, but got %%s from the %%sr0  r‚  r2  r  ZnothingrÅ  )r    rü  r9  r	   r´   rS   r¥   rY   )r¯   Zserver_protocolsZprotocol_testsZclient_protocolsr¥  rž   rŸ   r   rN  rc  rø  Zclient_resultZserver_resultr    r    r!   Útest_alpn_protocols3  sL   


ü


ü€ÿÿþ
ÿ
ÿÿ
ÿéz!ThreadedTests.test_alpn_protocolsc                 C   rP   r   r    r®   r    r    r!   Útest_npn_protocolsU  rƒ  z ThreadedTests.test_npn_protocolsc                 C   sL   t  t j¡}| t¡ t  t j¡}| t¡ t  t j¡}| t¡ |||fS r   )	r	   ra   rV   rŽ   r–   r—   rW   r   rœ   )r¯   rŸ   Úother_contextrž   r    r    r!   Úsni_contextsX  s   



zThreadedTests.sni_contextsc                 C   s"   |d }|   d|ff|d ¡ d S )Nr/  r+   r3   )r}  )r¯   rN  r   rS  r    r    r!   Úcheck_common_namea  s   zThreadedTests.check_common_namec                    sÊ   g ‰ |   ¡ \}‰}d|_‡ ‡fdd„}| |¡ t||ddd}|  ˆ d|fg¡ |  |d¡ g ‰ t||dd d}|  ˆ d |fg¡ |  |t¡ g ‰ | d ¡ t||ddd}|  |t¡ |  ˆ g ¡ d S )	NFc                    s$   ˆ   ||f¡ |d urˆ| _d S d S r   )r£  r’   r¤  ©Zcallsr´  r    r!   r§  k  s   
ÿz6ThreadedTests.test_sni_callback.<locals>.servername_cbTÚsupermessage©rá  r6  r:   Znotfunny)rµ  r‹   r?  r9  r¥   r¶  r‰   )r¯   rŸ   rž   r§  rN  r    r·  r!   r@  e  s4   
þþ
þzThreadedTests.test_sni_callbackc                 C   sp   |   ¡ \}}}dd„ }| |¡ |  tj¡}t||ddd}W d   ƒ n1 s)w   Y  |  |jjd¡ d S )Nc                 S   s   t jS r   )r	   ZALERT_DESCRIPTION_ACCESS_DENIEDr¤  r    r    r!   Úcb_returning_alert‘  s   zAThreadedTests.test_sni_callback_alert.<locals>.cb_returning_alertFr¸  r¹  ZTLSV1_ALERT_ACCESS_DENIED)	rµ  r?  rÈ   r	   r´   r9  r¥   rB  re  )r¯   rŸ   r´  rž   rº  r8  rN  r    r    r!   Útest_sni_callback_alert  s   
þÿz%ThreadedTests.test_sni_callback_alertc              	   C   óª   |   ¡ \}}}dd„ }| |¡ t ¡ 7}|  tj¡}t||ddd}W d   ƒ n1 s.w   Y  |  |j	j
d¡ |  |jjt¡ W d   ƒ d S 1 sNw   Y  d S )Nc                 S   s   dd  d S )NrÅ   r   r    r¤  r    r    r!   Ú
cb_raisingž  r¾  z;ThreadedTests.test_sni_callback_raising.<locals>.cb_raisingFr¸  r¹  ZSSLV3_ALERT_HANDSHAKE_FAILURE)rµ  r?  r   Úcatch_unraisable_exceptionrÈ   r	   r´   r9  r¥   rB  re  Ú
unraisableÚexc_typeÚZeroDivisionError)r¯   rŸ   r´  rž   r½  Úcatchr8  rN  r    r    r!   Útest_sni_callback_raisingš  s   

þÿ
ÿ"øz'ThreadedTests.test_sni_callback_raisingc              	   C   r¼  )Nc                 S   r  )Nr8  r    r¤  r    r    r!   Úcb_wrong_return_type±  rQ   zOThreadedTests.test_sni_callback_wrong_return_type.<locals>.cb_wrong_return_typeFr¸  r¹  ZTLSV1_ALERT_INTERNAL_ERROR)rµ  r?  r   r¾  rÈ   r	   r´   r9  r¥   rB  re  r¿  rÀ  r·   )r¯   rŸ   r´  rž   rÄ  rÂ  r8  rN  r    r    r!   Ú#test_sni_callback_wrong_return_type¬  s   

þÿ"øz1ThreadedTests.test_sni_callback_wrong_return_typec           	         s†   t ƒ \}}}| d¡ | d¡ g d¢}t|||d}|d d }|  t|ƒd¡ |D ]\‰ }}t‡ fdd„|D ƒƒs@|  ˆ ¡ q+d S )	NzAES128:AES256rš  )rš  zAES-256ZTLS_CHACHA20ZTLS_AES©r6  r3  r   c                 3   s    | ]}|ˆ v V  qd S r   r    )râ  Zalgr   r    r!   rã  Î  rä  z4ThreadedTests.test_shared_ciphers.<locals>.<genexpr>)r    rL   r9  ÚassertGreaterrY   Úanyrø   )	r¯   rž   rŸ   r   Zexpected_algsrN  rƒ   Ztls_versionÚbitsr    r   r!   Útest_shared_ciphers¿  s   

ÿ
€þz!ThreadedTests.test_shared_ciphersc                 C   sŒ   t ƒ \}}}t|dd}|. |jt ¡ |d}| t|jf¡ | ¡  |  t	|j
d¡ |  t	|jd¡ W d   ƒ d S 1 s?w   Y  d S )NFrB  rm  rÆ  s   hello)r    rÌ  r   r»   r?  r@  rÆ  rH  rÈ   r›   rF   ru   rÍ  r    r    r!   Ú,test_read_write_after_close_raises_valuerrorÑ  s   
ÿ"ùz:ThreadedTests.test_read_write_after_close_raises_valuerrorc           	   
   C   s&  d}t tjdƒ}| |¡ W d   ƒ n1 sw   Y  |  tjtj¡ tƒ \}}}t|dd}|V |jt	 	¡ |d4}| 
t|jf¡ t tjdƒ}| |¡ |  | d¡|¡ W d   ƒ n1 sew   Y  W d   ƒ n1 stw   Y  W d   ƒ d S W d   ƒ d S 1 sŒw   Y  d S )Ns   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxÚwbFrB  rm  rt  rÆ  )rE   r   ÚTESTFNru   rG  Úunlinkr    rÌ  r   r»   r?  r@  rÆ  Úsendfiler¥   r  )	r¯   Z	TEST_DATArH   rž   rŸ   r   rÅ  r¾   Úfiler    r    r!   Útest_sendfileÞ  s,   ÿ
ÿ
þ€ýÿ"ÿzThreadedTests.test_sendfilec           
      C   s0  t ƒ \}}}tjj|_t|||d}|d }|  |j¡ |  |j	d¡ |  |j
d¡ |  |j¡ |  |jd¡ |  |d ¡ | ¡ }|  |d d¡ |  |d d¡ t||||d}| ¡ }|  |d d	¡ |  |d d¡ |  |d ¡ |d }|  |j|j¡ |  ||¡ |  ||¡ |  |j	|j	¡ |  |j
|j
¡ t|||d}|  |d ¡ |d }|  |j|j¡ |  ||¡ | ¡ }|  |d d
¡ |  |d d¡ t||||d}|  |d ¡ |d }	|  |	j|j¡ |  |	|¡ |  |	j	|j	¡ |  |	j
|j
¡ | ¡ }|  |d d¡ |  |d d	¡ d S )NrÆ  r'  r   r1  r1  rÅ   r2  )r'  r6  r™  r   rþ   )r    r	   r
   r`   r]   r9  r  ÚidrÇ  ry   r/  Z
has_ticketZticket_lifetime_hintrë  r4  r¥   ZassertIsNotr	  r¦  )
r¯   rž   rŸ   r   rN  r'  Z	sess_statZsession2Zsession3Zsession4r    r    r!   Útest_sessioní  sd   
ÿÿÿÿzThreadedTests.test_sessionc           
   
   C   s¨  t ƒ \}}}t ƒ \}}}tjj|_tjj|_t|dd}|* |jt ¡ |dG}|  |j	d ¡ |  |j
d ¡ | t|jf¡ |j	}|  |¡ |  t¡}	t|_	W d   ƒ n1 s[w   Y  |  t|	jƒd¡ W d   ƒ n1 ssw   Y  |jt ¡ |d1}| t|jf¡ |  t¡}	||_	W d   ƒ n1 sw   Y  |  t|	jƒd¡ W d   ƒ n1 sµw   Y  |jt ¡ |d*}||_	| t|jf¡ |  |j	j|j¡ |  |j	|¡ |  |j
d¡ W d   ƒ n1 sðw   Y  |jt ¡ |d2}|  t¡}	||_	| t|jf¡ W d   ƒ n	1 sw   Y  |  t|	jƒd¡ W d   ƒ n1 s4w   Y  W d   ƒ d S W d   ƒ d S 1 sMw   Y  d S )NFrB  rm  zValue is not a SSLSession.z#Cannot set session after handshake.Tz)Session refers to a different SSLContext.)r    r	   r
   r`   r]   rÌ  r   r»   r¥   r'  r1  r?  r@  rÆ  r  rÈ   r·   r)  rS   rB  r›   rÒ  )
r¯   rž   rŸ   r   Zclient_context2rƒ  rÅ  r¾   r'  rc  r    r    r!   Útest_session_handling&  sr   


ÿ
ÿö
ÿÿÿú
	ÿø

ÿþÿ úà $àz#ThreadedTests.test_session_handlingN)ErÏ  rÐ  rÑ  rA  rE  rG  rU  rd   rÓ  r	   rï  rñ  rO  rP  rU  rZ  rm   r^  re  rf  rj  rk  rl  rm  ro  rq  rs  ry  rz  rˆ  r‰  rŒ  r‘  r“  r—  r™  r›  r  rž  rÒ  rŸ  r   r¡  r¢  r£  rÔ  rz  r©  rK   rª  r`  ra  r¬  r­  r®  r°  r²  r³  rµ  r¶  r@  r»  rÃ  rÅ  rÊ  rË  rÑ  rÓ  rÔ  r    r    r    r!   r@  i  s¨    ,$(!ÿ
8%
!)
*



9 	1(

ÿ
:	ÿ

	
	"	(9r@  rò  zTest needs TLS 1.3c                   @   sd   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚTestPostHandshakeAuthc                 C   s¼   t jt jg}|D ]S}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¡ qd S rÒ  )	r	   rV   rW   ra   r¥   Úpost_handshake_authr¤   rŒ   r£   )r¯   r7  rZ   rN   r    r    r!   Útest_pha_setter[  s$   ÿ
îz%TestPostHandshakeAuth.test_pha_setterc              	   C   sH  t ƒ \}}}d|_tj|_d|_| t¡ t|dd}|} |jt	 	¡ |d[}| 
t|jf¡ | d¡ |  | d¡d¡ | d¡ |  | d¡d	¡ | d¡ |  | d¡d
¡ | d¡ |  | d¡d	¡ | d¡ | d¡ d¡}|  d|¡ W d   ƒ n1 s…w   Y  W d   ƒ d S W d   ƒ d S 1 sw   Y  d S )NTFrB  rm  rê  rÆ  rì  ré  rå  rë  rí  i   rç  r6   )r    rÖ  r	   r¤   rŒ   rŽ   r–   rÌ  r   r»   r?  r@  rÆ  ru   r¥   r  ri  r}  )r¯   rž   rŸ   r   rÅ  r¾   Z	cert_textr    r    r!   Útest_pha_requireds  s6   

ÿ




òÿ"ÿz'TestPostHandshakeAuth.test_pha_requiredc              
   C   s   t ƒ \}}}d|_tj|_d|_dd„ }||_||_t|dd}|d |jt ¡ |ddA}| 	t
|jf¡ | d¡ |  tjd¡ | d	¡}|  |d
¡ | d¡ | d	¡ W d   ƒ n1 sbw   Y  W d   ƒ n1 sqw   Y  W d   ƒ d S W d   ƒ d S 1 s‰w   Y  d S )NTc                 S   s@   t jr|tjkr| |||||f}tj d|›d¡ d S d S d S )NzTLS: rÍ   )r   rs   r   ZALERTrq   rt   ru   )r  Ú	directionr5   Úcontent_typeÚmsg_typerË   rw  r    r    r!   Úmsg_cb’  s   þz>TestPostHandshakeAuth.test_pha_required_nocert.<locals>.msg_cbrB  Fr[  ré  z#(certificate required|EOF occurred)rÆ  rå  rê  )r    rÖ  r	   r¤   rŒ   Ú_msg_callbackrÌ  r   r»   r?  r@  rÆ  ru   r¶   r´   r  r¥   )r¯   rž   rŸ   r   rÜ  rÅ  r¾   rË   r    r    r!   Útest_pha_required_nocertŒ  s<   
þ
þ

ô€ùÿ"ÿz.TestPostHandshakeAuth.test_pha_required_nocertc              	   C   s   t jr	tj d¡ tƒ \}}}d|_tj|_	d|_| 
t¡ tj|_	t|dd}|\ |jt ¡ |d:}| t|jf¡ | d¡ |  | d¡d¡ | d	¡ |  | d¡d
¡ | d¡ |  | d¡d¡ W d   ƒ n1 sqw   Y  W d   ƒ d S W d   ƒ d S 1 s‰w   Y  d S )NrÍ   TFrB  rm  rê  rÆ  rì  ré  rå  rë  )r   rs   rq   rt   ru   r    rÖ  r	   r¤   rŒ   rŽ   r–   r£   rÌ  r   r»   r?  r@  rÆ  r¥   r  rÍ  r    r    r!   Útest_pha_optional±  s2   

ÿ


øÿ"ÿz'TestPostHandshakeAuth.test_pha_optionalc              	   C   s  t jr	tj d¡ tƒ \}}}d|_tj|_	d|_t
|dd}|\ |jt ¡ |d:}| t|jf¡ | d¡ |  | d¡d¡ | d	¡ |  | d¡d
¡ | d¡ |  | d¡d¡ W d   ƒ n1 shw   Y  W d   ƒ d S W d   ƒ d S 1 s€w   Y  d S )NrÍ   TFrB  rm  rê  rÆ  rì  ré  rå  )r   rs   rq   rt   ru   r    rÖ  r	   r£   rŒ   rÌ  r   r»   r?  r@  rÆ  r¥   r  rÍ  r    r    r!   Útest_pha_optional_nocertÉ  s.   
ÿ


÷ÿ"ÿz.TestPostHandshakeAuth.test_pha_optional_nocertc              
   C   sþ   t ƒ \}}}d|_tj|_| t¡ t|dd}|[ |jt	 	¡ |d9}| 
t|jf¡ |  tjd¡ | ¡  W d   ƒ n1 sCw   Y  | d¡ |  d| d¡¡ W d   ƒ n1 s`w   Y  W d   ƒ d S W d   ƒ d S 1 sxw   Y  d S )	NTFrB  rm  z
not serverré  s   extension not receivedrÆ  )r    rÖ  r	   r¤   rŒ   rŽ   r–   rÌ  r   r»   r?  r@  rÆ  r¶   r´   rò  ru   r}  r  rÍ  r    r    r!   Útest_pha_no_pha_clientß  s(   

ÿ
ÿ
úÿ"ÿz,TestPostHandshakeAuth.test_pha_no_pha_clientc              	   C   s   t ƒ \}}}tj|_d|_| t¡ t|dd}|\ |jt	 	¡ |d:}| 
t|jf¡ | d¡ |  | d¡d¡ | d¡ |  | d¡d	¡ | d¡ |  | d¡d¡ W d   ƒ n1 saw   Y  W d   ƒ d S W d   ƒ d S 1 syw   Y  d S )
NTFrB  rm  rê  rÆ  rë  ré  rå  )r    r	   r¤   rŒ   rÖ  rŽ   r–   rÌ  r   r»   r?  r@  rÆ  ru   r¥   r  rÍ  r    r    r!   Útest_pha_no_pha_serverï  s*   

ÿ


÷ÿ"ÿz,TestPostHandshakeAuth.test_pha_no_pha_serverc              	   C   sÒ   t ƒ \}}}tj|_tjj|_d|_| t	¡ t
|dd}|@ |jt ¡ |d}| t|jf¡ | d¡ |  d| d¡¡ W d   ƒ n1 sJw   Y  W d   ƒ d S W d   ƒ d S 1 sbw   Y  d S )NTFrB  rm  ré  s   WRONG_SSL_VERSIONrÆ  )r    r	   r¤   rŒ   r
   r`   r]   rÖ  rŽ   r–   rÌ  r   r»   r?  r@  rÆ  ru   r}  r  rÍ  r    r    r!   Útest_pha_not_tls13  s$   


ÿ
ûÿ"ÿz(TestPostHandshakeAuth.test_pha_not_tls13c              	   C   sH  t }t tj¡}d|_| t¡ d|_tj|_	t tj
¡}| t¡ | t¡ d|_tj|_	t|dd}|d |jt ¡ |dB}| t|jf¡ | d¡ |  | d¡d¡ | d¡ |  | d¡d	¡ | d¡ |  | d¡d
¡ |  | ¡ i ¡ W d   ƒ n1 s…w   Y  W d   ƒ d S W d   ƒ d S 1 sw   Y  d S )NTFrB  rm  rê  rÆ  rì  ré  rå  rë  )r‰   r	   ra   rW   rÖ  rŽ   r–   r‹   rŠ   rŒ   rV   r   rœ   r¤   rÌ  r   r»   r?  r@  rÆ  ru   r¥   r  r‹  )r¯   r   rž   rŸ   rÅ  r¾   r    r    r!   Útest_bpo37428_pha_cert_none  s:   



ÿ


öÿ"ÿz1TestPostHandshakeAuth.test_bpo37428_pha_cert_nonec              	   C   sÊ  t dd\}}}t|dd}|Ë |jt ¡ |d©}| 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¡ |  	t |
¡|¡ W d   ƒ n1 sÆw   Y  W d   ƒ d S W d   ƒ d S 1 sÞw   Y  d S )NFr”   rB  rm  r™  rÅ   r   zCN=localhostzCN=our-ca-serverz-----BEGIN CERTIFICATE-----)r    rÌ  r   r»   r?  r@  rÆ  rµ  ró  r¥   rY   rõ  Úhashr{  r¦  Zget_infor}  Zpublic_bytesr²   ZENCODING_PEMZENCODING_DERr  rS   r‘  r	   rö   )r¯   rž   rŸ   r   rÅ  r¾   ZvcZeeZcaZuvcrú   rI  r    r    r!   Útest_internal_chain_client3  sJ   ÿþ


ÿåÿ"ÿz0TestPostHandshakeAuth.test_internal_chain_clientc              	   C   sð   t ƒ \}}}| t¡ tj|_tjj|_t	|dd}|R |j
t ¡ |d0}| t|jf¡ | d¡ | d¡}|  |d¡ | d¡ | d¡}|  |d¡ W d   ƒ n1 sYw   Y  W d   ƒ d S W d   ƒ d S 1 sqw   Y  d S )NFrB  rm  s   VERIFIEDCHAIN
rÆ  s   
s   UNVERIFIEDCHAIN
)r    rŽ   r–   r	   r¤   rŒ   r
   r`   r]   rÌ  r   r»   r?  r@  rÆ  ru   r  r¥   )r¯   rž   rŸ   r   rÅ  r¾   Úresr    r    r!   Útest_internal_chain_serverX  s,   

þ



öÿ"ÿz0TestPostHandshakeAuth.test_internal_chain_serverN)rÏ  rÐ  rÑ  r×  rØ  rÞ  rß  rà  rá  râ  rã  rä  ræ  rè  r    r    r    r!   rÕ  Y  s    %%rÕ  Úkeylog_filenamez0test requires OpenSSL 1.1.1 with keylog callbackc                   @   sŠ   e Zd Zejfdd„Zee e	d¡dd„ ƒƒZ
ee e	d¡dd„ ƒƒZee ejjd¡e e	d¡d	d
„ ƒƒƒZdd„ Zdd„ Zdd„ ZdS )ÚTestSSLDebugc                 C   s8   t |ƒ}tt|ƒƒW  d   ƒ S 1 sw   Y  d S r   )rE   rY   r  )r¯   ÚfnamerH   r    r    r!   Úkeylog_liness  s   

$ÿzTestSSLDebug.keylog_linesr+  c                 C   s
  |   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¡ t
j t
j tj¡¡|_W d   ƒ n1 sew   Y  |  t¡ d|_W d   ƒ d S 1 s~w   Y  d S )NrÅ   )rG  r   rÎ  rÍ  r	   ra   rW   r¥   ré  rë  r   r   Úisfiler  rì  rÈ   ÚIsADirectoryErrorÚPermissionErrorr   Úabspathr·   rÞ  r    r    r!   Útest_keylog_defaultsw  s$   ÿþ"ÿz!TestSSLDebug.test_keylog_defaultsc              	   C   sØ  |   tjtj¡ tƒ \}}}tj|_t|dd}|) |jt ¡ |d}| 	t
|jf¡ W d   ƒ n1 s7w   Y  W d   ƒ n1 sFw   Y  |  |  ¡ d¡ d |_tj|_t|dd}|) |jt ¡ |d}| 	t
|jf¡ W d   ƒ n1 sw   Y  W d   ƒ n1 sŽw   Y  |  |  ¡ d¡ tj|_tj|_t|dd}|) |jt ¡ |d}| 	t
|jf¡ W d   ƒ n1 sÈw   Y  W d   ƒ n1 s×w   Y  |  |  ¡ d¡ d |_d |_d S )NFrB  rm  r  é   é   )rG  r   rÎ  rÍ  r    ré  rÌ  r   r»   r?  r@  rÆ  r¥   rì  r	  rÍ  r    r    r!   Útest_keylog_filename  sT   
ÿþ€ÿ
ÿþ€ÿ
ÿþ€ÿ
z!TestSSLDebug.test_keylog_filenamez.test is not compatible with ignore_environmentc                 C   s°   |   tjtj¡ tjj tj	¡> tjtj	d< |  
tj	d tj¡ t tj¡}|  
|jd ¡ t ¡ }|  
|jtj¡ t ¡ }|  
|jtj¡ W d   ƒ d S 1 sQw   Y  d S )NZSSLKEYLOGFILE)rG  r   rÎ  rÍ  rd   Zmockr  Údictr   Úenvironr¥   r	   ra   rW   ré  rQ  rS  rÞ  r    r    r!   Útest_keylog_env³  s   "õzTestSSLDebug.test_keylog_envc                 C   sn   t ƒ \}}}dd„ }|  |jd ¡ ||_|  |j|¡ |  t¡ tƒ |_W d   ƒ d S 1 s0w   Y  d S )Nc                 S   rP   r   r    ©r  rÙ  r5   rÚ  rÛ  rË   r    r    r!   rÜ  É  rQ   z.TestSSLDebug.test_msg_callback.<locals>.msg_cb)r    rÀ   rÝ  rÈ   r·   r)  )r¯   rž   rŸ   r   rÜ  r    r    r!   Útest_msg_callbackÆ  s   
"ÿzTestSSLDebug.test_msg_callbackc              	      sØ   t ƒ \}}}tjj|_g ‰ ‡ ‡fdd„}||_t|dd}|) |jt ¡ |d}| 	t
|jf¡ W d   ƒ n1 s<w   Y  W d   ƒ n1 sKw   Y  ˆ dtjtjtjfˆ ¡ ˆ dtjtjtjfˆ ¡ d S )Nc                    s@   ˆ  | tj¡ ˆ  |t¡ ˆ |ddh¡ ˆ  ||||f¡ d S )NrF   ru   )r  r	   r¼   r‘  r}  r£  rø  ©rø  r¯   r    r!   rÜ  Ø  s   z4TestSSLDebug.test_msg_callback_tls12.<locals>.msg_cbFrB  rm  rF   ru   )r    r	   r
   r`   r]   rÝ  rÌ  r   r»   r?  r@  rÆ  r}  r   Z	HANDSHAKEr   ZSERVER_KEY_EXCHANGEZCHANGE_CIPHER_SPEC)r¯   rž   rŸ   r   rÜ  rÅ  r¾   r    rú  r!   Útest_msg_callback_tls12Ò  s6   

ÿþ€ÿ
ÿý
ÿýz$TestSSLDebug.test_msg_callback_tls12c              	      s   t ƒ \}}}t ƒ d ‰ dd„ }‡ fdd„}||_||_t|dd}|S |jt ¡ |d}| t|jf¡ W d   ƒ n1 s@w   Y  |jt ¡ |d}| t|jf¡ W d   ƒ n1 saw   Y  W d   ƒ d S W d   ƒ d S 1 syw   Y  d S )	NrÅ   c                 S   rP   r   r    rø  r    r    r!   rÜ  õ  rQ   z@TestSSLDebug.test_msg_callback_deadlock_bpo43577.<locals>.msg_cbc                    s
   ˆ | _ d S r   rÊ  r<  ©Zserver_context2r    r!   Úsni_cbø  r  z@TestSSLDebug.test_msg_callback_deadlock_bpo43577.<locals>.sni_cbFrB  rm  )	r    rÝ  Zsni_callbackrÌ  r   r»   r?  r@  rÆ  )r¯   rž   rŸ   r   rÜ  rý  rÅ  r¾   r    rü  r!   Ú#test_msg_callback_deadlock_bpo43577ñ  s.   

ÿþ
ÿþü"üz0TestSSLDebug.test_msg_callback_deadlock_bpo43577N)rÏ  rÐ  rÑ  r   rÍ  rì  Úrequires_keylogrd   r`  ra  rñ  rô  rq   ÚflagsÚignore_environmentr÷  rù  rû  rþ  r    r    r    r!   rê  q  s"    

"
ÿ
rê  c                 C   sL  t jr[tjtjdœ}| ¡ D ]\}}|ƒ }|r#|d r#d||f } q*qtt ¡ ƒ}tdtj	tj
f ƒ td| ƒ tdtj ƒ tdtj ƒ z	tdtj ƒ W n	 tyZ   Y nw ttttttttttttfD ]}tj |¡sxt  d	| ¡‚qitt t!t"t#t$t%t&t'g	}t  (d
¡rŽ| )t*¡ t+ ,¡ }zt j-|Ž  W t+j.|Ž  d S t+j.|Ž  w )N)ZMacZWindowsr   z%s %rztest_ssl: testing with %r %rz          under %sz          HAS_SNI = %rz          OP_ALL = 0x%8xz          OP_NO_TLSv1_1 = 0x%8xzCan't read certificate file %rZnetwork)/r   rs   rÕ  Zmac_verZ	win32_verÚitemsr{  r÷  r	   r  r  r¦   rç  r¬   rð  rÏ   r  r  r  r  r  r–   r—   rœ   r  ÚBADKEYr  r   r   ÚexistsZ
TestFailedrÖ  r¡   rb  rn  r~  r…  r@  rÕ  rê  Zis_resource_enabledr£  rÈ  r   Zthreading_setupZrun_unittestZthreading_cleanup)rs   Zplatsr   rg   ZplatÚfilenameZtestsÚthread_infor    r    r!   Ú	test_main  sP   þ€
ÿÿüÿý

r  Ú__main__r   )rÅ  TFNN)Nr   r   )F)rq   rd   Zunittest.mockrÏ  r   Ztest.supportr   r   r   r   r   r»   r  ry   ZdatetimerB  r   rC  rÓ   Zurllib.requestru  rÖ  ro   r  rÕ  Z	sysconfigri   r†  ÚImportErrorÚwarningsÚcatch_warningsÚsimplefilterr4  r  Úimport_moduler	   r²   r
   r   r   r   rK   ZPy_DEBUGra  ÚsortedZ_PROTOCOL_NAMESrØ  r@  r  r_   Zget_config_varr   r:  rÂ   ÚverrT   rð  r"   rÏ   Úfsencoder  r  r  r  r  r  r  r  rƒ  r  r'  rõ   rÐ   rF  r–   r‰   rÑ   r—   r˜   rL  rK  rœ   rò   rT  r™   rš   rË  r  r  rA  r  rÒ   rë   rÚ   r.  r/  r>   r?   r@   rA   rB   rC   rI   rO   r[   Ú	lru_cacherX   rm   rw   r   Zignore_warningsrÒ  rŠ   r“   r    ZTestCaser¡   rÖ  rb  rn  r~  r…  rÈ  r¡  r®  Ztest.ssl_serversrÑ  r×  rÌ  r  r9  r?  r@  rÓ  rÕ  ra   Z
HAS_KEYLOGrÿ  rê  r  rÏ  r    r    r    r!   Ú<module>   sz  ÿ

þ





ÿ






óñ

	
	
(ÿþ      +     86?0  f
  v
þ1
ÿN           {  ÿ 

.
ÿ