Your IP : 216.73.216.85


Current Path : /opt/alt/python35/lib64/python3.5/test/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/test/__pycache__/test_ssl.cpython-35.opt-2.pyc



���]�_�@s�ddlZddlZddlmZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
ZddlZddlZddlZddlZddlZejd�Zeej�ZejZejjd�Zeo1ejdddfkZeoPejdddfkZdd�Z e d�Z!e	j"e!�Z#e d	�Z$e d
�Z%e	j"e$�Z&e	j"e%�Z'e d�Z(e d�Z)d
Z*e d�Z+e	j"e+�Z,e dd�Z-e dd�Z.e d�Z/e d�Z0e d�Z1e d�Z2e d�Z3dZ4e d�Z5e d�Z6e d�Z7e d�Z8e d�Z9e d�Z:e d�Z;e d�Z<e d�Z=e	j"e=�Z>d d!�Z?d"d#�Z@d$d%�ZAd&d'�ZBd(d)�ZCd*d+�ZDd,d-�ZEejFejGd.�ZHGd/d0�d0ejI�ZJGd1d2�d2ejI�ZKGd3d4�d4ejI�ZLGd5d6�d6ejI�ZMGd7d8�d8ejI�ZNGd9d:�d:ejI�ZOyddlPZPWneQk
r�d;ZRYn�Xd<ZRdd=lSmTZTGd>d?�d?ePjU�ZVGd@dA�dAePjU�ZWdBd<d;ddCdD�ZXddddEdF�ZYGdGdH�dHejI�ZZd;dIdJ�Z[e\dKkr�e[�dS)L�N)�support�sslZLibreSSL�cGstjjtjjt�|�S)N)�os�path�join�dirname�__file__)�name�r�-/opt/alt/python35/lib64/python3.5/test_ssl.py�	data_filesr
zkeycert.pemzssl_cert.pemzssl_key.pemzkeycert.passwd.pemzssl_key.passwd.pemZsomepass�capathz
4e1295a3.0z
5ed36f99.0zrevocation.crlzkeycert3.pemzkeycert4.pemzpycacert.pemzallsans.pemzself-signed.pythontest.netzselfsigned_pythontestdotnet.pemznullcert.pemzbadcert.pemzXXXnonexisting.pemz
badkey.pemz	nokia.pemznullbytecert.pemztalos-2019-0758.pemz
dh1024.pemcCs?djtjtj���}tjr;tjj||�dS)N� )	r�	traceback�format_exception�sys�exc_infor�verbose�stdout�write)�prefixZ
exc_formatrrr�handle_errorOs	rcCs
tjdkS)Nr�	��
�)rrrrr)r�_OPENSSL_API_VERSIONrrrr�can_clear_optionsTsrcCs
tjdkS)Nrr�rr)rrrrr)r�OPENSSL_VERSION_INFOrrrr�no_sslv2_implies_sslv3_helloXsr!cCs
tjdkS)Nrrrr)rrrrr)rr rrrr�have_verify_flags\sr"cCs.tjr&tj�jdkr&tjStjS)Nr)�time�daylight�	localtime�tm_isdst�altzone�timezonerrrr�
utc_offset`sr)cCs�tjdkr}d}tjj||�}|jdd�}|j|�}|ddkr}|dd�d	|d
d�}|S)Nrrrrz%b %d %H:%M:%S %Y GMT�second��0r�)rrrrr)rr�datetime�strptime�replace�strftime)�	cert_time�fmtZdtrrr�asn1timefs"r4cs<ttd�r4tj���fdd��}|S�SdS)N�PROTOCOL_SSLv2csiytjtj�WnEtjk
r[tjd	krWtj�d
krWtjd��YnX�||�S)Nrrrr�debian�squeeze/sid�z'Patched Ubuntu OpenSSL breaks behaviour)rrrrr)r6r7r8)	r�
SSLContextr5�SSLErrorr �platform�linux_distribution�unittestZSkipTest)�args�kwargs)�funcrr�fwsz$skip_if_broken_ubuntu_ssl.<locals>.f)�hasattrr�	functools�wraps)r@rAr)r@r�skip_if_broken_ubuntu_sslus!	rEz SNI support needed for this testc@sDeZdZdd�Zdd�Zdd�Zejej	dkd�d	d
��Z
dd�Zd
d�Zdd�Z
dd�Zdd�Zdd�Zejdd��Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zejd-ejkd.�d/d0��Z d1d2�Z!d3d4�Z"eje#j$d5kd6�d7d8��Z%eje#j$d5kd6�d9d:��Z&d;d<�Z'd=d>�Z(d?d@�Z)dAdB�Z*dCdD�Z+eje,�dE�dFdG��Z-dHdI�Z.ej/dJdK�dLdM��Z0dNS)O�BasicSocketTestscCstjtjtjtjtjtjr3tjtjdkrItj	|j
tjddh�|j
tjddh�dS)NrrTF)rr)r�	CERT_NONE�
CERT_OPTIONAL�
CERT_REQUIREDZOP_CIPHER_SERVER_PREFERENCE�OP_SINGLE_DH_USE�HAS_ECDH�OP_SINGLE_ECDH_USEr �OP_NO_COMPRESSION�assertIn�HAS_SNI)�selfrrr�test_constants�s	zBasicSocketTests.test_constantscCsEtj}|jt|�d�tj|�}|j|j|�dS)Nz_SSLMethod.PROTOCOL_TLS)r�PROTOCOL_TLS�assertEqual�strr9�assertIs�protocol)rP�proto�ctxrrr�test_str_for_enums�s	z#BasicSocketTests.test_str_for_enumscCsgtj�}tjr;tjjd||r0dp3df�tjd�\}}|jt	|�d�|j||dk�|r�tj
d�}|jt	|�d�n|jtjtj
d�|jt
tj
d
�|jt
tjd�ttd�r-|jttjd�|jttjdd�tjd	d
�tjdd
�tjtd�d
�dS)Nz
 RAND_status is %d (%s)
zsufficient randomnesszinsufficient randomness�rr-�RAND_egd�foozthis is a random stringg�R@sthis is a random bytes objects!this is a random bytearray object���r])r�RAND_statusrrrrr�RAND_pseudo_bytesrS�lenZ
RAND_bytes�assertRaisesr:�
ValueErrorrB�	TypeErrorr[ZRAND_add�	bytearray)rP�v�dataZis_cryptographicrrr�test_random�s(	zBasicSocketTests.test_random�posixzrequires posixcCstj�}|s|jd�tj�\}}tj�}|dkr�yWtj|�tjd�d}|jt	|�d�tj
||�tj|�Wntk
r�tjd�Yq{Xtjd�n�tj|�|j
tj|�tj|d�\}}|j|d�tj|d�}|jt	|�d�tjd�d}|jt	|�d�|j||�dS)Nz*OpenSSL's PRNG has insufficient randomnessrrZr)rr^�failr�pipe�fork�closer_rSr`r�
BaseException�_exit�
addCleanup�waitpid�read�assertNotEqual)rP�statusZrfdZwfd�pidZchild_random�_Z
parent_randomrrr�test_random_fork�s0



z!BasicSocketTests.test_random_forkcCsPtjjt�}tjr<tjjdt	j
|�d�|j|dd$�|j|dtd��|j|d
td��|j|dd�|j|dd-�|j|dd/�tjjt
�}tjr�tjjdt	j
|�d�|j|dd2�|j|dd3�|j|dd4�|j|dd5�dS)6N�
�issuer�countryName�XY�localityName�Castle Anthrax�organizationName�Python Software Foundation�
commonName�	localhost�notAfterzOct  5 23:01:56 2020 GMT�	notBeforezOct  8 23:01:56 2010 GMT�serialNumberZD7C7381919AFC24E�subject�subjectAltName�DNS�projects.developer.nokia.com�projects.forum.nokia.comZOCSP�http://ocsp.verisign.comZ	caIssuers�0http://SVRIntl-G3-aia.verisign.com/SVRIntlG3.cer�crlDistributionPoints�0http://SVRIntl-G3-crl.verisign.com/SVRIntlG3.crl�ryrz�r��r{r|�r��r}r~�r��rr��r�)r�r�r�r��ryrz�r��r{r|�r��r}r~�r��rr��r�)r�r�r�r��r�r�)r��r�r��r�r�)r�r�)r�)r�)r�)r�_ssl�_test_decode_cert�CERTFILErrrrr�pprint�pformatrSr4�	NOKIACERT)rP�prrr�test_parse_cert�s8	!

	!


z BasicSocketTests.test_parse_certcCsztjjt�}tjr<tjjdt	j
|�d�|j|ddddd	d
ddd
dddddi�dS)Nrwrxry�UKr�cody-car�zJun 14 18:00:58 2028 GMTr�zJun 18 18:00:58 2018 GMTr�Z02r��#codenomicon-vm-2.test.lal.cisco.comr�r��version��ryr��r��rr��r�)r�r��ryr��r��rr��r�)r�r��r�r�)r�)rr�r��TALOS_INVALID_CRLDPrrrrrr�r�rS)rPr�rrr�test_parse_cert_CVE_2019_5010s 	!z.BasicSocketTests.test_parse_cert_CVE_2019_5010cCs�tjjt�}tjr<tjjdt	j
|�d�d.}|j|d|�|j|d|�tjd/kr�d5}nd;}|j|d|�dS)<Nrwry�US�stateOrProvinceName�Oregonr{�	Beavertonr}�Python Software Foundation�organizationalUnitName�Python Core Developmentr�null.python.orgexample.org�emailAddress�python-dev@python.orgr�rxrrrr��altnull.python.orgexample.com�email� null@python.orguser@example.org�URI�)http://null.python.orghttp://example.org�
IP Address�	192.0.2.1�2001:DB8:0:0:0:0:0:1
�	<invalid>r��ryr��r��r�r��r��r{r��r��r}r��r��r�r��r��rr��r��r�r��r�)r�r�r�r�r�r�r�)rrr�r�r��r�r��r�r��r�r��r�r�)r�r�r�r�r��r�r��r�r��r�r��r�r��r�r�)r�r�r�r�r�)
rr�r��NULLBYTECERTrrrrrr�r�rSr)rPr�r�Zsanrrr�test_parse_cert_CVE_2013_4238s0	!	z.BasicSocketTests.test_parse_cert_CVE_2013_4238c
Cs*tjjt�}|j|dd,�dS)-Nr�r��allsans�	othername�
<unsupported>r��user@example.org�www.example.org�DirNameryrzr{�Castle Anthraxr}�Python Software Foundationr�dirname exampler��https://www.python.org/�
IP Address�	127.0.0.1�0:0:0:0:0:0:0:1
�
Registered ID�	1.2.3.4.5�r�r��r�r��r�r��r�r��r�r��ryrz�r��r{r��r��r}r��r��rr��r��r�r�r�r�r�r�r�r��r�r��r�r��r�r�)
r�r�r�r�r�rrrrr)rr�r��
ALLSANFILErS)rPr�rrr�test_parse_all_sans3s 
z$BasicSocketTests.test_parse_all_sansc
Cs�ttd��}|j�}WdQRXtj|�}tj|�}tj|�}|j||�|jtjd�s�|j	d|�|j
dtjd�s�|j	d|�dS)N�rrwz-DER-to-PEM didn't include correct header:
%r
z-DER-to-PEM didn't include correct footer:
%r
)�open�
CAFILE_CACERTrqr�PEM_cert_to_DER_certZDER_cert_to_PEM_certrS�
startswithZ
PEM_HEADERri�endswithZ
PEM_FOOTER)rPrA�pem�d1Zp2�d2rrr�test_DER_to_PEMHsz BasicSocketTests.test_DER_to_PEMc	Cs�tj}tj}tj}|j|t�|j|t�|j|t�|j|d�|j	|d�|\}}}}}|j|d�|j	|d�|j|d�|j	|d�|j|d�|j	|d�|j|d�|j
|d�|j|d�|j
|d�trZ|j|j
dj|��||t|�f�n7|j|j
d	j|||��||t|�f�dS)
Ni�i0rr���?rz
LibreSSL {:d}zOpenSSL {:d}.{:d}.{:d})rZOPENSSL_VERSION_NUMBERr �OPENSSL_VERSION�assertIsInstance�int�tuplerTZassertGreaterEqual�
assertLessZassertLessEqual�IS_LIBRESSL�
assertTruer
�format�hex)	rP�n�t�s�major�minorZfixZpatchrsrrr�test_openssl_versionTs0			!z%BasicSocketTests.test_openssl_versionc
Csgtjtj�}tj|�}tj|�}tjdtf��~|j	|�d�WdQRXdS)Nr8)
�socket�AF_INETr�wrap_socket�weakref�refrZcheck_warnings�ResourceWarningrS)rPr �ss�wrrrr�
test_refcyclesszBasicSocketTests.test_refcyclec
Cs�tjtj�}tj|���}|jt|jd�|jt|jtd��|jt|j	d�|jt|j
td�d�|jt|jd�|jt|jdd�WdQRXdS)Nr�x�0.0.0.0r)r.r)
r$r%rr&ra�OSError�recv�	recv_intord�recvfrom�
recvfrom_into�send�sendto)rPr r*rrr�test_wrapped_unconnected~sz)BasicSocketTests.test_wrapped_unconnectedcCscx\dD]T}tjtj�}|j|�tj|��}|j||j��WdQRXqWdS)N��@)Nr7r8)r$r%�
settimeoutrr&rS�
gettimeout)rP�timeoutr r*rrr�test_timeout�s


zBasicSocketTests.test_timeoutc7Cs�tj�}|jtdtj|dt�|jtdtj|dd�|jtdtj|dddd�tj|dddt��&}|jtd|jtd	f�WdQRX|jt	��0}tj��}tj|dt
�WdQRXWdQRX|j|jj
t
j�|jt	��6}tj�� }tj|dtdt
�WdQRXWdQRX|j|jj
t
j�|jt	��6}tj�� }tj|dt
dt
�WdQRXWdQRX|j|jj
t
j�dS)
Nzcertfile must be specified�keyfilez5certfile must be specified for server-side operations�server_sideT�certfiler8z!can't connect in server-side modei�)r$�assertRaisesRegexrbrr&r��connect�HOSTrar/�NONEXISTINGCERTrS�	exception�errno�ENOENT)rP�sockr �cmrrr�test_errors�s6			!zBasicSocketTests.test_errorsc
Cs�tjjtjjt�p!tj|�}tj�}|j|j�|j	t
j��!t
j|d|dt
j
�WdQRXdS)Nr?�ssl_version)rrrrr	�curdirr$rorlrarr:r&�PROTOCOL_TLSv1)rPr?rGrrr�
bad_cert_test�s!	zBasicSocketTests.bad_cert_testcCs|jd�dS)Nznullcert.pem)rM)rPrrr�test_empty_cert�sz BasicSocketTests.test_empty_certcCs|jd�dS)Nzbadcert.pem)rM)rPrrr�test_malformed_cert�sz$BasicSocketTests.test_malformed_certcCs|jd�dS)Nz
badkey.pem)rM)rPrrr�test_malformed_key�sz#BasicSocketTests.test_malformed_keycsdd�}�fdd�}ddQi}||d�||d�||d	�||d
�||d�||d�ddTi}||d�||d�||d�||d�||d�ddWi}||d�||d�||d�||d�||d�ddZi}||d�||d�||d�dd]i}||d�||d�||d�||d�dd`i}||d�||d�||d�djd�jd �}dd|fffi}|||�ddci}|||�ddfi}|||�d#jd�jd �}dd|fffi}||d$jd�jd ��||d%jd�jd ��||d&jd�jd ��||d'jd�jd ��d(d)ddid+dmi}||d-�||d.�||d0�||d*�d(d1ddxi}||d:�||d;�||d5�dd{d+di}||d=�||d>�||d?�||d@�dd�d+d�i}||dC�||dD�||dE�||d@�d(d1dd�i}||d:�d(dFdd�d+d�i}||d:�d(dFdd�d+d�i}||dH��jttjdd��jttjid�dd�i}||dJ�dd�i}||dJ�dd�i}�jtj��}tj|dM�WdQRX�jdNt|j	��dS)�NcSstj||�dS)N)r�match_hostname)�cert�hostnamerrr�ok�sz0BasicSocketTests.test_match_hostname.<locals>.okcs �jtjtj||�dS)N)rar�CertificateErrorrQ)rRrS)rPrrri�sz2BasicSocketTests.test_match_hostname.<locals>.failr�r�example.comzExAmple.cOmzwww.example.comz.example.comzexample.orgZexampleXcom�*.a.comz	foo.a.comz
bar.foo.a.comza.comzXa.comz.a.com�f*.comzfoo.comzf.comzbar.comzbar.foo.com�null.python.orgexample.orgznull.python.org�	*.*.a.com�a.*.comz	a.foo.comza..comupüthon.python.org�idna�ascii�
x*.python.org�xn--p*.python.orguwww*.pythön.orguwww.pythön.orguwww1.pythön.orguftp.pythön.orgupythön.orgr�zJun 26 21:41:46 2011 GMT�linuxfrz.orgr�r��linuxfr.org�linuxfr.comr��
<unsupported>zDec 18 23:59:59 2011 GMTryr�r��
Californiar{�
Mountain Viewr}�
Google Inc�mail.google.comz	gmail.com�
IP Address�10.11.12.13�14.15.16.17z14.15.16.18zexample.net�2001:0:0:0:0:0:0:CAFE
�2003:0:0:0:0:0:0:BABA
z
2001::cafez
2003::babaz
2003::bebezDec 18 23:59:59 2099 GMT�blablaz
google.com�a*b.comzaxxb.com�a*b.co*�a*b*.comzaxxbxxc.comztoo many wildcards�rrV�rq)rr�rrW�rs)rt�rrX�ru)rv�rrY�rw)rx�rrZ�ry)rz�rr[�r{)r|�rr^�r})r~�rr_�r)r��rr`�r�)r��r�ra�r�rb�r�rc)r�r�r��ryr��r��r�rd�r��r{re�r��r}rf�r��rrg�r�)r�r�r�r�r��rrV�r�)r��r�rV�rhri�rhrj)r�r�r��rrV�r�)r��r�rV�rhrk�rhrl)r�r�r��ryr��r��r�rd�r��r{re�r��r}rf�r�)r�r�r�r��ryr��r��r�rd�r��r{re�r��rrg�r�)r�r�r�r��r�rm)r��ryr��r��r�rd�r��r{re�r��r}rf�r�)r�r�r�r��r�rm)r��rrn�r�)r��rro�r�)r��rrp�r�)r�)
�encode�decoderarbrrQrUrNrTrD)rPrTrirRr\rHr)rPr�test_match_hostname�s�















	












	



	


	



	



	




z$BasicSocketTests.test_match_hostnamecCsKtjtj�}tj��&}|jt|j|ddd�WdQRXdS)NT�server_hostnamez
some.hostname)rr9�PROTOCOL_SSLv23r$rarbr&)rPrXrGrrr�test_server_sidedsz!BasicSocketTests.test_server_sidecCs�tjtj�}|jd�|j�tjtj�}|j|j��tj|dd��+}|jt	��|j
d�WdQRXWdQRX|j�dS)N�	127.0.0.1r�do_handshake_on_connectFzunknown-type)r�r)r$r%�bind�listenrA�getsocknamerr&rarb�get_channel_bindingrl)rPr �cr*rrr�test_unknown_channel_bindingks

z-BasicSocketTests.test_unknown_channel_bindingz
tls-uniquez*'tls-unique' channel binding not availablecCs�tjtj�}tj|��}|j|jd��WdQRXtjtj�}tj|dddt��}|j|jd��WdQRXdS)Nz
tls-uniquer>Tr?)r$r%rr&�assertIsNoner�r�)rPr r*rrr�test_tls_unique_channel_bindingwsz0BasicSocketTests.test_tls_unique_channel_bindingcCsttjtjtj��}t|�}|jt��}d}tj�WdQRX|j	|t
|jjd��dS)Nr)
rr&r$r%�reprZassertWarnsr)rZ
gc_collectrNrT�warningr>)rPr*r	rHrrr�test_dealloc_warn�sz"BasicSocketTests.test_dealloc_warnc
Cs�tj�}|jt|�d�|j|tj�tj��M}t|d<t	|d<tj�}|j|j
t	�|j|jt�WdQRXdS)N��SSL_CERT_DIR�
SSL_CERT_FILE)rZget_default_verify_pathsrSr`rZDefaultVerifyPathsr�EnvironmentVarGuard�CAPATHr��cafiler)rP�paths�envrrr�test_get_default_verify_paths�s

z.BasicSocketTests.test_get_default_verify_paths�win32zWindows specificc	CsF|jtjd��|jtjd��|jttj�|jttjd�t�}x�dD]�}tj|�}|j|t�x�|D]�}|j|t	�|j
t|�d�|\}}}|j|t�|j
|ddh�|j|ttf�t|t�r�|j|�q�WqeWd}|j
||�dS)	N�CA�ROOTr8r��x509_asn�
pkcs_7_asnz1.3.6.1.5.5.7.3.1)r�r�)rrZenum_certificatesrarc�WindowsError�setr�listrrSr`�bytesrN�bool�
isinstance�update)	rPZ
trust_oidsZ	storename�store�elementrR�encZtrust�
serverAuthrrr�test_enum_certificates�s&	

z'BasicSocketTests.test_enum_certificatescCs�|jtjd��|jttj�|jttjd�tjd�}|j|t�xb|D]Z}|j|t�|j	t
|�d�|j|dt�|j|dddh�qeWdS)Nr�r8�rrr�r�)
rrZ	enum_crlsrarcr�rr�rrSr`r�rN)rPZcrlsr�rrr�test_enum_crls�s
zBasicSocketTests.test_enum_crlscCsGd}tjd�}|j||�|j|jd�|j|jd�|j|jd�|j|jd�|j|tj�|jt	tjd�tjj
d�}|j||�|j|tj�|jt	tjj
d�|jt	d��tjj
d�WdQRXx�td�D]�}ytjj
|�}Wnt	k
rOYqX|j|jt
�|j|jt�|j|jt�|j|jttd�f�qWtjjd�}|j||�|j|tj�|jtjjd�|�|jtjjd�|�|jt	d	��tjjd
�WdQRXdS)
N�r��TLS Web Server Authentication�1.3.6.1.5.5.7.3.1rzunknown NID 100000i��i�zunknown object 'serverauth'Z
serverauth)r�r�r�r����)r�_ASN1ObjectrS�nid�	shortnameZlongname�oidrrarbZfromnidr@�rangerrT�typeZfromname)rP�expected�val�i�objrrr�test_asn1object�sB
#z BasicSocketTests.test_asn1objectcCstjd�}|jtjjtj�|jtjj|�|jtjjjd�|jtjjjd�|jtjjjd�tjd�}|jtjj	tj�|jtjj	|�|jtjj	jd�|jtjj	jd�|jtjj	jd�dS)Nz1.3.6.1.5.5.7.3.1r�r�z1.3.6.1.5.5.7.3.2�Z
clientAuth)
rr�r�Purpose�SERVER_AUTHrSr�r�r��CLIENT_AUTH)rPr�rrr�test_purpose_enum�sz"BasicSocketTests.test_purpose_enumcCs�tjtjtj�}|j|j�|jt��}tj|dtj	�WdQRX|j
t|j�d�tj
tj�}|jt��}|j|�WdQRX|j
t|j�d�dS)N�	cert_reqsz!only stream sockets are supported)r$r%�
SOCK_DGRAMrorlra�NotImplementedErrorrr&rGrSrTrDr9r�)rPr ZcxrXrrr�test_unsupported_dtls�sz&BasicSocketTests.test_unsupported_dtlscCs|jtj|�|�dS)N)rSr�cert_time_to_seconds)rP�
timestringZ	timestamprrr�cert_time_okszBasicSocketTests.cert_time_okc	Cs(|jt��tj|�WdQRXdS)N)rarbrr)rPrrrr�cert_time_failszBasicSocketTests.cert_time_failz)local time needs to be different from UTCcCs$|jdd�|jdd�dS)NzMay  9 00:00:00 2007 GMTg�C��AzJan  5 09:34:43 2018 GMTg��ѓ�A)r)rPrrr�"test_cert_time_to_seconds_timezone	sz3BasicSocketTests.test_cert_time_to_seconds_timezonecCs*d}d}|j||�|jtjd|�|�|jd|�|jd|�|jd�|jd�|jd�|jd	�|jd
�|jd�|jd�d
}|jd|�|jd|�|jdd�|jdd�|jdd�|jd�|jdd�dS)NzJan  5 09:34:43 2018 GMTg��ѓ�Ar2zJan 05 09:34:43 2018 GMTzJaN  5 09:34:43 2018 GmTzJan  5 09:34 2018 GMTzJan  5 09:34:43 2018zJan  5 09:34:43 2018 UTCzJan 35 09:34:43 2018 GMTzJon  5 09:34:43 2018 GMTzJan  5 24:00:00 2018 GMTzJan  5 09:60:43 2018 GMTg�W�AzDec 31 23:59:60 2008 GMTzJan  1 00:00:00 2009 GMTzJan  5 09:34:59 2018 GMTi�FOZzJan  5 09:34:60 2018 GMTi�FOZzJan  5 09:34:61 2018 GMTi�FOZzJan  5 09:34:62 2018 GMTzDec 31 23:59:59 9999 GMTg�� �MB)rrSrrr)rPr�tsZ
newyear_tsrrr�test_cert_time_to_secondss*







z*BasicSocketTests.test_cert_time_to_seconds�LC_ALLr8cCsVdd�}|�j�dkr.|jd�|jdd�|j|�d�dS)NcSstjdd	�S)
Nz%brr�r�r+r-r�r)	rr�r�r+r-r�rrr)r#r1rrrr�local_february_name8szNBasicSocketTests.test_cert_time_to_seconds_locale.<locals>.local_february_nameZfebz>locale-specific month name needs to be different from C localezFeb  9 00:00:00 2007 GMTg`�r�Az  9 00:00:00 2007 GMT)�lower�skipTestrr)rPr	rrr� test_cert_time_to_seconds_locale4s

z1BasicSocketTests.test_cert_time_to_seconds_localeN)1�__name__�
__module__�__qualname__rQrYrgr=�
skipUnlessrr
rvr�r�r�rrr#rZcpython_onlyr,r6r<rIrMrNrOrPr�r�r�r�CHANNEL_BINDING_TYPESr�r�r�rr;r�r�r�r�rrrr)rrZrun_with_localerrrrrrF�sH
' (	�'''#rFc@s�eZdZedd��Zedd��Zdd�Zeeje	d�dd	���Z
d
d�Zeje
�d�d
d��Zdd�Zdd�Zdd�Zdd�Zedd��Zdd�Zejejd�dd��Zedd��Zed d!��Zd"d#�Zd$d%�Zd&d'�Zejejd(kd)�eje d*�d+d,���Z!ejejd(kd-�d.d/��Z"d0d1�Z#d2d3�Z$d4d5�Z%d6S)7�ContextTestscCspxtD]}tj|�qWtj�}|j|jtj�|jttjd�|jttjd�dS)Nr�*r�)�	PROTOCOLSrr9rSrVrRrarb)rPrVrXrrr�test_constructorFs
zContextTests.test_constructorcCs7x0tD](}tj|�}|j|j|�qWdS)N)rrr9rSrV)rPrWrXrrr�
test_protocolOs
zContextTests.test_protocolc	CsZtjtj�}|jd�|jd�|jtjd��|jd�WdQRXdS)N�ALL�DEFAULTzNo cipher can be selectedz^$:,;?*'dorothyx)rr9rL�set_ciphersr@r:)rPrXrrr�test_ciphersUs


zContextTests.test_ciphersz bpo-36576: fail on OpenSSL 1.1.1c	Cstjtj�}tjtjBtjB}trLtjdkrL|tjO}|j	||j
�|j
tjO_
|j	|tjB|j
�t�r�|j
tj@|_
|j	||j
�d|_
|j	d|j
tj@�n |j
t��d|_
WdQRXdS)Nrr)rrr)rr9rL�OP_ALL�OP_NO_SSLv2�OP_NO_SSLv3rr rMrS�options�OP_NO_TLSv1rrarb)rPrX�defaultrrr�test_options\s
		zContextTests.test_optionscCs�tjtj�}|j|jtj�tj|_|j|jtj�tj|_|j|jtj�tj|_|j|jtj�|jt	��d|_WdQRX|jt
��d|_WdQRXdS)Nr)rr9rLrS�verify_moderGrHrIrarcrb)rPrXrrr�test_verify_modeqszContextTests.test_verify_modez!verify_flags need OpenSSL > 0.9.8c	Cs�tjtj�}ttdd�}|j|jtj|B�tj|_|j|jtj�tj|_|j|jtj�tj|_|j|jtj�tjtj	B|_|j|jtjtj	B�|j
t��d|_WdQRXdS)N�VERIFY_X509_TRUSTED_FIRSTr)rr9rL�getattrrS�verify_flags�VERIFY_DEFAULT�VERIFY_CRL_CHECK_LEAFZVERIFY_CRL_CHECK_CHAINZVERIFY_X509_STRICTrarc)rPrX�tfrrr�test_verify_flags�szContextTests.test_verify_flagscfCs�tjtj�}|jtdd�|jtdt�|jt|jdt�|jt��}|jt�WdQRX|j	|j
jtj�|j
tjd��|jt�WdQRX|j
tjd��|jt�WdQRXtjtj�}|jtt�|jdtdt�|jdtdt�|j
tjd��|jt�WdQRX|j
tjd��|jt�WdQRX|j
tjd��|jdtdt�WdQRXtjtj�}|j
tjd��|jtt�WdQRX|jtdt�|jtdtj��|jtdttj���|jttt�|jtttj��|jttttj���|j
td��|jtdd�WdQRX|jtj��|jtdd�WdQRX|j
td	��|jtdd
d�WdQRXdd
�}dd�}dd�}dd�}dd�}dd�}dd�}	Gdd�d�}
|jtd|�|jtd|�|jtd|�|jtd|
��|jtd|
�j�|jtj��|jtd|�WdQRX|j
td	��|jtd|�WdQRX|j
td��|jtd|�WdQRX|j
td��|jtd|	�WdQRX|jtd|	�dS)Nr=zPEM libr?zkey values mismatchZpasswordzshould be a stringT�badpasszcannot be longer�ai�cSstS)N)�KEY_PASSWORDrrrr�getpass_unicode�sz:ContextTests.test_load_cert_chain.<locals>.getpass_unicodecSs
tj�S)N)r-r�rrrr�
getpass_bytes�sz8ContextTests.test_load_cert_chain.<locals>.getpass_bytescSsttj��S)N)rdr-r�rrrr�getpass_bytearray�sz<ContextTests.test_load_cert_chain.<locals>.getpass_bytearraycSsdS)Nr+rrrrr�getpass_badpass�sz:ContextTests.test_load_cert_chain.<locals>.getpass_badpasscSsddS)Nr,iirrrrr�getpass_huge�sz7ContextTests.test_load_cert_chain.<locals>.getpass_hugecSsdS)Nrrrrrr�getpass_bad_type�sz;ContextTests.test_load_cert_chain.<locals>.getpass_bad_typecSstd��dS)Nz
getpass error)�	Exceptionrrrr�getpass_exception�sz<ContextTests.test_load_cert_chain.<locals>.getpass_exceptionc@s(eZdZdd�Zdd�ZdS)z:ContextTests.test_load_cert_chain.<locals>.GetPassCallablecSstS)N)r-)rPrrr�__call__�szCContextTests.test_load_cert_chain.<locals>.GetPassCallable.__call__cSstS)N)r-)rPrrr�getpass�szBContextTests.test_load_cert_chain.<locals>.GetPassCallable.getpassN)r
rrr6r7rrrr�GetPassCallable�sr8zmust return a stringz
getpass error)rr9rL�load_cert_chainr�rarcr/rCrSrDrErFr@r:�BADCERT�	EMPTYCERT�ONLYCERT�ONLYKEY�BYTES_ONLYCERT�
BYTES_ONLYKEYr�CERTFILE_PROTECTEDr-r�rd�ONLYKEY_PROTECTEDrbr7r4)rPrXrHr.r/r0r1r2r3r5r8rrr�test_load_cert_chain�sz
z!ContextTests.test_load_cert_chaincCs0tjtj�}|jt�|jdtdd�|jt�|jdtdd�|jt|j�|jt|jddd�|jt��}|jt	�WdQRX|j
|jjtj
�|jtjd��|jt�WdQRX|jtt�|jtdt�|jt|jdd�dS)Nr�rzPEM libT)rr9rL�load_verify_locationsr��BYTES_CERTFILErarcr/rCrSrDrErFr@r:r:r��BYTES_CAPATH)rPrXrHrrr�test_load_verify_locations�s

z'ContextTests.test_load_verify_locationscCs
tt��}|j�}WdQRXtj|�}tt��}|j�}WdQRXtj|�}tjtj�}|j|j	�dd�|j
d|�|j|j	�dd�|j
d|�|j|j	�dd�|j
d|�|j|j	�dd�tjtj�}dj||f�}|j
d|�|j|j	�dd�tjtj�}d|d|d	|d
g}|j
ddj|��|j|j	�dd�tjtj�}|j
d|�|j
d|�|j|j	�dd�|j
d|�|j|j	�dd�tjtj�}dj||f�}|j
d|�|j|j	�dd�tjtj�}|jt
|j
dt�|jtjd��|j
dd
�WdQRX|jtjd��|j
dd�WdQRXdS)N�x509_car�cadatarr�rw�head�otherZagain�tail�z
no start line�brokenznot enough datasbroken)r
rrqrr�CAFILE_NEURONIOr9rLrS�cert_store_statsrCrrarc�objectr@r:)rPrAZ
cacert_pemZ
cacert_derZneuronio_pemZneuronio_derrXZcombinedrrr�test_load_verify_cadata�sNz$ContextTests.test_load_verify_cadatacCs�tjtj�}|jt�tjdkr;|jt�|jt	|j�|jt	|jd�|jt
��}|jt�WdQRX|j|j
jtj�|jtj��}|jt�WdQRXdS)N�nt)rr9rL�load_dh_params�DHFILErr
�BYTES_DHFILErarc�FileNotFoundErrorrCrSrDrErFr:r�)rPrXrHrrr�test_load_dh_params4s

z ContextTests.test_load_dh_paramscCs|xutD]m}tj|�}|j|j�ddddddddddddddd	dd
dddddi�qWdS)
NZnumberrrAZconnect_goodZconnect_renegotiate�acceptZaccept_goodZaccept_renegotiate�hits�missesZtimeoutsZ
cache_full)rrr9rSZ
session_stats)rPrWrXrrr�test_session_statsAs
zContextTests.test_session_statscCs tjtj�}|j�dS)N)rr9rLZset_default_verify_paths)rPrXrrr�test_set_default_verify_pathsSsz*ContextTests.test_set_default_verify_pathsz#ECDH disabled on this OpenSSL buildcCs�tjtj�}|jd�|jd�|jt|j�|jt|jd�|jt|jd�|jt|jd�dS)NZ
prime256v1s
prime256v1r\sfoo)rr9rLZset_ecdh_curverarcrb)rPrXrrr�test_set_ecdh_curveYs

z ContextTests.test_set_ecdh_curvecCs�tjtj�}|jt|j�|jt|jd�|jt|jd�|jt|j|�dd�}|jd�|j|�dS)Nr+r8cSsdS)Nr)rG�
servernamerXrrr�
dummycallbackmsz5ContextTests.test_sni_callback.<locals>.dummycallback)rr9rLrarc�set_servername_callback)rPrXr_rrr�test_sni_callbackcs
zContextTests.test_sni_callbackcCsdtjtj�}|dd�}|j|�tj|�}~~tj�|j|�d�dS)NcSsdS)Nr)rGr^rX�cyclerrrr_wsz>ContextTests.test_sni_callback_refcycle.<locals>.dummycallback)	rr9rLr`r'r(�gc�collectrU)rPrXr_r+rrr�test_sni_callback_refcyclers

z'ContextTests.test_sni_callback_refcyclecCs�tjtj�}|j|j�ddddddi�|jt�|j|j�ddddddi�|jt�|j|j�ddddddi�|jt�|j|j�ddddddi�dS)NrGr�crl�x509rr�)	rr9rLrSrOr9r�rCr)rPrXrrr�test_cert_store_statss


z"ContextTests.test_cert_store_statscCs�tjtj�}|j|j�g�|jt�|j|j�g�|jt�|j|j�ddd
td�dtd
�dddddd(ddig�t	t��}|j
�}WdQRXtj|�}|j|jd�|g�dS))Nrxr}�Root CAr��http://www.cacert.orgr�CA Cert Signing Authorityr��support@cacert.orgr�zMar 29 12:29:49 2033 GMTr�zMar 30 12:29:49 2003 GMTr�Z00r��!https://www.cacert.org/revoke.crlr�r�r�T�r}ri�rn�r�rj�rp�rrk�rr�r�rl�rt)rorqrsru)rm�r}ri�rv�r�rj�rx�rrk�rz�r�rl�r|)rwryr{r})rr9rLrS�get_ca_certsrCr�rr4r
rqr)rPrXrAr�derrrr�test_get_ca_certs�s.

zContextTests.test_get_ca_certscCs�tjtj�}|j�tjtj�}|jtjj�|j�tjtj�}|jtjj�tjtj�}|jt|jd�|jt|jd�dS)Nr�)	rr9rL�load_default_certsr�r�r�rarc)rPrXrrr�test_load_default_certs�s

z$ContextTests.test_load_default_certsr�znot-Windows specificz!LibreSSL doesn't support env varscCsrtjtj�}tj��M}t|d<t|d<|j�|j|j	�ddddddi�WdQRXdS)Nr�r�rfrrgrrG)
rr9rLrr�r�r�r�rSrO)rPrXr�rrr�test_load_default_certs_env�s


z(ContextTests.test_load_default_certs_envzWindows specificcCs�tjtj�}|j�|j�}tjtj�}tj��I}t|d<t|d<|j�|dd7<|j	|j�|�WdQRXdS)Nr�r�rgr)
rr9rLr�rOrr�r�r�rS)rPrX�statsr�rrr�#test_load_default_certs_env_windows�s



z0ContextTests.test_load_default_certs_env_windowscCs;tj�}|j|jtj�|j|jtj�|j|j�|j|j	tj
@tj
�|j|j	ttdd�@ttdd��tt
��}|j�}WdQRXtjdt
dtd|�}|j|jtj�|j|jtj�|j|j	tj
@tj
�|j|j	ttdd�@ttdd��tjtjj�}|j|jtj�|j|jtj�|j|j	tj
@tj
�|j|j	ttdd�@ttdd��|j|j	ttdd�@ttdd��|j|j	ttdd�@ttdd��dS)NrMrr�rrHrJrL)r�create_default_contextrSrVr�r"rIr�check_hostnamerrr%r
�
SIGNING_CArqr�r�r�rG)rPrXrArHrrr�test_create_default_context�s>	z(ContextTests.test_create_default_contextcCs�tj�}|j|jtj�|j|jtj�|j|j�|j|j	tj
@tj
�tjtj�}|j|jtj�|j|jtj�|j|j	tj
@tj
�tjtjdtjdd�}|j|jtj�|j|jtj�|j
|j�|j|j	tj
@tj
�tjdtjj�}|j|jtj�|j|jtj�|j|j	tj
@tj
�dS)Nr�r�TZpurpose)rZ_create_stdlib_contextrSrVr�r"rG�assertFalser�rrrLrIrr�r�)rPrXrrr�test__create_stdlib_context�s(		z(ContextTests.test__create_stdlib_contextcCs�tjtj�}|j|j�|jt��d|_WdQRXtj|_|j|j�d|_|j	|j�tj
|_d|_|j	|j�|jt��tj|_WdQRXd|_|j|j�dS)NTF)rr9rLr�r�rarbrIr"rrHrG)rPrXrrr�test_check_hostnames			z ContextTests.test_check_hostnameN)&r
rrrErrrr=�skipIf�IS_OPENSSL_1_1_1r!r#rr"r*rBrFrQrWr[r\rrKr]�	needs_snirarerhr�r�rr;rr�r�r�r�r�rrrrrDs4	!S:
!

!	'(rc@s4eZdZdd�Zdd�Zdd�ZdS)�
SSLErrorTestscCsztjdd�}|jt|�d�|j|jd�tjdd�}|jt|�d�|j|jd�dS)Nrr\)rr:rSrTrEZSSLZeroReturnError)rP�errr�test_str*szSSLErrorTests.test_strc
Cs�tjtj�}|jtj��}|jt�WdQRX|j|jj	d�|j|jj
d�t|j�}|j|j
d�|�dS)NZPEMZ
NO_START_LINEz"[PEM: NO_START_LINE] no start line)rr9rLrar:rSr�rSrDZlibrary�reasonrTrr
)rPrXrHr rrr�test_lib_reason4szSSLErrorTests.test_lib_reasoncCs�tjtj�}tj���}|jd�|j�tj�}|j|j��|jd�|j	|ddd��n}|j
tj��}|j�WdQRXt
|j�}|j|jd�|�|j|jjtj�WdQRXWdQRXdS)N�	127.0.0.1rFr�z%The operation did not complete (read))r�r)rr9rLr$r�r�rAr��setblockingr&ra�SSLWantReadError�do_handshakerTrDrr
rSrE�SSL_ERROR_WANT_READ)rPrXr r�rHrrr�
test_subclass>s


zSSLErrorTests.test_subclassN)r
rrr�r�r�rrrrr�(s

r�c@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�MemoryBIOTestscCs�tj�}|jd�|j|j�d�|j|j�d�|jd�|jd�|j|j�d�|j|j�d�|jd�|j|jd�d�|j|jd�d	�|j|jd�d�dS)
NsfoorLsbarsfoobarsbazr�sbar�z)r�	MemoryBIOrrSrq)rP�biorrr�test_read_writeSs



zMemoryBIOTests.test_read_writecCs�tj�}|j|j�|j|j�d�|j|j�|jd�|j|j�|j�|j|j�|j|jd�d�|j|j�|j|jd�d�|j|j�|j|j�d�|j|j�dS)NrLsfoor�sfor�o)	rr�r��eofrSrqr�	write_eofr)rPr�rrr�test_eofas

zMemoryBIOTests.test_eofcCs�tj�}|j|jd�|jd�|j|jd�x<td�D].}|jd�|j|jd|d�qLWx8td�D]*}|jd�|j|j|d�q�W|j�|j|jd�dS)Nrsfoor�rr-)rr�rS�pendingrr�rq)rPr�r�rrr�test_pendingqs



zMemoryBIOTests.test_pendingcCs�tj�}|jd�|j|j�d�|jtd��|j|j�d�|jtd��|j|j�d�dS)Nsfoosbarsbaz)rr�rrSrqrd�
memoryview)rPr�rrr�test_buffer_typess
z MemoryBIOTests.test_buffer_typescCshtj�}|jt|jd�|jt|jd�|jt|jd�|jt|jd�dS)Nr\Tr)rr�rarcr)rPr�rrr�test_error_types�s
zMemoryBIOTests.test_error_typesN)r
rrr�r�r�r�r�rrrrr�Qs
	r�c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
eje
jdkd�dd��Zdd�Zdd�Zdd�Zdd�Zdd�Zedd ��Zd!S)"�NetworkedTestscCs,tjt��tjtjtj�dtj�}z-|jtdf�|j	i|j
��Wd|j�Xtjtjtj�dtj�}|j
tjd|jtdf�|j�tjtjtj�dtjdt�}z*|jtdf�|j|j
��Wd|j�XWdQRXdS)Nr�i�zcertificate verify failed�ca_certs)r�transient_internet�REMOTE_HOSTrr&r$r%rGrArS�getpeercertrlrIr@r:�REMOTE_ROOT_CERTr)rPr rrr�test_connect�s&
		zNetworkedTests.test_connectcCs�tjt��stjtjtj�dtjdt�}z6|j	d|j
tdf��|j|j��Wd|j
�XWdQRXdS)Nr�r�ri�)rr�r�rr&r$r%rIr�rS�
connect_exrr�rl)rPr rrr�test_connect_ex�s		zNetworkedTests.test_connect_excCs>tjt��(tjtjtj�dtjdtdd�}z�|j	d�|j
tdf�}|j|dtj
tjf�tjg|ggd�xqy|j�PWq�tjk
r�tj|gggd�Yq�tjk
rtjg|ggd�Yq�Xq�W|j|j��Wd|j�XWdQRXdS)Nr�r�r�Fi�rg@)rr�r�rr&r$r%rIr�r�r�rNrEZEINPROGRESS�EWOULDBLOCK�selectr�r��SSLWantWriteErrorrr�rl)rPr �rcrrr�test_non_blocking_connect_ex�s(		

"z+NetworkedTests.test_non_blocking_connect_excCs�tjt���tjtjtj�dtjdtdd�}z[|j	d�|j
tdf�}|dkr~|jd�|j|t
jt
jf�Wd|j�XWdQRXdS)	Nr�r�r�FgH�����z>i�rz!REMOTE_HOST responded too quickly)rr�r�rr&r$r%rIr�r9r�rrNrE�EAGAINr�rl)rPr r�rrr�test_timeout_connect_ex�s		

 z&NetworkedTests.test_timeout_connect_excCs�tjt���tjtjtj�dtjdt�}zG|j	tdf�}t
jt
jt
j
t
jf}|j||�Wd|j�XWdQRXdS)Nr�r�i�)rr�r�rr&r$r%rIr�r�rEZECONNREFUSEDZEHOSTUNREACHZ	ETIMEDOUTr�rNrl)rPr r��errorsrrr�test_connect_ex_error�s		z$NetworkedTests.test_connect_ex_errorcCsztjt��dtjtj�}|jtjtj��}|j	tdf�z|j
i|j��Wd|j�X|jtjtj�dt�}|j	tdf�|j�tj
|_|jtjtj��}|jtjd|j	tdf�|j�|jt�|jtjtj��}|j	tdf�z|j�}|j|�Wd|j�XWdQRXdS)Ni�r�zcertificate verify failed)rr�r�rr9r�r&r$r%rArSr�rlrIr"r@r:rCr�r)rPrXr rRrrr�test_connect_with_context�s.	


z(NetworkedTests.test_connect_with_contextcCs)tjt��tjtj�}tj|_|jdt	�|j
tjtj��}|j
tdf�z|j�}|j|�Wd|j�Xtjtj�}tj|_|jdt�|j
tjtj��}|j
tdf�z|j�}|j|�Wd|j�XWdQRXdS)Nri�)rr�r�rr9r�rIr"rCr�r&r$r%rAr�rrlrE)rPrXr rRrrr�test_connect_capaths&z"NetworkedTests.test_connect_capathcCsJtt��}|j�}WdQRXtj|�}tjt��tjtj	�}tj
|_|jd|�|j
tjtj���3}|jtdf�|j�}|j|�WdQRXtjtj	�}tj
|_|jd|�|j
tjtj���3}|jtdf�|j�}|j|�WdQRXWdQRXdS)NrHi�)r
r�rqrrrr�r�r9r�rIr"rCr&r$r%rAr�r)rPrArrrXr rRrrr�test_connect_cadata4s$z"NetworkedTests.test_connect_cadatarRz*Can't use a socket as a file under WindowscCs�tjt���tjtjtj��}|jtdf�|j�}|j	�}|j
�tj|d�|j
�t
j�|jt��}tj|d�WdQRX|j|jjtj�WdQRXdS)Ni�r)rr�r�rr&r$r%rA�fileno�makefilerlrrqrcrdrar/rSrDrE�EBADF)rPr*�fdrAr�rrr�test_makefile_closeJs


z"NetworkedTests.test_makefile_closecCstjt���tjtj�}|jtdf�|jd�tj|dtj	dd�}d}xuy|d7}|j
�PWqitjk
r�tj|ggg�Yqitj
k
r�tjg|gg�YqiXqiW|j�tjrtjjd|�WdQRXdS)Ni�Fr�r�rrz9
Needed %d calls to do_handshake() to establish session.
)rr�r�r$r%rAr�rr&rGr�r�r�r�rlrrrr)rPr �countrrr�test_non_blocking_handshake^s(
		


	z*NetworkedTests.test_non_blocking_handshakecs?d�fdd�}|tdt�tjr;|dd�dS)Ncs,tj|��tj||f�}|sB�jd||f�ytj||fdt�}WnEtjk
r�}z"tjr�tj	j
d|�WYdd}~XnX�jd|||f�tj||fd|�}|s��jd||f�tjr!tj	j
d|||f�WdQRXdS)NzNo server certificate on %s:%s!r�z%s
z$Got server certificate %s for %s:%s!z&
Verified certificate for %s:%s is
%s
)rr�rZget_server_certificaterir�r:rrrr)�host�portrRr�x)rPrr�_test_get_server_certificateus"
	'		zPNetworkedTests.test_get_server_certificate.<locals>._test_get_server_certificatei�zipv6.google.com)r�r�rZIPV6_ENABLED)rPr�r)rPr�test_get_server_certificatets	z*NetworkedTests.test_get_server_certificatec)Cstdf}tj|d���tjtjtj�dtjdd��}|j|�WdQRXtjtjtj�dtjdd��}|j|�WdQRX|j	tj
d��Ltjtj��2}tj|dtjdd�}|j|�WdQRXWdQRXWdQRXdS)	Ni�rr��ciphersrrzNo cipher can be selectedz^$:,;?*'dorothyx)r�rr�rr&r$r%rGrAr@r:)rP�remoter rGrrrr�szNetworkedTests.test_cipherscCs2tjd
kr#|jdtj�tjs9|jd�d}tjjtjjt	�d	�}t
jd���tjtj
�}tj|_|j|�|jtjtj�d
d�}z]|j|�t
jrtjjd||j�f�tjjdtj|j���Wd|j�XWdQRXdS)NrrrrzSHA256 not available on %rzSNI needed for this test�sha256.tbs-internet.com�z
sha256.pemr�z
Cipher with %r is %r
zCertificate is:
%s
)rrrrr)r�r�)rr rrrOrrrrr	rr�r9rLrIr"rCr&r$r%rArrrr�cipherr�r�r�rl)rPr�Zsha256_certrXr rrr�test_algorithms�s(	
!
	
	zNetworkedTests.test_algorithmscCs�tjt���tjtj�}tj|_|jdt	�|j
|j�g�|jt
j
t
j��}|jtdf�z|j�}|j|�Wd|j�X|j
t|j��d�WdQRXdS)Nri�r)rr�r�rr9r�rIr"rCr�rSr~r&r$r%rAr�rrlr`)rPrXr rRrrr�test_get_ca_certs_capath�sz'NetworkedTests.test_get_ca_certs_capathcCs�tjt���tjtj�}tjtj�}tjtj�}|j	|��u}|j
tdf�|j|j|�|j|j
j|�||_|j|j|�|j|j
j|�WdQRXWdQRXdS)Ni�)rr�r�rr9rLr�r$r%r&rArU�context�_sslobj)rPZctx1Zctx2r r*rrr�test_context_setget�s	z"NetworkedTests.test_context_setgetN)r
rrr�r�r�r�r�r�r�r�r=r�rr
r�r�r�rr�r�r�r�rrrrr��s'r�c@s4eZdZdd�Zdd�Zdd�ZdS)�NetworkedBIOTestsc
Os"|jdd�}d}x�d}	|d7}y||�}
WnOtjk
r�}z,|jtjtjfkrq�|j}	WYdd}~XnX|j�}|j|�|	dkr�Pq|	tjkr|jd�}|r�|j	|�q|j
�qWtjrt
jj	d||jf�|
S)Nr;�
rri�z"Needed %d calls to complete %s().
)�getrr:rEr�ZSSL_ERROR_WANT_WRITErq�sendallr0rr�rrrrr
)
rPrG�incoming�outgoingr@r>r?r;r�rE�retr��bufrrr�ssl_io_loop�s2

	zNetworkedBIOTests.ssl_io_loopcCs�tjt���tjtj�}|jtdf�tj�}tj�}tjtj	�}tj
|_|jt
�d|_|j||dt�}|j|jj|�|j|j��|j|j��|jt|j�dtjkr
|j|jd��|j||||j�|j|j��|j|j��|j|j��dtjkr�|j|jd��y|j||||j�Wntj k
r�YnX|jtj!|j"d�|j#�WdQRXdS)Ni�TFz
tls-uniquesfoo)$rr�r�r$r%rArr�r9r�rIr"rCr�r��wrap_biorUr��ownerr�r��assertIsNotNone�shared_ciphersrarbr�rr�r�r�r�unwrapZSSLSyscallErrorr:rrl)rPrGr�r�rX�sslobjrrr�test_handshakes8
	z NetworkedBIOTests.test_handshakec
Cs!tjt��tjtj�}|jtdf�tj�}tj�}tjtj	�}tj
|_|j||d�}|j
||||j�d}|j
||||j|�|j
||||jd�}|j|dd�d�|j
||||j�|j�WdQRXdS)Ni�FsGET / HTTP/1.0

ir-sHTTP/)rr�r�r$r%rArr�r9r�rGr"r�r�r�rrqrSr�rl)rPrGr�r�rXr�Zreqr�rrr�test_read_write_data!sz&NetworkedBIOTests.test_read_write_dataN)r
rrr�r�r�rrrrr��s"!r�FT)�make_https_serverc
@s�eZdZGdd�dej�Zddddddddddddd�Zdd	�Zd
d�Zddd
�Z	dd�Z
dd�ZdS)�ThreadedEchoServerc@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)z$ThreadedEchoServer.ConnectionHandlercCsZ||_d|_||_||_|jjd�d|_tjj|�d|_	dS)NFrT)
�server�runningrG�addrr��sslconn�	threading�Thread�__init__�daemon)rPr�Zconnsockr�rrrr�Ds					z-ThreadedEchoServer.ConnectionHandler.__init__cCs!y]|jjj|jdd�|_|jjj|jj��|jjj|jj	��Wn�t
jtfk
r�}zc|jj
j|�|jjr�tdt|j�d�d|_|jj�|j�dSWYdd}~Xn2X|jjj|jj��|jjjt
jkr�|jj�}tjre|jjretjjdtj|�d�|jjd�}tjr�|jjr�tjjdt t!|��d	�|jj"�}tjr|jjrtjjd
t |�d�tjjdt |jj��d�dSdS)Nr>Tz'
 server:  bad connection attempt from z:
Fz client cert is rwz cert binary is z bytes
z" server: connection cipher is now z" server: selected protocol is now )#r�r�r&rGr��selected_npn_protocols�append�selected_npn_protocol�selected_alpn_protocols�selected_alpn_protocolrr:�ConnectionResetError�conn_errors�chattyrr�r�r��stoprlr�r"rIr�rrrrrr�r�rTr`r�)rPr�rRZcert_binaryr�rrr�	wrap_connNs6 	

!$	z.ThreadedEchoServer.ConnectionHandler.wrap_conncCs*|jr|jj�S|jjd�SdS)Ni)r�rqrGr0)rPrrrrqss	
z)ThreadedEchoServer.ConnectionHandler.readcCs-|jr|jj|�S|jj|�SdS)N)r�rrGr4)rPr�rrrrys	z*ThreadedEchoServer.ConnectionHandler.writecCs*|jr|jj�n
|jj�dS)N)r�rlrG)rPrrrrls	z*ThreadedEchoServer.ConnectionHandler.closecCs�d|_|jjs%|j�s%dSx�|jr�y3|j�}|j�}|shd|_|j�n�|dkr�tjr�|jj	r�t
jjd�|j�dS|jjr|dkrtjr�|jj	r�t
jjd�|jd�|j�scdSn_|jjr�|j
r�|dkr�tjrJ|jj	rJt
jjd	�|jd�|j
j�|_d|_
tjrc|jj	rct
jjd
�n�|dkrtjr�|jj	r�t
jjd�|j
jd
�}|jt|�jd�d�nctjrP|jj	rP|j
r$dp'd}t
jjd|||j�|f�|j|j��Wq(tk
r�|jjr�td�|j�d|_|jj�Yq(Xq(WdS)NTFsoverz" server: client closed connection
sSTARTTLSz2 server: read STARTTLS from client, sending OK...
sOK
sENDTLSz0 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...
z
tls-uniquezus-asciis
Z	encryptedZunencryptedz/ server: read %r (%s), sending back %r (%s)...
zTest server failure:
)r�r��starttls_serverr�rq�striprlrr�connectionchattyrrrr�r�rGr�r�r�r
r/r�rr�)rP�msg�strippedrfZctyperrr�run�sb		



	#	


	z(ThreadedEchoServer.ConnectionHandler.runN)	r
rrr�r�rqrrlr�rrrr�ConnectionHandler>s
%r�NTFcCsZ|r||_n�tj|dk	r*|ntj�|_|dk	rK|ntj|j_|rp|jj|�|r�|jj|�|r�|jj|�|	r�|jj	|	�|
r�|jj
|
�||_||_||_
tj�|_tj|j�|_d|_d|_g|_g|_g|_g|_tjj|�d|_dS)NFT)r�rr9rLrGr"rCr9�set_npn_protocols�set_alpn_protocolsrr�r�r�r$rGr�	bind_portr��flag�activer�r�r�r�r�r�r�r�)rPZcertificaterJ�certreqs�cacertsr�r�r�Z
npn_protocolsZalpn_protocolsr�r�rrrr��s<									zThreadedEchoServer.__init__cCs$|jtj��|jj�|S)N)�startr��Eventr�wait)rPrrr�	__enter__�s
zThreadedEchoServer.__enter__cGs|j�|j�dS)N)r�r)rPr>rrr�__exit__�s
zThreadedEchoServer.__exit__cCs||_tjj|�dS)N)rr�r�r)rPrrrrr�s	zThreadedEchoServer.startcCs|jjd�|jj�d|_|jr<|jj�x�|jr�yr|jj�\}}tjr�|j	r�t
jjdt
|�d�|j|||�}|j�|j�Wq?tjk
r�Yq?tk
r�|j�Yq?Xq?W|jj�dS)Ng�������?Tz server:  new connection from rw)rGr9r�rrr�rXrrr�rrrr�r�rrr$r;�KeyboardInterruptr�rl)rPZnewconnZconnaddr�handlerrrrr��s&
		
	

zThreadedEchoServer.runcCs
d|_dS)NF)r)rPrrrr�szThreadedEchoServer.stop)r
rrr�r�r�r�r
rrr�r�rrrrr�<s~	!r�c@s�eZdZGdd�dej�Zdd�Zdd�Zdd�Zd	d
�Z	ddd
�Z
dd�Zdd�ZdS)�AsyncoreEchoServerc@sMeZdZGdd�dej�Zdd�Zdd�Zdd�Zd	S)
zAsyncoreEchoServer.EchoServerc@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)z/AsyncoreEchoServer.EchoServer.ConnectionHandlercCsQtj|ddd|dd�|_tjj||j�d|_|j�dS)Nr>Tr?r�F)rr&r$�asyncore�dispatcher_with_sendr��_ssl_accepting�_do_ssl_handshake)rP�connr?rrrr�s	z8AsyncoreEchoServer.EchoServer.ConnectionHandler.__init__cCs?t|jtj�r;x#|jj�dkr:|j�qWdS)NrT)r�r$r�	SSLSocketr�Zhandle_read_event)rPrrr�readablesz8AsyncoreEchoServer.EchoServer.ConnectionHandler.readablecCs�y|jj�Wn�tjtjfk
r5dSYn�tjk
rS|j�SYnetjk
rj�YnNtk
r�}z%|j	dt
jkr�|j�SWYdd}~Xn
Xd|_dS)NrF)
r$r�rr�r�ZSSLEOFError�handle_closer:r/r>rEZECONNABORTEDr)rP�errrrrrszAAsyncoreEchoServer.EchoServer.ConnectionHandler._do_ssl_handshakecCsr|jr|j�nX|jd�}tjrHtjjdt|��|s[|j	�n|j
|j��dS)Niz server:  read %s from client
)rrr0rrrrrr�rlr4r
)rPrfrrr�handle_read,s	
	
z;AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_readcCs.|j�tjr*tjjd|j�dS)Nz server:  closed connection %s
)rlrrrrrr$)rPrrrr8s
	z<AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_closecCs�dS)Nr)rPrrrr=sz<AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_errorN)	r
rrr�rrrrrrrrrr�
sr�cCsZ||_tjtjtj�}tj|d�|_tjj	||�|j
d�dS)Nr8r-)r?r$r%�SOCK_STREAMrrr�r�
dispatcherr�r�)rPr?rGrrrr�@s
	z&AsyncoreEchoServer.EchoServer.__init__cCs4tjrtjjd|�|j||j�dS)Nz$ server:  new connection from %s:%s
)rrrrrr�r?)rPZsock_objr�rrr�handle_acceptedGs	z-AsyncoreEchoServer.EchoServer.handle_acceptedcCs�dS)Nr)rPrrrrLsz*AsyncoreEchoServer.EchoServer.handle_errorN)	r
rrrrr�r�rrrrrr�
EchoServers3rcCsPd|_d|_|j|�|_|jj|_tjj|�d|_dS)NFT)	rrrr�r�r�r�r�r�)rPr?rrrr�Os		zAsyncoreEchoServer.__init__cCsd|jj|jfS)Nz<%s %s>)�	__class__r
r�)rPrrr�__str__WszAsyncoreEchoServer.__str__cCs$|jtj��|jj�|S)N)rr�rrr	)rPrrrr
Zs
zAsyncoreEchoServer.__enter__cGsstjrtjjd�|j�tjr<tjjd�|j�tjr_tjjd�tjdd�dS)Nz cleanup: stopping server.
z! cleanup: joining server thread.
z cleanup: successfully joined.
Z
ignore_allT)	rrrrrr�rrZ	close_all)rPr>rrrr_s	
	
	zAsyncoreEchoServer.__exit__NcCs||_tjj|�dS)N)rr�r�r)rPrrrrrks	zAsyncoreEchoServer.startc	CsOd|_|jr|jj�x)|jrJytjd�Wq"Yq"Xq"WdS)NTr)rrr�rZloop)rPrrrr�os		
zAsyncoreEchoServer.runcCsd|_|jj�dS)NF)rr�rl)rPrrrr�ys	zAsyncoreEchoServer.stop)
r
rrrrrr�rr
rrr�r�rrrrrsD
rsFOO
cCs�i}td|d|dd�}|��|jtj�d|���}|jt|jf�x�|t|�t|�gD]�}	|r�tj	r�t
jjd|�|j|	�|j
�}
|r�tj	r�t
jjd|
�|
|j�krxtd|
dd	�t|
�|dd	�j�t|�f��qxW|jd
�|ratj	rat
jjd�|jd|j�d
|j�d|j�d|j�d|j�d|j�i�|j�WdQRX|j|d<|j|d<|j|d<WdQRX|S)Nr�r�r�Fr�z client:  sending %r...
z client:  read %r
z4bad data <<%r>> (%d) received; expected <<%r>> (%d)
�sover
z client:  closing connection.
�compressionr��peercert�client_alpn_protocol�client_npn_protocolr��server_alpn_protocols�server_npn_protocols�server_shared_ciphers)r�r&r$rArBr�rdr�rrrrrrqr
�AssertionErrorr`r�r r�r�r�r�r�rlr�r�r�)�client_context�server_context�indatar�r��sni_namer�r�r �arg�outdatarrr�server_params_test}sN	"		
	*
	

r.c
Cs|dkrtj}tjdtjdtjdi|}tjr�|rOdpRd}tjj|tj	|�tj	|�|f�tj
|�}|j|O_tj
|�}	|	j|O_|jtj
kr�|jd�x7||	fD])}
||
_|
jt�|
jt�q�Wyt||	ddd	d�}Wn]tjk
rX|rT�Yn�tk
r�}z |s�|jtjkr��WYdd}~XnhX|s�td
tj	|�tj	|�f��n6|dk	r�||dkr�td
||df��dS)NrGrHrIz %s->%s %s
z
 {%s->%s} %s
rr�Fr�z5Client protocol %s succeeded with server protocol %s!Tr�z%version mismatch: expected %r, got %r)rrGrHrIrrrrrZget_protocol_namer9rrVr�rr"r9r�rCr.r:r/rE�
ECONNRESETr')
Zserver_protocolZclient_protocol�expect_successZ	certsreqs�server_options�client_optionsZcerttypeZ	formatstrr(r)rXr�r�rrr�try_protocol_combo�sP					
	
r3c@s�eZdZedd��Zdd�Zeje�d�dd��Z	dd	�Z
d
d�Zdd
�Zeeje
ed�d�dd���Zedd��Zeeje
ed�d�dd���Zedd��Zeeje
ed�d�dd���Zeeje
ed�d�d d!���Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Z ejej!d:�ej"e#d;�d<d=���Z$ejd>ej%kd?�d@dA��Z&dBdC�Z'eje
edD�dE�dFdG��Z(dHdI�Z)dJdK�Z*ejej+dL�dMdN��Z,ejej+dO�ej"e#d;�dPdQ���Z-dRdS�Z.ejej/dT�dUdV��Z0dWdX�Z1dYdZ�Z2e3d[d\��Z4e3d]d^��Z5e3d_d`��Z6e3dadb��Z7ej"e#d;�dcdd��Z8dedf�Z9dgdh�Z:diS)j�
ThreadedTestscCs�tjrtjjd�xdtD]\}|jdtj|��:tj	|�}|j
t�t||dddd�WdQRXq WdS)NrwrVr�Tr�)
rrrrrrZsubTestr�_PROTOCOL_NAMESr9r9r�r.)rPrVr�rrr�	test_echo�s	

zThreadedTests.test_echocCs�tjrtjjd�tjtj�}tj|_	|j
t�|jt�t
d|dd�}|�p|jtj�dd�}|jt|jf�|jt��|j�WdQRX|j�|j�}|j|d�|j�}tjr5tjjtj|�d�tjjdt|�d�d	|kr[|jd
tj|��d|d	krx|jd
�|jd|�|jd|�tj|d�}tj|d�}|j||�|j �WdQRXdS)Nrwr�r�Fr�zCan't get peer certificate.zConnection cipher is z.
r�z$No subject field in certificate: %s.r}�Python Software FoundationzkMissing or invalid 'organizationName' field in certificate subject; should be 'Python Software Foundation'.r�r��r}r7)r8)!rrrrrrr9r�rIr"rCr�r9r�r&r$rArBr�rarbr�r�rr�r�r�rTrirNrrrl)rPr�r�r rRr�Zbefore�afterrrr�test_getpeercert�sB	

	
		
zThreadedTests.test_getpeercertz!verify_flags need OpenSSL > 0.9.8c4Cstjrtjjd�tjtj�}|jt	�tjtj�}tj
|_|jt
�ttdd�}|j|jtj|B�td|dd�}|�V|jtj���9}|jt|jf�|j�}|j|d�WdQRXWdQRX|jtjO_td|dd�}|�W|jtj���:}|jtjd��|jt|jf�WdQRXWdQRXWdQRX|jt�td|dd�}|�V|jtj���9}|jt|jf�|j�}|j|d�WdQRXWdQRXdS)	Nrwr$rr�r�TzCan't get peer certificate.zcertificate verify failed)rrrrrrr9rLr9�SIGNED_CERTFILErIr"rCr�r%rSr&r'r�r&r$rArBr�r�rr(r@r:�CRLFILE)rPr)r�r)r�r rRrrr�test_crl_check	s:	


+
zThreadedTests.test_crl_checkc:Cs�tjrtjjd�tjtj�}|jt	�tjtj�}tj
|_d|_|j
t�td|dd�}|�\|jtj�dd��9}|jt|jf�|j�}|j|d�WdQRXWdQRXtd|dd�}|�]|jtj�dd��:}|jtjd	��|jt|jf�WdQRXWdQRXWdQRXtd|dd�}|�Btj��.}|jtd
��|j|�WdQRXWdQRXWdQRXdS)NrwTr�r�r�r�zCan't get peer certificate.�invalidz,hostname 'invalid' doesn't match 'localhost'z'check_hostname requires server_hostname)rrrrrrr9rLr9r;rIr"r�rCr�r�r&r$rArBr�r�rr@rUrb)rPr)r�r�r rRrrrr�G	s8	
	

+	
z!ThreadedTests.test_check_hostnamec%Csftjjtjjt�p!tjd�}ttdtj	dtdddd�}|�t
j
���}tj|d|dtj���}y|j
t|jf�Wn�tjk
r�}z"tjr�tjjd	|�WYdd}~Xndtk
r?}z7|jtjkr�tjr-tjjd
|�WYdd}~XnX|jd�WdQRXWdQRXWdQRXdS)Nz
wrongcert.pemrrr�Fr�r?rJz
SSLError is %r
z
socket.error is %r
z'Use of invalid cert should have failed!)rrrrr	rKr�r�rrIr$r&rLrArBr�r:rrrrrr/rEr/ri)rPr?r�rGr r�rrr�test_wrong_certm	s,!					&	'zThreadedTests.test_wrong_certc
s�tj��tj��tj��tj�t�����fdd�}����fdd�}tjd|�}|j�z|�Wd|j�XdS)NcsH�j��j��j�\}}|j��j��j�dS)N)r�r�rXrl)Znewsockr�)�
listener_gone�listener_readyr rr�listener�	s



z2ThreadedTests.test_rude_shutdown.<locals>.listenercsv�j�tj��Y}|jt�f��j�ytj|�}Wntk
r]YnX�jd�WdQRXdS)Nz2connecting to closed SSL socket should have failed)r	r$rArBrr&r/ri)r��ssl_sock)r@rAr�rPrr�	connector�	s


z3ThreadedTests.test_rude_shutdown.<locals>.connector�target)	r�rr$rrrBr�rr)rPrBrDrr)r@rAr�r rPr�test_rude_shutdown�	s
z ThreadedTests.test_rude_shutdownr5z)OpenSSL is compiled without SSLv2 supportcCs"tjrtjjd�ttjtjd�ttjtjdtj�ttjtjdtj	�ttjtj
d�ttd�r�ttjtjd�ttjtj
d�t�r�ttjtj
ddtj�ttjtj
ddtj�ttjtj
ddtj�dS)NrwTF�PROTOCOL_SSLv3r2)rrrrrr3rr5rHrIr�rBrGrLr!rrr)rPrrr�test_protocol_sslv2�	s 		

z!ThreadedTests.test_protocol_sslv2cCstjrtjjd�ttd�r�yttjtj	d�WnHt
k
r�}z(tjrztjjdt|��WYdd}~XnXttd�r�ttjtjd�ttjtjd�ttjtj
d�ttd�r	ttjtjdtj�ttjtjdtj�ttjtj
dtj�ttd�rlttjtjdtj�ttjtjdtj�ttjtj
dtj�ttd�r�ttjtjddtj�ttjtjddtjtjB�ttjtj
ddtj�dS)	Nrwr5Tz; SSL2 client to SSL23 server test unexpectedly failed:
 %s
rGF�TLSv1r1)rrrrrrBrr3r�r5r/rTrGrLrHrIrrr)rPr�rrr�test_protocol_sslv23�	s:			!
z"ThreadedTests.test_protocol_sslv23rGz)OpenSSL is compiled without SSLv3 supportcCs�tjrtjjd�ttjtjd�ttjtjdtj�ttjtjdtj	�t
td�r�ttjtjd�ttjtjddtj
�ttjtjd�t�r�ttjtjddtj�dS)NrwZSSLv3r5Fr2)rrrrrr3rrGrHrIrBr5r�rrLr!r)rPrrr�test_protocol_sslv3�	s	
	z!ThreadedTests.test_protocol_sslv3cCs�tjrtjjd�ttjtjd�ttjtjdtj�ttjtjdtj	�t
td�r�ttjtjd�t
td�r�ttjtjd�ttjtj
ddtj�dS)NrwrIr5FrGr2)rrrrrr3rrLrHrIrBr5rGr�r)rPrrr�test_protocol_tlsv1
s	z!ThreadedTests.test_protocol_tlsv1�PROTOCOL_TLSv1_1zTLS version 1.1 not supported.cCs�tjrtjjd�ttjtjd�ttd�rTttjtj	d�ttd�ryttjtj
d�ttjtjddtj�ttjtjd�ttjtj
d�ttj
tjd�dS)NrwzTLSv1.1r5FrGr2)rrrrrr3rrMrBr5rGr��
OP_NO_TLSv1_1rL)rPrrr�test_protocol_tlsv1_1
s	
z#ThreadedTests.test_protocol_tlsv1_1�PROTOCOL_TLSv1_2zTLS version 1.2 not supported.c	Cs*tjrtjjd�ttjtjddtjtj	Bdtjtj	B�t
td�rtttjtjd�t
td�r�ttjtjd�ttjtj
ddtj�ttj
tjd�ttjtjd�ttjtjd�ttjtjd�ttjtjd�dS)NrwzTLSv1.2r1r2r5FrG)rrrrrr3rrPrrrBr5rGr�Z
OP_NO_TLSv1_2rLrM)rPrrr�test_protocol_tlsv1_2/
s 	
z#ThreadedTests.test_protocol_tlsv1_2c	Cs'd}ttd	tjd
dddd
d�}d}|��tj�}|jd�|jt|jf�t	j
r�tjj
d�x>|D]6}t	j
r�tjj
d|�|r�|j
|�|j�}n|j|�|jd�}|j�j�}|dkrU|jd�rUt	j
r4tjj
d|�tj|d	tj�}d}q�|dkr�|jd�r�t	j
r�tjj
d|�|j�}d}q�t	j
r�tjj
d|�q�Wt	j
r�tjj
d�|r�|j
d�n
|jd�|r|j�n
|j�WdQRXdS)N�msg 1�MSG 2�STARTTLS�MSG 3�msg 4�ENDTLS�msg 5�msg 6rJr�Tr�r�Frrwz client:  sending %r...
isokz/ client:  read %r from server, starting TLS...
z- client:  read %r from server, ending TLS...
z client:  read %r from server
z client:  closing connection.
sover
)rRrSrTrUrVrWrXrY)r�r�rrLr$r�rArBr�rrrrrrqr4r0r�r
r
r&r�rl)	rPZmsgsr��wrappedr r*rr-r�rrr�
test_starttlsG
s`			
	
		

									

zThreadedTests.test_starttlscCs4t|dt�}tjr+tjjd�ttd��}|j�}WdQRXd}d|j	t
jjt�df}t
jdt�}tjj|d|�}zo|j�jd	�}|rt|�d
kr|jt|��}tjrtjjdt|�|f�Wd|j�X|j||�dS)Nr?rw�rbr8zhttps://localhost:%d/%srr�r�zcontent-lengthrz/ client: read %d bytes from remote server '%s'
)r�r�rrrrrr
rqr�rr�splitrr��urllibZrequest�urlopen�infor�rr`rlrS)rPr�rArrZurlr�Zdlenrrr�test_socketserver�
s(	 		zThreadedTests.test_socketservercCsYtjrtjjd�d}tt�}|�!tjt	j	��}|j
d|jf�tjrztjjd|�|j|�|j�}tjr�tjjd|�||j
�kr|jd|dd�t|�|dd�j
�t|�f�|jd�tjr+tjjd	�|j�tjrNtjjd
�WdQRXdS)NrwsFOO
z	127.0.0.1z client:  sending %r...
z client:  read %r
z4bad data <<%r>> (%d) received; expected <<%r>> (%d)
rsover
z client:  closing connection.
z client:  connection closed.
)rrrrrrr�rr&r$rAr�rqr
rir`rl)rPr*r�r r-rrr�test_asyncore_server�
s2			
	$
	
	z"ThreadedTests.test_asyncore_servercs�tjrtjjd�ttdtjdtj	dtdddd�}|�Mtj
tj�d	dd
tdtdtjdtj	���jt
|jf��fd
d�}�fdd�}d�jdgfd�jddgfd�jdgfg}d�jdgfd�jddgfd|dgfd|dgfg}d}x(|D] \}}}	}
||jd�}y�|||
��j�}||j�kr�|jdjd|d|dd�dt|�d |dd�d!t|���WqZtk
ry}
zX|	r3|jd"jd|��t|
�j|�sg|jd#jd|d$|
��WYdd}
~
XqZXqZWx2|D]*\}}}	}
||jd�}y��j|�||
�}||j�kr)|jd%jd|d|dd�dt|�d |dd�d!t|���Wq�tk
r�}
zb|	r^|jd&jd|��t|
�j|�s�|jd#jd|d$|
���j�WYdd}
~
Xq�Xq�Wd'}�j|�tt|��}|j�jd+|�t|��|j||�|jt �j!d'g�|jt �j"d)�|jt �j#td)���jd*�|jt�jd,�|jt�jd-��j$�WdQRXdS).NrwrrJrr�Tr�Fr>r?r�r�cs-tdd�}�j|�}|d|�S)Ns�d)rdr1)�br�)r rr�
_recv_into�
sz0ThreadedTests.test_recv_send.<locals>._recv_intocs3tdd�}�j|�\}}|d|�S)Nsrc)rdr3)rdr�r�)r rr�_recvfrom_into�
sz4ThreadedTests.test_recv_send.<locals>._recvfrom_intor4r5zsome.addressr�r0r2r1r3ZPREFIX_r]zpWhile sending with <<{name:s}>> bad data <<{outdata:r}>> ({nout:d}) received; expected <<{indata:r}>> ({nin:d})
r
r-rZnoutr*Zninz>Failed to send with method <<{name:s}>>; expected to succeed.
zFMethod <<{name:s}>> failed with unexpected exception message: {exp:s}
�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.
sdatarrcsover
r�r�r�)%rrrrrr�r�rrGrLr&r$rArBr�r4r5r�r0r2r�rqr
rirr`rbrTr
rdrSrar��sendmsg�recvmsg�recvmsg_intorl)rPr�rerfZsend_methodsZrecv_methodsZdata_prefixZ	meth_nameZ	send_methr0r>r*r-r�Z	recv_methrf�bufferr)r r�test_recv_send�
s�						
	$	
	'
	$	
	!
"	
zThreadedTests.test_recv_sendcCstt�}|j�|j|jdd�tjt|jf�}|j|j	�t
j|dd�}|j|j	�|jd�|j
|jd�d�|j
|jd�d�|j
|j�d�|jd�|j
|jd�d�|j
|jt��d�dS)NZsuppress_ragged_eofsFsdatarrL)r�r�r
rorr$�create_connectionrBr�rlrr&r4rSr0rqr�r1rd)rPr�r rrr�test_recv_zero6s


zThreadedTests.test_recv_zerocs�ttdtjdtjdtdddd�}|��tjtj�ddd	td
tdtjdtj���jt|j	f��j
d�td����fd
d�}|jtj
tjf|��j
d��j�WdQRXdS)NrrJrr�Tr�Fr>r?r�r�i csx�j��qWdS)N)r4r)r�r rr�fill_buffer^sz8ThreadedTests.test_nonblocking_send.<locals>.fill_buffer)r�r�rrGrLr&r$rArBr�r�rdrar�r�rl)rPr�ror)r�r r�test_nonblocking_sendJs*					

z#ThreadedTests.test_nonblocking_sendcs_tjtj��d}tj��}tj��d����fdd�}tjd|�}|j��j�z�zRtjtj�}|j	d�|j
||f�|jtjdt
j|�Wd|j�XzTtjtj�}t
j|�}|j	d�|jtjd|j
||f�Wd|j�XWdd�|j��j�XdS)	Nz	127.0.0.1Fcs��j��j�g}xQ�smtj�gggd�\}}}�|kr|j�j�d�qWx|D]}|j�quWdS)Ng�������?r)r�r�r�r�rXrl)Zconnsr	�wr�rG)�finishr��startedrr�serveps

	$
z3ThreadedTests.test_handshake_timeout.<locals>.serverEg�������?z	timed outT)r$r%rrr�rr�rr	r9rAr@r;rr&rlr)rPr�r�rtrr�r)rrr�rsr�test_handshake_timeouths6





z$ThreadedTests.test_handshake_timeoutcsPtjtj�}tj|_|jt�|jt�tjtj	��d}t
j��}|j�dd��t
j��d�d�����fdd�}t
jd|�}|j��j�|jtj��}|j||f�|j�}|j�|j��j��j�|j�tj�|j�|�dS)Nz	127.0.0.1r>Tcs7�j��j��j�\���jd�dS)Nr)r�r�rXr0r)�evt�peerr�r�rrrt�s

z/ThreadedTests.test_server_accept.<locals>.serverE)rr9r�rIr"rCr�r9r$r%rrr&r�rr�rr	rAr�rlrrrrS)rPr�r�r�rtr�clientZclient_addrr)rvrwr�r�r�test_server_accept�s0







z ThreadedTests.test_server_acceptcCsqtjtj�}|jtj���C}|jt��}|j�WdQRX|j|j	j
t
j�WdQRXdS)N)rr9r�r&r$rar/r�rSrDrE�ENOTCONN)rPr�rGrHrrr�test_getpeercert_enotconn�s
z'ThreadedTests.test_getpeercert_enotconncCsqtjtj�}|jtj���C}|jt��}|j�WdQRX|j|j	j
t
j�WdQRXdS)N)rr9r�r&r$rar/r�rSrDrErz)rPr�rGrHrrr�test_do_handshake_enotconn�s
z(ThreadedTests.test_do_handshake_enotconnc"Cs�tjtj�}y|jd�Wn"tjk
rG|jd�YnXttdtjdd��S}|jt	j	���4}|j
t��|jt
|jf�WdQRXWdQRXWdQRX|jdt|jd��dS)NZDESzno DES cipher availablerJr�Fzno shared cipherr)rr9r�rr:rr�r�r&r$rar/rArBr�rNrTr�)rPr�r�r rrr�test_default_ciphers�s		+z"ThreadedTests.test_default_cipherscCs�tjtj�}ttdtjdd��~}|jtj���I}|j|j�d�|j	t
|jf�|j|j�d�WdQRX|j|j�d�WdQRXdS)NrJr�FrI)
rr9rLr�r�r&r$rUr�rArBr�rS)rPr�r�r rrr�test_version_basic�s		z ThreadedTests.test_version_basicz"test requires ECDH-enabled OpenSSLz bpo-36576: fail on OpenSSL 1.1.1cCs�tjtj�}|jt�tjdkr;|jd�td|��V}|jt	j	���7}|j
t|jf�|j
d|j�d�WdQRXWdQRXdS)Nrrz
ECCdraft:ECDHr�ZECDH)rrr)rr9r�r9r�r rr�r&r$rArBr�rNr�)rPr�r�r rrr�test_default_ecdh_curve�s

z%ThreadedTests.test_default_ecdh_curvez
tls-uniquez*'tls-unique' channel binding not availablecCsAtjrtjjd�ttdtjdtj	dtdddd�}|��tj
tj�d	dd
tdtdtjdtj	�}|jt
|jf�|jd
�}tjr�tjjdj|��|j|�|jt|�d�|jd�|j�j�}|j|t|�jd��|j�tj
tj�d	dd
tdtdtjdtj	�}|jt
|jf�|jd
�}tjr�tjjdj|��|j||�|j|�|jt|�d�|jd�|j�j�}|j|t|�jd��|j�WdQRXdS)NrwrrJrr�Tr�Fr>r?r�r�z
tls-uniquez! got channel binding data: {0!r}
�sCB tls-unique
zus-asciiz) got another channel binding data: {0!r}
)rrrrrr�r�rrGrLr&r$rArBr�r�rr�rSr`rqr�r�r�rlrr)rPr�r Zcb_dataZpeer_data_reprZnew_cb_datarrrr��s\							


	
		


	z-ThreadedTests.test_tls_unique_channel_bindingcCs�tjtj�}|jt�t||dddd�}tjr`tj	j
dj|d��|j|ddddh�dS)Nr�Tr�z got compression: {!r}
r ZZLIBZRLE)
rr9rLr9r�r.rrrrrrrN)rPr�r�rrr�test_compression9s
	zThreadedTests.test_compressionrMz*ssl.OP_NO_COMPRESSION needed for this testcCsdtjtj�}|jt�|jtjO_t||dddd�}|j|dd�dS)Nr�Tr�r )	rr9rLr9r�rrMr.rU)rPr�r�rrr�test_compression_disabledBs
z'ThreadedTests.test_compression_disabledcCs�tjtj�}|jt�|jt�|jd�t||dddd�}|dd}|j	d�}d|kr�d	|kr�d
|kr�|j
d|d�dS)NZkEDHr�Tr�r�r�-ZADHZEDHZDHEzNon-DH cipher: )rr9rLr9r�rSrTrr.r]ri)rPr�r�r��partsrrr�test_dh_paramsLs


$zThreadedTests.test_dh_paramscCsRtjtj�}|jt�t||dddd�}|j|dd�dS)Nr�Tr�r")rr9rLr9r�r.rU)rPr�r�rrr�test_selected_alpn_protocolYs

z)ThreadedTests.test_selected_alpn_protocolzALPN support requiredcCs�tjtj�}|jt�tjtj�}|jt�|jddg�t||dddd�}|j|dd�dS)Nr\�barr�Tr�r")	rr9rLrCr�r9rr.rU)rPr(r)r�rrr�/test_selected_alpn_protocol_if_server_uses_alpnas

z=ThreadedTests.test_selected_alpn_protocol_if_server_uses_alpnz!ALPN support needed for this testcCs�dddg}ddgdfddgdfdgdfddgdfg}xq|D]i\}}tjtj�}|jt�|j|�tjtj�}|jt�|j|�yt||dddd�}Wn.tjk
r}z|}WYdd}~XnX|dkr1tr1|j	|tj�qUd	t
|�t
|�t
|�f}	|d
}
|j|
||	|
df�t|d�r�|ddnd}|j|||	|df�qUWdS)Nr\r�Z	milkshakezhttp/3.0zhttp/4.0r�Tr�zKfailed trying %s (s) and %s (c).
was expecting %s, but got %%s from the %%sr"rxr$r�nothingr�r�)
rr9rPr9r�rr.r:�IS_OPENSSL_1_1rrTrSr`)rP�server_protocols�protocol_tests�client_protocolsr�r)r(r�r�r��
client_result�
server_resultrrr�test_alpn_protocolsms<





$z!ThreadedTests.test_alpn_protocolscCsRtjtj�}|jt�t||dddd�}|j|dd�dS)Nr�Tr�r#)rr9rLr9r�r.rU)rPr�r�rrr�test_selected_npn_protocol�s

z(ThreadedTests.test_selected_npn_protocolz NPN support needed for this testcCsiddg}ddgdfddgdfddgdfddgdfg}x|D]\}}tjtj�}|jt�|j|�tjtj�}|jt�|j|�t||dddd�}d	t|�t|�t|�f}|d
}	|j|	|||	df�t	|d�r>|ddnd}
|j|
|||
df�qUWdS)Nzhttp/1.1zspdy/2�test�abc�defr�Tr�zKfailed trying %s (s) and %s (c).
was expecting %s, but got %%s from the %%sr#rxr%rr�r�r�)
rr9rLr9r�rr.rTrSr`)rPr�r�r�r�r)r(r�r�r�r�rrr�test_npn_protocols�s*




$z ThreadedTests.test_npn_protocolscCsvtjtj�}|jt�tjtj�}|jt�tjtj�}tj|_|jt	�|||fS)N)
rr9rLr9r;�SIGNED_CERTFILE2rIr"rCr�)rPr)�
other_contextr(rrr�sni_contexts�s


zThreadedTests.sni_contextscCs+|d}|jd|ff|d�dS)Nr!rr�)rN)rPr�r
rRrrr�check_common_name�s
zThreadedTests.check_common_namecsg�|j�\}�}��fdd�}|j|�t||dddd�}|j�d|fg�|j|d�g�t||dddd�}|j�d|fg�|j|d�g�|jd�t||dddd	�}|j|d�|j�g�dS)
Ncs,�j||f�|dk	r(�|_dS)N)r�r�)rC�server_name�initial_context)�callsr�rr�
servername_cb�sz6ThreadedTests.test_sni_callback.<locals>.servername_cbr�Tr+�supermessageZfakehostnamer�Znotfunny)r�r`r.rSr�)rPr)r(r�r�r)r�r�rra�s,
		
	zThreadedTests.test_sni_callbackcCs|j�\}}}dd�}|j|�|jtj��"}t||dddd�}WdQRX|j|jjd�dS)NcSstjS)N)rZALERT_DESCRIPTION_ACCESS_DENIED)rCr�r�rrr�cb_returning_alert�szAThreadedTests.test_sni_callback_alert.<locals>.cb_returning_alertr�Fr+r�ZTLSV1_ALERT_ACCESS_DENIED)	r�r`rarr:r.rSrDr�)rPr)r�r(r�rHr�rrr�test_sni_callback_alert�s
z%ThreadedTests.test_sni_callback_alertcCs�|j�\}}}dd�}|j|�|jtj��8}tj��"}t||dddd�}WdQRXWdQRX|j|j	j
d�|jd|j��dS)	NcSsdddS)Nrrr)rCr�r�rrr�
cb_raising
sz;ThreadedTests.test_sni_callback_raising.<locals>.cb_raisingr�Fr+r�ZSSLV3_ALERT_HANDSHAKE_FAILURE�ZeroDivisionError)
r�r`rarr:r�captured_stderrr.rSrDr�rN�getvalue)rPr)r�r(r�rH�stderrr�rrr�test_sni_callback_raising
s
z'ThreadedTests.test_sni_callback_raisingcCs�|j�\}}}dd�}|j|�|jtj��8}tj��"}t||dddd�}WdQRXWdQRX|j|j	j
d�|jd|j��dS)	NcSsdS)Nr\r)rCr�r�rrr�cb_wrong_return_type
szOThreadedTests.test_sni_callback_wrong_return_type.<locals>.cb_wrong_return_typer�Fr+r�ZTLSV1_ALERT_INTERNAL_ERRORrc)
r�r`rarr:rr�r.rSrDr�rNr�)rPr)r�r(r�rHr�r�rrr�#test_sni_callback_wrong_return_type
s
z1ThreadedTests.test_sni_callback_wrong_return_typec
Cs'tjtj�}|jt�tjtj�}tj|_|jt�tj	dkr�|j
d�|j
d�d}d}n&|j
d�|j
d�d}d	}t||�}|d
d}|jt
|�d�xE|D]=\}}}	||jd�kr�||kr�|j|�q�WdS)
Nrrr�z
AES128:AES256ZAES256zAES-256zAES:3DESZ3DESzDES-CBC3r&r�)rrr�)rr9rLr9r;rIr"rCr�r rr.Z
assertGreaterr`r]ri)
rPr)r(Zalg1Zalg2r�r�r
Ztls_version�bitsrrr�test_shared_ciphers#
s(



	

!z!ThreadedTests.test_shared_cipherscCs�tjtj�}tj|_|jt�|jt�td|dd�}|�f|j	t
j
��}|jt|j
f�|j�|jt|jd�|jt|jd�WdQRXdS)Nr�r�Fishello)rr9r�rIr"rCr�r9r�r&r$rArBr�rlrarbrqr)rPr�r�r rrr�,test_read_write_after_close_raises_valuerror<
s


z:ThreadedTests.test_read_write_after_close_raises_valuerrorcCsdd}ttjd��}|j|�WdQRX|jtjtj�tjtj�}tj	|_
|jt�|j
t�td|dd�}|�||jtj���_}|jt|jf�ttjd��-}|j|�|j|jd�|�WdQRXWdQRXWdQRXdS)	Nr-i�wbr�r�Fr\i)r
rZTESTFNrro�unlinkrr9r�rIr"rCr�r9r�r&r$rArBr��sendfilerSr0)rPZ	TEST_DATArAr�r�r �filerrr�
test_sendfileK
s



zThreadedTests.test_sendfileN);r
rrrEr6r:r=rr"r=r�r?rFrBrrHrJrKrLrOrQr[rarbrlrnrpruryr{r|r}r~rKr�r�rrr�r�r�r�r�ZHAS_ALPNr�r�r�ZHAS_NPNr�r�r�r�rar�r�r�r�r�r�rrrrr4�sp&*&!)(:~1&!;		
!!)!
'r4c	Cstjr*ddl}dtjdtjdtji}|j��q|jddt	�xV|j
�D]6\}}|�}|rc|drcd||f}PqcWttj��}WdQRXtdt
jt
jf�td	|�td
t
j�tdt
j�ytdt
j�Wntk
r)YnXxZttttttttttttt g
D]+}t!j"j#|�sXtj$d
|��qXWt%t&t't(g}tj)d�r�|j*t+�|j*t,�t-r�tj.�}|r�|j*t/�ztj0|�Wdt-rtj1|�XdS)NrZLinuxZMacZWindows�ignorez?dist\(\) and linux_distribution\(\) functions are deprecated .*z%s %rztest_ssl: testing with %r %rz          under %sz          HAS_SNI = %rz          OP_ALL = 0x%8xz          OP_NO_TLSv1_1 = 0x%8xzCan't read certificate file %rZnetwork)2rr�warningsr;r<Zmac_verZ	win32_ver�catch_warnings�filterwarnings�PendingDeprecationWarning�itemsr��printrrr rOrrN�AttributeErrorr�r�rDr<r=r>r?r;r�r�r:�BADKEYr;rr�existsZ
TestFailedrrFr�r�Zis_resource_enabledr�r�r��
_have_threadsZthreading_setupr4Zrun_unittestZthreading_cleanup)	rr�Zplatsr
r@Zplat�filenameZtests�thread_inforrr�	test_main]
sX			
	
		


r��__main__)]rr=r�rr$r�r#r.rcrrEr��tempfileZurllib.requestr^rrr'r;rC�
import_moduler�sortedr5rrBrr
rr r�r�r
r��fsencoderDr<r=r>r?r@rAr-r�rErNrr<r;r�r�rr�r�r;r:rCr�r�r�r�rTrUrrr!r"r)r4rErrOr�ZTestCaserFrr�r�r�r�r��ImportErrorr�Ztest.ssl_serversr�r�r�rr.r3r4r�r
rrrr�<module>s�	�����)?�MW
�v/;����y9