403Webshell
Server IP : 118.27.122.248  /  Your IP : 216.73.217.130
Web Server : Apache
System : Linux web0264.sh.tyo1 4.18.0-553.79.1.lve.el7h.x86_64 #1 SMP Wed Oct 15 16:34:46 UTC 2025 x86_64
User : c9415830 ( 11735)
PHP Version : 8.4.17
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /opt/alt/python36/lib64/python3.6/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/alt/python36/lib64/python3.6/test/__pycache__/test_ssl.cpython-36.pyc
3

�w2_c��@s�ddlZddlZddlmZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
ZddlZddlZddlZddlZddlZddlZyddlZWnek
r�dZYnXejd�ZyddlZWnek
r�dZYnXdZeej�ZejZejj d�Z!e!�o"ej"d_kZ#dd	�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-dZ.e$d�Z/e	j&e/�Z0e$dd�Z1e$dd�Z2e$d�Z3e$d�Z4e$d�Z5e$dd�Z6e$d�Z7dZ8e$d�Z9e$d�Z:e$d�Z;e$d�Z<e$d�Z=e$d�Z>e$d�Z?e$d �Z@e	j&e@�ZAeBed!d�ZCeBed"d�ZDeBed#d�ZEeBed$d�ZFeBed%d�ZGd&d'�ZHd(d)�ZId*d+�ZJd,d-�ZKd.d/�ZLd0d1�ZMd2d3�ZNd4d5�ZOejPejQd6�ZRejSfejTddddd7�d8d9�ZUGd:d;�d;ejV�ZWGd<d=�d=ejV�ZXGd>d?�d?ejV�ZYGd@dA�dAejV�ZZejPedB�GdCdD�dDejV��Z[GdEdF�dFejV�Z\d`dGdH�Z]dIdJ�Z^e�r�ddKl_m`Z`GdLdM�dMeja�ZbGdNdO�dOeja�ZcdadQdR�ZddbdSdT�ZeGdUdV�dVejV�ZfdWdX�ZgejPejhdY�GdZd[�d[ejV��Zidcd\d]�Zjekd^k�r�ej�dS)d�N)�support�sslFTZLibreSSL�cGstjjtjjt�f|��S)N)�os�path�join�dirname�__file__)�name�r�2/opt/alt/python36/lib64/python3.6/test/test_ssl.py�	data_file*sr
zkeycert.pemzssl_cert.pemzssl_key.pemzkeycert.passwd.pemzssl_key.passwd.pemZsomepass�capathz
4e1295a3.0z
5ed36f99.0zrevocation.crlzkeycert3.pemzkeycert4.pemz
ceff1710.0zallsans.pemzself-signed.pythontest.netznullcert.pemzbadcert.pemzXXXnonexisting.pemz
badkey.pemz	nokia.pemznullbytecert.pemztalos-2019-0758.pemzffdh3072.pem�OP_NO_COMPRESSION�OP_SINGLE_DH_USE�OP_SINGLE_ECDH_USE�OP_CIPHER_SERVER_PREFERENCE�OP_ENABLE_MIDDLEBOX_COMPATcCs.djtjtj���}tjr*tjj||�dS)N� )	r�	traceback�format_exception�sys�exc_infor�verbose�stdout�write)�prefixZ
exc_formatrrr�handle_error`srcCs
tjdkS)Nr�	��
�)rrrr r!)r�_OPENSSL_API_VERSIONrrrr�can_clear_optionsesr#cCs
tjdkS)Nrr�rr!)rrr$rr!)r�OPENSSL_VERSION_INFOrrrr�no_sslv2_implies_sslv3_helloisr&cCs
tjdkS)Nrrrr!)rrrrr!)rr%rrrr�have_verify_flagsmsr'cCs$tjrtj�jdkrtjStjS)Nr)�timeZdaylightZ	localtimeZtm_isdstZaltzoneZtimezonerrrr�
utc_offsetqsr)cCs^tjdkrZd}tjj||�}|jdd�}|j|�}|ddkrZ|dd�d	|d
d�}|S)Nrrrr!z%b %d %H:%M:%S %Y GMT)�second��0r�)rrrrr!)rr"�datetimeZstrptime�replace�strftime)�	cert_timeZfmtZdtrrr�asn1timews

r2cs,ttd�r$tj���fdd��}|S�SdS)N�PROTOCOL_SSLv2csRytjtj�Wn6tjk
rFtjd	krBtj�d
krBtjd��YnX�||�S)Nrrrr!�debian�squeeze/sid�z'Patched Ubuntu OpenSSL breaks behaviour)rrrr!r!)r4r5r6)	r�
SSLContextr3�SSLErrorr%�platform�linux_distribution�unittest�SkipTest)�args�kwargs)�funcrr�f�s
z$skip_if_broken_ubuntu_ssl.<locals>.f)�hasattrr�	functools�wraps)r?r@r)r?r�skip_if_broken_ubuntu_ssl�s
	rDcstj���fdd��}|S)a{Skip a test if the OpenSSL config MinProtocol is > TLSv1.

    OS distros with an /etc/ssl/openssl.cnf and MinProtocol set often do so to
    require TLSv1.2 or higher (Debian Buster).  Some of our tests for older
    protocol versions will fail under such a config.

    Alternative workaround: Run this test in a process with
    OPENSSL_CONF=/dev/null in the environment.
    cs�tjjdd�}y\t|d��H}x@|D]8}tjd|�}|r"|jd�}|dkr"tjd||f��q"WWdQRXWn@t	t
fk
r�}z tjr�t
jjd||f�WYdd}~XnX�||�S)	NZOPENSSL_CONFz/etc/ssl/openssl.cnf�rzMinProtocol\s*=\s*(TLSv\d+\S*)r�TLSv1z)%s has MinProtocol = %s which is > TLSv1.z(
 Could not scan %s for MinProtocol: %s
)r�environ�get�open�re�match�groupr;r<�EnvironmentError�UnicodeDecodeErrorrrrrr)r=r>Zopenssl_cnf�config�linerKZtls_ver�err)r?rrr@�s 

z2skip_if_openssl_cnf_minprotocol_gt_tls1.<locals>.f)rBrC)r?r@r)r?r�'skip_if_openssl_cnf_minprotocol_gt_tls1�s
rRz SNI support needed for this test)�	cert_reqs�ca_certs�ciphers�certfile�keyfilec	Ksftj|�}|dk	r||_|dk	r*|j|�|dk	s:|dk	rF|j||�|dk	rX|j|�|j|f|�S)N)rr7�verify_mode�load_verify_locations�load_cert_chain�set_ciphers�wrap_socket)	�sock�ssl_versionrSrTrUrVrWr>�contextrrr�test_wrap_socket�s


r`c@s�eZdZdd�ZejdSkr&ejejdd�Zdd�Z	e
jej
d	kd
�dd��Zd
Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zejdd��Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Z d,d-�Z!d.d/�Z"e
jd0ej#kd1�d2d3��Z$d4d5�Z%d6d7�Z&e
je'j(d8kd9�d:d;��Z)e
je'j(d8kd9�d<d=��Z*d>d?�Z+d@dA�Z,dBdC�Z-dDdE�Z.dFdG�Z/e
je0�dH�dIdJ��Z1dKdL�Z2ej3dMdN�dOdP��Z4dQdR�Z5d
S)T�BasicSocketTestscCsztjtjtjtjtjtjr*tjtjdkr:tj	|j
tjddh�|j
tjddh�tjtj
tjtjdS)NrrTF)rr)r�	CERT_NONE�
CERT_OPTIONAL�
CERT_REQUIREDrr�HAS_ECDHrr%r�assertIn�HAS_SNI�OP_NO_SSLv2�OP_NO_SSLv3�OP_NO_TLSv1�
OP_NO_TLSv1_3)�selfrrr�test_constants�s
zBasicSocketTests.test_constantsrrcCs2tj}|jt|�d�tj|�}|j|j|�dS)Nz_SSLMethod.PROTOCOL_TLS)r�PROTOCOL_TLS�assertEqual�strr7�assertIs�protocol)rl�proto�ctxrrr�test_str_for_enums�s
z#BasicSocketTests.test_str_for_enumscCstj�}tjr*tjjd||r dp"df�tjd�\}}|jt	|�d�|j||dk�|rxtj
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���ry)r�RAND_statusrrrrr�RAND_pseudo_bytesro�lenZ
RAND_bytes�assertRaisesr8�
ValueErrorrA�	TypeErrorrwZRAND_add�	bytearray)rl�v�dataZis_cryptographicrrr�test_random�s(



zBasicSocketTests.test_random�posixzrequires posixcCstj�}|s|jd�tj�\}}tj�}|dkr�yBtj|�tjd�d}|jt	|�d�tj
||�tj|�Wntk
r�tjd�YnXtjd�nztj|�|j
tj|�tj|d�\}}|j|d�tj|d�}|jt	|�d�tjd�d}|jt	|�d�|j||�dS)Nz*OpenSSL's PRNG has insufficient randomnessrrvr)rrz�failr�pipe�fork�closer{ror|r�
BaseException�_exit�
addCleanup�waitpid�read�assertNotEqual)rl�statusZrfdZwfd�pidZchild_random�_Z
parent_randomrrr�test_random_forks0


z!BasicSocketTests.test_random_forkNcCstjjt�}tjr,tjjdt	j
|�d�|j|dd$�|j|dtd��|j|d
td��|j|dd�|j|dd-�|j|dd/�tjjt
�}tj�r�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�notAfterzAug 26 14:23:15 2028 GMT�	notBeforezAug 29 14:23:15 2018 GMT�serialNumberZ98A7CF88C74A32ED�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�r�r��r��r�r��r��r�r��r��r�r��r�)r�r�r�r��r�r��r��r�r��r��r�r��r��r�r��r�)r�r�r�r��r�r�)r��r�r��r�r�)r�r�)r�)r�)r�)r�_ssl�_test_decode_cert�CERTFILErrrrr�pprint�pformatror2�	NOKIACERT)rl�prrr�test_parse_cert"s8




z BasicSocketTests.test_parse_certc
CsLtjjt�}tjr,tjjdt	j
|�d�|j|dddddddd��dS)Nr�r��UKr��cody-cazJun 14 18:00:58 2028 GMTzJun 18 18:00:58 2018 GMTZ02�#codenomicon-vm-2.test.lal.cisco.comr��)r�r�r�r�r�r��version�r�r��r��r�r��r�)r�r��r�r��r��r�r��r�)r�r��r�r�)r�)rr�r��TALOS_INVALID_CRLDPrrrrrr�r�ro)rlr�rrr�test_parse_cert_CVE_2019_5010Jsz.BasicSocketTests.test_parse_cert_CVE_2019_5010cCsxtjjt�}tjr,tjjdt	j
|�d�d.}|j|d|�|j|d|�tjd/kr`d5}nd;}|j|d|�dS)<Nr�r��US�stateOrProvinceName�Oregonr��	Beavertonr��Python Software Foundation�organizationalUnitName�Python Core Developmentr��null.python.orgexample.org�emailAddress�python-dev@python.orgr�r�rrrr��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��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�)rrr�r�r��r�r��r�r��r�r��r�r�)r�r�r�r�r��r�r��r�r��r�r��r�r��r�r�)r�r�r�r�r�)
rr�r��NULLBYTECERTrrrrrr�r�ror")rlr�r�Zsanrrr�test_parse_cert_CVE_2013_4238_s0
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�DirNamer�r�r��Castle Anthraxr��Python Software Foundationr��dirname exampler��https://www.python.org/�
IP Address�	127.0.0.1�0:0:0:0:0:0:0:1
�
Registered ID�	1.2.3.4.5�r�r�rr�rr�r�r�r�r�r�r��r�r�r�r�r�r�r�r�r	�r�rrrr�rr�r�r
�rr�rr
�rr)
rrrrrrrr r!r")rr�r��
ALLSANFILEro)rlr�rrr�test_parse_all_sans|s 
z$BasicSocketTests.test_parse_all_sansc
Cs�ttd��}|j�}WdQRXtj|�}tj|�}tj|�}|j||�|jtjd�sf|j	d|�|j
dtjd�s�|j	d|�dS)NrEr�z-DER-to-PEM didn't include correct header:
%r
z-DER-to-PEM didn't include correct footer:
%r
)rI�
CAFILE_CACERTr�r�PEM_cert_to_DER_certZDER_cert_to_PEM_certro�
startswithZ
PEM_HEADERr��endswithZ
PEM_FOOTER)rlr@�pem�d1Zp2�d2rrr�test_DER_to_PEM�s


z 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�tr�|j|j
dj|��||t|�f�n&|j|j
d	j|||��||t|�f�dS)
Ni�i0rr���?r!z
LibreSSL {:d}zOpenSSL {:d}.{:d}.{:d})rZOPENSSL_VERSION_NUMBERr%�OPENSSL_VERSION�assertIsInstance�int�tuplerp�assertGreaterEqual�
assertLessZassertLessEqual�IS_LIBRESSL�
assertTruer'�format�hex)	rl�n�t�s�major�minorZfixZpatchr�rrr�test_openssl_version�s0z%BasicSocketTests.test_openssl_versionc
CsLtjtj�}t|�}tj|�}tjdtf��~WdQRX|j|�d�dS)Nr6)	�socket�AF_INETr`�weakref�refrZcheck_warnings�ResourceWarningro)rlr;�ss�wrrrr�
test_refcycle�s
zBasicSocketTests.test_refcyclecCs�tjtj�}t|���}|jt|jd�|jt|jtd��|jt|jd�|jt|j	td�d�|jt|j
d�|jt|jdd�|jt|j
�|jt|jdgfdd�|jt|jd�|jt|jtd�g�WdQRXdS)Nr�x�0.0.0.0r�d)rHr)rHr)r?r@r`r}�OSError�recv�	recv_intor��recvfrom�
recvfrom_into�send�sendto�NotImplementedError�dup�sendmsg�recvmsg�recvmsg_into)rlr;rDrrr�test_wrapped_unconnected�s


z)BasicSocketTests.test_wrapped_unconnectedcCsLxFdD]>}tjtj�}|j|�t|��}|j||j��WdQRXqWdS)N��@)NrWrX)r?r@�
settimeoutr`roZ
gettimeout)rl�timeoutr;rDrrr�test_timeout�s



zBasicSocketTests.test_timeoutc6Csdtj�}|jtdtj|td�|jtdtj|dd�|jtdtj|ddd�tj|dtd��}|jtd|jtd	f�WdQRX|jt	��(}tj��}tj|t
d
�WdQRXWdQRX|j|jj
t
j�|jt	��*}tj��}tj|tt
d�WdQRXWdQRX|j|jj
t
j�|jt	��*}tj��}tj|t
t
d�WdQRXWdQRX|j|jj
t
j�dS)Nzcertfile must be specified)rWz5certfile must be specified for server-side operationsT)�server_sider6)r\rVz!can't connect in server-side modei�)rV)rVrW)r?�assertRaisesRegexr~rr\r��connect�HOSTr}rJ�NONEXISTINGCERTro�	exception�errno�ENOENT)rlr]r;�cmrrr�test_errors_sslwrap�s6
"

z$BasicSocketTests.test_errors_sslwrapcCs\tjjtjjt�ptj|�}tj�}|j|j�|j	t
j��t||t
j
d�WdQRXdS)z;Check that trying to use the given client certificate fails)rVr^N)rrrrr	�curdirr?r�r�r}rr8r`�PROTOCOL_TLSv1)rlrVr]rrr�
bad_cert_test�szBasicSocketTests.bad_cert_testcCs|jd�dS)z Wrapping with an empty cert fileznullcert.pemN)rh)rlrrr�test_empty_cert
sz BasicSocketTests.test_empty_certcCs|jd�dS)z:Wrapping with a badly formatted certificate (syntax error)zbadcert.pemN)rh)rlrrr�test_malformed_certsz$BasicSocketTests.test_malformed_certcCs|jd�dS)z2Wrapping with a badly formatted key (syntax error)z
badkey.pemN)rh)rlrrr�test_malformed_keysz#BasicSocketTests.test_malformed_keycs�dd�}�fdd�}ddRi}||d�||d�||d	�||d
�||d�||d�ddUi}||d�||d�||d�||d�||d�ddXi}||d�||d�||d�||d�||d�dd[i}||d�||d�||d�dd^i}||d�||d�||d�||d�ddai}||d�||d�||d�djd�jd �}dd|fffi}|||�dddi}|||�ddgi}|||�d#jd�jd �}dd|fffi}||d$jd�jd ��||d%jd�jd ��||d&jd�jd ��||d'jd�jd ��d(djdnd/�}||d+�||d,�||d.�||d)�d0dyd:�}||d9�||d;�||d4�d|d�d?�}||d=�||d>�||d@�||dA�d�d�d?�}||dD�||dE�||dF�||dA�d0d�d:�}||d9�dGd�d�d/�}||d9�dGd�d�d/�}||dI��jttjdd��jttjid�dd�i}||dK�dd�i}||dK�dd�i}�jtj��}tj|dN�WdQRX�jdOt|j	��dS)�NcSstj||�dS)N)r�match_hostname)�cert�hostnamerrr�oksz0BasicSocketTests.test_match_hostname.<locals>.okcs�jtjtj||�dS)N)r}r�CertificateErrorrl)rmrn)rlrrr�sz2BasicSocketTests.test_match_hostname.<locals>.failr�r��example.comzExAmple.cOmzwww.example.comz.example.comzexample.orgZexampleXcom�*.a.comz	foo.a.comz
bar.foo.a.comza.comzXa.comz.a.com�f*.comzfoo.comzf.comzbar.comzbar.foo.com�null.python.orgexample.orgznull.python.org�	*.*.a.com�a.*.comz	a.foo.comza..comupüthon.python.org�idna�ascii�
x*.python.org�xn--p*.python.orguwww*.pythön.orguwww.pythön.orguwww1.pythön.orguftp.pythön.orgupythön.orgzJun 26 21:41:46 2011 GMT�linuxfrz.orgr��linuxfr.org�linuxfr.comr�
<unsupported>)r�r�r�zDec 18 23:59:59 2011 GMTr�r�r��
Californiar��
Mountain Viewr��
Google Inc�mail.google.com)r�r�z	gmail.com�
IP Address�10.11.12.13�14.15.16.17)r�r�z14.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�r�rq�r�)r��r�rr�r�)r��r�rs�r�)r��r�rt�r�)r��r�ru�r�)r��r�rv�r�)r��r�ry�r�)r��r�rz�r�)r��r�r{�r�)r��r�r|�r�r}�rr~)r�r�r��r�r��r��r�r�r��r�r��r��r�r��r��r�r��r�)r�r�r�r�r��r�rq�r�)r��r�rq�r�r��r�r�)r�r�r��r�rq�r�)r��r�rq�r�r��r�r�)r�r�r��r�r��r��r�r�r��r�r��r��r�r��r�)r�r�r�r��r�r��r��r�r�r��r�r��r��r�r��r�)r�r�r�r��rr�)r��r�r��r��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�)
�encode�decoder}r~rrlrprfrpra)rlror�rmrwrdr)rlr�test_match_hostnames�
















































z$BasicSocketTests.test_match_hostnamecCs:tjtj�}tj��}|jt|j|ddd�WdQRXdS)NTz
some.hostname)�server_hostname)rr7�PROTOCOL_SSLv23r?r}r~r\)rlrtr]rrr�test_server_side�s
z!BasicSocketTests.test_server_sidecCs|tjtj�}|jd�|j�tjtj�}|j|j��t|dd��&}|jt��|j	d�WdQRXWdQRX|j
�dS)N�	127.0.0.1rF)�do_handshake_on_connectzunknown-type)r�r)r?r@�bind�listenr^�getsocknamer`r}r~�get_channel_bindingr�)rlr;�crDrrr�test_unknown_channel_binding�s
z-BasicSocketTests.test_unknown_channel_bindingz
tls-uniquez*'tls-unique' channel binding not availablecCsjtjtj�}t|��}|j|jd��WdQRXtjtj�}t|dtd��}|j|jd��WdQRXdS)Nz
tls-uniqueT)r\rV)r?r@r`�assertIsNoner�r�)rlr;rDrrr�test_tls_unique_channel_binding�s
z0BasicSocketTests.test_tls_unique_channel_bindingcCsVttjtj��}t|�}|jt��}d}tj�WdQRX|j|t	|j
jd��dS)Nr)r`r?r@�reprZassertWarnsrCrZ
gc_collectrfrpZwarningr=)rlrDrErdrrr�test_dealloc_warn�sz"BasicSocketTests.test_dealloc_warnc
Csrtj�}|jt|�d�|j|tj�tj��:}t|d<t	|d<tj�}|j|j
t	�|j|jt�WdQRXdS)N��SSL_CERT_DIR�
SSL_CERT_FILE)rZget_default_verify_pathsror|r0ZDefaultVerifyPathsr�EnvironmentVarGuard�CAPATHr��cafiler)rl�paths�envrrr�test_get_default_verify_paths�s
z.BasicSocketTests.test_get_default_verify_paths�win32zWindows specificc	Cs�|jtjd��|jtjd��|jttj�|jttjd�t�}x�dD]�}tj|�}|j|t�xr|D]j}|j|t	�|j
t|�d�|\}}}|j|t�|j
|ddh�|j|ttf�t|t�rj|j|�qjWqJWd}|j
||�dS)	N�CA�ROOTr6r��x509_asn�
pkcs_7_asnz1.3.6.1.5.5.7.3.1)r�r�)r6rZenum_certificatesr}r�WindowsError�setr0�listr2ror|�bytesrf�bool�
isinstance�update)	rlZ
trust_oidsZ	storenameZstore�elementrm�encZtrust�
serverAuthrrr�test_enum_certificates�s&




z'BasicSocketTests.test_enum_certificatescCs�|jtjd��|jttj�|jttjd�tjd�}|j|t�xL|D]D}|j|t�|j	t
|�d�|j|dt�|j|dddh�qJWdS)Nr�r6�rrr�r�)
r6rZ	enum_crlsr}rr�r0r�r2ror|r�rf)rlZcrlsr�rrr�test_enum_crls�s

zBasicSocketTests.test_enum_crlscCs�d}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�WdQRXxxtd�D]l}ytjj
|�}Wnt	k
�rYq�X|j|jt
�|j|jt�|j|jt�|j|jttd�f�q�Wtjjd�}|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)rr�rr���)r�_ASN1Objectro�nid�	shortnameZlongname�oidr0r}r~Zfromnidr]�ranger1rp�typeZfromname)rl�expected�val�i�objrrr�test_asn1objectsB
z BasicSocketTests.test_asn1objectcCs�tjd�}|jtjjtj�|jtjj|�|jtjjjd�|jtjjjd�|jtjjjd�tjd�}|jtjj	tj�|jtjj	|�|jtjj	jd�|jtjj	jd�|jtjj	jd�dS)Nz1.3.6.1.5.5.7.3.1rr�z1.3.6.1.5.5.7.3.2�Z
clientAuth)
rrr0�Purpose�SERVER_AUTHrorrr	�CLIENT_AUTH)rlr
rrr�test_purpose_enum5s

z"BasicSocketTests.test_purpose_enumcCs�tjtjtj�}|j|j�|jt��}t|tj	d�WdQRX|j
t|j�d�tj
tj�}|jt��}|j|�WdQRX|j
t|j�d�dS)N)rSz!only stream sockets are supported)r?r@Z
SOCK_DGRAMr�r�r}rQr`rrbrorprar7r�r\)rlr;Zcxrtrrr�test_unsupported_dtlsFsz&BasicSocketTests.test_unsupported_dtlscCs|jtj|�|�dS)N)ror�cert_time_to_seconds)rl�
timestringZ	timestamprrr�cert_time_okQszBasicSocketTests.cert_time_okc	Cs$|jt��tj|�WdQRXdS)N)r}r~rr)rlrrrr�cert_time_failTszBasicSocketTests.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)rlrrr�"test_cert_time_to_seconds_timezoneXsz3BasicSocketTests.test_cert_time_to_seconds_timezonecCs�d}d}|j||�|jtj|d�|�|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��ѓ�A)r1zJan 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)rrorrr)rlrZtsZ
newyear_tsrrr�test_cert_time_to_seconds`s*







z*BasicSocketTests.test_cert_time_to_seconds�LC_ALLr6cCs@dd�}|�j�dkr |jd�|jdd�|j|�d�dS)NcSstjdd	�S)
Nz%brrr�r+r-r�r)	rrr�r+r-r�rrr)r(r0rrrr�local_february_name�szNBasicSocketTests.test_cert_time_to_seconds_locale.<locals>.local_february_nameZfebz>locale-specific month name needs to be different from C localezFeb  9 00:00:00 2007 GMTg`�r�Az  9 00:00:00 2007 GMT)�lower�skipTestrr)rlrrrr� test_cert_time_to_seconds_locale�s

z1BasicSocketTests.test_cert_time_to_seconds_localecCsvtjtj�}|j|j�tj|�}ttjtj�tjd�}|j|j�|j	t
|f�}tjtj
tjtjf}|j||�dS)N)rS)r?r@r�r�r�	bind_portr`rrd�
connect_exr_rbZECONNREFUSEDZEHOSTUNREACHZ	ETIMEDOUT�EWOULDBLOCKrf)rl�server�portr;�rc�errorsrrr�test_connect_ex_error�s

z&BasicSocketTests.test_connect_ex_error)rrr)6�__name__�
__module__�__qualname__rmrr%�
OP_NO_TLSv1_1�
OP_NO_TLSv1_2rur�r;�
skipUnlessrr
r�ZmaxDiffr�r�rr$r,r>rZcpython_onlyrFrVr[rerhrirjrkr�r�r��CHANNEL_BINDING_TYPESr�r�r�rr9r�rrrrrrr)rrZrun_with_localer!r)rrrrra�sT
 (	'#rac@sReZdZedd��Zedd��Zdd�Zeje	j
d@kd
�dd��Zed
d��Zdd�Z
eje�d�dd��Zdd�Zdd�Zdd�Zdd�Zedd��Zdd�Zeje	jd �d!d"��Zed#d$��Zed%d&��Zd'd(�Zd)d*�Zd+d,�Zejej d-kd.�eje!d/�d0d1���Z"ejej d-kd2�d3d4��Z#d5d6�Z$d7d8�Z%d9d:�Z&d;d<�Z'd=d>�Z(d?S)A�ContextTestscCsTxtD]}tj|�qWtj�}|j|jtj�|jttjd�|jttjd�dS)Nr�*r)�	PROTOCOLSrr7rorrrnr}r~)rlrrrtrrr�test_constructor�s
zContextTests.test_constructorcCs*x$tD]}tj|�}|j|j|�qWdS)N)r3rr7rorr)rlrsrtrrr�
test_protocol�s

zContextTests.test_protocolc	CsHtjtj�}|jd�|jd�|jtjd��|jd�WdQRXdS)N�ALL�DEFAULTzNo cipher can be selectedz^$:,;?*'dorothyx)rr7rgr[r]r8)rlrtrrr�test_ciphers�s


zContextTests.test_ciphersrrrzOpenSSL too oldcCsHtjtj�}|jd�tdd�|j�D��}|jd|�|jd|�dS)NZAESGCMcss|]}|dVqdS)r
Nr)�.0�drrr�	<genexpr>�sz0ContextTests.test_get_ciphers.<locals>.<genexpr>zAES256-GCM-SHA384zAES128-GCM-SHA256)rr7rgr[r�Zget_ciphersrf)rlrt�namesrrr�test_get_ciphers�s

zContextTests.test_get_ciphersc	Cs�tjtj�}tjtjBtjB}|ttBtBt	Bt
BO}|j||j�|jtj
O_|j|tj
B|j�t�r�|jtj
@|_|j||j�d|_|jd|jtj@�n|jt��d|_WdQRXdS)Nr)rr7�PROTOCOL_TLS_CLIENT�OP_ALLrhrirrrrrro�optionsrjr#r}r~)rlrt�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)Nr2)rr7rgrorXrbrcrdr}rr~)rlrtrrr�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|_WdQRXdS)N�VERIFY_X509_TRUSTED_FIRSTr)rr7rg�getattrro�verify_flags�VERIFY_DEFAULT�VERIFY_CRL_CHECK_LEAFZVERIFY_CRL_CHECK_CHAINZVERIFY_X509_STRICTr}r)rlrt�tfrrr�test_verify_flags�szContextTests.test_verify_flagscfCs�tjtj�}|jtdd�|jttd�|jt|jtd�|jt��}|jt�WdQRX|j	|j
jtj�|j
tjd��|jt�WdQRX|j
tjd��|jt�WdQRXtjtj�}|jtt�|jttd�|jttd�|j
tjd��|jt�WdQRX|j
tjd��|jt�WdQRX|j
tjd��|jttd�WdQRXtjtj�}|j
tjd��|jtt�WdQRX|jttd�|jttj�d�|jtttj��d�|jttt�|jtttj��|jttttj���|j
td��|jtdd�WdQRX|jtj��|jtdd�WdQRX|j
td	��|jtd
dd�WdQRXdd
�}dd�}dd�}dd�}dd�}dd�}dd�}	Gdd�d�}
|jt|d�|jt|d�|jt|d�|jt|
�d�|jt|
�jd�|jtj��|jt|d�WdQRX|j
td	��|jt|d�WdQRX|j
td��|jt|d�WdQRX|j
td��|jt|	d�WdQRX|jt|	d�dS)N)rWzPEM lib)rVrWzkey values mismatch)Zpasswordzshould be a stringT�badpasszcannot be longer�ai�cSstS)N)�KEY_PASSWORDrrrr�getpass_unicode+sz:ContextTests.test_load_cert_chain.<locals>.getpass_unicodecSstj�S)N)rMr�rrrr�
getpass_bytes-sz8ContextTests.test_load_cert_chain.<locals>.getpass_bytescSsttj��S)N)r�rMr�rrrr�getpass_bytearray/sz<ContextTests.test_load_cert_chain.<locals>.getpass_bytearraycSsdS)NrKrrrrr�getpass_badpass1sz:ContextTests.test_load_cert_chain.<locals>.getpass_badpasscSsddS)NrLiirrrrr�getpass_huge3sz7ContextTests.test_load_cert_chain.<locals>.getpass_hugecSsdS)Nrrrrrr�getpass_bad_type5sz;ContextTests.test_load_cert_chain.<locals>.getpass_bad_typecSstd��dS)Nz
getpass error)�	Exceptionrrrr�getpass_exception7sz<ContextTests.test_load_cert_chain.<locals>.getpass_exceptionc@seZdZdd�Zdd�ZdS)z:ContextTests.test_load_cert_chain.<locals>.GetPassCallablecSstS)N)rM)rlrrr�__call__:szCContextTests.test_load_cert_chain.<locals>.GetPassCallable.__call__cSstS)N)rM)rlrrr�getpass<szBContextTests.test_load_cert_chain.<locals>.GetPassCallable.getpassN)r*r+r,rVrWrrrr�GetPassCallable9srXzmust return a stringz
getpass error)rr7rgrZr�r}rrJr`rorarbrcr]r8�BADCERT�	EMPTYCERT�ONLYCERT�ONLYKEY�BYTES_ONLYCERT�
BYTES_ONLYKEYr%�CERTFILE_PROTECTEDrMr�r��ONLYKEY_PROTECTEDr~rWrT)rlrtrdrNrOrPrQrRrSrUrXrrr�test_load_cert_chain�szz!ContextTests.test_load_cert_chaincCs�tjtj�}|jt�|jtdd�|jt�|jtdd�|jt|j�|jt|jddd�|jt��}|jt	�WdQRX|j
|jjtj
�|jtjd��|jt�WdQRX|jtt�|jttd�|jt|jdd�dS)N)r�rzPEM lib)rT)rr7rgrYr��BYTES_CERTFILEr}rrJr`rorarbrcr]r8rYr��BYTES_CAPATH)rlrtrdrrr�test_load_verify_locationsOs

z'ContextTests.test_load_verify_locationscCsJtt��}|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
dj|�d�|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
td�|jtjd��|j
d
d�WdQRX|jtjd��|j
dd�WdQRXdS)N�x509_car)�cadatarrr��head�otherZagain�tail�z
no start lineZbrokenznot enough datasbroken)rIr%r�rr&�CAFILE_NEURONIOr7rgro�cert_store_statsrYrr}r�objectr]r8)rlr@Z
cacert_pemZ
cacert_derZneuronio_pemZneuronio_derrtZcombinedrrr�test_load_verify_cadatabsN




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)rr7rg�load_dh_params�DHFILErr
�BYTES_DHFILEr}r�FileNotFoundErrorr`rorarbrcr8r�)rlrtrdrrr�test_load_dh_params�s


z ContextTests.test_load_dh_paramscCsDx>tD]6}tj|�}|j|j�dddddddddddd��qWdS)Nr)Znumberr^Zconnect_goodZconnect_renegotiate�acceptZaccept_goodZaccept_renegotiate�hits�missesZtimeoutsZ
cache_full)r3rr7ro�
session_stats)rlrsrtrrr�test_session_stats�s


zContextTests.test_session_statscCstjtj�}|j�dS)N)rr7rgZset_default_verify_paths)rlrtrrr�test_set_default_verify_paths�sz*ContextTests.test_set_default_verify_pathsz#ECDH disabled on this OpenSSL buildcCsbtjtj�}|jd�|jd�|jt|j�|jt|jd�|jt|jd�|jt|jd�dS)NZ
prime256v1s
prime256v1rxsfoo)rr7rgZset_ecdh_curver}rr~)rlrtrrr�test_set_ecdh_curve�s

z ContextTests.test_set_ecdh_curvecCsjtjtj�}|jt|j�|jt|jd�|jt|jd�|jt|j|�dd�}|jd�|j|�dS)Nr+r6cSsdS)Nr)r]�
servernamertrrr�
dummycallback�sz5ContextTests.test_sni_callback.<locals>.dummycallback)rr7rgr}r�set_servername_callback)rlrtr}rrr�test_sni_callback�s
zContextTests.test_sni_callbackcCsJtjtj�}|fdd�}|j|�tj|�}~~tj�|j|�d�dS)NcSsdS)Nr)r]r|rt�cyclerrrr}�sz>ContextTests.test_sni_callback_refcycle.<locals>.dummycallback)	rr7rgr~rArB�gc�collectrq)rlrtr}rErrr�test_sni_callback_refcycle�s

z'ContextTests.test_sni_callback_refcyclecCs�tjtj�}|j|j�dddd��|jt�|j|j�dddd��|jt�|j|j�dddd��|jt�|j|j�dddd��dS)Nr)re�crl�x509rr)	rr7rgrorlrZr�rYr%)rlrtrrr�test_cert_store_stats�s






z"ContextTests.test_cert_store_statscCs�tjtj�}|j|j�g�|jt�|j|j�g�|jt�|j|j�dtd	�td
�ddd"d
d�g�t	t��}|j
�}WdQRXtj|�}|j|jd�|g�dS)#Nr��Root CAr��http://www.cacert.orgr��CA Cert Signing Authorityr��support@cacert.orgzMar 29 12:29:49 2033 GMTzMar 30 12:29:49 2003 GMTZ00�!https://www.cacert.org/revoke.crlr�)r�r�r�r�r�r�r�T�r�r��r��r�r��r��r�r��r��r�r��r�)r�r�r�r�)r��r�r��r��r�r��r��r�r��r��r�r��r�)r�r�r�r�)rr7rgro�get_ca_certsrYr�r%r2rIr�r&)rlrtr@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)	rr7rg�load_default_certsrrrr}r)rlrtrrr�test_load_default_certssz$ContextTests.test_load_default_certsr�znot-Windows specificz!LibreSSL doesn't support env varsc
CsTtjtj�}tj��6}t|d<t|d<|j�|j|j	�dddd��WdQRXdS)Nr�r�rr)r�r�re)
rr7rgrr�r�r�r�rorl)rlrtr�rrr�test_load_default_certs_env s
z(ContextTests.test_load_default_certs_envzWindows specificcCsxtjtj�}|j�|j�}tjtj�}tj��>}t|d<t|d<|j�|dd7<|j	|j�|�WdQRXdS)Nr�r�r�r)
rr7rgr�rlrr�r�r�ro)rlrt�statsr�rrr�#test_load_default_certs_env_windows*s
z0ContextTests.test_load_default_certs_env_windowscCs�|j|jtj@tj�tdkr0|j|jt@t�tdkrJ|j|jt@t�tdkrd|j|jt@t�tdkr~|j|jt@t�dS)Nr)ror@rrhrrrr)rlrtrrr�_assert_context_options8sz$ContextTests._assert_context_optionscCs�tj�}|j|jtj�|j|jtj�|j|j�|j	|�t
t��}|j�}WdQRXtjtt
|d�}|j|jtj�|j|jtj�|j	|�tjtjj�}|j|jtj�|j|jtj�|j	|�dS)N)r�rrf)r�create_default_contextrorrr�rXrdr6�check_hostnamer�rI�
SIGNING_CAr�r�rrrb)rlrtr@rfrrr�test_create_default_contextGs 


z(ContextTests.test_create_default_contextcCs�tj�}|j|jtj�|j|jtj�|j|j�|j	|�tjtj
�}|j|jtj
�|j|jtj�|j	|�tjtj
tjdd�}|j|jtj
�|j|jtj�|j|j�|j	|�tjtj
jd�}|j|jtj�|j|jtj�|j	|�dS)NT)rSr�)Zpurpose)rZ_create_stdlib_contextrorrr�rXrb�assertFalser�r�rgrdr6rr)rlrtrrr�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)rr7rgr�r�r}r~rdrXr6rcrb)rlrtrrr�test_check_hostnamevsz ContextTests.test_check_hostnamecCsTtjtj�}|j|j�|j|jtj�tjtj�}|j	|j�|j|jtj
�dS)N)rr7r>r6r�rorXrd�PROTOCOL_TLS_SERVERr�rb)rlrtrrr�test_context_client_server�sz'ContextTests.test_context_client_serverN)rrrrr))r*r+r,rDr4r5r8r;�skipIfrr%r=rBrCr/r'rJrardrnrtryrzrer{�	needs_snirr�r�r�r�rr9r5r�r�r�r�r�r�r�rrrrr1�s8	S:


	r1c@s$eZdZdd�Zdd�Zdd�ZdS)�
SSLErrorTestscCsXtjdd�}|jt|�d�|j|jd�tjdd�}|jt|�d�|j|jd�dS)Nrrx)rr8rorprbZSSLZeroReturnError)rl�errr�test_str�szSSLErrorTests.test_strc
Csntjtj�}|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)rr7rgr}r8rpr�roraZlibrary�reasonrpr6r')rlrtrdr;rrr�test_lib_reason�s
zSSLErrorTests.test_lib_reasoncCs�tjtj�}tj���}|jd�|j�tj�}|j|j��|jd�|j	|ddd��T}|j
tj��}|j�WdQRXt
|j�}|j|jd�|�|j|jjtj�WdQRXWdQRXdS)N�	127.0.0.1rF)r�z%The operation did not complete (read))r�r)rr7rgr?r�r�r^r��setblockingr\r}�SSLWantReadError�do_handshakerprar6r'rorb�SSL_ERROR_WANT_READ)rlrtr;r�rdrrr�
test_subclass�s



zSSLErrorTests.test_subclassN)r*r+r,r�r�r�rrrrr��s

r�c@s4eZdZdd�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)
Nsfoorjsbarsfoobarsbazrsbar�z)r�	MemoryBIOrror�)rl�biorrr�test_read_write�s



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)Nrjsfoorsfor�o)	rr�r��eofror�r�	write_eofr6)rlr�rrr�test_eof�s
zMemoryBIOTests.test_eofcCs�tj�}|j|jd�|jd�|j|jd�x0td�D]$}|jd�|j|jd|d�q8Wx,td�D] }|jd�|j|j|d�qjW|j�|j|jd�dS)Nrsfoor�rrG)rr�ro�pendingrr
r�)rlr�rrrr�test_pending�s


zMemoryBIOTests.test_pendingcCsbtj�}|jd�|j|j�d�|jtd��|j|j�d�|jtd��|j|j�d�dS)Nsfoosbarsbaz)rr�rror�r��
memoryview)rlr�rrr�test_buffer_types�s
z MemoryBIOTests.test_buffer_typescCsLtj�}|jt|jd�|jt|jd�|jt|jd�|jt|jd�dS)NrxTr)rr�r}rr)rlr�rrr�test_error_types�s
zMemoryBIOTests.test_error_typesN)r*r+r,r�r�r�r�r�rrrrr��s
	r�zNeeds threading modulec@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Ze
jejdkd�dd��Zdd�Zdd�Zdd�Zdd�Zd d!�Zee
jeed"�d#�d$d%���Zd&d'�Zd(d)�Zd*d+�Zd,S)-�SimpleBackgroundTestsz?Tests that connect to a simple server running in the backgroundcCs2tt�}t|jf|_|j�|j|jddd�dS)N)�ThreadedEchoServer�SIGNED_CERTFILEr_r&�server_addr�	__enter__r��__exit__)rlr%rrr�setUpszSimpleBackgroundTests.setUpcCs�ttjtj�tjd��.}|j|j�|ji|j��|j	|j
�WdQRXttjtj�tjtd��,}|j|j�|j
|j��|j	|j
�WdQRXdS)N)rS)rSrT)r`r?r@rrbr^r�ro�getpeercertr�r\rdr�r6)rlr;rrr�test_connects
z"SimpleBackgroundTests.test_connectcCs<ttjtj�tjd�}|j|j�|jtjd|j	|j
�dS)N)rSzcertificate verify failed)r`r?r@rrdr�r�r]r8r^r�)rlr;rrr�test_connect_fails


z'SimpleBackgroundTests.test_connect_failcCsJttjtj�tjtd�}|j|j�|jd|j	|j
��|j|j��dS)N)rSrTr)
r`r?r@rrdr�r�r�ror#r�r6r�)rlr;rrr�test_connect_ex$sz%SimpleBackgroundTests.test_connect_excCs�ttjtj�tjtdd�}|j|j�|jd�|j	|j
�}|j|dtj
tjf�tjg|ggd�xby|j�PWqftjk
r�tj|gggd�Yqftjk
r�tjg|ggd�YqfXqfW|j|j��dS)NF)rSrTr�rg@)r`r?r@rrdr�r�r�r�r#r�rfrbZEINPROGRESSr$�selectr�r��SSLWantWriteErrorr6r�)rlr;r'rrr�test_non_blocking_connect_ex-s$
z2SimpleBackgroundTests.test_non_blocking_connect_excCs�tjtj�}|jtjtj���"}|j|j�|ji|j	��WdQRX|jtjtj�dd��}|j|j�WdQRXtj
|_|jt
�|jtjtj���$}|j|j�|j	�}|j|�WdQRXdS)NZdummy)r�)rr7r�r\r?r@r^r�ror�rdrXrYr�r6)rlrtr;rmrrr�test_connect_with_contextGs

z/SimpleBackgroundTests.test_connect_with_contextcCsLtjtj�}tj|_|jtjtj��}|j|j	�|j
tjd|j|j
�dS)Nzcertificate verify failed)rr7r�rdrXr\r?r@r�r�r]r8r^r�)rlrtr;rrr�test_connect_with_context_failYs
z4SimpleBackgroundTests.test_connect_with_context_failcCs�tjtj�}tj|_|jtd�|jtjtj	���$}|j
|j�|j�}|j
|�WdQRXtjtj�}tj|_|jtd�|jtjtj	���$}|j
|j�|j�}|j
|�WdQRXdS)N)r)rr7r�rdrXrYr�r\r?r@r^r�r�r6rc)rlrtr;rmrrr�test_connect_capathdsz)SimpleBackgroundTests.test_connect_capathcCs�tt��}|j�}WdQRXtj|�}tjtj�}tj|_|j	|d�|j
tjtj���$}|j
|j�|j�}|j|�WdQRXtjtj�}tj|_|j	|d�|j
tjtj���$}|j
|j�|j�}|j|�WdQRXdS)N)rf)rIr�r�rr&r7r�rdrXrYr\r?r@r^r�r�r6)rlr@r)r�rtr;rmrrr�test_connect_cadatazs"

z)SimpleBackgroundTests.test_connect_cadataroz*Can't use a socket as a file under Windowsc
Cs�ttjtj��}|j|j�|j�}|j�}|j�tj	|d�|j�t
j�|jt
��}tj	|d�WdQRX|j|jjtj�dS)Nr)r`r?r@r^r��fileno�makefiler�rr�r�r�r}rJrorarbZEBADF)rlrD�fdr@r�rrr�test_makefile_close�sz)SimpleBackgroundTests.test_makefile_closecCs�tjtj�}|j|j�|jd�t|tjdd�}|j|j	�d}xfy|d7}|j
�PWqDtjk
r�tj|ggg�YqDtj
k
r�tjg|gg�YqDXqDWtjr�tjjd|�dS)NF)rSr�rrz9
Needed %d calls to do_handshake() to establish session.
)r?r@r^r�r�r`rrbr�r�r�r�r�r�rrrrr)rlr;�countrrr�test_non_blocking_handshake�s&
z1SimpleBackgroundTests.test_non_blocking_handshakecCst|f|j�dti�dS)Nrm)�_test_get_server_certificater�r�)rlrrr�test_get_server_certificate�sz1SimpleBackgroundTests.test_get_server_certificatecCst|f|j��dS)N)�!_test_get_server_certificate_failr�)rlrrr� test_get_server_certificate_fail�sz6SimpleBackgroundTests.test_get_server_certificate_failc!Cs�ttjtj�tjdd��}|j|j�WdQRXttjtj�tjdd��}|j|j�WdQRX|jtjd��:tjtj��"}t|tjdd�}|j|j�WdQRXWdQRXdS)Nr6)rSrUr7zNo cipher can be selectedz^$:,;?*'dorothyx)	r`r?r@rrbr^r�r]r8)rlr;r]rrrr8�sz"SimpleBackgroundTests.test_ciphersc
Cs�tjtj�}tj|_|jtd�|j|j�g�|j	t
j
t
j���$}|j|j
�|j�}|j|�WdQRX|jt|j��d�dS)N)rr)rr7r�rdrXrYr�ror�r\r?r@r^r�r�r6r|)rlrtr;rmrrr�test_get_ca_certs_capath�sz.SimpleBackgroundTests.test_get_ca_certs_capath�PROTOCOL_TLSv1_2z
needs TLS 1.2c
Cs�tjtj�}tjtj�}tjtj�}|j|��T}|j|j�|j	|j
|�|j	|jj
|�||_
|j	|j
|�|j	|jj
|�WdQRXdS)N)rr7r�r�r?r@r\r^r�rqr_�_sslobj)rlZctx1Zctx2r;rDrrr�test_context_setget�sz)SimpleBackgroundTests.test_context_setgetc
Os�|jdd�}d}x�d}	|d7}y||�}
Wn>tjk
rh}z |jtjtjfkrR�|j}	WYdd}~XnX|j�}|j|�|	dkr�Pq|	tjkr|jd�}|r�|j	|�q|j
�qWtjr�t
jj	d||jf�|
S)NrZ�
rri�z"Needed %d calls to complete %s().
)rHrr8rbr�ZSSL_ERROR_WANT_WRITEr��sendallrKrr�rrrrr*)
rlr]�incoming�outgoingr?r=r>rZr�rb�retr��bufrrr�ssl_io_loop�s2



z!SimpleBackgroundTests.ssl_io_loopcCsvtjtj�}|j|j�|j|j�tj�}tj�}tjtj	�}tj
|_|jt
�d|_|j||dd�}|j|jj|�|j|j��|j|j��|j|j��|jt|j�dtjkr�|j|jd��|j||||j�|j|j��|j|j��|j|j��|j|j��dtjk�r0|j|jd��y|j||||j �Wntj!k
�r^YnX|jtj"|j#d�dS)NTFr�z
tls-uniquesfoo)$r?r@r�r�r^r�rr�r7r�rdrXrYr�r��wrap_biorqr��ownerr��cipherr��assertIsNotNone�shared_ciphersr}r~r�r0r�r�r�r6�unwrapZSSLSyscallErrorr8r)rlr]r�r�rt�sslobjrrr�test_bio_handshake
s:

z(SimpleBackgroundTests.test_bio_handshakecCs�tjtj�}|j|j�|j|j�tj�}tj�}tjtj	�}tj
|_|j||d�}|j
||||j�d}|j
||||j|�|j
||||jd�}|j|d�|j
||||j�dS)NFsFOO
isfoo
)r?r@r�r�r^r�rr�r7r�rbrXr�r�r�rr�ror�)rlr]r�r�rtr�Zreqr�rrr�test_bio_read_write_data+sz.SimpleBackgroundTests.test_bio_read_write_dataN)r*r+r,�__doc__r�r�r�r�r�r�r�r�r�r;r�rr
r�r�r�r�r8r�r�r/rArr�r�r�r�rrrrr�s*
	"!r�c@s*eZdZdd�Zejejd�dd��ZdS)�NetworkedTestscCs|tjt��httjtj�tjdd�}|j|j	�|j
d�|jtdf�}|dkrZ|jd�|j
|tjtjf�WdQRXdS)NF)rSr�gH�����z>i�rz!REMOTE_HOST responded too quickly)r�transient_internet�REMOTE_HOSTr`r?r@rrdr�r�rYr#r rfrbZEAGAINr$)rlr;r'rrr�test_timeout_connect_ex>s

z&NetworkedTests.test_timeout_connect_exz
Needs IPv6cCs2tjd��t|dd�t|dd�WdQRXdS)Nzipv6.google.comi�)rr�r�r�)rlrrr� test_get_server_certificate_ipv6Lsz/NetworkedTests.test_get_server_certificate_ipv6N)	r*r+r,r�r;r/rZIPV6_ENABLEDr�rrrrr�<sr�cCsltj||f�}|s$|jd||f�tj||f|d�}|sL|jd||f�tjrhtjjd|||f�dS)NzNo server certificate on %s:%s!)rTz&
Verified certificate for %s:%s is
%s
)r�get_server_certificater�rrrrr)�test�hostr&rmr)rrrr�Ssr�cCsjytj||ftd�}Wn:tjk
rP}ztjr@tjjd|�WYdd}~XnX|j	d|||f�dS)N)rTz%s
z$Got server certificate %s for %s:%s!)
rr�r�r8rrrrrr�)rrr&r)�xrrrr�^s"r�)�make_https_serverc@sReZdZGdd�dej�Zddd�Zdd	�Zd
d�Zddd
�Z	dd�Z
dd�ZdS)r�c@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.cCs@||_d|_||_||_|jjd�d|_tjj|�d|_	dS)NFrT)
r%�runningr]�addrr��sslconn�	threading�Thread�__init__�daemon)rlr%Zconnsockrrrrr	tsz-ThreadedEchoServer.ConnectionHandler.__init__cCsyB|jjj|jdd�|_|jjj|jj��|jjj|jj	��Wn�t
tfk
r�}zB|jjjt
|��|jjr�tdt|j�d�d|_|j�dSd}~X�n\tjtfk
�r}zL|jjjt
|��|jjr�tdt|j�d�d|_|jj�|j�dSd}~Xn�X|jjj|jj��|jjjtjk�r�|jj�}tj�rr|jj�rrtjj dt!j"|�d�|jjd�}tj�r�|jj�r�tjj dt
t#|��d	�|jj$�}tj�r�|jj�r�tjj d
t
|�d�tjj dt
|jj��d�dSdS)NT)r\z'
 server:  bad connection attempt from z:
Fz client cert is r�z cert binary is z bytes
z" server: connection cipher is now z" server: selected protocol is now )%r%r_r\r]r�selected_npn_protocols�append�selected_npn_protocol�selected_alpn_protocols�selected_alpn_protocol�ConnectionResetError�BrokenPipeError�conn_errorsrp�chattyrr�rrr�rr8rJ�stopr�rXrdr�rrrrrr�r�r|r�)rlr�rmZcert_binaryr�rrr�	wrap_conn~sF


z.ThreadedEchoServer.ConnectionHandler.wrap_conncCs |jr|jj�S|jjd�SdS)Ni)rr�r]rK)rlrrrr��s
z)ThreadedEchoServer.ConnectionHandler.readcCs"|jr|jj|�S|jj|�SdS)N)rrr]rO)rlr�rrrr�sz*ThreadedEchoServer.ConnectionHandler.writecCs |jr|jj�n
|jj�dS)N)rr�r])rlrrrr��sz*ThreadedEchoServer.ConnectionHandler.closecCszd|_|jjs|j�sdS�xX|j�rt�y�|j�}|j�}|s|d|_y|jj�|_Wnt	k
rhYnXd|_|j
��nj|dkr�tjr�|jj
r�tjjd�|j
�dS|jjr�|dkr�tjr�|jj
r�tjjd�|jd�|j�s�dS�n�|jj�rf|j�rf|dk�rftj�r(|jj
�r(tjjd	�|jd�|jj�|_d|_tj�r�|jj
�r�tjjd
��n�|dk�r�tj�r�|jj
�r�tjjd�|jjd
�}|jt|�jd�d��n0|dk�r8tj�r�|jj
�r�tjjd�y|jj�Wn>tjk
�r*}z|jt|�jd�d�WYdd}~XnX|jd�n�|dk�rj|jj�dk	�r^|jd�n
|jd�n||dk�r�|jj�}|jt|�jd�d�nNtj�r�|jj
�r�|j�r�d�p�d}tjjd|||j�|f�|j|j��Wqtk
�r2|jj�r tj�r tjjdj|j��|j
�d|_Yqt	k
�rp|jj�rTtd�|j
�d|_|jj�YqXqWdS)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-ascii�
sPHAz( server: initiating post handshake auth
sHASCERTsTRUE
sFALSE
sGETCERTZ	encryptedZunencryptedz/ server: read %r (%s), sending back %r (%s)...
z Connection reset by peer: {}
zTest server failure:
)rr%�starttls_serverrr��striprr�r]rJr�rr�connectionchattyrrrr�r�r��verify_client_post_handshakerr8r�rrrr7rrr)rl�msg�strippedr�r�rmZctyperrr�run�s�




*






z(ThreadedEchoServer.ConnectionHandler.runN)
r*r+r,r�r	rr�rr�rrrrr�ConnectionHandlerns
8rNTFcCs�|r||_n�tj|dk	r|ntj�|_|dk	r2|ntj|j_|rL|jj|�|r\|jj|�|rl|jj|�|	r||jj	|	�|
r�|jj
|
�||_||_||_
tj�|_tj|j�|_d|_d|_g|_g|_g|_g|_tjj|�d|_dS)NFT)r_rr7rnrbrXrYrZ�set_npn_protocols�set_alpn_protocolsr[rrrr?r]rr"r&�flag�activerrr�rrrr	r
)rlZcertificater^�certreqs�cacertsrrrZ
npn_protocolsZalpn_protocolsrUr_rrrr	$s<


zThreadedEchoServer.__init__cCs|jtj��|jj�|S)N)�startr�Eventr!�wait)rlrrrr�Is
zThreadedEchoServer.__enter__cGs|j�|j�dS)N)rr)rlr=rrrr�NszThreadedEchoServer.__exit__cCs||_tjj|�dS)N)r!rrr%)rlr!rrrr%RszThreadedEchoServer.startcCs|jjd�|jj�d|_|jr,|jj�x�|j�ryT|jj�\}}tjrj|j	rjt
jjdt
|�d�|j|||�}|j�|j�Wq.tjk
r�Yq.tk
r�|j�Yq.tk
r�}z*tjr�|j	r�t
jjdt
|�d�WYdd}~Xq.Xq.W|jj�dS)Ng�������?Tz server:  new connection from r�z connection handling failed: )r]rYr�r"r!r�rurrrrrrr�rr%rr?rZ�KeyboardInterruptrr�r�)rlZnewconnZconnaddrZhandlerr�rrrrVs.


(zThreadedEchoServer.runcCs
d|_dS)NF)r")rlrrrrqszThreadedEchoServer.stop)NNNNTFFNNNN)N)r*r+r,rrrr	r�r�r%rrrrrrr�ls7
!
r�c@sXeZdZGdd�dej�Zdd�Zdd�Zdd�Zd	d
�Z	ddd
�Z
dd�Zdd�ZdS)�AsyncoreEchoServerc@s6eZdZGdd�dej�Zdd�Zdd�Zdd�Zd	S)
zAsyncoreEchoServer.EchoServerc@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)z/AsyncoreEchoServer.EchoServer.ConnectionHandlercCs4t|d|dd�|_tjj||j�d|_|j�dS)NTF)r\rVr�)r`r?�asyncore�dispatcher_with_sendr	�_ssl_accepting�_do_ssl_handshake)rl�connrVrrrr	|s
z8AsyncoreEchoServer.EchoServer.ConnectionHandler.__init__cCs.t|jtj�r*x|jj�dkr(|j�qWdS)NrT)r�r?r�	SSLSocketr�Zhandle_read_event)rlrrr�readable�sz8AsyncoreEchoServer.EchoServer.ConnectionHandler.readablecCs�y|jj�Wn�tjtjfk
r*dStjk
rB|j�Stjk
rX�Yn@tk
r�}z|j	dt
jkr�|j�SWYdd}~XnXd|_dS)NrF)
r?r�rr�r�ZSSLEOFError�handle_closer8rJr=rbZECONNABORTEDr,)rlrQrrrr-�szAAsyncoreEchoServer.EchoServer.ConnectionHandler._do_ssl_handshakecCsT|jr|j�n@|jd�}tjr4tjjdt|��|sB|j	�n|j
|j��dS)Niz server:  read %s from client
)r,r-rKrrrrrr�r�rOr)rlr�rrr�handle_read�s


z;AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_readcCs$|j�tjr tjjd|j�dS)Nz server:  closed connection %s
)r�rrrrrr?)rlrrrr1�sz<AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_closecCs�dS)Nr)rlrrrr�sz<AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_errorN)	r*r+r,r	r0r-r2r1rrrrrrzsrcCs@||_tjtjtj�}tj|d�|_tjj	||�|j
d�dS)Nr6r-)rVr?r@ZSOCK_STREAMrr"r&r*�
dispatcherr	r�)rlrVr]rrrr	�s
z&AsyncoreEchoServer.EchoServer.__init__cCs(tjrtjjd|�|j||j�dS)Nz$ server:  new connection from %s:%s
)rrrrrrrV)rlZsock_objrrrr�handle_accepted�sz-AsyncoreEchoServer.EchoServer.handle_acceptedcCs�dS)Nr)rlrrrr�sz*AsyncoreEchoServer.EchoServer.handle_errorN)	r*r+r,r*r+rr	r4rrrrr�
EchoServerxs3r5cCs8d|_d|_|j|�|_|jj|_tjj|�d|_dS)NFT)	r!r"r5r%r&rrr	r
)rlrVrrrr	�s
zAsyncoreEchoServer.__init__cCsd|jj|jfS)Nz<%s %s>)�	__class__r*r%)rlrrr�__str__�szAsyncoreEchoServer.__str__cCs|jtj��|jj�|S)N)r%rr&r!r')rlrrrr��s
zAsyncoreEchoServer.__enter__cGsVtjrtjjd�|j�tjr,tjjd�|j�tjrFtjjd�tjdd�dS)Nz cleanup: stopping server.
z! cleanup: joining server thread.
z cleanup: successfully joined.
T)Z
ignore_all)	rrrrrrrr*Z	close_all)rlr=rrrr��szAsyncoreEchoServer.__exit__NcCs||_tjj|�dS)N)r!rrr%)rlr!rrrr%�szAsyncoreEchoServer.startc	CsBd|_|jr|jj�x&|jr<ytjd�WqYqXqWdS)NTr)r"r!r�r*Zloop)rlrrrr�s
zAsyncoreEchoServer.runcCsd|_|jj�dS)NF)r"r%r�)rlrrrr�szAsyncoreEchoServer.stop)N)
r*r+r,r*r3r5r	r7r�r�r%rrrrrrr)tsD

r)�FOO
cCszi}t||dd�}|��X|jtj�||d���}	|	jt|jf�x�|t|�t|�gD]�}
|rttj	rtt
jjd|�|	j|
�|	j
�}|r�tj	r�t
jjd|�||j�krVtd|dd�t|�|dd�j�t|�f��qVW|	jd	�|�rtj	�rt
jjd
�|j|	j�|	j�|	j�|	j�|	j�|	j�|	j|	jd��|	j�WdQRX|j|d<|j|d
<|j|d<WdQRX|S)zc
        Launch a server, connect a client to it and try various reads
        and writes.
        F)r_rr)r��sessionz 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��session_reusedr9�server_alpn_protocols�server_npn_protocols�server_shared_ciphers)r�r\r?r^r_r&r�r�rrrrrr�r�AssertionErrorr|r�r;r�r�rr
r�r?r9r�rrr�)�client_context�server_context�indatarr�sni_namer9r�r%r;�arg�outdatarrr�server_params_test�sR


 


rJc
Cs�|dkrtj}tjdtjdtjdi|}tjr\|r6dp8d}tjj|tj	|�tj	|�|f�tj
|�}|j|O_tj
|�}	|	j|O_|jtj
kr�|jd�x*||	fD]}
||
_|
jt�|
jt�q�Wyt||	ddd	�}WnTtjk
r�|r��Yn�tk
�r6}z|�s$|jtjk�r&�WYdd}~XnRX|�s\td
tj	|�tj	|�f��n,|dk	�r�||dk�r�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.
        Nrbrcrdz %s->%s %s
z
 {%s->%s} %s
r6F)rrz5Client protocol %s succeeded with server protocol %s!Tr�z%version mismatch: expected %r, got %r)rrbrcrdrrrrrZget_protocol_namer7r@rrr�r[rXrZr�rYrJr8rJrb�
ECONNRESETrC)
Zserver_protocolZclient_protocol�expect_successZ	certsreqs�server_options�client_optionsZcerttypeZ	formatstrrDrErtr�r�rrr�try_protocol_combo	sP	





rOc@speZdZedd��Zdd�Zeje�d�dd��Z	dd	�Z
d
d�Zdd
�Zeeje
ed�d�dd���Zeedd���Zeeje
ed�d�dd���Zedd��Zeeje
ed�d�edd����Zeeje
ed�d�d d!���Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Z d8d9�Z!ejej"d:�d;d<��Z#ejej$d=�d>d?��Z%ejd@ej&kdA�dBdC��Z'dDdE�Z(eje
edF�dG�dHdI��Z)dJdK�Z*dLdM�Z+ejej,dN�dOdP��Z-ejej,dQ�dRdS��Z.dTdU�Z/ejej0dV�dWdX��Z1dYdZ�Z2d[d\�Z3e4d]d^��Z5e4d_d`��Z6e4dadb��Z7e4dcdd��Z8dedf�Z9dgdh�Z:didj�Z;dkdl�Z<dmdn�Z=doS)p�
ThreadedTestsc7Cs�tjrtjjd�x`tD]X}|tjtjhkr.q|j	tj
|d��*tj|�}|jt
�t||ddd�WdQRXqWtjtj�}|jt�tjtj�}|jt�|j	tjtjd��t||dddd�WdQRXd	|_|j	tjtjd��B|jtj��}t||dddd�WdQRX|jd
t|j��WdQRX|j	tjtjd��@|jtj��}t||ddd�WdQRX|jd
t|j��WdQRX|j	tjtjd��@|jtj��}t||ddd�WdQRX|jd
t|j��WdQRXdS)z2Basic test of an SSL client connecting to a serverr�)rrT)rrN)�clientr%�fakehostname)rDrErrrGFz%called a function you should not call)rDrErr)rrrrrr3rr>r�ZsubTest�_PROTOCOL_NAMESr7rZr�rJrYr��SIGNED_CERTFILE2r�r}r8rfrpra)rlrrr_rDrEr�rrr�	test_echoZ	sT




zThreadedTests.test_echocCsrtjrtjjd�tjtj�}tj|_	|j
t�|jt�t
|dd�}|��|jtj�dd�}|jt|jf�|jt��|j�WdQRX|j�|j�}|j|d�|j�}tjr�tjjtj|�d�tjjdt|�d�d|k�r|jd	tj|��d|dk�r|jd�|jd
|�|jd|�tj|d
�}tj|d�}|j||�|j �WdQRXdS)Nr�F)r_r)r�zCan't get peer certificate.zConnection cipher is z.
r�z$No subject field in certificate: %s.r��Python Software FoundationzkMissing or invalid 'organizationName' field in certificate subject; should be 'Python Software Foundation'.r�r��r�rV)rW)!rrrrrrr7r�rdrXrYr�rZr�r\r?r^r_r&r}r~r�r�r6r�r�r�rpr�rfrr4r�)rlr_r%r;rmr�Zbefore�afterrrr�test_getpeercert�	sB



zThreadedTests.test_getpeercertz!verify_flags need OpenSSL > 0.9.8c4Cs�tjrtjjd�tjtj�}|jt	�tjtj�}tj
|_|jt
�ttdd�}|j|jtj|B�t|dd�}|�D|jtj���*}|jt|jf�|j�}|j|d�WdQRXWdQRX|jtjO_t|dd�}|�J|jtj���0}|jtjd��|jt|jf�WdQRXWdQRXWdQRX|jt�t|dd�}|�D|jtj���*}|jt|jf�|j�}|j|d�WdQRXWdQRXdS)Nr�rDrT)r_rzCan't get peer certificate.zcertificate verify failed)rrrrrrr7rgrZr�rdrXrYr�rErorFrGr�r\r?r^r_r&r�r6rHr]r8�CRLFILE)rlrEr_rIr%r;rmrrr�test_crl_check�	s:

 .
zThreadedTests.test_crl_checkc:Csdtjrtjjd�tjtj�}|jt	�tjtj�}tj
|_d|_|j
t�t|dd�}|�H|jtj�dd��*}|jt|jf�|j�}|j|d�WdQRXWdQRXt|dd�}|�N|jtj�dd��0}|jtjd��|jt|jf�WdQRXWdQRXWdQRXt|dd�}|�<tj��(}|jtd	��|j|�WdQRXWdQRXWdQRXdS)
Nr�T)r_rr�)r�zCan't get peer certificate.Zinvalidz,hostname 'invalid' doesn't match 'localhost'z'check_hostname requires server_hostname)rrrrrrr7rgrZr�rdrXr�rYr�r�r\r?r^r_r&r�r6r]rpr~)rlrEr_r%r;rmrrrr��	s8



 

.
z!ThreadedTests.test_check_hostnamec%Cstjjtjjt�ptjd�}tttj	t
ddd�}|��tj���}t||tj
d���}y|jt|jf�Wn~tjk
r�}ztjr�tjjd|�WYdd}~XnPtk
r�}z*|jtjkr��tjr�tjjd|�WYdd}~XnX|jd�WdQRXWdQRXWdQRXdS)	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.
            zkeycert.pemF)r#r$rr)rVr^z
SSLError is %r
Nz
socket.error is %r
z'Use of invalid cert should have failed!)rrrrr	rfr�r�rrdr�r?r`rgr^r_r&r8rrrrrrJrbrKr�)rlrVr%r]r;r�rrr�test_wrong_cert
s,
 "zThreadedTests.test_wrong_certc
sttj��tj��tj��tj�t�����fdd�}����fdd�}tj|d�}|j�z
|�Wd|j�XdS)z|A brutal shutdown of an SSL server should raise an OSError
            in the client when attempting handshake.
            cs8�j��j��j�\}}|j��j��j�dS)N)r�r�rur�)Znewsockr)�
listener_gone�listener_readyr;rr�listener5
sz2ThreadedTests.test_rude_shutdown.<locals>.listenercsb�j�tj��H}|jt�f��j�yt|�}Wntk
rHYnX�jd�WdQRXdS)Nz2connecting to closed SSL socket should have failed)r'r?r^r_r`rJr�)r��ssl_sock)r]r^r&rlrr�	connector=
s
z3ThreadedTests.test_rude_shutdown.<locals>.connector)�targetN)	rr&r?rr"r_rr%r)rlr_rar:r)r]r^r&r;rlr�test_rude_shutdown'
s
z ThreadedTests.test_rude_shutdownr3z)OpenSSL is compiled without SSLv2 supportcCs�tjrtjjd�ttjtjd�ttjtjdtj�ttjtjdtj	�ttjtj
d�ttd�rtttjtjd�ttjtj
d�t�r�ttjtj
dtjd�ttjtj
dtjd�ttjtj
dtjd�dS)z9Connecting to an SSLv2 server with various client optionsr�TF�PROTOCOL_SSLv3)rNN)rrrrrrOrr3rcrdr�rArdrgr&rhrirj)rlrrr�test_protocol_sslv2P
s 


z!ThreadedTests.test_protocol_sslv2cCs�tjrtjjd�ttd�rnyttjtj	d�Wn<t
k
rl}z tjr\tjjdt|��WYdd}~XnXttd�r�ttjtjd�ttjtjd�ttjtj
d�ttd�r�ttjtjdtj�ttjtjdtj�ttjtj
dtj�ttd��rttjtjdtj�ttjtjdtj�ttjtj
dtj�ttd��rXttjtjdtjd	�ttjtjdtjtjBd	�ttjtj
dtjd	�dS)
z:Connecting to an SSLv23 server with various client optionsr�r3Tz; SSL2 client to SSL23 server test unexpectedly failed:
 %s
NrdFrF)rM)rrrrrrArrOr�r3rJrprdrgrcrdrirhrj)rlrrrr�test_protocol_sslv23h
s:



z"ThreadedTests.test_protocol_sslv23rdz)OpenSSL is compiled without SSLv3 supportcCs�tjrtjjd�ttjtjd�ttjtjdtj�ttjtjdtj	�t
td�rdttjtjd�ttjtjdtj
d�ttjtjd�t�r�ttjtjdtjd�dS)z9Connecting to an SSLv3 server with various client optionsr�ZSSLv3r3F)rNN)rrrrrrOrrdrcrdrAr3r�rirgr&rh)rlrrr�test_protocol_sslv3�
s


z!ThreadedTests.test_protocol_sslv3cCs�tjrtjjd�ttjtjd�ttjtjdtj�ttjtjdtj	�t
td�rdttjtjd�t
td�r~ttjtjd�ttjtj
dtjd�dS)z8Connecting to a TLSv1 server with various client optionsr�rFr3Frd)rNN)rrrrrrOrrgrcrdrAr3rdr�rj)rlrrr�test_protocol_tlsv1�
s

z!ThreadedTests.test_protocol_tlsv1�PROTOCOL_TLSv1_1zTLS version 1.1 not supported.cCs�tjrtjjd�ttjtjd�ttd�r<ttjtj	d�ttd�rVttjtj
d�ttjtjdtjd�ttjtjd�ttjtj
d�ttj
tjd�dS)znConnecting to a TLSv1.1 server with various client options.
               Testing against older TLS versions.r�zTLSv1.1r3Frd)rNN)rrrrrrOrrirAr3rdr�r-rg)rlrrr�test_protocol_tlsv1_1�
s


z#ThreadedTests.test_protocol_tlsv1_1r�zTLS version 1.2 not supported.cCs�tjrtjjd�ttjtjdtjtj	Btjtj	Bd�t
td�rRttjtjd�t
td�rlttjtjd�ttjtj
dtjd�ttj
tjd�ttjtjd�ttjtjd�ttjtjd�ttjtjd�dS)	znConnecting to a TLSv1.2 server with various client options.
               Testing against older TLS versions.r�zTLSv1.2)rMrNr3Frd)rNN)rrrrrrOrr�rirhrAr3rdr�r.rgri)rlrrr�test_protocol_tlsv1_2�
s 



z#ThreadedTests.test_protocol_tlsv1_2c	Cs�d}tttjd	d	d	d
�}d}|��ltj�}|jd�|jt|jf�t	j
rXtjj
d
�x�|D]�}t	j
rxtjj
d|�|r�|j
|�|j�}n|j|�|jd�}|j�j�}|dkr�|jd�r�t	j
r�tjj
d|�t|tjd�}d	}q^|dk�r(|jd��r(t	j
�rtjj
d|�|j�}d}q^t	j
r^tjj
d|�q^Wt	j
�rVtjj
d�|�rh|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 6T)r^rrrFrr�z client:  sending %r...
isokz/ client:  read %r from server, starting TLS...
)r^z- client:  read %r from server, ending TLS...
z client:  read %r from server
z client:  closing connection.
sover
N)rlrmrnrorprqrrrs)r�r�rrgr?r�r^r_r&rrrrrr�rOrKrrr'r`r�r�)	rlZmsgsr%�wrappedr;rFr.rIrrrr�
test_starttls�
s`








zThreadedTests.test_starttlscCs�t|td�}tjrtjjd�ttd��}|j�}WdQRXd}d|j	t
jjt�df}t
jtd�}tjj||d	�}zN|j�jd
�}|r�t|�dkr�|jt|��}tjr�tjjdt|�|f�Wd|j�X|j||�dS)
z8Using socketserver to create and manage SSL connections.)rVr��rbNr6zhttps://localhost:%d/%sr)r�)r_zcontent-lengthrz/ client: read %d bytes from remote server '%s'
)rr�rrrrrrIr�r&rr�splitrr��urllibZrequestZurlopen�inforHr1r|r�ro)rlr%r@r*r+Zurlr_Zdlenrrr�test_socketservers(
zThreadedTests.test_socketservercCstjrtjjd�d}tt�}|��ttj��}|j	d|j
f�tjrVtjjd|�|j|�|j�}tjr~tjjd|�||j�kr�|j
d|dd�t|�|dd�j�t|�f�|jd	�tjr�tjjd
�|j�tjr�tjjd�WdQRXdS)z'Check the example asyncore integration.r�sFOO
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�r`r?r^r&r�rr�r|r�)rlrFr%r;rIrrr�test_asyncore_server6s2


z"ThreadedTests.test_asyncore_servercs�tjrtjjd�tttjtj	tddd�}|���t
tj�dtttjtj	d���jt
|jf��fdd�}�fdd	�}d
�jdgtfd�jddgtfd
�jdgdd�fg}d�jdgfd�jddgfd|dgfd|dgfg}d}�x�|D]�\}}}	}
}||jd�}yx||f|
��}
dj|�}|j|
||�|d��j�}||j�k�rz|jdj||dd�t|�|dd�t|�d��Wq�tk
�r�}zB|	�r�|jdj|d��t|�j|��s�|jdj||d��WYdd}~Xq�Xq�Wx�|D]�\}}}	}
||jd�}yV�j|�||
�}||j�k�rV|jd j||dd�t|�|dd�t|�d��Wnhtk
�r�}zJ|	�r�|jd!j|d��t|�j|��s�|jdj||d���j�WYdd}~XnX�q�Wd"}�j|�tt|��}|j�jd&|�t|��|j||�tdk	�rBtj t|�}|j!|�}�j|�|j�j�|�|j"t#�j$�|j"t#�j%d"g�|j"t#�j&d$�|j"t#�j'td$�g��jd%�|j"t�jd'�|j"t�jd(��j(�WdQRXdS))z Test recv(), send() and friends.r�TF)r#r^r$rr)r\rVrTrSr^cs"tdd�}�j|�}|d|�S)N�rI)r�rL)�br�)r;rr�
_recv_intogs
z0ThreadedTests.test_recv_send.<locals>._recv_intocs&tdd�}�j|�\}}|d|�S)Nr|rI)r�rN)r}r�r)r;rr�_recvfrom_intolsz4ThreadedTests.test_recv_send.<locals>._recvfrom_intorOrPzsome.addressr�cSsdS)Nr)rrrr�<lambda>usz.ThreadedTests.test_recv_send.<locals>.<lambda>rKrMrLrNZPREFIX_rxzsending with {})rzpWhile sending with <<{name:s}>> bad data <<{outdata:r}>> ({nout:d}) received; expected <<{indata:r}>> ({nin:d})
Nr:)r
rIZnoutrFZninz>Failed to send with method <<{name:s}>>; expected to succeed.
)r
zFMethod <<{name:s}>> failed with unexpected exception message: {exp:s}
)r
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.
sdatarrIsover
rrr))rrrrrr�r�rrbrgr`r?r^r_r&rOr|rPr�rKrMr�r7ror�rr�r~rpr'r��ctypesZc_ubyteZfrom_buffer_copyr}rQrRrSrTrUr�)rlr%r~rZsend_methodsZrecv_methodsZdata_prefixZ	meth_nameZ	send_methrLr=Zret_val_methrFr�rrIr�Z	recv_methr��bufferZubyteZ	bytesliker)r;r�test_recv_sendSs�



"

 




zThreadedTests.test_recv_sendcCs�tt�}|j�|j|jdd�tjt|jf�}|j|j	�t
|dd�}|j|j	�|jd�|j|j
d�d�|j|jd�d�|j|j�d�|jd�|j|j
d�d�|j|jt��d�dS)NF)Zsuppress_ragged_eofssdatarrj)r�r�r�r�r�r?Zcreate_connectionr_r&r�r`rOrorKr�r�rLr�)rlr%r;rrr�test_recv_zero�s

zThreadedTests.test_recv_zerocs�tttjtjtddd�}|�xttj�dtttjtjd���jt|j	f��j
d�td����fdd�}|jtj
tjf|��j
d��j�WdQRXdS)NTF)r#r^r$rr)r\rVrTrSr^i csx�j��qWdS)N)rOr)r�r;rr�fill_buffersz8ThreadedTests.test_nonblocking_send.<locals>.fill_buffer)r�r�rrbrgr`r?r^r_r&r�r�r}r�r�r�)rlr%r�r)r�r;r�test_nonblocking_send�s*


z#ThreadedTests.test_nonblocking_sendcs�tjtj��d}tj��}tj��d����fdd�}tj|d�}|j��j�z�z:tjtj�}|j	d�|j
||f�|jtjdt
|�Wd|j�Xz:tjtj�}t
|�}|j	d�|jtjd|j
||f�Wd|j�XWdd�|j��j�XdS)	Nz	127.0.0.1Fcsj�j��j�g}x:�sNtj�gggd�\}}}�|kr|j�j�d�qWx|D]}|j�qVWdS)Ng�������?r)r�r�r�rrur�)ZconnsrE�wr�r])�finishr%�startedrr�serves
z3ThreadedTests.test_handshake_timeout.<locals>.serve)rbg�������?z	timed outT)r?r@rr"rr&rr%r'rYr^r]rZr`r�r)rlrr&r�r:r�r)r�r%r�r�test_handshake_timeout
s6






z$ThreadedTests.test_handshake_timeoutcstjtj�}tj|_|jt�|jt�tjtj	��d}t
j��}|j�dd��|j
�j�tj��d�d�����fdd�}tj|d�}|j��j�|jtj��}|j||f�|jd�|j�|j�}|j�|j��j��j�|j�tj�|j�|�dS)Nz	127.0.0.1T)r\cs0�j��j��j�\���j�jd��dS)Nr+)r�r�rurOrKr)�evt�peer�remoter%rrr�Nsz/ThreadedTests.test_server_accept.<locals>.serve)rbsdata)rr7r�rdrXrYr�rZr?r@rr"r\r6r\rr&rr%r'r^rOrKr�r�rr0r/ro)rlr_rr&r�r:rQZclient_addrr)r�r�r�r%r�test_server_accept>s6



z ThreadedTests.test_server_acceptcCsZtjtj�}|jtj���6}|jt��}|j�WdQRX|j|j	j
t
j�WdQRXdS)N)rr7r�r\r?r}rJr�rorarb�ENOTCONN)rlr_r]rdrrr�test_getpeercert_enotconngs
z'ThreadedTests.test_getpeercert_enotconncCsZtjtj�}|jtj���6}|jt��}|j�WdQRX|j|j	j
t
j�WdQRXdS)N)rr7r�r\r?r}rJr�rorarbr�)rlr_r]rdrrr�test_do_handshake_enotconnns
z(ThreadedTests.test_do_handshake_enotconncCs�tjtj�}|jt�tjtj�}tj|_d|_|jtj	O_|j
d�|j
d�t|d��J}|jt
j
�dd��,}|jt��|jt|jf�WdQRXWdQRXWdQRX|jd|jd�dS)	NTZAES128�AES256)r_r�)r�zno shared cipherr)rr7r�rZr�rdrXr�r@rkr[r�r\r?r}rJr^r_r&rfr)rlrErDr%r;rrr�test_no_shared_ciphersus



.z$ThreadedTests.test_no_shared_cipherscCs�tjtj�}tttjdd��`}|jtj���6}|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.
            F)r^rNrF)
rr7rgr�r�r\r?rqr�r^r_r&ro)rlr_r%r;rrr�test_version_basic�s
z ThreadedTests.test_version_basicz%test requires TLSv1.3 enabled OpenSSLcCs�tjtj�}|jt�|jtjtjBtjBO_t	|d��J}|j
tj���0}|jt
|jf�|j|j�ddddg�WdQRXWdQRXdS)N)r_rZTLS_AES_256_GCM_SHA384ZTLS_CHACHA20_POLY1305_SHA256ZTLS_AES_128_GCM_SHA256)rr7rnrZr�r@rjr-r.r�r\r?r^r_r&rfr�)rlr_r%r;rrr�test_tls1_3�s
zThreadedTests.test_tls1_3z"test requires ECDH-enabled OpenSSLcCs�tjtj�}|jt�|jtjO_tjdkr:|jd�t	|d��D}|j
tj���*}|jt
|jf�|jd|j�d�WdQRXWdQRXdS)Nrrz
ECCdraft:ECDH)r_ZECDH)rrr)rr7r�rZr�r@rkr%r[r�r\r?r^r_r&rfr�)rlr_r%r;rrr�test_default_ecdh_curve�s


z%ThreadedTests.test_default_ecdh_curvez
tls-uniquez*'tls-unique' channel binding not availablecCs�tjrtjjd�tttjtj	tddd�}|��Lt
tj�dtttjtj	d�}|jt
|jf�|jd�}tjr�tjjdj|��|j|�|jt|�d�|jd	�|j�j�}|j|t|�jd
��|j�t
tj�dtttjtj	d�}|jt
|jf�|jd�}tj�rtjjdj|��|j||�|j|�|jt|�d�|jd	�|j�j�}|j|t|�jd
��|j�WdQRXdS)
z Test tls-unique channel binding.r�TF)r#r^r$rr)r\rVrTrSr^z
tls-uniquez! got channel binding data: {0!r}
�sCB tls-unique
zus-asciiz) got another channel binding data: {0!r}
N)rrrrrr�r�rrbrgr`r?r^r_r&r�r7r�ror|r�rr�r�r�r�)rlr%r;Zcb_dataZpeer_data_reprZnew_cb_datarrrr��s\









z-ThreadedTests.test_tls_unique_channel_bindingcCs\tjtj�}|jt�t||ddd�}tjrBtj	j
dj|d��|j|ddddh�dS)NT)rrz got compression: {!r}
r;ZZLIBZRLE)
rr7rgrZr�rJrrrrrr7rf)rlr_r�rrr�test_compression�s

zThreadedTests.test_compressionrz*ssl.OP_NO_COMPRESSION needed for this testcCsJtjtj�}|jt�|jtjO_t||ddd�}|j|dd�dS)NT)rrr;)	rr7rgrZr�r@rrJrq)rlr_r�rrr�test_compression_disabled
s

z'ThreadedTests.test_compression_disabledcCs~tjtj�}|jt�|jt�|jd�t||ddd�}|dd}|j	d�}d|krzd|krzd	|krz|j
d
|d�dS)NZkEDHT)rrr�r�-ZADHZEDHZDHEzNon-DH cipher: )rr7rgrZr�rprqr[rJrwr�)rlr_r�r��partsrrr�test_dh_params

s




zThreadedTests.test_dh_paramscCs:tjtj�}|jt�t||ddd�}|j|dd�dS)NT)rrr=)rr7rgrZr�rJrq)rlr_r�rrr�test_selected_alpn_protocol
s


z)ThreadedTests.test_selected_alpn_protocolzALPN support requiredcCs^tjtj�}|jt�tjtj�}|jt�|jddg�t||ddd�}|j|dd�dS)Nrx�barT)rrr=)	rr7rgrYr�rZr rJrq)rlrDrEr�rrr�/test_selected_alpn_protocol_if_server_uses_alpn"
s


z=ThreadedTests.test_selected_alpn_protocol_if_server_uses_alpnz!ALPN support needed for this testcCs^dddg}ddgdfddgdfdgdfddgdfg}�x"|D�]\}}tjtj�}|jt�|j|�tjtj�}|jt�|j|�yt||ddd�}Wn(tjk
r�}z
|}WYdd}~XnX|dkr�tr�tj	dkr�|j
|tj�q<dt|�t|�t|�f}	|d}
|j|
||	|
d
f�t
|d��r<|ddnd}|j|||	|df�q<WdS)Nrxr�Z	milkshakezhttp/3.0zhttp/4.0T)rrrrr�zKfailed trying %s (s) and %s (c).
was expecting %s, but got %%s from the %%sr=rQr@�nothingr%)rrrr�r)rr7r�rZr�r rJr8�IS_OPENSSL_1_1r%r0rpror|)rl�server_protocols�protocol_tests�client_protocolsrrErDr�r�r�
client_result�
server_resultrrr�test_alpn_protocols.
s>







z!ThreadedTests.test_alpn_protocolscCs:tjtj�}|jt�t||ddd�}|j|dd�dS)NT)rrr>)rr7rgrZr�rJrq)rlr_r�rrr�test_selected_npn_protocolX
s


z(ThreadedTests.test_selected_npn_protocolz NPN support needed for this testcCsddg}ddgdfddgdfddgdfddgdfg}x�|D]�\}}tjtj�}|jt�|j|�tjtj�}|jt�|j|�t||ddd�}dt|�t|�t|�f}|d	}	|j|	|||	d
f�t	|d�r�|ddnd
}
|j|
|||
df�q:WdS)Nzhttp/1.1zspdy/2r�abc�defT)rrzKfailed trying %s (s) and %s (c).
was expecting %s, but got %%s from the %%sr>rQrArr�r%r)
rr7rgrZr�rrJrpror|)rlr�r�r�rrErDr�rr�r�rrr�test_npn_protocols`
s*







z ThreadedTests.test_npn_protocolscCsTtjtj�}|jt�tjtj�}|jt�tjtj�}tj|_|jt	�|||fS)N)
rr7rgrZr�rTrdrXrYr�)rlrE�
other_contextrDrrr�sni_contexts}
s


zThreadedTests.sni_contextscCs"|d}|jd|ff|d�dS)Nr<r�r�)rf)rlr�r
rmrrr�check_common_name�
szThreadedTests.check_common_namecs�g�|j�\}�}��fdd�}|j|�t||ddd�}|j�d|fg�|j|d�g�t||ddd�}|j�d|fg�|j|d�g�|jd�t||ddd�}|j|d�|j�g�dS)	Ncs �j||f�|dk	r�|_dS)N)rr_)r`�server_name�initial_context)�callsr�rr�
servername_cb�
sz6ThreadedTests.test_sni_callback.<locals>.servername_cbT�supermessage)rrGrRr�Znotfunny)r�r~rJror�)rlrErDr�r�r)r�r�rr�
s,

zThreadedTests.test_sni_callbackc
Cs\|j�\}}}dd�}|j|�|jtj��}t||ddd�}WdQRX|j|jjd�dS)NcSstjS)N)rZALERT_DESCRIPTION_ACCESS_DENIED)r`r�r�rrr�cb_returning_alert�
szAThreadedTests.test_sni_callback_alert.<locals>.cb_returning_alertFr�)rrGZTLSV1_ALERT_ACCESS_DENIED)	r�r~r}rr8rJrorar�)rlrEr�rDr�rdr�rrr�test_sni_callback_alert�
s
z%ThreadedTests.test_sni_callback_alertcCs�|j�\}}}dd�}|j|�|jtj��*}tj��}t||ddd�}WdQRXWdQRX|j|j	j
d�|jd|j��dS)NcSsdddS)Nrrr)r`r�r�rrr�
cb_raising�
sz;ThreadedTests.test_sni_callback_raising.<locals>.cb_raisingFr�)rrGZSSLV3_ALERT_HANDSHAKE_FAILURE�ZeroDivisionError)
r�r~r}rr8r�captured_stderrrJrorar�rf�getvalue)rlrEr�rDr�rd�stderrr�rrr�test_sni_callback_raising�
s

z'ThreadedTests.test_sni_callback_raisingcCs�|j�\}}}dd�}|j|�|jtj��*}tj��}t||ddd�}WdQRXWdQRX|j|j	j
d�|jd|j��dS)NcSsdS)Nrxr)r`r�r�rrr�cb_wrong_return_type�
szOThreadedTests.test_sni_callback_wrong_return_type.<locals>.cb_wrong_return_typeFr�)rrGZTLSV1_ALERT_INTERNAL_ERRORr)
r�r~r}rr8rr�rJrorar�rfr�)rlrEr�rDr�rdr�r�rrr�#test_sni_callback_wrong_return_type�
s

z1ThreadedTests.test_sni_callback_wrong_return_typecs�tjtj�}|jt�tjtj�}tj|_|jt�tj	dkr\|j
d�|j
d�ddg}n|j
d�|j
d�dd	g}tjr�|jd
dg�t
||�}|dd}|jt|�d�x2|D]*\�}}t�fd
d�|D��s�|j��q�WdS)Nrrrz
AES128:AES256r�zAES-256zAES:3DESZ3DESzDES-CBC3ZTLS_CHACHA20ZTLS_AESrBc3s|]}|�kVqdS)Nr)r9Zalg)r
rrr;�
sz4ThreadedTests.test_shared_ciphers.<locals>.<genexpr>)rrr)rr7rgrZr�rdrXrYr�r%r[�HAS_TLSv1_3�extendrJ�
assertGreaterr|�anyr�)rlrErDZ
expected_algsr�rUZtls_version�bitsr)r
r�test_shared_ciphers�
s(








z!ThreadedTests.test_shared_cipherscCs�tjtj�}tj|_|jt�|jt�t|dd�}|�L|j	t
j
��}|jt|j
f�|j�|jt|jd�|jt|jd�WdQRXdS)NF)r_rishello)rr7r�rdrXrYr�rZr�r\r?r^r_r&r�r}r~r�r)rlr_r%r;rrr�,test_read_write_after_close_raises_valuerrors

z:ThreadedTests.test_read_write_after_close_raises_valuerrorcCs�dd}ttjd��}|j|�WdQRX|jtjtj�tjtj�}tj	|_
|jt�|j
t�t|dd�}|�d|jtj���J}|jt|jf�ttjd��"}|j|�|j|jd�|�WdQRXWdQRXWdQRXdS)NrGi�wbF)r_rrvi)rIrZTESTFNrr��unlinkrr7r�rdrXrYr�rZr�r\r?r^r_r&�sendfilerorK)rlZ	TEST_DATAr@r_r%r;�filerrr�
test_sendfiles


zThreadedTests.test_sendfilec	CsLtjtj�}|jt�tjtj�}tj|_|jt�t	||�}|d}|j
|j�|j|j
d�|j|jd�|j
|j�tjdkr�|j|jd�|j|d�|j�}|j|dd�|j|dd�t	|||d�}|j�}|j|dd�|j|dd�|j
|d�|d}|j|j|j�|j||�|j||�|j|j
|j
�|j|j|j�t	||�}|j|d�|d}|j|j|j�|j||�|j�}|j|dd	�|j|dd�t	|||d�}|j
|d�|d}|j|j|j�|j||�|j|j
|j
�|j|j|j�|j�}|j|dd
�|j|dd�dS)Nr9rrr?rurv)r9rr�r+)rrr)rr7rgrZr�rdrXrYr�rJr6�idr�r(rZZ
has_ticketr%Zticket_lifetime_hintr�rxroZassertIsNotr3r�)	rlrErDr�r9Z	sess_statZsession2Zsession3Zsession4rrr�test_session"s\




zThreadedTests.test_sessionc;Cs$tjtj�}tj|_|jt�|jt�tjtj�}tj|_|jt�|jt�|jtj	O_|jtj	O_t
|dd�}|���|jtj���p}|j
|jd�|j
|jd�|jt|jf�|j}|j|�|jt��}t|_WdQRX|j
t|j�d�WdQRX|jtj���D}|jt|jf�|jt��}||_WdQRX|j
t|j�d�WdQRX|jtj���J}||_|jt|jf�|j
|jj|j�|j
|j|�|j
|jd�WdQRX|jtj���D}|jt��}||_|jt|jf�WdQRX|j
t|j�d�WdQRXWdQRXdS)NF)r_rzValue is not a SSLSession.z#Cannot set session after handshake.Tz)Session refers to a different SSLContext.)rr7r�rdrXrYr�rZr@rkr�r\r?ror9r?r^r_r&r6r}rrmrprar~r�)rlr_Zcontext2r%r;r9r�rrr�test_session_handlingZsN




z#ThreadedTests.test_session_handlingN)>r*r+r,rDrUrYr;r/r'r[r�r\rcrArrerRrfrgrhrjrkrurzr{r�r�r�r�r�r�r�r�r�r�r�rer�r0r�r�r�r�r�ZHAS_ALPNr�r�r�ZHAS_NPNr�r�r�r�rr�r�r�r�r�r�r�r�rrrrrPX	sz5&*&!)(:	1);		
*
'8rPcCs@tjtj�}|jt�tjtj�}|jt�|jt�||dfS)zUCreate context

    client_context, server_context, hostname = testing_context()
    r�)rr7r>rYr�r�rZr�)rDrErrr�testing_context�s


r�zTest needs TLS 1.3c@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dS)�TestPostHandshakeAuthcCs�tjtjtjg}x�|D]�}tj|�}|j|jd�d|_|j|jd�tj|_|j|jtj�|j|jd�d|_|j|jtj�|j|jd�tj	|_d|_|j|jtj	�|j|jd�qWdS)NFT)
rrnr�r>r7ro�post_handshake_authrdrXrc)rlZ	protocolsrrrtrrr�test_pha_setter�s 

z%TestPostHandshakeAuth.test_pha_settercCst�\}}}d|_tj|_d|_|jt�t|dd�}|��|jt	j	�|d���}|j
t|jf�|j
d�|j|jd�d�|j
d�|j|jd�d	�|j
d�|j|jd�d
�|j
d�|j|jd�d	�|j
d�|jd�jd
�}|jd|�WdQRXWdQRXdS)NTF)r_r)r�sHASCERTisFALSE
sPHAsOK
sTRUE
sGETCERTizus-asciizPython Software Foundation CA)r�r�rrdrXrZr�r�r\r?r^r_r&rrorKr�rf)rlrDrErnr%r;Z	cert_textrrr�test_pha_required�s*







z'TestPostHandshakeAuth.test_pha_requiredcCs�t�\}}}d|_tj|_d|_t|dd�}|�~|jtj�|d��`}|jt	|j
f�|jd�|j|j
d�d�|jd�|jtjd	��|j
d�WdQRXWdQRXWdQRXdS)
NTF)r_r)r�sPHAisOK
sHASCERTz!tlsv13 alert certificate required)r�r�rrdrXr�r\r?r^r_r&rrorKr]r8)rlrDrErnr%r;rrr�test_pha_required_nocert�s 



z.TestPostHandshakeAuth.test_pha_required_nocertcCs�tjrtjjd�t�\}}}d|_tj|_	d|_|j
t�tj|_	t
|dd�}|��|jtj�|d��j}|jt|jf�|jd�|j|jd�d�|jd	�|j|jd�d
�|jd�|j|jd�d�WdQRXWdQRXdS)Nr�TF)r_r)r�sHASCERTisFALSE
sPHAsOK
sTRUE
)rrrrrr�r�rrdrXrZr�rcr�r\r?r^r_r&rorK)rlrDrErnr%r;rrr�test_pha_optional�s&





z'TestPostHandshakeAuth.test_pha_optionalcCs�tjrtjjd�t�\}}}d|_tj|_	d|_t
|dd�}|��|jtj�|d��j}|j
t|jf�|jd�|j|jd�d�|jd	�|j|jd�d
�|jd�|j|jd�d�WdQRXWdQRXdS)Nr�TF)r_r)r�sHASCERTisFALSE
sPHAsOK
)rrrrrr�r�rrcrXr�r\r?r^r_r&rorK)rlrDrErnr%r;rrr�test_pha_optional_nocerts"




z.TestPostHandshakeAuth.test_pha_optional_nocertcCs�t�\}}}d|_tj|_|jt�t|dd�}|�r|jt	j	�|d��T}|j
t|jf�|j
tjd��|j�WdQRX|jd�|jd|jd��WdQRXWdQRXdS)	NTF)r_r)r�z
not serversPHAsextension not receivedi)r�r�rrdrXrZr�r�r\r?r^r_r&r]r8rrrfrK)rlrDrErnr%r;rrr�test_pha_no_pha_clients



z,TestPostHandshakeAuth.test_pha_no_pha_clientcCs�t�\}}}tj|_d|_|jt�t|dd�}|��|jt	j	�|d��j}|j
t|jf�|j
d�|j|jd�d�|j
d�|j|jd�d	�|j
d�|j|jd�d�WdQRXWdQRXdS)
NTF)r_r)r�sHASCERTisTRUE
sPHAsOK
)r�rrdrXr�rZr�r�r\r?r^r_r&rrorK)rlrDrErnr%r;rrr�test_pha_no_pha_server&s





z,TestPostHandshakeAuth.test_pha_no_pha_servercCs�t�\}}}tj|_|jtjO_d|_|jt�t	|dd�}|�P|j
tj�|d��2}|jt
|jf�|jd�|jd|jd��WdQRXWdQRXdS)NTF)r_r)r�sPHAsWRONG_SSL_VERSIONi)r�rrdrXr@rkr�rZr�r�r\r?r^r_r&rrfrK)rlrDrErnr%r;rrr�test_pha_not_tls13:s



z(TestPostHandshakeAuth.test_pha_not_tls13N)r*r+r,r�r�r�r�r�r�r�r�rrrrr��sr�c	Cs�tjr�ddl}tjtjtjd�}|j��V|jddt	�x@|j
�D](\}}|�}|rB|drBd||f}PqBWttj��}WdQRXtdt
jt
jf�td|�tdt
j�td	t
j�ytd
t
j�Wntk
r�YnXxBttttttttttttgD]"}t j!j"|��stj#d|���qWt$t%t&t't(g}tj)d��rP|j*t+�t,�rxtj-�}|�rx|j*t.�|j*t/�ztj0|�Wdt,�r�tj1|�XdS)
Nr)ZLinuxZMacZWindows�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�warningsr9r:Zmac_verZ	win32_ver�catch_warnings�filterwarnings�PendingDeprecationWarning�itemsr��printrr/r%rgr?r-�AttributeErrorr�rbr[r\r]r^r�rTr�rY�BADKEYrZrr�existsZ
TestFailedr1rar�r�r�Zis_resource_enabledrr��
_have_threadsZthreading_setuprPr�Zrun_unittestZthreading_cleanup)	rr�Zplatsr
r?Zplat�filenameZtests�thread_inforrr�	test_mainLsZ




r��__main__)rrr)N)r8TFNN)Nrr)F)lrr;rrr?r�r(r.r�rrbr�ZtempfileZurllib.requestrxrr*rAr9rJrBr��ImportError�
import_modulerrr��sortedrSr3r_r/r'r5r%r�r
r��fsencoderbr[r\r]r^r_r`rMr�rcrkr%rZr�rTr�r#r�rZrYr`r�r�r�r�rqrrrErrrrrrr#r&r'r)r2rDrRr/rgr�rnrbr`ZTestCaserar1r�r�r�r�r�r�Ztest.ssl_serversrrr�r)rJrOrPr�r�r�r�r*rrrr�<module>s�











 
ax)?
=

v
1
;B
-
<


Youez - 2016 - github.com/yon3zu
LinuXploit