Your IP : 216.73.216.213


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.pyc



��Yf�_�@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�2/opt/alt/python35/lib64/python3.5/test/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)�timeZdaylightZ	localtimeZtm_isdstZaltzoneZtimezonerrrr�
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�datetimeZstrptime�replace�strftime)�	cert_timeZfmtZdtrrr�asn1timefs"r-cs<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)r/r0r1)	r�
SSLContextr.�SSLErrorr �platform�linux_distribution�unittestZSkipTest)�args�kwargs)�funcrr�fwsz$skip_if_broken_ubuntu_ssl.<locals>.f)�hasattrr�	functools�wraps)r9r:r)r9r�skip_if_broken_ubuntu_sslus!	r>z 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�strr2�assertIs�protocol)rI�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���rV)r�RAND_statusrrrrr�RAND_pseudo_bytesrL�lenZ
RAND_bytes�assertRaisesr3�
ValueErrorr;�	TypeErrorrTZRAND_add�	bytearray)rI�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 randomnessrrSr)rrW�failr�pipe�fork�closerXrLrYr�
BaseException�_exit�
addCleanup�waitpid�read�assertNotEqual)rI�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�rrrs�r��rtru�r��rvrw�r��rxry�r�)r�r�r�r��rrrs�r��rtru�r��rvrw�r��rxry�r�)r�r�r�r��rry)r��rr��rr�)r�r�)r�)r�)r�)r�_ssl�_test_decode_cert�CERTFILErrrrr�pprint�pformatrLr-�	NOKIACERT)rI�prrr�test_parse_cert�s8	!

	!


z BasicSocketTests.test_parse_certcCsztjjt�}tjr<tjjdt	j
|�d�|j|ddddd	d
ddd
dddddi�dS)Nrprqrr�UKrx�cody-carzzJun 14 18:00:58 2028 GMTr{zJun 18 18:00:58 2018 GMTr|Z02r}�#codenomicon-vm-2.test.lal.cisco.comr~r�version��rrr��r��rxr��r�)r�r��rrr��r��rxr��r�)r�r��rr�)r�)rr�r��TALOS_INVALID_CRLDPrrrrrr�r�rL)rIr�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)<Nrprr�US�stateOrProvinceName�Oregonrt�	Beavertonrv�Python Software Foundation�organizationalUnitName�Python Core Developmentrx�null.python.orgexample.org�emailAddress�python-dev@python.orgr}rqrrrr�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~�rrr��r��r�r��r��rtr��r��rvr��r��r�r��r��rxr��r��r�r��r�)r�r�r�r�r�r�r�)rrr�rr��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�r�r�)
rr�r��NULLBYTECERTrrrrrr�r�rLr)rIr�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�DirNamerrrsrt�Castle Anthraxrv�Python Software Foundationrx�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�rr��r�r��r�r��r�r��rr��rrrs�r��rtr��r��rvr��r��rxr��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��
ALLSANFILErL)rIr�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�rrpz-DER-to-PEM didn't include correct header:
%r
z-DER-to-PEM didn't include correct footer:
%r
)�open�
CAFILE_CACERTrjr�PEM_cert_to_DER_certZDER_cert_to_PEM_certrL�
startswithZ
PEM_HEADERrb�endswithZ
PEM_FOOTER)rIr:�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�tuplerMZassertGreaterEqual�
assertLessZassertLessEqual�IS_LIBRESSL�
assertTruer�format�hex)	rI�n�t�s�major�minorZfixZpatchrlrrr�test_openssl_versionTs0			!z%BasicSocketTests.test_openssl_versionc
Csgtjtj�}tj|�}tj|�}tjdtf��~|j	|�d�WdQRXdS)Nr1)
�socket�AF_INETr�wrap_socket�weakref�refrZcheck_warnings�ResourceWarningrL)rIr�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)
rrrrrZ�OSError�recv�	recv_intor]�recvfrom�
recvfrom_into�send�sendto)rIrr#rrr�test_wrapped_unconnected~sz)BasicSocketTests.test_wrapped_unconnectedcCscx\dD]T}tjtj�}|j|�tj|��}|j||j��WdQRXqWdS)N��@)Nr0r1)rr�
settimeoutrrrLZ
gettimeout)rI�timeoutrr#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�certfiler1z!can't connect in server-side modei�)r�assertRaisesRegexr[rrr��connect�HOSTrZr(�NONEXISTINGCERTrL�	exception�errno�ENOENT)rI�sockr�cmrrr�test_errors�s6			!zBasicSocketTests.test_errorsc
Cs�tjjtjjt�p!tj|�}tj�}|j|j�|j	t
j��!t
j|d|dt
j
�WdQRXdS)z;Check that trying to use the given client certificate failsr7�ssl_versionN)rrrrr	�curdirrrhrerZrr3r�PROTOCOL_TLSv1)rIr7r?rrr�
bad_cert_test�s!	zBasicSocketTests.bad_cert_testcCs|jd�dS)z Wrapping with an empty cert fileznullcert.pemN)rE)rIrrr�test_empty_cert�sz BasicSocketTests.test_empty_certcCs|jd�dS)z:Wrapping with a badly formatted certificate (syntax error)zbadcert.pemN)rE)rIrrr�test_malformed_cert�sz$BasicSocketTests.test_malformed_certcCs|jd�dS)z2Wrapping with a badly formatted key (syntax error)z
badkey.pemN)rE)rIrrr�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)rZr�CertificateErrorrI)rJrK)rIrrrb�sz2BasicSocketTests.test_match_hostname.<locals>.failr}rx�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.orgrzzJun 26 21:41:46 2011 GMT�linuxfrz.orgr~r�linuxfr.org�linuxfr.comr��
<unsupported>zDec 18 23:59:59 2011 GMTrrr�r��
Californiart�
Mountain Viewrv�
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�rxrN�ri)rj�rxrO�rk)rl�rxrP�rm)rn�rxrQ�ro)rp�rxrR�rq)rr�rxrS�rs)rt�rxrV�ru)rv�rxrW�rw)rx�rxrX�ry)rz�rrY�rrZ�r�r[)r{r|r}�rrr��r~�r�r\�r��rtr]�r��rvr^�r��rxr_�r�)rr�r�r�r��rxrN�r�)r��rrN�r`ra�r`rb)r�r�r��rxrN�r�)r��rrN�r`rc�r`rd)r�r�r��rrr��r��r�r\�r��rtr]�r��rvr^�r�)r�r�r�r��rrr��r��r�r\�r��rtr]�r��rxr_�r�)r�r�r�r��r�re)r��rrr��r��r�r\�r��rtr]�r��rvr^�r�)r�r�r�r��r�re)r��rxrf�r�)r��rxrg�r�)r��rxrh�r�)r�)
�encode�decoderZr[rrIrMrGrMr<)rIrLrbrJrTr@r)rIr�test_match_hostname�s�















	












	



	


	



	



	




z$BasicSocketTests.test_match_hostnamecCsKtjtj�}tj��&}|jt|j|ddd�WdQRXdS)NT�server_hostnamez
some.hostname)rr2�PROTOCOL_SSLv23rrZr[r)rIrQr?rrr�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)rr�bind�listenr9�getsocknamerrrZr[�get_channel_bindingre)rIr�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-uniquer6Tr7)rrrr�assertIsNoner�r�)rIrr#rrr�test_tls_unique_channel_bindingwsz0BasicSocketTests.test_tls_unique_channel_bindingcCsttjtjtj��}t|�}|jt��}d}tj�WdQRX|j	|t
|jjd��dS)Nr)
rrrr�reprZassertWarnsr"rZ
gc_collectrGrMZwarningr7)rIr#rr@rrr�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_pathsrLrYrZDefaultVerifyPathsr�EnvironmentVarGuard�CAPATHr��cafiler)rI�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�ROOTr1r��x509_asn�
pkcs_7_asnz1.3.6.1.5.5.7.3.1)r�r�)rrZenum_certificatesrZr\�WindowsError�setr�listrrLrY�bytesrG�bool�
isinstance�update)	rIZ
trust_oidsZ	storenameZstore�elementrJ�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�r1�rrr�r�)
rrZ	enum_crlsrZr\r�rr�rrLrYr�rG)rIZcrlsr�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�_ASN1ObjectrL�nid�	shortnameZlongname�oidrrZr[Zfromnidr8�rangerrM�typeZfromname)rI�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_AUTHrLr�r�r��CLIENT_AUTH)rIr�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)rrZ
SOCK_DGRAMrhrerZ�NotImplementedErrorrrr@rLrMr<r2r�)rIrZcxrQrrr�test_unsupported_dtls�sz&BasicSocketTests.test_unsupported_dtlscCs|jtj|�|�dS)N)rLr�cert_time_to_seconds)rI�
timestringZ	timestamprrr�cert_time_okszBasicSocketTests.cert_time_okc	Cs(|jt��tj|�WdQRXdS)N)rZr[rr�)rIr�rrr�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�)rIrrr�"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��ѓ�Ar,zJan 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)r�rLrr�r�)rIr�ZtsZ
newyear_tsrrr�test_cert_time_to_secondss*







z*BasicSocketTests.test_cert_time_to_seconds�LC_ALLr1cCsVdd�}|�j�dkr.|jd�|jdd�|j|�d�dS)NcSstjdd	�S)
Nz%brr�r�r&r(r�r)	rr�r�r&r(r�rrr)r#r+rrrr�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�skipTestr�r�)rIr�rrr� test_cert_time_to_seconds_locale4s

z1BasicSocketTests.test_cert_time_to_seconds_localeN)1�__name__�
__module__�__qualname__rJrRr`r6�
skipUnlessrr
ror�r�r�rrrrZcpython_onlyr%r/r4rArErFrGrHr�r�r�r�CHANNEL_BINDING_TYPESr�r�r�rr4r�r�r�r�r�r�r�r$r�r�Zrun_with_localerrrrrr?�sH
' (	�'''#r?c@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�)�	PROTOCOLSrr2rLrOrKrZr[)rIrOrQrrr�test_constructorFs
zContextTests.test_constructorcCs7x0tD](}tj|�}|j|j|�qWdS)N)rrr2rLrO)rIrPrQrrr�
test_protocolOs
zContextTests.test_protocolc	CsZtjtj�}|jd�|jd�|jtjd��|jd�WdQRXdS)N�ALL�DEFAULTzNo cipher can be selectedz^$:,;?*'dorothyx)rr2rD�set_ciphersr8r3)rIrQrrr�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)rr2rD�OP_ALL�OP_NO_SSLv2�OP_NO_SSLv3rr rFrL�options�OP_NO_TLSv1rrZr[)rIrQ�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)rr2rDrL�verify_moder@rArBrZr\r[)rIrQrrr�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)rr2rD�getattrrL�verify_flags�VERIFY_DEFAULT�VERIFY_CRL_CHECK_LEAFZVERIFY_CRL_CHECK_CHAINZVERIFY_X509_STRICTrZr\)rIrQ�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)Nr5zPEM libr7zkey 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)r]r!r�rrrr�getpass_bytearray�sz<ContextTests.test_load_cert_chain.<locals>.getpass_bytearraycSsdS)Nrrrrrr�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!)rIrrr�__call__�szCContextTests.test_load_cert_chain.<locals>.GetPassCallable.__call__cSstS)N)r!)rIrrr�getpass�szBContextTests.test_load_cert_chain.<locals>.GetPassCallable.getpassN)rrrr*r+rrrr�GetPassCallable�sr,zmust return a stringz
getpass error)rr2rD�load_cert_chainr�rZr\r(r;rLr<r=r>r8r3�BADCERT�	EMPTYCERT�ONLYCERT�ONLYKEY�BYTES_ONLYCERT�
BYTES_ONLYKEYr�CERTFILE_PROTECTEDr!r�r]�ONLYKEY_PROTECTEDr[r+r()rIrQr@r"r#r$r%r&r'r)r,rrr�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)rr2rD�load_verify_locationsr��BYTES_CERTFILErZr\r(r;rLr<r=r>r8r3r.r��BYTES_CAPATH)rIrQr@rrr�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�rp�head�otherZagain�tail�z
no start lineZbrokenznot enough datasbroken)rrrjrr�CAFILE_NEURONIOr2rDrL�cert_store_statsr7rrZr\�objectr8r3)rIr:Z
cacert_pemZ
cacert_derZneuronio_pemZneuronio_derrQZcombinedrrr�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)rr2rD�load_dh_params�DHFILErr
�BYTES_DHFILErZr\�FileNotFoundErrorr;rLr<r=r>r3r�)rIrQr@rrr�test_load_dh_params4s

z ContextTests.test_load_dh_paramscCs|xutD]m}tj|�}|j|j�ddddddddddddddd	dd
dddddi�qWdS)
NZnumberrr9Zconnect_goodZconnect_renegotiate�acceptZaccept_goodZaccept_renegotiate�hits�missesZtimeoutsZ
cache_full)rrr2rLZ
session_stats)rIrPrQrrr�test_session_statsAs
zContextTests.test_session_statscCs tjtj�}|j�dS)N)rr2rDZset_default_verify_paths)rIrQrrr�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
prime256v1rUsfoo)rr2rDZset_ecdh_curverZr\r[)rIrQrrr�test_set_ecdh_curveYs

z ContextTests.test_set_ecdh_curvecCs�tjtj�}|jt|j�|jt|jd�|jt|jd�|jt|j|�dd�}|jd�|j|�dS)Nr&r1cSsdS)Nr)r?�
servernamerQrrr�
dummycallbackmsz5ContextTests.test_sni_callback.<locals>.dummycallback)rr2rDrZr\�set_servername_callback)rIrQrRrrr�test_sni_callbackcs
zContextTests.test_sni_callbackcCsdtjtj�}|dd�}|j|�tj|�}~~tj�|j|�d�dS)NcSsdS)Nr)r?rQrQ�cyclerrrrRwsz>ContextTests.test_sni_callback_refcycle.<locals>.dummycallback)	rr2rDrSr r!�gc�collectrN)rIrQrRr$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)Nr;r�crl�x509rr�)	rr2rDrLrBr-r�r7r)rIrQrrr�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))Nrqrv�Root CAr��http://www.cacert.orgrx�CA Cert Signing Authorityr��support@cacert.orgrzzMar 29 12:29:49 2033 GMTr{zMar 30 12:29:49 2003 GMTr|Z00r��!https://www.cacert.org/revoke.crlr}r�r�T�rvr\�ra�r�r]�rc�rxr^�re�r�r_�rg)rbrdrfrh)r`�rvr\�ri�r�r]�rk�rxr^�rm�r�r_�ro)rjrlrnrp)rr2rDrL�get_ca_certsr7r�rr-rrjr)rIrQr:r�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�)	rr2rD�load_default_certsr�r�r�rZr\)rIrQrrr�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�rYrrZrr;)
rr2rDrr�r�r�rtrLrB)rIrQr�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�rZr)
rr2rDrtrBrr�r�r�rL)rIrQ�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)NrFrr�rr<rCrE)r�create_default_contextrLrOr�rrBr�check_hostnamerrrr�
SIGNING_CArjr�r�r�r@)rIrQr:r<rrr�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�rzTZpurpose)rZ_create_stdlib_contextrLrOr�rr@�assertFalserzrrrDrBrr�r�)rIrQrrr�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)rr2rDr}rzrZr[rBrrrAr@)rIrQrrr�test_check_hostnames			z ContextTests.test_check_hostnameN)&rrrr>r	r
rr6�skipIf�IS_OPENSSL_1_1_1rrrr"rr6r:rDrJrNrOrrDrP�	needs_snirTrXr[rsrurr4rrvrxr|r~rrrrrrDs4	!S:
!

!	'(rc@s4eZdZdd�Zdd�Zdd�ZdS)�
SSLErrorTestscCsztjdd�}|jt|�d�|j|jd�tjdd�}|jt|�d�|j|jd�dS)NrrU)rr3rLrMr=ZSSLZeroReturnError)rI�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)rr2rDrZr3rFr�rLr<Zlibrary�reasonrMrr)rIrQr@rrrr�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)rr2rDrr�r�r9r��setblockingrrZ�SSLWantReadError�do_handshakerMr<rrrLr=�SSL_ERROR_WANT_READ)rIrQrr�r@rrr�
test_subclass>s


zSSLErrorTests.test_subclassN)rrrr�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)
Nsfoor@sbarsfoobarsbazr�sbar�z)r�	MemoryBIOrrLrj)rI�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)Nr@sfoor�sfor�o)	rr�r}�eofrLrjr�	write_eofr)rIr�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�rL�pendingrr�rj)rIr�r�rrr�test_pendingqs



zMemoryBIOTests.test_pendingcCs�tj�}|jd�|j|j�d�|jtd��|j|j�d�|jtd��|j|j�d�dS)Nsfoosbarsbaz)rr�rrLrjr]�
memoryview)rIr�rrr�test_buffer_typess
z MemoryBIOTests.test_buffer_typescCshtj�}|jt|jd�|jt|jd�|jt|jd�|jt|jd�dS)NrUTr)rr�rZr\r)rIr�rrr�test_error_types�s
zMemoryBIOTests.test_error_typesN)rrrr�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_HOSTrrrrr@r9rL�getpeercertrerBr8r3�REMOTE_ROOT_CERTr)rIrrrr�test_connect�s&
		zNetworkedTests.test_connectcCs�tjt��stjtjtj�dtjdt�}z6|j	d|j
tdf��|j|j��Wd|j
�XWdQRXdS)Nr�r�ri�)rr�r�rrrrrBr�rL�
connect_exrr�re)rIrrrr�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�rrrrrBr�r�r�rGr=ZEINPROGRESS�EWOULDBLOCK�selectr�r��SSLWantWriteErrorrr�re)rIr�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�rrrrrBr�r2r�r�rGr=ZEAGAINr�re)rIrr�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�rrrrrBr�r�r=ZECONNREFUSEDZEHOSTUNREACHZ	ETIMEDOUTr�rGre)rIrr��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�rr2r�rrrr9rLr�rerBrr8r3r7r�r)rIrQrrJrrr�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�rr2r�rBrr7r�rrrr9r�rrer9)rIrQrrJrrr�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)Nr<i�)rr�rjrrrr�r�r2r�rBrr7rrrr9r�r)rIr:rrrrQrrJrrr�test_connect_cadata4s$z"NetworkedTests.test_connect_cadatarEz*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�rrrrr9�fileno�makefilererrjrVrWrZr(rLr<r=ZEBADF)rIr#�fdr:r�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�rrr9r�rrr@r�r�r�r�rerrrr)rIr�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_certificaterbr�r3rrrr)�host�portrJr�x)rIrr�_test_get_server_certificateus"
	'		zPNetworkedTests.test_get_server_certificate.<locals>._test_get_server_certificatei�zipv6.google.com)r�r�rZIPV6_ENABLED)rIr�r)rIr�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��ciphersrrzNo cipher can be selectedz^$:,;?*'dorothyx)r�rr�rrrrr@r9r8r3)rI�remoterr?rrr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 r�rrHrrrrr	rr�r2rDrBrr7rrrr9rrrr�cipherr�r�r�re)rIr�Zsha256_certrQrrrr�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�rr2r�rBrr7r�rLrqrrrr9r�rrerY)rIrQrrJrrr�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�rr2rDr�rrrr9rN�context�_sslobj)rIZctx1Zctx2rr#rrr�test_context_setget�s	z"NetworkedTests.test_context_setgetN)rrrr�r�r�r�r�r�r�r�r6r�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)Nr3�
rri�z"Needed %d calls to complete %s().
)�getrr3r=r�ZSSL_ERROR_WANT_WRITErj�sendallr)rr�rrrrr)
rIr?�incoming�outgoingr9r7r8r3r�r=Zretr��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�rrr9rr�r2r�rBrr7r�rz�wrap_biorNr��ownerr�r��assertIsNotNone�shared_ciphersrZr[r�rr�r�r�r�unwrapZSSLSyscallErrorr3rre)rIr?r�r�rQ�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�rrr9rr�r2r�r@rr�r�r�rrjrLr�re)rIr?r�r�rQr�Zreqr�rrr�test_read_write_data!sz&NetworkedBIOTests.test_read_write_dataN)rrrr�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@s^eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)z$ThreadedEchoServer.ConnectionHandlerz�A mildly complicated class, because we want it to work both
            with and without the SSL wrapper around the socket connection, so
            that we can test the STARTTLS functionality.cCsZ||_d|_||_||_|jjd�d|_tjj|�d|_	dS)NFrT)
�server�runningr?�addrr��sslconn�	threading�Thread�__init__�daemon)rIr�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)Nr6Tz'
 server:  bad connection attempt from z:
Fz client cert is rpz cert binary is z bytes
z" server: connection cipher is now z" server: selected protocol is now )#r�r�rr?r��selected_npn_protocols�append�selected_npn_protocol�selected_alpn_protocols�selected_alpn_protocolrr3�ConnectionResetError�conn_errors�chattyrr�r�r��stoprer�rrBr�rrrrrr�r�rMrYr�)rIr�rJZcert_binaryr�rrr�	wrap_connNs6 	

!$	z.ThreadedEchoServer.ConnectionHandler.wrap_conncCs*|jr|jj�S|jjd�SdS)Ni)r�rjr?r))rIrrrrjss	
z)ThreadedEchoServer.ConnectionHandler.readcCs-|jr|jj|�S|jj|�SdS)N)r�rr?r-)rIr�rrrrys	z*ThreadedEchoServer.ConnectionHandler.writecCs*|jr|jj�n
|jj�dS)N)r�rer?)rIrrrres	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�rj�striprerr�connectionchattyrrrr�r�r?r�r�r�r�r(r�rr�)rI�msgZstrippedr_Zctyperrr�run�sb		



	#	


	z(ThreadedEchoServer.ConnectionHandler.runN)
rrr�__doc__r�r�rjrrer�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�rr2rDr@rr7r-�set_npn_protocols�set_alpn_protocolsr
r�r�r�rr?r�	bind_portr��flag�activer�r�r�r�r�r�r�r�)rIZcertificaterB�certreqs�cacertsr�r�r�Z
npn_protocolsZalpn_protocolsr�r�rrrr��s<									zThreadedEchoServer.__init__cCs$|jtj��|jj�|S)N)�startr��Eventr��wait)rIrrr�	__enter__�s
zThreadedEchoServer.__enter__cGs|j�|j�dS)N)r�r)rIr7rrr�__exit__�s
zThreadedEchoServer.__exit__cCs||_tjj|�dS)N)r�r�r�r�)rIr�rrr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 rp)r?r2r�r�r�r�rKrrr�rrrr�r�r�rrr3�KeyboardInterruptr�re)rIZnewconnZconnaddrZhandlerrrrr��s&
		
	

zThreadedEchoServer.runcCs
d|_dS)NF)r�)rIrrrr�szThreadedEchoServer.stop)rrrr�r�r�r�r�r�r�r�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)Nr6Tr7r�F)rrr�asyncore�dispatcher_with_sendr��_ssl_accepting�_do_ssl_handshake)rI�connr7rrrr�s	z8AsyncoreEchoServer.EchoServer.ConnectionHandler.__init__cCs?t|jtj�r;x#|jj�dkr:|j�qWdS)NrT)r�rr�	SSLSocketr�Zhandle_read_event)rIrrr�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)
rr�rr�r�ZSSLEOFError�handle_closer3r(r7r=ZECONNABORTEDr)rI�errrrrrszAAsyncoreEchoServer.EchoServer.ConnectionHandler._do_ssl_handshakecCsr|jr|j�nX|jd�}tjrHtjjdt|��|s[|j	�n|j
|j��dS)Niz server:  read %s from client
)rrr)rrrrrr�rer-r�)rIr_rrr�handle_read,s	
	
z;AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_readcCs.|j�tjr*tjjd|j�dS)Nz server:  closed connection %s
)rerrrrrr)rIrrrr8s
	z<AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_closecCs�dS)Nr)rIrrrr=sz<AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_errorN)	rrrr�rrrrrrrrrr�
sr�cCsZ||_tjtjtj�}tj|d�|_tjj	||�|j
d�dS)Nr1r()r7rrZSOCK_STREAMrr�r�r��
dispatcherr�r�)rIr7r?rrrr�@s
	z&AsyncoreEchoServer.EchoServer.__init__cCs4tjrtjjd|�|j||j�dS)Nz$ server:  new connection from %s:%s
)rrrrrr�r7)rIZsock_objr�rrr�handle_acceptedGs	z-AsyncoreEchoServer.EchoServer.handle_acceptedcCs�dS)Nr)rIrrrrLsz*AsyncoreEchoServer.EchoServer.handle_errorN)	rrrr�r�r�r�r	rrrrr�
EchoServers3r
cCsPd|_d|_|j|�|_|jj|_tjj|�d|_dS)NFT)	r�r�r
r�r�r�r�r�r�)rIr7rrrr�Os		zAsyncoreEchoServer.__init__cCsd|jj|jfS)Nz<%s %s>)�	__class__rr�)rIrrr�__str__WszAsyncoreEchoServer.__str__cCs$|jtj��|jj�|S)N)r�r�r�r�r�)rIrrr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�rr�Z	close_all)rIr7rrrr�_s	
	
	zAsyncoreEchoServer.__exit__NcCs||_tjj|�dS)N)r�r�r�r�)rIr�rrrr�ks	zAsyncoreEchoServer.startc	CsOd|_|jr|jj�x)|jrJytjd�Wq"Yq"Xq"WdS)NTr)r�r�r�r�Zloop)rIrrrr�os		
zAsyncoreEchoServer.runcCsd|_|jj�dS)NF)r�r�re)rIrrrr�ys	zAsyncoreEchoServer.stop)
rrrr�rr
r�rr�r�r�r�r�rrrrr�sD
r�sFOO
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|
d	d
�t|
�|d	d
�j�t|�f��qxW|jd�|ratj	rat
jjd�|jd
|j�d|j�d|j�d|j�d|j�d|j�i�|j�Wd	QRX|j|d<|j|d<|j|d<Wd	QRX|S)zc
        Launch a server, connect a client to it and try various reads
        and writes.
        r�r�r�Fr�z client:  sending %r...
z client:  read %r
z4bad data <<%r>> (%d) received; expected <<%r>> (%d)
N�sover
z client:  closing connection.
�compressionr��peercert�client_alpn_protocol�client_npn_protocolr��server_alpn_protocols�server_npn_protocols�server_shared_ciphers)r�rrr9r:r�r]r�rrrrrrjr��AssertionErrorrYr�rr�r�r�r�r�rer�r�r�)�client_context�server_context�indatar�r��sni_namerwr�r�arg�outdatarrr�server_params_test}sN	"		
	*
	

rc
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||	dd	d
d	�}Wn]tjk
rX|rT�Yn�tk
r�}z |s�|jtjkr��WYdd}~XnhX|s�tdtj	|�tj	|�f��n6|dk	r�||d
kr�td||d
f��dS)aT
        Try to SSL-connect using *client_protocol* to *server_protocol*.
        If *expect_success* is true, assert that the connection succeeds,
        if it's false, assert that the connection fails.
        Also, if *expect_success* is a string, assert that it is the protocol
        version actually used by the connection.
        Nr@rArBz %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)rr@rArBrrrrrZget_protocol_namer2rrOr�r
rr-r�r7rr3r(r=�
ECONNRESETr)
Zserver_protocolZclient_protocol�expect_successZ	certsreqs�server_options�client_optionsZcerttypeZ	formatstrrrrQrwr�rrr�try_protocol_combo�sP					
	
r!c@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)z2Basic test of an SSL client connecting to a serverrprOr�Tr�N)
rrrrrrZsubTestr�_PROTOCOL_NAMESr2r-r�r)rIrOr�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)Nrpr�r�Fr�zCan't get peer certificate.zConnection cipher is z.
r}z$No subject field in certificate: %s.rv�Python Software FoundationzkMissing or invalid 'organizationName' field in certificate subject; should be 'Python Software Foundation'.r{rz�rvr%)r&)!rrrrrrr2r�rBrr7r�r-r�rrr9r:r�rZr[r�r�rr�r�r�rMrbrGr�rre)rIr�r�rrJr�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)	Nrprrr�r�TzCan't get peer certificate.zcertificate verify failed)rrrrrrr2rDr-�SIGNED_CERTFILErBrr7r{rrLrrr�rrr9r:r�r�rrr8r3�CRLFILE)rIrr�rr�rrJrrr�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)NrpTr�r�r�ryzCan't get peer certificate.Zinvalidz,hostname 'invalid' doesn't match 'localhost'z'check_hostname requires server_hostname)rrrrrrr2rDr-r)rBrrzr7r{r�rrr9r:r�r�rr8rMr[)rIrr�r�rrJrrrrG	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	|�WYd
d
}~Xndtk
r?}z7|jtjkr�tjr-tjjd|�WYd
d
}~XnX|jd�Wd
QRXWd
QRXWd
QRXd
S)
z�Connecting when the server rejects the client's certificate

            Launch a server with CERT_REQUIRED, and check that trying to
            connect to it with a wrong client certificate fails.
            z
wrongcert.pemr�r�r�Fr�r7rBz
SSLError is %r
Nz
socket.error is %r
z'Use of invalid cert should have failed!)rrrrr	rCr�r�rrBrrrDr9r:r�r3rrrrrr(r=rrb)rIr7r�r?rr�rrr�test_wrong_certm	s,!					&	'zThreadedTests.test_wrong_certc
s�tj��tj��tj��tj�t�����fdd�}����fdd�}tjd|�}|j�z|�Wd|j�XdS)z|A brutal shutdown of an SSL server should raise an OSError
            in the client when attempting handshake.
            csH�j��j��j�\}}|j��j��j�dS)N)r�r�rKre)Znewsockr�)�
listener_gone�listener_readyrrr�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�rr9r:rrr(rb)r��ssl_sock)r-r.r�rIrr�	connector�	s


z3ThreadedTests.test_rude_shutdown.<locals>.connector�targetN)	r�r�rrr�r:r�r�r)rIr/r1rr)r-r.r�rrIr�test_rude_shutdown�	s
z ThreadedTests.test_rude_shutdownr.z)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)z9Connecting to an SSLv2 server with various client optionsrpTF�PROTOCOL_SSLv3r N)rrrrrr!rr.rArBr�r;r4rDr!rrr)rIrrr�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dd	tj�ttjtjdd	tjtjB�ttjtj
dd	tj�dS)
z:Connecting to an SSLv23 server with various client optionsrpr.Tz; SSL2 client to SSL23 server test unexpectedly failed:
 %s
Nr4F�TLSv1r)rrrrrr;rr!r�r.r(rMr4rDrArBrrr)rIr�rrr�test_protocol_sslv23�	s:			!
z"ThreadedTests.test_protocol_sslv23r4z)OpenSSL is compiled without SSLv3 supportcCs�tjrtjjd�ttjtjd�ttjtjdtj�ttjtjdtj	�t
td�r�ttjtjd�ttjtjddtj
�ttjtjd�t�r�ttjtjddtj�dS)z9Connecting to an SSLv3 server with various client optionsrpZSSLv3r.Fr N)rrrrrr!rr4rArBr;r.r�rrDr!r)rIrrr�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)z8Connecting to a TLSv1 server with various client optionsrpr6r.Fr4r N)rrrrrr!rrDrArBr;r.r4r�r)rIrrr�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)znConnecting to a TLSv1.1 server with various client options.
               Testing against older TLS versions.rpzTLSv1.1r.Fr4r N)rrrrrr!rr:r;r.r4r��
OP_NO_TLSv1_1rD)rIrrr�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)	znConnecting to a TLSv1.2 server with various client options.
               Testing against older TLS versions.rpzTLSv1.2rr r.Fr4N)rrrrrr!rr=rrr;r.r4r�Z
OP_NO_TLSv1_2rDr:)rIrrr�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)z6Switching from clear text to encrypted and back again.�msg 1�MSG 2�STARTTLS�MSG 3�msg 4�ENDTLS�msg 5�msg 6rBr�Tr�r�Frrpz 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
N)r?r@rArBrCrDrErF)r�r�rrDrr�r9r:r�rrrrrrjr-r)r�r�rrr�re)	rIZmsgsr��wrappedrrrrr�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|�dkr|jt|��}tjrtjjdt|�|f�Wd|j�X|j||�dS)
z8Using socketserver to create and manage SSL connections.r7rp�rbNr1zhttps://localhost:%d/%srr�r�zcontent-lengthrz/ client: read %d bytes from remote server '%s'
)r�r�rrrrrrrjr�rr�splitrry�urllibZrequestZurlopen�infor�rrYrerL)rIr�r:r	r
Zurlr�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)z'Check the example asyncore integration.rpsFOO
z	127.0.0.1z client:  sending %r...
z client:  read %r
z4bad data <<%r>> (%d) received; expected <<%r>> (%d)
Nr
sover
z client:  closing connection.
z client:  connection closed.
)rrrrrr�r�rrrr9r�rjr�rbrYre)rIrr�rrrrr�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�d t|�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�d t|�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)/z Test recv(), send() and friends.rpr�rBr�r�Tr�Fr6r7r�r�cs-tdd�}�j|�}|d|�S)Ns�d)r]r*)�br�)rrr�
_recv_into�
sz0ThreadedTests.test_recv_send.<locals>._recv_intocs3tdd�}�j|�\}}|d|�S)NsrO)r]r,)rPr�r�)rrr�_recvfrom_into�
sz4ThreadedTests.test_recv_send.<locals>._recvfrom_intor-r.zsome.addressr�r)r+r*r,ZPREFIX_rUzpWhile sending with <<{name:s}>> bad data <<{outdata:r}>> ({nout:d}) received; expected <<{indata:r}>> ({nin:d})
r
rNr
ZnoutrZninz>Failed to send with method <<{name:s}>>; expected to succeed.
zFMethod <<{name:s}>> failed with unexpected exception message: {exp:s}
ZexpzrWhile 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.
sdatarrOsover
r�r�r�)%rrrrrr�r�rr@rDrrr9r:r�r-r.r�r)r+r�rjr�rbrrYr[rMrr]rLrZr�ZsendmsgZrecvmsgZrecvmsg_intore)rIr�rQrRZsend_methodsZrecv_methodsZdata_prefixZ	meth_nameZ	send_methrr7rrr�Z	recv_methr_�bufferr)rr�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_eofsFsdatarr@)r�r�r�rhr�rZcreate_connectionr:r�rerrr-rLr)rjr�r*r])rIr�rrrr�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)Nr�rBr�r�Tr�Fr6r7r�r�i csx�j��qWdS)N)r-r)r�rrr�fill_buffer^sz8ThreadedTests.test_nonblocking_send.<locals>.fill_buffer)r�r�rr@rDrrr9r:r�r�r]rZr�r�re)rIr�rVr)r�rr�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�rKre)Zconnsr�wr�r?)�finishr��startedrr�serveps

	$
z3ThreadedTests.test_handshake_timeout.<locals>.server2g�������?z	timed outT)rrrr�r�r�r�r�r�r2r9r8r3rrrer)rIr�r�r[rr�r)rYr�rZr�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.1r6Tcs7�j��j��j�\���jd�dS)Nr)r�r�rKr)r)�evt�peerr�r�rrr[�s

z/ThreadedTests.test_server_accept.<locals>.server2)rr2r�rBrr7r�r-rrrr�rr�r�r�r�r�r9r�rerrrrL)rIr�r�r�r[r�clientZclient_addrr)r]r^r�r�r�test_server_accept�s0







z ThreadedTests.test_server_acceptcCsqtjtj�}|jtj���C}|jt��}|j�WdQRX|j|j	j
t
j�WdQRXdS)N)rr2r�rrrZr(r�rLr<r=�ENOTCONN)rIr�r?r@rrr�test_getpeercert_enotconn�s
z'ThreadedTests.test_getpeercert_enotconncCsqtjtj�}|jtj���C}|jt��}|j�WdQRX|j|j	j
t
j�WdQRXdS)N)rr2r�rrrZr(r�rLr<r=ra)rIr�r?r@rrr�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 availablerBr�Fzno shared cipherr)rr2r�r
r3r�r�r�rrrZr(r9r:r�rGrMr�)rIr�r�rrrr�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)z�
            Basic tests for SSLSocket.version().
            More tests are done in the test_protocol_*() methods.
            rBr�FNr6)
rr2rDr�r�rrrNr�r9r:r�rL)rIr�r�rrrr�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)rr2r�r-r�r r
r�rrr9r:r�rGr�)rIr�r�rrrr�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)z Test tls-unique channel binding.rpr�rBr�r�Tr�Fr6r7r�r�z
tls-uniquez! got channel binding data: {0!r}
�sCB tls-unique
zus-asciiz) got another channel binding data: {0!r}
N)rrrrrr�r�rr@rDrrr9r:r�r�rr�rLrYrjr�r�r�rerk)rIr�rZcb_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}
rZZLIBZRLE)
rr2rDr-r�rrrrrrrrG)rIr�rwrrr�test_compression9s
	zThreadedTests.test_compressionrFz*ssl.OP_NO_COMPRESSION needed for this testcCsdtjtj�}|jt�|jtjO_t||dddd�}|j|dd�dS)Nr�Tr�r)	rr2rDr-r�rrFrrN)rIr�rwrrr�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: )rr2rDr-r�rFrGr
rrJrb)rIr�rwr��partsrrr�test_dh_paramsLs


$zThreadedTests.test_dh_paramscCsRtjtj�}|jt�t||dddd�}|j|dd�dS)Nr�Tr�r)rr2rDr-r�rrN)rIr�rwrrr�test_selected_alpn_protocolYs

z)ThreadedTests.test_selected_alpn_protocolzALPN support requiredcCs�tjtj�}|jt�tjtj�}|jt�|jddg�t||dddd�}|j|dd�dS)NrU�barr�Tr�r)	rr2rDr7r�r-r�rrN)rIrrrwrrr�/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)NrUrnZ	milkshakezhttp/3.0zhttp/4.0r�Tr�zKfailed trying %s (s) and %s (c).
was expecting %s, but got %%s from the %%srr_rr�nothingr�r�)
rr2r=r-r�r�rr3�IS_OPENSSL_1_1rrMrLrY)rI�server_protocols�protocol_tests�client_protocolsr�rrrwr�r��
client_result�
server_resultrrr�test_alpn_protocolsms<





$z!ThreadedTests.test_alpn_protocolscCsRtjtj�}|jt�t||dddd�}|j|dd�dS)Nr�Tr�r)rr2rDr-r�rrN)rIr�rwrrr�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 %%srr_rrrpr�r�)
rr2rDr-r�r�rrMrLrY)rIrrrsrtr�rrrwr�rurvrrr�test_npn_protocols�s*




$z ThreadedTests.test_npn_protocolscCsvtjtj�}|jt�tjtj�}|jt�tjtj�}tj|_|jt	�|||fS)N)
rr2rDr-r)�SIGNED_CERTFILE2rBrr7r{)rIr�
other_contextrrrr�sni_contexts�s


zThreadedTests.sni_contextscCs+|d}|jd|ff|d�dS)Nrrxr})rG)rIrwr
rJrrr�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�)r0�server_name�initial_context)�callsr~rr�
servername_cb�sz6ThreadedTests.test_sni_callback.<locals>.servername_cbr�Tr�supermessageZfakehostnameryZnotfunny)rrSrrLr�)rIrrr�rwr)r�r~rrT�s,
		
	zThreadedTests.test_sni_callbackcCs|j�\}}}dd�}|j|�|jtj��"}t||dddd�}WdQRX|j|jjd�dS)NcSstjS)N)rZALERT_DESCRIPTION_ACCESS_DENIED)r0r�r�rrr�cb_returning_alert�szAThreadedTests.test_sni_callback_alert.<locals>.cb_returning_alertr�Frr�ZTLSV1_ALERT_ACCESS_DENIED)	rrSrZrr3rrLr<r�)rIrr~rr�r@rwrrr�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)r0r�r�rrr�
cb_raising
sz;ThreadedTests.test_sni_callback_raising.<locals>.cb_raisingr�Frr�ZSSLV3_ALERT_HANDSHAKE_FAILURE�ZeroDivisionError)
rrSrZrr3r�captured_stderrrrLr<r�rG�getvalue)rIrr~rr�r@�stderrrwrrr�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)NrUr)r0r�r�rrr�cb_wrong_return_type
szOThreadedTests.test_sni_callback_wrong_return_type.<locals>.cb_wrong_return_typer�Frr�ZTLSV1_ALERT_INTERNAL_ERRORr\)
rrSrZrr3rr�rrLr<r�rGr�)rIrr~rr�r@r�rwrrr�#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-CBC3rrj)rrr�)rr2rDr-r)rBrr7r{r r
rZ
assertGreaterrYrJrb)
rIrrZalg1Zalg2rwr�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)rr2r�rBrr7r�r-r�rrr9r:r�rerZr[rjr)rIr�r�rrrr�,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�FrIi)rrZTESTFNrrh�unlinkrr2r�rBrr7r�r-r�rrr9r:r��sendfilerLr))rIZ	TEST_DATAr:r�r�r�filerrr�
test_sendfileK
s



zThreadedTests.test_sendfileN);rrrr>r$r(r6rr"r+rr,r3r;rr5r7r8r9r<r>rHrMrNrTrUrWr\r`rbrcrdrerDr�r�rfrr�rhrirlrmZHAS_ALPNrorwrxZHAS_NPNr|rr�r�rTr�r�r�r�r�r�rrrrr"�sp&*&!)(:~1&!;		
!!)!
'r"c	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�warningsr4r5Zmac_verZ	win32_ver�catch_warnings�filterwarnings�PendingDeprecationWarning�itemsr��printrrr rHrr;�AttributeErrorr�r�r8r0r1r2r3r)r}r{r.�BADKEYr/rr�existsZ
TestFailedrr?r�r�Zis_resource_enabledr�r�r��
_have_threadsZthreading_setupr"Zrun_unittestZthreading_cleanup)	rr�Zplatsr
r9Zplat�filenameZtests�thread_inforrr�	test_main]
sX			
	
		


r��__main__)]rr6ryrrr�r#r)rVrr=r�ZtempfileZurllib.requestrKrr�r r4r<�
import_moduler�sortedr#rr:rrrr rqr�r
r��fsencoder8r0r1r2r3r4r5r!r�r9rArr*r)r}r{rr�r�r/r.r;r�r�r�r�rGrHrrr!r"r$r-r>rrHr�ZTestCaser?rr�r�r�r�r��ImportErrorr�Ztest.ssl_serversr�r�r�r�rr!r"r�rrrrr�<module>s�	�����)?�MW
�v/;����y9