Server : LiteSpeed
System : Linux server51.dnsbootclub.com 4.18.0-553.62.1.lve.el8.x86_64 #1 SMP Mon Jul 21 17:50:35 UTC 2025 x86_64
User : nandedex ( 1060)
PHP Version : 8.1.33
Disable Function : NONE
Directory :  /opt/cppython/lib/python3.8/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]


Current File : //opt/cppython/lib/python3.8/test/__pycache__/test_ssl.cpython-38.pyc
U

>��gI[�@svddlZddlZddlZddlmZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZ
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZzddlZWnek
r�dZYnXe�d�ZddlmZmZm Z e!ej"�Z#ej$Z$ej%�&d�Z'e'�o,ej(dkZ)e'�o>ej(dkZ*e'�oPej(dkZ+e�,d	�Z-iZ.d
D]J\Z/Z0ze1ee/�Z/e1eje0�Z0Wne2k
�r�Y�qdYnXe0e.e/<�qddd�Z3e3d
�Z4e�5e4�Z6e3d�Z7e3d�Z8e�5e7�Z9e�5e8�Z:e3d�Z;e3d�Z<dZ=e3d�Z>e�5e>�Z?e3dd�Z@e3dd�ZAdddddddd�ZBe3d�ZCe3d�ZDdZEd d!d"d#d$d%d&dddd'�
ZFe3d(�ZGd)ZHe3d*�ZId+ZJe3dd,�ZKe3d-�ZLe3d.�ZMe3d/�ZNdZOd0ZPe3d1�ZQe3d2�ZRe3d3�ZSe3d4�ZTe3d5�ZUe3d6�ZVe3d7�ZWe3d8�ZXe�5eX�ZYe1ed9d�ZZe1ed:d�Z[e1ed;d�Z\e1ed<d�Z]e1ed=d�Z^e1ed>d�Z_d?Z`d@dA�Zaea��r\dBdC�ZbndDdC�ZbdEdF�ZcejddGdH��ZedIdJ�Zfe�gehejidK�dL�ZjdMdN�ZkdOdP�ZldQdR�ZmdSdT�ZndUdV�Zoeo�ZpdWdX�ZqdYdZ�Zre�gejsd[�Ztejufejvddddd\�d]d^�ZweDfd_d`�ZxGdadb�dbejy�ZzGdcdd�ddejy�Z{Gdedf�dfejy�Z|Gdgdh�dhejy�Z}Gdidj�djejy�Z~Gdkdl�dlejy�ZGdmdn�dnejy�Z�d�dodp�Z�dqdr�Z�ddsl�m�Z�Gdtdu�duej��Z�Gdvdw�dwej��Z�d�d{d|�Z�d�d}d~�Z�Gdd��d�ejy�Z�e�geed��d��Gd�d��d�ejy��Z�ehejid��Z�e�ge�d��Z�Gd�d��d�ejy�Z�d�d��Z�Gd�d��d�ejy�Z�d�d�d��Z�e�d�k�rre��dS)��N)�support�ssl)�
TLSVersion�_TLSContentType�_TLSMessageTypeZLibreSSL)�rr)rrr)�rr�PY_SSL_DEFAULT_CIPHERS))�PROTOCOL_SSLv23�SSLv3)�PROTOCOL_TLSv1�TLSv1)�PROTOCOL_TLSv1_1�TLSv1_1cGstjjtj�t�f|��S�N)�os�path�join�dirname�__file__��name�r�,/opt/cppython/lib/python3.8/test/test_ssl.py�	data_file8srzkeycert.pemzssl_cert.pemzssl_key.pemzkeycert.passwd.pemzssl_key.passwd.pemZsomepass�capathz
4e1295a3.0z
5ed36f99.0)�)�countryNameZXY�)�localityNamezCastle Anthrax�)�organizationNamezPython Software Foundation))�
commonName�	localhostzAug 26 14:23:15 2028 GMTzAug 29 14:23:15 2018 GMTZ98A7CF88C74A32ED))�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 GMTZCB2D80995A69525C)
�OCSP�	caIssuers�crlDistributionPointsr&r'r(r)r*r+r,z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_COMPAT�OP_IGNORE_UNEXPECTED_EOFg>@c
CsNz2tddd��}d|��kW5QR�WSQRXWntk
rHYdSXdS)Nz/etc/os-releasezutf-8)�encodingZubuntuF)�open�read�FileNotFoundError)�frrr�	is_ubuntu�s
$r@cGs0|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)�hasattrrArrr�set_ciphers)�ctxs�ctxrrr�seclevel_workaround�s��rFcGsdSrr)rDrrrrF�scCsbt|t�r0|�d�st�tt|d�}|dkr0dS|tjtjtjhkrHdS|j	}t
|td�d��S)z�Check if a TLS protocol is available and enabled

    :param protocol: enum ssl._SSLMethod member or name
    :return: bool
    Z	PROTOCOL_NFT)�
isinstance�str�
startswith�AssertionError�getattrr�PROTOCOL_TLS�PROTOCOL_TLS_SERVER�PROTOCOL_TLS_CLIENTr�has_tls_version�len)�protocolrrrr�has_tls_protocol�s
�rRcCs�|dkrdSt|t�r"tjj|}ttd|j���s8dStrL|tjjkrLdSt�	�}t
|d�rz|jtjjkrz||jkrzdSt
|d�r�|j
tjjkr�||j
kr�dSdS)z{Check if a TLS/SSL version is enabled

    :param version: TLS version name or ssl.TLSVersion member
    :return: bool
    �SSLv2FZHAS_rA�maximum_versionT)rGrHrr�__members__rKr�IS_OPENSSL_3_0_0�TLSv1_2�
SSLContextrBrA�MINIMUM_SUPPORTEDrT�MAXIMUM_SUPPORTED)r,rErrrrO�s0
������rOcs�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��st���d���n
�||�SdS)Nz is not available.)rO�unittestZSkipTest)�args�kw)�funcr,rr�wrapper�sz8requires_tls_version.<locals>.decorator.<locals>.wrapper)�	functools�wraps)r^r_�r,)r^r�	decorator�sz'requires_tls_version.<locals>.decoratorr)r,rcrrbr�requires_tls_version�srdrAzrequired OpenSSL >= 1.1.0gcCs.d�tjt����}tjr*tj�||�dS)N� )	r�	traceback�format_exception�sys�exc_infor�verbose�stdout�write)�prefixZ
exc_formatrrr�handle_error
srncCs
tjdkS)N)r�	��
�)r�_OPENSSL_API_VERSIONrrrr�can_clear_optionssrtcCs
tjdkS)N)rro�rprr�r�OPENSSL_VERSION_INFOrrrr�no_sslv2_implies_sslv3_hellosrxcCs
tjdkS)N)rrorprrrrvrrrr�have_verify_flagssrycCsDtjs
dSt�tj�}z|�d�Wntk
r:YdSXdSdS)NF�	secp384r1T)r�HAS_ECDHrXrM�set_ecdh_curve�
ValueError)rErrr�_have_secp_curvessr~cCs$tjrt��jdkrtjStjS�Nr)�time�daylight�	localtime�tm_isdst�altzone�timezonerrrr�
utc_offset*sr�cCs^tjdkrZd}tj�||�}|jdd�}|�|�}|ddkrZ|dd�d|dd�}|S)	N)rrorprorrz%b %d %H:%M:%S %Y GMTr)�second��0re�)rrs�datetime�strptime�replace�strftime)�	cert_time�fmtZdtrrr�asn1time0s

r�z SNI support needed for this test)�	cert_reqs�ca_certs�ciphers�certfile�keyfilec	Ksvt�|�}|dk	r(|tjkr"d|_||_|dk	r:|�|�|dk	sJ|dk	rV|�||�|dk	rh|�|�|j|f|�S�NF)	rrX�	CERT_NONE�check_hostname�verify_mode�load_verify_locations�load_cert_chainrC�wrap_socket)	�sock�ssl_versionr�r�r�r�r��kwargs�contextrrr�test_wrap_socketAs



r�cCsr|tkrt}n$|tkrt}n|tkr*t}nt|��t�tj	�}|�
t�t�tj�}|�
|�|�
t�|||fS)zUCreate context

    client_context, server_context, hostname = testing_context()
    )�SIGNED_CERTFILE�SIGNED_CERTFILE_HOSTNAME�SIGNED_CERTFILE2�SIGNED_CERTFILE2_HOSTNAME�	NOSANFILE�NOSAN_HOSTNAMEr}rrXrNr��
SIGNING_CArMr�)Zserver_cert�hostname�client_context�server_contextrrr�testing_contextSs


r�c@s�eZdZdd�Zdd�Zdd�Zdd�Ze�e	j
d	kd
�dd��Zd
Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zejdd��Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Ze�d0e j!kd1�d2d3��Z"d4d5�Z#d6d7�Z$e�e%j&d8kd9�d:d;��Z'e�e%j&d8kd9�d<d=��Z(d>d?�Z)d@dA�Z*dBdC�Z+dDdE�Z,dFdG�Z-e�e.�dH�dIdJ��Z/dKdL�Z0e�1dMdN�dOdP��Z2dQdR�Z3d
S)S�BasicSocketTestscCs�tjtjtjtjtjtjr*tjtjdkr:tj	|�
tjddh�|�
tjddh�tjtj
tjtjtjdkr�tjtj|�tjtj�dS)N)rrTF�rrr)rr��
CERT_OPTIONAL�
CERT_REQUIREDr8r6r{r7rwr5�assertIn�HAS_SNI�OP_NO_SSLv2�OP_NO_SSLv3�OP_NO_TLSv1�
OP_NO_TLSv1_3�
OP_NO_TLSv1_1�
OP_NO_TLSv1_2�assertEqualrLr
��selfrrr�test_constantsms&

zBasicSocketTests.test_constantsc
Cs:|�td��$t���}t�|�W5QRXW5QRXdS�Nzpublic constructor)�assertRaisesRegex�	TypeError�socketr�	SSLSocket�r��srrr�test_private_init�s
z"BasicSocketTests.test_private_initcCs2tj}|�t|�d�t�|�}|�|j|�dS)Nz_SSLMethod.PROTOCOL_TLS)rrLr�rHrX�assertIsrQ�r��protorErrr�test_str_for_enums�s
z#BasicSocketTests.test_str_for_enumscCst��}tjr*tj�d||r dp"df�t�d�\}}|�t	|�d�|�||dk�|rxt�
d�}|�t	|�d�n|�tjtj
d�|�t
tj
d�|�t
tjd�ttd�r�|�ttjd�|�ttjdd�t�d	d
�t�dd
�t�td�d
�dS)
Nz
 RAND_status is %d (%s)
zsufficient randomnesszinsufficient randomness�r����RAND_egd�foozthis is a random stringg�R@sthis is a random bytes objects!this is a random bytearray object)r�RAND_statusrrjrhrkrl�RAND_pseudo_bytesr�rPZ
RAND_bytes�assertRaises�SSLErrorr}rBr�r�ZRAND_add�	bytearray)r��v�dataZis_cryptographicrrr�test_random�s,
��

zBasicSocketTests.test_random�posixzrequires posixcCst��}|s|�d�t��\}}t��}|dkr�zBt�|�t�d�d}|�t	|�d�t�
||�t�|�Wntk
r�t�d�YnXt�d�nzt�|�|�
tj|�t�|d�\}}|�|d�t�|d�}|�t	|�d�t�d�d}|�t	|�d�|�||�dS)Nz*OpenSSL's PRNG has insufficient randomnessrr�r)rr��failr�pipe�fork�closer�r�rPrl�
BaseException�_exit�
addCleanup�waitpidr=�assertNotEqual)r��statusZrfdZwfd�pidZchild_random�_Z
parent_randomrrr�test_random_fork�s0


z!BasicSocketTests.test_random_forkNcCs�|�tj�t�t�|�tj�t�t�tj�t�}t	j
rTtj�
dt�|�d�|�|dd�|�|dd�|�|dd�|�|dd	�dS)
N�
r+))r$zprojects.developer.nokia.com)r$zprojects.forum.nokia.comr.)zhttp://ocsp.verisign.comr/)z0http://SVRIntl-G3-aia.verisign.com/SVRIntlG3.cerr0)z0http://SVRIntl-G3-crl.verisign.com/SVRIntlG3.crl)r�r�_ssl�_test_decode_cert�CERTFILE�
CERTFILE_INFOr��SIGNED_CERTFILE_INFO�	NOKIACERTrrjrhrkrl�pprint�pformat�r��prrr�test_parse_cert�s*
�
�
�
�
�z BasicSocketTests.test_parse_certcCsLtj�t�}tjr,tj�dt	�
|�d�|�|dddddddd	��dS)
Nr�)�)rZUK))r"zcody-cazJun 14 18:00:58 2028 GMTzJun 18 18:00:58 2018 GMTZ02)r�))r"�#codenomicon-vm-2.test.lal.cisco.com))r$r�rr%)rr�r��TALOS_INVALID_CRLDPrrjrhrkrlr�r�r�r�rrr�test_parse_cert_CVE_2019_5010�s��z.BasicSocketTests.test_parse_cert_CVE_2019_5010cCsxtj�t�}tjr,tj�dt	�
|�d�d}|�|d|�|�|d|�tjdkr`d}nd}|�|d|�dS)	Nr�)�)rZUS))�stateOrProvinceNameZOregon))rZ	Beavertonr ))�organizationalUnitNamezPython Core Development�)r"�null.python.orgexample.org))�emailAddresszpython-dev@python.orgr*r&)rrorp)�r$zaltnull.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�r�r�r�)rz	<invalid>r+)
rr�r��NULLBYTECERTrrjrhrkrlr�r�r�rs)r�r�r*Zsanrrr�test_parse_cert_CVE_2013_4238�s
z.BasicSocketTests.test_parse_cert_CVE_2013_4238cCs tj�t�}|�|dd�dS)Nr+)
)r$Zallsans��	othername�
<unsupported>r)r�zuser@example.org)r$zwww.example.org)ZDirName)rrr ))r"zdirname example)r�zhttps://www.python.org/�r�	127.0.0.1)rz0:0:0:0:0:0:0:1)z
Registered IDz	1.2.3.4.5)rr�r��
ALLSANFILEr�r�rrr�test_parse_all_sanss
�z$BasicSocketTests.test_parse_all_sansc	Cs�ttd��}|��}W5QRXt�|�}t�|�}t�|�}|�||�|�tjd�sf|�	d|�|�
dtjd�s�|�	d|�dS)N�rr�z-DER-to-PEM didn't include correct header:
%r
z-DER-to-PEM didn't include correct footer:
%r
)r<�
CAFILE_CACERTr=r�PEM_cert_to_DER_certZDER_cert_to_PEM_certr�rIZ
PEM_HEADERr��endswithZ
PEM_FOOTER)r�r?�pem�d1Zp2�d2rrr�test_DER_to_PEM0s


z BasicSocketTests.test_DER_to_PEMcCsHtj}tj}tj}|�|t�|�|t�|�|t�|�|d�|�	|d�|\}}}}}|�|d�|�	|d�|�|d�|�	|d�|�|d�|�	|d�|�|d�|�
|d�|�|d�|�
|d�d	|d
��}	|dk�rd|d
�d
|d
�d
|d
��}
nd|d
�d
|d
�d
|d
��}
|�|�|
|	f�||t
|�f�dS)Ni�i@rr�r��?rrz	LibreSSL �drzOpenSSL �.)rZOPENSSL_VERSION_NUMBERrw�OPENSSL_VERSION�assertIsInstance�int�tuplerH�assertGreaterEqual�
assertLessZassertLessEqual�
assertTruerI�hex)r��n�tr��major�minorZfix�patchr�Zlibressl_verZopenssl_verrrr�test_openssl_version<s6
�z%BasicSocketTests.test_openssl_versionc	CsLt�tj�}t|�}t�|�}t�dtf��~W5QRX|�|�d�dS)N�)	r��AF_INETr��weakref�refr�check_warnings�ResourceWarningr�)r�r��ss�wrrrr�
test_refcycle_s
zBasicSocketTests.test_refcyclec	Cs�t�tj�}t|���}|�t|jd�|�t|jtd��|�t|jd�|�t|j	td�d�|�t|j
d�|�t|jdd�|�t|j
�|�t|jdgddd�|�t|jd�|�t|jtd�g�W5QRXdS)Nr�x)z0.0.0.0rrr�d)r�r%r�r��OSError�recv�	recv_intor��recvfrom�
recvfrom_into�send�sendto�NotImplementedError�dup�sendmsg�recvmsg�recvmsg_into�r�r�r*rrr�test_wrapped_unconnectedjs&

�
�z)BasicSocketTests.test_wrapped_unconnectedc
CsHdD]>}t�tj�}|�|�t|��}|�||���W5QRXqdS)N)Ng�@)r�r%�
settimeoutr�r��
gettimeout)r��timeoutr�r*rrr�test_timeout|s


zBasicSocketTests.test_timeoutc
Csdt��}|jtdtj|td�|jtdtj|dd�|jtdtj|ddd�tj|dtd��}|�td|jtd	f�W5QRX|�t	��(}t���}tj|t
d
�W5QRXW5QRX|�|jj
t
j�|�t	��*}t���}tj|tt
d�W5QRXW5QRX|�|jj
t
j�|�t	��*}t���}tj|t
t
d�W5QRXW5QRX|�|jj
t
j�dS)Nzcertfile must be specified�r�z5certfile must be specified for server-side operationsT��server_sider$�rDr�z!can't connect in server-side modei��r��r�r�)r�r�r}rr�r��connect�HOSTr�r/�NONEXISTINGCERTr��	exception�errno�ENOENT)r�r�r��cmrrr�test_errors_sslwrap�sV����
"
�
�z$BasicSocketTests.test_errors_sslwrapc	CsXtj�tj�t�ptj|�}t��}|�|j�|�	t
j��t||d�W5QRXdS)z;Check that trying to use the given client certificate failsrFN)
rrrrr�curdirr�r�r�r�rr�r��r�r�r�rrr�
bad_cert_test�s��zBasicSocketTests.bad_cert_testcCs|�d�dS)z Wrapping with an empty cert filer2N�rRr�rrr�test_empty_cert�sz BasicSocketTests.test_empty_certcCs|�d�dS)z:Wrapping with a badly formatted certificate (syntax error)r3NrSr�rrr�test_malformed_cert�sz$BasicSocketTests.test_malformed_certcCs|�d�dS)z2Wrapping with a badly formatted key (syntax error)r4NrSr�rrr�test_malformed_key�sz#BasicSocketTests.test_malformed_keyc
s�dd�}�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�rddAd9�}||dB�||dC�||dD�||dE�||dF�||d@�d2dGd4�}||d5�dHdIdJd-�}||d5�dHdGdJd-�}||dK���ttjdd���ttjid�ddLi}��tj	dM��t�|dN�W5QRXddOi}��tj	dP��t�|dQ�W5QRXddRi}��tj	dS��t�|dT�W5QRXddUi}��tj	dV��t�|dW�W5QRXddXi}��tj	dY��t�|dZ�W5QRXd[D]&}��t��t�
|�W5QRX�qVd\D]}��t�
|���q�tj�r�d]D]}��t�
|���q�dS)^NcSst�||�dSr)r�match_hostname��certr�rrr�ok�sz0BasicSocketTests.test_match_hostname.<locals>.okcs��tjtj||�dSr)r�r�CertificateErrorrWrXr�rrr��s
�z2BasicSocketTests.test_match_hostname.<locals>.failr*)))r"�example.comr\zExAmple.cOmzwww.example.comz.example.comzexample.orgZexampleXcom)))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))r$�linuxfr.org)r$�linuxfr.comr)r'r*r+r`rarr_zDec 18 23:59:59 2011 GMT)r��)r��
California�)rz
Mountain View�)r!z
Google Inc�)r"�mail.google.com)r'r*rgz	gmail.comrc)�r$r\)r�10.11.12.13)r�14.15.16.17r)r*r+rirjz127.1z14.15.16.17 z14.15.16.17 extra dataz14.15.16.18zexample.net)rh)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�rbrdrezDec 18 23:59:59 2099 GMT)r�rbrdrf))rZblablaz
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'Zcom)�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}rrWr�r[Z_inet_patonr)r�rZr�rYr]�invalidZipaddrrr�r�test_match_hostname�s




























�



�


�






�





�
�
�
�����z$BasicSocketTests.test_match_hostnamec	Cs:t�tj�}t���}|jt|j|ddd�W5QRXdS)NTz
some.hostname��server_hostname)rrXrMr�r�r}r�)r�rEr�rrr�test_server_side~s

�z!BasicSocketTests.test_server_sidec
Csht�d�}t�tj�}|�|���t|dd��&}|�t��|�d�W5QRXW5QRX|�	�dS)N�rrF��do_handshake_on_connectzunknown-type)
r��
create_serverr%rH�getsocknamer�r�r}�get_channel_bindingr�)r�r��cr*rrr�test_unknown_channel_binding�s
z-BasicSocketTests.test_unknown_channel_binding�
tls-unique�*'tls-unique' channel binding not availablec	Csjt�tj�}t|��}|�|�d��W5QRXt�tj�}t|dtd��}|�|�d��W5QRXdS)Nr~TrE)r�r%r��assertIsNoner{r�r;rrr�test_tls_unique_channel_binding�s
z0BasicSocketTests.test_tls_unique_channel_bindingc	CsVtt�tj��}t|�}|�t��}d}t��W5QRX|�|t	|j
jd��dSr)r�r�r%�reprZassertWarnsr)r�
gc_collectr�rH�warningr\)r�r*r
rNrrr�test_dealloc_warn�sz"BasicSocketTests.test_dealloc_warnc	Csrt��}|�t|�d�|�|tj�t���:}t|d<t	|d<t��}|�|j
t	�|�|jt�W5QRXdS)N��SSL_CERT_DIR�
SSL_CERT_FILE)rZget_default_verify_pathsr�rPrZDefaultVerifyPathsr�EnvironmentVarGuard�CAPATHr��cafiler)r��paths�envrrr�test_get_default_verify_paths�s
z.BasicSocketTests.test_get_default_verify_paths�win32�Windows specificc	Cs�|�t�d��|�t�d��|�ttj�|�ttjd�t�}dD]�}t�|�}|�|t�|D]p}|�|t	�|�
t|�d�|\}}}|�|t�|�
|ddh�|�|tttf�t|ttf�rf|�|�qfqHd}|�
||�dS)	N�CA�ROOTr$)r�r�r�x509_asn�
pkcs_7_asn�1.3.6.1.5.5.7.3.1)rrZenum_certificatesr�r��WindowsError�setr�listrr�rP�bytesr��	frozenset�boolrG�update)	r�Z
trust_oidsZ	storename�store�elementrY�encZtrust�
serverAuthrrr�test_enum_certificates�s&

z'BasicSocketTests.test_enum_certificatescCs�|�t�d��|�ttj�|�ttjd�t�d�}|�|t�|D]D}|�|t�|�	t
|�d�|�|dt�|�|dddh�qHdS)Nr�r$�rrr�r�)
rrZ	enum_crlsr�r�r�rr�rr�rPr�r�)r�Zcrlsr�rrr�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�W5QRXtd	�D]j}ztj�
|�}Wnt	k
r�Yq�X|�|jt
�|�|jt�|�|jt�|�|jttd�f�q�tj�d�}|�||�|�|tj�|�tj�d�|�|�tj�d�|�|�t	d
��tj�d�W5QRXdS)N)�r��TLS Web Server Authenticationr�r�r�r�r����zunknown NID 100000i��i�zunknown object 'serverauth'Z
serverauth)r�_ASN1Objectr��nid�	shortnameZlongname�oidrr�r}Zfromnidr��rangerrH�typeZfromname)r��expected�val�i�objrrr�test_asn1object�sB
�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�Z
clientAuth)
rr�r�Purpose�SERVER_AUTHr�r�r�r��CLIENT_AUTH)r�r�rrr�test_purpose_enum�s 
�
�z"BasicSocketTests.test_purpose_enumc	Cs�t�tjtj�}|�|j�|�t��}t|tj	d�W5QRX|�
t|j�d�t�
tj�}|�t��}|�|�W5QRX|�
t|j�d�dS)N�r�z!only stream sockets are supported)r�r%�
SOCK_DGRAMr�r�r�r6r�rr�r�rHrKrXrNr�)r�r�ZcxrErrr�test_unsupported_dtlssz&BasicSocketTests.test_unsupported_dtlscCs|�t�|�|�dSr)r�r�cert_time_to_seconds)r��
timestringZ	timestamprrr�cert_time_okszBasicSocketTests.cert_time_okc	Cs$|�t��t�|�W5QRXdSr)r�r}rr�)r�r�rrr�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�rrr�"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�)r�zJan 05 09:34:43 2018 GMTzJaN  5 09:34:43 2018 GmTzJan  5 09:34 2018 GMTzJan  5 09:34:43 2018zJan  5 09:34:43 2018 UTCzJan 35 09:34:43 2018 GMTzJon  5 09:34:43 2018 GMTzJan  5 24:00:00 2018 GMTzJan  5 09:60:43 2018 GMTg�W�AzDec 31 23:59:60 2008 GMTzJan  1 00:00:00 2009 GMTzJan  5 09:34:59 2018 GMTi�FOZzJan  5 09:34:60 2018 GMTi�FOZzJan  5 09:34:61 2018 GMTi�FOZzJan  5 09:34:62 2018 GMTzDec 31 23:59:59 9999 GMTg�� �MB)r�r�rr�r�)r�r��tsZ
newyear_tsrrr�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)	rr�rr�r�r�rrr)r�r�rrrr�local_february_namePszNBasicSocketTests.test_cert_time_to_seconds_locale.<locals>.local_february_nameZfebz>locale-specific month name needs to be different from C localezFeb  9 00:00:00 2007 GMTg`�r�Az  9 00:00:00 2007 GMT)�lower�skipTestr�r�)r�r�rrr� test_cert_time_to_seconds_localeLs

z1BasicSocketTests.test_cert_time_to_seconds_localecCsvt�tj�}|�|j�t�|�}tt�tj�tjd�}|�|j�|�	t
|f�}tjtj
tjtjf}|�||�dS)Nr�)r�r%r�r�r�	bind_portr�rr��
connect_exrIrLZECONNREFUSEDZEHOSTUNREACHZ	ETIMEDOUT�EWOULDBLOCKr�)r��server�portr��rc�errorsrrr�test_connect_ex_error[s
��z&BasicSocketTests.test_connect_ex_error)4�__name__�
__module__�__qualname__r�r�r�r�r[�
skipUnlessrrr�ZmaxDiffr�r�rr	rr#rZcpython_onlyr,r<rArOrRrTrUrVrrrur}r�CHANNEL_BINDING_TYPESr�r�r�rh�platformr�r�r�r�r�r�r�r�r�r�Zrun_with_localer�r�rrrrr�ksb
#

	
G
�



'�
#

r�c@s�eZdZdd�Zdd�Zdd�Ze�edkd�d	d
��Z	e�
ejdkd�d
d��Z
dd�Zdd�Zdd�Zee�
ed�dd���Ze�e�d�dd��Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Ze�ejd'�d(d)��Zed*d+��Zed,d-��Z d.d/�Z!d0d1�Z"d2d3�Z#e�
e$j%d4kd5�e�
ed6�d7d8���Z&e�e$j%d4kd9�e�
e'e$d:�d;�d<d=���Z(d>d?�Z)d@dA�Z*dBdC�Z+dDdE�Z,dFdG�Z-dHdI�Z.e�e/dJ�dKdL��Z0dMS)N�ContextTestsc
Cs�tD]8}t|�rt���t�|�}W5QRX|�|j|�qt���t��}W5QRX|�|jtj�|�	t
tjd�|�	t
tjd�dS)Nr��*)�	PROTOCOLSrRrr(rrXr�rQrLr�r})r�rQrErrr�test_constructorns

zContextTests.test_constructorcCs&tD]}t�|�}|�|j|�qdSr)r�rrXr�rQr�rrr�
test_protocolzs
zContextTests.test_protocolc	CsHt�tj�}|�d�|�d�|�tjd��|�d�W5QRXdS)N�ALL�DEFAULT�No cipher can be selected�^$:,;?*'dorothyx)rrXrNrCr�r��r�rErrr�test_cipherss


zContextTests.test_ciphersrz+Test applies only to Python default cipherscCsft�tj�}|��}|D]H}|d}|�d|�|�d|�|�d|�|�d|�|�d|�qdS)NrZPSKZSRPZMD5ZRC4Z3DES)rrXrN�get_ciphersZassertNotIn)r�rEr�Zsuiterrrr�test_python_ciphers�sz ContextTests.test_python_ciphers)rrr�rrzOpenSSL too oldcCsHt�tj�}|�d�tdd�|��D��}|�d|�|�d|�dS)NZAESGCMcss|]}|dVqdS)rNr)�.0rrrr�	<genexpr>�sz0ContextTests.test_get_ciphers.<locals>.<genexpr>zAES256-GCM-SHA384zAES128-GCM-SHA256)rrXrNrCr�r�r�)r�rE�namesrrr�test_get_ciphers�s

zContextTests.test_get_ciphersc	Cs�t�tj�}tjtjBtjB}|ttBtBt	Bt
BtBO}|�||j
�|j
tjO_
|�|tjB|j
�t�r�|j
tj@|_
|�||j
�d|_
|�d|j
tj@�n|�t��d|_
W5QRXdSr)rrXrN�OP_ALLr�r�r5r8r6r7r9r:r��optionsr�rtr�r})r�rE�defaultrrr�test_options�s*����zContextTests.test_optionsc	Cs�t�tj�}|�|jtj�tj|_|�|jtj�tj|_|�|jtj�tj|_|�|jtj�|�t	��d|_W5QRX|�t
��d|_W5QRXt�tj�}|�|jtj�|�|j
�t�tj�}|�|jtj�|�|j
�dS�Nr�)rrXrLr�r�r�r�r�r�r�r}rM�assertFalser�rNrr�rrr�test_verify_mode_protocol�s$z&ContextTests.test_verify_mode_protocolc	Csvt�tj�}|�|j�tjrVd|_|�|j�d|_|�|j�d|_|�|j�n|�t��d|_W5QRXdS�NTF)	rrXrNr�hostname_checks_common_name�HAS_NEVER_CHECK_COMMON_NAMEr�r��AttributeErrorr�rrr� test_hostname_checks_common_name�sz-ContextTests.test_hostname_checks_common_namez
see bpo-34001c	Cs�t�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|_
W5QRXttj��r�t�tj�}|�	|j
|�|�
|jtjj�|�t��tjj|_
W5QRX|�t��tjj|_W5QRXdSr�)rrXrMrrYr
rWrZ�TLSv1_3r�rArTrr�rr�r}rRr)r�rEZ
minimum_rangeZ
maximum_rangerrr�test_min_max_version�s��
���

��

��
�
�
���z!ContextTests.test_min_max_version�!verify_flags need OpenSSL > 0.9.8c	Cs�t�tj�}ttdd�}|�|jtj|B�tj|_|�|jtj�tj|_|�|jtj�tj|_|�|jtj�tjtj	B|_|�|jtjtj	B�|�
t��d|_W5QRXdS)N�VERIFY_X509_TRUSTED_FIRSTr)rrXrMrKr��verify_flags�VERIFY_DEFAULT�VERIFY_CRL_CHECK_LEAFZVERIFY_CRL_CHECK_CHAINZVERIFY_X509_STRICTr�r�)r�rE�tfrrr�test_verify_flags&s
�zContextTests.test_verify_flagsc	Cs�t�tj�}|jtdd�|jttd�|jt|jtd�|�t��}|�t�W5QRX|�	|j
jtj�|�
tjd��|�t�W5QRX|�
tjd��|�t�W5QRXt�tj�}|�tt�|jttd�|jttd�|�
tjd��|�t�W5QRX|�
tjd��|�t�W5QRX|�
tjd��|jttd�W5QRXt�tj�}|�
tjd��|�tt�W5QRX|jttd�|jtt��d�|jttt���d�|�ttt�|�ttt���|�tttt����|�
td��|jtdd�W5QRX|�tj��|jtdd�W5QRX|�
td	��|jtd
dd�W5QRXdd
�}dd�}dd�}dd�}dd�}dd�}dd�}	Gdd�d�}
|jt|d�|jt|d�|jt|d�|jt|
�d�|jt|
�jd�|�tj��|jt|d�W5QRX|�
td	��|jt|d�W5QRX|�
td��|jt|d�W5QRX|�
td��|jt|	d�W5QRX|jt|	d�dS)NrB�PEM librGzkey values mismatch)Zpasswordzshould be a stringT�badpasszcannot be longer�ai�cSstSr��KEY_PASSWORDrrrr�getpass_unicodeisz:ContextTests.test_load_cert_chain.<locals>.getpass_unicodecSst��Sr)rrnrrrr�
getpass_bytesksz8ContextTests.test_load_cert_chain.<locals>.getpass_bytescSstt���Sr)r�rrnrrrr�getpass_bytearraymsz<ContextTests.test_load_cert_chain.<locals>.getpass_bytearraycSsdS)Nr�rrrrr�getpass_badpassosz:ContextTests.test_load_cert_chain.<locals>.getpass_badpasscSsddS)Nr�irrrrr�getpass_hugeqsz7ContextTests.test_load_cert_chain.<locals>.getpass_hugecSsdS)Nrorrrrr�getpass_bad_typessz;ContextTests.test_load_cert_chain.<locals>.getpass_bad_typecSstd��dS)N�
getpass error)�	Exceptionrrrr�getpass_exceptionusz<ContextTests.test_load_cert_chain.<locals>.getpass_exceptionc@seZdZdd�Zdd�ZdS)z:ContextTests.test_load_cert_chain.<locals>.GetPassCallablecSstSrr�r�rrr�__call__xszCContextTests.test_load_cert_chain.<locals>.GetPassCallable.__call__cSstSrr�r�rrr�getpasszszBContextTests.test_load_cert_chain.<locals>.GetPassCallable.getpassN)r�r�r�r
rrrrr�GetPassCallablewsrzmust return a stringr)rrXrMr�r�r�r�r/rJr�rKrLrMr�r��BADCERT�	EMPTYCERT�ONLYCERT�ONLYKEY�BYTES_ONLYCERT�
BYTES_ONLYKEYr�CERTFILE_PROTECTEDrrnr��ONLYKEY_PROTECTEDr}rr)r�rErNrrrrrrr	rrrr�test_load_cert_chain:s�
�
��z!ContextTests.test_load_cert_chainc	Cs�t�tj�}|�t�|jtdd�|�t�|jtdd�|�t|j�|�t|jddd�|�t��}|�t	�W5QRX|�
|jjtj
�|�tjd��|�t�W5QRX|�tt�|jttd�|�t|jdd�dS)N)r�rr��rT)rrXrMr�r��BYTES_CERTFILEr�r�r/rJr�rKrLrMr�r�r
r��BYTES_CAPATH�r�rErNrrr�test_load_verify_locations�s

z'ContextTests.test_load_verify_locationsc	CsJtt��}|��}W5QRXt�|�}tt��}|��}W5QRXt�|�}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�W5QRX|�tjd��|j
dd�W5QRXdS)N�x509_car��cadatarr�r��head�otherZagain�tail�z4no start line: cadata does not contain a certificate�brokenz6not enough data: cadata does not contain a certificatesbroken)r<rr=rr�CAFILE_NEURONIOrXrNr��cert_store_statsr�rr�r��objectr�r�)r�r?Z
cacert_pemZ
cacert_derZneuronio_pemZneuronio_derrEZcombinedrrr�test_load_verify_cadata�s^




���z$ContextTests.test_load_verify_cadatac	Cs�t�tj�}|�t�tjdkr*|�t�|�t	|j�|�t	|jd�|�t
��}|�t�W5QRX|�|j
jtj�|�tj��}|�t�W5QRXdS)N�nt)rrXrM�load_dh_params�DHFILErr�BYTES_DHFILEr�r�r>rJr�rKrLrMr�r�rrrr�test_load_dh_params�s


z ContextTests.test_load_dh_paramscCs@tD]6}t�|�}|�|��dddddddddddd��qdS)Nr)ZnumberrHZconnect_goodZconnect_renegotiate�acceptZaccept_goodZaccept_renegotiate�hits�missesZtimeoutsZ
cache_full)r�rrXr��
session_statsr�rrr�test_session_stats�s

�zContextTests.test_session_statscCst�tj�}|��dSr)rrXrNZset_default_verify_pathsr�rrr�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
prime256v1r��foo)rrXrMr|r�r�r}r�rrr�test_set_ecdh_curves

z ContextTests.test_set_ecdh_curvecCsjt�tj�}|�t|j�|�t|jd�|�t|jd�|�t|j|�dd�}|�d�|�|�dS)Nr�r$cSsdSrr�r��
servernamerErrr�
dummycallbacksz5ContextTests.test_sni_callback.<locals>.dummycallback)rrXrMr�r��set_servername_callback)r�rEr7rrr�test_sni_callback
s
zContextTests.test_sni_callbackcCsJt�tj�}|fdd�}|�|�t�|�}~~t��|�|�d�dS)NcSsdSrr)r�r6rE�cyclerrrr7!sz>ContextTests.test_sni_callback_refcycle.<locals>.dummycallback)	rrXrMr8r&r'�gc�collectr�)r�rEr7r+rrr�test_sni_callback_refcycles

z'ContextTests.test_sni_callback_refcyclecCs�t�tj�}|�|��dddd��|�t�|�|��dddd��|�t�|�|��dddd��|�t�|�|��dddd��dS)Nr)r�crl�x509rr�)	rrXrNr�r$r�r�r�rr�rrr�test_cert_store_stats)s 

�


�


�


�z"ContextTests.test_cert_store_statscCs�t�tj�}|�|��g�|�t�|�|��g�|�t�|�|��dtd�td�ddddd�g�t	t��}|�
�}W5QRXt�|�}|�|�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 GMTZ00)z!https://www.cacert.org/revoke.crlr)r&r'r(r)r0r*r,T)rrXrNr��get_ca_certsr�r�rr�r<r=r)r�rEr?r�derrrr�test_get_ca_certs7s&


��

zContextTests.test_get_ca_certscCs�t�tj�}|��t�tj�}|�tjj�|��t�tj�}|�tjj�t�tj�}|�t|jd�|�t|jd�dS)Nr�)	rrXrN�load_default_certsr�r�r�r�r�r�rrr�test_load_default_certsSsz$ContextTests.test_load_default_certsr�znot-Windows specificz!LibreSSL doesn't support env varsc	CsTt�tj�}t���6}t|d<t|d<|��|�|�	�dddd��W5QRXdS)Nr�r�rr)r>r?r)
rrXrNrr�r�r�rDr�r$)r�rEr�rrr�test_load_default_certs_envbs
z(ContextTests.test_load_default_certs_envr�Zgettotalrefcountz3Debug build does not share environment between CRTsc	Csxt�tj�}|��|��}t�tj�}t���>}t|d<t|d<|��|dd7<|�	|��|�W5QRXdS)Nr�r�r?r)
rrXrNrDr$rr�r�r�r�)r�rE�statsr�rrr�#test_load_default_certs_env_windowsls
z0ContextTests.test_load_default_certs_env_windowscCs�|�|jtj@tj�tdkr0|�|jt@t�tdkrJ|�|jt@t�tdkrd|�|jt@t�tdkr~|�|jt@t�dSr)r�r�rr�r5r6r7r8r�rrr�_assert_context_options{s"����z$ContextTests._assert_context_optionsc	Cs�t��}|�|jtj�|�|jtj�|�|j�|�	|�t
t��}|��}W5QRXtjtt
|d�}|�|jtj�|�|jtj�|�	|�t�tjj�}|�|jtj�|�|jtj�|�	|�dS)N)r�rr)r�create_default_contextr�rQrLr�r�rr�rIr<r�r=r�r�r�r�)r�rEr?rrrr�test_create_default_context�s"

�
z(ContextTests.test_create_default_contextc	Cst��}|�|jtj�|�|jtj�|�|j�|�	|�t
tj�r�t�
��t�tj�}W5QRX|�|jtj�|�|jtj�|�	|�tjtjtjdd�}|�|jtj�|�|jtj�|�|j�|�	|�tjtjjd�}|�|jtj�|�|jtj�|�	|�dS)NT)r�r�)Zpurpose)r�_create_stdlib_contextr�rQrLr�r�r�r�rIrRrrr(r�rr�r�r�rrr�test__create_stdlib_context�s.



�
z(ContextTests.test__create_stdlib_contextc	Csdt�tj�}|�|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|_W5QRXd|_|�|j�tj|_|�|jtj�dSr�)
rrXrLr�r�r�r�r�rr�r�r�r}r�rrr�test_check_hostname�s@z ContextTests.test_check_hostnamecCsTt�tj�}|�|j�|�|jtj�t�tj�}|�	|j�|�|jtj
�dSr)rrXrNrr�r�r�r�rMr�r�r�rrr�test_context_client_server�sz'ContextTests.test_context_client_serverc	Cs�Gdd�dtj�}Gdd�dtj�}t�tj�}||_||_|jt��dd��}|�	||�W5QRX|�
t��t���}|�	||�dS)Nc@seZdZdS)z;ContextTests.test_context_custom_class.<locals>.MySSLSocketN�r�r�r�rrrr�MySSLSocket�srQc@seZdZdS)z;ContextTests.test_context_custom_class.<locals>.MySSLObjectNrPrrrr�MySSLObject�srRTrC)rr��	SSLObjectrXrMZsslsocket_classZsslobject_classr�r�r�wrap_bio�	MemoryBIO)r�rQrRrEr�r�rrr�test_context_custom_class�sz&ContextTests.test_context_custom_classzTest requires OpenSSL 1.1.1c	Cs�t�tj�}|�|jd�d|_|�|jd�d|_|�|jd�|�t��d|_W5QRX|�t��d|_W5QRXt�tj�}|�|jd�|�t��d|_W5QRXdS)Nr�rrr�)	rrXrMr�Znum_ticketsr�r}r�rNr�rrr�test_num_tickestszContextTests.test_num_tickestN)1r�r�r�r�r�r�r[r�r	r��skipIfrrwr�r�r�r��requires_minimum_version�IS_LIBRESSLr�ryr�rrr&r+r0r1r{r4�	needs_snir9r=r@rCrErhr�rFrBrHrIrKrMrNrOrV�IS_OPENSSL_1_1_1rWrrrrr�ls`
�


N�
S?

	



+
r�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�
SSLErrorTestscCsXt�dd�}|�t|�d�|�|jd�t�dd�}|�t|�d�|�|jd�dS)Nrr�)rr�r�rHrLZSSLZeroReturnError)r��errr�test_strszSSLErrorTests.test_strc	Csnt�tj�}|�tj��}|�t�W5QRX|�|jj	d�|�|jj
d�t|j�}|�|�
d�|�dS)NZPEMZ
NO_START_LINEz"[PEM: NO_START_LINE] no start line)rrXrNr�r�r(r�r�rK�library�reasonrHrrI)r�rErNr�rrr�test_lib_reasons
zSSLErrorTests.test_lib_reasoncCs�t�tj�}d|_tj|_t�d���}t�|�	��}|�
d�|j|ddd��T}|�tj
��}|��W5QRXt|j�}|�|�d�|�|�|jjtj�W5QRXW5QRXdS)NFrvrwz%The operation did not complete (read))rrXrNr�r�r�r�ry�create_connectionrz�setblockingr�r��SSLWantReadError�do_handshakerHrKrrIr�rL�SSL_ERROR_WANT_READ)r�rEr�r|rNrrr�
test_subclass)s

zSSLErrorTests.test_subclassc	Cs�t��}|�t��|jt��t��dd�W5QRX|�t��|jt��t��dd�W5QRX|�t��|jt��t��dd�W5QRXdS)Nr$rsz.example.orgzexample.orgevil.com)rrJr�r}rTrUr�r�rrr�test_bad_server_hostname;s���z&SSLErrorTests.test_bad_server_hostnameN)r�r�r�r_rbrhrirrrrr]s

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)
Nr3r!�barsfoobar�bazr�sbar�z)rrUrlr�r=�r��biorrr�test_read_writeJs



zMemoryBIOTests.test_read_writecCs�t��}|�|j�|�|��d�|�|j�|�d�|�|j�|��|�|j�|�|�d�d�|�|j�|�|�d�d�|�|j�|�|��d�|�|j�dS)Nr!r3r�sfor�o)	rrUr��eofr�r=rl�	write_eofrrnrrr�test_eofXs
zMemoryBIOTests.test_eofcCs�t��}|�|jd�|�d�|�|jd�td�D]$}|�d�|�|jd|d�q6td�D] }|�d�|�|j|d�qd|��|�|jd�dS)Nrr3rrr-)rrUr��pendingrlr�r=)r�ror�rrr�test_pendinghs


zMemoryBIOTests.test_pendingcCsbt��}|�d�|�|��d�|�td��|�|��d�|�td��|�|��d�dS)Nr3rkrl)rrUrlr�r=r��
memoryviewrnrrr�test_buffer_typesvs
z MemoryBIOTests.test_buffer_typescCsLt��}|�t|jd�|�t|jd�|�t|jd�|�t|jd�dS)Nr�Tr)rrUr�r�rlrnrrr�test_error_typess
zMemoryBIOTests.test_error_typesN)r�r�r�rprtrvrxryrrrrrjHs
	rjc@seZdZdd�Zdd�ZdS)�SSLObjectTestsc	Cs0t��}|�td��t�||�W5QRXdSr�)rrUr�r�rSrnrrrr��sz SSLObjectTests.test_private_initc	Cs*t�\}}}t��}t��}t��}t��}|j|||d�}|j||dd�}	td�D]t}
z|��Wntjk
rzYnX|jr�|�|�	��z|	��Wntjk
r�YnX|jrT|�|�	��qT|��|	��|�
tj��|��W5QRX|�|�	��|	��|�|�	��|��dS)NrsTrCr�)r�rrUrTr�rfrerurlr=r��unwrap)r�Z
client_ctxZ
server_ctxr�Zc_inZc_outZs_inZs_out�clientr�r�rrr�test_unwrap�s8zSSLObjectTests.test_unwrapN)r�r�r�r�r}rrrrrz�srzc@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Ze
�ejdkd�dd��Zdd�Zdd�Zdd�Zdd�Zd d!�Zed"d#��Zd$d%�Zd&d'�Zd(d)�Zd*S)+�SimpleBackgroundTestsz?Tests that connect to a simple server running in the backgroundcCs2tt�}t|jf|_|��|�|jddd�dSr)�ThreadedEchoServerr�rIr��server_addr�	__enter__r��__exit__)r�r�rrr�setUp�szSimpleBackgroundTests.setUpc	Cs�tt�tj�tjd��.}|�|j�|�i|���|�	|j
�W5QRXtt�tj�tjtd��,}|�|j�|�
|���|�	|j
�W5QRXdS)Nr��r�r�)r�r�r%rr�rHr�r��getpeercertr�rDr�r�rr�rrr�test_connect�s��z"SimpleBackgroundTests.test_connectcCs<tt�tj�tjd�}|�|j�|�tjd|j	|j
�dS)Nr��certificate verify failed)r�r�r%rr�r�r�r�r�rHr�r�rrr�test_connect_fail�s�
�z'SimpleBackgroundTests.test_connect_failcCsJtt�tj�tjtd�}|�|j�|�d|�	|j
��|�|���dS)Nr�r)
r�r�r%rr�r�r�r�r�r�r�rr�r�rrr�test_connect_ex�s�z%SimpleBackgroundTests.test_connect_exc	Cs�tt�tj�tjtdd�}|�|j�|�d�|�	|j
�}|�|dtj
tjf�t�g|ggd�z|��Wq�Wqdtjk
r�t�|gggd�Yqdtjk
r�t�g|ggd�YqdXqd|�|���dS)NF)r�r�rxrr=)r�r�r%rr�r�r�r�rdr�r�r�rLZEINPROGRESSr��selectrfre�SSLWantWriteErrorrr��r�r�r�rrr�test_non_blocking_connect_ex�s$�
z2SimpleBackgroundTests.test_non_blocking_connect_exc	Cs�t�tj�}|�t�tj���"}|�|j�|�i|�	��W5QRX|jt�tj�dd��}|�|j�W5QRXtj
|_|�t
�|�t�tj���$}|�|j�|�	�}|�|�W5QRXdS)N�dummyrs)rrXrLr�r�r%rHr�r�r�r�r�r�r�r�r�rEr�rYrrr�test_connect_with_context�s�
z/SimpleBackgroundTests.test_connect_with_contextcCsLt�tj�}tj|_|�t�tj��}|�|j	�|�
tjd|j|j
�dS)Nr�)rrXrLr�r�r�r�r%r�r�r�r�rHr�)r�rEr�rrr�test_connect_with_context_fails
�z4SimpleBackgroundTests.test_connect_with_context_failc	Cs�t�tj�}tj|_|jtd�|�t�tj	���$}|�
|j�|��}|�
|�W5QRXt�tj�}tj|_|jtd�|�t�tj	���$}|�
|j�|��}|�
|�W5QRXdS)Nr)rrXrLr�r�r�r�r�r�r%rHr�r�rrr�rrr�test_connect_capathsz)SimpleBackgroundTests.test_connect_capathc	Cs�tt��}|��}W5QRXt�|�}t�tj�}tj|_|j	|d�|�
t�tj���$}|�
|j�|��}|�|�W5QRXt�tj�}tj|_|j	|d�|�
t�tj���$}|�
|j�|��}|�|�W5QRXdS)Nr)r<r�r=rrrXrLr�r�r�r�r�r%rHr�r�r)r�r?rrBrEr�rYrrr�test_connect_cadata0s"

z)SimpleBackgroundTests.test_connect_cadatar'z*Can't use a socket as a file under Windowsc	Cs�tt�tj��}|�|j�|��}|��}|��t�	|d�|��t
��|�t
��}t�	|d�W5QRX|�|jjtj�dSr)r�r�r%rHr��fileno�makefiler�rr=r;r<r�r/r�rKrL�EBADF)r�r*�fdr?r^rrr�test_makefile_closeEsz)SimpleBackgroundTests.test_makefile_closecCs�t�tj�}|�|j�|�d�t|tjdd�}|�|j	�d}z|d7}|�
�Wq�WqBtjk
r�t�|ggg�YqBtj
k
r�t�g|gg�YqBXqBtjr�tj�d|�dS)NF�r�rxrrz9
Needed %d calls to do_handshake() to establish session.
)r�r%rHr�rdr�rr�r�r�rfrer�r�rrjrhrkrl)r�r��countrrr�test_non_blocking_handshakeXs&
�z1SimpleBackgroundTests.test_non_blocking_handshakecCst|f|j�dti�dS)NrY)�_test_get_server_certificater�r�r�rrr�test_get_server_certificatemsz1SimpleBackgroundTests.test_get_server_certificatecCst|f|j��dSr)�!_test_get_server_certificate_failr�r�rrr� test_get_server_certificate_failpsz6SimpleBackgroundTests.test_get_server_certificate_failc
Cs�tt�tj�tjdd��}|�|j�W5QRXtt�tj�tjdd��}|�|j�W5QRX|�tjd��:t�tj��"}t|tjdd�}|�|j�W5QRXW5QRXdS)Nr�)r�r�r�r�r�)	r�r�r%rr�rHr�r�r�)r�r�r�rrrr�us&���z"SimpleBackgroundTests.test_ciphersc	Cs�t�tj�}|jtd�|�|��g�|jt�tj	�dd��$}|�
|j�|��}|�
|�W5QRX|�t|���d�dS)Nrr#rsr)rrXrNr�r�r�rAr�r�r%rHr�r�rrPr�rrr�test_get_ca_certs_capath�s�z.SimpleBackgroundTests.test_get_ca_certs_capathc	Cs�t�tj�}|jtd�t�tj�}|jtd�t�tj�}|j|dd��T}|�|j	�|�
|j|�|�
|jj|�||_|�
|j|�|�
|jj|�W5QRXdS)Nrr#rs)
rrXrNr�r�r�r%r�rHr�r�r��_sslobj)r�Zctx1Zctx2r�r*rrr�test_context_setget�sz)SimpleBackgroundTests.test_context_setgetc
Os�|�dd�}t��|}d}	t��|kr2|�d�d}
|	d7}	z||�}Wn>tjk
r�}z|jtjtjfkrr�|j}
W5d}~XYnX|�	�}
|�
|
�|
dkr�q�q|
tjkr|�d�}
|
r�|�|
�q|�
�qtjr�tj�d|	|jf�|S)Nr@�
rri�z"Needed %d calls to complete %s().
)�getr��	monotonicr�rr�rLrgZSSL_ERROR_WANT_WRITEr=�sendallr0rlrsrrjrhrkr�)r�r��incoming�outgoingr^r\r�r@�deadliner�rL�retr^�bufrrr�ssl_io_loop�s:
�



�z!SimpleBackgroundTests.ssl_io_loopcCs�t�tj�}|�|j�|�|j�t��}t��}t�tj	�}|�
|j�|�|j
tj�|�t�|�||dt�}|�|jj|�|�|���|�|���|�|���|�t|j�dtjkr�|�|�d��|� ||||j!�|�
|���|�|���|�|���|�
|���dtjk�r>|�
|�d��z|� ||||j"�Wntj#k
�rlYnX|�tj$|j%d�dS)NFr~r3)&r�r%r�r�rHr�rrUrXrNrr�r�r�r�r�r�rTr�r�r��ownerr��cipherr,�assertIsNotNone�shared_ciphersr�r}r�r�r{r�rfr{ZSSLSyscallErrorr�rl)r�r�r�r�rE�sslobjrrr�test_bio_handshake�s>

�
z(SimpleBackgroundTests.test_bio_handshakecCs�t�tj�}|�|j�|�|j�t��}t��}t�tj	�}tj
|_|�||d�}|�
||||j�d}|�
||||j|�|�
||||jd�}|�|d�|�
||||j�dS)NF�FOO
�sfoo
)r�r%r�r�rHr�rrUrXrLr�r�rTr�rfrlr=r�r{)r�r�r�r�rEr�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[rXrrr�r�r�r�r�r�r[r�r�r�r�rrrrr~�s,
	

%"r~c@s*eZdZdd�Ze�ejd�dd��ZdS)�NetworkedTestsc	Cs�t�t��~tt�tj�tjdd�}|�|j	�|�
d�|�tdf�}|dkr\|�d�n|t
jkrp|�d�|�|t
jt
jf�W5QRXdS)NFr�gH�����z>�rz!REMOTE_HOST responded too quicklyzNetwork unreachable.)r�transient_internet�REMOTE_HOSTr�r�r%rr�r�r�r>r�r�rLZENETUNREACHr��EAGAINr�r�rrr�test_timeout_connect_ex�s�


z&NetworkedTests.test_timeout_connect_exz
Needs IPv6c	Cs2t�d��t|dd�t|dd�W5QRXdS)Nzipv6.google.comr�)rr�r�r�r�rrr� test_get_server_certificate_ipv6		sz/NetworkedTests.test_get_server_certificate_ipv6N)	r�r�r�r�r[r�rrpr�rrrrr��sr�cCslt�||f�}|s$|�d||f�tj||f|d�}|sL|�d||f�tjrhtj�d|||f�dS)NzNo server certificate on %s:%s!�r�z&
Verified certificate for %s:%s is
%s
)r�get_server_certificater�rrjrhrkrl)�testrlr�rYrrrrr�	sr�c
Csjztj||ftd�}Wn:tjk
rP}ztjr@tj�d|�W5d}~XYnX|�	d|||f�dS)Nr�z%s
z$Got server certificate %s for %s:%s!)
rr�r�r�rrjrhrkrlr�)r�rlr�r�xrrrr�	s"r�)�make_https_serverc@sReZdZGdd�dej�Zddd�Zdd	�Zd
d�Zddd
�Z	dd�Z
dd�ZdS)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)NFrT)
r��runningr��addrrd�sslconn�	threading�Thread�__init__�daemon)r�r�Zconnsockr�rrrr�0	sz-ThreadedEchoServer.ConnectionHandler.__init__c
Cs4zD|jjj|jdd�|_|jj�|j���|jj�|j�	��W�n�t
ttfk
r�}zH|jj
�t|��|jjr�tdt|j�d�d|_|��WY�dSd}~XY�n~tjtfk
�rB}zl|jj
�t|��|jjr�tdt|j�d�|jtjk�r,tjdk�r,d|_|j��|��WY�dSd}~XYn�X|jj�|j���|jjjtjk�r�|j� �}t!j"�r�|jj�r�tj#�$dt%�&|�d�|j� d�}t!j"�r�|jj�r�tj#�$d	tt'|��d
�|j�(�}t!j"�r,|jj�r,tj#�$dt|�d�tj#�$dt|j���d�dSdS)
NTrCz'
 server:  bad connection attempt from z:
F�darwinz 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�ConnectionAbortedError�conn_errorsrH�chattyrnr�r�r�r�rr�r/rLZ
EPROTOTYPErhr��stopr�r�r�r�rrjrkrlr�r�rPr�)r�r^rYZcert_binaryr�rrr�	wrap_conn:	sP�


��z.ThreadedEchoServer.ConnectionHandler.wrap_conncCs |jr|j��S|j�d�SdS)Nr�)r�r=r�r0r�rrrr=x	s
z)ThreadedEchoServer.ConnectionHandler.readcCs"|jr|j�|�S|j�|�SdSr)r�rlr�r4)r�r�rrrrl~	sz*ThreadedEchoServer.ConnectionHandler.writecCs |jr|j��n
|j��dSr)r�r�r�r�rrrr��	sz*ThreadedEchoServer.ConnectionHandler.closec
Cs�d|_|jjs|��sdS|j�r֐z�|��}|��}|sxd|_z|j��|_Wnt	k
rdYnXd|_|�
��nn|dkr�tjr�|jj
r�tj�d�|�
�WdS|jjr�|dkr�tjr�|jj
r�tj�d�|�d�|��s�WdS�n�|jj�rf|j�rf|dk�rftj�r(|jj
�r(tj�d	�|�d�|j��|_d|_tj�r�|jj
�r�tj�d
��n�|dk�r�tj�r�|jj
�r�tj�d�|j�d
�}|�t|��d�d��n0|dk�r8tj�r�|jj
�r�tj�d�z|j��Wn>tjk
�r*}z|�t|��d�d�W5d}~XYnX|�d�n�|dk�rj|j��dk	�r^|�d�n
|�d�n||dk�r�|j��}|�t|��d�d�nNtj�r�|jj
�r�|j�r�d�p�d}tj�d|||��|f�|�|���Wqttfk
�r6|jj�r$tj�r$tj�d�|j��|�
�d|_Yqtjk
�r�}z>d|jk�r�|jj�rztj�rztj�|jd�t�d��W5d}~XYqt	k
�r�|jj�r�t d�|�
�d|_|j�!�YqXqdS)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
�GETCERTZ	encryptedZunencryptedz/ server: read %r (%s), sending back %r (%s)...
z Connection reset by peer: {}
Z!PEER_DID_NOT_RETURN_A_CERTIFICATEr�!tlsv13 alert certificate requiredzTest server failure:
)"r�r��starttls_serverr�r=�stripr�r{r�r/r�rrj�connectionchattyrhrkrlr{r�rn�verify_client_post_handshakerr�r�r�r�r�r��formatr�rar\rnr�)r��msg�strippedr�r^rYZctype�errrrr�run�	s��

�


*


����

z(ThreadedEchoServer.ConnectionHandler.runN)
r�r�r�r�r�r�r=rlr�r�rrrr�ConnectionHandler*	s
>r�NTFcCs�|r||_n�t�|dk	r|ntj�|_|dk	r2|ntj|j_|rL|j�|�|r\|j�|�|rl|j�|�|	r||j�	|	�|
r�|j�
|
�||_||_||_
t��|_t�|j�|_d|_d|_g|_g|_g|_g|_tj�|�d|_dS�NFT)r�rrXrMr�r�r�r��set_npn_protocols�set_alpn_protocolsrCr�r�r�r�r�rr�r��flag�activer�r�r�r�r�r�r�r�)r�Zcertificater��certreqs�cacertsr�r�r�Z
npn_protocolsZalpn_protocolsr�r�rrrr��	sB���
zThreadedEchoServer.__init__cCs|�t���|j��|Sr��startr��Eventr��waitr�rrrr�
s
zThreadedEchoServer.__enter__cGs|��|��dSr)r�r�r�r\rrrr�
szThreadedEchoServer.__exit__cCs||_tj�|�dSr�r�r�r�r��r�r�rrrr� 
szThreadedEchoServer.startc
Cs|j�d�|j��d|_|jr,|j��|jr�zT|j��\}}tjrf|j	rft
j�dt
|�d�|�|||�}|��|��Wq,tjk
r�Yq,tk
r�|��Yq,tk
r�}z(tjr�|j	r�t
j�dt
|�d�W5d}~XYq,Xq,|j��dS)Ng�������?Tz server:  new connection from r�z connection handling failed: )r�r>�listenr�r�r�r,rrjr�rhrkrlr�r�r�rr�r@�KeyboardInterruptr�r�r�)r�ZnewconnZconnaddr�handlerr^rrrr�$
s6

���zThreadedEchoServer.runcCs
d|_dSr�)r�r�rrrr�?
szThreadedEchoServer.stop)NNNNTFFNNNN)N)r�r�r�r�r�r�r�r�r�r�r�r�rrrrr(	s$I�
%
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)rDr�rx)r�r��asyncore�dispatcher_with_sendr��_ssl_accepting�_do_ssl_handshake)r��connr�rrrr�J
s�z8AsyncoreEchoServer.EchoServer.ConnectionHandler.__init__cCs*t|jtj�r&|j��dkr&|��qdS)NrT)rGr�rr�ruZhandle_read_eventr�rrr�readableR
s
z8AsyncoreEchoServer.EchoServer.ConnectionHandler.readablec
Cs�z|j��Wn�tjtjfk
r,YdStjk
rH|��YStjk
r^�YnHtk
r�}z$|j	dt
jkr�|��WY�SW5d}~XYnXd|_dS)NrF)
r�rfrrer�ZSSLEOFError�handle_closer�r/r\rLZECONNABORTEDr�r�r�rrrrX
s"zAAsyncoreEchoServer.EchoServer.ConnectionHandler._do_ssl_handshakecCsT|jr|��n@|�d�}tjr4tj�dt|��|sB|�	�n|�
|���dS)Nr�z server:  read %s from client
)rrr0rrjrhrkrlr�r�r4r�)r�r�rrr�handle_readg
s


z;AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_readcCs$|��tjr tj�d|j�dS)Nz server:  closed connection %s
)r�rrjrhrkrlr�r�rrrrs
sz<AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_closecCs�dSrrr�rrrrnx
sz<AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_errorN)	r�r�r�r�rrrrrnrrrrr�H
sr�cCs@||_t�tjtj�}t�|d�|_tj�	||�|�
d�dS)Nr$r�)r�r�r%�SOCK_STREAMrr�r�r��
dispatcherr�r�rQrrrr�{
s
z&AsyncoreEchoServer.EchoServer.__init__cCs(tjrtj�d|�|�||j�dS)Nz$ server:  new connection from %s:%s
)rrjrhrkrlr�r�)r�Zsock_objr�rrr�handle_accepted�
sz-AsyncoreEchoServer.EchoServer.handle_acceptedcCs�dSrrr�rrrrn�
sz*AsyncoreEchoServer.EchoServer.handle_errorN)	r�r�r�r�r�r�r�r	rnrrrr�
EchoServerF
s3r
cCs8d|_d|_|�|�|_|jj|_tj�|�d|_dSr�)	r�r�r
r�r�r�r�r�r�)r�r�rrrr��
s
zAsyncoreEchoServer.__init__cCsd|jj|jfS)Nz<%s %s>)�	__class__r�r�r�rrr�__str__�
szAsyncoreEchoServer.__str__cCs|�t���|j��|Srr�r�rrrr��
s
zAsyncoreEchoServer.__enter__cGsVtjrtj�d�|��tjr,tj�d�|��tjrFtj�d�tjdd�dS)Nz cleanup: stopping server.
z! cleanup: joining server thread.
z cleanup: successfully joined.
T)Z
ignore_all)	rrjrhrkrlr�rr�Z	close_allr�rrrr��
szAsyncoreEchoServer.__exit__NcCs||_tj�|�dSrr�r�rrrr��
szAsyncoreEchoServer.startcCs>d|_|jr|j��|jr:zt�d�WqYqXqdS)NTr)r�r�r�r�Zloopr�rrrr��
s
zAsyncoreEchoServer.runcCsd|_|j��dSr�)r�r�r�r�rrrr��
szAsyncoreEchoServer.stop)N)
r�r�r�r�rr
r�rr�r�r�r�r�rrrrr�B
sD

r�r�TFc
Csri}t||dd�}|��P|jt��||d���}	|	�t|jf�|t|�t|�fD]�}
|rrtj	rrt
j�d|�|	�|
�|	�
�}|r�tj	r�t
j�d|�||��krTtd|dd�t|�|dd���t|�f��qT|	�d	�|r�tj	r�t
j�d
�|�|	��|	��|	��|	��|	��|	��|	j|	jd��|	��W5QRX|j|d<|j|d
<|j|d<W5QRX|S)zW
    Launch a server, connect a client to it and try various reads
    and writes.
    F�r�r�r�)rt�session� client:  sending %r...
� client:  read %r
�4bad data <<%r>> (%d) received; expected <<%r>> (%d)
N��over
� client:  closing connection.
)�compressionr��peercert�client_alpn_protocol�client_npn_protocolr,�session_reusedr�server_alpn_protocols�server_npn_protocols�server_shared_ciphers)rr�r�rHrIr�r�rwrrjrhrkrlr=r�rJrPr�rr�r�r�r�r,rrr�r�r�r�)r�r��indatar�r��sni_namerrGr�r��arg�outdatarrr�server_params_test�
sf�
��
���
�


r!c
Cs�|dkrtj}tjdtjdtjdi|}tjr\|r6dp8d}tj�|t�	|�t�	|�|f�t�
|�}|j|O_t�
|�}	|	j|O_t�
|d�}
|
dk	r�t|	d�r�|tjkr�|	j|
kr�|
|	_|jtjkr�|�d�t|	|�||	fD]}||_|�t�|�t�q�zt||	d	d	d
�}WnXtjk
�r@|�r<�Yn�tk
�rx}
z|�sf|
jtjk�rh�W5d}
~
XYnRX|�s�tdt�	|�t�	|�f��n,|dk	�r�||d
k�r�td||d
f��dS)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
rAr�F�r�r�z5Client protocol %s succeeded with server protocol %s!Tr,z%version mismatch: expected %r, got %r)rr�r�r�rrjrhrkrlZget_protocol_namerXr��PROTOCOL_TO_TLS_VERSIONr�rBrLrArQrCrFr�r�r�r�r�r!r�r/rL�
ECONNRESETrJ)Zserver_protocolZclient_protocol�expect_successZ	certsreqs�server_options�client_optionsZcerttypeZ	formatstrr�r�Zmin_versionrErGr^rrr�try_protocol_combo�
s�	����

���


�
���

�
�r(c@s�eZdZdd�Zdd�Ze�e�d�dd��Zdd	�Z	e�e
jd
�dd��Zd
d�Z
dd�Zdd�Zdd�Zed�dd��Zdd�Zdd�Zed�dd��Zdd �Zed!�d"d#��Zed$�d%d&��Zed'�d(d)��Zed*�d+d,��Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Z d9d:�Z!d;d<�Z"d=d>�Z#d?d@�Z$dAdB�Z%dCdD�Z&ed�dEdF��Z'e(ed*�dGdH���Z)e(ed'�dIdJ���Z*e(ed*�ed$�dKdL����Z+e(ed!�dMdN���Z,e�e
j-dO�dPdQ��Z.e�dRe
j/kdS�dTdU��Z0dVdW�Z1e�e2e
dX�dY�dZd[��Z3d\d]�Z4e�e5d^�e�6e7d_�d`da���Z8dbdc�Z9e�e
j:dd�dedf��Z;e�e
j:dg�dhdi��Z<djdk�Z=e�e
j>dl�dmdn��Z?dodp�Z@dqdr�ZAeBdsdt��ZCeBdudv��ZDeBdwdx��ZEeBdydz��ZFd{d|�ZGd}d~�ZHdd��ZId�d��ZJd�d��ZKd�S)��
ThreadedTestsc
Cs�tjrtj�d�tD]j}|tjtjhkr,qt	|�s6q|j
tj|d��2t�|�}|�
t�t|�t||ddd�W5QRXqt�\}}}|j
tjtjd��t||dd|d�W5QRXd|_|j
tjtjd��B|�tj��}t||dd|d�W5QRX|�dt|j��W5QRX|j
tjtjd��@|�tj��}t||ddd	�W5QRX|�dt|j��W5QRX|j
tjtjd��@|�tj��}t||ddd	�W5QRX|�dt|j��W5QRXd
S)z2Basic test of an SSL client connecting to a serverr�)rQTr")r|r�)r�r�r�r�rFz%called a function you should not call)r�r�r�r�N)rrjrhrkrlr�rrNrMrRZsubTest�_PROTOCOL_NAMESrXr�r�rFr!r�r�r�r�r�rHrK)r�rQr�r�r�r�r^rrr�	test_echo5sn

��������zThreadedTests.test_echoc
Cs\tjrtj�d�t�\}}}t|dd�}|��"|jt��d|d���}|�	t
|jf�|�t
��|��W5QRX|��|��}|�|d�|��}tjr�tj�t�|�d�tj�dt|�d�d|kr�|�d	t�|��d
|dk�r|�d�|�d|�|�d
|�t�|d�}t�|d
�}	|�||	�W5QRXW5QRXdS)Nr�F�r�r�)rxrt�Can't get peer certificate.zConnection cipher is z.
r*z$No subject field in certificate: %s.r zkMissing or invalid 'organizationName' field in certificate subject; should be 'Python Software Foundation'.r(r')rrjrhrkrlr�rr�r�rHrIr�r�r}r�rfrr�r�r�rHr�r�rr�r)
r�r�r�r�r�r�rYr��beforeZafterrrr�test_getpeercertgsF
����zThreadedTests.test_getpeercertr�cCs|tjrtj�d�t�\}}}ttdd�}|�|j	tj
|B�t|dd�}|�H|jt
�
�|d��*}|�t|jf�|��}|�|d�W5QRXW5QRX|j	tjO_	t|dd�}|�N|jt
�
�|d��0}|�tjd��|�t|jf�W5QRXW5QRXW5QRX|�t�t|dd�}|�H|jt
�
�|d��*}|�t|jf�|��}|�|d�W5QRXW5QRXdS)	Nr�r�rTr,rsr-r�)rrjrhrkrlr�rKrr�r�r�rr�r�rHrIr�r�rr�r�r�r��CRLFILE)r�r�r�r�r�r�r�rYrrr�test_crl_check�sF
� 
��.

�zThreadedTests.test_crl_checkcCs6tjrtj�d�t�\}}}t|dd�}|�H|jt��|d��*}|�	t
|jf�|��}|�
|d�W5QRXW5QRXt|dd�}|�N|jt��dd��0}|�tjd��|�	t
|jf�W5QRXW5QRXW5QRXt|dd�}|�<t���(}|�td��|�|�W5QRXW5QRXW5QRXdS)	Nr�Tr,rsr-rqz:Hostname mismatch, certificate is not valid for 'invalid'.z'check_hostname requires server_hostname)rrjrhrkrlr�rr�r�rHrIr�r�rr�rr[r})r�r�r�r�r�r�rYrrrrN�s<
� 
��.
�z!ThreadedTests.test_check_hostnamez)test requires hostname_checks_common_namecCs�t�\}}}|jst�d|_t|dd�}|�4|jt��|d��}|�t|jf�W5QRXW5QRXtt	�\}}}d|_t|dd�}|�L|jt��|d��.}|�
tj��|�t|jf�W5QRXW5QRXW5QRXdS)NFTr,rs)
r�r�rJrr�r�rHrIr�r�r�r�SSLCertVerificationError�r�r�r�r�r�r�rrrr��s(

�$
�z.ThreadedTests.test_hostname_checks_common_namec
Cs�t�tj�}|�t�|�d�t}t�tj�}|�t	�t
|dd�}|�n|jt��|d��P}|�
t|jf�|��}|�|d�|��d�d�}|�|dd�d	�W5QRXW5QRXdS�
NzECDHE:ECDSA:!NULL:!aRSATr,rsr-r�-r�)ZECDHEZECDSA)rrXrNr�r�rC�SIGNED_CERTFILE_ECC_HOSTNAMErMr��SIGNED_CERTFILE_ECCrr�r�rHrIr�r�rr��split�r�r�r�r�r�r�rYr�rrr�
test_ecc_cert�s"



�zThreadedTests.test_ecc_certc
Cs�t�tj�}|�t�|jtjO_|�d�t}t�tj	�}|�
t�|�
t�t
|dd�}|�n|jt��|d��P}|�t|jf�|��}|�|d�|��d�d�}|�|dd�d	�W5QRXW5QRXdSr4)rrXrNr�r�r�r�rCr6rMr�r7r�rr�r�rHrIr�r�rr�r8r9rrr�test_dual_rsa_eccs&




�zThreadedTests.test_dual_rsa_eccc	CsNtjrtj�d�t�tj�}|�t	�t�tj
�}tj|_d|_
|�t�ddddddd	d
g}|D]�\}}t|dd�}|�d|jt��|d��F}|�|j|�|�t|jf�|��}|�|j|�|�|d
�W5QRXW5QRXqdt|dd�}|�L|jt��dd��.}|�tj��|�t|jf�W5QRXW5QRXW5QRXdS)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,rsr-zpython.example.org)rrjrhrkrlrrXrMr��IDNSANSFILErNr�r�r�r�r�rr�r�r�rtrHrIr�r�rr�r[)	r�r�r�Z
idn_hostnamesrtZexpected_hostnamer�r�rYrrr�test_check_hostname_idnsJ

�
�"
�z%ThreadedTests.test_check_hostname_idncCst�\}}}|�t�tj|_tjj|_t	|ddd�}|��|j
t��|d���}z|�t
|jf�Wn~tjk
r�}ztjr�tj�d|�W5d}~XYnPtk
r�}z(|jtjkr��tjr�tj�d|�W5d}~XYnX|�d�W5QRXW5QRXdS)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
rs�
SSLError is %r
N�
socket.error is %r
�'Use of invalid cert should have failed!)r�r�r�rr�r�rrWrTrr�r�rHrIr�r�rrjrhrkrlr/rLr$r��r�r�r�r�r�r�r^rrr�test_wrong_cert_tls12Us4

�
�� "z#ThreadedTests.test_wrong_cert_tls12r�cCs&t�\}}}|�t�tj|_tjj|_tjj|_t	|ddd�}|��|j
t��|d���}|�t
|jf�z|�d�|�d�Wn�tjk
r�}ztjr�tj�d|�W5d}~XYnRtk
�r}z(|jtjkr܂tjr�tj�d|�W5d}~XYnX|�d�W5QRXW5QRXdS)	NTr
rs�datar�rArBrC)r�r�r�rr�r�rr�rArr�r�rHrIr�rlr=r�rrjrhrkr/rLr$r�rDrrr�test_wrong_cert_tls13zs:


�
��
 "z#ThreadedTests.test_wrong_cert_tls13cstt���t���t���t��t�����fdd�}����fdd�}tj|d�}|��z
|�W5|��XdS)ztA brutal shutdown of an SSL server should raise an OSError
        in the client when attempting handshake.
        cs8���������\}}|��������dSr)r�r�r,r�)Znewsockr�)�
listener_gone�listener_readyr�rr�listener�sz2ThreadedTests.test_rude_shutdown.<locals>.listenerc	sb���t���H}|�t�f����zt|�}Wntk
rHYnX��d�W5QRXdS)Nz2connecting to closed SSL socket should have failed)r�r�rHrIr�r/r�)r|�ssl_sock)rHrIr�r�rr�	connector�s
z3ThreadedTests.test_rude_shutdown.<locals>.connector��targetN)	r�r�r�rr�rIr�r�r)r�rJrLrr)rHrIr�r�r�r�test_rude_shutdown�s
z ThreadedTests.test_rude_shutdowncCs�tjrtj�d�t�tj�}|�t	�t�tj
�}t|dd�}|��|jt
�
�td���}z|�t|jf�Wnrtjk
r�}zRd}|�|tj�|�|jd�|�|j|�|�|t|��|�dt|��W5d}~XYnXW5QRXW5QRXdS)Nr�Tr,rsz&unable to get local issuer certificaterr�)rrjrhrkrlrrXrMr�r�rNrr�r�r�rHrIr�r�rr2r�Zverify_codeZverify_messager�r�)r�r�r�r�r�r^r�rrr�test_ssl_cert_verify_error�s(

�z(ThreadedTests.test_ssl_cert_verify_errorrScCs�tjrtj�d�ttjtjd�ttjtjdtj�ttjtjdtj	�ttjtj
d�td�rrttjtjd�ttjtj
d�t�r�ttjtj
dtjd�ttjtj
dtjd�ttjtj
dtjd�dS)z9Connecting to an SSLv2 server with various client optionsr�TFr�r'N)rrjrhrkrlr(r�PROTOCOL_SSLv2r�r�rLrO�PROTOCOL_SSLv3rrxr�r�r�r�rrr�test_protocol_sslv2�s&���z!ThreadedTests.test_protocol_sslv2c
Cs�tjrtj�d�td�rlzttjtj	d�Wn<t
k
rj}ztjrZtj�dt|��W5d}~XYnXtd�r�ttjtjd�ttjtjd�td�r�ttjtj
d�td�r�ttjtjdtj�ttjtjdtj�td�r�ttjtj
dtj�td��rttjtjdtj�ttjtjdtj�td��rHttjtj
dtj�td��rhttjtjdtjd	�ttjtjdtjtjBd	�td��r�ttjtj
dtjd	�dS)
z:Connecting to an SSLv23 server with various client optionsr�rSTz; SSL2 client to SSL23 server test unexpectedly failed:
 %s
NrFr
)r&)rrjrhrkrlrOr(rrLrRr/rHrSrr�r�r�r�r�)r�r�rrr�test_PROTOCOL_TLS�sL��


�
�
�zThreadedTests.test_PROTOCOL_TLSrcCs�tjrtj�d�ttjtjd�ttjtjdtj�ttjtjdtj	�t
d�rbttjtjd�ttjtjdtj
d�ttjtjd�t�r�ttjtjdtjd�dS)z9Connecting to an SSLv3 server with various client optionsr�rrSFrQN)rrjrhrkrlr(rrSr�r�rOrRrLr�rrxr�r�rrr�test_protocol_sslv3
s �
�z!ThreadedTests.test_protocol_sslv3r
cCs�tjrtj�d�ttjtjd�ttjtjdtj�ttjtjdtj	�t
d�rbttjtjd�t
d�rzttjtjd�ttjtj
dtjd�dS)z8Connecting to a TLSv1 server with various client optionsr�r
rSFrrQN)rrjrhrkrlr(rrr�r�rOrRrSrLr�r�rrr�test_protocol_tlsv1+
s�z!ThreadedTests.test_protocol_tlsv1rcCs�tjrtj�d�ttjtjd�td�r:ttjtj	d�td�rRttjtj
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.1rSFrrQN)rrjrhrkrlr(rrrOrRrSrLr��PROTOCOL_TLSv1_2r�rrr�test_protocol_tlsv1_1:
s�z#ThreadedTests.test_protocol_tlsv1_1rWcCs�tjrtj�d�ttjtjdtjtj	Btjtj	Bd�t
d�rPttjtjd�t
d�rhttjtjd�ttjtj
dtjd�ttj
tjd�ttj�r�ttjtjd�ttjtjd�ttj�r�ttjtjd�ttjtjd�dS)	zjConnecting to a TLSv1.2 server with various client options.
           Testing against older TLS versions.r��TLSv1.2)r&r'rSFrrQN)rrjrhrkrlr(rrYr�r�rOrRrSrLr�rRrrr�rrr�test_protocol_tlsv1_2L
s(

��

z#ThreadedTests.test_protocol_tlsv1_2c		Cs�d}ttdddd�}d}|��bt��}|�d�|�t|jf�tjrTt	j
�d�|D]�}tjrrt	j
�d|�|r�|�|�|��}n|�
|�|�d�}|����}|d	kr�|�d
�r�tjr�t	j
�d|�t|�}d}qX|dk�r|�d
��rtj�rt	j
�d
|�|��}d}qXtjrXt	j
�d|�qXtj�rHt	j
�d�|�rZ|�d�n
|�
d�|�rt|��n|��W5QRXdS)z6Switching from clear text to encrypted and back again.)smsg 1sMSG 2r�sMSG 3smsg 4r�smsg 5smsg 6T)r�r�r�Frr�rr�r�sokz/ client:  read %r from server, starting TLS...
r�z- client:  read %r from server, ending TLS...
z client:  read %r from server
rrN)rr�r�rdrHrIr�rrjrhrkrlr=r4r0r�r�rIr�r{r�)	r�Zmsgsr��wrappedr�rrr r�rrr�
test_starttlsd
sl�
�



�����

zThreadedTests.test_starttlsc	Cs�t|td�}tjrtj�d�ttd��}|�	�}W5QRXd}d|j
tj�
t�df}tjtd�}tjj||d�}zN|���d	�}|r�t|�d
kr�|�	t|��}tjr�tj�dt|�|f�W5|��X|�||�dS)
z8Using socketserver to create and manage SSL connections.rFr��rbr$zhttps://localhost:%d/%sr�r��r�zcontent-lengthrz/ client: read %d bytes from remote server '%s'
N)r�r�rrjrhrkrlr<r�r=r�rrr8rrJr��urllib�request�urlopenr��infor�rrPr�)r�r�r?rrZurlr�Zdlenrrr�test_socketserver�
s0�
��
zThreadedTests.test_socketserverc	Cstjrtj�d�d}tt�}|��tt���}|�	d|j
f�tjrVtj�d|�|�|�|��}tjr~tj�d|�||��kr�|�
d|dd�t|�|dd���t|�f�|�d	�tjr�tj�d
�|��tjr�tj�d�W5QRXdS)z'Check the example asyncore integration.r�r�rrrrNrrrz client:  connection closed.
)rrjrhrkrlr�r�r�r�rHr�r=r�r�rPr�)r�rr�r�r rrr�test_asyncore_server�
s<�
���
z"ThreadedTests.test_asyncore_servercs�tjrtj�d�tttjtj	tddd�}|���t
t��dtttjtjd����
t|jf��fdd�}�fdd	�}d
�jdgtfd�jddgtfd
�jdgdd�fg}d�jdgfd�jddgfd|dgfd|dgfg}d}|D]�\}}}	}
}||�d�}zx||f|
��}
d�|�}|j|
||�|d����}||��k�rv|�dj||dd�t|�|dd�t|�d��Wq�tk
�r�}z@|	�r�|�dj|d��t|��|��s�|�dj||d��W5d}~XYq�Xq�|D]�\}}}	}
||�d�}zV��|�||
�}||��k�rN|�d j||dd�t|�|dd�t|�d��Wnhtk
�r�}zH|	�r||�d!j|d��t|��|��s�|�dj||d�����W5d}~XYnX�q�d"}��|�tt|��}|���d#|�t|��|�||�t dk	�r8t j!t|�}|�"|�}��|�|����|�|�#t$�j%�|�#t$�j&d"g�|�#t$�j'd$�|�#t$�j(td$�g���d%�|�#t�jd#�|�#t�jd#���)�W5QRXdS)&z Test recv(), send() and friends.r�TF�r�r�r�r�r��rDr�r�r�r�cstd�}��|�}|d|�S�Nsd)r�r1)�br��r�rr�
_recv_into�
s
z0ThreadedTests.test_recv_send.<locals>._recv_intocs"td�}��|�\}}|d|�Srj)r�r3)rkr�r�rlrr�_recvfrom_into�
sz4ThreadedTests.test_recv_send.<locals>._recvfrom_intor4r5zsome.addressr�cSsdSrr)r�rrr�<lambda>�
r!z.ThreadedTests.test_recv_send.<locals>.<lambda>r0r2r1r3ZPREFIX_r^zsending with {}�r�zpWhile sending with <<{name:s}>> bad data <<{outdata:r}>> ({nout:d}) received; expected <<{indata:r}>> ({nin:d})
Nr)rr ZnoutrZninz>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.
rFr�r.r)*rrjrhrkrlrr�rr�rMr�r�rNrHrIr�r4rPr5r�r0r2rnr�r�r=r�r�r}rHrIr��ctypesZc_ubyteZfrom_buffer_copyr�r6r7r8r9r:r�)r�r�rmrnZsend_methodsZrecv_methodsZdata_prefixZ	meth_nameZ	send_methr%r\Zret_val_methrr�r�r r^Z	recv_methr��bufferZubyteZ	byteslikerrlr�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)Zsuppress_ragged_eofsrFrr!)rr�r�r�r�r�rcrIr�r�r�r4r�r0r=rdr1r�)r�r�r�rrr�test_recv_zero]s

zThreadedTests.test_recv_zeroc	s�tttjtjtddd�}|�xtt��dtttjtjd����t	|j
f���d�td����fdd�}|�
tjtjf|���d����W5QRXdS)NTFrhrii cs����qdSr)r4r�r�r�rr�fill_buffer�sz8ThreadedTests.test_nonblocking_send.<locals>.fill_buffer)rr�rr�rMr�r�rNrHrIr�rdr�r�r�rer�)r�r�rwrrvr�test_nonblocking_sendqs4��
��
z#ThreadedTests.test_nonblocking_sendcs�t�tj��d}t���}t���d����fdd�}tj|d�}|�����z�z:t�tj�}|�d�|�||f�|�
tjdt|�W5|�
�Xz:t�tj�}t|�}|�d�|�
tjd|j||f�W5|�
�XW5d�|�	���
�XdS)	NrFcsb������g}�sLt��gggd�\}}}�|kr|����d�q|D]}|��qPdS)Ng�������?r)r�r�r�r�r,r�)Zconnsr
�wr^r��Zfinishr��startedrr�serve�sz3ThreadedTests.test_handshake_timeout.<locals>.serverMTg�������?z	timed out)r�r%rr�r�r�r�r�r�rr�r>rHr�r@r�)r�rlr�r|rr|rrzr�test_handshake_timeout�s>



�


�z$ThreadedTests.test_handshake_timeoutcst�tj�}tj|_|�t�|�t�t	�	t	j
��d}t���}|j
�dd��|��j�t���d�d�����fdd�}tj|d�}|�����|�
t	�	��}|�||f�|�d�|��|��}|��|��������|��tj�|��|�dS)NrTrCcs0���������\������d��dS)Nr�)r�r�r,r4r0r�ZevtZpeerZremoter�rrr|�sz/ThreadedTests.test_server_accept.<locals>.serverMrF)rrXrLr�r�r�r�r�r�r�r%rr�r�rrDr�r�r�r�r�rHr4r0rzr�rrr�r�)r�r�rlr�r|rr|Zclient_addrrr~r�test_server_accept�s6



z ThreadedTests.test_server_acceptc
CsZt�tj�}|�t����6}|�t��}|��W5QRX|�|j	j
t
j�W5QRXdSr)rrXrLr�r�r�r/r�r�rKrL�ENOTCONN�r�r�r�rNrrr�test_getpeercert_enotconn�s
z'ThreadedTests.test_getpeercert_enotconnc
CsZt�tj�}|�t����6}|�t��}|��W5QRX|�|j	j
t
j�W5QRXdSr)rrXrLr�r�r�r/rfr�rKrLr�r�rrr�test_do_handshake_enotconn�s
z(ThreadedTests.test_do_handshake_enotconncCs�t�\}}}|jtjO_|�d�|�d�t|d��J}|jt��|d��,}|�t	��|�
t|jf�W5QRXW5QRXW5QRX|�
d|jd�dS)NZAES128�AES256rarszno shared cipherr)r�r�rr�rCrr�r�r�r/rHrIr�r�r�r3rrr�test_no_shared_ciphers�s


�.z$ThreadedTests.test_no_shared_ciphersc
Cs�t�tj�}d|_tj|_tttjdd���}|�	t
�
���~}|�|��d�|�|j
d�|�t|jf�tr�td�r�|�|��d�n,tjdkr�|�|��d�n|�|��d�W5QRX|�|j
d�|�|��d�W5QRXdS)	zt
        Basic tests for SSLSocket.version().
        More tests are done in the test_protocol_*() methods.
        F)r�r�Nr��TLSv1.3)rrr�r[)r
r[)rrXrNr�r�r�rr�rMr�r�r�r,r�rHrIr�r\rOr�rwr��r�r�r�r�rrr�test_version_basics&�
z ThreadedTests.test_version_basicc
Cs�t�tj�}|�t�|jtjtjBtjBO_t	|d��Z}|�
t����@}|�t
|jf�|�|��ddddh�|�|��d�W5QRXW5QRXdS)NrarZTLS_AES_256_GCM_SHA384ZTLS_CHACHA20_POLY1305_SHA256ZTLS_AES_128_GCM_SHA256r�)rrXrLr�r�r�r�r�r�rr�r�rHrIr�r�r�r�r,r�rrr�test_tls1_3s
��zThreadedTests.test_tls1_3c
Cs�t�\}}}tjj|_tjj|_tjj|_tjj|_t|d��D}|jt	�	�|d��&}|�
t|jf�|�
|��d�W5QRXW5QRXdS)Nrarsr[)r�rrr
rArWrTrr�r�rHrIr�r�r,r3rrr�test_min_max_version_tlsv1_2.s




�z*ThreadedTests.test_min_max_version_tlsv1_2c
Cs�t�\}}}tjj|_tjj|_tjj|_tjj|_t||�t	|d��D}|j
t��|d��&}|�t
|jf�|�|��d�W5QRXW5QRXdS)NrarsrX)r�rrr
rArWrTrrFrr�r�rHrIr�r�r,r3rrr�test_min_max_version_tlsv1_1?s





�z*ThreadedTests.test_min_max_version_tlsv1_1cCs�t�\}}}tjj|_tjj|_tjj|_tjj|_t||�t|d��^}|j	t
�
�|d��@}|�tj��}|�
t|jf�W5QRX|�dt|j��W5QRXW5QRXdS)NrarsZalert)r�rrrWrTrAr
rFrr�r�r�r�rHrIr�r�rHrKrDrrr�test_min_max_version_mismatchPs





�z+ThreadedTests.test_min_max_version_mismatchc
Cs�t�\}}}tjj|_tjj|_tjj|_t||�t|d��D}|jt	�	�|d��&}|�
t|jf�|�
|��d�W5QRXW5QRXdS)Nrarsr)r�rrrrArTrFrr�r�rHrIr�r�r,r3rrr�test_min_max_version_sslv3cs




�z(ThreadedTests.test_min_max_version_sslv3z"test requires ECDH-enabled OpenSSLc
Cs�t�tj�}|�t�|jtjO_tjdkr:|�d�t	|d��D}|�
t����*}|�t
|jf�|�d|��d�W5QRXW5QRXdS)N)rrrz
ECCdraft:ECDHraZECDHr)rrXrLr�r�r�r�rwrCrr�r�rHrIr�r�r�r�rrr�test_default_ecdh_curvers


z%ThreadedTests.test_default_ecdh_curver~rc	
Cs�tjrtj�d�t�\}}}t|ddd�}|��~|jt��|d���}|�	t
|jf�|�d�}tjrztj�d�
|��|�|�|��dkr�|�t|�d	�n|�t|�d
�|�d�|����}|�|t|��d��W5QRX|jt��|d���}|�	t
|jf�|�d�}tj�r0tj�d
�
|��|�||�|�|�|��dk�rf|�t|�d	�n|�t|�d
�|�d�|����}|�|t|��d��W5QRXW5QRXdS)z Test tls-unique channel binding.r�TFr
rsr~z! got channel binding data: {0!r}
r��0�sCB tls-unique
r�z(got another channel binding data: {0!r}
N)rrjrhrkrlr�rr�r�rHrIr�r{r�r�r,r�rPr=r�r�rnr�)	r�r�r�r�r�r�Zcb_dataZpeer_data_reprZnew_cb_datarrrr��sf��
�

��
��

�z-ThreadedTests.test_tls_unique_channel_bindingcCsTt�\}}}t||dd|d�}tjr:tj�d�|d��|�|ddddh�dS)NT�r�r�rz got compression: {!r}
rZZLIBZRLE)	r�r!rrjrhrkrlr�r��r�r�r�r�rGrrr�test_compression�s�zThreadedTests.test_compressionr5z*ssl.OP_NO_COMPRESSION needed for this testcCsRt�\}}}|jtjO_|jtjO_t||dd|d�}|�|dd�dS)NTr�r)r�r�rr5r!r�r�rrr�test_compression_disabled�s�z'ThreadedTests.test_compression_disabledcCs�t�\}}}|jtjO_|�t�|�d�|jtjO_t||dd|d�}|dd}|�d�}d|kr�d|kr�d	|kr�|�	d
|d�dS)NZkEDHTr�r�rr5ZADHZEDHZDHEzNon-DH cipher: )
r�r�rr�r(r)rCr!r8r�)r�r�r�r�rGr��partsrrr�test_dh_params�s

�
zThreadedTests.test_dh_paramszneeds secp384r1 curve supportz TODO: Test doesn't work on 1.1.1cCst�\}}}|�d�|�d�|jtjtjBO_t||dd|d�}t�\}}}|�d�|�d�|jtjtjBO_t||dd|d�}t�\}}}|�d�|�d�|�d�|jtjtjBO_zt||dd|d�}Wntjk
r�YnXt	�r|�
d�dS)NrzzECDHE:!eNULL:!aNULLTr�r2zmismatch curve did not fail)r�r|rCr�rr�r�r!r��IS_OPENSSL_1_1_0r�r�rrr�test_ecdh_curve�sB

�

�


�
zThreadedTests.test_ecdh_curvecCs2t�\}}}t||dd|d�}|�|dd�dS)NTr�r�r�r!r�r�rrr�test_selected_alpn_protocol
s�z)ThreadedTests.test_selected_alpn_protocolzALPN support requiredcCs@t�\}}}|�ddg�t||dd|d�}|�|dd�dS)Nr��barTr�r)r�r�r!r�r�rrr�/test_selected_alpn_protocol_if_server_uses_alpns�z=ThreadedTests.test_selected_alpn_protocol_if_server_uses_alpnz!ALPN support needed for this testc
Cs8dddg}ddgdfddgdfdgdfddgdfg}|D]�\}}t�\}}}|�|�|�|�zt||dd|d�}Wn(tjk
r�}	z|	}W5d}	~	XYnX|dkr�tr�tjdkr�|�|tj�q8d	t|�t|�t|�f}
|d
}|�	|||
|df�t
|d��r|dd
nd}|�	|||
|df�q8dS)Nr�r�Z	milkshakezhttp/3.0zhttp/4.0Tr�)rrrr��Kfailed trying %s (s) and %s (c).
was expecting %s, but got %%s from the %%srr|rr��nothingr�)r�r�r!rr�r�rwrrHr�rP)
r��server_protocols�protocol_tests�client_protocolsr�r�r�r�rGr^r��
client_result�
server_resultrrr�test_alpn_protocolssN



�

�
���
�
��
�z!ThreadedTests.test_alpn_protocolscCs2t�\}}}t||dd|d�}|�|dd�dS)NTr�rr�r�rrr�test_selected_npn_protocolGs�z(ThreadedTests.test_selected_npn_protocolz NPN support needed for this testcCs�ddg}ddgdfddgdfddgdfddgdfg}|D]�\}}t�\}}}|�|�|�|�t||dd|d�}dt|�t|�t|�f}	|d	}
|�|
||	|
d
f�t|d�r�|ddnd
}|�|||	|df�q8dS)Nzhttp/1.1zspdy/2r��abc�defTr�r�rr|rr�r�r�)r�r�r!rHr�rP)r�r�r�r�r�r�r�r�rGr�r�r�rrr�test_npn_protocolsOs6



�

���
��z ThreadedTests.test_npn_protocolscCsLt�tj�}|�t�t�tj�}|�t�t�tj�}|�t�|||fSr)	rrXrMr�r�r�rNr�r�)r�r��
other_contextr�rrr�sni_contextsis


zThreadedTests.sni_contextscCs"|d}|�d|ff|d�dS)Nrr"r*)r�)r�rGrrYrrr�check_common_namerszThreadedTests.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�|dk	r�|_dSr)r�r��rKZserver_nameZinitial_context�Zcallsr�rr�
servername_cb}sz6ThreadedTests.test_sni_callback.<locals>.servername_cbT�supermessage�r�rr1Znotfunny)r�r�r8r!r�r�r�)r�r�r�r�rGrr�rr9vs4
��
�zThreadedTests.test_sni_callbackc	Cs\|��\}}}dd�}|�|�|�tj��}t||ddd�}W5QRX|�|jjd�dS)NcSstjSr)rZALERT_DESCRIPTION_ACCESS_DENIEDr�rrr�cb_returning_alert�szAThreadedTests.test_sni_callback_alert.<locals>.cb_returning_alertFr�r�ZTLSV1_ALERT_ACCESS_DENIED)	r�r8r�rr�r!r�rKra)r�r�r�r�r�rNrGrrr�test_sni_callback_alert�s
�z%ThreadedTests.test_sni_callback_alertc
Cs�|��\}}}dd�}|�|�t���N}|�tj��}t||ddd�}W5QRX|�|j	j
d�|�|jjt
�W5QRXdS)NcSsdddS)Nrrrr�rrr�
cb_raising�sz;ThreadedTests.test_sni_callback_raising.<locals>.cb_raisingFr�r�ZSSLV3_ALERT_HANDSHAKE_FAILURE)r�r8r�catch_unraisable_exceptionr�rr�r!r�rKra�
unraisable�exc_type�ZeroDivisionError)r�r�r�r�r��catchrNrGrrr�test_sni_callback_raising�s

�
�z'ThreadedTests.test_sni_callback_raisingc
Cs�|��\}}}dd�}|�|�t���N}|�tj��}t||ddd�}W5QRX|�|j	j
d�|�|jjt
�W5QRXdS)NcSsdS)Nr�rr�rrr�cb_wrong_return_type�szOThreadedTests.test_sni_callback_wrong_return_type.<locals>.cb_wrong_return_typeFr�r�ZTLSV1_ALERT_INTERNAL_ERROR)r�r8rr�r�rr�r!r�rKrar�r�r�)r�r�r�r�r�r�rNrGrrr�#test_sni_callback_wrong_return_type�s

�z1ThreadedTests.test_sni_callback_wrong_return_typec	s�t�\}}}|�d�|�d�ddddg}t|||d�}|dd}|�t|�d�|D]*\�}}t�fd	d
�|D��sZ|���qZdS)Nz
AES128:AES256r�zAES-256ZTLS_CHACHA20ZTLS_AES�rrrc3s|]}|�kVqdSrr)r�Zalgrrrr��sz4ThreadedTests.test_shared_ciphers.<locals>.<genexpr>)r�rCr!�
assertGreaterrP�anyr�)	r�r�r�r�Z
expected_algsrGr�Ztls_version�bitsrrr�test_shared_ciphers�s 

��z!ThreadedTests.test_shared_ciphersc	Csvt�\}}}t|dd�}|�P|jt��|d�}|�t|jf�|��|�t	|j
d�|�t	|jd�W5QRXdS)NFr,rsr�shello)r�rr�r�rHrIr�r�r�r}r=rlr3rrr�,test_read_write_after_close_raises_valuerror�s
�z:ThreadedTests.test_read_write_after_close_raises_valuerrorcCs�d}ttjd��}|�|�W5QRX|�tjtj�t�tj�}tj	|_
|�t�|�
t�t|dd�}|�d|�t����J}|�t|jf�ttjd��"}|�|�|�|�d�|�W5QRXW5QRXW5QRXdS)Nsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx�wbFr,r_r�)r<r�TESTFNrlr��unlinkrrXrLr�r�r�r�r�r�rr�r�rHrIr��sendfiler�r0)r�Z	TEST_DATAr?r�r�r��filerrr�
test_sendfile�s


zThreadedTests.test_sendfilec
Cs@t�\}}}|jtjO_t|||d�}|d}|�|j�|�|jd�|�|j	d�|�|j
�tjdkr~|�|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�rrr�rr,rr-)rrr�rr�)r�r�rr�r!r�idr�r�r@Z
has_ticketrwZticket_lifetime_hintr�r/r�ZassertIsNotrr�)
r�r�r�r�rGrZ	sess_statZsession2Zsession3Zsession4rrr�test_sessionsj�
���zThreadedTests.test_sessionc
Cs�t�\}}}t�\}}}|jtjO_|jtjO_t|dd�}|���|jt��|d��p}|�|jd�|�|j	d�|�
t|jf�|j}|�
|�|�t��}	t|_W5QRX|�t|	j�d�W5QRX|jt��|d��D}|�
t|jf�|�t��}	||_W5QRX|�t|	j�d�W5QRX|jt��|d��J}||_|�
t|jf�|�|jj|j�|�|j|�|�|j	d�W5QRX|jt��|d��D}|�t��}	||_|�
t|jf�W5QRX|�t|	j�d�W5QRXW5QRXdS)NFr,rszValue is not a SSLSession.z#Cannot set session after handshake.Tz)Session refers to a different SSLContext.)r�r�rr�rr�r�r�rrrHrIr�rr�r�r%rHrKr}r�)
r�r�r�r�Zclient_context2r�r�r�rr^rrr�test_session_handling>s^
�

��
�
��z#ThreadedTests.test_session_handlingN)Lr�r�r�r+r/r[r�ryr1rNrr�r�r:r;r@rErdrGrOrPrTrUrVrWrZr\r^rfrgrtrurxr}rr�r�r�r�r�rYr�r�r�r�r{r�r�r�r�rBr�r��HAVE_SECP_CURVESrXr\r�r�ZHAS_ALPNr�r�r�ZHAS_NPNr�r�r�r[r9r�r�r�r�r�r�r�r�rrrrr)3s�2$�
(!�
8%
)
*



9
1)


�
:	�
	

%
	
'
	
(




:r)r�zTest needs TLS 1.3c@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�TestPostHandshakeAuthcCs�tjtjtjg}|D]�}t�|�}|�|jd�d|_|�|jd�tj|_|�|jtj�|�|jd�d|_|�|jtj�|�|jd�tj	|_d|_|�|jtj	�|�|jd�qdSr�)
rrLrMrNrXr��post_handshake_authr�r�r�)r�Z	protocolsrQrErrr�test_pha_setterss&�
z%TestPostHandshakeAuth.test_pha_setterc
Cst�\}}}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|�W5QRXW5QRXdS)NTFr,rsr�r�r�r�r�r�r�ir�r-)r�r�rr�r�r�r�rr�r�rHrIr�rlr�r0ror�)r�r�r�r�r�r�Z	cert_textrrr�test_pha_required�s.

�




z'TestPostHandshakeAuth.test_pha_requiredcCs�t�\}}}d|_tj|_d|_t����}t|dd�}|�~|jt	�	�|d��`}|�
t|jf�|�
d�|�|�d�d�|�
d�|�tjd	��|�d�W5QRXW5QRXW5QRXW5QRXdS)
NTFr,rsr�r�r�r�r�)r�r�rr�r�rZcatch_threading_exceptionrr�r�rHrIr�rlr�r0r�r�)r�r�r�r�rNr�r�rrr�test_pha_required_nocert�s(

�

�z.TestPostHandshakeAuth.test_pha_required_nocertc
Cs�tjrtj�d�t�\}}}d|_tj|_	d|_|�
t�tj|_	t
|dd�}|��|jt��|d��j}|�t|jf�|�d�|�|�d�d�|�d	�|�|�d�d
�|�d�|�|�d�d�W5QRXW5QRXdS)Nr�TFr,rsr�r�r�r�r�r�)rrjrhrkrlr�r�rr�r�r�r�r�rr�r�rHrIr�r�r0r3rrr�test_pha_optional�s*

�


z'TestPostHandshakeAuth.test_pha_optionalc
Cs�tjrtj�d�t�\}}}d|_tj|_	d|_t
|dd�}|��|jt��|d��j}|�
t|jf�|�d�|�|�d�d�|�d	�|�|�d�d
�|�d�|�|�d�d�W5QRXW5QRXdS)Nr�TFr,rsr�r�r�r�r�)rrjrhrkrlr�r�rr�r�rr�r�rHrIr�r�r0r3rrr�test_pha_optional_nocert�s&
�


z.TestPostHandshakeAuth.test_pha_optional_nocertcCs�t�\}}}d|_tj|_|�t�t|dd�}|�r|jt	�	�|d��T}|�
t|jf�|�
tjd��|��W5QRX|�d�|�d|�d��W5QRXW5QRXdS)	NTFr,rsz
not serverr�sextension not receivedr�)r�r�rr�r�r�r�rr�r�rHrIr�r�r�r�rlr�r0r3rrr�test_pha_no_pha_client�s

�
z,TestPostHandshakeAuth.test_pha_no_pha_clientc
Cs�t�\}}}tj|_d|_|�t�t|dd�}|��|jt	�	�|d��j}|�
t|jf�|�
d�|�|�d�d�|�
d�|�|�d�d	�|�
d�|�|�d�d�W5QRXW5QRXdS)
NTFr,rsr�r�r�r�r�)r�rr�r�r�r�r�rr�r�rHrIr�rlr�r0r3rrr�test_pha_no_pha_server�s"

�


z,TestPostHandshakeAuth.test_pha_no_pha_serverc
Cs�t�\}}}tj|_tjj|_d|_|�t	�t
|dd�}|�P|jt��|d��2}|�
t|jf�|�d�|�d|�d��W5QRXW5QRXdS)NTFr,rsr�sWRONG_SSL_VERSIONr�)r�rr�r�rrWrTr�r�r�rr�r�rHrIr�rlr�r0r3rrr�test_pha_not_tls13s


�
z(TestPostHandshakeAuth.test_pha_not_tls13c
Cst}t�tj�}d|_|�t�d|_tj|_	t�tj
�}|�t�|�t�d|_tj
|_	t|dd�}|��|jt��|d��z}|�t|jf�|�d�|�|�d�d�|�d�|�|�d�d	�|�d�|�|�d�d
�|�|��i�W5QRXW5QRXdS)NTFr,rsr�r�r�r�r�r�)r�rrXrNr�r�r�r�r�r�rMr�r�r�rr�r�rHrIr�rlr�r0r�)r�r�r�r�r�r�rrr�test_bpo37428_pha_cert_none s2



�


z1TestPostHandshakeAuth.test_bpo37428_pha_cert_noneN)r�r�r�r�r�r�r�r�r�r�r�r�rrrrr�qsr��keylog_filenamez0test requires OpenSSL 1.1.1 with keylog callbackc@sfeZdZejfdd�Zedd��Zedd��Zee	�
ejj
d�dd	���Zd
d�Zdd
�Zdd�ZdS)�TestSSLDebugc
Cs,t|��}tt|��W5QR�SQRXdSr)r<rPr�)r�Zfnamer?rrr�keylog_linesFs
zTestSSLDebug.keylog_linesc	Cs�|�tjtj�t�tj�}|�|jd�|�	t
j�tj��tj|_|�|jtj�|�
t
j�tj��|�|��d�d|_|�|jd�|�ttf��t
j�t
j�tj��|_W5QRX|�t��d|_W5QRXdS)Nr)r�rr�r�rrXrNr�r�r�rr�isfilerr�r��IsADirectoryError�PermissionErrorr�abspathr�r�rrr�test_keylog_defaultsJs �z!TestSSLDebug.test_keylog_defaultsc
Cs`|�tjtj�t�\}}}tj|_t|dd�}|�4|jt��|d��}|�	t
|jf�W5QRXW5QRX|�|�
�d�d|_tj|_t|dd�}|�4|jt��|d��}|�	t
|jf�W5QRXW5QRX|�|�
�d�tj|_tj|_t|dd�}|�4|jt��|d��}|�	t
|jf�W5QRXW5QRX|�|�
�d�d|_d|_dS)NFr,rsr���)r�rr�r�r�r�rr�r�rHrIr�r�r�rr3rrr�test_keylog_filenameasB
�$
�$
�$z!TestSSLDebug.test_keylog_filenamez.test is not compatible with ignore_environmentc	Cs�|�tjtj�tjj�tj	��ptjtj	d<|�
tj	dtj�t�tj
�}|�
|jd�t��}|�
|jtj�t��}|�
|jtj�W5QRXdS)NZ
SSLKEYLOGFILE)r�rr�r�r[Zmockr"�dictr�environr�rrXrNr�rJrLr�rrr�test_keylog_env�szTestSSLDebug.test_keylog_envc	CsXt�\}}}dd�}|�|jd�||_|�|j|�|�t��t�|_W5QRXdS)NcSsdSrr�r�	directionr,Zcontent_typeZmsg_typer�rrr�msg_cb�sz.TestSSLDebug.test_msg_callback.<locals>.msg_cb)r�r��
_msg_callbackr�r�r%)r�r�r�r�r�rrr�test_msg_callback�szTestSSLDebug.test_msg_callbackc
s�t�\}}}|jtjO_g���fdd�}||_t|dd�}|�4|jt��|d��}|�t	|j
f�W5QRXW5QRX��dtj
tjtjf����dtj
tjtjf��dS)Ncs@��|tj���|t���|ddh���||||f�dS)Nr=rl)rrr�r�r�r�r��r�r�rrr��sz4TestSSLDebug.test_msg_callback_tls12.<locals>.msg_cbFr,rsr=rl)r�r�rr�r�rr�r�rHrIr�r�rrWrZ	HANDSHAKErZSERVER_KEY_EXCHANGEZCHANGE_CIPHER_SPEC)r�r�r�r�r�r�r�rr�r�test_msg_callback_tls12�s0
�$
��
��z$TestSSLDebug.test_msg_callback_tls12c
s�t�\}}}t�d�dd�}�fdd�}||_||_t|dd�}|�b|jt��|d��}|�t|jf�W5QRX|jt��|d��}|�t|jf�W5QRXW5QRXdS)	NrcSsdSrrr�rrrr��sz@TestSSLDebug.test_msg_callback_deadlock_bpo43577.<locals>.msg_cbcs
�|_dSrrar5�Zserver_context2rr�sni_cb�sz@TestSSLDebug.test_msg_callback_deadlock_bpo43577.<locals>.sni_cbFr,rs)	r�r�Zsni_callbackrr�r�rHrIr�)r�r�r�r�r�r�r�r�rr�r�#test_msg_callback_deadlock_bpo43577�s$

�
�z0TestSSLDebug.test_msg_callback_deadlock_bpo43577N)r�r�r�rr�r��requires_keylogr�r�r[rXrh�flags�ignore_environmentr�r�r�r�rrrrr�Ds

"
�r�c	Cs |�tjtjt�ddd��dS)N�iirr)�
setsockoptr��
SOL_SOCKET�	SO_LINGER�struct�pack)r�rrr�)set_socket_so_linger_on_with_zero_timeout�sr�c@sBeZdZdZGdd�dej�Zdd�Zdd�Zdd	�Z	d
d�Z
dS)
�TestPreHandshakeClosezQVerify behavior of close sockets with received data before to the handshake.
    csFeZdZdd��fdd�
Zdd�Zdd�Z�fd	d
�Zdd�Z�ZS)
z6TestPreHandshakeClose.SingleConnectionTestServerThreadN)r@csF||_d|_d|_d|_d|_|dkr.t|_n||_t�j|d�dS)Nr!r)	�call_after_accept�
received_data�
wrap_errorrJr��
SHORT_TIMEOUTr@�superr�)r�rr�r@�rrrr��sz?TestPreHandshakeClose.SingleConnectionTestServerThread.__init__cCs|��|Sr)r�r�rrrr��sz@TestPreHandshakeClose.SingleConnectionTestServerThread.__enter__cGs<z|jr|j��Wntk
r(YnX|��d|_dSr)rJr�r/rr�r�rrrr��sz?TestPreHandshakeClose.SingleConnectionTestServerThread.__exit__csxt�tjj�|_tj|j_|jjtd�|jj	tt
d�t��|_t
�|j�|_|j�|j�|j�d�t���dS)Nr`rGr)rrJr�r��ssl_ctxr�r�r�rr�rr�rJrr�r�r>r@r�r�r�r�r�rrr��s

z<TestPreHandshakeClose.SingleConnectionTestServerThread.startcCs�z2z|j��\}}Wntk
r.YW�
dSXW5|j��X|��|�|�r^W5QR�dSz|jj|dd�}Wn(tk
r�}z
||_W5d}~XYn(Xz|�	d�|_
Wntk
r�YnXW5QRXdS)NTrC�)rJr�r,�TimeoutErrorr�rr�r/r�r0r�)r�r�addressZ
tls_socketr�rrrr�s 
z:TestPreHandshakeClose.SingleConnectionTestServerThread.run)	r�r�r�r�r�r�r�r��
__classcell__rrr�r� SingleConnectionTestServerThread�s
	rcCsntjdkrdSt|t�sFt|t�r.|jtjksFt�dt	|dd�tj
�rjz|�dtj�d|���W5d}XdS)N�linuxzwrong.version.numberrar$z!Could not recreate conditions on z: err=)rhr�rGr�r/rL�EINVAL�re�searchrK�Ir�rrrr�"non_linux_skip_if_other_okay_errors

�
��z8TestPreHandshakeClose.non_linux_skip_if_other_okay_errorc	s4t���t�����fdd�}|j|dd�}|��|�|j�t���B}|�|j�	��t
|�|�d����|�
d�|��W5QRX���|��|j}d|_zx|�d|j�|�|t�|�|�|�|tj�|�d|jd	�|�d|j�|�d
|jd
�|j|jdd�W5d}d}XdS)
Ncs�����t�std��dS)Nz+wrap_socket event never set, test may fail.F)r�r�r��RuntimeError)Zunused�Zready_for_server_wrap_socketZserver_accept_calledrrr�9s
zPTestPreHandshakeClose.test_preauth_data_to_tls_server.<locals>.call_after_acceptZpreauth_data_to_tls_server�r�rFsDELETE /data HTTP/1.0

r!�before TLS handshake with datarr�attr must existrp)r�r�rr�r�r�r�rHrJrzr�rdr�r4r�r�rr�r�r�rr/rrr�r�r\rar�r�r`)r�r�r�r|r�rr
r�test_preauth_data_to_tls_server5s>�



z5TestPreHandshakeClose.test_preauth_data_to_tls_serverc	stt���t�����fdd�}|j|dd�}|��|�|j�t|j�t����}|�	|j�
�������t
�s�|�d�t��}z|j|dd�}Wn*tk
r�}z|}d}W5d}~XYnXd}|�d	�}|��W5QRX|��zv|�d|�|�|t�|�|�|�|tj�|�d
|jd�|�d
|j�|�d|jd�|j|jd
d�W5d}d}XdS)Ncs8��t�std�t|�|�d�|�����dS)Nz ERROR: test client took too longsWHTTP/1.0 307 Temporary Redirect
Location: https://example.com/someone-elses-server

T)r�r��printr�r4r�r��Zconn_to_client�Z$client_can_continue_with_wrap_socketZ$server_can_continue_with_wrap_socketrrr�fs
�zPTestPreHandshakeClose.test_preauth_data_to_tls_client.<locals>.call_after_acceptZpreauth_data_to_tls_clientrztest server took too longr#rsr!rrrrrrp) r�r�rr�r�r�r�rJr�rHrzr�r�r�r�rrJr�r/r0r�rr�rrr�r�r\rar�r�r`)	r�r�r�r|rZ
tls_clientr�r�r�rrr�test_preauth_data_to_tls_clientbsN�



�


z5TestPreHandshakeClose.test_preauth_data_to_tls_clientc	s�t���G�fdd�dtjj�}�fdd�}d}|j|d|d�}|��|�|j�t	|j
�||j
��d|jt
��|d	�}|�t��"|jd
ddd
id�|��}W5QRX|��dS)NcseZdZ�fdd�ZdS)zeTestPreHandshakeClose.test_https_client_non_tls_response_ignored.<locals>.SynchronizedHTTPSConnectioncsDtjj�|���t�s*tjr*tj	�
d�|jj|j
|jd�|_
dS)Nz"server_responding event never set.rs)�httpr|ZHTTPConnectionrHr�r�rrjrhrkrlZ_contextr�r�rlr��Zserver_respondingrrrH�s�zmTestPreHandshakeClose.test_https_client_non_tls_response_ignored.<locals>.SynchronizedHTTPSConnection.connectN)r�r�r�rHrrrr�SynchronizedHTTPSConnection�srcs&t|�|�d�|�����dS)Ns!HTTP/1.0 402 Payment Required

T)r�r4r�r�rrrrr��s�z[TestPreHandshakeClose.test_https_client_non_tls_response_ignored.<locals>.call_after_acceptg@Znon_tls_http_RST_responder)r�rr@r)r�r�r@ZHEADz/testZHostr#)Zheaders)r�r�rr|ZHTTPSConnectionrr�r�r�r�rJrzr�rrJr�r/rcZgetresponser)r�rr�r@r��
connection�responserrr�*test_https_client_non_tls_response_ignored�s,
�
�z@TestPreHandshakeClose.test_https_client_non_tls_response_ignoredN)r�r�r�r�r�r�rrrrrrrrrr��s<-<r�cCsJtjr�tjtjd�}|��D]*\}}|�}|r|drd||f}qTqtt���}tdtj	tj
f�td|�tdtj�tdtj�ztdtj
�Wntk
r�YnXttttttttttttfD]}tj�|�s�t�d	|��q�tt t!t"t#t$t%t&t't(g
}t�)d
��r"|�*t+�t�,�}ztj.|�W5tj-|�XdS)N)ZMacZWindowsrz%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)/rrjr�Zmac_verZ	win32_ver�itemsr�rrrrwr�r�r�r�r�rrrrrr�r�r�r
�BADKEYrrr�existsZ
TestFailedr�r�r]rjrzr~r)r�r�r�Zis_resource_enabledr�r�Zthreading_setupZthreading_cleanupZrun_unittest)rjZplatsrr^Zplat�filenameZtests�thread_inforrr�	test_main�sh�
���
r!�__main__)N)r�TFNN)Nrr)F)�rhr[Z
unittest.mockr�rrr�r�r�r�r�r;Zhttp.clientrrrLr�Zurllib.requestrbr�rfr�r&r�Z	sysconfigr`rr�ImportError�
import_modulerrrr�sortedr*r�rIrrIrZrwr�r\rVZget_config_varr	r#r��verrKr�rr��fsencoderrrrrrrrr�rr#rr�r0r�r�r�r�r�r7r6r�rr?r�r�r�rr
rJrr�rr�r)r*r5r6r7r8r9r:r�r@rFrR�	lru_cacherOrdr�rBrXrYrnrtrxryr~r�r�r�r�r[rLr�r�r�ZTestCaser�r�r]rjrzr~r�r�r�Ztest.ssl_serversr�r�rr�r!r(r)r�Z
HAS_KEYLOGr�r�r�r�r!r�rrrr�<module>s�










��

	
	
(
��,5?0B
v�
3�
IJO�y
.


F1le Man4ger