Uname:Linux ip-10-0-5-176 6.8.0-1057-aws #60~22.04.1-Ubuntu SMP Wed May 27 08:16:59 UTC 2026 x86_64

403WebShell
403Webshell
Server IP : 3.111.61.48  /  Your IP : 216.73.216.67
Web Server : Apache
System : Linux ip-10-0-5-176 6.8.0-1057-aws #60~22.04.1-Ubuntu SMP Wed May 27 08:16:59 UTC 2026 x86_64
User : ubuntu ( 1000)
PHP Version : 8.2.31
Disable Function : exec,passthru,shell_exec,system
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/lib/python3.10/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/lib/python3.10/test/__pycache__/test_ssl.cpython-310.pyc
o

�9j�_�@s�ddlZddlZddlZddlmZddlmZddlmZddlmZddlm	Z	ddlm
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZzddlZWne y�dZYnwddl!Z!e!�"��e!�#de$�ddl%Z%Wd�n1s�wYe�&d	�Z'ddl(Z(dd
l'm)Z)m*Z*m+Z+m,Z,e-ed�Z.e.o�ejdkZ/e0e'j1�Z2ej3Z3e'j4d
kZ5e�6d�Z7iZ8dD]\Z9Z:z
e;e'e9�Z9e;e'j)e:�Z:Wn	e<y�Yq�we:e8e9<q�dd�Z=e=d�Z>e�?e>�Z@e=d�ZAe=d�ZBe�?eA�ZCe�?eB�ZDe=d�ZEe=d�ZFdZGe=d�ZHe�?eH�ZIe=dd�ZJe=dd�ZKddddddd d!�ZLe=d"�ZMe=d#�ZNd$ZOd%d&d'd(d)d*d+ddd d,�
ZPe=d-�ZQd.ZRe=d/�ZSd0ZTe=dd1�ZUe=d2�ZVe=d3�ZWe=d4�ZXd$ZYd5ZZe=d6�Z[e=d7�Z\e=d8�Z]e=d9�Z^e=d:�Z_e=d;�Z`e=d<�Zae=d=�Zbe�?eb�Zce;e'd>d�Zde;e'd?d�Zee;e'd@d�Zfe;e'dAd�Zge;e'dBd�ZhdCdD�Ziei��r�dEdF�ZjndGdF�ZjdHdI�ZkejldJdK��ZmdLdM�ZndNdO�ZodPdQ�Zpe
jqe$dR�Zre'jsdddddS�dTdU�ZteNfdVdW�dXdY�ZuGdZd[�d[ejv�ZwGd\d]�d]ejv�ZxGd^d_�d_ejv�ZyGd`da�daejv�ZzGdbdc�dcejv�Z{Gddde�deejv�Z|e�}df�Gdgdh�dhejv��Z~d�didj�Zdkdl�Z�ddml�m�Z�Gdndo�doej��Z�Gdpdq�dqej��Z�	r		d�dtdu�Z�	d�dvdw�Z�Gdxdy�dyejv�Z�e��emdz�d{�Gd|d}�d}ejv��Z�e-e'j�d~�Z�e��e�d�Z�Gd�d��d�ejv�Z�d�d��Z�Gd�d��d�ejv�Z�d�d��Z�e�d�k�r�e���dSdS)��N)�support)�
import_helper)�	os_helper)�
socket_helper)�threading_helper)�warnings_helper�ignore�ssl)�
TLSVersion�_TLSContentType�_TLSMessageType�
_TLSAlertType�gettotalrefcount�win32)�rr�PY_SSL_DEFAULT_CIPHERS))�PROTOCOL_SSLv23�SSLv3)�PROTOCOL_TLSv1�TLSv1)�PROTOCOL_TLSv1_1�TLSv1_1cGstjjtj�t�g|�R�S�N)�os�path�join�dirname�__file__��name�r �$/usr/lib/python3.10/test/test_ssl.py�	data_fileB�r"zkeycert.pemzssl_cert.pemzssl_key.pemzkeycert.passwd.pemzssl_key.passwd.pem�somepass�capathz
4e1295a3.0z
5ed36f99.0)�)�countryName�XY�)�localityNamezCastle Anthrax�)�organizationNamezPython Software Foundation))�
commonName�	localhostzAug 26 14:23:15 2028 GMTzAug 29 14:23:15 2018 GMT�98A7CF88C74A32ED))�DNSr.r��issuer�notAfter�	notBefore�serialNumber�subject�subjectAltName�versionzrevocation.crlzkeycert3.pemr.)z)http://testca.pythontest.net/testca/ocsp/)z0http://testca.pythontest.net/testca/pycacert.cer)z2http://testca.pythontest.net/testca/revocation.crl)r&))r,�Python Software Foundation CA))r-z
our-ca-serverzOct 28 14:23:16 2037 GMTzAug 29 14:23:16 2018 GMT�CB2D80995A69525C)
�OCSP�	caIssuers�crlDistributionPointsr2r3r4r5r6r7r8zkeycert4.pem�fakehostnamezkeycertecc.pemz
localhost-eccz
ceff1710.0zallsans.pemzidnsans.pemz	nosan.pemzself-signed.pythontest.net�nullcert.pem�badcert.pemzXXXnonexisting.pem�
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_COMPATcCsVz tddd��}d|��vWd�WS1swYWdSty*YdSw)Nz/etc/os-releasezutf-8)�encoding�ubuntuF)�open�read�FileNotFoundError)�fr r r!�	is_ubuntu�s
(��rMcGs0|D]}t|d�r|jtjjkr|�d�qdS)z@"Lower security level to '1' and allow all ciphers for TLS 1.0/1�minimum_versionz@SECLEVEL=1:ALLN)�hasattrrNr	r
r�set_ciphers)�ctxs�ctxr r r!�seclevel_workaround�s�
��rScG�dSrr )rQr r r!rS��cCsbt|t�r|�d�sJ�tt|d�}|durdS|tjtjtjhvr$dS|j}t	|t
d�d��S)z�Check if a TLS protocol is available and enabled

    :param protocol: enum ssl._SSLMethod member or name
    :return: bool
    �	PROTOCOL_NFT)�
isinstance�str�
startswith�getattrr	�PROTOCOL_TLS�PROTOCOL_TLS_SERVER�PROTOCOL_TLS_CLIENTr�has_tls_version�len)�protocolrr r r!�has_tls_protocol�s
�racCs�|dkrdSt|t�rtjj|}ttd|j���sdStr&|tjjkr&dSt�	tj
�}t|d�r?|jtjj
kr?||jkr?dSt|d�rR|jtjjkrR||jkrRdSdS)z{Check if a TLS/SSL version is enabled

    :param version: TLS version name or ssl.TLSVersion member
    :return: bool
    �SSLv2F�HAS_rN�maximum_versionT)rWrXr	r
�__members__rZr�IS_OPENSSL_3_0_0�TLSv1_2�
SSLContextr]rOrN�MINIMUM_SUPPORTEDrd�MAXIMUM_SUPPORTED)r8rRr r r!r^�s(
�
�
r^cs�fdd�}|S)z�Decorator to skip tests when a required TLS version is not available

    :param version: TLS version name or ssl.TLSVersion member
    :return:
    cst�����fdd��}|S)Ncs&t��st���d����|i|��S)Nz is not available.)r^�unittest�SkipTest)�args�kw)�funcr8r r!�wrappersz8requires_tls_version.<locals>.decorator.<locals>.wrapper)�	functools�wraps)rorp�r8)ror!�	decorator�sz'requires_tls_version.<locals>.decoratorr )r8rtr rsr!�requires_tls_version�srucCs2d�tjt����}tjrtj�||�dSdS)N� )	r�	traceback�format_exception�sys�exc_infor�verbose�stdout�write)�prefix�
exc_formatr r r!�handle_error
s�r�cCs$tjrt��jdkrtjStjS�Nr)�time�daylight�	localtime�tm_isdst�altzone�timezoner r r r!�
utc_offsetsr�)�category)�	cert_reqs�ca_certs�ciphers�certfile�keyfilecKs�|�d�st|d<t�tj�}nt�tj�}|dur%|tjkr"d|_||_|dur.|�	|�|dus6|dur<|�
||�|durE|�|�|j|fi|��S)N�server_side�server_hostnameF)
�get�SIGNED_CERTFILE_HOSTNAMEr	rhr]r\�	CERT_NONE�check_hostname�verify_mode�load_verify_locations�load_cert_chainrP�wrap_socket)�sockr�r�r�r�r��kwargs�contextr r r!�test_wrap_sockets



r�T��server_chaincCsv|tkrt}n|tkrt}n|tkrt}nt|��t�tj	�}|�
t�t�tj�}|�
|�|r6|�
t�|||fS)zUCreate context

    client_context, server_context, hostname = testing_context()
    )�SIGNED_CERTFILEr��SIGNED_CERTFILE2�SIGNED_CERTFILE2_HOSTNAME�	NOSANFILE�NOSAN_HOSTNAME�
ValueErrorr	rhr]r��
SIGNING_CAr\r�)�server_certr��hostname�client_context�server_contextr r r!�testing_context2s



r�c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
ejdd��Zdd�Zdd�Zdd�Zedd ��Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zed)d*��Zd+d,�Zd-d.�Ze�d/ej vd0�d1d2��Z!d3d4�Z"d5d6�Z#e�e$j%d7kd8�d9d:��Z&e�e$j%d7kd8�d;d<��Z'd=d>�Z(d?d@�Z)dAdB�Z*dCdD�Z+dEdF�Z,e�e-�dG�dHdI��Z.dJdK�Z/e�0dLdM�dNdO��Z1dPdQ�Z2dRdS�Z3dTS)U�BasicSocketTestscCs�tjtjtjtjtjtjtj|�tj	d�|�tj
d�|�tjd�|�tjd�tj
tjtjtjtjtj|�tjtj�dS)NT)r	r��
CERT_OPTIONAL�
CERT_REQUIREDrErCrDrB�assertEqual�HAS_SNI�HAS_ECDH�HAS_TLSv1_2�HAS_TLSv1_3�OP_NO_SSLv2�OP_NO_SSLv3�OP_NO_TLSv1�
OP_NO_TLSv1_3�
OP_NO_TLSv1_1�
OP_NO_TLSv1_2r[r��selfr r r!�test_constantsMs$zBasicSocketTests.test_constantsc
Cs�tjtjtjtjtjtjg}|D]1}|j|d��!|�t	d��d|_
Wd�n1s-wYWd�n1s<wYqt�|tj�dS)N)�ssl_typezimmutable type)
�_ssl�_SSLContext�
_SSLSocket�	MemoryBIO�Certificate�
SSLSession�SSLError�subTest�assertRaisesRegex�	TypeError�valuer�check_disallow_instantiation)r��	ssl_typesr�r r r!�test_ssl_typesas �����zBasicSocketTests.test_ssl_typesc	Cst|�td��*t���
}t�|�Wd�n1swYWd�dSWd�dS1s3wYdS�Nzpublic constructor)r�r��socketr	�	SSLSocket�r��sr r r!�test_private_initps
��"�z"BasicSocketTests.test_private_initcCs2tj}|�t|�d�t�|�}|�|j|�dS)Nz_SSLMethod.PROTOCOL_TLS_CLIENT)r	r]r�rXrh�assertIsr`�r��protorRr r r!�test_str_for_enumsus
z#BasicSocketTests.test_str_for_enumscCs&t��}tjrtj�d||rdpdf�t���t�	d�\}}Wd�n1s+wY|�
t|�d�|�
||dk�|rPt�d�}|�
t|�d�n	|�
tjtjd�|�
ttjd�t���|�
ttj	d�Wd�n1sxwYt�dd�t�d	d�t�td
�d�dS)Nz
 RAND_status is %d (%s)
zsufficient randomnesszinsufficient randomness�����zthis is a random stringg�R@sthis is a random bytes objects!this is a random bytearray object)r	�RAND_statusrr{ryr|r}r�check_warnings�RAND_pseudo_bytesr�r_�
RAND_bytes�assertRaisesr�r��RAND_add�	bytearray)r��v�data�is_cryptographicr r r!�test_random}s.
��
�

�zBasicSocketTests.test_randomcCs�|�tj�t�t�|�tj�t�t�tj�t�}t	j
r*tj�
dt�|�d�|�|dd�|�|dd�|�|dd�|�|dd	�dS)
N�
r7))r0zprojects.developer.nokia.com)r0zprojects.forum.nokia.comr;)zhttp://ocsp.verisign.comr<)z0http://SVRIntl-G3-aia.verisign.com/SVRIntlG3.cerr=)z0http://SVRIntl-G3-crl.verisign.com/SVRIntlG3.crl)r�r	r��_test_decode_cert�CERTFILE�
CERTFILE_INFOr��SIGNED_CERTFILE_INFO�	NOKIACERTrr{ryr|r}�pprint�pformat�r��pr r r!�test_parse_cert�s*
�
�
�
�
�z BasicSocketTests.test_parse_certcCsLtj�t�}tjrtj�dt	�
|�d�|�|dddddddd	��dS)
Nr�)�)r'�UK))r-zcody-cazJun 14 18:00:58 2028 GMTzJun 18 18:00:58 2018 GMT�02)r�))r-�#codenomicon-vm-2.test.lal.cisco.com))r0r�rr1)r	r�r��TALOS_INVALID_CRLDPrr{ryr|r}r�r�r�r�r r r!�test_parse_cert_CVE_2019_5010�s��z.BasicSocketTests.test_parse_cert_CVE_2019_5010cCsxtj�t�}tjrtj�dt	�
|�d�d}|�|d|�|�|d|�tjdkr0d}nd}|�|d|�dS)	Nr�)�)r'�US))�stateOrProvinceName�Oregon))r*�	Beavertonr+))�organizationalUnitNamezPython Core Development�)r-�null.python.orgexample.org))�emailAddresszpython-dev@python.orgr6r2)r�	�)�r0zaltnull.python.orgexample.com��emailz null@python.orguser@example.org��URIz)http://null.python.orghttp://example.org��
IP Addressz	192.0.2.1)rz2001:DB8:0:0:0:0:0:1)r�rrr)rz	<invalid>r7)
r	r�r��NULLBYTECERTrr{ryr|r}r�r�r��_OPENSSL_API_VERSION)r�r�r6�sanr r r!�test_parse_cert_CVE_2013_4238�s
z.BasicSocketTests.test_parse_cert_CVE_2013_4238cCs tj�t�}|�|dd�dS)Nr7)
)r0�allsans��	othername�
<unsupported>r)rzuser@example.org)r0zwww.example.org)�DirName)r&r)r+))r-zdirname example)rzhttps://www.python.org/�r�	127.0.0.1)rz0:0:0:0:0:0:0:1)z
Registered IDz	1.2.3.4.5)r	r�r��
ALLSANFILEr�r�r r r!�test_parse_all_sans�s
�z$BasicSocketTests.test_parse_all_sanscCs�ttd��}|��}Wd�n1swYt�|�}t�|�}t�|�}|�||�|�tjd�s=|�	d|�|�
dtjd�sP|�	d|�dSdS)N�rr�z-DER-to-PEM didn't include correct header:
%r
z-DER-to-PEM didn't include correct footer:
%r
)rI�
CAFILE_CACERTrJr	�PEM_cert_to_DER_cert�DER_cert_to_PEM_certr�rY�
PEM_HEADER�fail�endswith�
PEM_FOOTER)r�rL�pem�d1�p2�d2r r r!�test_DER_to_PEM�s
�


�z BasicSocketTests.test_DER_to_PEMcCsFtj}tj}tj}|�|t�|�|t�|�|t�|�|d�|�	|d�|\}}}}}|�|d�|�	|d�|�|d�|�	|d�|�|d�|�	|d�|�|d�|�
|d�|�|d�|�
|d�d	|d
��}	|dkr�d|d
�d
|d
�d
|d
��}
nd|d
�d
|d
�d
|d
��}
|�|�|
|	f�||t
|�f�dS)Nii@r��r��?�z	LibreSSL �drzOpenSSL �.)r	�OPENSSL_VERSION_NUMBER�OPENSSL_VERSION_INFO�OPENSSL_VERSION�assertIsInstance�int�tuplerX�assertGreaterEqual�
assertLess�assertLessEqual�
assertTruerY�hex)r��n�tr��major�minor�fix�patch�status�libressl_ver�openssl_verr r r!�test_openssl_versions6�z%BasicSocketTests.test_openssl_versioncCs`t�tj�}t|�}t�|�}t�dtf��	~Wd�n1s"wY|�|�d�dS)N�)	r��AF_INETr��weakref�refrr��ResourceWarningr�)r�r��ss�wrr r r!�
test_refcycle*s
�zBasicSocketTests.test_refcyclec	Cs�t�tj�}t|��e}|�t|jd�|�t|jtd��|�t|jd�|�t|j	td�d�|�t|j
d�|�t|jdd�|�t|j
�|�t|jdgddd�|�t|jd�|�t|jtd�g�Wd�dS1srwYdS)Nr��x)z0.0.0.0rr r�d)r�r<r�r��OSError�recv�	recv_intor��recvfrom�
recvfrom_into�send�sendto�NotImplementedError�dup�sendmsg�recvmsg�recvmsg_into�r�r�r@r r r!�test_wrapped_unconnected5s"


�
�"�z)BasicSocketTests.test_wrapped_unconnectedc	Cs\dD])}t�tj�}|�|�t|��}|�||���Wd�n1s&wYqdS)N)Ng�@)r�r<�
settimeoutr�r��
gettimeout)r��timeoutr�r@r r r!�test_timeoutGs

���zBasicSocketTests.test_timeoutc	
Cs�tjtjtjtjg}tjtjtjtjg}tj	j
tj	jtj	jg}|D]C}|j
|d��3t�tj�}|�t��}|j|O_Wd�n1sGwY|�dt|j��Wd�n1s_wYq!|D]E}t|�snqg|j
|d��0|�t��
}t�|�Wd�n1s�wY|�d|j�d�t|j��Wd�n1s�wYqg|D]H}t|�s�q�|j
|d��3t�tj�}|�t��}||_Wd�n1s�wY|�d|�d�t|j��Wd�n1s�wYq�dS)N)�optionz4ssl.OP_NO_SSL*/ssl.OP_NO_TLS* options are deprecated)r`zssl.z is deprecatedrs)r	r�r�r�r�rr�PROTOCOL_TLSv1_2r[r
rrrr�rhr]�assertWarns�DeprecationWarning�optionsr�rX�warningrarr^rN)	r�r\�	protocols�versionsrXrR�cmr`r8r r r!�test_openssl111_deprecationsPsl�������	�����
����z-BasicSocketTests.test_openssl111_deprecationsc	Cs�t��}|jtdtj|td�|jtdtj|dd�|jtdtj|ddd�tj|dtd��}|�td|jtd	f�Wd�n1sDwY|�t	��#}t���}tj|t
d
�Wd�n1sewYWd�n1stwY|�|jj
t
j�|�t	��$}t���}tj|tt
d�Wd�n1s�wYWd�n1s�wY|�|jj
t
j�|�t	��$}t���}tj|t
t
d�Wd�n1s�wYWd�n1s�wY|�|jj
t
j�dS)Nzcertfile must be specified�r�z5certfile must be specified for server-side operationsT�r�r;�r�r�z!can't connect in server-side modei��r��r�r�)r�r�r�r	r�r��connect�HOSTr�rE�NONEXISTINGCERTr��	exception�errno�ENOENT)r�r�r�r`r r r!�test_errors_sslwrap�sV��
�
��
���
����
����z$BasicSocketTests.test_errors_sslwrapcCsntj�tj�t�ptj|�}t��}|�|j�|�	t
j��t||d�Wd�dS1s0wYdS)z;Check that trying to use the given client certificate failsreN)
rrrrr�curdirr��
addCleanup�closer�r	r�r��r�r�r�r r r!�
bad_cert_test�s��"�zBasicSocketTests.bad_cert_testcC�|�d�dS)z Wrapping with an empty cert filer?N�rrr�r r r!�test_empty_cert��z BasicSocketTests.test_empty_certcCrs)z:Wrapping with a badly formatted certificate (syntax error)r@Nrtr�r r r!�test_malformed_cert�rvz$BasicSocketTests.test_malformed_certcCrs)z2Wrapping with a badly formatted key (syntax error)rANrtr�r r r!�test_malformed_key�rvz#BasicSocketTests.test_malformed_keyc	sJdd�}�fdd�}ddi}||d�||d�||d	�||d
�||d�||d�dd
i}||d�||d�||d�||d�||d�ddi}||d�||d�||d�||d�||d�ddi}||d�||d�||d�ddi}||d�||d�||d�||d�ddi}||d�||d�||d�d�d ��d!�}dd"|fffi}|||�dd#i}|||�dd$i}|||�d%�d ��d!�}dd"|fffi}||d&�d ��d!��||d'�d ��d!��||d(�d ��d!��||d)�d ��d!��d*d+d,d-�}||d.�||d/�||d0�||d1�d2d3d4�}||d5�||d6�||d7�dd8d9�}||d:�||d;�||d<�||d=�||d>�||d?�||d@�tj�r�ddAd9�}||dB�||dC�||dD�||dE�||dF�||d@�d2dGd4�}||d5�dHdIdJd-�}||d5�dHdGdJd-�}||dK���ttjdd���ttjid�ddLi}��tj	dM��t�|dN�Wd�n	1�s�wYddOi}��tj	dP��t�|dQ�Wd�n	1�s�wYddRi}��tj	dS��t�|dT�Wd�n	1�swYddUi}��tj	dV��t�|dW�Wd�n	1�s9wYddXi}��tj	dY��t�|dZ�Wd�n	1�s[wYd[D]}��t��
t�
|�Wd�n	1�szwY�qbd\D]}��t�
|���q�tj�r�d]D]
}��t�
|���q�dSdS)^NcSst�||�dSr)r	�match_hostname��certr�r r r!�ok�sz0BasicSocketTests.test_match_hostname.<locals>.okcs��tjtj||�dSr)r�r	�CertificateErrorryrzr�r r!r�s�z2BasicSocketTests.test_match_hostname.<locals>.failr6)))r-�example.comr~zExAmple.cOmzwww.example.comz.example.comzexample.org�exampleXcom)))r-z*.a.comz	foo.a.comz
bar.foo.a.comza.comzXa.comz.a.com)))r-zf*.comzfoo.comzf.comzbar.comzbar.foo.com)r�r�znull.python.org)))r-z	*.*.a.com)))r-za.*.comz	a.foo.comza..comupüthon.python.org�idna�asciir-)))r-z
x*.python.org)))r-zxn--p*.python.orguwww*.pythön.orguwww.pythön.orguwww1.pythön.orguftp.pythön.orgupythön.orgzJun 26 21:41:46 2011 GMT)))r-�linuxfrz.org))r0�linuxfr.org)r0�linuxfr.comr)r3r6r7r�r�r
r�zDec 18 23:59:59 2011 GMT)r��)r��
California�)r*z
Mountain View�)r,z
Google Inc�)r-�mail.google.com)r3r6r�z	gmail.comr�)�r0r~)r�10.11.12.13)r�14.15.16.17r)r6r7r�r�z127.1z14.15.16.17 z14.15.16.17 extra dataz14.15.16.18zexample.net)r�)rz2001:0:0:0:0:0:0:CAFE
)rz2003:0:0:0:0:0:0:BABA
z
2001::cafez
2003::babaz2003::baba z2003::baba extra dataz
2003::bebe)r�r�r�r�zDec 18 23:59:59 2099 GMT)r�r�r�r�))r�blablaz
google.com)))r-za*b.example.comz5partial wildcards in leftmost label are not supportedzaxxb.example.com)))r-zwww.*.example.comz2wildcard can only be present in the leftmost labelzwww.sub.example.com)))r-za*b*.example.comztoo many wildcardszaxxbxxc.example.com)))r-�*z7sole wildcard without additional labels are not support�host)))r-z*.comz%hostname 'com' doesn't match '\*.com'�com)�1r;z1.2.3z	256.0.0.1z127.0.0.1/24)rz192.168.0.1)z::1z2001:db8:85a3::8a2e:370:7334)�encode�decoder�IPV6_ENABLEDr�r�r	ryr�r}�_inet_patonr/)r�r|rr{r��invalid�ipaddrr r�r!�test_match_hostname�s 




























�



�


�






�





�
�
�
�������������z$BasicSocketTests.test_match_hostnamecCsPt�tj�}t���}|jt|j|ddd�Wd�dS1s!wYdS)NTz
some.hostname�r�)r	rhr\r�r�r�r�)r�rRr�r r r!�test_server_sides
�"�z!BasicSocketTests.test_server_sidec	Cs�t�d�}t�tj�}|�|���t|dd��"}|�t��
|�d�Wd�n1s.wYWd�n1s=wY|�	�dS)N�rrF��do_handshake_on_connectzunknown-type)
r��
create_serverr<rg�getsocknamer�r�r��get_channel_bindingrp)r�r��cr@r r r!�test_unknown_channel_binding�s
���z-BasicSocketTests.test_unknown_channel_binding�
tls-unique�*'tls-unique' channel binding not availablecCs�t�tj�}t|��}|�|�d��Wd�n1swYt�tj�}t|dtd��}|�|�d��Wd�dS1sCwYdS)Nr�Trd)r�r<r��assertIsNoner�r�rQr r r!�test_tls_unique_channel_binding�s
�"�z0BasicSocketTests.test_tls_unique_channel_bindingcCsjtt�tj��}t|�}|�t��}d}t��Wd�n1s"wY|�|t	|j
jd��dSr�)r�r�r<�reprrZr?r�
gc_collect�assertInrXr]rm)r�r@rr`r r r!�test_dealloc_warn�s
�z"BasicSocketTests.test_dealloc_warncCs�t��}|�t|�d�|�|tj�t���#}t|d<t	|d<t��}|�|j
t	�|�|jt�Wd�dS1s=wYdS)N��SSL_CERT_DIR�
SSL_CERT_FILE)r	�get_default_verify_pathsr�r_r)�DefaultVerifyPathsr�EnvironmentVarGuard�CAPATHr��cafiler%)r��paths�envr r r!�test_get_default_verify_paths�s
"�z.BasicSocketTests.test_get_default_verify_pathsr�Windows specificc	Cs�|�t�d��|�t�d��|�ttj�|�ttjd�t�}dD]H}t�|�}|�|t�|D]8}|�|t	�|�
t|�d�|\}}}|�|t�|�
|ddh�|�|tttf�t|ttf�rk|�|�q3q$d}|�
||�dS)	N�CA�ROOTr;)r�r�r�x509_asn�
pkcs_7_asn�1.3.6.1.5.5.7.3.1)r/r	�enum_certificatesr�r��WindowsError�setr)�listr+r�r_�bytesr��	frozenset�boolrW�update)	r��
trust_oids�	storename�store�elementr{�enc�trust�
serverAuthr r r!�test_enum_certificates�s*


��
z'BasicSocketTests.test_enum_certificatescCs�|�t�d��|�ttj�|�ttjd�t�d�}|�|t�|D]"}|�|t�|�	t
|�d�|�|dt�|�|dddh�q$dS)Nr�r;�rr�r�r�)
r/r	�	enum_crlsr�r�r�r)r�r+r�r_r�r�)r��crlsr�r r r!�test_enum_crls�s
�zBasicSocketTests.test_enum_crlsc	Cs�d}t�d�}|�||�|�|jd�|�|jd�|�|jd�|�|jd�|�|tj�|�t	tjd�tj�
d�}|�||�|�|tj�|�t	tjj
d�|�t	d��tj�
d�Wd�n1skwYtd	�D]4}ztj�
|�}Wn	t	y�Yqtw|�|jt
�|�|jt�|�|jt�|�|jttd�f�qttj�d�}|�||�|�|tj�|�tj�d�|�|�tj�d�|�|�t	d
��tj�d�Wd�dS1s�wYdS)N)�r��TLS Web Server Authenticationr�r�r�r�r����zunknown NID 100000i����zunknown object 'serverauth'�
serverauth)r	�_ASN1Objectr��nid�	shortname�longname�oidr)r�r��fromnidr��ranger*rX�type�fromname)r��expected�val�i�objr r r!�test_asn1object�sH
���"�z BasicSocketTests.test_asn1objectcCs�t�d�}|�tjjtj�|�tjj|�|�tjjjd�|�tjjjd�|�tjjjd�t�d�}|�tjj	tj�|�tjj	|�|�tjj	jd�|�tjj	jd�|�tjj	jd�dS)Nr�r�r�z1.3.6.1.5.5.7.3.2��
clientAuth)
r	r�r)�Purpose�SERVER_AUTHr�r�r�r��CLIENT_AUTH)r�r�r r r!�test_purpose_enum�s 
�
�z"BasicSocketTests.test_purpose_enumcCs�t�tjtj�}|�|j�|�t��}t|tj	d�Wd�n1s%wY|�
t|j�d�t�
tj�}|�t��
}|�|�Wd�n1sNwY|�
t|j�d�dS)N�r�z!only stream sockets are supported)r�r<�
SOCK_DGRAMrorpr�rLr�r	r�r�rXrjrhr]r�)r�r��cxrRr r r!�test_unsupported_dtlss��z&BasicSocketTests.test_unsupported_dtlscCs|�t�|�|�dSr)r�r	�cert_time_to_seconds)r��
timestring�	timestampr r r!�cert_time_okszBasicSocketTests.cert_time_okcCs:|�t��t�|�Wd�dS1swYdSr)r�r�r	r�)r�r�r r r!�cert_time_fails"�zBasicSocketTests.cert_time_failz)local time needs to be different from UTCcCs|�dd�|�dd�dS)NzMay  9 00:00:00 2007 GMTg�C��A�Jan  5 09:34:43 2018 GMT���ѓ�A)r�r�r r r!�"test_cert_time_to_seconds_timezone"sz3BasicSocketTests.test_cert_time_to_seconds_timezonecCs�d}d}|�||�|�tj|d�|�|�d|�|�d|�|�d�|�d�|�d�|�d	�|�d
�|�d�|�d�d
}|�d|�|�d|�|�dd�|�dd�|�dd�|�d�|�dd�dS)Nr�r�)�	cert_timezJan 05 09:34:43 2018 GMTzJaN  5 09:34:43 2018 GmTzJan  5 09:34 2018 GMTzJan  5 09:34:43 2018zJan  5 09:34:43 2018 UTCzJan 35 09:34:43 2018 GMTzJon  5 09:34:43 2018 GMTzJan  5 24:00:00 2018 GMTzJan  5 09:60:43 2018 GMTg�W�AzDec 31 23:59:60 2008 GMTzJan  1 00:00:00 2009 GMTzJan  5 09:34:59 2018 GMTi�FOZzJan  5 09:34:60 2018 GMTi�FOZzJan  5 09:34:61 2018 GMTi�FOZzJan  5 09:34:62 2018 GMTzDec 31 23:59:59 9999 GMTg�� �MB)r�r�r	r�r�)r�r��ts�
newyear_tsr r r!�test_cert_time_to_seconds*s*







z*BasicSocketTests.test_cert_time_to_seconds�LC_ALLr;cCs@dd�}|���dkr|�d�|�dd�|�|�d�dS)NcSst�dd�S)Nz%b)	r�r�rr �r�rrr)r��strftimer r r r!�local_february_nameQ�zNBasicSocketTests.test_cert_time_to_seconds_locale.<locals>.local_february_name�febz>locale-specific month name needs to be different from C localezFeb  9 00:00:00 2007 GMTg`�r�Az  9 00:00:00 2007 GMT)�lower�skipTestr�r�)r�r�r r r!� test_cert_time_to_seconds_localeMs

z1BasicSocketTests.test_cert_time_to_seconds_localecCsvt�tj�}|�|j�t�|�}tt�tj�tjd�}|�|j�|�	t
|f�}tjtj
tjtjf}|�||�dS)Nr�)r�r<rorpr�	bind_portr�r	r��
connect_exrhrk�ECONNREFUSED�EHOSTUNREACH�	ETIMEDOUT�EWOULDBLOCKr�)r��server�portr��rc�errorsr r r!�test_connect_ex_error\s
��z&BasicSocketTests.test_connect_ex_errorc	Cs�t�\}}}t|d�}|�D|jt��|d��"}|�t|jf�|�|�d�d�|�|�	d�d�Wd�n1s<wYWd�dSWd�dS1sTwYdS)N�r�r�r�)
r��ThreadedEchoServerr�r�rgrhr
r�rFrJ�r�r�r�r�r	r�r r r!�test_read_write_zerols

���"�z%BasicSocketTests.test_read_write_zeroN)4�__name__�
__module__�__qualname__r�r�r�r�r�r�r�r	rrr:r�cpython_onlyrBrRrWra�ignore_deprecationrmrrrurwrxr�r�r�rk�
skipUnlessr	�CHANNEL_BINDING_TYPESr�r�r�ry�platformr�r�r�r�r�r�r�r�r�r��run_with_localerr
rr r r r!r�Ksh#

	4


G
�



'�

#
r�c@s|eZdZdd�Zdd�Ze�edkd�dd��Zd	d
�Z	dd�Z
d
d�Zdd�Ze
dd��Ze�eejd�d�dd��Zdd�Zdd�Zdd�Zdd�Ze�ed�d d!��Zd"d#�Zd$d%�Ze�ejd&�d'd(��Zd)d*�Zd+d,�Zd-d.�Z d/d0�Z!d1d2�Z"e�e#j$d3kd4�d5d6��Z%e�e#j$d3kd7�e�ee#d8�d9�d:d;���Z&d<d=�Z'd>d?�Z(d@dA�Z)dBdC�Z*dDdE�Z+dFdG�Z,dHdI�Z-dJS)K�ContextTestsc	Cs�tD]&}t|�r(t���
t�|�}Wd�n1swY|�|j|�qt���t��}Wd�n1s<wY|�|jtj�|�	t
tjd�|�	t
tjd�dS)Nr��*)�	PROTOCOLSrarr�r	rhr�r`r[r�r�)r�r`rRr r r!�test_constructorzs
��

�zContextTests.test_constructorcCs^t�tj�}|�d�|�d�|�tjd��|�d�Wd�dS1s(wYdS)N�ALL�DEFAULT�No cipher can be selected�^$:,;?*'dorothyx)r	rhr]rPr�r��r�rRr r r!�test_ciphers�s

"�zContextTests.test_ciphersr�z+Test applies only to Python default cipherscCsft�tj�}|��}|D]$}|d}|�d|�|�d|�|�d|�|�d|�|�d|�qdS)Nr�PSK�SRP�MD5�RC4�3DES)r	rhr]�get_ciphers�assertNotIn)r�rRr��suiterr r r!�test_python_ciphers�s�z ContextTests.test_python_ciphersc	Csht�tj�}|�d�tdd�|��D��}hd�}|�|�}|�t|�ddt	|��dt	|����dS)N�AESGCMcss�|]}|dVqdS)rNr )�.0r$r r r!�	<genexpr>���z0ContextTests.test_get_ciphers.<locals>.<genexpr>>�AES128-GCM-SHA256�AES256-GCM-SHA384�DHE-RSA-AES128-GCM-SHA256�DHE-RSA-AES256-GCM-SHA384�ECDHE-RSA-AES128-GCM-SHA256�ECDHE-RSA-AES256-GCM-SHA384�ECDHE-ECDSA-AES128-GCM-SHA256�ECDHE-ECDSA-AES256-GCM-SHA384r�z
got: z
expected: )
r	rhr]rPr�r+�intersectionr,r_�sorted)r�rR�namesr�r;r r r!�test_get_ciphers�s


�zContextTests.test_get_cipherscCs�t�tj�}tjtjBtjB}|ttBtBt	Bt
BO}|�||j�t
���|jtjO_Wd�n1s9wY|�|tjB|j�t
���|jtj@|_Wd�n1s_wY|�||j�d|_|�d|jtj@�dSr�)r	rhr]�OP_ALLr�r�rBrErCrDrFr�r\rr�r�)r�rR�defaultr r r!�test_options�s(���
�
�zContextTests.test_optionscCs@t���t�tj�}Wd�n1swY|�|jtj�tj|_|�|jtj�tj	|_|�|jtj	�tj|_|�|jtj�|�
t��d|_Wd�n1sYwY|�
t��d|_Wd�n1sqwYt�tj
�}|�|jtj�|�|j�t�tj�}|�|jtj	�|�|j�dS�Nr)rr�r	rhr[r�r�r�r�r�r�r�r�r\�assertFalser�r]r/r$r r r!�test_verify_mode_protocol�s,
���z&ContextTests.test_verify_mode_protocolcCs�t�tj�}|�|j�tjr,d|_|�|j�d|_|�|j�d|_|�|j�dS|�t��d|_Wd�dS1s@wYdS�NTF)	r	rhr]r/�hostname_checks_common_name�HAS_NEVER_CHECK_COMMON_NAMErCr��AttributeErrorr$r r r!� test_hostname_checks_common_name�s"�z-ContextTests.test_hostname_checks_common_namecCst�tj�}tjjtjjtjjh}tjjtjjh}|�	|j
|�|�	|j|�tjj|_
tjj|_|�
|j
tjj�|�
|jtjj�tjj|_
tjj|_|�
|j
tjj�|�
|jtjj�tjj|_|�
|jtjj�tjj|_|�	|jtjjtjjtjjh�tjj|_
|�	|j
tjjtjjh�|�t��d|_
Wd�n1s�wYttj�r�t�tj�}|�	|j
|�|�
|jtjj�|�t��
tjj|_
Wd�n1s�wY|�t��tjj|_Wd�dS1s�wYdSdSrB)r	rhr\r
rirrgrj�TLSv1_3r�rNrdrr�rr�r�rar)r�rR�
minimum_range�
maximum_ranger r r!�test_min_max_version�s|�
���


�
�


�
�

�
�
��
�
��"��z!ContextTests.test_min_max_version�security_levelzrequires OpenSSL >= 1.1.0cCs&t�tj�}hd�}|�|j|�dS)N>rr�r�rr r�)r	rhr]r�rN)r�rR�security_level_ranger r r!�test_security_level5sz ContextTests.test_security_levelcCs�t�tj�}ttdd�}|�|jtj|B�tj|_|�|jtj�tj|_|�|jtj�tj|_|�|jtj�tj	|_|�|jtj	�tjtj
B|_|�|jtjtj
B�|�t��d|_Wd�dS1slwYdS)N�VERIFY_X509_TRUSTED_FIRSTr)
r	rhr\rZr��verify_flags�VERIFY_DEFAULT�VERIFY_CRL_CHECK_LEAF�VERIFY_CRL_CHECK_CHAIN�VERIFY_ALLOW_PROXY_CERTS�VERIFY_X509_STRICTr�r�)r�rR�tfr r r!�test_verify_flagsHs$
�"�zContextTests.test_verify_flagscCs�t�tj�}|jtdd�|jttd�|jt|jtd�|�t��
}|�t�Wd�n1s2wY|�	|j
jtj�|�
tjd��
|�t�Wd�n1sWwY|�
tjd��
|�t�Wd�n1sswYt�tj�}|�tt�|jttd�|jttd�|�
tjd��
|�t�Wd�n1s�wY|�
tjd��
|�t�Wd�n1s�wY|�
tjd��|jttd�Wd�n1s�wYt�tj�}|�
tjd��|�tt�Wd�n	1�swY|jttd�|jtt��d�|jttt���d�|�ttt�|�ttt���|�tttt����|�
td��|jtdd�Wd�n	1�s[wY|�tj��|jtdd�Wd�n	1�sywY|�
td	��|jtd
dd�Wd�n	1�s�wYdd
�}dd�}dd�}dd�}dd�}dd�}dd�}	Gdd�d�}
|jt|d�|jt|d�|jt|d�|jt|
�d�|jt|
�jd�|�tj��|jt|d�Wd�n	1�swY|�
td	��|jt|d�Wd�n	1�swY|�
td��|jt|d�Wd�n	1�s<wY|�
td��|jt|	d�Wd�n	1�sZwY|jt|	d�dS)Nrb�PEM librfzkey values mismatch)�passwordzshould be a stringT�badpasszcannot be longer�ai�cS�tSr��KEY_PASSWORDr r r r!�getpass_unicode�rUz:ContextTests.test_load_cert_chain.<locals>.getpass_unicodecSst��Sr)r`r�r r r r!�
getpass_bytes��z8ContextTests.test_load_cert_chain.<locals>.getpass_bytescSstt���Sr)r�r`r�r r r r!�getpass_bytearray�r�z<ContextTests.test_load_cert_chain.<locals>.getpass_bytearraycS�dS)Nr\r r r r r!�getpass_badpass�rUz:ContextTests.test_load_cert_chain.<locals>.getpass_badpasscSsddS)Nr]ir r r r r!�getpass_huge�rcz7ContextTests.test_load_cert_chain.<locals>.getpass_hugecSre)Nr�r r r r r!�getpass_bad_type�rUz;ContextTests.test_load_cert_chain.<locals>.getpass_bad_typecSstd��)N�
getpass error)�	Exceptionr r r r!�getpass_exception�rcz<ContextTests.test_load_cert_chain.<locals>.getpass_exceptionc@�eZdZdd�Zdd�ZdS)z:ContextTests.test_load_cert_chain.<locals>.GetPassCallablecSr^rr_r�r r r!�__call__�rUzCContextTests.test_load_cert_chain.<locals>.GetPassCallable.__call__cSr^rr_r�r r r!�getpass�rUzBContextTests.test_load_cert_chain.<locals>.GetPassCallable.getpassN)rrrrmrnr r r r!�GetPassCallable�srozmust return a stringri)r	rhr\r�r�r�r�rErir�rjrkrlr�r��BADCERT�	EMPTYCERT�ONLYCERT�ONLYKEY�BYTES_ONLYCERT�
BYTES_ONLYKEYr�CERTFILE_PROTECTEDr`r�r��ONLYKEY_PROTECTEDr�rnrj)r�rRr`rarbrdrfrgrhrkror r r!�test_load_cert_chain\s��������
�
���������z!ContextTests.test_load_cert_chaincCst�tj�}|�t�|jtdd�|�t�|jtdd�|�t|j�|�t|jddd�|�t��
}|�t	�Wd�n1sDwY|�
|jjtj
�|�tjd��
|�t�Wd�n1siwY|�tt�|jttd�|�t|jdd�dS)N)r�r%rZ�r%T)r	rhr\r�r��BYTES_CERTFILEr�r�rErir�rjrkrlr�r�rpr��BYTES_CAPATH�r�rRr`r r r!�test_load_verify_locations�s"

��z'ContextTests.test_load_verify_locationscCs�tt��}|��}Wd�n1swYt�|�}tt��}|��}Wd�n1s0wYt�|�}t�tj�}|�|�	�dd�|j
|d�|�|�	�dd�|j
|d�|�|�	�dd�|j
|d�|�|�	�dd�t�tj�}d�||f�}|j
|d�|�|�	�dd�t�tj�}d|d|d	|d
g}|j
d�|�d�|�|�	�dd�t�tj�}|j
|d�|j
|d�|�|�	�dd�|j
|d�|�|�	�dd�t�tj�}d�||f�}|j
|d�|�|�	�dd�t�tj�}|jt
|j
td�|�tjd��|j
d
d�Wd�n	1�s*wY|�tjd��|j
dd�Wd�dS1�sIwYdS)N�x509_car��cadatar�r�r��head�other�again�tailrz4no start line: cadata does not contain a certificate�brokenz6not enough data: cadata does not contain a certificatesbroken)rIrrJr	r�CAFILE_NEURONIOrhr]r��cert_store_statsr�rr�r��objectr�r�)r�rL�
cacert_pem�
cacert_der�neuronio_pem�neuronio_derrR�combinedr r r!�test_load_verify_cadata�sd

�


�

����$�z$ContextTests.test_load_verify_cadata�)Avoid mixing debug/release CRT on WindowscCs�t�tj�}|�t�tjdkr|�t�|�t	|j�|�t	|jd�|�t
��
}|�t�Wd�n1s9wY|�|j
jtj�|�tj��}|�t�Wd�dS1s^wYdS)N�nt)r	rhr\�load_dh_params�DHFILErr�BYTES_DHFILEr�r�rKrir�rjrkrlr�r�r|r r r!�test_load_dh_paramss


�"�z ContextTests.test_load_dh_paramscCsHtjtjhD]}t�|�}|�|��dddddddddddd��qdS)Nr)�numberrg�connect_good�connect_renegotiate�accept�accept_good�accept_renegotiate�hits�misses�timeouts�
cache_full)r	r]r\rhr��
session_statsr�r r r!�test_session_statss 


��zContextTests.test_session_statscCst�tj�}|��dSr)r	rhr]�set_default_verify_pathsr$r r r!�test_set_default_verify_paths sz*ContextTests.test_set_default_verify_pathsz#ECDH disabled on this OpenSSL buildcCsbt�tj�}|�d�|�d�|�t|j�|�t|jd�|�t|jd�|�t|jd�dS)N�
prime256v1s
prime256v1�foo�foo)r	rhr\�set_ecdh_curver�r�r�r$r r r!�test_set_ecdh_curve&s

z ContextTests.test_set_ecdh_curvecCsjt�tj�}|�t|j�|�t|jd�|�t|jd�|�t|j|�dd�}|�d�|�|�dS)Nr r;cSrTrr �r��
servernamerRr r r!�
dummycallback9rUz5ContextTests.test_sni_callback.<locals>.dummycallback)r	rhr\r�r��set_servername_callback)r�rRr�r r r!�test_sni_callback0s
zContextTests.test_sni_callbackcCsJt�tj�}|fdd�}|�|�t�|�}~~t��|�|�d�dS)NcSrTrr )r�r�rR�cycler r r!r�BrUz>ContextTests.test_sni_callback_refcycle.<locals>.dummycallback)	r	rhr\r�r=r>�gc�collectr�)r�rRr�rAr r r!�test_sni_callback_refcycle>s

z'ContextTests.test_sni_callback_refcyclecCs�t�tj�}|�|��dddd��|�t�|�|��dddd��|�t�|�|��dddd��|�t�|�|��dddd��dS)Nr)r~�crl�x509r�r�)	r	rhr]r�r�r�r�r�rr$r r r!�test_cert_store_statsJs 

�


�


�


�z"ContextTests.test_cert_store_statscCs�t�tj�}|�|��g�|�t�|�|��g�|�t�|�|��dddddddd�g�tt��}|�	�}Wd�n1sDwYt�
|�}|�|�d�|g�dS)	N)))r,zRoot CA))r�zhttp://www.cacert.org))r-zCA Cert Signing Authority))r�zsupport@cacert.orgzMar 29 12:29:49 2033 GMTzMar 30 12:29:49 2003 GMT�00)z!https://www.cacert.org/revoke.crlr)r2r3r4r5r=r6r8T)r	rhr]r��get_ca_certsr�r�rrIrJr)r�rRrLr�derr r r!�test_get_ca_certsXs(


��

�
zContextTests.test_get_ca_certscCs�t�tj�}|��t�tj�}|�tjj�|��t�tj�}|�tjj�t�tj�}|�t|jd�|�t|jd�dS)Nr�)	r	rhr]�load_default_certsr�r�r�r�r�r$r r r!�test_load_default_certstsz$ContextTests.test_load_default_certsrznot-Windows specificcCsjt�tj�}t���!}t|d<t|d<|��|�|�	�dddd��Wd�dS1s.wYdS)Nr�r�rr�)r�r�r~)
r	rhr]rr�r�r�r�r�r�)r�rRr�r r r!�test_load_default_certs_env�s
"�z(ContextTests.test_load_default_certs_envr�rz3Debug build does not share environment between CRTscCs�t�tj�}|��|��}t�tj�}t���%}t|d<t|d<|��|dd7<|�	|��|�Wd�dS1s@wYdS)Nr�r�r�r�)
r	rhr]r�r�rr�r�r�r�)r�rR�statsr�r r r!�#test_load_default_certs_env_windows�s
"�z0ContextTests.test_load_default_certs_env_windowscCs�|�|jtj@tj�tdkr|�|jt@t�tdkr%|�|jt@t�tdkr2|�|jt@t�tdkrA|�|jt@t�dSdSr�)r�r\r	r�rBrCrDrEr$r r r!�_assert_context_options�s$�����z$ContextTests._assert_context_optionscCs�t��}|�|jtj�|�|jtj�|�|j�|�	|�t
t��}|��}Wd�n1s2wYtjtt
|d�}|�|jtj�|�|jtj�|�	|�t�tjj�}|�|jtj�|�|jtj�|�	|�dS)N)r�r%r�)r	�create_default_contextr�r`r]r�r�r/r�r�rIr�rJr�r�r�r\r�)r�rRrLr�r r r!�test_create_default_context�s$


��
z(ContextTests.test_create_default_contextcCsVt��}|�|jtj�|�|jtj�|�|j�|�	|�t
tj�rSt�
��t�tj�}Wd�n1s9wY|�|jtj�|�|jtj�|�	|�t�
��tjtjtjdd�}Wd�n1slwY|�|jtj�|�|jtj�|�|j�|�	|�tjtjjd�}|�|jtj�|�|jtj�|�	|�dS)NT)r�r�)�purpose)r	�_create_stdlib_contextr�r`r]r�r�rCr�r�rarrr�rYr�r/r�r�r\r$r r r!�test__create_stdlib_context�s6


�

��
z(ContextTests.test__create_stdlib_contextcCs�t���t�tj�}Wd�n1swY|�|j�|�|jtj	�d|_|�
|j�|�|jtj�d|_tj|_|�|j�|�|jtj�d|_tj	|_d|_|�|j�|�|jtj	�d|_|�
|j�|�|jtj�d|_tj|_d|_|�|j�|�|jtj�d|_|�
|j�|�|jtj�|�
t��tj	|_Wd�n1s�wYd|_|�|j�tj	|_|�|jtj	�dSrE)rr�r	rhr[rCr�r�r�r�r/r�r�r�r�r$r r r!�test_check_hostname�sF
�
�z ContextTests.test_check_hostnamecCsTt�tj�}|�|j�|�|jtj�t�tj�}|�	|j�|�|jtj
�dSr)r	rhr]r/r�r�r�r�r\rCr�r$r r r!�test_context_client_server	sz'ContextTests.test_context_client_servercCs�Gdd�dtj�}Gdd�dtj�}t�tj�}||_||_|jt��dd��}|�	||�Wd�n1s8wY|j
t��t��dd�}|�	||�dS)Nc@�eZdZdS)z;ContextTests.test_context_custom_class.<locals>.MySSLSocketN�rrrr r r r!�MySSLSocket�r�c@r�)z;ContextTests.test_context_custom_class.<locals>.MySSLObjectNr�r r r r!�MySSLObjectr�r�Trc)r	r��	SSLObjectrhr\�sslsocket_class�sslobject_classr�r�r)�wrap_bior�)r�r�r�rRr�r�r r r!�test_context_custom_classs�z&ContextTests.test_context_custom_classcCs�t�tj�}|�|jd�d|_|�|jd�d|_|�|jd�|�t��d|_Wd�n1s4wY|�t��d|_Wd�n1sLwYt�tj�}|�|jd�|�t��d|_Wd�dS1srwYdS)Nr�r�rr�)	r	rhr\r��num_ticketsr�r�r�r]r$r r r!�test_num_tickest$s"��"�zContextTests.test_num_tickestN).rrrrr%rkrrr.r>rArDrIrrMrOr	rhrPrYrxr}r��skipIf�Py_DEBUG_WIN32r�r�r�r�r�r�r�r�r�r�ryrr�r�r�r�r�r�r�r�r�r r r r!rxsZ
�

N
�
S
?


	

,rc@s8eZdZdd�Ze�ed�dd��Zdd�Zdd	�Z	d
S)�
SSLErrorTestscCsXt�dd�}|�t|�d�|�|jd�t�dd�}|�t|�d�|�|jd�dS)Nr�r�)r	r�r�rXrk�SSLZeroReturnError)r��er r r!�test_str8szSSLErrorTests.test_strr�cCs�t�tj�}|�tj��
}|�t�Wd�n1swY|�|jj	d�|�|jj
d�t|j�}|�|�
d�|�dS)N�PEM�
NO_START_LINEz"[PEM: NO_START_LINE] no start line)r	rhr]r�r�r�r�r�rj�library�reasonrXr/rY)r�rRr`r�r r r!�test_lib_reasonBs�
zSSLErrorTests.test_lib_reasonc
Cst�tj�}d|_tj|_t�d��f}t�|�	��}|�
d�|j|ddd��9}|�tj
��}|��Wd�n1s=wYt|j�}|�|�d�|�|�|jjtj�Wd�n1scwYWd�dSWd�dS1s{wYdS)NFr�r�z%The operation did not complete (read))r	rhr]r�r�r�r�r��create_connectionr��setblockingr�r��SSLWantReadError�do_handshakerXrjr/rYr�rk�SSL_ERROR_WANT_READ)r�rRr�r�r`r r r!�
test_subclassMs"

�
��"�zSSLErrorTests.test_subclasscCs�t��}|�t��|jt��t��dd�Wd�n1s wY|�t��|jt��t��dd�Wd�n1sAwY|�t��|jt��t��dd�Wd�dS1scwYdS)Nr;r�z.example.orgzexample.orgevil.com)r	r�r�r�r�r�r�r$r r r!�test_bad_server_hostname_s �����"�z&SSLErrorTests.test_bad_server_hostnameN)
rrrr�rkr�r�r�r�r�r r r r!r�6s



r�c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�MemoryBIOTestscCs�t��}|�d�|�|��d�|�|��d�|�d�|�d�|�|��d�|�|��d�|�d�|�|�d�d�|�|�d�d	�|�|�d�d�dS)
Nr�r�barsfoobar�bazr�sbar��z)r	r�r}r�rJ�r��bior r r!�test_read_writens



zMemoryBIOTests.test_read_writecCs�t��}|�|j�|�|��d�|�|j�|�d�|�|j�|��|�|j�|�|�d�d�|�|j�|�|�d�d�|�|j�|�|��d�|�|j�dS)Nrr�r�sfor��o)	r	r�rC�eofr�rJr}�	write_eofr/r�r r r!�test_eof|s
zMemoryBIOTests.test_eofcCs�t��}|�|jd�|�d�|�|jd�td�D]}|�d�|�|jd|d�qtd�D]}|�d�|�|j|d�q2|��|�|jd�dS)Nrr�rr�rC)r	r�r��pendingr}r�rJ)r�r�r�r r r!�test_pending�s


zMemoryBIOTests.test_pendingcCsbt��}|�d�|�|��d�|�td��|�|��d�|�td��|�|��d�dS)Nr�r�r�)r	r�r}r�rJr��
memoryviewr�r r r!�test_buffer_types�s
z MemoryBIOTests.test_buffer_typescCsLt��}|�t|jd�|�t|jd�|�t|jd�|�t|jd�dS)Nr�Tr�)r	r�r�r�r}r�r r r!�test_error_types�s
zMemoryBIOTests.test_error_typesN)rrrr�r�r�r�r�r r r r!r�ls	r�c@rl)�SSLObjectTestscCsFt��}|�td��t�||�Wd�dS1swYdSr�)r	r�r�r�r�r�r r r!r��s"�z SSLObjectTests.test_private_initc	Cs:t�\}}}t��}t��}t��}t��}|j|||d�}|j||dd�}	td�D]8}
z|��Wn
tjy<Ynw|jrG|�|�	��z|	��Wn
tjyWYnw|jrb|�|�	��q*|��|	��|�
tj��|��Wd�n1s�wY|�|�	��|	��|�|�	��|��dS)Nr�Trcr�)r�r	r�r�r�r�r�r�r}rJr��unwrap)r��
client_ctx�
server_ctxr��c_in�c_out�s_in�s_out�clientr	�_r r r!�test_unwrap�s@���
�zSSLObjectTests.test_unwrapN)rrrr�r�r r r r!r��sr�c@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Ze
�ejdkd�dd��Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0S)1�SimpleBackgroundTestsz?Tests that connect to a simple server running in the backgroundcCsPt�tj�|_|j�t�t|jd�}t|jf|_	|�
�|�|jddd�dS)Nr)
r	rhr\r�r�r�rrhr
�server_addr�	__enter__ro�__exit__)r�r	r r r!�setUp�szSimpleBackgroundTests.setUpcCs�tt�tj�tjd��}|�|j�|�i|���|�	|j
�Wd�n1s*wYtt�tj�tjtd��}|�|j�|�
|���|�	|j
�Wd�dS1sZwYdS)Nr��r�r�)r�r�r<r	r�rgr�r��getpeercertrCr�r�r�r/r�r r r!�test_connect�s"���"�z"SimpleBackgroundTests.test_connectcCs<tt�tj�tjd�}|�|j�|�tjd|j	|j
�dS)Nr��certificate verify failed)r�r�r<r	r�rorpr�r�rgr�r�r r r!�test_connect_fail�s�
�z'SimpleBackgroundTests.test_connect_failcCsJtt�tj�tjtd�}|�|j�|�d|�	|j
��|�|���dS)Nrr)
r�r�r<r	r�r�rorpr�rr�r/rr�r r r!�test_connect_ex�s�z%SimpleBackgroundTests.test_connect_exc	Cs�tt�tj�tjtdd�}|�|j�|�d�|�	|j
�}|�|dtj
tjf�t�g|ggd�	z|��Wn&tjyLt�|gggd�Yntjy^t�g|ggd�Ynwq3|�|���dS)NF)r�r�r�rrS)r�r�r<r	r�r�rorpr�rr�r�rk�EINPROGRESSr�selectr�r��SSLWantWriteErrorr/r�r�r�rr r r!�test_non_blocking_connect_exs*�
��	z2SimpleBackgroundTests.test_non_blocking_connect_excCst�tj�}d|_tj|_|�t�tj���}|�	|j
�|�i|���Wd�n1s/wY|jt�tj�dd��}|�	|j
�Wd�n1sPwYtj
|_|�t�|�t�tj���}|�	|j
�|��}|�|�Wd�dS1s�wYdS)NF�dummyr�)r	rhr]r�r�r�r�r�r<rgr�r�rr�r�r�r/�r�rRr�r{r r r!�test_connect_with_context"s(���
"�z/SimpleBackgroundTests.test_connect_with_contextcCsHt�tj�}|jt�tj�td�}|�|j�|�	tj
d|j|j�dS)Nr�r)
r	rhr]r�r�r<r�rorpr�r�rgr�)r�rRr�r r r!�test_connect_with_context_fail6s
�
�z4SimpleBackgroundTests.test_connect_with_context_failcCs�t�tj�}|jtd�|jt�tj�td��}|�	|j
�|��}|�|�Wd�n1s1wYt�tj�}|jt
d�|jt�tj�td��}|�	|j
�|��}|�|�Wd�dS1shwYdS)Nryr�)r	rhr]r�r�r�r�r<r�rgr�rr/r{rr r r!�test_connect_capathCs(���"�z)SimpleBackgroundTests.test_connect_capathcCstt��}|��}Wd�n1swYt�|�}t�tj�}|j|d�|jt	�	t	j
�td��}|�|j
�|��}|�|�Wd�n1sNwYt�tj�}|j|d�|jt	�	t	j
�td��}|�|j
�|��}|�|�Wd�dS1s�wYdS)Nrr�)rIr�rJr	rrhr]r�r�r�r<r�rgr�rr/)r�rLrr�rRr�r{r r r!�test_connect_cadataZs0

�
���"�z)SimpleBackgroundTests.test_connect_cadatar�z*Can't use a socket as a file under WindowscCs�tt�tj��}|�|j�|��}|��}|��t�	|d�|��t
��|�t
��}t�	|d�Wd�n1s>wY|�|jjtj�dSr�)r�r�r<rgr��fileno�makefilerprrJr�r�r�rEr�rjrk�EBADF)r�r@�fdrLr�r r r!�test_makefile_closeos�z)SimpleBackgroundTests.test_makefile_closecCs�t�tj�}|�|j�|�d�t|tjdd�}|�|j	�d}	z
|d7}|�
�Wn$tjy>t�|ggg�Yntj
yOt�g|gg�Ynwq"tjr^tj�d|�dSdS)NF�r�r�rTr�z9
Needed %d calls to do_handshake() to establish session.
)r�r<rgr�r�r�r	r�rorpr�r�r
rrr{ryr|r})r�r��countr r r!�test_non_blocking_handshake�s.
���	�z1SimpleBackgroundTests.test_non_blocking_handshakecCst|g|j�Rdti�dS)Nr{)�_test_get_server_certificater�r�r�r r r!�test_get_server_certificate�r#z1SimpleBackgroundTests.test_get_server_certificatecs�|j\}}g��fdd�}|j�|�t�||f�}|s%|�d||f�tj||ftd�}|s9|�d||f�tjrGt	j
�d|||f�|��||g�dS)Ncs��|�dSr)�append��ssl_sock�server_name�initial_context��server_namesr r!�
servername_cb��zLSimpleBackgroundTests.test_get_server_certificate_sni.<locals>.servername_cb�No server certificate on %s:%s!�r��&
Verified certificate for %s:%s is
%s
)
r�r�r�r	�get_server_certificaterr�rr{ryr|r}r�)r�r�r
r%rr r#r!�test_get_server_certificate_sni�s
z5SimpleBackgroundTests.test_get_server_certificate_snicCst|g|j�R�dSr)�!_test_get_server_certificate_failr�r�r r r!� test_get_server_certificate_fail�sz6SimpleBackgroundTests.test_get_server_certificate_failcCsXdd�}|j�|�|�tj��tj|jtdd�Wd�dS1s%wYdS)NcSst�d�dS)N皙�����?)r��sleeprr r r!r%�r&zPSimpleBackgroundTests.test_get_server_certificate_timeout.<locals>.servername_cb皙�����?)r�rV)	r�r�r�r�rVr	r*r�r�)r�r%r r r!�#test_get_server_certificate_timeout�s
�"�z9SimpleBackgroundTests.test_get_server_certificate_timeoutc	Cstt�tj�tjdd��}|�|j�Wd�n1swYtt�tj�tjdd��}|�|j�Wd�n1s?wY|�tjd��5t�tj��}t|tjdd�}|�|j�Wd�n1skwYWd�dSWd�dS1s�wYdS)Nr )r�r�r!r"r#)	r�r�r<r	r�rgr�r�r�)r�r�r�r r r!r%�s,�������"�z"SimpleBackgroundTests.test_cipherscCs�t�tj�}|jtd�|�|��g�|jt�tj	�dd��}|�
|j�|��}|�
|�Wd�n1s9wY|�t|���d�dS)Nryr.r�r�)r	rhr]r�r�r�r�r�r�r<rgr�rr/r_rr r r!�test_get_ca_certs_capath�s��z.SimpleBackgroundTests.test_get_ca_certs_capathcCs�t�tj�}|jtd�t�tj�}|jtd�t�tj�}|j|dd��0}|�|j	�|�
|j|�|�
|jj|�||_|�
|j|�|�
|jj|�Wd�dS1sXwYdS)Nryr.r�)
r	rhr]r�r�r�r<r�rgr�r�r��_sslobj)r��ctx1�ctx2r�r@r r r!�test_context_setget�s"�z)SimpleBackgroundTests.test_context_setgetc
Os�|�dtj�}t��|}d}		t��|kr|�d�d}
|	d7}	z||�}Wn tjyG}z|jtj	tj
fvr:�|j}
WYd}~nd}~ww|��}
|�|
�|
durVn|
tj	krl|�
d�}
|
rh|�|
�n|��qtjr{tj�d|	|jf�|S)NrVrTr�i�z"Needed %d calls to complete %s().
)r�r�
SHORT_TIMEOUTr��	monotonicrr	r�rkr��SSL_ERROR_WANT_WRITErJ�sendallrFr}r�r{ryr|r)r�r��incoming�outgoingrormr�rV�deadlinerrk�retr��bufr r r!�ssl_io_loop�sB
���


��z!SimpleBackgroundTests.ssl_io_loopcCs~t�tj�}|�|j�|�|j�t��}t��}t�tj	�}|�
|j�|�|j
tj�|�t�|�||dt�}|�|jj|�|�|���|�|���|�|���|�t|j�dtjvrl|�|�d��|�||||j �|�
|���|�|���|�!|���|�
|���dtjvr�|�
|�d��z|�||||j"�Wn
tj#y�Ynw|�tj$|j%d�dS)NFr�r�)&r�r<rorprgr�r	r�rhr]r/r�r�r�r�r�r�r�r�r�r3�ownerr��cipherr8�shared_ciphersr�r�rrr�r@r��assertIsNotNoner��SSLSyscallErrorr�r})r�r�r;r<rR�sslobjr r r!�test_bio_handshake	s@

�

�z(SimpleBackgroundTests.test_bio_handshakecCs�t�tj�}|�|j�|�|j�t��}t��}t�tj	�}d|_
tj|_|�
||d�}|�||||j�d}|�||||j|�|�||||jd�}|�|d�|�||||j�dS)NF�FOO
�sfoo
)r�r<rorprgr�r	r�rhr]r�r�r�r�r@r�r}rJr�r�)r�r�r;r<rRrF�reqr?r r r!�test_bio_read_write_data-	sz.SimpleBackgroundTests.test_bio_read_write_datacCs�t�\}}}t�tj��4}|�|j�t��}t��}|j|||d�}|�||||j	�|�
�|�tj|j
�Wd�dS1sCwYdS)Nr�)r�r�r<rgr�r	r�r�r@r�r�r��SSLEOFErrorrJ)r�r�r�r�r�r;r<rFr r r!�test_transport_eof>	s�"�z(SimpleBackgroundTests.test_transport_eofN)rrr�__doc__rrrrr
rrrrrkr�rrrrrr+r-r1r%r2r6r@rGrKrMr r r r!r��s2
	

	%"r��networkc@s*eZdZdd�Ze�ejd�dd��ZdS)�NetworkedTestscCs�t�t��Ett�tj�tjdd�}|�|j	�|�
d�|�tdf�}|dkr.|�d�n
|t
jkr8|�d�|�|t
jt
jf�Wd�dS1sMwYdS)NFrgH�����z>�rz!REMOTE_HOST responded too quicklyzNetwork unreachable.)r�transient_internet�REMOTE_HOSTr�r�r<r	r�rorprTrrrk�ENETUNREACHr��EAGAINrrr r r!�test_timeout_connect_exP	s�


"�z&NetworkedTests.test_timeout_connect_exz
Needs IPv6cCsHt�d��t|dd�t|dd�Wd�dS1swYdS)Nzipv6.google.comrQ)rrRrr,r�r r r!� test_get_server_certificate_ipv6`	s"�z/NetworkedTests.test_get_server_certificate_ipv6N)	rrrrVrkrrr�rWr r r r!rPM	srPcCspt�||f�}|s|�d||f�tj||f|d�}|s&|�d||f�tjr6tj�d|||f�dSdS)Nr'r(r))r	r*rrr{ryr|r})�testr�r
r{rr r r!rg	s�rc
Cs|ztj||ftd�}Wn&tjy1}ztjr&tj�d|�WYd}~dSWYd}~dSd}~ww|�	d|||f�dS)Nr(z%s
z$Got server certificate %s for %s:%s!)
r	r*r�r�rr{ryr|r}r)rXr�r
r�xr r r!r,r	s���r,)�make_https_serverc@sdeZdZGdd�dej�Z					ddd�Zdd	�Zd
d�Zddd
�Z	dd�Z
dd�Zdd�ZdS)rc@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|_||_||_|j�d�d|_tj�|�d|_	dS�NFT)
r	�runningr��addrr��sslconn�	threading�Thread�__init__�daemon)r�r	�connsockr]r r r!ra�	s
z-ThreadedEchoServer.ConnectionHandler.__init__c
Cs�z|jjj|jdd�|_|jj�|j���Wnytt	t
fyL}z&|jj�t|��|jj
r:tdt|j�d�d|_|��WYd}~dSd}~wtjtfy�}z6|jj�t|��|jj
rntdt|j�d�|jtjkr�tjdkr�d|_|j��|��WYd}~dSd}~ww|jj�|j���|jjjtjkr�|j��}tj r�|jj
r�tj!�"dt#�$|�d�|j�d�}tj r�|jj
r�|dur�tj!�"d	�ntj!�"d
t%|��d��|j�&�}tj r�|jj
r�tj!�"dt|�d�dS)
NTrcz'
 server:  bad connection attempt from z:
F�darwinz client cert is r�z client did not provide a cert
z cert binary is zb
z" server: connection cipher is now )'r	r�r�r�r^�selected_alpn_protocolsr�selected_alpn_protocol�ConnectionResetError�BrokenPipeError�ConnectionAbortedError�conn_errorsrX�chattyr�r�r]r\rpr	r�rErk�
EPROTOTYPEryr�stoprCr�r�rrr{r|r}r�r�r_rB)r�r�r{�cert_binaryrBr r r!�	wrap_conn�	sL��
��

z.ThreadedEchoServer.ConnectionHandler.wrap_conncCs|jr|j��S|j�d�S)NrI)r^rJr�rFr�r r r!rJ�	s
z)ThreadedEchoServer.ConnectionHandler.readcCs|jr	|j�|�S|j�|�Sr)r^r}r�rJ)r�r�r r r!r}�	sz*ThreadedEchoServer.ConnectionHandler.writecCs"|jr
|j��dS|j��dSr)r^rpr�r�r r r!rp�	sz*ThreadedEchoServer.ConnectionHandler.closecCs�d|_|jjs
|��s
dS|j�r�z�|��}|��}|s;d|_z|j��|_Wn	t	y1Ynwd|_|�
��n\|dkrStjrL|jj
rLtj�d�|�
�WdS|jjrv|dkrvtjrh|jj
rhtj�d�|�d�|��stWdS�n!|jjr�|jr�|dkr�tjr�|jj
r�tj�d	�|�d�|j��|_d|_tjr�|jj
r�tj�d
�n�|dkr�tjr�|jj
r�tj�d�|j�d
�}|�t|��d�d�n�|dk�rtjr�|jj
r�tj�d�z|j��Wn tj�y}z|�t|��d�d�WYd}~n�d}~ww|�d�n�|dk�r'|j��du�r!|�d�nv|�d�np|dk�r>|j��}|�t|��d�d�nY|dk�rW|jj��}|�t|��dd�d�n@|dk�rp|jj��}|�t|��dd�d�n'tj�r�|jj
�r�|j�r�d�p�d}tj�d|||��|f�|�|���WnMt	�y�}z@|jj�r�tj�r�t|t ��r�t!d|j"���nt#d�z|�d�Wn
t	�y�Ynw|�
�d|_|j�$�WYd}~nd}~ww|jsdSdS) NTFsoverz" server: client closed connection
�STARTTLSz2 server: read STARTTLS from client, sending OK...
�OK
�ENDTLSz0 server: read ENDTLS from client, sending OK...
z* server: connection is now unencrypted...
s
CB tls-uniquez@ server: read CB tls-unique from client, sending our CB data...
r��us-ascii�
�PHAz( server: initiating post handshake auth
�HASCERT�TRUE
�FALSE
�GETCERTs
VERIFIEDCHAINr��bigsUNVERIFIEDCHAIN�	encrypted�unencryptedz/ server: read %r (%s), sending back %r (%s)...
z Connection reset by peer: zTest server failure:
sERROR
)%r\r	�starttls_serverrorJ�stripr^r�r�rErprr{�connectionchattyryr|r}r�r�r��verify_client_post_handshaker	r�rr3�get_verified_chainr_�to_bytes�get_unverified_chainrrkrW�ConnectionError�printr]r�rm)r��msg�strippedr�r�r{�certs�ctyper r r!�run�	s��
�
�
$��




���
�����z(ThreadedEchoServer.ConnectionHandler.runN)
rrrrNrarorJr}rpr�r r r r!�ConnectionHandler�	s
>r�NTFcCs�|
r|
|_n8t�|dur|ntj�|_|dur|ntj|j_|r&|j�|�|r.|j�|�|r6|j�|�|	r>|j�	|	�||_
||_||_t
�
�|_t�|j�|_d|_d|_g|_g|_g|_tj�|�d|_dSr[)r�r	rhr\r�r�r�r��set_alpn_protocolsrPrkrr}r�r�rrr
�flag�activererCrjr_r`rarb)r��certificate�ssl_version�certreqs�cacertsrkrr}�alpn_protocolsr�r�r r r!raF
s<���

zThreadedEchoServer.__init__cC�|�t���|j��|Sr��startr_�Eventr��waitr�r r r!rh
�
zThreadedEchoServer.__enter__cGs|��|��dSr)rmr�r�rmr r r!rm
szThreadedEchoServer.__exit__cC�||_tj�|�dSr�r�r_r`r��r�r�r r r!r�q
�zThreadedEchoServer.startc
Cs8|j�d�|j�d�d|_|jr|j��|jr�z*|j��\}}tjr4|j	r4t
j�dt
|�d�|�|||�}|��|��WnNtyc}ztjrYt
j�d|�d��WYd}~n4d}~wtyo|��Yn$ty�}ztjr�|j	r�t
j�dt
|�d�WYd}~nd}~ww|js|��dS)N��?r�Tz server:  new connection from r�z connection timeout z connection handling failed: )r�rT�listenr�r�r�r�rr{rkryr|r}r�r�r�r�TimeoutError�KeyboardInterruptrm�
BaseExceptionrp)r��newconn�connaddr�handlerr�r r r!r�u
s@
�������zThreadedEchoServer.runcCs"|jdur|j��d|_dSdSr)r�rpr�r r r!rp�
s


�zThreadedEchoServer.closecCs
d|_dS�NF)r�r�r r r!rm�
�
zThreadedEchoServer.stop)
NNNNTFFNNNr)
rrrr_r`r�rarrr�r�rprmr r r r!r	sF
�"
rc@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�|_tj�||j�d|_|��dS)NTF)r�r�r�)r�r��asyncore�dispatcher_with_sendra�_ssl_accepting�_do_ssl_handshake)r��connr�r r r!ra�
s�z8AsyncoreEchoServer.EchoServer.ConnectionHandler.__init__cCs6t|jtj�r|j��dkr|��|j��dksdS)NrT)rWr�r	r�r��handle_read_eventr�r r r!�readable�
s
�z8AsyncoreEchoServer.EchoServer.ConnectionHandler.readablec
Cs�z|j��WnGtjtjfyYdStjy"|��YStjy*�tyN}z|j	dt
jkrC|��WYd}~SWYd}~dSd}~wwd|_dS)NrF)
r�r�r	r�rrL�handle_closer�rErmrk�ECONNABORTEDr��r��errr r r!r��
s���
zAAsyncoreEchoServer.EchoServer.ConnectionHandler._do_ssl_handshakecCsX|jr	|��dS|�d�}tjrtj�dt|��|s#|�	�dS|�
|���dS)NrIz server:  read %s from client
)r�r�rFrr{ryr|r}r�rprJr)r�r�r r r!�handle_read�
s
z;AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_readcCs(|��tjrtj�d|j�dSdS)Nz server:  closed connection %s
)rprr{ryr|r}r�r�r r r!r��
s�z<AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_closecC��rr r�r r r!r��
�z<AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_errorN)	rrrrar�r�r�r�r�r r r r!r��
sr�cCs@||_t�tjtj�}t�|d�|_tj�	||�|�
d�dS)Nr;r�)r�r�r<�SOCK_STREAMrrr
r��
dispatcherrar�rqr r r!ra�
s
z&AsyncoreEchoServer.EchoServer.__init__cCs(tjrtj�d|�|�||j�dS)Nz$ server:  new connection from %s:%s
)rr{ryr|r}r�r�)r��sock_objr]r r r!�handle_accepted�
sz-AsyncoreEchoServer.EchoServer.handle_acceptedcCr�rr r�r r r!r��
r�z*AsyncoreEchoServer.EchoServer.handle_errorN)	rrrr�r�r�rar�r�r r r r!�
EchoServer�
s
3r�cCs8d|_d|_|�|�|_|jj|_tj�|�d|_dSr[)	r�r�r�r	r
r_r`rarb)r�r�r r r!ra�
s

zAsyncoreEchoServer.__init__cCsd|jj|jfS)Nz<%s %s>)�	__class__rr	r�r r r!�__str__�
szAsyncoreEchoServer.__str__cCr�rr�r�r r r!r�
r�zAsyncoreEchoServer.__enter__cGsVtjr	tj�d�|��tjrtj�d�|��tjr#tj�d�tjdd�dS)Nz cleanup: stopping server.
z! cleanup: joining server thread.
z cleanup: successfully joined.
T)�
ignore_all)	rr{ryr|r}rmrr��	close_allr�r r r!r�
szAsyncoreEchoServer.__exit__NcCr�rr�r�r r r!r��
r�zAsyncoreEchoServer.startcCsBd|_|jr|j��|jrzt�d�WnY|jsdSdS)NTr�)r�r�r�r��loopr�r r r!r�s
�zAsyncoreEchoServer.runcCsd|_|j��dSr�)r�r	rpr�r r r!rmszAsyncoreEchoServer.stopr)
rrrr�r�r�rar�rrr�r�rmr r r r!r��
sD

r�rHFcCs�i}t||dd�}|��|jt��||d���}	|	�t|jf�|t|�t|�fD]C}
|r7tj	r7t
j�d|�|	�|
�|	�
�}|rMtj	rMt
j�d|�||��krktd|dd�t|�|dd���t|�f��q(|	�d	�|r|tj	r|t
j�d
�|�|	��|	��|	��|	��|	��|	j|	jd��|	��Wd�n1s�wY|j|d<|j|d
<Wd�|S1s�wY|S)zW
    Launch a server, connect a client to it and try various reads
    and writes.
    F�r�rkr)r��session� client:  sending %r...
� client:  read %r
�4bad data <<%r>> (%d) received; expected <<%r>> (%d)
N��over
� client:  closing connection.
)�compressionrB�peercert�client_alpn_protocolr8�session_reusedr��server_alpn_protocols�server_shared_ciphers)rr�r�rgrhr
r�r�rr{ryr|r}rJr�AssertionErrorr_r�r�rBrrfr8r�r�rprerC)r�r��indatarkr�sni_namer�r�r	r��arg�outdatar r r!�server_params_testsh�
��
����
�
	�
 
�#�#r�c
Cs|durtj}tjdtjdtjdi|}tjr.|rdpd}tj�|t�	|�t�	|�|f�t
��� t�|�}|j
|O_
t�|�}	|	j
|O_
Wd�n1sUwYt�|d�}
|
dur�t|	d�r�|tjkr�|	j|
kr�t
���|
|	_Wd�n1s�wY|jtjkr�|�d�t|	|�||	fD]}||_|�t�|�t�q�z
t||	d	d	d
�}Wn)tjy�|rÂYdSty�}
z|s�|
jtjkrւWYd}
~
dSd}
~
ww|s�t dt�	|�t�	|�f��|du�r||d
k�r
t d||d
f��dSdS)a<
    Try to SSL-connect using *client_protocol* to *server_protocol*.
    If *expect_success* is true, assert that the connection succeeds,
    if it's false, assert that the connection fails.
    Also, if *expect_success* is a string, assert that it is the protocol
    version actually used by the connection.
    Nr�r�r�z %s->%s %s
z
 {%s->%s} %s
rNr F)rkrz5Client protocol %s succeeded with server protocol %s!Tr8z%version mismatch: expected %r, got %r)!r	r�r�r�rr{ryr|r}�get_protocol_namerr�rhr\�PROTOCOL_TO_TLS_VERSIONr�rOr[rNr`rPrSr�r�r�r�r�r�r�rErk�
ECONNRESETr�)�server_protocol�client_protocol�expect_success�	certsreqs�server_options�client_options�certtype�	formatstrr�r��min_versionrRr�r�r r r!�try_protocol_combo?s�	����


��


�



��������

��r�c@s~eZdZdd�Zdd�Zdd�Zdd�Ze�e	j
d	�d
d��Zdd
�Zdd�Z
dd�Zdd�Zed�dd��Zdd�Zdd�Zed�dd��Zdd�Zed �d!d"��Zed#�d$d%��Zed&�d'd(��Zed)�d*d+��Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Z d:d;�Z!d<d=�Z"d>d?�Z#d@dA�Z$dBdC�Z%ed�dDdE��Z&ed)�ed#�e'dFdG����Z(ed&�e'dHdI���Z)ed)�ed#�e'dJdK����Z*ed �dLdM��Z+dNdO�Z,e�dPe	j-vdQ�dRdS��Z.dTdU�Z/e�e0e	dV�dW�dXdY��Z1e�2e3dZ�d[d\��Z4d]d^�Z5d_d`�Z6dadb�Z7dcdd�Z8dedf�Z9dgdh�Z:didj�Z;dkdl�Z<dmdn�Z=dodp�Z>dqdr�Z?dsdt�Z@dudv�ZAdwdx�ZBdydz�ZCd{d|�ZDd}S)~�
ThreadedTestsc	Cs�tjr	tj�d�t�\}}}|jtjtj	d��t
||dd|d�Wd�n1s,wYd|_|jtj	tjd��0|�tj
��}t
||dd|d�Wd�n1sXwY|�dt|j��Wd�n1spwY|jtj	tj	d��/|�tj
��}t
||ddd�Wd�n1s�wY|�dt|j��Wd�n1s�wY|jtjtjd��0|�tj
��}t
||ddd�Wd�n1s�wY|�dt|j��Wd�dS1s�wYdS)	z2Basic test of an SSL client connecting to a serverr�)r�r	T)r�r�rkrr�NFz@Cannot create a client socket with a PROTOCOL_TLS_SERVER context)r�r�rkr)rr{ryr|r}r�r�r	r]r\r�r�r�r�r�rXrj)r�r�r�r�r�r r r!�	test_echo�s`����������
���"�zThreadedTests.test_echoc

Cs�tjr	tj�d�t�\}}}t|dd�}|��|jt��d|d���}|�	t
|jf�|�t
��|��Wd�n1s?wY|��|��}|�|d�|��}tjrptj�t�|�d�tj�dt|�d�d|vr~|�d	t�|��d
|dvr�|�d�|�d|�|�d
|�t�|d�}t�|d
�}	|�||	�Wd�n1s�wYWd�dSWd�dS1s�wYdS)Nr�F�r�rk)r�r��Can't get peer certificate.zConnection cipher is z.
r6z$No subject field in certificate: %s.r+zkMissing or invalid 'organizationName' field in certificate subject; should be 'Python Software Foundation'.r4r3)rr{ryr|r}r�rr�r�rgrhr
r�r�rr�r/rBr�r�rXrr�r	r�r-)
r�r�r�r�r	r�r{rB�before�afterr r r!�test_getpeercert�sP
�
������"�zThreadedTests.test_getpeercertc
Cstjr	tj�d�t�\}}}ttdd�}|�|j	tj
|B�t|dd�}|�3|jt
�
�|d��}|�t|jf�|��}|�|d�Wd�n1sNwYWd�n1s]wY|j	tjO_	t|dd�}|�@|jt
�
�|d��'}|�tjd��|�t|jf�Wd�n1s�wYWd�n1s�wYWd�n1s�wY|�t�t|dd�}|�<|jt
�
�|d��}|�t|jf�|��}|�|d�Wd�n1s�wYWd�dSWd�dS1�swYdS)	Nr�rQrTr�r�r�r)rr{ryr|r}r�rZr	r�rRrSrr�r�rgrhr
rr/rTr�r�r��CRLFILE)r�r�r�r�rXr	r�r{r r r!�test_crl_check�s^
����
�������

���$�zThreadedTests.test_crl_checkc
Cs�tjr	tj�d�t�\}}}t|dd�}|�3|jt��|d��}|�	t
|jf�|��}|�
|d�Wd�n1s>wYWd�n1sMwYt|dd�}|�@|jt��dd��'}|�tjd��|�	t
|jf�Wd�n1swYWd�n1s�wYWd�n1s�wYt|dd�}|�@t���#}|�td��
|�|�Wd�n1s�wYWd�n1s�wYWd�dSWd�dS1s�wYdS)	Nr�Tr�r�r�r�z:Hostname mismatch, certificate is not valid for 'invalid'.z'check_hostname requires server_hostname)rr{ryr|r}r�rr�r�rgrhr
rr/r�r	r}r�)r�r�r�r�r	r�r{r r r!r�sX
����
�������	
�����"�z!ThreadedTests.test_check_hostnamez)test requires hostname_checks_common_namec
CsVt�\}}}|jsJ�d|_t|dd�}|�)|jt��|d��}|�t|jf�Wd�n1s3wYWd�n1sBwYtt�\}}}d|_t|dd�}|�H|jt��|d��&}|�	t
j��|�t|jf�Wd�n1s}wYWd�n1s�wYWd�dSWd�dS1s�wYdS)NFTr�r�)r�rFrr�r�rgrhr
r�r�r	�SSLCertVerificationErrorrr r r!rI(s:

����
�����"�z.ThreadedTests.test_hostname_checks_common_namec	Cs�t�tj�}|�t�|�d�t}t�tj�}|�t	�t
|dd�}|�O|jt��|d��-}|�
t|jf�|��}|�|d�|��d�d�}|�|dd�d	�Wd�n1s_wYWd�dSWd�dS1swwYdS�
NzECDHE:ECDSA:!NULL:!aRSATr�r�r�r�-r�)�ECDHE�ECDSA)r	rhr]r�r�rP�SIGNED_CERTFILE_ECC_HOSTNAMEr\r��SIGNED_CERTFILE_ECCrr�r�rgrhr
rr/rB�split�r�r�r�r�r	r�r{rBr r r!�
test_ecc_cert@s*



���"�zThreadedTests.test_ecc_certc	Cst�tj�}|�t�tjj|_|�d�t	}t�tj
�}|�t�|�t
�t|dd�}|�O|jt��|d��-}|�t|jf�|��}|�|d�|��d�d�}|�|dd�d	�Wd�n1siwYWd�dSWd�dS1s�wYdSr�)r	rhr]r�r�r
rgrdrPr�r\r�r�r�rr�r�rgrhr
rr/rBr�r�r r r!�test_dual_rsa_eccUs.





���"�zThreadedTests.test_dual_rsa_eccc	
Cs�tjr	tj�d�t�tj�}|�t	�t�tj
�}tj|_d|_
|�t�gd�}|D]U\}}t|dd�}|�A|jt��|d��(}|�|j|�|�t|jf�|��}|�|j|�|�|d�Wd�n1smwYWd�n1s|wYq,t|dd�}|�H|jt��dd��&}|�tj��|�t|jf�Wd�n1s�wYWd�n1s�wYWd�dSWd�dS1s�wYdS)Nr�T))ukönig.idn.pythontest.net�xn--knig-5qa.idn.pythontest.net)r�r�)sxn--knig-5qa.idn.pythontest.netr�)u(königsgäßchen.idna2003.pythontest.net�.xn--knigsgsschen-lcb0w.idna2003.pythontest.net)r�r�)s.xn--knigsgsschen-lcb0w.idna2003.pythontest.netr�)�.xn--knigsgchen-b4a3dun.idna2008.pythontest.netr�)s.xn--knigsgchen-b4a3dun.idna2008.pythontest.netr�r�r�r�zpython.example.org)rr{ryr|r}r	rhr\r��IDNSANSFILEr]r�r�r�r�r�rr�r�r�r�rgrhr
rr/r�r})	r�r�r��
idn_hostnamesr��expected_hostnamer	r�r{r r r!�test_check_hostname_idnosN


�����

�����"�z%ThreadedTests.test_check_hostname_idncCsDt�\}}}|�t�tj|_tjj|_t	|ddd�}|�{|j
t��|d��Y}z
|�t
|jf�WnAtjyP}ztjrFtj�d|�WYd}~n-d}~wtys}z|jtjkr^�tjritj�d|�WYd}~n
d}~ww|�d�Wd�n1s�wYWd�dSWd�dS1s�wYdS)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.
        Tr�r��
SSLError is %r
N�
socket.error is %r
�'Use of invalid cert should have failed!)r�r�r�r	r�r�r
rgrdrr�r�rgrhr
r�rr{ryr|r}rErkr�r�r�r�r�r�r	r�r�r r r!�test_wrong_cert_tls12�s:

�
�����
�P�z#ThreadedTests.test_wrong_cert_tls12rJcCsxt�\}}}|�t�tj|_tjj|_tjj|_t	|ddd�}|��|j
t��|dd��m}|�t
|jf�z|�d�|�d�|�d�|�d�WnAtjyj}ztjr`tj�d|�WYd}~n-d}~wty�}z|jtjkrx�tjr�tj�d	|�WYd}~n
d}~ww|�d
�Wd�n1s�wYWd�dSWd�dS1s�wYdS)NTr�F�r��suppress_ragged_eofs�datar�sshould have failed alreadyr�r�r)r�r�r�r	r�r�r
rJrNrr�r�rgrhr
r}rJr�rr{ryr|rErkr�rrr r r!�test_wrong_cert_tls13�sF


�
��


���
�P�z#ThreadedTests.test_wrong_cert_tls13cszt���t���t���t��t�����fdd�}����fdd�}tj|d�}|��z
|�W|��dS|��w)ztA brutal shutdown of an SSL server should raise an OSError
        in the client when attempting handshake.
        cs8���������\}}|��������dSr)r�r�r�rp)�newsockr])�
listener_gone�listener_readyr�r r!�listener�sz2ThreadedTests.test_rude_shutdown.<locals>.listenerc	s����t���1}|�t�f����zt|�}Wn	ty#Ynw��d�Wd�dSWd�dS1s<wYdS)Nz2connecting to closed SSL socket should have failed)r�r�rgrhr�rEr)r�r )rr	r
r�r r!�	connector
s
��"�z3ThreadedTests.test_rude_shutdown.<locals>.connector��targetN)	r_r�r�rrrhr`r�r)r�r
rr2r )rr	r
r�r�r!�test_rude_shutdown�sz ThreadedTests.test_rude_shutdowncCs6tjr	tj�d�t�tj�}|�t	�t�tj
�}t|dd�}|�o|jt
�
�td��M}z
|�t|jf�Wn:tjyq}z-d}|�|tj�|�|jd�|�|j|�|�|t|��|�dt|��WYd}~nd}~wwWd�n1s|wYWd�dSWd�dS1s�wYdS)Nr�Tr�r�z&unable to get local issuer certificater�r)rr{ryr|r}r	rhr\r�r�r]rr�r�r�rgrhr
r�r)r�r��verify_code�verify_messager�r�)r�r�r�r	r�r�r�r r r!�test_ssl_cert_verify_error
s6

������"�z(ThreadedTests.test_ssl_cert_verify_errorrbcCs�tjr	tj�d�ttjtjd�ttjtjdtj�ttjtjdtj	�ttjtj
d�td�r9ttjtjd�ttjtj
d�ttjtj
dtjd�ttjtj
dtjd�dS)z9Connecting to an SSLv2 server with various client optionsr�TFr�r�N)rr{ryr|r}r�r	�PROTOCOL_SSLv2r�r�r[r^�PROTOCOL_SSLv3rr�r�r�r r r!�test_protocol_sslv2.
s�
�z!ThreadedTests.test_protocol_sslv2c
Cs�tjr	tj�d�td�r7z
ttjtj	d�Wnt
y6}ztjr,tj�dt|��WYd}~nd}~wwtd�rCttjtjd�ttjtjd�td�rWttjtj
d�td�rettjtjdtj�ttjtjdtj�td�r}ttjtj
dtj�td�r�ttjtjdtj�ttjtjdtj�td�r�ttjtj
dtj�td�r�ttjtjdtjd	�ttjtjdtjtjBd	�td�r�ttjtj
dtjd	�dSdS)
z:Connecting to an SSLv23 server with various client optionsr�rbTz; SSL2 client to SSL23 server test unexpectedly failed:
 %s
NrFr)r�)rr{ryr|r}r^r�r	r[rrErXrrr�r�r�r�r�)r�rYr r r!�test_PROTOCOL_TLS@
sR�����
�
��zThreadedTests.test_PROTOCOL_TLSrcCs�tjr	tj�d�ttjtjd�ttjtjdtj�ttjtjdtj	�t
d�r1ttjtjd�ttjtjdtj
d�ttjtjd�dS)z9Connecting to an SSLv3 server with various client optionsr�rrbFrN)rr{ryr|r}r�r	rr�r�r^rr[r�rr�r r r!�test_protocol_sslv3j
s�z!ThreadedTests.test_protocol_sslv3rcCs�tjr	tj�d�ttjtjd�ttjtjdtj�ttjtjdtj	�t
d�r1ttjtjd�t
d�r=ttjtjd�ttjtj
dtjd�dS)z8Connecting to a TLSv1 server with various client optionsr�rrbFrrN)rr{ryr|r}r�r	rr�r�r^rrr[r�r�r r r!�test_protocol_tlsv1x
s
�z!ThreadedTests.test_protocol_tlsv1rcCs�tjr	tj�d�ttjtjd�td�rttjtj	d�td�r)ttjtj
d�ttjtjdtjd�ttjtjd�ttjtj
d�ttj
tjd�dS)zjConnecting to a TLSv1.1 server with various client options.
           Testing against older TLS versions.r��TLSv1.1rbFrrN)rr{ryr|r}r�r	rr^rrr[r�rYr�r r r!�test_protocol_tlsv1_1�
s�z#ThreadedTests.test_protocol_tlsv1_1rgcCs�tjr	tj�d�ttjtjdtjtj	Btjtj	Bd�t
d�r(ttjtjd�t
d�r4ttjtjd�ttjtj
dtjd�ttj
tjd�ttj�r\ttjtjd�ttjtjd�ttj�rsttjtjd�ttjtjd�dSdS)	zjConnecting to a TLSv1.2 server with various client options.
           Testing against older TLS versions.r��TLSv1.2)r�r�rbFrrN)rr{ryr|r}r�r	rYr�r�r^rrr[r�rarrr�r r r!�test_protocol_tlsv1_2�
s*

��

�z#ThreadedTests.test_protocol_tlsv1_2c	Cs�d}ttdddd�}d}|��t��}|�d�|�t|jf�tjr)t	j
�d�|D]j}tjr8t	j
�d|�|rD|�|�|��}n
|�
|�|�d�}|����}|dkro|�d	�rotjrht	j
�d
|�t|�}d}q+|dkr�|�d	�r�tjr�t	j
�d|�|��}d}q+tjr�t	j
�d
|�q+tjr�t	j
�d�|r�|�d�n|�
d�|r�|��n|��Wd�dSWd�dS1s�wYdS)z6Switching from clear text to encrypted and back again.)smsg 1sMSG 2rpsMSG 3smsg 4rrsmsg 5smsg 6T)r}rkrFr�r�rIrpsokz/ client:  read %r from server, starting TLS...
rrz- client:  read %r from server, ending TLS...
z client:  read %r from server
r�r�N)rr�r�r�rgrhr
rr{ryr|r}rJrJrFr~rrYr�r�rp)	r��msgsr	�wrappedr�r�r�r�r�r r r!�
test_starttls�
st�
�



������


�,"�zThreadedTests.test_starttlscCs�t|td�}tjrtj�d�ttd��}|�	�}Wd�n1s#wYd}d|j
tj�
t�df}tjtd�}tjj||d	�}z+|���d
�}|rkt|�dkrk|�	t|��}tjrktj�dt|�|f�W|��n|��w|�||�dS)
z8Using socketserver to create and manage SSL connections.rer��rbNr;zhttps://localhost:%d/%sr��r�rzcontent-lengthrz/ client: read %d bytes from remote server '%s'
)rZr�rr{ryr|r}rIr�rJr
rrr�r	r�r��urllib�request�urlopen�infor�r*r_rpr�)r�r	rLrr�urlr��dlenr r r!�test_socketserver�
s2
��
���zThreadedTests.test_socketserverc	Cs&tjr	tj�d�d}tt�}|�xtt���}|�	d|j
f�tjr+tj�d|�|�|�|��}tjr?tj�d|�||��kr^|�
d|dd�t|�|dd���t|�f�|�d	�tjrltj�d
�|��tjr�tj�d�Wd�dSWd�dS1s�wYdS)z'Check the example asyncore integration.r�rHrr�r�r�Nr�r�r�z client:  connection closed.
)rr{ryr|r}r�r�r�r�rgr
rJrrr_rp)r�r�r	r�r�r r r!�test_asyncore_servers@�
���
�"�z"ThreadedTests.test_asyncore_servercs�tjr	tj�d�tttjtj	tddd�}|���t
t��dtttjd����t
|jf��fdd�}�fdd	�}d
�jdgtfd�jddgtfd
�jdgdd�fg}d�jdgfd�jddgfd|dgfd|dgfg}d}|D]x\}}}	}
}||�d�}z<||g|
�R�}
d�|�}|j|
||�|d����}||��kr�|�dj||dd�t|�|dd�t|�d��Wqpty�}z"|	r�|�dj|d��t|��|�s�|�dj||d��WYd}~qpd}~ww|D]m\}}}	}
||�d�}z+��|�||
�}||��k�r"|�d j||dd�t|�|dd�t|�d��Wq�t�yX}z(|	�r8|�d!j|d��t|��|��sJ|�dj||d�����WYd}~q�d}~wwd"}��|�tt|��}|���d#|�t|��|�||�tdu�r�tj t|�}|�!|�}��|�|����|�|�"t#�j$�|�"t#�j%d"g�|�"t#�j&d$�|�"t#�j'td$�g���d%�|�"t�jd#�|�"t�jd#���(�Wd�dS1�s�wYdS)&z Test recv(), send() and friends.r�TF�r�r�r�rkr�r�r�r�r�cstd�}��|�}|d|�S�Nsd)r�rG)�br�r�r r!�
_recv_into4s
z0ThreadedTests.test_recv_send.<locals>._recv_intocs"td�}��|�\}}|d|�Sr,)r�rI)r-rr]r.r r!�_recvfrom_into9sz4ThreadedTests.test_recv_send.<locals>._recvfrom_intorJrKzsome.addressr:cSrTrr )rYr r r!�<lambda>Bsz.ThreadedTests.test_recv_send.<locals>.<lambda>rFrHrGrI�PREFIX_r�zsending with {}�r�zpWhile sending with <<{name:s}>> bad data <<{outdata:r}>> ({nout:d}) received; expected <<{indata:r}>> ({nin:d})
Nr�)rr��noutr��ninz>Failed to send with method <<{name:s}>>; expected to succeed.
rzFMethod <<{name:s}>> failed with unexpected exception message: {exp:s}
)r�expzrWhile receiving with <<{name:s}>> bad data <<{outdata:r}>> ({nout:d}) received; expected <<{indata:r}>> ({nin:d})
zAFailed to receive with method <<{name:s}>>; expected to succeed.
rr�rDr�))rr{ryr|r}rr�r	r�r\r�r�rgrhr
rJr_rKr:rFrHr��formatr�rJrrr�rXrYr��ctypes�c_ubyte�from_buffer_copyr�rLrMrNrOrPrp)r�r	r/r0�send_methods�recv_methods�data_prefix�	meth_name�	send_methr�rm�ret_val_methr�r>r�r�r��	recv_methr��buffer�ubyte�	bytesliker r.r!�test_recv_send!s����

��
���	������
���	������



�

$�zThreadedTests.test_recv_sendcCs�tt�}|��|�|jdd�t�t|jf�}|�|j	�t
|dd�}|�|j	�|�d�|�|�
d�d�|�|�d�d�|�|��d�|�d�|�|�
d�d�|�|�t��d�dS)NF)rrrr)rr�rrorr�r�rhr
rpr�rJr�rFrJr�rGr�)r�r	r�r r r!�test_recv_zero�s

zThreadedTests.test_recv_zerocs�tttjtjtddd�}|�@tt��dtttjd����t|j	f���
d�td����fdd�}|�tj
tjf|���
d����Wd�dS1sQwYdS)NTFr*r+i cs	����qr)rJr �r?r�r r!�fill_buffer�s
�z8ThreadedTests.test_nonblocking_send.<locals>.fill_buffer)rr�r	r�r\r�r�rgrhr
r�r�r�rr�rp)r�r	rHr rGr!�test_nonblocking_send�s4��
��

"�z#ThreadedTests.test_nonblocking_sendcst�tj��d}t���}t���d����fdd�}tj|d�}|�����zYz t�tj�}|�	d�|�
||f�|�tdt
|�W|��n|��wz t�tj�}t
|�}|�	d�|�td|j
||f�W|��n|��wWd�|�����dSd�|�����w)	NrFcsd������g}�s't��gggd�\}}}�|vr%|����d��r|D]}|��q)dS)Nr0r)r�r�r
rr�rp)�connsr�wr�r���finishr	�startedr r!�serve�s�
�z3ThreadedTests.test_handshake_timeout.<locals>.serverr.z	timed outT)r�r<rrr_r�r`r�r�rTrgr�r�r�rpr)r�r�r
rOr2r�r rLr!�test_handshake_timeout�s@


�

��
z$ThreadedTests.test_handshake_timeoutc
s�t�\}}}t�tj��d}t���}|j�dd��|��j�t�	��d�d�����fdd�}tj
|d�}|�����|jt��|d�}|�
||f�|�d�|��|��}	|��|��������|��tj�|��|	�dS)	NrTrccs0���������\������d��dS)Nr )r�r�r�rJrFr ��evt�peer�remoter	r r!rOsz/ThreadedTests.test_server_accept.<locals>.serverr�r)r�r�r<rrr�r/r�r_r�r`r�r�rgrJrFr�rprr)r	r�r�)
r�r�r�r�r�r
rOr2r��client_addrr rQr!�test_server_accepts4
�
z ThreadedTests.test_server_acceptc	C�t�tj�}d|_|�t����+}|�t��}|��Wd�n1s%wY|�	|j
jtj�Wd�dS1s>wYdSr�)
r	rhr]r�r�r�r�rErr�rjrk�ENOTCONN�r�r�r�r`r r r!�test_getpeercert_enotconn3�
�"�z'ThreadedTests.test_getpeercert_enotconnc	CrWr�)
r	rhr]r�r�r�r�rEr�r�rjrkrXrYr r r!�test_do_handshake_enotconn;r[z(ThreadedTests.test_do_handshake_enotconnc
Cs�t�\}}}tjj|_|�d�|�d�t|d��>}|jt��|d��%}|�	t
��|�t|j
f�Wd�n1s=wYWd�n1sLwYWd�n1s[wY|�d|jd�dS)N�AES128�AES256rr�zno shared cipherr)r�r	r
rgrdrPrr�r�r�rErgrhr
r�rjrr r r!�test_no_shared_ciphersCs"



������z$ThreadedTests.test_no_shared_ciphersc	Cs�t�tj�}d|_tj|_tttjdd��N}|�	t
�
���'}|�|��d�|�|j
d�|�t|jf�|�|��d�Wd�n1sGwY|�|j
d�|�|��d�Wd�dS1sfwYdS)zt
        Basic tests for SSLSocket.version().
        More tests are done in the test_protocol_*() methods.
        F)r�rkN�TLSv1.3)r	rhr]r�r�r�rr�r\r�r�r�r8r3rgrhr
r�)r�r�r	r�r r r!�test_version_basicQs"��"�z ThreadedTests.test_version_basicc	Cs�t�\}}}tjj|_t|d��F}|jt��|d��$}|�t	|j
f�|�|��dhd��|�
|��d�Wd�n1sAwYWd�dSWd�dS1sYwYdS)Nrr�r>�TLS_AES_128_GCM_SHA256�TLS_AES_256_GCM_SHA384�TLS_CHACHA20_POLY1305_SHA256r`)r�r	r
rJrNrr�r�rgrhr
r�rBr�r8rr r r!�test_tls1_3ds

���"�zThreadedTests.test_tls1_3c	Cs�t�\}}}tjj|_tjj|_tjj|_tjj|_t|d��:}|jt	�	�|d��}|�
t|jf�|�
|��d�Wd�n1sDwYWd�dSWd�dS1s\wYdS)Nrr�r)r�r	r
rrNrgrdrr�r�rgrhr
r�r8rr r r!�test_min_max_version_tlsv1_2ss 




���"�z*ThreadedTests.test_min_max_version_tlsv1_2c	Cs�t�\}}}tjj|_tjj|_tjj|_tjj|_t||�t	|d��:}|j
t��|d��}|�t
|jf�|�|��d�Wd�n1sIwYWd�dSWd�dS1sawYdS)Nrr�r)r�r	r
rrNrgrdrrSrr�r�rgrhr
r�r8rr r r!�test_min_max_version_tlsv1_1�s"





���"�z*ThreadedTests.test_min_max_version_tlsv1_1c
Cs�t�\}}}tjj|_tjj|_tjj|_tjj|_t||�t|d��Q}|j	t
�
�|d��/}|�tj��}|�
t|jf�Wd�n1sHwY|�dt|j��Wd�n1s`wYWd�dSWd�dS1sxwYdS)Nrr��alert)r�r	r
rgrdrNrrSrr�r�r�r�rgrhr
r�rXrjrr r r!�test_min_max_version_mismatch�s&





����"�z+ThreadedTests.test_min_max_version_mismatchc	Cs�t�\}}}tjj|_tjj|_tjj|_t||�t|d��:}|jt	�	�|d��}|�
t|jf�|�
|��d�Wd�n1sDwYWd�dSWd�dS1s\wYdS)Nrr�r)r�r	r
rrNrdrSrr�r�rgrhr
r�r8rr r r!�test_min_max_version_sslv3�s 




���"�z(ThreadedTests.test_min_max_version_sslv3c	Cs�t�\}}}tjj|_t|d��<}|jt��|d��}|�t	|j
f�|�d|��d�Wd�n1s7wYWd�dSWd�dS1sOwYdS)Nrr��ECDHr)
r�r	r
rgrdrr�r�rgrhr
r�rBrr r r!�test_default_ecdh_curve�s

���"�z%ThreadedTests.test_default_ecdh_curver�r�c		Cstjr	tj�d�t�\}}}t|ddd�}|��|jt��|d��S}|�	t
|jf�|�d�}tjr<tj�d�
|��|�|�|��dkrP|�t|�d	�n|�t|�d
�|�d�|����}|�|t|��d��Wd
�n1sxwY|jt��|d��Y}|�	t
|jf�|�d�}tjr�tj�d�
|��|�||�|�|�|��dkr�|�t|�d	�n|�t|�d
�|�d�|����}|�|t|��d��Wd
�n1s�wYWd
�d
SWd
�d
S1s�wYd
S)z Test tls-unique channel binding.r�TFr�r�r�z! got channel binding data: {0!r}
r`�0�sCB tls-unique
rsNz(got another channel binding data: {0!r}
)rr{ryr|r}r�rr�r�rgrhr
r�r7rDr8r�r_rJr~r�r��assertNotEqual)	r�r�r�r�r	r��cb_data�peer_data_repr�new_cb_datar r r!r��sp��
�

���
��

���"�z-ThreadedTests.test_tls_unique_channel_bindingcCsRt�\}}}t||dd|d�}tjrtj�d�|d��|�|dhd��dS)NT�rkrr�z got compression: {!r}
r�>N�RLE�ZLIB)	r�r�rr{ryr|r}r7r��r�r�r�r�r�r r r!�test_compressions�zThreadedTests.test_compressionrBz*ssl.OP_NO_COMPRESSION needed for this testcCsRt�\}}}|jtjO_|jtjO_t||dd|d�}|�|dd�dS)NTrsr�)r�r\r	rBr�r�rvr r r!�test_compression_disabled
s�z'ThreadedTests.test_compression_disabledr�cCs�t�\}}}tjj|_|�t�|�d�tjj|_t||dd|d�}|dd}|�	d�}d|vrEd|vrGd	|vrI|�
d
|d�dSdSdSdS)N�kEDHTrsrBrr��ADH�EDH�DHEzNon-DH cipher: )r�r	r
rgrdr�r�rPr�r�r)r�r�r�r�r�rB�partsr r r!�test_dh_paramss



�
�zThreadedTests.test_dh_paramscCs�t�\}}}|�d�|�d�tjj|_t||dd|d�}t�\}}}|�d�|�d�tjj|_t||dd|d�}t�\}}}|�d�|�d�|�d�tjj|_|�tj	��t||dd|d�Wd�dS1sqwYdS)N�	secp384r1zECDHE:!eNULL:!aNULLTrsr�)
r�r�rPr	r
rgrNr�r�r�rvr r r!�test_ecdh_curve)s6


�


�



�"�zThreadedTests.test_ecdh_curvecCs2t�\}}}t||dd|d�}|�|dd�dS)NTrsr�)r�r�r�rvr r r!�test_selected_alpn_protocolHs�z)ThreadedTests.test_selected_alpn_protocolcCs@t�\}}}|�ddg�t||dd|d�}|�|dd�dS)Nr��barTrsr�)r�r�r�r�rvr r r!�/test_selected_alpn_protocol_if_server_uses_alpnPs�z=ThreadedTests.test_selected_alpn_protocol_if_server_uses_alpnc
Csgd�}ddgdfddgdfdgdfddgdfg}|D]j\}}t�\}}}|�|�|�|�zt||dd|d�}WntjyO}	z|	}WYd}	~	nd}	~	wwd	t|�t|�t|�f}
|d
}|�|||
|df�t|d�rx|dd
nd}|�|||
|df�qdS)N)r�r��	milkshaker�r�r�zhttp/3.0zhttp/4.0TrszKfailed trying %s (s) and %s (c).
was expecting %s, but got %%s from the %%sr�r�r�r��nothingr	)r�r�r�r	r�rXr�r_)
r��server_protocols�protocol_tests�client_protocolsr�r�r�r�r�r�r��
client_result�
server_resultr r r!�test_alpn_protocolsYsL


�


�����
�
��
��z!ThreadedTests.test_alpn_protocolscCstjrJ�dSr)r	�HAS_NPNr�r r r!�test_npn_protocols{r&z ThreadedTests.test_npn_protocolscCsLt�tj�}|�t�t�tj�}|�t�t�tj�}|�t�|||fSr)	r	rhr\r�r�r�r]r�r�)r�r��
other_contextr�r r r!�sni_contexts~s



zThreadedTests.sni_contextscCs"|d}|�d|ff|d�dS)Nr�r-r6)r�)r�r�rr{r r r!�check_common_name�szThreadedTests.check_common_namecs�g�|��\}�}d|_��fdd�}|�|�t||ddd�}|��d|fg�|�|d�g�t||ddd�}|��d|fg�|�|t�g�|�d�t||ddd�}|�|t�|��g�dS)	NFcs$��||f�|dur�|_dSdSr)rr�r��callsr�r r!r%�s
�z6ThreadedTests.test_sni_callback.<locals>.servername_cbT�supermessage�rkr�r>�notfunny)r�r�r�r�r�r�r�)r�r�r�r%r�r r�r!r��s4
��
�zThreadedTests.test_sni_callbackcCsp|��\}}}dd�}|�|�|�tj��}t||ddd�}Wd�n1s)wY|�|jjd�dS)NcSstjSr)r	�ALERT_DESCRIPTION_ACCESS_DENIEDrr r r!�cb_returning_alert�szAThreadedTests.test_sni_callback_alert.<locals>.cb_returning_alertFr�r��TLSV1_ALERT_ACCESS_DENIED)	r�r�r�r	r�r�r�rjr�)r�r�r�r�r�r`r�r r r!�test_sni_callback_alert�s
��z%ThreadedTests.test_sni_callback_alertc	C�|��\}}}dd�}|�|�t���7}|�tj��}t||ddd�}Wd�n1s.wY|�|j	j
d�|�|jjt
�Wd�dS1sNwYdS)NcSsdddS)Nr�rr rr r r!�
cb_raising�r�z;ThreadedTests.test_sni_callback_raising.<locals>.cb_raisingFr�r��SSLV3_ALERT_HANDSHAKE_FAILURE)r�r�r�catch_unraisable_exceptionr�r	r�r�r�rjr��
unraisable�exc_type�ZeroDivisionError)r�r�r�r�r��catchr`r�r r r!�test_sni_callback_raising�s

��
�"�z'ThreadedTests.test_sni_callback_raisingc	Cr�)NcSre)Nr�r rr r r!�cb_wrong_return_type�rUzOThreadedTests.test_sni_callback_wrong_return_type.<locals>.cb_wrong_return_typeFr�r��TLSV1_ALERT_INTERNAL_ERROR)r�r�rr�r�r	r�r�r�rjr�r�r�r�)r�r�r�r�r�r�r`r�r r r!�#test_sni_callback_wrong_return_type�s

��"�z1ThreadedTests.test_sni_callback_wrong_return_typec	s�t�\}}}|�d�|�d�gd�}t|||d�}|dd}|�t|�d�|D]\�}}t�fdd�|D��s@|���q+dS)	Nz
AES128:AES256zAES256:eNULL)r^zAES-256�TLS_CHACHA20�TLS_AES�r�r�rc3s�|]}|�vVqdSrr )r0�algrr r!r1�r2z4ThreadedTests.test_shared_ciphers.<locals>.<genexpr>)r�rPr��
assertGreaterr_�anyr)	r�r�r�r��
expected_algsr�r��tls_version�bitsr rr!�test_shared_ciphers�s

�
��z!ThreadedTests.test_shared_cipherscCs�t�\}}}t|dd�}|�.|jt��|d�}|�t|jf�|��|�t	|j
d�|�t	|jd�Wd�dS1s?wYdS)NFr�r�rIshello)r�rr�r�rgrhr
rpr�r�rJr}rr r r!�,test_read_write_after_close_raises_valuerror�s
�"�z:ThreadedTests.test_read_write_after_close_raises_valuerrorc	
Cs&d}ttjd��
}|�|�Wd�n1swY|�tjtj�t�\}}}t|dd�}|�V|jt	�	�|d��4}|�
t|jf�ttjd��}|�
|�|�|�d�|�Wd�n1sewYWd�n1stwYWd�dSWd�dS1s�wYdS)Nsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx�wbFr�r�r rI)rIr�TESTFNr}ro�unlinkr�rr�r�rgrhr
�sendfiler�rF)	r��	TEST_DATArLr�r�r�r	r��filer r r!�
test_sendfiles,�
�
����"�zThreadedTests.test_sendfilec
Cs0t�\}}}tjj|_t|||d�}|d}|�|j�|�|j	d�|�|j
d�|�|j�|�|jd�|�
|d�|��}|�|dd�|�|dd�t||||d�}|��}|�|dd	�|�|dd�|�|d�|d}|�|j|j�|�||�|�||�|�|j	|j	�|�|j
|j
�t|||d�}|�
|d�|d}|�|j|j�|�||�|��}|�|dd
�|�|dd�t||||d�}|�|d�|d}	|�|	j|j�|�|	|�|�|	j	|j	�|�|	j
|j
�|��}|�|dd�|�|dd	�dS)Nr�r�rr�r�r�r�)r�r�r�rr )r�r	r
rgrdr�r/�idr�r�rV�
has_ticket�ticket_lifetime_hintrCr�r��assertIsNotr,ro)
r�r�r�r�r�r��	sess_stat�session2�session3�session4r r r!�test_sessionsd
����zThreadedTests.test_sessionc

Cs�t�\}}}t�\}}}tjj|_tjj|_t|dd�}|��*|jt��|d��G}|�|j	d�|�|j
d�|�t|j
f�|j	}|�|�|�t��}	t|_	Wd�n1s[wY|�t|	j�d�Wd�n1sswY|jt��|d��1}|�t|j
f�|�t��}	||_	Wd�n1s�wY|�t|	j�d�Wd�n1s�wY|jt��|d��*}||_	|�t|j
f�|�|j	j|j�|�|j	|�|�|j
d�Wd�n1s�wY|jt��|d��2}|�t��}	||_	|�t|j
f�Wd�n	1�swY|�t|	j�d�Wd�n1�s4wYWd�dSWd�dS1�sMwYdS)NFr�r�zValue is not a SSLSession.z#Cannot set session after handshake.Tz)Session refers to a different SSLContext.)r�r	r
rgrdrr�r�r�r�r�rgrhr
r/r�r�r�rXrjr�r�)
r�r�r�r��client_context2r�r	r�r�r�r r r!�test_session_handlingLsr


�
��
����
	��

��� �� $�z#ThreadedTests.test_session_handlingN)Errrr�r�r�r�rkrr	rGrIr�r�r�rrurrrrrrrrrrr(r)rErFrIrPrVrZr\r_rarerrfrgrirjrlrr�rwrOrxr�r�r~r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r r r r!r��s�,$(!�
8%
!)
*



9	1(


�
:	�

	
	"	(

9r�rJzTest needs TLS 1.3c@sdeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dS)�TestPostHandshakeAuthcCs�tjtjg}|D]S}t�|�}|�|jd�d|_|�|jd�tj|_|�|jtj�|�|jd�d|_|�|jtj�|�|jd�tj|_d|_|�|jtj�|�|jd�qdSr[)	r	r\r]rhr��post_handshake_authr�r�r�)r�r^r`rRr r r!�test_pha_setter�s$�
�z%TestPostHandshakeAuth.test_pha_setterc	CsHt�\}}}d|_tj|_d|_|�t�t|dd�}|�}|jt	�	�|d��[}|�
t|jf�|�
d�|�|�d�d�|�
d�|�|�d�d	�|�
d�|�|�d�d
�|�
d�|�|�d�d	�|�
d�|�d��d
�}|�d|�Wd�n1s�wYWd�dSWd�dS1s�wYdS)NTFr�r�rvrIrxrurqrwryirsr9)r�r�r	r�r�r�r�rr�r�rgrhr
r}r�rFr�r�)r�r�r�r�r	r��	cert_textr r r!�test_pha_required�s6

�




��"�z'TestPostHandshakeAuth.test_pha_requiredc
Cs t�\}}}d|_tj|_d|_dd�}||_||_t|dd�}|�d|jt��|dd��A}|�	t
|jf�|�d�|�
tjd��|�d	�}|�|d
�|�d�|�d	�Wd�n1sbwYWd�n1sqwYWd�dSWd�dS1s�wYdS)NTcSs@tjr|tjkr||||||f}tj�d|�d��dSdSdS)NzTLS: r�)rr{r�ALERTryr|r})r��	directionr8�content_type�msg_typer�r%r r r!�msg_cb�s�z>TestPostHandshakeAuth.test_pha_required_nocert.<locals>.msg_cbr�Frruz#(certificate required|EOF occurred)rIrqrv)r�r�r	r�r��
_msg_callbackrr�r�rgrhr
r}r�r�rFr�)r�r�r�r�r�r	r�r�r r r!�test_pha_required_nocert�s<
�
�

����"�z.TestPostHandshakeAuth.test_pha_required_nocertc	Cs tjr	tj�d�t�\}}}d|_tj|_	d|_|�
t�tj|_	t
|dd�}|�\|jt��|d��:}|�t|jf�|�d�|�|�d�d�|�d	�|�|�d�d
�|�d�|�|�d�d�Wd�n1sqwYWd�dSWd�dS1s�wYdS)Nr�TFr�r�rvrIrxrurqrw)rr{ryr|r}r�r�r	r�r�r�r�r�rr�r�rgrhr
r�rFrr r r!�test_pha_optional�s2

�


��"�z'TestPostHandshakeAuth.test_pha_optionalc	Cstjr	tj�d�t�\}}}d|_tj|_	d|_t
|dd�}|�\|jt��|d��:}|�
t|jf�|�d�|�|�d�d�|�d	�|�|�d�d
�|�d�|�|�d�d�Wd�n1shwYWd�dSWd�dS1s�wYdS)Nr�TFr�r�rvrIrxrurq)rr{ryr|r}r�r�r	r�r�rr�r�rgrhr
r�rFrr r r!�test_pha_optional_nocert�s.
�


��"�z.TestPostHandshakeAuth.test_pha_optional_nocertc
Cs�t�\}}}d|_tj|_|�t�t|dd�}|�[|jt	�	�|d��9}|�
t|jf�|�
tjd��|��Wd�n1sCwY|�d�|�d|�d��Wd�n1s`wYWd�dSWd�dS1sxwYdS)	NTFr�r�z
not serverrusextension not receivedrI)r�r�r	r�r�r�r�rr�r�rgrhr
r�r�r�r}r�rFrr r r!�test_pha_no_pha_clients(

�
�
��"�z,TestPostHandshakeAuth.test_pha_no_pha_clientc	Cst�\}}}tj|_d|_|�t�t|dd�}|�\|jt	�	�|d��:}|�
t|jf�|�
d�|�|�d�d�|�
d�|�|�d�d	�|�
d�|�|�d�d�Wd�n1sawYWd�dSWd�dS1sywYdS)
NTFr�r�rvrIrwrurq)r�r	r�r�r�r�r�rr�r�rgrhr
r}r�rFrr r r!�test_pha_no_pha_servers*

�


��"�z,TestPostHandshakeAuth.test_pha_no_pha_serverc	Cs�t�\}}}tj|_tjj|_d|_|�t	�t
|dd�}|�@|jt��|d��}|�
t|jf�|�d�|�d|�d��Wd�n1sJwYWd�dSWd�dS1sbwYdS)NTFr�r�rusWRONG_SSL_VERSIONrI)r�r	r�r�r
rgrdr�r�r�rr�r�rgrhr
r}r�rFrr r r!�test_pha_not_tls13)s$


�
��"�z(TestPostHandshakeAuth.test_pha_not_tls13c	CsHt}t�tj�}d|_|�t�d|_tj|_	t�tj
�}|�t�|�t�d|_tj
|_	t|dd�}|�d|jt��|d��B}|�t|jf�|�d�|�|�d�d�|�d�|�|�d�d	�|�d�|�|�d�d
�|�|��i�Wd�n1s�wYWd�dSWd�dS1s�wYdS)NTFr�r�rvrIrxrurqrw)r�r	rhr]r�r�r�r�r�r�r\r�r�r�rr�r�rgrhr
r}r�rFr)r�r�r�r�r	r�r r r!�test_bpo37428_pha_cert_none:s:



�


��"�z1TestPostHandshakeAuth.test_bpo37428_pha_cert_nonec	Cs�tdd�\}}}t|dd�}|��|jt��|d���}|�t|jf�|j��}|�	t
|�d�|\}}|j��}	|�	t
|	�d�|�	||	d�|�	t|�t|	d��|�	t
|�t
|	d��|�||�|�t|�t|��|�t
|�t
|��|�|��|���|�dt
|��|�d	t
|��|�tj�}
|�tj�}|�|
t�|�d
|
�|�|t�|�	t�|
�|�Wd�n1s�wYWd�dSWd�dS1s�wYdS)NFr�r�r�r�r�rzCN=localhostzCN=our-ca-serverz-----BEGIN CERTIFICATE-----)r�rr�r�rgrhr
r3r�r�r_r��hashr�ro�get_infor��public_bytesr��ENCODING_PEM�ENCODING_DERr)rXr�r	r)r�r�r�r�r	r��vc�ee�ca�uvcrr�r r r!�test_internal_chain_clientYsJ��


���"�z0TestPostHandshakeAuth.test_internal_chain_clientc	Cs�t�\}}}|�t�tj|_tjj|_t	|dd�}|�R|j
t��|d��0}|�t
|jf�|�d�|�d�}|�|d�|�d�|�d�}|�|d�Wd�n1sYwYWd�dSWd�dS1sqwYdS)NFr�r�sVERIFIEDCHAIN
rIs
sUNVERIFIEDCHAIN
)r�r�r�r	r�r�r
rgrdrr�r�rgrhr
r}rFr�)r�r�r�r�r	r��resr r r!�test_internal_chain_server~s,

�



��"�z0TestPostHandshakeAuth.test_internal_chain_serverN)rrrr�r�r�r�r�r�r�r�r�r�r�r r r r!r�s%%r��keylog_filenamez0test requires OpenSSL 1.1.1 with keylog callbackc@s�eZdZejfdd�Zee�e	d�dd���Z
ee�e	d�dd���Zee�ej
jd�e�e	d�d	d
����Zdd�Zd
d�Zdd�ZdS)�TestSSLDebugcCs8t|��}tt|��Wd�S1swYdSr)rIr_r�)r��fnamerLr r r!�keylog_lines�s

$�zTestSSLDebug.keylog_linesr�cCs
|�tjtj�t�tj�}|�|jd�|�	t
j�tj��tj|_|�|jtj�|�
t
j�tj��|�|��d�d|_|�|jd�|�ttf��t
j�t
j�tj��|_Wd�n1sewY|�t��d|_Wd�dS1s~wYdS)Nr�)rorr�r�r	rhr]r�r�rCrr�isfiler/r�r��IsADirectoryError�PermissionErrorr�abspathr�r$r r r!�test_keylog_defaults�s$��"�z!TestSSLDebug.test_keylog_defaultsc	Cs�|�tjtj�t�\}}}tj|_t|dd�}|�)|jt��|d��}|�	t
|jf�Wd�n1s7wYWd�n1sFwY|�|�
�d�d|_tj|_t|dd�}|�)|jt��|d��}|�	t
|jf�Wd�n1swYWd�n1s�wY|�|�
�d�tj|_tj|_t|dd�}|�)|jt��|d��}|�	t
|jf�Wd�n1s�wYWd�n1s�wY|�|�
�d�d|_d|_dS)NFr�r�r���)rorr�r�r�r�rr�r�rgrhr
r�r�r,rr r r!�test_keylog_filename�sT
����
����
����
z!TestSSLDebug.test_keylog_filenamez.test is not compatible with ignore_environmentcCs�|�tjtj�tjj�tj	��>tjtj	d<|�
tj	dtj�t�tj
�}|�
|jd�t��}|�
|jtj�t��}|�
|jtj�Wd�dS1sQwYdS)N�
SSLKEYLOGFILE)rorr�r�rk�mockr6�dictr�environr�r	rhr]r�r�r�r$r r r!�test_keylog_env�s"�zTestSSLDebug.test_keylog_envcCsnt�\}}}dd�}|�|jd�||_|�|j|�|�t��
t�|_Wd�dS1s0wYdS)NcSrTrr �r�r�r8r�r�r�r r r!r��rUz.TestSSLDebug.test_msg_callback.<locals>.msg_cb)r�r�r�r�r�r�)r�r�r�r�r�r r r!�test_msg_callback�s
"�zTestSSLDebug.test_msg_callbackc	s�t�\}}}tjj|_g���fdd�}||_t|dd�}|�)|jt��|d��}|�	t
|jf�Wd�n1s<wYWd�n1sKwY��dtjt
jtjf����dtjt
jtjf��dS)Ncs@��|tj���|t���|ddh���||||f�dS)NrJr})r)r	r�r�r�rr��r�r�r r!r��sz4TestSSLDebug.test_msg_callback_tls12.<locals>.msg_cbFr�r�rJr})r�r	r
rgrdr�rr�r�rgrhr
r�r�	HANDSHAKEr�SERVER_KEY_EXCHANGE�CHANGE_CIPHER_SPEC)r�r�r�r�r�r	r�r r�r!�test_msg_callback_tls12�s6

����
��
��z$TestSSLDebug.test_msg_callback_tls12c	st�\}}}t�d�dd�}�fdd�}||_||_t|dd�}|�S|jt��|d��}|�t|jf�Wd�n1s@wY|jt��|d��}|�t|jf�Wd�n1sawYWd�dSWd�dS1sywYdS)	Nr�cSrTrr r�r r r!r�rUz@TestSSLDebug.test_msg_callback_deadlock_bpo43577.<locals>.msg_cbcs
�|_dSrrr���server_context2r r!�sni_cbr�z@TestSSLDebug.test_msg_callback_deadlock_bpo43577.<locals>.sni_cbFr�r�)	r�r��sni_callbackrr�r�rgrhr
)r�r�r�r�r�r�r	r�r r�r!�#test_msg_callback_deadlock_bpo43577s.

��
���"�z0TestSSLDebug.test_msg_callback_deadlock_bpo43577N)rrrrr�r��requires_keylogrkr�r�r�r�ry�flags�ignore_environmentr�r�r�r�r r r r!r��s"

"
�
r�c	Cs |�tjtjt�ddd��dS)N�iir�r)�
setsockoptr��
SOL_SOCKET�	SO_LINGER�struct�pack)r�r r r!�)set_socket_so_linger_on_with_zero_timeout.s rc@sBeZdZdZGdd�dej�Zdd�Zdd�Zdd	�Z	d
d�Z
dS)
�TestPreHandshakeClosezQVerify behavior of close sockets with received data before to the handshake.
    cs@eZdZ�fdd�Zdd�Zdd�Z�fdd�Zd	d
�Z�ZS)z6TestPreHandshakeClose.SingleConnectionTestServerThreadcs0||_d|_d|_d|_d|_t�j|d�dS)Nrr)�call_after_accept�
received_data�
wrap_errorr
r
�superra)r�rr	�r�r r!ra8sz?TestPreHandshakeClose.SingleConnectionTestServerThread.__init__cCs|��|Sr)r�r�r r r!r@sz@TestPreHandshakeClose.SingleConnectionTestServerThread.__enter__cGs:z
|jr	|j��Wn	tyYnw|��d|_dSr)r
rprErrr�r r r!rDs
��
z?TestPreHandshakeClose.SingleConnectionTestServerThread.__exit__csvt�tjj�|_tj|j_|jjtd�|jj	tt
d�t��|_t
�|j�|_|j�d�|j�d�t���dS)Nr!rf�@r�)r	r�r�r��ssl_ctxr�r�r�rrr�rsr�r
rrr
rTr�rr�r�r
r r!r�Ms

z<TestPreHandshakeClose.SingleConnectionTestServerThread.startcCs�|j��\}}|j��|�Y|�|�r	Wd�dSz
|jj|dd�}Wnty<}z	||_WYd}~nd}~wwz|�d�|_	WntyNYnwWd�dSWd�dSWd�dS1sjwYdS)NTrc�)
r
r�rpr	rr�rErrFr
)r�r��address�
tls_socketr�r r r!r�Xs.

������	�"�z:TestPreHandshakeClose.SingleConnectionTestServerThread.run)	rrrrarrr�r��
__classcell__r r r
r!� SingleConnectionTestServerThread6s	rcCsftjdkrdSt|t�s#t|t�r|jtjks#t�dt	|dd�tj
�r1|�dtj�d|���dSdS)N�linuxzwrong.version.numberr�r;z!Could not recreate conditions on z: err=)ryrrWrgrErk�EINVAL�re�searchrZ�Irr�r r r!�"non_linux_skip_if_other_okay_errorhs

��
��z8TestPreHandshakeClose.non_linux_skip_if_other_okay_errorcs2t���t�����fdd�}|j|dd�}|��|�|j�t���&}|�|j�	��t
|�|�d����|�
d�|��Wd�n1sMwY���|��|j}|�d|j�|�|t�|�|�|�|tj�|�d|jd	�|�d|j�|�d
|jd
�|j|jdd�dS)
Ncs�����d�s
td��dS)Nrz+wrap_socket event never set, test may fail.F)r�r��RuntimeError)�unused��ready_for_server_wrap_socket�server_accept_calledr r!r	�s
zPTestPreHandshakeClose.test_preauth_data_to_tls_server.<locals>.call_after_accept�preauth_data_to_tls_server�r	rFsDELETE /data HTTP/1.0

r�before TLS handshake with datar�r�attr must existr3)r_r�rrrorr�rgr
r�rr�r�rJrpr�rrr�r
r)rErr	r�r�rmr�ror�r�)r�r	r	r�rr rr!�test_preauth_data_to_tls_server|s8�



�

z5TestPreHandshakeClose.test_preauth_data_to_tls_serverc	sht����fdd�}|j|dd�}|��|�|j�t|j�t���I}|�	|j�
����d�s7|�d�t
��}z	|j|dd�}WntyZ}z
|}d	}WYd}~nd}~wwd}|�d
�}|��Wd�n1spwY|��|�d	|�|�|t�|�|�|�|t
j�|�d|jd�|�d|j�|�d
|jd
�|j|jdd�dS)Nc�&t|�|�d�|�����dS)NsWHTTP/1.0 307 Temporary Redirect
Location: https://example.com/someone-elses-server

T�rrJrpr���conn_to_client��$client_can_continue_with_wrap_socketr r!r	�s�zPTestPreHandshakeClose.test_preauth_data_to_tls_client.<locals>.call_after_accept�preauth_data_to_tls_clientr!rztest server took too long.r.r�rrr"r�rr#r3)r_r�rrrorrr
r�rgr�r�rr	r�r�rErFrprr�r)rr�r�rmr�ror�r�)	r�r	r	r�r�
tls_clientr�rr
r r)r!�test_preauth_data_to_tls_client�sJ�




���
��
z5TestPreHandshakeClose.test_preauth_data_to_tls_clientcs�t���G�fdd�dtjj�}�fdd�}|j|dd�}|��|�|j�t	|j
�|d|jt�
�dd	�}|�t��}|jd
dddid
�|��}Wd�dS1sVwYdS)NcseZdZ�fdd�ZdS)zeTestPreHandshakeClose.test_https_client_non_tls_response_ignored.<locals>.SynchronizedHTTPSConnectioncsDtjj�|���d�stjrtj�	d�|j
j|j|j
d�|_dS)Nr�z"server_responding event never set.r�)�httpr��HTTPConnectionrgr�rr{ryr|r}�_contextr�r�r�r���server_respondingr r!rg�s�zmTestPreHandshakeClose.test_https_client_non_tls_response_ignored.<locals>.SynchronizedHTTPSConnection.connectN)rrrrgr r1r r!�SynchronizedHTTPSConnection�sr3cr%)Ns!HTTP/1.0 402 Payment Required

Tr&r'r1r r!r	�s�z[TestPreHandshakeClose.test_https_client_non_tls_response_ignored.<locals>.call_after_accept�non_tls_http_RST_responderr!r.r)r
r�rV�HEADz/test�Host)�headers)r_r�r.r��HTTPSConnectionrrrorrr
r
r	r�r�rEr#�getresponse)r�r3r	r	�
connection�err_ctx�responser r1r!�*test_https_client_non_tls_response_ignored�s(	
�
�
"�z@TestPreHandshakeClose.test_https_client_non_tls_response_ignoredN)rrrrNr_r`rrr$r-r=r r r r!r2s2&1rcCstjr[tjtjd�}|��D]\}}|�}|r#|dr#d||f}nqtt���}tdtj	tj
f�td|�tdtj�tdtj�z	tdtj
�Wn	tyZYnwttttttttttttfD]}tj�|�sxt�d	|��qit� �}t!j"tj#g|�R�dS)
N)�Mac�Windowsrz%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 %r)$rr{r�mac_ver�	win32_ver�itemsr�r�r	r(r'r�r?r�rHr�rzrrrsrtrur�r�r�rp�BADKEYrqrr�exists�
TestFailedr�threading_setuprk�addModuleCleanup�threading_cleanup)�platsrro�plat�filename�thread_infor r r!�setUpModules@��
����rM�__main__r)rHTFNN)Nrr)�ryrk�
unittest.mockrXr�test.supportrrrrrrr�r
rr��datetimer��http.clientr.rrkr��urllib.requestr"r_rwr=r�	sysconfigrqr8�ImportError�warnings�catch_warnings�simplefilterr[r��
import_moduler	r�r
rrr
rO�Py_DEBUGr�r<�_PROTOCOL_NAMESrrhr'rf�get_config_varrr�r��verrZrHr"r��fsencoderzrrrsrtrurvrwr`r�r{r�rr�r�r�r�r�r�r�r�r�r�rr�r�r�rSrqrprirCr�rr�r�r�rBrCrDrErFrMrSra�	lru_cacher^rur�r��ignore_warningsrr�r�r��TestCaser�rr�r�r�r��requires_resourcerPrr,�test.ssl_serversrZr`rr�r�r�r�rr�rh�
HAS_KEYLOGr�r�rrrMr�mainr r r r!�<module>s��

�





�






��

	
	
(��3C6?0t
v
�1
�N}�Q
#�

Youez - 2016 - github.com/yon3zu
LinuXploit