Your IP : 216.73.216.213


Current Path : /proc/242857/root/opt/alt/python34/lib64/python3.4/test/__pycache__/
Upload File :
Current File : //proc/242857/root/opt/alt/python34/lib64/python3.4/test/__pycache__/test_ssl.cpython-34.pyo

�
f fP	�@sHddlZddlZddlmZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
ZddlZddlZddlZddlZddlZejd�Zeej�ZejZejjd�Zeo1ejdddfkZdd�Zed�Z e	j!e �Z"ed	�Z#ed
�Z$e	j!e#�Z%e	j!e$�Z&ed�Z'ed�Z(d
Z)ed�Z*e	j!e*�Z+edd�Z,edd�Z-ed�Z.ed�Z/ed�Z0ed�Z1dZ2ed�Z3ed�Z4ed�Z5ed�Z6ed�Z7ed�Z8ed�Z9ed�Z:ed�Z;e	j!e;�Z<dd �Z=d!d"�Z>d#d$�Z?d%d&�Z@d'd(�ZAd)d*�ZBejCejDd+�ZEGd,d-�d-ejF�ZGGd.d/�d/ejF�ZHGd0d1�d1ejF�ZIGd2d3�d3ejF�ZJyddlKZKWneLk
r�d4ZMYn�Xd5ZMdd6lNmOZOGd7d8�d8eKjP�ZQGd9d:�d:eKjP�ZRd;d<�ZSd=d5d4dd>d?�ZTdddd@dA�ZUGdBdC�dCejF�ZVd4dDdE�ZWeXdFkrDeW�ndS)G�N)�support�sslZLibreSSL�cGstjjtjjt�|�S)N)�os�path�join�dirname�__file__)�name�r�2/opt/alt/python34/lib64/python3.4/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.pemzself-signed.pythontest.netzselfsigned_pythontestdotnet.pemznullcert.pemzbadcert.pemzXXXnonexisting.pemz
badkey.pemz	nokia.pemznullbytecert.pemztalos-2019-0758.pemz
dh1024.pemcCsBdjtjtj���}tjr>tjj||�ndS)N� )	r�	traceback�format_exception�sys�exc_infor�verbose�stdout�write)�prefixZ
exc_formatrrr�handle_errorLs	rcCs
tjdkS)Nr�	��
�)rrrrr)r�_OPENSSL_API_VERSIONrrrr�can_clear_optionsQsrcCs
tjdkS)Nrr�rr)rrrrr)r�OPENSSL_VERSION_INFOrrrr�no_sslv2_implies_sslv3_helloUsr!cCs
tjdkS)Nrrrr)rrrrr)rr rrrr�have_verify_flagsYsr"cCs�tjdkr�d}tjj||�}|jdd�}|j|�}|ddkr�|dd�d	|d
d�}q�n|S)Nrrrrz%b %d %H:%M:%S %Y GMT�second��0r�)rrrrr)rr�datetimeZstrptime�replaceZstrftime)Z	cert_timeZfmtZdtrrr�asn1time]s(r)cs<ttd�r4tj���fdd��}|S�SdS)N�PROTOCOL_SSLv2cslytjtj�WnHtjk
r^tjd	krZtj�d
krZtjd��nYnX�||�S)Nrrrr�debian�squeeze/sid�z'Patched Ubuntu OpenSSL breaks behaviour)rrrrr)r+r,r-)	r�
SSLContextr*�SSLErrorr �platform�linux_distribution�unittestZSkipTest)�args�kwargs)�funcrr�fnsz$skip_if_broken_ubuntu_ssl.<locals>.f)�hasattrr�	functools�wraps)r5r6r)r5r�skip_if_broken_ubuntu_sslls!	r:z SNI support needed for this testc@s�eZdZdd�Zdd�Zejejdkd�dd��Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�Zejdd��Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zejd!ejkd"�d#d$��Zd%d&�Zd'd(�Zejejd)kd*�d+d,��Zejejd)kd*�d-d.��Z d/d0�Z!d1d2�Z"d3d4�Z#d5S)6�BasicSocketTestscCs�tjtjtjtjtjtjr6tjntjdkrOtj	n|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_constantscCsGtj�}tjr>tjjd||r0dp3df�ntjd�\}}|jt	|�d�|j||dk�|r�tj
d�}|jt	|�d�n|jtjtj
d�|jt
tj
d�|jt
tjd�ttd�r3|jttjd�|jttjdd�ntjd	d
�dS)
Nz
 RAND_status is %d (%s)
zsufficient randomnesszinsufficient randomness�rr&�RAND_egd�foozthis is a random stringg�R@���rJ)r�RAND_statusrrrrr�RAND_pseudo_bytes�assertEqual�lenZ
RAND_bytes�assertRaisesr/�
ValueErrorr7�	TypeErrorrHZRAND_add)rE�v�dataZis_cryptographicrrr�test_random�s$	zBasicSocketTests.test_random�posixzrequires posixcCs�tj�}|s"|jd�ntj�\}}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 randomnessrrGr)rrK�failr�pipe�fork�closerLrMrNr�
BaseException�_exit�
addCleanup�waitpid�read�assertNotEqual)rE�statusZrfdZwfd�pidZchild_random�_Z
parent_randomrrr�test_random_fork�s0


z!BasicSocketTests.test_random_forkcCsVtjjt�}tjr?tjjdt	j
|�d�n|j|dd$�|j|dtd��|j|d
td��|j|dd�|j|dd-�|j|dd/�tjjt
�}tjrtjjdt	j
|�d�n|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�rfrg�rz�rhri�r|�rjrk�r~�rlrm�r�)r{r}rr��rfrg�r��rhri�r��rjrk�r��rlrm�r�)r�r�r�r��rsrm)r��rsrt�rsru)r�r�)rv)rw)ry)r�_ssl�_test_decode_cert�CERTFILErrrrr�pprint�pformatrMr)�	NOKIACERT)rE�prrr�test_parse_cert�s8	$

	$


z BasicSocketTests.test_parse_certcCs�tjjt�}tjr?tjjdt	j
|�d�n|j|idd6dd6d	d
6dd6dd6dd6dd6�dS)Nrdrf�UKrl�cody-carezJun 14 18:00:58 2028 GMTrnzJun 18 18:00:58 2018 GMTroZ02rp�#codenomicon-vm-2.test.lal.cisco.comrqrsrr��version��countryNamer��r���
commonNamer��r�)r�r��r�r��r��r�r��r�)r�r��zDNSr�)r�)rr�r��TALOS_INVALID_CRLDPrrrrrr�r�rM)rEr�rrr�test_parse_cert_CVE_2019_5010�s	$z.BasicSocketTests.test_parse_cert_CVE_2019_5010cCs�tjjt�}tjr?tjjdt	j
|�d�nd.}|j|d|�|j|d|�tjd/kr�d5}nd;}|j|d|�dS)<Nrdrf�US�stateOrProvinceName�Oregonrh�	Beavertonrj�Python Software Foundation�organizationalUnitName�Python Core Developmentrl�null.python.orgexample.org�emailAddress�python-dev@python.orgrqrerrrrs�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>rr�zcountryNamer��r��r�r��r��zlocalityNamer��r��zorganizationNamer��r��r�r��r��z
commonNamer��r��r�r��r�)r�r�r�r�r�r�r�)rrr��DNSr��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�rMr)rEr�rqZsanrrr�test_parse_cert_CVE_2013_4238s0	$	z.BasicSocketTests.test_parse_cert_CVE_2013_4238c	Cs�ttd��}|j�}WdQXtj|�}tj|�}tj|�}|j||�|jtjd�s�|j	d|�n|j
dtjd�s�|j	d|�ndS)N�rrdz-DER-to-PEM didn't include correct header:
%r
z-DER-to-PEM didn't include correct footer:
%r
)�open�
CAFILE_CACERTr^r�PEM_cert_to_DER_certZDER_cert_to_PEM_certrM�
startswithZ
PEM_HEADERrV�endswithZ
PEM_FOOTER)rEr6�pem�d1Zp2�d2rrr�test_DER_to_PEM sz 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�t|krW|j|j
dj|��||f�n.|j|j
d	j|||��||f�dS)
Ni�i0rr���?rz
LibreSSL {:d}zOpenSSL {:d}.{:d}.{:d})rZOPENSSL_VERSION_NUMBERr �OPENSSL_VERSION�assertIsInstance�int�tuple�strZassertGreaterEqual�
assertLessZassertLessEqual�IS_LIBRESSL�
assertTruer��format)	rE�n�t�s�major�minorZfixZpatchr`rrr�test_openssl_version,s0			!z%BasicSocketTests.test_openssl_versionc
Csftjtj�}tj|�}tj|�}tjdtf��~|j	|�d�WdQXdS)Nr-)
�socket�AF_INETr�wrap_socket�weakref�refrZcheck_warnings�ResourceWarningrM)rEr��ss�wrrrr�
test_refcycleKszBasicSocketTests.test_refcyclec
Cs�tjtj�}tj|���}|jt|jd�|jt|jtd��|jt|j	d�|jt|j
td�d�|jt|jd�|jt|jdd�WdQXdS)Nr�x�0.0.0.0r)r�r)
r�r�rr�rO�OSError�recv�	recv_into�	bytearray�recvfrom�
recvfrom_into�send�sendto)rEr�r�rrr�test_wrapped_unconnectedVsz)BasicSocketTests.test_wrapped_unconnectedcCsbx[dD]S}tjtj�}|j|�tj|��}|j||j��WdQXqWdS)N��@)Nrr)r�r��
settimeoutrr�rMZ
gettimeout)rE�timeoutr�r�rrr�test_timeoutbs


zBasicSocketTests.test_timeoutc2Cs�tj�}|jtdtj|dt�|jtdtj|dd�|jtdtj|dddd�tj|dddt��&}|jtd|jtd	f�WdQX|jt	��/}tj��}tj|dt
�WdQXWdQX|j|jj
t
j�|jt	��5}tj�� }tj|dtdt
�WdQXWdQX|j|jj
t
j�|jt	��5}tj�� }tj|dt
dt
�WdQXWdQX|j|jj
t
j�dS)
Nzcertfile must be specified�keyfilez5certfile must be specified for server-side operations�server_sideT�certfiler-z!can't connect in server-side modei�)r��assertRaisesRegexrPrr�r��connect�HOSTrOr��	WRONGCERTrM�	exception�errno�ENOENT)rE�sockr��cmrrr�test_errorsks2			%%zBasicSocketTests.test_errorsc
s�dd�}�fdd�}idGd6}||d�||d�||d	�||d
�||d�||d�idJd6}||d�||d�||d�||d�||d�idMd6}||d�||d�||d�||d�||d�idPd6}||d�||d�||d�idSd6}||d�||d�||d�||d�idVd6}||d�||d�||d�djd�jd �}id|fffd6}|||�idYd6}|||�id\d6}|||�d#jd�jd �}id|fffd6}||d$jd�jd ��||d%jd�jd ��||d&jd�jd ��||d'jd�jd ��id(d)6d_d6dcd06}||d,�||d-�||d/�||d*�id1d)6dnd6}||d:�||d;�||d5�id1d)6dwd6}||d:�id<d)6d�d6d�d06}||d:�id<d)6d�d6d�d06}||d>��jttjdd��jttjid�id�d6}||d@�id�d6}||d@�id�d6}�jtj��}tj|dC�WdQX�jdDt|j	��dS)�NcSstj||�dS)N)r�match_hostname)�cert�hostnamerrr�ok�sz0BasicSocketTests.test_match_hostname.<locals>.okcs �jtjtj||�dS)N)rOr�CertificateErrorr)rr)rErrrV�sz2BasicSocketTests.test_match_hostname.<locals>.failrl�example.comrqzExAmple.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.orgzJun 26 21:41:46 2011 GMTrn�linuxfrz.orgrs�linuxfr.org�linuxfr.com�	othername�
<unsupported>rrzDec 18 23:59:59 2011 GMTrfr�r��
Californiarh�
Mountain Viewrj�
Google Inc�mail.google.comz	gmail.comzDec 18 23:59:59 2099 GMT�blablaz
google.com�a*b.comzaxxb.com�a*b.co*�a*b*.comzaxxbxxc.comztoo many wildcards��
commonNamer�r2)r4�r3r�r5)r6�r3r�r7)r8�r3r�r9)r:�r3r�r;)r<�r3r �r=)r>�r3r#�r?)r@�r3r$�rA)rB�r3r%�rC)rD��DNSr&�rFr'�r(r))rErGrH��countryName�US�rI��stateOrProvinceNamer*�rM��localityNamer+�rP��organizationNamer,�rS�r3r-�rV)rLrOrRrUrW�rJrK�rX�rNr*�rZ�rQr+�r\�rTr,�r^)rYr[r]r_�rJrK�r`�rNr*�rb�rQr+�rd�r3r-�rf)rarcrerg�r(r.)rh�rJrK�ri�rNr*�rk�rQr+�rm�rTr,�ro)rjrlrnrp�r(r.)rq�r3r/�rr)rs�r3r0�rt)ru�r3r1�rv)rw)
�encode�decoderOrPrrrrCr�r)rErrVrr!rr)rEr�test_match_hostname�s�





























































z$BasicSocketTests.test_match_hostnamecCsJtjtj�}tj��&}|jt|j|ddd�WdQXdS)NT�server_hostnamez
some.hostname)rr.�PROTOCOL_SSLv23r�rOrPr�)rE�ctxrrrr�test_server_sidesz!BasicSocketTests.test_server_sidecCsQtjtj�}tj|��*}|jt��|jd�WdQXWdQXdS)Nzunknown-type)r�r�rr�rOrP�get_channel_binding)rEr�r�rrr�test_unknown_channel_bindingsz-BasicSocketTests.test_unknown_channel_bindingz
tls-uniquez*'tls-unique' channel binding not availablecCs�tjtj�}tj|��}|j|jd��WdQXtjtj�}tj|dddt��}|j|jd��WdQXdS)Nz
tls-uniquer
Tr)r�r�rr�ZassertIsNonerr�)rEr�r�rrr�test_tls_unique_channel_bindingsz0BasicSocketTests.test_tls_unique_channel_bindingcCsstjtjtj��}t|�}|jt��}d}tj�WdQX|j	|t
|jjd��dS)Nr)
rr�r�r��reprZassertWarnsr�rZ
gc_collectrCr�Zwarningr3)rEr�r�rrrr�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�WdQXdS)N��SSL_CERT_DIR�
SSL_CERT_FILE)rZget_default_verify_pathsrMrNr�ZDefaultVerifyPathsr�EnvironmentVarGuard�CAPATHr��cafiler)rE�paths�envrrr�test_get_default_verify_paths-s

z.BasicSocketTests.test_get_default_verify_paths�win32zWindows specificc	CsI|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�q�WqeWd}|j
||�dS)	N�CA�ROOTr-r��x509_asn�
pkcs_7_asnz1.3.6.1.5.5.7.3.1)r�r�)r�rZenum_certificatesrOrQ�WindowsError�setr��listr�rMrN�bytesrC�bool�
isinstance�update)	rEZ
trust_oidsZ	storenameZstore�elementr�encZtrust�
serverAuthrrr�test_enum_certificates9s&	

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�r-�rrr�r�)
r�rZ	enum_crlsrOrQr�r�r�r�rMrNr�rC)rEZcrlsr�rrr�test_enum_crlsRs
zBasicSocketTests.test_enum_crlscCsEd}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�WdQXx�td�D]�}ytjj
|�}Wnt	k
rNYqX|j|jt
�|j|jt�|j|jt�|j|jttd�f�qWtjjd�}|j||�|j|tj�|jtjjd�|�|jtjjd�|�|jt	d	��tjjd
�WdQXdS)
N�r��TLS Web Server Authentication�1.3.6.1.5.5.7.3.1rzunknown NID 100000i��i�zunknown object 'serverauth'Z
serverauth)r�z
serverAuthr�r����)r�_ASN1ObjectrM�nid�	shortnameZlongname�oidr�rOrPZfromnidr�ranger�r��typeZfromname)rE�expected�val�i�objrrr�test_asn1objectasB
#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_AUTHrMr�r�r��CLIENT_AUTH)rEr�rrr�test_purpose_enum�sz"BasicSocketTests.test_purpose_enumcCs�tjtjtj�}|j|j�|jt��}tj|dtj	�WdQX|j
t|j�d�tj
tj�}|jt��}|j|�WdQX|j
t|j�d�dS)N�	cert_reqsz!only stream sockets are supported)r�r�Z
SOCK_DGRAMr\rYrO�NotImplementedErrorrr�r<rMr�rr.r|)rEr�Zcxr}rrr�test_unsupported_dtls�sz&BasicSocketTests.test_unsupported_dtlsN)$�__name__�
__module__�__qualname__rFrTr2�
skipUnlessrr
rcr�r�r�r�r�rZcpython_onlyr�rrrrzr~r�r�CHANNEL_BINDING_TYPESr�r�r�rr0r�r�r�r�r�rrrrr;~s0
' (	�'''r;c@s�eZdZedd��Zedd��Zdd�Zedd��Zd	d
�Ze	j
e�d�dd
��Zdd�Z
dd�Zdd�Zdd�Zedd��Zdd�Ze	j
ejd�dd��Zedd��Zedd ��Zd!d"�Zd#d$�Zd%d&�Ze	jejd'kd(�e	jed)�d*d+���Z e	j
ejd'kd,�d-d.��Z!d/d0�Z"d1d2�Z#d3d4�Z$d5S)6�ContextTestscCspxtD]}tj|�qWtj�}|j|jtj�|jttjd�|jttjd�dS)Nr�*r�)�	PROTOCOLSrr.rM�protocolZPROTOCOL_TLSrOrP)rEr�r}rrr�test_constructor�s
zContextTests.test_constructorcCs7x0tD](}tj|�}|j|j|�qWdS)N)r�rr.rMr�)rE�protor}rrr�
test_protocol�s
zContextTests.test_protocolc	CsYtjtj�}|jd�|jd�|jtjd��|jd�WdQXdS)N�ALL�DEFAULTzNo cipher can be selectedz^$:,;?*'dorothyx)rr.�PROTOCOL_TLSv1�set_ciphersrr/)rEr}rrr�test_ciphers�s


zContextTests.test_ciphersc	Cstjtj�}tjtjBtjB}trOtjdkrO|tjO}n|j	||j
�|j
tjO_
|j	|tjB|j
�t�r�|j
tj@|_
|j	||j
�d|_
|j	d|j
tj@�n|j
t��d|_
WdQXdS)Nrr)rrr)rr.r��OP_ALL�OP_NO_SSLv2�OP_NO_SSLv3r�r rBrM�options�OP_NO_TLSv1rrOrP)rEr}�defaultrrr�test_options�s		zContextTests.test_optionscCs�tjtj�}|j|jtj�tj|_|j|jtj�tj|_|j|jtj�tj|_|j|jtj�|jt	��d|_WdQX|jt
��d|_WdQXdS)Nr�)rr.r�rM�verify_moder<r=r>rOrQrP)rEr}rrr�test_verify_mode�s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|_WdQXdS)N�VERIFY_X509_TRUSTED_FIRSTr)rr.r��getattrrM�verify_flags�VERIFY_DEFAULT�VERIFY_CRL_CHECK_LEAFZVERIFY_CRL_CHECK_CHAINZVERIFY_X509_STRICTrOrQ)rEr}�tfrrr�test_verify_flags�szContextTests.test_verify_flagscYCs�tjtj�}|jtdd�|jtdt�|jt|jdt�|jt��}|jt�WdQX|j	|j
jtj�|j
tjd��|jt�WdQX|j
tjd��|jt�WdQXtjtj�}|jtt�|jdtdt�|jdtdt�|j
tjd��|jt�WdQX|j
tjd��|jt�WdQX|j
tjd��|jdtdt�WdQXtjtj�}|j
tjd��|jtt�WdQX|jtdt�|jtdtj��|jtdttj���|jttt�|jtttj��|jttttj���|j
td��|jtdd�WdQX|jtj��|jtdd�WdQX|j
td	��|jtdd
d�WdQXdd
�}dd�}dd�}dd�}dd�}dd�}dd�}	Gdd�d�}
|jtd|�|jtd|�|jtd|�|jtd|
��|jtd|
�j�|jtj��|jtd|�WdQX|j
td	��|jtd|�WdQX|j
td��|jtd|�WdQX|j
td��|jtd|	�WdQX|jtd|	�dS)Nr	zPEM librzkey 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�rxrrrr�
getpass_bytes%sz8ContextTests.test_load_cert_chain.<locals>.getpass_bytescSsttj��S)N)r�r�rxrrrr�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�)rErrr�__call__2szCContextTests.test_load_cert_chain.<locals>.GetPassCallable.__call__cSstS)N)r�)rErrr�getpass4szBContextTests.test_load_cert_chain.<locals>.GetPassCallable.getpassN)r�r�r�r�r�rrrr�GetPassCallable1sr�zmust return a stringz
getpass error)rr.r��load_cert_chainr�rOrQr�rrMrrrrr/�BADCERT�	EMPTYCERT�ONLYCERT�ONLYKEY�BYTES_ONLYCERT�
BYTES_ONLYKEYr��CERTFILE_PROTECTEDr�rxr��ONLYKEY_PROTECTEDrPr�r�)rEr}rr�r�r�r�r�r�r�r�rrr�test_load_cert_chain�sz
z!ContextTests.test_load_cert_chaincCs.tjtj�}|jt�|jdtdd�|jt�|jdtdd�|jt|j�|jt|jddd�|jt��}|jt	�WdQX|j
|jjtj
�|jtjd��|jt�WdQX|jtt�|jtdt�|jt|jdd�dS)Nr�rzPEM libT)rr.r��load_verify_locationsr��BYTES_CERTFILErOrQr�rrMrrrrr/r�r��BYTES_CAPATH)rEr}rrrr�test_load_verify_locationsGs

z'ContextTests.test_load_verify_locationscCs	tt��}|j�}WdQXtj|�}tt��}|j�}WdQXtj|�}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
�WdQX|jtjd��|j
dd�WdQXdS)N�x509_car�cadatarr�rd�head�otherZagain�tail�z
no start lineZbrokenznot enough datasbroken)r�r�r^rr��CAFILE_NEURONIOr.r�rM�cert_store_statsr�rrOrQ�objectrr/)rEr6Z
cacert_pemZ
cacert_derZneuronio_pemZneuronio_derr}Zcombinedrrr�test_load_verify_cadataZsNz$ContextTests.test_load_verify_cadatacCs�tjtj�}|jt�tjdkr>|jt�n|jt	|j�|jt	|jd�|jt
��}|jt�WdQX|j|j
jtj�|jtj��}|jt�WdQXdS)N�nt)rr.r��load_dh_params�DHFILErr
�BYTES_DHFILErOrQ�FileNotFoundErrorrrMrrrr/r�)rEr}rrrr�test_load_dh_params�s
z ContextTests.test_load_dh_paramscCs�x�tD]x}tj|�}|j|j�idd6dd6dd6dd6dd6dd6dd6dd	6dd
6dd6dd6�qWdS)
NrZnumberr
Zconnect_goodZconnect_renegotiate�acceptZaccept_goodZaccept_renegotiate�hits�missesZtimeoutsZ
cache_full)r�rr.rMZ
session_stats)rEr�r}rrr�test_session_stats�s
zContextTests.test_session_statscCs tjtj�}|j�dS)N)rr.r�Zset_default_verify_paths)rEr}rrr�test_set_default_verify_paths�sz*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
prime256v1rIsfoo)rr.r�Zset_ecdh_curverOrQrP)rEr}rrr�test_set_ecdh_curve�s

z ContextTests.test_set_ecdh_curvecCs�tjtj�}|jt|j�|jt|jd�|jt|jd�|jt|j|�dd�}|jd�|j|�dS)Nr$r-cSsdS)Nr)r�
servernamer}rrr�
dummycallback�sz5ContextTests.test_sni_callback.<locals>.dummycallback)rr.r�rOrQ�set_servername_callback)rEr}r
rrr�test_sni_callback�s
zContextTests.test_sni_callbackcCsdtjtj�}|dd�}|j|�tj|�}~~tj�|j|�d�dS)NcSsdS)Nr)rr	r}�cyclerrrr
�sz>ContextTests.test_sni_callback_refcycle.<locals>.dummycallback)	rr.r�rr�r��gc�collect�assertIs)rEr}r
r�rrr�test_sni_callback_refcycle�s

z'ContextTests.test_sni_callback_refcyclecCs�tjtj�}|j|j�idd6dd6dd6�|jt�|j|j�idd6dd6dd6�|jt�|j|j�idd6dd6dd6�|jt�|j|j�idd6dd6dd6�dS)Nrr��crl�x509rr�)	rr.r�rMr�r�r�r�r�)rEr}rrr�test_cert_store_stats�s


z"ContextTests.test_cert_store_statsc	Cs�tjtj�}|j|j�g�|jt�|j|j�g�|jt�|j|j�idd	6td
�d6td�d
6dd6dd6d(d6dd6g�t	t��}|j
�}WdQXtj|�}|j|jd�|g�dS))Nrj�Root CAr��http://www.cacert.orgrl�CA Cert Signing Authorityr��support@cacert.orgrezMar 29 12:29:49 2033 GMTrnzMar 30 12:29:49 2003 GMTroZ00rp�!https://www.cacert.org/revoke.crlrxrqr�r�T��organizationNamer�r��organizationalUnitNamer�r��
commonNamer�r ��emailAddressr�r#)rrr"r%)r�rr�r&�rr�r(�r!r�r*�r$r�r,)r'r)r+r-)rr.r�rM�get_ca_certsr�r�r�r)r�r^r�)rEr}r6r��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�)	rr.r��load_default_certsr�r�r�rOrQ)rEr}rrr�test_load_default_certs	s

z$ContextTests.test_load_default_certsr�znot-Windows specificz!LibreSSL doesn't support env varscCsttjtj�}tj��P}t|d<t|d<|j�|j|j	�idd6dd6dd6�WdQXdS)Nr�r�rrrrr�)
rr.r�rr�r�r�r1rMr�)rEr}r�rrr�test_load_default_certs_envs


z(ContextTests.test_load_default_certs_envzWindows specificcCs�tjtj�}|j�|j�}tjtj�}tj��I}t|d<t|d<|j�|dd7<|j	|j�|�WdQXdS)Nr�r�rr)
rr.r�r1r�rr�r�r�rM)rEr}�statsr�rrr�#test_load_default_certs_env_windows"s



z0ContextTests.test_load_default_certs_env_windowsc
Cs:tj�}|j|jtj�|j|jtj�|j|j�|j|j	tj
@tj
�|j|j	ttdd�@ttdd��tt
��}|j�}WdQXtjdt
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)NrBrr�rr�r?rA)r�create_default_contextrMr�r|r�r>r��check_hostnamer�r�r�r��
SIGNING_CAr^r�r�r�r<)rEr}r6r�rrr�test_create_default_context0s>	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�r7TZpurpose)rZ_create_stdlib_contextrMr�r|r�r<�assertFalser7r�r�r�r>r�r�r�)rEr}rrr�test__create_stdlib_contextXs(		z(ContextTests.test__create_stdlib_contextcCs�tjtj�}|j|j�|jt��d|_WdQXtj|_|j|j�d|_|j	|j�tj
|_d|_|j	|j�|jt��tj|_WdQXd|_|j|j�dS)NTF)rr.r�r:r7rOrPr>r�r�r=r<)rEr}rrr�test_check_hostnameqs			z ContextTests.test_check_hostnameN)%r�r�r�r:r�r�r�r�r�r2r�r"r�r�r�r�rrrrr@r�	needs_snirrrr0r2�skipIfrr0r�r3r5r9r;r<rrrrr��s2	S:
!

!	'(r�c@s4eZdZdd�Zdd�Zdd�ZdS)�
SSLErrorTestscCsztjdd�}|jt|�d�|j|jd�tjdd�}|jt|�d�|j|jd�dS)NrrI)rr/rMr�rZSSLZeroReturnError)rE�errr�test_str�szSSLErrorTests.test_strc	Cs�tjtj�}|jtj��}|jt�WdQX|j|jj	d�|j|jj
d�t|j�}|j|j
d�|�dS)NZPEMZ
NO_START_LINEz"[PEM: NO_START_LINE] no start line)rr.r�rOr/r�r�rMrZlibrary�reasonr�r�r�)rEr}rr�rrr�test_lib_reason�szSSLErrorTests.test_lib_reasoncCs�tjtj�}tj���}|jd�|jd�tj�}|j|j��|jd�|j	|ddd��m}|j
tj��}|j�WdQXt
|j�}|j|jd�|�|j|jjtj�WdQXWdQXdS)N�	127.0.0.1rr&F�do_handshake_on_connectz%The operation did not complete (read))rDr)rr.r�r�Zbind�listenr
�getsockname�setblockingr�rO�SSLWantReadError�do_handshaker�rr�r�rMrZSSL_ERROR_WANT_READ)rEr}r��crrrr�
test_subclass�s


zSSLErrorTests.test_subclassN)r�r�r�rArCrLrrrrr?�s

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�XWdQXdS)Nr�i�zcertificate verify failed�ca_certs)r�transient_internet�REMOTE_HOSTrr�r�r�r<r
rM�getpeercertrYr>rr/�REMOTE_ROOT_CERTr�)rEr�rrr�test_connect�s&
		zNetworkedTests.test_connectcCs�tjt��stjtjtj�dtjdt�}z6|j	d|j
tdf��|j|j��Wd|j
�XWdQXdS)Nr�rNri�)rrOrPrr�r�r�r>rRrM�
connect_exr�rQrY)rEr�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�XWdQXdS)Nr�rNrEFi�rg@)rrOrPrr�r�r�r>rRrHrTrCrZEINPROGRESS�EWOULDBLOCK�selectrJrI�SSLWantWriteErrorr�rQrY)rEr��rcrrr�test_non_blocking_connect_ex�s(		

"z+NetworkedTests.test_non_blocking_connect_excCs�tjt���tjtjtj�dtjdtdd�}z^|j	d�|j
tdf�}|dkr�|jd�n|j|t
jt
jf�Wd|j�XWdQXdS)	Nr�rNrEFgH�����z>i�rz!REMOTE_HOST responded too quickly)rrOrPrr�r�r�r>rRrrT�skipTestrCrZEAGAINrVrY)rEr�rYrrr�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�XWdQXdS)Nr�rNi�)rrOrPrr�r�r�r>rRrTrZECONNREFUSEDZEHOSTUNREACHZ	ETIMEDOUTrVrCrY)rEr�rY�errorsrrr�test_connect_ex_errors		z$NetworkedTests.test_connect_ex_errorcCsytjt��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�XWdQXdS)Ni�r{zcertificate verify failed)rrOrPrr.r|r�r�r�r
rMrQrYr>r�rr/r�rRr�)rEr}r�rrrr�test_connect_with_contexts.	


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�XWdQXdS)Nri�)rrOrPrr.r|r>r�r�r�r�r�r�r
rQr�rYr�)rEr}r�rrrr�test_connect_capath8s&z"NetworkedTests.test_connect_capathcCsFtt��}|j�}WdQXtj|�}tjt��tjtj	�}tj
|_|jd|�|j
tjtj���3}|jtdf�|j�}|j|�WdQXtjtj	�}tj
|_|jd|�|j
tjtj���3}|jtdf�|j�}|j|�WdQXWdQXdS)Nr�i�)r�rRr^rr�rrOrPr.r|r>r�r�r�r�r�r
rQr�)rEr6r�r/r}r�rrrr�test_connect_cadataUs$z"NetworkedTests.test_connect_cadatar�z*Can't use a socket as a file under WindowscCs�tjt���tjtjtj��}|jtdf�|j�}|j	�}|j
�tj|d�|j
�t
j�|jt��}tj|d�WdQX|j|jjtj�WdQXdS)Ni�r)rrOrPrr�r�r�r
�fileno�makefilerYrr^rrrOr�rMrrZEBADF)rEr��fdr6r@rrr�test_makefile_closeks


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|�nWdQXdS)Ni�Fr�rErrz9
Needed %d calls to do_handshake() to establish session.
)rrOrPr�r�r
rHrr�r<rJrIrWrXrYrrrr)rEr��countrrr�test_non_blocking_handshakes(
		


	z*NetworkedTests.test_non_blocking_handshakecsBd�fdd�}|tdt�tjr>|dd�ndS)NcsItj|��4tj||ftj�}|sK�jd||f�ny%tj||ftjdt�}WnHtjk
r�}z%tjr�t	j
jd|�nWYdd}~XnX�jd|||f�tj||ftjd|�}|s�jd||f�ntjr?t	j
jd|||f�nWdQXdS)NzNo server certificate on %s:%s!rNz%s
z$Got server certificate %s for %s:%s!z&
Verified certificate for %s:%s is
%s
)rrOrZget_server_certificater|rVr�r/rrrr)�host�portrr��x)rErr�_test_get_server_certificate�s(	
	*			zPNetworkedTests.test_get_server_certificate.<locals>._test_get_server_certificatei�zipv6.google.com)rPrRrZIPV6_ENABLED)rErkr)rEr�test_get_server_certificate�s	z*NetworkedTests.test_get_server_certificatec'Cstdf}tj|d���tjtjtj�dtjdd��}|j|�WdQXtjtjtj�dtjdd��}|j|�WdQX|j	tj
d��Ktjtj��2}tj|dtjdd�}|j|�WdQXWdQXWdQXdS)	Ni�rr��ciphersr�r�zNo cipher can be selectedz^$:,;?*'dorothyx)rPrrOrr�r�r�r<r
rr/)rE�remoter�rrrrr��szNetworkedTests.test_cipherscCs:tjd
kr&|jdtj�ntjs?|jd�nd}tjjtjjt	�d	�}t
jd���tjtj
�}tj|_|j|�|jtjtj�d
d�}z`|j|�t
jr!tjjd||j�f�tjjdtj|j���nWd|j�XWdQXdS)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)rorp)rr r[r�rDrrrrr	rrOr.r�r>r�r�r�r�r�r
rrrr�cipherr�r�rQrY)rErnZsha256_certr}r�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�WdQXdS)Nri�r)rrOrPrr.r|r>r�r�r�rMr.r�r�r�r
rQr�rYrN)rEr}r�rrrr�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|�WdQXWdQXdS)Ni�)rrOrPrr.r�r|r�r�r�r
r�contextZ_sslobj)rEZctx1Zctx2r�r�rrr�test_context_setget�s	z"NetworkedTests.test_context_setgetN)r�r�r�rSrUrZr\r^r_r`rar2r>rr
rergrlr�rrrsr=rurrrrrM�s'rMFT)�make_https_serverc@s�eZdZGdd�dej�Zdddddddddddd�
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�addrrH�sslconn�	threading�Thread�__init__�daemon)rErxZconnsockrzrrrr~s					z-ThreadedEchoServer.ConnectionHandler.__init__cCs�yA|jjj|jdd�|_|jjj|jj��Wn�tj	t
fk
r�}zf|jjj|�|jjr�t
dt|j�d�nd|_|jj�|j�dSWYdd}~Xn"X|jjjtjkr�|jj�}tjr3|jjr3tjjdtj|�d�n|jjd�}tjr�|jjr�tjjdtt|��d	�q�n|jj�}tjr�|jjr�tjjd
t|�d�tjjdt|jj��d�ndSdS)Nr
Tz'
 server:  bad connection attempt from z:
Fz client cert is rdz cert binary is z bytes
z" server: connection cipher is now z" server: selected protocol is now ) rxrtr�rr{�selected_protocols�append�selected_npn_protocolrr/�ConnectionResetError�conn_errors�chattyrr�rzry�stoprYr�r>rQrrrrrr�r�r�rNrq)rEr@rZcert_binaryrqrrr�	wrap_conns2 	

$*	!z.ThreadedEchoServer.ConnectionHandler.wrap_conncCs*|jr|jj�S|jjd�SdS)Ni)r{r^rr�)rErrrr^=s	
z)ThreadedEchoServer.ConnectionHandler.readcCs-|jr|jj|�S|jj|�SdS)N)r{rrr)rEr�rrrrCs	z*ThreadedEchoServer.ConnectionHandler.writecCs*|jr|jj�n
|jj�dS)N)r{rYr)rErrrrYIs	z*ThreadedEchoServer.ConnectionHandler.closecCs�d|_|jjs(|j�s(dSnx�|jr�yE|j�}|j�}|skd|_|j�n
|dkr�tjr�|jj	r�t
jjd�n|j�dS|jjr
|dkr
tjr�|jj	r�t
jjd�n|jd�|j�sxdSnk|jjr�|j
r�|dkr�tjrV|jj	rVt
jjd	�n|jd�|j
j�|_d|_
tjrx|jj	rxt
jjd
�qxn�|dkrtjr�|jj	r�t
jjd�n|j
jd
�}|jt|�jd�d�nftjre|jj	re|j
r6dp9d}t
jjd|||j�|f�n|j|j��Wq+tk
r�|jjr�td�n|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:
)ryrx�starttls_serverr�r^�striprYrr�connectionchattyrrrr{�unwraprrr�rx�lowerr�r�rr�)rE�msgZstrippedrSZctyperrr�runOsb		



	#	


	z(ThreadedEchoServer.ConnectionHandler.runN)
r�r�r��__doc__r~r�r^rrYr�rrrr�ConnectionHandler
s
#r�NTFcCs>|
r|
|_n�tj|dk	r*|ntj�|_|dk	rK|ntj|j_|rs|jj|�n|r�|jj|�n|r�|jj|�n|	r�|jj	|	�n||_
||_||_t
j
�|_tj|j�|_d|_d|_g|_g|_tjj|�d|_dS)NFT)rtrr.r�r<r�r�r��set_npn_protocolsr�r�r�r�r�rr�	bind_portri�flag�activer�r�r|r}r~r)rEZcertificate�ssl_version�certreqs�cacertsr�r�r�Z
npn_protocolsrmrtrrrr~�s4							zThreadedEchoServer.__init__cCs$|jtj��|jj�|S)N)�startr|�Eventr��wait)rErrr�	__enter__�s
zThreadedEchoServer.__enter__cGs|j�|j�dS)N)r�r)rEr3rrr�__exit__�s
zThreadedEchoServer.__exit__cCs||_tjj|�dS)N)r�r|r}r�)rEr�rrrr��s	zThreadedEchoServer.startcCs|jjd�|jjd�d|_|jrB|jj�nx�|jr�yu|jj�\}}tjr�|j	r�t
jjdt
|�d�n|j|||�}|j�|j�WqEtjk
r�YqEtk
r�|j�YqEXqEW|jj�dS)Ng�������?r&Tz server:  new connection from rd)rrrFr�r�r�rrrr�rrrr�r�r�rr�r�KeyboardInterruptr�rY)rEZnewconnZconnaddrZhandlerrrrr��s&			

zThreadedEchoServer.runcCs
d|_dS)NF)r�)rErrrr��szThreadedEchoServer.stop)r�r�r�r|r}r�r~r�r�r�r�r�rrrrrws|	rwc@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
TrrEF)rr�r��asyncore�dispatcher_with_sendr~�_ssl_accepting�_do_ssl_handshake)rE�connrrrrr~�s	z8AsyncoreEchoServer.EchoServer.ConnectionHandler.__init__cCsBt|jtj�r>x&|jj�dkr:|j�qWndS)NrT)r�r�r�	SSLSocket�pendingZhandle_read_event)rErrr�readable�sz8AsyncoreEchoServer.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�rJrrIrXZSSLEOFError�handle_closer/r�r3rZECONNABORTEDr�)rE�errrrrr��szAAsyncoreEchoServer.EchoServer.ConnectionHandler._do_ssl_handshakecCsu|jr|j�n[|jd�}tjrKtjjdt|��n|s^|j	�n|j
|j��dS)Niz server:  read %s from client
)r�r�r�rrrrrr�rYrr�)rErSrrr�handle_read�s	
	
z;AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_readcCs1|j�tjr-tjjd|j�ndS)Nz server:  closed connection %s
)rYrrrrrr�)rErrrr��s
	z<AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_closecCs�dS)Nr)rErrrrsz<AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_errorN)	r�r�r�r~r�r�r�r�rrrrrr��sr�cCsZ||_tjtjtj�}tj|d�|_tjj	||�|j
d�dS)Nr-r&)rr�r�ZSOCK_STREAMrr�rir��
dispatcherr~rF)rErrrrrr~s
	z&AsyncoreEchoServer.EchoServer.__init__cCs7tjr tjjd|�n|j||j�dS)Nz$ server:  new connection from %s:%s
)rrrrrr�r)rEZsock_objrzrrr�handle_accepteds	z-AsyncoreEchoServer.EchoServer.handle_acceptedcCs�dS)Nr)rErrrrsz*AsyncoreEchoServer.EchoServer.handle_errorN)	r�r�r�r�r�r�r~r�rrrrr�
EchoServer�s3r�cCsPd|_d|_|j|�|_|jj|_tjj|�d|_dS)NFT)	r�r�r�rxrir|r}r~r)rErrrrr~s		zAsyncoreEchoServer.__init__cCsd|jj|jfS)Nz<%s %s>)�	__class__r�rx)rErrr�__str__szAsyncoreEchoServer.__str__cCs$|jtj��|jj�|S)N)r�r|r�r�r�)rErrrr�s
zAsyncoreEchoServer.__enter__cGsltjrtjjd�n|j�tjrBtjjd�n|j�tjrhtjjd�ndS)Nz cleanup: stopping server.
z! cleanup: joining server thread.
z cleanup: successfully joined.
)rrrrrr�r)rEr3rrrr�$s	
	
	zAsyncoreEchoServer.__exit__NcCs||_tjj|�dS)N)r�r|r}r�)rEr�rrrr�.s	zAsyncoreEchoServer.startc	CsRd|_|jr"|jj�nx)|jrMytjd�Wq%Yq%Xq%WdS)NTr)r�r�r�r�Zloop)rErrrr�2s		zAsyncoreEchoServer.runcCsd|_|jj�dS)NF)r�rxrY)rErrrr�<s	zAsyncoreEchoServer.stop)
r�r�r�r�r�r�r~r�r�r�r�r�r�rrrrr��sD

r�cCs�ttdtjdtdddd�}|�]yMtj��;}tj|d|dtj�}|jt|j	f�WdQXWn�tj
k
r�}z,tjr�t
jjd	|jd
�nWYdd}~Xn�tk
r}z,tjrt
jjd|jd
�nWYdd}~Xnotk
ry}zC|jtjkrA�ntjrgt
jjdt|��nWYdd}~Xn
Xtd
��WdQXdS)z�
        Launch a server with CERT_REQUIRED, and check that trying to
        connect to it with the given client certificate fails.
        r�r�r�Fr�rr�Nz
SSLError is %s
rz
OSError is %s
z\OSError is %s
z'Use of invalid cert should have failed!)rwr�rr>r�r�r�r
rrir/rrrrrr3r�rrr��AssertionError)rrxrr�rjrrr�
bad_cert_test@s.			 	0	0	0r�sFOO
cCs�i}td|d|dd�}|��|jtj�d|���}|jt|jf�x�|t|�t|�gD]�}	|r�tj	r�t
jjd|�q�n|j|	�|j
�}
|r�tj	r�t
jjd|
�q�n|
|j�krxtd|
d	d
�t|
�|d	d
�j�t|�f��qxqxW|jd�|rvtj	rvt
jjd�qvn|ji|j�d
6|j�d6|j�d6|j�d6�|j�Wd	QX|j|d<Wd	QX|S)zc
        Launch a server, connect a client to it and try various reads
        and writes.
        rtr�r�Fr{z client:  sending %r...
z client:  read %r
z4bad data <<%r>> (%d) received; expected <<%r>> (%d)
N�sover
z client:  closing connection.
�compressionrq�peercert�client_npn_protocolZserver_npn_protocols)rwr�r�r
rrir��
memoryviewrrrrrr^r�r�rNr�r�rqrQr�rYr�)�client_context�server_context�indatar�r��sni_namer4rxr��arg�outdatarrr�server_params_test^sF	"		
	-
		


r�cCs�|dkrtj}nidtj6dtj6dtj6|}tjr�|rUdpXd}tjj|tj	|�tj	|�|f�ntj
|�}|j|O_tj
|�}	|	j|O_|jtj
kr�|jd�nx7||	fD])}
||
_|
jt�|
jt�q�Wyt||	ddd	d�Wnctjk
re|ra�nYnttk
r�}z#|s�|jtjkr��nWYdd}~Xn2X|s�td
tj	|�tj	|�f��ndS)Nr<r=r>z %s->%s %s
z
 {%s->%s} %s
r�r�Fr�z5Client protocol %s succeeded with server protocol %s!)rr<r=r>rrrrrZget_protocol_namer.r�r�r|r�r�r�r�r�r�r/r�rZ
ECONNRESETr�)Zserver_protocolZclient_protocol�expect_successZ	certsreqs�server_options�client_optionsZcerttypeZ	formatstrr�r�r}r@rrr�try_protocol_combo�sJ


		

r�c@s�eZdZedd��Zdd�Zeje�d�dd��Z	dd	�Z
d
d�Zdd
�Zdd�Z
dd�Zdd�Zeejeed�d�dd���Zedd��Zeejeed�d�dd���Zedd��Zeejeed �d!�d"d#���Zeejeed$�d%�d&d'���Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Z ejej!d:�d;d<��Z"ejd=ej#kd>�d?d@��Z$dAdB�Z%ejeedC�dD�dEdF��Z&dGdH�Z'dIdJ�Z(ejej)dK�dLdM��Z*dNdO�Z+dPdQ�Z,e-dRdS��Z.e-dTdU��Z/e-dVdW��Z0e-dXdY��Z1dZd[�Z2d\S)]�
ThreadedTestscCs�tjrtjjd�nxctD][}|jdtj|��:tj	|�}|j
t�t||dddd�WdQXq#WdS)z2Basic test of an SSL client connecting to a serverrdr�r�Tr�N)
rrrrrr�ZsubTestr�_PROTOCOL_NAMESr.r�r�r�)rEr�rtrrr�	test_echo�s	

zThreadedTests.test_echocCs�tjrtjjd�ntjtj�}tj|_	|j
t�|jt�t
d|dd�}|�x|jtj�dd�}|jt|jf�|jt��|j�WdQX|j�|j�}|j|d�|j�}tjr:tjjtj|�d�tjjdt|�d�nd	|krc|jd
tj|��nd|d	kr�|jd
�n|jd|�|jd|�tj|d�}tj|d�}|j||�|j �WdQXdS)Nrdrtr�FrEzCan't get peer certificate.zConnection cipher is z.
rqz$No subject field in certificate: %s.rj�Python Software FoundationzkMissing or invalid 'organizationName' field in certificate subject; should be 'Python Software Foundation'.rorn�zorganizationNamer�)r�)!rrrrrrr.r|r>r�r�r�r�rwr�r�r
rrirOrPrQrJr�rqr�r�r�rVrCZcert_time_to_secondsr�rY)rErtrxr�rrqZbefore�afterrrr�test_getpeercert�sB	

	
	!	

zThreadedTests.test_getpeercertz!verify_flags need OpenSSL > 0.9.8c/Cstjrtjjd�ntjtj�}|jt	�tjtj�}tj
|_|jt
�ttdd�}|j|jtj|B�td|dd�}|�U|jtj���9}|jt|jf�|j�}|j|d�WdQXWdQX|jtjO_td|dd�}|�U|jtj���9}|jtjd��|jt|jf�WdQXWdQXWdQX|jt�td|dd�}|�U|jtj���9}|jt|jf�|j�}|j|d�WdQXWdQXdS)	Nrdr�rrtr�TzCan't get peer certificate.zcertificate verify failed)rrrrrrr.r�r��SIGNED_CERTFILEr>r�r�r8r�rMr�r�rwr�r�r
rrirQr�r�rr/�CRLFILE)rEr�rtr�rxr�rrrr�test_crl_check�s:	


(
zThreadedTests.test_crl_checkc5Cs�tjrtjjd�ntjtj�}|jt	�tjtj�}tj
|_d|_|j
t�td|dd�}|�[|jtj�dd��9}|jt|jf�|j�}|j|d�WdQXWdQXtd|dd�}|�[|jtj�dd��9}|jtjd	��|jt|jf�WdQXWdQXWdQXtd|dd�}|�@tj��-}|jtd
��|j|�WdQXWdQXWdQXdS)NrdTrtr�r{rmzCan't get peer certificate.Zinvalidz,hostname 'invalid' doesn't match 'localhost'z'check_hostname requires server_hostname)rrrrrrr.r�r�r�r>r�r7r�r8rwr�r�r
rrirQr�rrrP)rEr�rtrxr�rrrrr<s8	
	

(	
z!ThreadedTests.test_check_hostnamecCs2ttjjtjjt�p$tjd��dS)z"Connecting with an empty cert fileznullcert.pemN)r�rrrrr	�curdir)rErrr�test_empty_cert?s$zThreadedTests.test_empty_certcCs2ttjjtjjt�p$tjd��dS)z<Connecting with a badly formatted certificate (syntax error)zbadcert.pemN)r�rrrrr	r�)rErrr�test_malformed_certCs$z!ThreadedTests.test_malformed_certcCs2ttjjtjjt�p$tjd��dS)z(Connecting with a non-existing cert filez
wrongcert.pemN)r�rrrrr	r�)rErrr�test_nonexisting_certGs$z#ThreadedTests.test_nonexisting_certcCs2ttjjtjjt�p$tjd��dS)z4Connecting with a badly formatted key (syntax error)z
badkey.pemN)r�rrrrr	r�)rErrr�test_malformed_keyKs$z ThreadedTests.test_malformed_keyc
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.
            csK�jd��j��j�\}}|j��j��j�dS)Nr&)rFr�rrY)Znewsockrz)�
listener_gone�listener_readyr�rr�listener^s



z2ThreadedTests.test_rude_shutdown.<locals>.listenercsu�j�tj��Y}|jt�f��j�ytj|�}Wntk
r]YnX�jd�WdQXdS)Nz2connecting to closed SSL socket should have failed)r�r�r
rrr�r�rV)rK�ssl_sock)r�r�rirErr�	connectorfs


z3ThreadedTests.test_rude_shutdown.<locals>.connector�targetN)	r|r�r�rr�rr}r�r)rEr�r�r�r)r�r�rir�rEr�test_rude_shutdownPs
z ThreadedTests.test_rude_shutdownr*z)OpenSSL is compiled without SSLv2 supportcCs+tjrtjjd�nttjtjd�ttjtjdtj�ttjtjdtj	�ttjtj
d�ttd�r�ttjtjd�nttjtj
d�t�r�ttjtj
ddtj�nttjtj
ddtj�ttjtj
ddtj�dS)z9Connecting to an SSLv2 server with various client optionsrdTF�PROTOCOL_SSLv3r�N)rrrrrr�rr*r=r>r|r7r�r�r!r�r�r�)rErrr�test_protocol_sslv2ys 		

z!ThreadedTests.test_protocol_sslv2cCs0tjrtjjd�nttd�r�yttjtj	d�Wq�t
k
r�}z+tjr�tjjdt|��nWYdd}~Xq�Xnttd�r�ttjtjd�nttjtjd�ttjtj
d�ttd�rttjtjdtj�nttjtjdtj�ttjtj
dtj�ttd�r~ttjtjdtj�nttjtjdtj�ttjtj
dtj�ttd�r�ttjtjddtj�nttjtjddtjtjB�ttjtj
ddtj�dS)	z:Connecting to an SSLv23 server with various client optionsrdr*Tz; SSL2 client to SSL23 server test unexpectedly failed:
 %s
Nr�Fr�)rrrrrr7rr�r|r*r�r�r�r�r=r>r�r�r�)rErjrrr�test_protocol_sslv23�s:			'
z"ThreadedTests.test_protocol_sslv23r�z)OpenSSL is compiled without SSLv3 supportcCs�tjrtjjd�nttjtjd�ttjtjdtj�ttjtjdtj	�t
td�r�ttjtjd�nttjtjddtj
�ttjtjd�t�r�ttjtjddtj�ndS)z9Connecting to an SSLv3 server with various client optionsrdTr*Fr�N)rrrrrr�rr�r=r>r7r*r|r�r�r!r�)rErrr�test_protocol_sslv3�s	
	z!ThreadedTests.test_protocol_sslv3cCs�tjrtjjd�nttjtjd�ttjtjdtj�ttjtjdtj	�t
td�r�ttjtjd�nt
td�r�ttjtjd�nttjtj
ddtj�dS)z8Connecting to a TLSv1 server with various client optionsrdTr*Fr�r�N)rrrrrr�rr�r=r>r7r*r�r|r�)rErrr�test_protocol_tlsv1�s	z!ThreadedTests.test_protocol_tlsv1�PROTOCOL_TLSv1_1zTLS version 1.1 not supported.cCs�tjrtjjd�nttjtjd�ttd�rZttjtj	d�nttd�r�ttjtj
d�nttjtjddtj�ttjtjd�ttjtj
d�ttj
tjd�dS)znConnecting to a TLSv1.1 server with various client options.
               Testing against older TLS versions.rdTr*Fr�r�N)rrrrrr�rr�r7r*r�r|�
OP_NO_TLSv1_1r�)rErrr�test_protocol_tlsv1_1�s	
z#ThreadedTests.test_protocol_tlsv1_1�PROTOCOL_TLSv1_2zTLS version 1.2 not supported.c	Cs3tjrtjjd�nttjtjddtjtj	Bdtjtj	B�t
td�rzttjtjd�nt
td�r�ttjtjd�nttjtj
ddtj�ttj
tjd�ttjtjd�ttjtjd�ttjtjd�ttjtjd�dS)	znConnecting to a TLSv1.2 server with various client options.
               Testing against older TLS versions.rdTr�r�r*Fr�N)rrrrrr�rr�r�r�r7r*r�r|Z
OP_NO_TLSv1_2r�r�)rErrr�test_protocol_tlsv1_2�s 	
z#ThreadedTests.test_protocol_tlsv1_2c	Cs8d}ttd	tjd
dddd
d�}d}|��tj�}|jd�|jt|jf�t	j
r�tjj
d�nxJ|D]B}t	j
r�tjj
d|�n|r�|j
|�|j�}n|j|�|jd�}|j�j�}|dkr^|jd�r^t	j
r=tjj
d|�ntj|d	tj�}d}q�|dkr�|jd�r�t	j
r�tjj
d|�n|j�}d}q�t	j
r�tjj
d|�q�q�Wt	j
r�tjj
d�n|r|j
d�n
|jd�|r$|j�n
|j�WdQXdS)z6Switching from clear text to encrypted and back again.�msg 1�MSG 2�STARTTLS�MSG 3�msg 4�ENDTLS�msg 5�msg 6r�r�Tr�r�Frrdz 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�r�r�r�r�r�r�)rwr�rr�r�rHr
rrirrrrrr^rr�r�r�r�r�r�rY)	rEZmsgsrx�wrappedr�r�r�r�r�rrr�
test_starttls		s`			
	
		

									

zThreadedTests.test_starttlscCs<t|dt�}tjr.tjjd�nttd��}|j�}WdQXd}d|j	t
jjt�df}t
jdt�}tjj|d	|�}zu|j�jd
�}|rt|�dkr|jt|��}tjrtjjdt|�|f�qnWd|j�X|j||�dS)
z:Using a SocketServer to create and manage SSL connections.rrd�rbNr-zhttps://localhost:%d/%srr�rtzcontent-lengthrz/ client: read %d bytes from remote server '%s'
)rvr�rrrrrr�r^rirr�splitrr6�urllibZrequestZurlopen�info�getr�rNrYrM)rErxr6r�r�ZurlrtZdlenrrr�test_socketserverC	s(	 		zThreadedTests.test_socketservercCspd}tjr"tjjd�nd}tt�}|�0tjt	j	��}|j
d|jf�tjr�tjjd|�n|j|�|j�}tjr�tjjd|�n||j
�kr|jd|dd	�t|�|dd	�j
�t|�f�n|jd
�tjr@tjjd�n|j�tjrftjjd�nWdQXdS)
z'Check the example asyncore integration.zTEST MESSAGE of mixed case
rdsFOO
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�rr�r�r
rir^r�rVrNrY)rEr�rxr�r�rrr�test_asyncore_server]	s4			
	'
	
	z"ThreadedTests.test_asyncore_servercs4tjrtjjd�nttdtjdtj	dtdddd�}|��tj
tj�d	dd
tdtdtjdtj	���jt
|jf��fd
d�}�fdd�}d�jdgfd�jddgfd�jdgfg}d�jdgfd�jddgfd|dgfd|dgfg}d}x1|D])\}}}	}
||jd�}y�|||
��j�}||j�kr|jdjd|d|dd�d t|�d!|dd�d"t|���nWq]tk
r�}
z^|	r<|jd#jd|��nt|
�j|�ss|jd$jd|d%|
��nWYdd}
~
Xq]Xq]Wx;|D]3\}}}	}
||jd�}y��j|�||
�}||j�kr8|jd&jd|d|dd�d t|�d!|dd�d"t|���nWq�tk
r�}
zh|	rp|jd'jd|��nt|
�j|�s�|jd$jd|d%|
��n�j�WYdd}
~
Xq�Xq�W|jt�jd(g�|jt�j d)�|jt�j!t"d)���jd*��j#�WdQXdS)+z Test recv(), send() and friends.rdr�r�r�r�Tr�Fr
rrNr�cs-tdd�}�j|�}|d|�S)Ns�d)r�r�)�brf)r�rr�
_recv_into�	sz0ThreadedTests.test_recv_send.<locals>._recv_intocs3tdd�}�j|�\}}|d|�S)Nsr�)r�r)r�rfrz)r�rr�_recvfrom_into�	sz4ThreadedTests.test_recv_send.<locals>._recvfrom_intorrzsome.address�sendallr�r�r�rZPREFIX_r"zpWhile sending with <<{name:s}>> bad data <<{outdata:r}>> ({nout:d}) received; expected <<{indata:r}>> ({nin:d})
r
r�Nr�Znoutr�Zninz>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.
sdatar�sover
)$rrrrrrwr�rr<r�r�r�r
rrirrr�r�r�rxr^r�rVr�rNrPr�r�rOr�ZsendmsgZrecvmsgZrecvmsg_intor�rY)rErxr�r�Zsend_methodsZrecv_methodsZdata_prefixZ	meth_nameZ	send_methr�r3r�r�r@Z	recv_methr)r�r�test_recv_send|	s�						
	'	
	*
	'	
	!	
zThreadedTests.test_recv_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��jd��j�g}xT�sstj�gggd�\}}}�|kr |j�j�d�q q Wx|D]}|j�q{WdS)Nr&g�������?r)rFr�rWr�rrY)Zconnsr��wr@r)�finishrx�startedrr�serve�	s

	$
z3ThreadedTests.test_handshake_timeout.<locals>.server�g�������?z	timed outT)r�r�rr�r|r�r}r�r�rr
rrrr�rYr)rErhrir�r�rKr)r�rxr�r�test_handshake_timeout�	s6





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
Tcs:�jd��j��j�\���jd�dS)Nr&r)rFr�rr�r)�evt�peerrnrxrrr�/
s

z/ThreadedTests.test_server_accept.<locals>.server�)rr.r|r>r�r�r�r�r�r�rr�r�r|r�r}r�r�r
rGrYrr�r�rM)rErtrhrir�r��clientZclient_addrr)r�r�rnrxr�test_server_accept 
s0







z ThreadedTests.test_server_acceptcCsotjtj�}|jtj���B}|jt��}|j�WdQX|j|j	j
t
j�WdQXdS)N)rr.r|r�r�rOr�rQrMrr�ENOTCONN)rErtrrrrr�test_getpeercert_enotconnF
s
z'ThreadedTests.test_getpeercert_enotconncCsotjtj�}|jtj���B}|jt��}|j�WdQX|j|j	j
t
j�WdQXdS)N)rr.r|r�r�rOr�rJrMrrr)rErtrrrrr�test_do_handshake_enotconnM
s
z(ThreadedTests.test_do_handshake_enotconnc Cs�tjtj�}y|jd�Wn"tjk
rG|jd�YnXttdtjdd��Q}|jt	j	���3}|j
t��|jt
|jf�WdQXWdQXWdQX|jdt|jd��dS)NZDESzno DES cipher availabler�r�Fzno shared cipherr)rr.r|r�r/r[rwr�r�r�rOr�r
rrirCr�r�)rErtrxr�rrr�test_default_ciphersT
s		(z"ThreadedTests.test_default_ciphersz"test requires ECDH-enabled OpenSSLcCs�tjtj�}|jt�tjdkr>|jd�ntd|��U}|jt	j	���7}|j
t|jf�|j
d|j�d�WdQXWdQXdS)Nrrz
ECCdraft:ECDHrtZECDH)rrr)rr.r|r�r�r r�rwr�r�r
rrirCrq)rErtrxr�rrr�test_default_ecdh_curvec
s
z%ThreadedTests.test_default_ecdh_curvez
tls-uniquez*'tls-unique' channel binding not availablecCsItjrtjjd�nttdtjdtj	dtdddd�}|��tj
tj�d	dd
tdtdtjdtj	�}|jt
|jf�|jd
�}tjr�tjjdj|��n|j|�|jt|�d�|jd�|j�j�}|j|t|�jd��|j�tj
tj�d	dd
tdtdtjdtj	�}|jt
|jf�|jd
�}tjr�tjjdj|��n|j||�|j|�|jt|�d�|jd�|j�j�}|j|t|�jd��|j�WdQXdS)z Test tls-unique channel binding.rdr�r�r�r�Tr�Fr
rrNr�z
tls-uniquez! got channel binding data: {0!r}
�sCB tls-unique
zus-asciiz) got another channel binding data: {0!r}
N)rrrrrrwr�rr<r�r�r�r
rrirr�ZassertIsNotNonerMrNr^r�r�rxrYr_)rErxr�Zcb_dataZpeer_data_reprZnew_cb_datarrrr�t
s\							


	
		


	z-ThreadedTests.test_tls_unique_channel_bindingcCs�tjtj�}|jt�t||dddd�}tjrctj	j
dj|d��n|j|ddddh�dS)Nr�Tr�z got compression: {!r}
r�ZZLIBZRLE)
rr.r�r�r�r�rrrrrr�rC)rErtr4rrr�test_compression�
s
	 zThreadedTests.test_compressionrBz*ssl.OP_NO_COMPRESSION needed for this testcCsdtjtj�}|jt�|jtjO_t||dddd�}|j|dd�dS)Nr�Tr�r�)	rr.r�r�r�r�rBr�r)rErtr4rrr�test_compression_disabled�
s
z'ThreadedTests.test_compression_disabledcCs�tjtj�}|jt�|jt�|jd�t||dddd�}|dd}|j	d�}d|kr�d	|kr�d
|kr�|j
d|d�ndS)NZkEDHr�Tr�rqr�-ZADHZEDHZDHEzNon-DH cipher: )rr.r�r�r�r�r�r�r�r�rV)rErtr4rq�partsrrr�test_dh_params�
s


$zThreadedTests.test_dh_paramscCsRtjtj�}|jt�t||dddd�}|j|dd�dS)Nr�Tr�r�)rr.r�r�r�r�r)rErtr4rrr�test_selected_npn_protocol�
s

z(ThreadedTests.test_selected_npn_protocolz NPN support needed for this testcCs�ddg}ddgdfddgdfddgdfddgdfg}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)Nzhttp/1.1zspdy/2�test�abc�defr�Tr�zKfailed trying %s (s) and %s (c).
was expecting %s, but got %%s from the %%sZclient_alpn_protocolr�Zserver_alpn_protocolsrZnothingrxr�)
rr.r�r�r�r�r�r/�IS_OPENSSL_1_1r�r�rMrN)rEZserver_protocolsZprotocol_testsZclient_protocolsr�r�r�r4r@r�Z
client_resultZ
server_resultrrr�test_npn_protocols�
s<





$z ThreadedTests.test_npn_protocolscCsvtjtj�}|jt�tjtj�}|jt�tjtj�}tj|_|jt	�|||fS)N)
rr.r�r�r��SIGNED_CERTFILE2r>r�r�r8)rEr��
other_contextr�rrr�sni_contextss


zThreadedTests.sni_contextscCs+|d}|jd|ff|d�dS)Nr�rlrq)rC)rEr4r
rrrr�check_common_names
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+�|_ndS)N)r�rt)r��server_name�initial_context)�callsrrr�
servername_cbsz6ThreadedTests.test_sni_callback.<locals>.servername_cbr�Tr��supermessageZfakehostnamermZnotfunny)rrr�rMr)rEr�r�rr4r)rrrrs,
		
	zThreadedTests.test_sni_callbackcCs~|j�\}}}dd�}|j|�|jtj��"}t||dddd�}WdQX|j|jjd�dS)NcSstjS)N)rZALERT_DESCRIPTION_ACCESS_DENIED)r�rrrrr�cb_returning_alert;szAThreadedTests.test_sni_callback_alert.<locals>.cb_returning_alertr�Fr�rZTLSV1_ALERT_ACCESS_DENIED)	rrrOrr/r�rMrrB)rEr�rr�rrr4rrr�test_sni_callback_alert6s
z%ThreadedTests.test_sni_callback_alertcCs�|j�\}}}dd�}|j|�|jtj��7}tj��"}t||dddd�}WdQXWdQX|j|j	j
d�|jd|j��dS)	NcSsdddS)Nrrr)r�rrrrr�
cb_raisingJsz;ThreadedTests.test_sni_callback_raising.<locals>.cb_raisingr�Fr�rZSSLV3_ALERT_HANDSHAKE_FAILURE�ZeroDivisionError)
rrrOrr/r�captured_stderrr�rMrrBrC�getvalue)rEr�rr�rr�stderrr4rrr�test_sni_callback_raisingEs
z'ThreadedTests.test_sni_callback_raisingcCs�|j�\}}}dd�}|j|�|jtj��7}tj��"}t||dddd�}WdQXWdQX|j|j	j
d�|jd|j��dS)	NcSsdS)NrIr)r�rrrrr�cb_wrong_return_type\szOThreadedTests.test_sni_callback_wrong_return_type.<locals>.cb_wrong_return_typer�Fr�rZTLSV1_ALERT_INTERNAL_ERRORrQ)
rrrOrr/rrr�rMrrBrCr )rEr�rr�r#rr!r4rrr�#test_sni_callback_wrong_return_typeVs
z1ThreadedTests.test_sni_callback_wrong_return_typecCs�tjtj�}tj|_|jt�|jt�td|dd�}|�f|j	t
j
��}|jt|j
f�|j�|jt|jd�|jt|jd�WdQXdS)Nrtr�Fishello)rr.r|r>r�r�r�r�rwr�r�r
rrirYrOrPr^r)rErtrxr�rrr�,test_read_write_after_close_raises_valuerrorhs


z:ThreadedTests.test_read_write_after_close_raises_valuerrorN)3r�r�r�r:r�r�r2r�r"r�r<r�r�r�r�r�r7rr�r�r�r�r�r�r�r�r�r�r�rrrrr@rr�r�rrrrZHAS_NPNrrrr=rrr"r$r%rrrrr��sb&*&)(:s1&!;		
!)
'r�cCs�tjritjd6tjd6tjd6}xY|j�D]9\}}|�}|r:|dr:d||f}Pq:q:Wttj��}tdt	j
t	jf�td|�tdt	j�td	t	j
�ytd
t	j�Wqtk
r�YqXnx]tttttttttttttg
D].}tjj|�s.tj d|��q.q.Wt!t"t#g}tj$d�r�|j%t&�nt'r�tj(�}|r�|j%t)�q�nztj*|�Wdt'r�tj+|�nXdS)
NZLinuxZMacZWindowsrz%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),rrr0r1Zmac_verZ	win32_ver�itemsr��printrr�r rDr�r��AttributeErrorr�rRr�r�r�r�r�r�rr8r��BADKEYr�rr�existsZ
TestFailedr�r;r?Zis_resource_enabledr�rM�
_have_threadsZthreading_setupr�Zrun_unittestZthreading_cleanup)rZplatsr
r5Zplat�filenameZtests�thread_inforrr�	test_mainxsL	


	
		r.�__main__)Yrr2r
rr�rWZtimer'rrrr�ZtempfileZurllib.requestr�rr�r�r0r8�
import_moduler�sortedr�r�rr�r�r�r rr
r��fsencoder�r�r�r�r�r�r�r�r�r�r�r�r�r�rr8rPrRr�r�rr)r�r�r�r�rrrr!r"r)r:r�rDr=ZTestCaser;r�r?rMr|�ImportErrorr+Ztest.ssl_serversrvr}rwr�r�r�r�r�r.r�rrrr�<module>s�	��)��)�O
�t+0����0