Current File : //usr/local/apps/python3/lib/python3.11/test/__pycache__/test_ssl.cpython-311.opt-2.pyc
�

�Ke�M��	�ddlZddlZddlZddlmZddlmZddlmZddlmZddlm	Z	ddlm
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZ	ddlZn
#e$rdZYnwxYwe
jd��Zejd	��Z ddl!Z!dd
l m"Z"m#Z#m$Z$m%Z%e&ed��Z'e'o
ejdkZ(e)e j*��Z+ej,Z,e j-d
kZ.ej/d��Z0iZ1dD]4\Z2Z3	e4e e2��Z2e4e j"e3��Z3n#e5$rY�+wxYwe3e1e2<�5d�Z6e6d��Z7ej8e7��Z9e6d��Z:e6d��Z;ej8e:��Z<ej8e;��Z=e6d��Z>e6d��Z?dZ@e6d��ZAej8eA��ZBe6dd��ZCe6dd��ZDdddddddd �ZEe6d!��ZFe6d"��ZGd#ZHd$d%d&d'd(d)d*dddd+�
ZIe6d,��ZJd-ZKe6d.��ZLd/ZMe6dd0��ZNe6d1��ZOe6d2��ZPe6d3��ZQd#ZRd4ZSe6d5��ZTe6d6��ZUe6d7��ZVe6d8��ZWe6d9��ZXe6d:��ZYe6d;��ZZe6d<��Z[ej8e[��Z\e4e d=d��Z]e4e d>d��Z^e4e d?d��Z_e4e d@d��Z`e4e dAd��ZadB�Zbeb��rdC�ZcndD�ZcdE�ZdejedF���ZfdG�ZgdH�ZhdI�Zie
jjek�J��Zle jmdddddK�dL�ZneGfdMdN�dO�ZoGdP�dQejp��ZqGdR�dSejp��ZrGdT�dUejp��ZsGdV�dWejp��ZtGdX�dYejp��ZuGdZ�d[ejp��Zvejwd\��Gd]�d^ejp����Zxdxd_�Zyd`�Zzddal{m|Z|Gdb�dcej}��Z~Gdd�deej}��Z			dydh�Z�	dzdi�Z�Gdj�dkejp��Z�ej�efdl��dm��Gdn�doejp����Z�e&e j�dp��Z�ej�e�dq��Z�Gdr�dsejp��Z�Gdt�duejp��Z�dv�Z�e�dwkrej���dSdS){�N)�support)�
import_helper)�	os_helper)�
socket_helper)�threading_helper)�warnings_helper�asyncore�ssl)�
TLSVersion�_TLSContentType�_TLSMessageType�
_TLSAlertType�gettotalrefcount�win32)�rr�PY_SSL_DEFAULT_CIPHERS))�PROTOCOL_SSLv23�SSLv3)�PROTOCOL_TLSv1�TLSv1)�PROTOCOL_TLSv1_1�TLSv1_1c�t�tjjtj�t��g|�R�S�N)�os�path�join�dirname�__file__��names �7/usr/local/apps/python3/lib/python3.11/test/test_ssl.py�	data_filer#>s*��
�7�<������1�1�9�D�9�9�9�9�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�crlDistributionPointsr3r4r5r6r7r8r9z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_COMPATc��	tdd���5}d|���vcddd��S#1swxYwYdS#t$rYdSwxYw)Nz/etc/os-releasezutf-8)�encoding�ubuntuF)�open�read�FileNotFoundError)�fs r"�	is_ubunturO�s�����#�g�
6�
6�
6�	(�!��q�v�v�x�x�'�	(�	(�	(�	(�	(�	(�	(�	(�	(�	(�	(�	(����	(�	(�	(�	(�	(�	(�������u�u����s,�A�6�A�:�A�:�A�
A�Ac��	|D]A}t|d��r/|jtjjkr|�d���BdS)N�minimum_versionz@SECLEVEL=1:ALL)�hasattrrQr
rr�set_ciphers)�ctxs�ctxs  r"�seclevel_workaroundrV�sX��N��	3�	3�C���.�/�/�
3��#�s�~�'=�=�=���� 1�2�2�2��	3�	3r$c��dSr�)rTs r"rVrV�s���r$c��	t|t��rtt|d��}|�dS|tjtjtjhvrdS|j}t|td��d���S)NFT�	PROTOCOL_)
�
isinstance�str�getattrr
�PROTOCOL_TLS�PROTOCOL_TLS_SERVER�PROTOCOL_TLS_CLIENTr!�has_tls_version�len)�protocolr!s  r"�has_tls_protocolrd�s����
�(�C� � ���3��$�/�/�����5����#�1������
�t��=�D��4��K� 0� 0� 1� 1�2�3�3�3r$c��	|dkrdSt|t��rtjj|}ttd|j����sdStr|tjjkrdSt�	tj
��}t|d��r'|jtjj
kr
||jkrdSt|d��r'|jtjjkr
||jkrdSdS)N�SSLv2F�HAS_rQ�maximum_versionT)r[r\r
r�__members__r]r!�IS_OPENSSL_3_0_0�TLSv1_2�
SSLContextr`rRrQ�MINIMUM_SUPPORTEDrh�MAXIMUM_SUPPORTED)r9rUs  r"rara�s���
�'����u��'�3���6��.�,�W�5���3�-�w�|�-�-�.�.���u���G�c�n�&<�<�<��u��.�.��0�
1�
1�C��C�*�+�+����3�>�#C�C�C��c�)�)�)��u���&�'�'����s�~�?�?�?��#�%�%�%��u��4r$c���	�fd�}|S)Nc�J���tj�����fd���}|S)Nc�`��t���stj��d�����|i|��S)Nz is not available.)ra�unittest�SkipTest)�args�kw�funcr9s  ��r"�wrapperz8requires_tls_version.<locals>.decorator.<locals>.wrapper�sB���"�7�+�+�
)��'�7�(F�(F�(F�G�G�G��t�T�(�R�(�(�(r$)�	functools�wraps)rvrwr9s` �r"�	decoratorz'requires_tls_version.<locals>.decorator�s>����	���	�	�	)�	)�	)�	)�	)�
�	�	)�
�r$rX)r9rzs` r"�requires_tls_versionr{�s)����
������r$c���d�tjtj�����}t
jr$tj�||z��dSdS)N� )	r�	traceback�format_exception�sys�exc_infor�verbose�stdout�write)�prefix�
exc_formats  r"�handle_errorr�sV�����)�4�c�l�n�n�E�F�F�J���.��
����*�,�-�-�-�-�-�.�.r$c��tjr)tj��jdkr
tjStjS�Nr)�time�daylight�	localtime�tm_isdst�altzone�timezonerXr$r"�
utc_offsetr�s5���}����)�)�2�Q�6�6���}���M�>�r$)�category)�	cert_reqs�ca_certs�ciphers�certfile�keyfilec��|�d��s/t|d<t�tj��}n$t�tj��}|�|tjkrd|_||_|�|�	|��|�|�|�
||��|�|�|��|j|fi|��S)N�server_side�server_hostnameF)
�get�SIGNED_CERTFILE_HOSTNAMEr
rlr`r_�	CERT_NONE�check_hostname�verify_mode�load_verify_locations�load_cert_chainrS�wrap_socket)�sockr�r�r�r�r��kwargs�contexts        r"�test_wrap_socketr�s����:�:�m�$�$�:�$<�� �!��.�.��!8�9�9����.�.��!8�9�9������
�%�%�%*�G�"�'������%�%�h�/�/�/���w�2�����'�2�2�2������G�$�$�$��7��t�.�.�v�.�.�.r$T��server_chainc���	|tkrt}n5|tkrt}n"|tkrt
}nt
|���t�tj	��}|�
t��t�tj��}|�
|��|r|�
t��|||fSr)�SIGNED_CERTFILEr��SIGNED_CERTFILE2�SIGNED_CERTFILE2_HOSTNAME�	NOSANFILE�NOSAN_HOSTNAME�
ValueErrorr
rlr`r��
SIGNING_CAr_r�)�server_certr��hostname�client_context�server_contexts     r"�testing_contextr�.s�����o�%�%�+���	�(�	(�	(�,���	�	�	!�	!�!�����%�%�%��^�^�C�$;�<�<�N��(�(��4�4�4��^�^�C�$;�<�<�N��"�"�;�/�/�/��9��,�,�Z�8�8�8��>�8�3�3r$c�T�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
ejd���Zd
�Zd�Zd�Zed���Zd�Zd�Zd�Zd�Zed���Zd�Zd�Zejdej vd��d���Z!d�Z"d�Z#eje$j%dkd��d���Z&eje$j%dkd��d ���Z'd!�Z(d"�Z)d#�Z*d$�Z+d%�Z,eje-��d&��d'���Z.d(�Z/ej0d)d*��d+���Z1d,�Z2d-�Z3d.S)/�BasicSocketTestsc��tjtjtjtjtjtjtj|�tj	d��|�tj
d��|�tjd��|�tjd��tj
tjtjtjtjtj|�tjtj��dS)NT)r
r��
CERT_OPTIONAL�
CERT_REQUIREDrFrDrErC�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��selfs r"�test_constantszBasicSocketTests.test_constantsIs����
�
��������'�'���������������d�+�+�+������t�,�,�,������$�/�/�/������$�/�/�/�����������������������)�3�+>�?�?�?�?�?r$c��tjtjtjtjtjtjg}|D]j}|�|���5|�td��5d|_
ddd��n#1swxYwYddd��n#1swxYwY�ktj|tj��dS)N)�ssl_typezimmutable type)
�_ssl�_SSLContext�
_SSLSocket�	MemoryBIO�Certificate�
SSLSession�SSLError�subTest�assertRaisesRegex�	TypeError�valuer�check_disallow_instantiation)r��	ssl_typesr�s   r"�test_ssl_typeszBasicSocketTests.test_ssl_types]s5�����O��N����O��M�

�	�"�	*�	*�H����x��0�0�
*�
*��+�+�I�7G�H�H�*�*�%)�H�N�*�*�*�*�*�*�*�*�*�*�*����*�*�*�*�
*�
*�
*�
*�
*�
*�
*�
*�
*�
*�
*����
*�
*�
*�
*��	�,�T�4�3C�D�D�D�D�Ds6�B&�;B�B&�B�B&�B�B&�&B*	�-B*	c��|�td��5tj��5}t�|��ddd��n#1swxYwYddd��dS#1swxYwYdS�Nzpublic constructor)r�r��socketr
�	SSLSocket�r��ss  r"�test_private_initz"BasicSocketTests.test_private_initls���
�
#�
#�I�/C�
D�
D�	!�	!�����
!�A��
�
�a� � � �
!�
!�
!�
!�
!�
!�
!�
!�
!�
!�
!����
!�
!�
!�
!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!����	!�	!�	!�	!�	!�	!s4�A/�A�A/�A	�A/�A	�A/�/A3�6A3c�H�tj}|�t|��d|jz��|�t|��t|j����t�|��}|�|j|��dS)Nz$<_SSLMethod.PROTOCOL_TLS_CLIENT: %r>)	r
r`r��reprr�r\rl�assertIsrc�r��protorUs   r"�test_str_for_enumsz#BasicSocketTests.test_str_for_enumsqs����'������e���&L�u�{�&Z�[�[�[�����U���S���%5�%5�6�6�6��n�n�U�#�#���
�
�c�l�E�*�*�*�*�*r$c�*�t���}tjr(tj�d||rdpdfz��tj��5t�	d��\}}ddd��n#1swxYwY|�
t|��d��|�
||dk��|r>t�d��}|�
t|��d��n+|�
tjtjd��|�
ttjd��tj��5|�
ttj	d��ddd��n#1swxYwYt�dd��t�d	d��t�t#d
��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�r�r�r�r�check_warnings�RAND_pseudo_bytesr�rb�
RAND_bytes�assertRaisesr�r��RAND_add�	bytearray)r��v�data�is_cryptographics    r"�test_randomzBasicSocketTests.test_randomzs[���O�O�����?�	<��J���:� !�A�$A�*A�$:� 9� ;�;�
<�
<�
<��
+�
-�
-�	?�	?�%(�%:�%:�2�%>�%>�"�D�"�	?�	?�	?�	?�	?�	?�	?�	?�	?�	?�	?����	?�	?�	?�	?�����T���B�'�'�'����)�1��6�2�2�2��	@��>�>�"�%�%�D����S��Y�Y��+�+�+�+����c�l�C�N�B�?�?�?�	
���*�c�n�b�9�9�9�
�
+�
-�
-�	E�	E����j�#�*?��D�D�D�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E����	E�	E�	E�	E�	���.��5�5�5����5�t�<�<�<����Y�C�D�D�d�K�K�K�K�Ks$�!B�B�B�7'F*�*F.�1F.c��|�tj�t��t
��|�tj�t��t��tj�t��}tj
r7tj�
dtj|��zdz��|�|dd��|�|dd��|�|dd��|�|dd	��dS)
N�
r8))r1zprojects.developer.nokia.com)r1zprojects.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�r�r�r��pprint�pformat�r��ps  r"�test_parse_certz BasicSocketTests.test_parse_cert�sE��	
����H�&�&�x�0�0��	
�	
�	
�	
����H�&�&��7�7� �	
�	
�	
�
�H�&�&�y�1�1���?�	>��J���T�F�N�1�$5�$5�5��<�=�=�=�����+�,�?�	�	�	�
	
����6��$A�B�B�B�����;��N�	P�	P�	P�����2�3�N�	P�	P�	P�	P�	Pr$c��tj�t��}tjr7tj�dtj
|��zdz��|�|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))r1rrr2)r
r�r��TALOS_INVALID_CRLDPrr�r�r�r�r�r�r�r�s  r"�test_parse_cert_CVE_2019_5010z.BasicSocketTests.test_parse_cert_CVE_2019_5010�s����H�&�&�':�;�;���?�	>��J���T�F�N�1�$5�$5�5��<�=�=�=����
�L�6�7� $�H�#E��
�
�	
�	
�	
�	
�	
r$c��tj�t��}tjr7tj�dtj
|��zdz��d}|�|d|��|�|d|��tjdkrd}nd}|�|d|��dS)	Nr�)�)r(�US))�stateOrProvinceName�Oregon))r+�	Beavertonr,))�organizationalUnitNamezPython Core Development�)r.�null.python.orgexample.org))�emailAddresszpython-dev@python.orgr7r3)r�	�)�r1zaltnull.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)rrrr)rz	<invalid>r8)
r
r�r��NULLBYTECERTrr�r�r�r�r�r�r��_OPENSSL_API_VERSION)r�r�r7�sans    r"�test_parse_cert_CVE_2013_4238z.BasicSocketTests.test_parse_cert_CVE_2013_4238�s����H�&�&�|�4�4���?�	>��J���T�F�N�1�$5�$5�5��<�=�=�=�A��	
����9��w�/�/�/�����8��g�.�.�.��#�y�0�0�;�C�C�0�C�	
����+�,�c�2�2�2�2�2r$c��tj�t��}|�|dd��dS)Nr8)
)r1�allsans��	othername�
<unsupported>r )rzuser@example.org)r1zwww.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�s  r"�test_parse_all_sansz$BasicSocketTests.test_parse_all_sans�sF���H�&�&�z�2�2������+�,�
�	
�	
�	
�	
�	
r$c�B�ttd��5}|���}ddd��n#1swxYwYt�|��}t�|��}t�|��}|�||��|�tjdz��s|�	d|z��|�
dtjzdz��s|�	d|z��dSdS)N�rr�z-DER-to-PEM didn't include correct header:
%r
z-DER-to-PEM didn't include correct footer:
%r
)rK�
CAFILE_CACERTrLr
�PEM_cert_to_DER_cert�DER_cert_to_PEM_certr��
startswith�
PEM_HEADER�fail�endswith�
PEM_FOOTER)r�rN�pem�d1�p2�d2s      r"�test_DER_to_PEMz BasicSocketTests.test_DER_to_PEM�s?��
�-��
%�
%�	���&�&�(�(�C�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�
�
%�
%�c�
*�
*��
�
%�
%�b�
)�
)��
�
%�
%�b�
)�
)������R� � � ��}�}�S�^�d�2�3�3�	N��I�I�G�"�L�M�M�M��{�{�4�#�.�0�4�7�8�8�	N��I�I�G�"�L�M�M�M�M�M�	N�	Ns�7�;�;c���tj}tj}tj}|�|t
��|�|t��|�|t��|�|d��|�	|d��|\}}}}}|�|d��|�	|d��|�|d��|�	|d��|�|d��|�	|d��|�|d��|�
|d��|�|d��|�
|d��d	|d
��}	|dkrd|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�tupler\�assertGreaterEqual�
assertLess�assertLessEqual�
assertTruer-�hex)r��n�tr��major�minor�fix�patch�status�libressl_ver�openssl_vers           r"�test_openssl_versionz%BasicSocketTests.test_openssl_versions���&���$��������a��%�%�%����a��'�'�'����a��%�%�%�	
����:�.�.�.�����:�&�&�&�+,�(��u�c�5�&�����q�)�)�)�����q�!�!�!�����q�)�)�)�����s�#�#�#�����Q�'�'�'�����S�!�!�!�����q�)�)�)����U�B�'�'�'������*�*�*����V�R�(�(�(�,�5�,�,�,���A�:�:�B�U�B�B�B�u�B�B�B��B�B�B�K�K�@�U�@�@�@�u�@�@�@��@�@�@�K����
�L�L�+�|�4�5�5�
��3�q�6�6�N�	
�	
�	
�	
�	
r$c�,�tjtj��}t|��}tj|��}tjdtf��5~ddd��n#1swxYwY|�|��d��dS)N�)	r��AF_INETr��weakref�refrr��ResourceWarningr�)r�r��ss�wrs    r"�
test_refcyclezBasicSocketTests.test_refcycle's���
�M�&�.�)�)��
�a�
 �
 ��
�[��_�_��
�
+�R��,A�
B�
B�	�	��	�	�	�	�	�	�	�	�	�	�	����	�	�	�	��������t�$�$�$�$�$s�A+�+A/�2A/c	��tjtj��}t|��5}|�t|jd��|�t|jtd����|�t|jd��|�t|j	td��d��|�t|j
d��|�t|jdd��|�t|j
��|�t|jdgddd��|�t|jd��|�t|jtd��g��ddd��dS#1swxYwYdS)Nr��x)z0.0.0.0rrXr�d)r�rUr�r��OSError�recv�	recv_intor��recvfrom�
recvfrom_into�send�sendto�NotImplementedError�dup�sendmsg�recvmsg�recvmsg_into�r�r�rYs   r"�test_wrapped_unconnectedz)BasicSocketTests.test_wrapped_unconnected2s���
�M�&�.�)�)��
�a�
 �
 �	0�B����g�r�w��2�2�2����g�r�|�Y�t�_�_�E�E�E����g�r�{�A�6�6�6����g�r�'7��4���!�L�L�L����g�r�w��5�5�5����g�r�y�$��G�G�G����1�2�6�:�:�:����1�2�:�#�f�b�!�^�
=�
=�
=����1�2�:�s�C�C�C����1�2�?�(��~�~�.�
0�
0�
0�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0����	0�	0�	0�	0�	0�	0s�E8F3�3F7�:F7c��dD]�}tjtj��}|�|��t|��5}|�||�����ddd��n#1swxYwY��dS)N)Ng�@)r�rU�
settimeoutr�r��
gettimeout)r��timeoutr�rYs    r"�test_timeoutzBasicSocketTests.test_timeoutDs���(�	;�	;�G��
�f�n�-�-�A�
�L�L��!�!�!�!�!�$�$�
;��� � ��"�-�-�/�/�:�:�:�
;�
;�
;�
;�
;�
;�
;�
;�
;�
;�
;����
;�
;�
;�
;��	;�	;s�)A<�<B	�B	c���tjtjtjtjg}tjtjtjtjg}tj	j
tj	jtj	jg}|D]�}|�
|���5t�tj��}|�t"��5}|xj|zc_ddd��n#1swxYwY|�dt)|j����ddd��n#1swxYwY��|D]�}t-|��s�|�
|���5|�t"��5}t�|��ddd��n#1swxYwY|�d|j�d�t)|j����ddd��n#1swxYwY��|D]�}t1|��s�|�
|���5t�tj��}|�t"��5}||_ddd��n#1swxYwY|jj�d|j��}	|�d|	�d�t)|j����ddd��n#1swxYwY��dS)N)�optionz4ssl.OP_NO_SSL*/ssl.OP_NO_TLS* options are deprecated)rczssl.z is deprecated)r9r=)r
r�r�r�r�rr�PROTOCOL_TLSv1_2r^rrrrr�rlr`�assertWarns�DeprecationWarning�optionsr�r\�warningrdr!rarQ�	__class__�__name__)
r�rx�	protocols�versionsrtrU�cmrcr9�version_texts
          r"�test_openssl111_deprecationsz-BasicSocketTests.test_openssl111_deprecationsMs.���O�������	
��
��� �� ���	
�	�
�N� ��N� ��N�"�
���	�	�F����V��,�,�
�
��n�n�S�%<�=�=���%�%�&8�9�9�*�R��K�K�6�)�K�K�*�*�*�*�*�*�*�*�*�*�*����*�*�*�*�� � �J���
�O�O����	
�
�
�
�
�
�
�
�
�
�
����
�
�
�
��"�		�		�H�#�H�-�-�
�����x��0�0�
�
��%�%�&8�9�9�-�R��N�N�8�,�,�,�-�-�-�-�-�-�-�-�-�-�-����-�-�-�-�� � �8�8�=�8�8�8���
�O�O����
�
�
�
�
�
�
�
�
�
�
����
�
�
�
�� �	�	�G�"�7�+�+�
�����g��.�.�
�
��n�n�S�%<�=�=���%�%�&8�9�9�2�R�*1�C�'�2�2�2�2�2�2�2�2�2�2�2����2�2�2�2�*1�*;�*D�*D�*D�g�l�l�S��� � �7�<�7�7�7���
�O�O����
�
�
�
�
�
�
�
�
�
�
����
�
�
�
��	�	s��)?E�(D�9E�D	�	E�D	�
+E�E	�E	�:H�F<�0H�<G�H�G�4H�H	�H	�:?K&�9J
�K&�
J�K&�J�AK&�&K*	�-K*	c��tj��}|�tdtj|t
���|�tdtj|d���|�tdtj|dd���t�|dt
���5}|�td|jtd	f��ddd��n#1swxYwY|�t��5}tj��5}t�|t�
��ddd��n#1swxYwYddd��n#1swxYwY|�|jj
tj��|�t��5}tj��5}t�|t
t���ddd��n#1swxYwYddd��n#1swxYwY|�|jj
tj��|�t��5}tj��5}t�|tt���ddd��n#1swxYwYddd��n#1swxYwY|�|jj
tj��dS)Nzcertfile must be specified�r�z5certfile must be specified for server-side operationsT�r�rT�r�r�z!can't connect in server-side modei��r��r�r�)r�r�r�r
r�r��connect�HOSTr�r_�NONEXISTINGCERTr��	exception�errno�ENOENT)r�r�r�r~s    r"�test_errors_sslwrapz$BasicSocketTests.test_errors_sslwrap�s����}�������z�4����x�	�	A�	A�	A�	
���z�O����4�	�	A�	A�	A�	
���z�O���$�D�2�	�	O�	O�	O��_�_�T�t�h�_�
G�
G�	>�1��"�"�:�/R�%&�Y��t��
>�
>�
>�	>�	>�	>�	>�	>�	>�	>�	>�	>�	>�	>����	>�	>�	>�	>��
�
�w�
'�
'�	@�2�����
@�D�������?�?�?�
@�
@�
@�
@�
@�
@�
@�
@�
@�
@�
@����
@�
@�
@�
@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@����	@�	@�	@�	@�	
�����+�U�\�:�:�:�
�
�
�w�
'�
'�	@�2�����
@�D�����%�� �@�@�@�
@�
@�
@�
@�
@�
@�
@�
@�
@�
@�
@����
@�
@�
@�
@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@����	@�	@�	@�	@�	
�����+�U�\�:�:�:�
�
�
�w�
'�
'�	G�2�����
G�D�����,�o� �G�G�G�
G�
G�
G�
G�
G�
G�
G�
G�
G�
G�
G����
G�
G�
G�
G�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G����	G�	G�	G�	G�	
�����+�U�\�:�:�:�:�:s��7*C-�-C1�4C1�E+�&"E�E+�E	�E+�E	�E+�+E/�2E/�:H�(H�6H�H	�H�	H	�
H�H� H�(K�<(J0�$K�0J4	�4K�7J4	�8K�K�Kc��	tj�tj�t��ptj|��}t
j��}|�|j��|�	tj��5t||���ddd��dS#1swxYwYdS)Nr�)
rrrrr�curdirr��
addCleanup�closer�r
r�r��r�r�r�s   r"�
bad_cert_testzBasicSocketTests.bad_cert_test�s���I��7�<�<������ 9� 9� F�R�Y�#+�-�-���}��������
�#�#�#�
�
�
�s�|�
,�
,�	0�	0��T�&.�
0�
0�
0�
0�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0����	0�	0�	0�	0�	0�	0s�B;�;B?�B?c�2�	|�d��dS)Nr@�r�r�s r"�test_empty_certz BasicSocketTests.test_empty_cert�s��.����>�*�*�*�*�*r$c�2�	|�d��dS)NrAr�r�s r"�test_malformed_certz$BasicSocketTests.test_malformed_cert�s��H����=�)�)�)�)�)r$c�2�	|�d��dS)NrBr�r�s r"�test_malformed_keyz#BasicSocketTests.test_malformed_key�s��@����<�(�(�(�(�(r$c�t
��d�}�fd�}ddi}||d��||d��||d��||d��||d	��||d
��ddi}||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-��||d.��||d/��d0d1d2�}||d3��||d4��||d5��dd6d7�}||d8��||d9��||d:��||d;��||d<��||d=��||d>��tjrMdd?d7�}||d@��||dA��||dB��||dC��||dD��||d>��d0dEd2�}||d3��dFdGdHd+�}||d3��dFdEdHd+�}||dI����t
tjdd����t
tjid��ddJi}��tj	dK��5t�|dL��ddd��n#1swxYwYddMi}��tj	dN��5t�|dO��ddd��n#1swxYwYddPi}��tj	dQ��5t�|dR��ddd��n#1swxYwYddSi}��tj	dT��5t�|dU��ddd��n#1swxYwYddVi}��tj	dW��5t�|dX��ddd��n#1swxYwYdYD]N}��t
��5t�
|��ddd��n#1swxYwY�OdZD]/}��t�
|�����0tjr2d[D]1}��t�
|�����0dSdS)\Nc�<�t�||��dSr)r
�match_hostname)�certr�s  r"�okz0BasicSocketTests.test_match_hostname.<locals>.ok�s�����t�X�.�.�.�.�.r$c�`����tjtj||��dSr)r�r
�CertificateErrorr�)r�r�r�s  �r"r/z2BasicSocketTests.test_match_hostname.<locals>.fail�s9������c�2�!�0�$��
B�
B�
B�
B�
Br$r7)))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)rrznull.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))r1�linuxfr.org)r1�linuxfr.comr )r4r7r8r�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)r4r7r�z	gmail.comr�)�r1r�)r�10.11.12.13)r�14.15.16.17r$)r7r8r�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)rr�r�r�zDec 18 23:59:59 2099 GMT)rr�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)�1rTz1.2.3z	256.0.0.1z127.0.0.1/24)r%z192.168.0.1)z::1z2001:db8:85a3::8a2e:370:7334)�encode�decoder�IPV6_ENABLEDr�r�r
r�r�r��_inet_patonrG)r�r�r/r�r��invalid�ipaddrs`      r"�test_match_hostnamez$BasicSocketTests.test_match_hostname�s�
���	/�	/�	/�	B�	B�	B�	B�	B��>�?��
��4�����
��4�������T�$�%�%�%���T�>�"�"�"���T�=�!�!�!���T�=�!�!�!��:�;��
��4�������T�?�#�#�#���T�7������T�8������T�8�����9�:����T�9������T�7������T�9������T�;������T�=�!�!�!��D�E��
��4�1�2�2�2���T�=�!�!�!���T�$�%�%�%��<�=����T�?�#�#�#���T�7������T�8������T�8�����:�;����T�;������T�8������T�7����$�*�*�6�2�2�9�9�'�B�B���l�D�1�3�5�6��
��4������@�A����T�4�����D�E����T�4����"�(�(��0�0�7�7��@�@���l�D�1�3�5�6����T�$�+�+�F�3�3�:�:�7�C�C�D�D�D���T�%�,�,�V�4�4�;�;�G�D�D�E�E�E���T�$�+�+�F�3�3�:�:�7�C�C�D�D�D���T�=�'�'��/�/�6�6�w�?�?�@�@�@�7�?�#C�D�D��
	��4�����
��4�������T�?�#�#�#���T�>�"�"�"�7�B�C�C��	��4�"�#�#�#���T�;������T�<� � � �?�#@�A�A��
	��4�����
��4�������T�7������T�>�"�"�"���T�+�,�,�,���T�=�!�!�!���T�=�!�!�!��%�	&�B�'C�D�D�D�

�B�t�\�"�"�"��B�t�\�"�"�"��D��}�%�%�%��D��.�/�/�/��D��|�$�$�$��D��}�%�%�%�
7�C�D�D��
	
��T�$�%�%�%�7�B�#>�?�?��	��4�"�#�#�#�7�C�#=�>�>��	
��T�<� � � �	
���*�c�&8�$�
�N�N�N����*�c�&8�"�m�L�L�L��B�C��
�
#�
#��$�G�I�I�	9�	9�
���t�%7�8�8�8�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9����	9�	9�	9�	9�
�D�E��
�
#�
#��$�D�F�F�	<�	<�
���t�%:�;�;�;�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<����	<�	<�	<�	<�
�C�D��
�
#�
#��$�$�&�&�	<�	<�
���t�%:�;�;�;�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<����	<�	<�	<�	<�
�4�5��
�
#�
#��$�I�K�K�	-�	-�
���t�V�,�,�,�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-����	-�	-�	-�	-�
�8�9��
�
#�
#��$�8�:�:�	,�	,�
���t�U�+�+�+�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,����	,�	,�	,�	,�G�	)�	)�G��"�"�:�.�.�
)�
)�����(�(�(�
)�
)�
)�
)�
)�
)�
)�
)�
)�
)�
)����
)�
)�
)�
)��2�	5�	5�F��O�O�C�O�O�F�3�3�4�4�4�4��%�	9�A�
9�
9��������� 7� 7�8�8�8�8�	9�	9�
9�
9sl�&R�R�R�=S%�%S)�,S)�T<�<U�U�+V�V�V�W*�*W.�1W.�X:�:X>	�X>	c���t�tj��}tj��5}|�t
|j|dd���ddd��dS#1swxYwYdS)NTz
some.hostname�r�)r
rlr_r�r�r�r�)r�rUr�s   r"�test_server_sidez!BasicSocketTests.test_server_side}s����n�n�S�4�5�5��
�]�_�_�	?�����j�#�/�4��.=�
�
?�
?�
?�	?�	?�	?�	?�	?�	?�	?�	?�	?�	?�	?�	?����	?�	?�	?�	?�	?�	?s�%A*�*A.�1A.c��tjd��}tjtj��}|�|�����t|d���5}|�t��5|�d��ddd��n#1swxYwYddd��n#1swxYwY|�	��dS)N�r%rF��do_handshake_on_connectzunknown-type)
r��
create_serverrUr��getsocknamer�r�r��get_channel_bindingr�)r�r��crYs    r"�test_unknown_channel_bindingz-BasicSocketTests.test_unknown_channel_binding�s3��� �!1�2�2���M�&�.�)�)��	�	�	�!�-�-�/�/�"�"�"�
�a��
?�
?�
?�	7�2��"�"�:�.�.�
7�
7��&�&�~�6�6�6�
7�
7�
7�
7�
7�
7�
7�
7�
7�
7�
7����
7�
7�
7�
7�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7����	7�	7�	7�	7�	
���	�	�	�	�	s6�+B?�B(�B?�(B,	�,B?�/B,	�0B?�?C�C�
tls-unique�*'tls-unique' channel binding not availablec���tjtj��}t|��5}|�|�d����ddd��n#1swxYwYtjtj��}t|dt
���5}|�|�d����ddd��dS#1swxYwYdS)Nr�Tr�)r�rUr��assertIsNoner�r�rks   r"�test_tls_unique_channel_bindingz0BasicSocketTests.test_tls_unique_channel_binding�se��
�M�&�.�)�)��
�a�
 �
 �	D�B����b�4�4�\�B�B�C�C�C�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D����	D�	D�	D�	D�
�M�&�.�)�)��
�a�T�H�
E�
E�
E�	D�����b�4�4�\�B�B�C�C�C�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D����	D�	D�	D�	D�	D�	Ds#�)A#�#A'�*A'�#)C�C� Cc�n�ttjtj����}t|��}|�t
��5}d}t
j��ddd��n#1swxYwY|�|t|j
jd����dSr�)r�r�rUr�rvrXr�
gc_collect�assertInr\ryrt)r�rYr)r~s    r"�test_dealloc_warnz"BasicSocketTests.test_dealloc_warn�s���
�f�m�F�N�;�;�
<�
<����H�H��
�
�
�o�
.�
.�	!�"��B��� � � �	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!����	!�	!�	!�	!�	
�
�
�a��R�Z�_�Q�/�0�0�1�1�1�1�1s�A7�7A;�>A;c���t���}|�t|��d��|�|tj��t
j��5}t|d<t|d<t���}|�|j
t��|�|jt��ddd��dS#1swxYwYdS)N��SSL_CERT_DIR�
SSL_CERT_FILE)r
�get_default_verify_pathsr�rbrA�DefaultVerifyPathsr�EnvironmentVarGuard�CAPATHr��cafiler&)r��paths�envs   r"�test_get_default_verify_pathsz.BasicSocketTests.test_get_default_verify_paths�s
���,�,�.�.������U���Q�'�'�'����e�S�%;�<�<�<�
�
*�
,�
,�	3��"(�C���#+�C�� ��0�0�2�2�E����U�\�8�4�4�4����U�\�6�2�2�2�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3����	3�	3�	3�	3�	3�	3s�0A.C+�+C/�2C/r�Windows specificc��|�t�d����|�t�d����|�ttj��|�t
tjd��t
��}dD�]
}t�|��}|�|t��|D]�}|�|t��|�
t|��d��|\}}}|�|t��|�
|ddh��|�|tttf��t!|ttf��r|�|���Ӑ�d}|�
||��dS)	N�CA�ROOTrT)r�r�r�x509_asn�
pkcs_7_asn�1.3.6.1.5.5.7.3.1)rGr
�enum_certificatesr�r��WindowsError�setrA�listrCr�rb�bytesr��	frozenset�boolr[�update)	r��
trust_oids�	storename�store�elementr��enc�trust�
serverAuths	         r"�test_enum_certificatesz'BasicSocketTests.test_enum_certificates�s�������-�-�d�3�3�4�4�4�����-�-�f�5�5�6�6�6����)�S�%:�;�;�;����,��(=�r�B�B�B��U�U�
�'�	-�	-�I��)�)�)�4�4�E��!�!�%��.�.�.� �
-�
-���%�%�g�u�5�5�5�� � ��W���q�1�1�1�#*� ��c�5��%�%�d�E�2�2�2��
�
�c�J��#=�>�>�>��%�%�e�i��d�-C�D�D�D��e�i��%5�6�6�-��%�%�e�,�,�,��
-�)�
��
�
�j�*�-�-�-�-�-r$c�d�|�t�d����|�ttj��|�t
tjd��t�d��}|�|t��|D]}|�|t��|�	t|��d��|�|dt��|�|dddh����dS)Nr�rT�rr�r�r�)
rGr
�	enum_crlsr�r�r�rAr�rCr�rbr�r�)r��crlsr�s   r"�test_enum_crlszBasicSocketTests.test_enum_crls�s������
�
�d�+�+�,�,�,����)�S�]�3�3�3����,��
�r�:�:�:��}�}�T�"�"�����d�D�)�)�)��	B�	B�G��!�!�'�5�1�1�1����S��\�\�1�-�-�-��!�!�'�!�*�e�4�4�4��M�M�'�!�*�z�<�&@�A�A�A�A�		B�	Br$c�0�d}t�d��}|�||��|�|jd��|�|jd��|�|jd��|�|jd��|�|tj��|�ttjd��tj�
d��}|�||��|�|tj��|�ttjj
d��|�td��5tj�
d��ddd��n#1swxYwYtd	��D]�}	tj�
|��}|�|jt��|�|jt��|�|jt��|�|jttd��f����#t$rY��wxYwtj�d��}|�||��|�|tj��|�tj�d��|��|�tj�d��|��|�td
��5tj�d��ddd��dS#1swxYwYdS)N)�r��TLS Web Server Authenticationr�r�r�r�r����zunknown NID 100000i����zunknown object 'serverauth'�
serverauth)r
�_ASN1Objectr��nid�	shortname�longname�oidrAr�r��fromnidr��rangerBr\�type�fromname)r��expected�val�i�objs     r"�test_asn1objectz BasicSocketTests.test_asn1object�s���)���o�o�1�2�2������h�'�'�'������#�&�&�&�������5�5�5������'F�G�G�G������"5�6�6�6����c�3�?�3�3�3����*�c�o�|�D�D�D��o�%�%�c�*�*������h�'�'�'����c�3�?�3�3�3����*�c�o�&=�r�B�B�B�
�
#�
#�J�0D�
E�
E�	,�	,��O�#�#�F�+�+�+�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,����	,�	,�	,�	,��t���		B�		B�A�
B��o�-�-�a�0�0���%�%�c�g�s�3�3�3��%�%�c�m�S�9�9�9��%�%�c�l�C�8�8�8��%�%�c�g��T�$�Z�Z�/@�A�A�A�A��
�
�
�
���
�����o�&�&�'F�G�G������h�'�'�'����c�3�?�3�3�3������1�1�,�?�?��J�J�J������1�1�2E�F�F�!�	#�	#�	#�
�
#�
#�J�0M�
N�
N�	3�	3��O�$�$�\�2�2�2�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3����	3�	3�	3�	3�	3�	3s6� F,�,F0�3F0�	I8�8
J�J� N�N�Nc��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
rrA�Purpose�SERVER_AUTHr�rrr�CLIENT_AUTH)r�rs  r"�test_purpose_enumz"BasicSocketTests.test_purpose_enum�sd���o�o�1�2�2�����c�k�5�s��G�G�G������0�#�6�6�6������0�4�c�:�:�:������0�:�L�I�I�I������0�4�1�	3�	3�	3��o�o�1�2�2�����c�k�5�s��G�G�G������0�#�6�6�6������0�4�c�:�:�:������0�:�L�I�I�I������0�4�1�	3�	3�	3�	3�	3r$c��tjtjtj��}|�|j��|�t��5}t|tj	���ddd��n#1swxYwY|�
t|j��d��t�
tj��}|�t��5}|�|��ddd��n#1swxYwY|�
t|j��d��dS)N�r�z!only stream sockets are supported)r�rU�
SOCK_DGRAMr�r�r�rfr�r
r�r�r\r�rlr`r�)r�r��cxrUs    r"�test_unsupported_dtlsz&BasicSocketTests.test_unsupported_dtlss}���M�&�.�&�*;�<�<������� � � �
�
�
�2�
3�
3�	9�r��Q�#�-�8�8�8�8�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9����	9�	9�	9�	9�����R�\�*�*�,O�P�P�P��n�n�S�4�5�5��
�
�
�2�
3�
3�	�r��O�O�A����	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�����R�\�*�*�,O�P�P�P�P�Ps$�B�B
�
B
�7D�D� Dc�b�|�t�|��|��dSr)r�r
�cert_time_to_seconds)r��
timestring�	timestamps   r"�cert_time_okzBasicSocketTests.cert_time_oks,������1�1�*�=�=�y�I�I�I�I�Ir$c��|�t��5t�|��ddd��dS#1swxYwYdSr)r�r�r
r)r�rs  r"�cert_time_failzBasicSocketTests.cert_time_fails���
�
�
�z�
*�
*�	1�	1��$�$�Z�0�0�0�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1����	1�	1�	1�	1�	1�	1s�A�A�
Az)local time needs to be different from UTCc�^�|�dd��|�dd��dS)NzMay  9 00:00:00 2007 GMTg�C��A�Jan  5 09:34:43 2018 GMT���ѓ�A)rr�s r"�"test_cert_time_to_seconds_timezonez3BasicSocketTests.test_cert_time_to_seconds_timezone s8��
	
���4�l�C�C�C����4�l�C�C�C�C�Cr$c�L�d}d}|�||��|�t�|���|��|�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)rr�r
rr!)r�r�ts�
newyear_tss    r"�test_cert_time_to_secondsz*BasicSocketTests.test_cert_time_to_seconds(s���/�
�
�����*�b�)�)�)�����1�1�J�1�G�G��L�L�L����4�b�9�9�9����4�b�9�9�9����3�4�4�4����2�3�3�3����6�7�7�7����6�7�7�7����6�7�7�7����6�7�7�7����6�7�7�7�!�
����4�j�A�A�A����4�j�A�A�A����4�j�A�A�A����4�j�A�A�A����4�j�A�A�A����6�7�7�7�	
���4�n�E�E�E�E�Er$�LC_ALLrTc���d�}|�����dkr|�d��|�dd��|�|��dz��dS)Nc�,�tjdd��S)Nz%b)	r�r�rr8�r�rrr)r��strftimerXr$r"�local_february_namezNBasicSocketTests.test_cert_time_to_seconds_locale.<locals>.local_february_nameOs���=��'B�C�C�Cr$�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�skipTestrr!)r�r0s  r"� test_cert_time_to_seconds_localez1BasicSocketTests.test_cert_time_to_seconds_localeKs���	D�	D�	D��� � �&�&�(�(�E�1�1��M�M�4�
5�
5�
5�	
���4�l�C�C�C����/�/�1�1�4K�K�L�L�L�L�Lr$c��tjtj��}|�|j��t	j|��}t
tjtj��tj���}|�|j��|�	t|f��}tjtj
tjtjf}|�||��dS)Nr)r�rUr�r�r�	bind_portr�r
r��
connect_exr�r��ECONNREFUSED�EHOSTUNREACH�	ETIMEDOUT�EWOULDBLOCKr�)r��server�portr��rc�errorss      r"�test_connect_ex_errorz&BasicSocketTests.test_connect_ex_errorZs�����v�~�.�.�������%�%�%��&�v�.�.���V�]�6�>�:�:�&)�&7�
9�
9�
9������� � � �
�\�\�4��,�
'�
'��
��� 2�E�O���
��	
�
�
�b�&�!�!�!�!�!r$c���t��\}}}t|���}|5|�tj��|���5}|�t
|jf��|�|�d��d��|�|�	d��d��ddd��n#1swxYwYddd��dS#1swxYwYdS)N�r�r�rr$)
r��ThreadedEchoServerr�r�r�r�r=r�r`rd�r�r�r�r�r<r�s      r"�test_read_write_zeroz%BasicSocketTests.test_read_write_zerojsb��3B�3D�3D�0����#�N�;�;�;��
�	1�	1��+�+�F�M�O�O�<D�,�F�F�
1�IJ��	�	�4���-�.�.�.�� � �������C�0�0�0�� � �������a�0�0�0�	
1�
1�
1�
1�
1�
1�
1�
1�
1�
1�
1����
1�
1�
1�
1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1����	1�	1�	1�	1�	1�	1s6�)C&�A4C�C&�C	�C&�C	�C&�&C*�-C*N)4r{�
__module__�__qualname__r�r�r�r�r�r�rrr'r6rRr�cpython_onlyr[rlrrr��ignore_deprecationr�r�r�r�r�r�r�r�rr�
skipUnlessr
�CHANNEL_BINDING_TYPESr�r�r�r��platformr�r�rrrrr!r�r%r*�run_with_localer4r@rErXr$r"r�r�Gsf������@�@�@�(
E�
E�
E�!�!�!�
+�+�+�L�L�L�4P�P�P�:
�
�
�*3�3�3�:
�
�
�*
N�
N�
N�!
�!
�!
�F
��%�%���%�0�0�0�$;�;�;�3�3�3�j�;�;���;�:0�0�0�+�+�+�*�*�*�)�)�)��D9�D9���D9�L?�?�?�����X����)B�B�E�G�G�D�D�G�G�D�2�2�2�
3�
3�
3��X�����0�2D�E�E�.�.�F�E�.�0�X�����0�2D�E�E�B�B�F�E�B�%3�%3�%3�N3�3�3�"	Q�	Q�	Q�J�J�J�1�1�1��X������D�F�F�D�D�F�F�D�!F�!F�!F�F�W��X�r�*�*�M�M�+�*�M�"�"�"� 	1�	1�	1�	1�	1r$r�c��eZdZd�Zd�Zejedkd��d���Zd�Z	d�Z
d�Zd	�Ze
d
���Zejeejd��d��d
���Zd�Zd�Zd�Zd�Zejed��d���Zd�Zd�Zejejd��d���Zd�Zd�Zd�Z d�Z!d�Z"eje#j$dkd��d���Z%eje#j$dkd ��ejee#d!��d"��d#�����Z&d$�Z'd%�Z(d&�Z)d'�Z*d(�Z+d)�Z,d*�Z-d+S),�ContextTestsc�b�tD]q}t|��r`tj��5t�|��}ddd��n#1swxYwY|�|j|���rtj��5t���}ddd��n#1swxYwY|�|jtj��|�	ttjd��|�	ttjd��dS)Nr��*)�	PROTOCOLSrdrr�r
rlr�rcr^r�r�)r�rcrUs   r"�test_constructorzContextTests.test_constructorxsw��!�	9�	9�H���)�)�
9�$�3�5�5�3�3��.�.��2�2�C�3�3�3�3�3�3�3�3�3�3�3����3�3�3�3�� � ���x�8�8�8��
�
+�
-�
-�	#�	#��.�.�"�"�C�	#�	#�	#�	#�	#�	#�	#�	#�	#�	#�	#����	#�	#�	#�	#������s�'7�8�8�8����*�c�n�b�9�9�9����*�c�n�b�9�9�9�9�9s#�A�A	�A	�
B3�3B7�:B7c�>�t�tj��}|�d��|�d��|�tjd��5|�d��ddd��dS#1swxYwYdS)N�ALL�DEFAULT�No cipher can be selected�^$:,;?*'dorothyx)r
rlr`rSr�r��r�rUs  r"�test_cipherszContextTests.test_ciphers�s����n�n�S�4�5�5������������	�"�"�"�
�
#�
#�C�L�2M�
N�
N�	0�	0��O�O�.�/�/�/�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0����	0�	0�	0�	0�	0�	0s�/B�B�Br�z+Test applies only to Python default ciphersc�l�t�tj��}|���}|D]x}|d}|�d|��|�d|��|�d|��|�d|��|�d|���ydS)Nr!�PSK�SRP�MD5�RC4�3DES)r
rlr`�get_ciphers�assertNotIn)r�rUr��suiter!s     r"�test_python_ciphersz ContextTests.test_python_ciphers�s����n�n�S�4�5�5���/�/�#�#���	+�	+�E���=�D����U�D�)�)�)����U�D�)�)�)����U�D�)�)�)����U�D�)�)�)����V�T�*�*�*�*�
	+�	+r$c
��t�tj��}|�d��t	d�|���D����}hd�}|�|��}|�t|��ddt|���dt|������dS)N�AESGCMc3�&K�|]}|dV��
dS)r!NrX)�.0r<s  r"�	<genexpr>z0ContextTests.test_get_ciphers.<locals>.<genexpr>�s&����9�9�!�A�f�I�9�9�9�9�9�9r$>�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
rlr`rSr�ra�intersectionrDrb�sorted)r�rU�namesr
rrs     r"�test_get_cipherszContextTests.test_get_ciphers�s����n�n�S�4�5�5������!�!�!��9�9�s���'8�'8�9�9�9�9�9��	
�	
�	
���)�)�(�3�3���������q�"Y�F�5�M�M�"Y�"Y�v�h�GW�GW�"Y�"Y�	
�	
�	
�	
�	
r$c��t�tj��}tjtjztjz}|ttztztztzz}|�||j��tj��5|xjtjzc_ddd��n#1swxYwY|�|tjz|j��tj��5|jtjz|_ddd��n#1swxYwY|�||j��d|_|�d|jtjz��dSr�)r
rlr`�OP_ALLr�r�rCrFrDrErGr�rxrr�r�)r�rU�defaults   r"�test_optionszContextTests.test_options�s����n�n�S�4�5�5���:���/�#�/�A���%�(C�C�$�%�'9�:�.�/�	0��	
����#�+�.�.�.�
�
+�
-�
-�	+�	+��K�K�3�?�*�K�K�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+����	+�	+�	+�	+�����3�?�2�C�K�@�@�@�
�
+�
-�
-�	;�	;��;�#�/�)9�9�C�K�	;�	;�	;�	;�	;�	;�	;�	;�	;�	;�	;����	;�	;�	;�	;�����#�+�.�.�.��������C�K�3�?�*:�:�;�;�;�;�;s$�#C
�
C�C�D7�7D;�>D;c��tj��5t�tj��}ddd��n#1swxYwY|�|jtj��tj|_|�|jtj��tj	|_|�|jtj	��tj|_|�|jtj��|�
t��5d|_ddd��n#1swxYwY|�
t��5d|_ddd��n#1swxYwYt�tj
��}|�|jtj��|�|j��t�tj��}|�|jtj	��|�|j��dS�NrQ)rr�r
rlr^r�r�r�r�r�r�r�r�r_�assertFalser�r`rGrYs  r"�test_verify_mode_protocolz&ContextTests.test_verify_mode_protocol�st��
�
+�
-�
-�	3�	3��.�.��!1�2�2�C�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3����	3�	3�	3�	3�	
�����#�-�8�8�8��+��������#�*;�<�<�<��+��������#�*;�<�<�<��-��������#�-�8�8�8�
�
�
�y�
)�
)�	#�	#�"�C�O�	#�	#�	#�	#�	#�	#�	#�	#�	#�	#�	#����	#�	#�	#�	#�
�
�
�z�
*�
*�	!�	!� �C�O�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!����	!�	!�	!�	!��n�n�S�4�5�5�������#�-�8�8�8�����+�,�,�,��n�n�S�4�5�5�������#�*;�<�<�<�����*�+�+�+�+�+s5�%A�A	�A	�1E�E	�E	�*E>�>F�Fc���t�tj��}|�|j��tjred|_|�|j��d|_|�|j��d|_|�|j��dS|�t��5d|_ddd��dS#1swxYwYdS�NTF)	r
rlr`rG�hostname_checks_common_name�HAS_NEVER_CHECK_COMMON_NAMEr|r��AttributeErrorrYs  r"� test_hostname_checks_common_namez-ContextTests.test_hostname_checks_common_name�s���n�n�S�4�5�5������7�8�8�8��*�		7�.2�C�+��O�O�C�;�<�<�<�.3�C�+����S�<�=�=�=�.2�C�+��O�O�C�;�<�<�<�<�<��"�"�>�2�2�
7�
7�26��/�
7�
7�
7�
7�
7�
7�
7�
7�
7�
7�
7�
7����
7�
7�
7�
7�
7�
7s�
C�C#�&C#c���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 ��5d|_
ddd��n#1swxYwYt#tj��r�t�tj��}|�	|j
|��|�
|jtjj��|�t ��5tjj|_
ddd��n#1swxYwY|�t ��5tjj|_ddd��dS#1swxYwYdSdSr{)r
rlr_rrmrrkrn�TLSv1_3r�rQrhrr�rr�r�rdr)r�rU�
minimum_range�
maximum_ranges    r"�test_min_max_versionz!ContextTests.test_min_max_version�s���n�n�S�4�5�5��

�N�,��N� ��N�"�

�
�
�N�,��N�"�	
�
�	
�
�
����	
�	
�	
�	
�
�
����	
�	
�	
�"�n�4���!�n�4����������!7�	
�	
�	
�	
�������!7�	
�	
�	
�"�n�>���!�n�2����������!A�	
�	
�	
�	
�������!5�	
�	
�	
�"�n�>����������!A�	
�	
�	
�"�n�>����
�
���
�^�
!�3�>�#9�3�>�;O�P�	
�	
�	
�
"�n�>����
�
���
�^�
#�S�^�%;�<�	
�	
�	
�
�
�
�z�
*�
*�	%�	%�"$�C��	%�	%�	%�	%�	%�	%�	%�	%�	%�	%�	%����	%�	%�	%�	%��C�0�1�1�	;��.�.��!5�6�6�C��M�M��#�]�
�
�
�
����#�S�^�%E�
�
�
��"�"�:�.�.�
G�
G�&)�n�&F��#�
G�
G�
G�
G�
G�
G�
G�
G�
G�
G�
G����
G�
G�
G�
G��"�"�:�.�.�
;�
;�&)�n�&:��#�
;�
;�
;�
;�
;�
;�
;�
;�
;�
;�
;�
;����
;�
;�
;�
;�
;�
;�	;�	;s6�;K�K�K�6N�N� N�>O"�"O&�)O&�security_levelzrequires OpenSSL >= 1.1.0c��t�tj��}hd�}|�|j|��dS)N>rr�r�rr8r.)r
rlr`r�r�)r�rU�security_level_ranges   r"�test_security_levelz ContextTests.test_security_level3sJ��
�n�n�S�4�5�5�� 
� 
� 
��	
�
�
�c�(�*>�?�?�?�?�?r$c��t�tj��}ttdd��}|�|jtj|z��tj|_|�|jtj��tj|_|�|jtj��tj|_|�|jtj��tj	|_|�|jtj	��tjtj
z|_|�|jtjtj
z��|�t��5d|_ddd��dS#1swxYwYdS)N�VERIFY_X509_TRUSTED_FIRSTr)
r
rlr_r]r��verify_flags�VERIFY_DEFAULT�VERIFY_CRL_CHECK_LEAF�VERIFY_CRL_CHECK_CHAIN�VERIFY_ALLOW_PROXY_CERTS�VERIFY_X509_STRICTr�r�)r�rU�tfs   r"�test_verify_flagszContextTests.test_verify_flagsFs����n�n�S�4�5�5��
�S�5�q�
9�
9������)�3�+=��+B�C�C�C��4�������)�3�+D�E�E�E��5�������)�3�+E�F�F�F��-�������)�3�+=�>�>�>��7�������)�3�+G�H�H�H��4�s�7M�M�������)��2�S�5K�K�	M�	M�	M�
�
�
�y�
)�
)�	$�	$�#�C��	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$����	$�	$�	$�	$�	$�	$s�%F:�:F>�F>c���t�tj��}|�td���|�tt���|�t|jt���|�t��5}|�t��ddd��n#1swxYwY|�	|j
jtj��|�
tjd��5|�t��ddd��n#1swxYwY|�
tjd��5|�t ��ddd��n#1swxYwYt�tj��}|�t"t$��|�t"t$���|�t&t(���|�
tjd��5|�t"��ddd��n#1swxYwY|�
tjd��5|�t$��ddd��n#1swxYwY|�
tjd��5|�t$t"���ddd��n#1swxYwYt�tj��}|�
tjd��5|�t*t$��ddd��n#1swxYwY|�t,t.���|�t,t.������|�t,t3t.��������|�t"t4t.��|�t"t4t.�����|�t"t4t3t.�������|�
td��5|�t,d���ddd��n#1swxYwY|�tj��5|�t,d���ddd��n#1swxYwY|�
t6d	��5|�t,d
dz���ddd��n#1swxYwYd�}d
�}d�}d�}d�}d�}d�}	Gd�d��}
|�t,|���|�t,|���|�t,|���|�t,|
�����|�t,|
��j���|�tj��5|�t,|���ddd��n#1swxYwY|�
t6d	��5|�t,|���ddd��n#1swxYwY|�
td��5|�t,|���ddd��n#1swxYwY|�
t:d��5|�t,|	���ddd��n#1swxYwY|�t|	���dS)Nr��PEM libr�zkey values mismatch)�passwordzshould be a stringT�badpasszcannot be longer�ai�c��tSr��KEY_PASSWORDrXr$r"�getpass_unicodez:ContextTests.test_load_cert_chain.<locals>.getpass_unicode�s���r$c�4�t���Sr)r�r�rXr$r"�
getpass_bytesz8ContextTests.test_load_cert_chain.<locals>.getpass_bytes�s���&�&�(�(�(r$c�N�tt�����Sr)r�r�r�rXr$r"�getpass_bytearrayz<ContextTests.test_load_cert_chain.<locals>.getpass_bytearray�s���\�0�0�2�2�3�3�3r$c��dS)Nr�rXrXr$r"�getpass_badpassz:ContextTests.test_load_cert_chain.<locals>.getpass_badpass�s���9r$c��ddzS)Nr�irXrXr$r"�getpass_hugez7ContextTests.test_load_cert_chain.<locals>.getpass_huge�s
���;�'�'r$c��dS)NrrXrXr$r"�getpass_bad_typez;ContextTests.test_load_cert_chain.<locals>.getpass_bad_type�s���1r$c� �td���)N�
getpass error)�	ExceptionrXr$r"�getpass_exceptionz<ContextTests.test_load_cert_chain.<locals>.getpass_exception�s���O�,�,�,r$c��eZdZd�Zd�ZdS)�:ContextTests.test_load_cert_chain.<locals>.GetPassCallablec��tSrr�r�s r"�__call__zCContextTests.test_load_cert_chain.<locals>.GetPassCallable.__call__����#�#r$c��tSrr�r�s r"�getpasszBContextTests.test_load_cert_chain.<locals>.GetPassCallable.getpass�r�r$N)r{rFrGr�r�rXr$r"�GetPassCallabler��s2������
$�
$�
$�
$�
$�
$�
$�
$r$r�zmust return a stringr�)r
rlr_r�r�r�r�r_r�r�r�r�r�r�r��BADCERT�	EMPTYCERT�ONLYCERT�ONLYKEY�BYTES_ONLYCERT�
BYTES_ONLYKEYr*�CERTFILE_PROTECTEDr�r�r��ONLYKEY_PROTECTEDr�r�r�)r�rUr~r�r�r�r�r�r�r�r�s           r"�test_load_cert_chainz!ContextTests.test_load_cert_chainZs�
���n�n�S�4�5�5�����H�d��3�3�3����H�h��7�7�7����)�S�%8�(��K�K�K�
�
�
�w�
'�
'�	1�2�����0�0�0�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1����	1�	1�	1�	1������+�U�\�:�:�:�
�
#�
#�C�L�)�
<�
<�	)�	)�����(�(�(�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)����	)�	)�	)�	)�
�
#�
#�C�L�)�
<�
<�	+�	+����	�*�*�*�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+�	+����	+�	+�	+�	+��n�n�S�4�5�5�����H�g�.�.�.����X�w��?�?�?����^�]��K�K�K�
�
#�
#�C�L�)�
<�
<�	*�	*�����)�)�)�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*����	*�	*�	*�	*�
�
#�
#�C�L�)�
<�
<�	)�	)�����(�(�(�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)����	)�	)�	)�	)�
�
#�
#�C�L�)�
<�
<�	D�	D�����(��C�C�C�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D����	D�	D�	D�	D��n�n�S�4�5�5��
�
#�
#�C�L�2G�
H�
H�	8�	8����
�w�7�7�7�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8����	8�	8�	8�	8�	���.���F�F�F����.��9L�9L�9N�9N��O�O�O����.�%.�|�/B�/B�/D�/D�%E�%E�	�	G�	G�	G����H�&7��F�F�F����H�&7��9L�9L�9N�9N�O�O�O����H�&7�%�l�&9�&9�&;�&;�<�<�	>�	>�	>�
�
#�
#�I�/C�
D�
D�	C�	C���� 2�T��B�B�B�	C�	C�	C�	C�	C�	C�	C�	C�	C�	C�	C����	C�	C�	C�	C�
�
�
�s�|�
,�
,�	H�	H���� 2�Y��G�G�G�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H����	H�	H�	H�	H�
�
#�
#�J�0B�
C�
C�	L�	L�
��� 2�T�F�]��K�K�K�		L�	L�	L�	L�	L�	L�	L�	L�	L�	L�	L����	L�	L�	L�	L�	 �	 �	 �	)�	)�	)�	4�	4�	4�	�	�	�	(�	(�	(�	�	�	�	-�	-�	-�	$�	$�	$�	$�	$�	$�	$�	$�
	���.���I�I�I����.���G�G�G����.�9J��K�K�K����.���9J�9J��K�K�K����.�%4�_�%6�%6�%>�	�	@�	@�	@�
�
�
�s�|�
,�
,�	N�	N���� 2�_��M�M�M�	N�	N�	N�	N�	N�	N�	N�	N�	N�	N�	N����	N�	N�	N�	N�
�
#�
#�J�0B�
C�
C�	K�	K���� 2�\��J�J�J�	K�	K�	K�	K�	K�	K�	K�	K�	K�	K�	K����	K�	K�	K�	K�
�
#�
#�I�/E�
F�
F�	O�	O���� 2�=M��N�N�N�	O�	O�	O�	O�	O�	O�	O�	O�	O�	O�	O����	O�	O�	O�	O�
�
#�
#�I��
?�
?�	P�	P���� 2�=N��O�O�O�	P�	P�	P�	P�	P�	P�	P�	P�	P�	P�	P����	P�	P�	P�	P�	���H�/@��A�A�A�A�As��#C
�
C�C�E�E
�
E
�1F�F�F�	I0�0I4�7I4�K�K�	K�-"L�L�"L�*!N�N�N�4T�T!�$T!�U0�0U4�7U4� W�W�	W�/[�[�[�>\'�'\+�.\+�
]6�6]:�=]:�_�_	�_	c��t�tj��}|�t��|�td���|�t
��|�t
d���|�t|j��|�t|jddd��|�t��5}|�t��ddd��n#1swxYwY|�
|jjtj
��|�tjd��5|�t ��ddd��n#1swxYwY|�tt"��|�tt$���|�t|jdd��dS)N)r�r&r��r&T)r
rlr_r�r��BYTES_CERTFILEr�r�r_r�r�r�r�r�r�r�r�r��BYTES_CAPATH�r�rUr~s   r"�test_load_verify_locationsz'ContextTests.test_load_verify_locations�s���n�n�S�4�5�5���!�!�(�+�+�+��!�!��$�!�?�?�?��!�!�.�1�1�1��!�!���!�E�E�E����)�S�%>�?�?�?����)�S�%>��d�D�Q�Q�Q�
�
�
�w�
'�
'�	7�2��%�%�o�6�6�6�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7����	7�	7�	7�	7������+�U�\�:�:�:�
�
#�
#�C�L�)�
<�
<�	/�	/��%�%�g�.�.�.�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/����	/�	/�	/�	/��!�!�(�F�3�3�3��!�!�(�<�!�@�@�@�	
���)�S�%>��d�K�K�K�K�Ks$�.D�D�D�*F�F�Fc�
�tt��5}|���}ddd��n#1swxYwYt�|��}tt
��5}|���}ddd��n#1swxYwYt�|��}t�tj��}|�|�	��dd��|�
|���|�|�	��dd��|�
|���|�|�	��dd��|�
|���|�|�	��dd��t�tj��}d�||f��}|�
|���|�|�	��dd��t�tj��}d|d|d	|d
g}|�
d�|�����|�|�	��dd��t�tj��}|�
|���|�
|���|�|�	��dd��|�
|���|�|�	��dd��t�tj��}d�||f��}|�
|���|�|�	��dd��t�tj��}|�t|j
t���|�tjd��5|�
d
���ddd��n#1swxYwY|�tjd��5|�
d���ddd��dS#1swxYwYdS)N�x509_car��cadatar�r�r��head�other�again�tailr$z4no start line: cadata does not contain a certificate�brokenz6not enough data: cadata does not contain a certificatesbroken)rKr*rLr
r+�CAFILE_NEURONIOrlr`r��cert_store_statsr�rr�r��objectr�r�)r�rN�
cacert_pem�
cacert_der�neuronio_pem�neuronio_derrU�combineds        r"�test_load_verify_cadataz$ContextTests.test_load_verify_cadata�sJ��
�-�
 �
 �	"�A������J�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"��-�-�j�9�9�
�
�/�
"�
"�	$�a��6�6�8�8�L�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$����	$�	$�	$�	$��/�/��=�=���n�n�S�4�5�5������-�-�/�/�	�:�A�>�>�>��!�!��!�4�4�4�����-�-�/�/�	�:�A�>�>�>��!�!��!�6�6�6�����-�-�/�/�	�:�A�>�>�>��!�!��!�6�6�6�����-�-�/�/�	�:�A�>�>�>��n�n�S�4�5�5���9�9�j�,�7�8�8���!�!��!�2�2�2�����-�-�/�/�	�:�A�>�>�>��n�n�S�4�5�5���J���w� �&�*���!�!����8�)<�)<�!�=�=�=�����-�-�/�/�	�:�A�>�>�>��n�n�S�4�5�5���!�!��!�4�4�4��!�!��!�6�6�6�����-�-�/�/�	�:�A�>�>�>��!�!��!�4�4�4�����-�-�/�/�	�:�A�>�>�>��n�n�S�4�5�5���8�8�Z��6�7�7���!�!��!�2�2�2�����-�-�/�/�	�:�A�>�>�>��n�n�S�4�5�5�����)�S�%>�v��N�N�N�
�
#�
#��L�B�
�
�	7�	7�
�%�%�X�%�6�6�6�		7�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7����	7�	7�	7�	7�
�
#�
#��L�D�
�
�	8�	8�
�%�%�Y�%�7�7�7�		8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8����	8�	8�	8�	8�	8�	8sB�6�:�:�/B�B�B�R%�%R)�,R)�S4�4S8�;S8�)Avoid mixing debug/release CRT on Windowsc���t�tj��}|�t��t
jdkr|�t��|�t|j��|�t|jd��|�t��5}|�t��ddd��n#1swxYwY|�|j
jtj��|�tj��5}|�t"��ddd��dS#1swxYwYdS)N�nt)r
rlr_�load_dh_params�DHFILErr!�BYTES_DHFILEr�r�rMr�r�r�r�r�r�r�r�s   r"�test_load_dh_paramsz ContextTests.test_load_dh_params�s����n�n�S�4�5�5�����6�"�"�"�
�7�d�?�?����|�,�,�,����)�S�%7�8�8�8����)�S�%7��>�>�>�
�
�
�0�
1�
1�	0�R�����/�/�/�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0����	0�	0�	0�	0������+�U�\�:�:�:�
�
�
�s�|�
,�
,�	)�����x�(�(�(�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)����	)�	)�	)�	)�	)�	)s$�C+�+C/�2C/�?E'�'E+�.E+c���tjtjhD]P}t�|��}|�|���dddddddddddd����QdS)Nr)�numberr��connect_good�connect_renegotiate�accept�accept_good�accept_renegotiate�hits�misses�timeouts�
cache_full)r
r`r_rlr��
session_statsr�s   r"�test_session_statszContextTests.test_session_stats
s����-�s�/F�G�	�	�E��.�.��'�'�C����S�.�.�0�0��� !�'(�� �&'�����3�3�
�
�
�
�	�	r$c�v�t�tj��}|���dSr)r
rlr`�set_default_verify_pathsrYs  r"�test_set_default_verify_pathsz*ContextTests.test_set_default_verify_pathss0���n�n�S�4�5�5���$�$�&�&�&�&�&r$z#ECDH disabled on this OpenSSL buildc��t�tj��}|�d��|�d��|�t
|j��|�t
|jd��|�t|jd��|�t|jd��dS)N�
prime256v1s
prime256v1�foo�foo)r
rlr_�set_ecdh_curver�r�r�rYs  r"�test_set_ecdh_curvez ContextTests.test_set_ecdh_curve$s����n�n�S�4�5�5�����<�(�(�(����=�)�)�)����)�S�%7�8�8�8����)�S�%7��>�>�>����*�c�&8�%�@�@�@����*�c�&8�&�A�A�A�A�Ar$c��t�tj��}|�t|j��|�t|jd��|�t|jd��|�t|j|��d�}|�d��|�|��dS)Nr8rTc��dSrrX)r��
servernamerUs   r"�
dummycallbackz5ContextTests.test_sni_callback.<locals>.dummycallback7����Dr$)r
rlr_r�r��set_servername_callback)r�rUr�s   r"�test_sni_callbackzContextTests.test_sni_callback.s����n�n�S�4�5�5��	
���)�S�%@�A�A�A����)�S�%@�!�D�D�D����)�S�%@�"�E�E�E����)�S�%@�#�F�F�F�	�	�	��#�#�D�)�)�)��#�#�M�2�2�2�2�2r$c��t�tj��}|fd�}|�|��t	j|��}~~t
j��|�|��d��dS)Nc��dSrrX)r�r�rU�cycles    r"r�z>ContextTests.test_sni_callback_refcycle.<locals>.dummycallback@r�r$)	r
rlr_r�rVrW�gc�collectr�)r�rUr�rZs    r"�test_sni_callback_refcyclez'ContextTests.test_sni_callback_refcycle<s����n�n�S�4�5�5��7:�	�	�	�	��#�#�M�2�2�2�
�[��
�
����
�
�����
�
�b�b�d�d�D�!�!�!�!�!r$c�J�t�tj��}|�|���dddd���|�t��|�|���dddd���|�t��|�|���dddd���|�t��|�|���dddd���dS)Nr)r��crl�x509r�r�)	r
rlr`r�r�r�r�r�r*rYs  r"�test_cert_store_statsz"ContextTests.test_cert_store_statsHs(���n�n�S�4�5�5������-�-�/�/��!�Q�/�/�	1�	1�	1����H�%�%�%�����-�-�/�/��!�Q�/�/�	1�	1�	1��!�!�(�+�+�+�����-�-�/�/��!�Q�/�/�	1�	1�	1��!�!�-�0�0�0�����-�-�/�/��!�Q�/�/�	1�	1�	1�	1�	1r$c��t�tj��}|�|���g��|�t��|�|���g��|�t��|�|���dddddddd�g��tt��5}|�	��}ddd��n#1swxYwYt�
|��}|�|�d��|g��dS)	N)))r-zRoot CA))r
zhttp://www.cacert.org))r.zCA Cert Signing Authority))rzsupport@cacert.orgzMar 29 12:29:49 2033 GMTzMar 30 12:29:49 2003 GMT�00)z!https://www.cacert.org/revoke.crlr)r3r4r5r6r>r7r9T)r
rlr`r��get_ca_certsr�r�r*rKrLr+)r�rUrNr2�ders     r"�test_get_ca_certszContextTests.test_get_ca_certsVs����n�n�S�4�5�5������)�)�+�+�R�0�0�0��!�!�(�+�+�+�����)�)�+�+�R�0�0�0��!�!�-�0�0�0�����)�)�+�+�D�5�5�"�'M�E����
�
	�
	�
	��-�
 �
 �	�A��&�&�(�(�C�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	��&�&�s�+�+������)�)�$�/�/�#��7�7�7�7�7s�.D�D�Dc��t�tj��}|���t�tj��}|�tjj��|���t�tj��}|�tjj��t�tj��}|�t|jd��|�t|jd��dS)Nr)	r
rlr`�load_default_certsrrrr�r�rYs  r"�test_load_default_certsz$ContextTests.test_load_default_certsrs����n�n�S�4�5�5����� � � ��n�n�S�4�5�5�����s�{�6�7�7�7���� � � ��n�n�S�4�5�5�����s�{�6�7�7�7��n�n�S�4�5�5�����)�S�%;�T�B�B�B����)�S�%;�]�K�K�K�K�Kr$rznot-Windows specificc�N�t�tj��}tj��5}t
|d<t|d<|���|�|�	��dddd���ddd��dS#1swxYwYdS)Nr�r�rr�)rrr�)
r
rlr`rr�r�r�rr�r�)r�rUr�s   r"�test_load_default_certs_envz(ContextTests.test_load_default_certs_env�s����n�n�S�4�5�5��
�
*�
,�
,�	Z��"(�C���#+�C�� ��"�"�$�$�$����S�1�1�3�3�Q��VW�5X�5X�Y�Y�Y�		Z�	Z�	Z�	Z�	Z�	Z�	Z�	Z�	Z�	Z�	Z�	Z����	Z�	Z�	Z�	Z�	Z�	Zs�AB�B�!Br�rz3Debug build does not share environment between CRTsc��t�tj��}|���|���}t�tj��}tj��5}t|d<t|d<|���|dxxdz
cc<|�	|���|��ddd��dS#1swxYwYdS)Nr�r�rr�)
r
rlr`rr�rr�r�r�r�)r�rU�statsr�s    r"�#test_load_default_certs_env_windowsz0ContextTests.test_load_default_certs_env_windows�s���n�n�S�4�5�5����� � � ��$�$�&�&���n�n�S�4�5�5��
�
*�
,�
,�	<��"(�C���#+�C�� ��"�"�$�$�$��&�M�M�M�Q��M�M�M����S�1�1�3�3�U�;�;�;�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<�	<����	<�	<�	<�	<�	<�	<s�A!C2�2C6�9C6c��|�|jtjztj��tdkr(|�|jtzt��t
dkr(|�|jt
zt
��tdkr(|�|jtzt��tdkr*|�|jtzt��dSdSr�)r�rxr
r�rCrDrErFrYs  r"�_assert_context_optionsz$ContextTests._assert_context_options�s��������s��6���H�H�H���!�!����S�[�+<�<�.�
0�
0�
0��q� � ����S�[�+;�;�-�
/�
/�
/���"�"����S�[�+=�=�/�
1�
1�
1�&�!�+�+����S�[�+F�F�8�
:�
:�
:�
:�
:�,�+r$c���t���}|�|jtj��|�|jtj��|�|j��|�	|��tt��5}|���}ddd��n#1swxYwYt�tt|���}|�|jtj��|�|jtj��|�	|��t�tjj��}|�|jtj��|�|jtj��|�	|��dS)N)r�r&r�)r
�create_default_contextr�rcr`r�r�rGr�rrKr�rLr�rrr_r�)r�rUrNr�s    r"�test_create_default_contextz(ContextTests.test_create_default_context�s����(�(�*�*�������s�'>�?�?�?������#�*;�<�<�<�����*�+�+�+��$�$�S�)�)�)�
�*�
�
�	���V�V�X�X�F�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	��(�(�
�6�06�)�8�8�������s�'>�?�?�?������#�*;�<�<�<��$�$�S�)�)�)��(�(���)@�A�A�������s�'>�?�?�?������#�-�8�8�8��$�$�S�)�)�)�)�)s�'C�C�Cc�t�t���}|�|jtj��|�|jtj��|�|j��|�	|��ttj��r�tj
��5t�tj��}ddd��n#1swxYwY|�|jtj��|�|jtj��|�	|��tj
��5t�tjtjd���}ddd��n#1swxYwY|�|jtj��|�|jtj��|�|j��|�	|��t�tjj���}|�|jtj��|�|jtj��|�	|��dS)NT)r�r�)�purpose)r
�_create_stdlib_contextr�rcr`r�r�r|r�rrdrrr�rur�rGrrr_rYs  r"�test__create_stdlib_contextz(ContextTests.test__create_stdlib_context�s����(�(�*�*�������s�'>�?�?�?������#�-�8�8�8�����+�,�,�,��$�$�S�)�)�)��C�.�/�/�	.� �/�1�1�
E�
E��0�0��1C�D�D��
E�
E�
E�
E�
E�
E�
E�
E�
E�
E�
E����
E�
E�
E�
E����S�\�3�+=�>�>�>����S�_�c�m�<�<�<��(�(��-�-�-�
�
+�
-�
-�	�	��,�,��$��+�#�-���C�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	
�����s�';�<�<�<������#�*;�<�<�<�����*�+�+�+��$�$�S�)�)�)��(�(���1H�(�I�I�������s�'>�?�?�?������#�-�8�8�8��$�$�S�)�)�)�)�)s$�?%C0�0C4�7C4�-2F+�+F/�2F/c� �tj��5t�tj��}ddd��n#1swxYwY|�|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��5tj	|_ddd��n#1swxYwYd|_|�|j��tj	|_|�|jtj	��dSr)rr�r
rlr^r|r�r�r�r�rGr�r�r�r�rYs  r"�test_check_hostnamez ContextTests.test_check_hostname�s���
�
+�
-�
-�	3�	3��.�.��!1�2�2�C�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3����	3�	3�	3�	3�����+�,�,�,������#�-�8�8�8�"�������*�+�+�+������#�*;�<�<�<�"����+�������+�,�,�,������#�*;�<�<�<�#����-���"�������+�,�,�,������#�-�8�8�8�!�������*�+�+�+������#�*;�<�<�<�"����+���"�������+�,�,�,������#�*;�<�<�<�!�������*�+�+�+������#�*;�<�<�<��
�
�z�
*�
*�	,�	,�!�m�C�O�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,����	,�	,�	,�	,�"�������+�,�,�,��-��������#�-�8�8�8�8�8s#�%A�A	�A	�J,�,J0�3J0c��t�tj��}|�|j��|�|jtj��t�tj��}|�	|j��|�|jtj
��dSr)r
rlr`rGr�r�r�r�r_r|r�rYs  r"�test_context_client_serverz'ContextTests.test_context_client_servers����n�n�S�4�5�5������*�+�+�+������#�*;�<�<�<��n�n�S�4�5�5������+�,�,�,������#�-�8�8�8�8�8r$c�.�Gd�dtj��}Gd�dtj��}t�tj��}||_||_|�tj��d���5}|�	||��ddd��n#1swxYwY|�
t���t���d���}|�	||��dS)Nc��eZdZdS)�;ContextTests.test_context_custom_class.<locals>.MySSLSocketN�r{rFrGrXr$r"�MySSLSocketr!��������Dr$r#c��eZdZdS)�;ContextTests.test_context_custom_class.<locals>.MySSLObjectNr"rXr$r"�MySSLObjectr&r$r$r'Tr�)r
r��	SSLObjectrlr_�sslsocket_class�sslobject_classr�r�rA�wrap_bior�)r�r#r'rUr�r
s      r"�test_context_custom_classz&ContextTests.test_context_custom_classsG��	�	�	�	�	�#�-�	�	�	�	�	�	�	�	�#�-�	�	�	��n�n�S�4�5�5��)���)���
�_�_�V�]�_�_�$�_�
?�
?�	5�4��!�!�$��4�4�4�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5����	5�	5�	5�	5��l�l�3�=�=�?�?�C�M�M�O�O��l�N�N�����c�;�/�/�/�/�/s�B.�.B2�5B2c���t�tj��}|�|jd��d|_|�|jd��d|_|�|jd��|�t��5d|_ddd��n#1swxYwY|�t��5d|_ddd��n#1swxYwYt�tj��}|�|jd��|�t��5d|_ddd��dS#1swxYwYdS)Nr�r�rr�)	r
rlr_r��num_ticketsr�r�r�r`rYs  r"�test_num_tickestzContextTests.test_num_tickest"s����n�n�S�4�5�5�������!�,�,�,���������!�,�,�,���������!�,�,�,�
�
�
�z�
*�
*�	!�	!� �C�O�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!����	!�	!�	!�	!�
�
�
�y�
)�
)�	#�	#�"�C�O�	#�	#�	#�	#�	#�	#�	#�	#�	#�	#�	#����	#�	#�	#�	#��n�n�S�4�5�5�������!�,�,�,�
�
�
�z�
*�
*�	 �	 ��C�O�	 �	 �	 �	 �	 �	 �	 �	 �	 �	 �	 �	 ����	 �	 �	 �	 �	 �	 s6�B2�2B6�9B6�C+�+C/�2C/�E$�$E(�+E(N).r{rFrGrSrZrrrJrrdruryr}r�rIr�rRr
rlr�r�r�r�r��skipIf�Py_DEBUG_WIN32r�r�r�r�r�r�rrr	rr�rLrrrrrrrr,r/rXr$r"rOrOvs������
:�
:�
:�0�0�0��X��/�1�4�F�H�H�	+�	+�H�H�	+�
�
�
�&<�<�<�&,�,�,�07�7�7��L;�L;���L;�\�X������ 0�1�1�#���
@�
@�	��
@�$�$�$�(QB�QB�QB�fL�L�L�&=8�=8�=8�~�X�_�^�%P�Q�Q�)�)�R�Q�)����"'�'�'��X����'L�M�M�B�B�N�M�B�3�3�3�
"�
"�
"�1�1�1�8�8�8�8
L�
L�
L��X�_�S�\�W�,�.D�E�E�Z�Z�F�E�Z��X�����0�2D�E�E��X�_�W�W�S�"4�5�5�7l�m�m�<�<�n�m�F�E�<�
:�
:�
:�*�*�*�**�*�*�<*9�*9�*9�X	9�	9�	9�0�0�0�  � � � � r$rOc�T�eZdZd�Zejed��d���Zd�Zd�Z	dS)�
SSLErrorTestsc�j�t�dd��}|�t|��d��|�|jd��t�dd��}|�t|��d��|�|jd��dS)Nr�r�)r
r�r�r\r��SSLZeroReturnError)r��es  r"�test_strzSSLErrorTests.test_str6s����L�L��E�"�"������Q����'�'�'������!�$�$�$��"�"�1�e�,�,������Q����'�'�'������!�$�$�$�$�$r$r�c���t�tj��}|�tj��5}|�t��ddd��n#1swxYwY|�|jj	d��|�|jj
d��t|j��}|�|�
d��|��dS)N�PEM�
NO_START_LINEz"[PEM: NO_START_LINE] no start line)r
rlr`r�r�r�r�r�r��library�reasonr\rGr-)r�rUr~r�s    r"�test_lib_reasonzSSLErrorTests.test_lib_reason@s���n�n�S�4�5�5��
�
�
�s�|�
,�
,�	)�����x�(�(�(�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)����	)�	)�	)�	)������-�u�5�5�5������,�o�>�>�>�������������%I�J�J�A�N�N�N�N�Ns�A+�+A/�2A/c��t�tj��}d|_tj|_t
jd��5}t
j|�	����}|�
d��|�|dd���5}|�tj
��5}|���ddd��n#1swxYwYt|j��}|�|�d��|��|�|jjtj��ddd��n#1swxYwYddd��dS#1swxYwYdS)NFr�r�z%The operation did not complete (read))r
rlr`r�r�r�r�r��create_connectionr��setblockingr�r��SSLWantReadError�do_handshaker\r�rGr-r�r��SSL_ERROR_WANT_READ)r�rUr�r�r~s     r"�
test_subclasszSSLErrorTests.test_subclassKs���n�n�S�4�5�5��"����-���
�
!�"2�
3�
3�		N�q��(������9�9�A�
�M�M�%� � � �����E�5��I�I�
N�Q��&�&�s�';�<�<�%���N�N�$�$�$�%�%�%�%�%�%�%�%�%�%�%����%�%�%�%����%�%��������-T� U� U�WX�Y�Y�Y�� � ���!3�S�5L�M�M�M�

N�
N�
N�
N�
N�
N�
N�
N�
N�
N�
N����
N�
N�
N�
N�		N�		N�		N�		N�		N�		N�		N�		N�		N�		N�		N�		N����		N�		N�		N�		N�		N�		Ns\�AE<�% E$�C&�E$�&C*�*E$�-C*�.A*E$�E<�$E(	�(E<�+E(	�,E<�<F�Fc�
�t���}|�t��5|�t���t���d���ddd��n#1swxYwY|�t��5|�t���t���d���ddd��n#1swxYwY|�t��5|�t���t���d���ddd��dS#1swxYwYdS)NrTr�z.example.orgzexample.orgevil.com)r
rr�r�r+r�r�rYs  r"�test_bad_server_hostnamez&SSLErrorTests.test_bad_server_hostname]s���(�(�*�*��
�
�
�z�
*�
*�	-�	-��L�L������#�-�-�/�/�)+�
�
-�
-�
-�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-����	-�	-�	-�	-��
�
�z�
*�
*�	9�	9��L�L������#�-�-�/�/�)7�
�
9�
9�
9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9����	9�	9�	9�	9��
�
�y�
)�
)�	D�	D��L�L������#�-�-�/�/�)B�
�
D�
D�
D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D����	D�	D�	D�	D�	D�	Ds8�AB�B�B�,AC?�?D�D�$AE8�8E<�?E<N)
r{rFrGr7rrr0r1r=rDrFrXr$r"r3r34sx������%�%�%��X�_�^�%P�Q�Q�O�O�R�Q�O�N�N�N�$
D�
D�
D�
D�
Dr$r3c�,�eZdZd�Zd�Zd�Zd�Zd�ZdS)�MemoryBIOTestsc��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�rL�r��bios  r"�test_read_writezMemoryBIOTests.test_read_writels5���m�m�o�o���	�	�&������������V�,�,�,���������S�)�)�)��	�	�&�����	�	�&������������Y�/�/�/���������S�)�)�)��	�	�&����������!���e�,�,�,�������!���d�+�+�+�������!���c�*�*�*�*�*r$c�:�t���}|�|j��|�|���d��|�|j��|�d��|�|j��|���|�|j��|�|�d��d��|�|j��|�|�d��d��|�|j��|�|���d��|�|j��dS)Nr$r�r�sfor��o)	r
r�r|�eofr�rLr��	write_eofrGrMs  r"�test_eofzMemoryBIOTests.test_eofzsF���m�m�o�o�������!�!�!���������S�)�)�)������!�!�!��	�	�&���������!�!�!��
�
���������!�!�!�������!���e�,�,�,������!�!�!�������!���d�+�+�+������ � � ���������S�)�)�)������ � � � � r$c�F�t���}|�|jd��|�d��|�|jd��td��D]8}|�d��|�|jd|z
dz
���9td��D]5}|�d��|�|j|dz���6|���|�|jd��dS)Nrr�rr�r])r
r�r��pendingr�rrL)r�rNrs   r"�test_pendingzMemoryBIOTests.test_pending�s���m�m�o�o�������a�(�(�(��	�	�&���������a�(�(�(��q���	1�	1�A��H�H�Q�K�K�K����S�[�!�A�#�a�%�0�0�0�0��q���	/�	/�A��I�I�d�O�O�O����S�[�!�A�#�.�.�.�.����
�
�
������a�(�(�(�(�(r$c���t���}|�d��|�|���d��|�td����|�|���d��|�t
d����|�|���d��dS)Nr�rJrK)r
r�r�r�rLr��
memoryviewrMs  r"�test_buffer_typesz MemoryBIOTests.test_buffer_types�s����m�m�o�o���	�	�&������������V�,�,�,��	�	�)�F�#�#�$�$�$���������V�,�,�,��	�	�*�V�$�$�%�%�%���������V�,�,�,�,�,r$c�@�t���}|�t|jd��|�t|jd��|�t|jd��|�t|jd��dS)Nr�Tr�)r
r�r�r�r�rMs  r"�test_error_typeszMemoryBIOTests.test_error_types�s}���m�m�o�o�����)�S�Y��6�6�6����)�S�Y��5�5�5����)�S�Y��5�5�5����)�S�Y��2�2�2�2�2r$N)r{rFrGrOrTrWrZr\rXr$r"rHrHjs_������+�+�+�!�!�!� )�)�)�-�-�-�3�3�3�3�3r$rHc��eZdZd�Zd�ZdS)�SSLObjectTestsc���t���}|�td��5t�||��ddd��dS#1swxYwYdSr�)r
r�r�r�r(rMs  r"r�z SSLObjectTests.test_private_init�s����m�m�o�o��
�
#�
#�I�/C�
D�
D�	$�	$��M�M�#�s�#�#�#�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$����	$�	$�	$�	$�	$�	$s�A�A"�%A"c��t��\}}}t���}t���}t���}t���}|�|||���}|�||d���}	t	d��D]�}
	|���n#tj$rYnwxYw|jr'|�|�	����	|	���n#tj$rYnwxYw|jr'|�|�	������|���|	���|�
tj��5|���ddd��n#1swxYwY|�|�	����|	���|�|�	����|���dS)Nr�Tr�r.)r�r
r�r+rrBrArVr�rLr��unwrap)r��
client_ctx�
server_ctxr��c_in�c_out�s_in�s_out�clientr<�_s           r"�test_unwrapzSSLObjectTests.test_unwrap�sK��+:�+<�+<�(�
�J���}�}�����
�
�����}�}�����
�
�����$�$�T�5�(�$�K�K���$�$�T�5�d�$�C�C���q���	)�	)�A�
��#�#�%�%�%�%���'�
�
�
���
�����}�
)��
�
�5�:�:�<�<�(�(�(�
��#�#�%�%�%�%���'�
�
�
���
�����}�
)��
�
�5�:�:�<�<�(�(�(���������������
�
�s�3�
4�
4�	�	��M�M�O�O�O�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�
	
�
�
�5�:�:�<�<� � � ��
�
����	
�
�
�5�:�:�<�<� � � ��
�
�����s6�9C�C �C �D'�'D9�8D9�2G�G�GN)r{rFrGr�rjrXr$r"r^r^�s2������$�$�$�
(�(�(�(�(r$r^c���eZdZ	d�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zej
ejd
kd��d���Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�ZdS)�SimpleBackgroundTestsc��t�tj��|_|j�t
��t
|j���}|�|��t|j	f|_
dS)NrB)r
rlr_r�r�r�rC�enterContextr�r=�server_addr)r�r<s  r"�setUpzSimpleBackgroundTests.setUp�sl��!�n�n�S�-D�E�E�����+�+�O�<�<�<�#�D�,?�@�@�@�����&�!�!�!� �&�+�.����r$c��ttjtj��tj���5}|�|j��|�i|�����|�	|j
��ddd��n#1swxYwYttjtj��tjt���5}|�|j��|�
|�����|�	|j
��ddd��dS#1swxYwYdS)Nr�r�r�)r�r�rUr
r�r�ror��getpeercertr|r�r�r�rGr�s  r"�test_connectz"SimpleBackgroundTests.test_connect�s���
�f�m�F�N�;�;�&)�m�5�5�5�	,�89�
�I�I�d�&�'�'�'����R������1�1�1����Q�]�+�+�+�		,�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,����	,�	,�	,�	,��f�m�F�N�;�;�&)�&7�%/�1�1�1�	,�45�
�I�I�d�&�'�'�'��O�O�A�M�M�O�O�,�,�,����Q�]�+�+�+�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,����	,�	,�	,�	,�	,�	,s%�AB!�!B%�(B%�)AE�E�Ec��ttjtj��tj���}|�|j��|�tjd|j	|j
��dS)Nr�certificate verify failed)r�r�rUr
r�r�r�r�r�r�ror�s  r"�test_connect_failz'SimpleBackgroundTests.test_connect_fail�ss��
�V�]�6�>�:�:�&)�&7�
9�
9�
9������� � � ����s�|�-H� �y�$�*:�	<�	<�	<�	<�	<r$c�^�ttjtj��tjt
���}|�|j��|�d|�	|j
����|�|�����dS)Nrrr)
r�r�rUr
r�r�r�r�r�r7rorGrsr�s  r"�test_connect_exz%SimpleBackgroundTests.test_connect_ex�s����V�]�6�>�:�:�&)�&7�%/�
1�
1�
1��	
����� � � �����A�L�L��)9�:�:�;�;�;�����
�
���(�(�(�(�(r$c���ttjtj��tjt
d���}|�|j��|�d��|�	|j
��}|�|dtj
tjf��tjg|ggd��		|���nV#tj$rtj|gggd��Yn,tj$rtjg|ggd��YnwxYw�l|�|�����dS)NF)r�r�r�rrn)r�r�rUr
r�r�r�r�r@r7ror�r��EINPROGRESSr;�selectrBrA�SSLWantWriteErrorrGrs�r�r�r>s   r"�test_non_blocking_connect_exz2SimpleBackgroundTests.test_non_blocking_connect_exsZ��
�V�]�6�>�:�:�&)�&7�%/�49�
;�
;�
;��	
����� � � �	�
�
�e����
�\�\�$�*�
+�
+���
�
�b�1�e�/��1B�C�D�D�D��
�b�1�#�r�3�'�'�'�	0�
0���� � � ����'�
0�
0�
0��
�q�c�2�r�3�/�/�/�/�/��(�
0�
0�
0��
�b�1�#�r�3�/�/�/�/�/�
0����
	0�	
����
�
���(�(�(�(�(s�C$�$'D6�
&D6�5D6c���t�tj��}d|_tj|_|�tjtj����5}|�	|j
��|�i|�����ddd��n#1swxYwY|�tjtj��d���5}|�	|j
��ddd��n#1swxYwYtj
|_|�t��|�tjtj����5}|�	|j
��|���}|�|��ddd��dS#1swxYwYdS)NF�dummyr�)r
rlr`r�r�r�r�r�rUr�ror�rsr�r�r�rG�r�rUr�r�s    r"�test_connect_with_contextz/SimpleBackgroundTests.test_connect_with_contexts1���n�n�S�4�5�5��"����-���
�_�_�V�]�6�>�:�:�
;�
;�	2�q�
�I�I�d�&�'�'�'����R������1�1�1�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2����	2�	2�	2�	2��_�_�V�]�6�>�:�:�,3��5�5�	(�89�
�I�I�d�&�'�'�'�	(�	(�	(�	(�	(�	(�	(�	(�	(�	(�	(����	(�	(�	(�	(��+����!�!�*�-�-�-�
�_�_�V�]�6�>�:�:�
;�
;�	"�q�
�I�I�d�&�'�'�'��=�=�?�?�D��O�O�D�!�!�!�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"�	"�	"s8�.AB=�=C�C�;D"�"D&�)D&�	AG�G�!Gc�J�t�tj��}|�t	jtj��t���}|�|j��|�	tj
d|j|j��dS)Nr�rv)
r
rlr`r�r�rUr�r�r�r�r�r�ro)r�rUr�s   r"�test_connect_with_context_failz4SimpleBackgroundTests.test_connect_with_context_fail3s����n�n�S�4�5�5���O�O��M�&�.�)�)�4�
�
�
��	
����� � � ����s�|�-H� !�	�4�+;�	=�	=�	=�	=�	=r$c�P�t�tj��}|�t���|�t
jtj��t���5}|�	|j
��|���}|�|��ddd��n#1swxYwYt�tj��}|�t���|�t
jtj��t���5}|�	|j
��|���}|�|��ddd��dS#1swxYwYdS)Nr�r�)r
rlr`r�r�r�r�rUr�r�rorsrGr�r�s    r"�test_connect_capathz)SimpleBackgroundTests.test_connect_capath@s����n�n�S�4�5�5���!�!��!�0�0�0�
�_�_�V�]�6�>�:�:�-E��G�G�	"�JK�
�I�I�d�&�'�'�'��=�=�?�?�D��O�O�D�!�!�!�		"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"��n�n�S�4�5�5���!�!��!�6�6�6�
�_�_�V�]�6�>�:�:�-E��G�G�	"�JK�
�I�I�d�&�'�'�'��=�=�?�?�D��O�O�D�!�!�!�		"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"�	"�	"s&�8AC�C�C�
AF�F�"Fc���tt��5}|���}ddd��n#1swxYwYt�|��}t�tj��}|�|���|�tj	tj
��t���5}|�|j
��|���}|�|��ddd��n#1swxYwYt�tj��}|�|���|�tj	tj
��t���5}|�|j
��|���}|�|��ddd��dS#1swxYwYdS)Nr�r�)rKr�rLr
r+rlr`r�r�r�rUr�r�rorsrG)r�rNr2rrUr�r�s       r"�test_connect_cadataz)SimpleBackgroundTests.test_connect_cadataWsO��
�*�
�
�	���&�&�(�(�C�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	��&�&�s�+�+���n�n�S�4�5�5���!�!��!�-�-�-�
�_�_�V�]�6�>�:�:�-E��G�G�	"�JK�
�I�I�d�&�'�'�'��=�=�?�?�D��O�O�D�!�!�!�		"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"��n�n�S�4�5�5���!�!��!�-�-�-�
�_�_�V�]�6�>�:�:�-E��G�G�	"�JK�
�I�I�d�&�'�'�'��=�=�?�?�D��O�O�D�!�!�!�		"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"�	"�	"s2�6�:�:�
AD�D!�$D!�AG+�+G/�2G/r�z*Can't use a socket as a file under Windowsc�b�ttjtj����}|�|j��|���}|���}|���tj	|d��|���tj��|�t��5}tj	|d��ddd��n#1swxYwY|�|jjt j��dSr�)r�r�rUr�ro�fileno�makefiler�rrLr�r�r�r_r�r�r��EBADF)r�rY�fdrNr6s     r"�test_makefile_closez)SimpleBackgroundTests.test_makefile_closels��
�f�m�F�N�;�;�
<�
<��
�
�
�4�#�$�$�$�
�Y�Y�[�[���K�K�M�M��	���	�	�	�
���A����
���
�
�
�
�
����
�
�
�w�
'�
'�	�1��G�B��N�N�N�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	������*�E�K�8�8�8�8�8s�C:�:C>�C>c�P�tjtj��}|�|j��|�d��t|tjd���}|�|j	��d}		|dz
}|�
��nT#tj$rtj|ggg��Yn+tj
$rtjg|gg��YnwxYw�otjr$t j�d|z��dSdS)NF�r�r�rTr�z9
Needed %d calls to do_handshake() to establish session.
)r�rUr�ror@r�r
r�r�r�rBrAr|r}rr�r�r�r�)r�r��counts   r"�test_non_blocking_handshakez1SimpleBackgroundTests.test_non_blocking_handshakesE���M�&�.�)�)��	�	�	�$�"�#�#�#�	�
�
�e�����Q�&)�m�49�
;�
;�
;��	
����� � � ���	+�
+���
����� � � ����'�
+�
+�
+��
�q�c�2�r�*�*�*�*�*��(�
+�
+�
+��
�b�1�#�r�*�*�*�*�*�
+����	+��?�	d��J���Z�]b�b�c�c�c�c�c�	d�	ds�B"�"&C2�
%C2�1C2c�:�t|g|j�Rdti�dS)Nr�)�_test_get_server_certificateror�r�s r"�test_get_server_certificatez1SimpleBackgroundTests.test_get_server_certificate�s)��$�T�N�D�,<�N�N�N�:�N�N�N�N�Nr$c	����|j\}}g��fd�}|j�|��t�||f��}|s|�d|�d|�d���t�||ft���}|s|�d|�d|�d���tjr)tj
�d|�d|�d|�d���|��||g��dS)	Nc�2����|��dSr)�append)�ssl_sock�server_name�initial_context�server_namess   �r"�
servername_cbzLSimpleBackgroundTests.test_get_server_certificate_sni.<locals>.servername_cb�s�������,�,�,�,�,r$�No server certificate on �:�!�r��
Verified certificate for � is
r�)
ror�r�r
�get_server_certificater/r�rr�r�r�r�r�)r�r�r=r�r2r�s     @r"�test_get_server_certificate_sniz5SimpleBackgroundTests.test_get_server_certificate_sni�s(����%�
��d���	-�	-�	-�	-�	-���3�3�M�B�B�B��(�(�$���6�6���	H��I�I�I�4�4�4����F�G�G�G��(�(�$���
�(�K�K���	H��I�I�I�4�4�4����F�G�G�G��?�	^��J����D�D�D�RV�RV�RV�X[�X[�X[�\�]�]�]������d�|�4�4�4�4�4r$c�*�t|g|j�R�dSr)�!_test_get_server_certificate_failror�s r"� test_get_server_certificate_failz6SimpleBackgroundTests.test_get_server_certificate_fail�s#��	*�$�B��1A�B�B�B�B�B�Br$c��d�}|j�|��|�tj��5t
�|jtd���ddd��dS#1swxYwYdS)Nc�.�tjd��dS)N皙�����?)r��sleep�r�r�r�s   r"r�zPSimpleBackgroundTests.test_get_server_certificate_timeout.<locals>.servername_cb�s���J�s�O�O�O�O�Or$皙�����?)r�rq)	r�r�r�r�rqr
r�ror�)r�r�s  r"�#test_get_server_certificate_timeoutz9SimpleBackgroundTests.test_get_server_certificate_timeout�s���	�	�	���3�3�M�B�B�B�
�
�
�v�~�
.�
.�	4�	4��&�&�t�'7�*�/2�
'�
4�
4�
4�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4����	4�	4�	4�	4�	4�	4s�(A2�2A6�9A6c��ttjtj��tjd���5}|�|j��ddd��n#1swxYwYttjtj��tjd���5}|�|j��ddd��n#1swxYwY|�tjd��5tjtj��5}t|tjd���}|�|j��ddd��n#1swxYwYddd��dS#1swxYwYdS)NrU)r�r�rVrWrX)	r�r�rUr
r�r�ror�r�)r�r�r�s   r"rZz"SimpleBackgroundTests.test_ciphers�sG��
�f�m�F�N�;�;�'*�}�e�E�E�E�	(�HI�
�I�I�d�&�'�'�'�	(�	(�	(�	(�	(�	(�	(�	(�	(�	(�	(����	(�	(�	(�	(��f�m�F�N�;�;�'*�}�i�I�I�I�	(�LM�
�I�I�d�&�'�'�'�	(�	(�	(�	(�	(�	(�	(�	(�	(�	(�	(����	(�	(�	(�	(��
#�
#�C�L�2M�
N�
N�	,�	,���v�~�.�.�
,�$�$�T�.1�m�EW�Y�Y�Y���	�	�$�*�+�+�+�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,�
,����
,�
,�
,�
,�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,����	,�	,�	,�	,�	,�	,sY�A � A$�'A$�#C
�
C�C�5E/�7E�E/�E	�E/�E	�E/�/E3�6E3c�Z�t�tj��}|�t���|�|���g��|�tjtj	��d���5}|�
|j��|���}|�
|��ddd��n#1swxYwY|�t|�����d��dS)Nr�r/r�r�)r
rlr`r�r�r�rr�r�rUr�rorsrGrbr�s    r"�test_get_ca_certs_capathz.SimpleBackgroundTests.test_get_ca_certs_capath�s2���n�n�S�4�5�5���!�!��!�0�0�0�����)�)�+�+�R�0�0�0�
�_�_�V�]�6�>�:�:�-8��:�:�	"�=>�
�I�I�d�&�'�'�'��=�=�?�?�D��O�O�D�!�!�!�		"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"�
	
����S�-�-�/�/�0�0�!�4�4�4�4�4s�AC+�+C/�2C/c���t�tj��}|�t���t�tj��}|�t���tjt
j��}|�|d���5}|�|j	��|�
|j|��|�
|jj|��||_|�
|j|��|�
|jj|��ddd��dS#1swxYwYdS)Nr�r/r�)
r
rlr`r�r�r�rUr�r�ror�r��_sslobj)r��ctx1�ctx2r�rYs     r"�test_context_setgetz)SimpleBackgroundTests.test_context_setget�s]���~�~�c�5�6�6���"�"�&�"�1�1�1��~�~�c�5�6�6���"�"�&�"�1�1�1��M�&�.�)�)��
�
�
�a��
�
=�
=�	4���J�J�t�'�(�(�(��M�M�"�*�d�+�+�+��M�M�"�*�,�d�3�3�3��B�J��M�M�"�*�d�+�+�+��M�M�"�*�,�d�3�3�3�
	4�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4����	4�	4�	4�	4�	4�	4s�4BE�E� Ec���|�dtj��}tj��|z}d}		tj��|kr|�d��d}
|	dz
}		||�}nC#tj$r1}|jtj	tj
fvr�|j}
Yd}~nd}~wwxYw|���}
|�|
��|
�nR|
tj	krA|�
d��}
|
r|�|
��n|�����tjr)t"j�d|	|jfz��|S)NrqrTr�i�z"Needed %d calls to complete %s().
)r�r�
SHORT_TIMEOUTr��	monotonicr/r
r�r�rC�SSL_ERROR_WANT_WRITErL�sendallr`r�rSr�r�r�r{)r�r��incoming�outgoingrvrtr�rq�deadliner�r��retr6�bufs              r"�ssl_io_loopz!SimpleBackgroundTests.ssl_io_loop�s����*�*�Y��(=�>�>���>�#�#�g�-����	)��~���(�*�*��	�	�)�$�$�$��E��Q�J�E�
 ��d�D�k�����<�
 �
 �
 ��7�3�#:�#&�#;�#=�=�=��������������	
 �����-�-�/�/�C��L�L������}���#�1�1�1��i�i��&�&���)��N�N�3�'�'�'�'��&�&�(�(�(�3	)�4�?�	7��J���B� %�t�}�5�6�
7�
7�
7��
s�.A4�4B4�'B/�/B4c��tjtj��}|�|j��|�|j��t���}t���}t�tj	��}|�
|j��|�|j
tj��|�t ��|�||dt$��}|�|jj|��|�|�����|�|�����|�|�����|�t6|j��dtjvr(|�|�d����|�||||j ��|�
|�����|�|�����|�!|�����|�
|�����dtjvr(|�
|�d����	|�||||j"��n#tj#$rYnwxYw|�tj$|j%d��dS)NFr�r�)&r�rUr�r�r�ror
r�rlr`rGr�r�r�r�r�r�r+r�r�r��ownerr��cipherr9�shared_ciphersr�r�rsrKr�r�rB�assertIsNotNonera�SSLSyscallErrorr�r�)r�r�r�r�rU�sslobjs      r"�test_bio_handshakez(SimpleBackgroundTests.test_bio_handshake	s����}�V�^�,�,������
�#�#�#����T�%�&�&�&��=�=�?�?���=�=�?�?���n�n�S�4�5�5������*�+�+�+������#�*;�<�<�<��!�!�*�-�-�-����h��%�6�8�8���
�
�f�n�*�F�3�3�3����&�-�-�/�/�*�*�*����&�.�.�*�*�+�+�+����&�/�/�1�1�2�2�2����*�f�&8�9�9�9��3�4�4�4����f�8�8��F�F�G�G�G�����x��6�3F�G�G�G�����
�
���(�(�(����&�/�/�1�1�2�2�2����V�^�^�-�-�.�.�.�����*�*�,�,�-�-�-��3�4�4�4��O�O�F�6�6�|�D�D�E�E�E�	����T�8�X�v�}�E�E�E�E���"�	�	�	�
�D�	����	
���#�,���f�=�=�=�=�=s�:L�L*�)L*c���tjtj��}|�|j��|�|j��t���}t���}t�tj	��}d|_
tj|_|�
||d��}|�||||j��d}|�||||j|��|�||||jd��}|�|d��|�||||j��dS)NF�FOO
�sfoo
)r�rUr�r�r�ror
r�rlr`r�r�r�r+r�rBr�rLr�ra)r�r�r�r�rUr��reqr�s        r"�test_bio_read_write_dataz.SimpleBackgroundTests.test_bio_read_write_data*	s%���}�V�^�,�,������
�#�#�#����T�%�&�&�&��=�=�?�?���=�=�?�?���n�n�S�4�5�5��"����-������h��%�8�8������x��6�3F�G�G�G�������x��6�<��E�E�E����t�X�x���d�K�K������h�'�'�'�����x��6�=�A�A�A�A�Ar$c��t��\}}}tjtj��5}|�|j��t
���}t
���}|�|||���}|�||||j	��|�
��|�t
j|j
��ddd��dS#1swxYwYdS)Nr�)r�r�rUr�ror
r�r+r�rBrSr��SSLEOFErrorrL)r�r�r�r�r�r�r�r�s        r"�test_transport_eofz(SimpleBackgroundTests.test_transport_eof;	s$��3B�3D�3D�0����
�]�6�>�
*�
*�
	<�d��L�L��)�*�*�*��}�}���H��}�}���H�#�,�,�X�x�=E�-�G�G�F����T�8�X�v�7J�K�K�K�
��� � � ����c�o�v�{�;�;�;�
	<�
	<�
	<�
	<�
	<�
	<�
	<�
	<�
	<�
	<�
	<�
	<����
	<�
	<�
	<�
	<�
	<�
	<s�B;C9�9C=�C=N)r{rFrGrprtrwryrr�r�r�r�rrr0rr!r�r�r�r�r�r�rZr�r�r�r�r�r�rXr$r"rlrl�s�������I�/�/�/�
,�
,�
,�<�<�<�)�)�)�)�)�)�4"�"�"�(=�=�=�"�"�"�."�"�"�*�X�_�R�W��_�&R�S�S�9�9�T�S�9�$d�d�d�*O�O�O�5�5�5�*C�C�C�
4�4�4�,�,�,�
5�
5�
5�
4�
4�
4�#�#�#�J >� >� >�DB�B�B�"<�<�<�<�<r$rl�networkc�R�eZdZd�Zejejd��d���ZdS)�NetworkedTestsc�J�tjt��5tt	jtj��tjd���}|�|j	��|�
d��|�tdf��}|dkr|�d��n%|tjkr|�d��|�|tjtjf��ddd��dS#1swxYwYdS)NFr�gH�����z>�rz!REMOTE_HOST responded too quicklyzNetwork unreachable.)r�transient_internet�REMOTE_HOSTr�r�rUr
r�r�r�ror7r3r��ENETUNREACHr��EAGAINr;r~s   r"�test_timeout_connect_exz&NetworkedTests.test_timeout_connect_exM	sT���
-�k�
:�
:�	A�	A� ���v�~�!>�!>�*-�*;�8=�?�?�?�A�
�O�O�A�G�$�$�$�
�L�L��#�#�#����{�C�0�1�1�B��Q�w�w��
�
�A�B�B�B�B��u�(�(�(��
�
�4�5�5�5��M�M�"�u�|�U�->�?�@�@�@�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A����	A�	A�	A�	A�	A�	As�C1D�D�Dz
Needs IPv6c��tjd��5t|dd��t|dd��ddd��dS#1swxYwYdS)Nzipv6.google.comr�)rr�r�r�r�s r"� test_get_server_certificate_ipv6z/NetworkedTests.test_get_server_certificate_ipv6]	s���
�
-�.?�
@�
@�	L�	L�(��/@�#�F�F�F�-�d�4E�s�K�K�K�	L�	L�	L�	L�	L�	L�	L�	L�	L�	L�	L�	L����	L�	L�	L�	L�	L�	Ls�#A�A	�A	N)	r{rFrGr�rrrJrr�r�rXr$r"r�r�J	sZ������A�A�A� �X���3�\�B�B�L�L�C�B�L�L�Lr$r�c	�`�t�||f��}|s|�d|�d|�d���t�||f|���}|s|�d|�d|�d���tjr+t
j�d|�d|�d|�d���dSdS)Nr�r�r�r�r�r�r�)r
r�r/rr�r�r�r�)�testr�r=r�r2s     r"r�r�d	s���

�
$�
$�d�D�\�
2�
2�C��D��	�	�	�t�t�t�T�T�T�B�C�C�C�

�
$�
$�d�D�\�D�
$�
A�
A�C��D��	�	�	�t�t�t�T�T�T�B�C�C�C���Z��
�������d�d�d�TW�TW�TW�X�Y�Y�Y�Y�Y�Z�Zr$c	�.�	t�||ft���}|�d|�d|�d|�d���dS#tj$r?}t
jr(tj�	d|z��Yd}~dSYd}~dSd}~wwxYw)Nr�zGot server certificate z for r�r�z%s
)
r
r�r�r/r�rr�r�r�r�)r�r�r=r2�xs     r"r�r�o	s���N��(�(�$����(�I�I��	
�	�	�	�C�C�C����t�t�t�L�M�M�M�M�M���<�)�)�)��?�	)��J���V�a�Z�(�(�(�(�(�(�(�(�(�	)�	)�	)�	)�	)�	)�����)���s�#A�B�.B�B)�make_https_serverc�l�eZdZGd�dej��Z					d
d�Zd�Zd�Zdd	�Z	d
�Z
d�Zd�ZdS)rCc�4�eZdZ	d�Zd�Zd�Zd�Zd�Zd�ZdS)�$ThreadedEchoServer.ConnectionHandlerc���||_d|_||_||_|j�d��d|_tj�|��d|_	dS�NFT)
r<�runningr��addrr@�sslconn�	threading�Thread�__init__�daemon)r�r<�connsockr�s    r"r�z-ThreadedEchoServer.ConnectionHandler.__init__�	s]�� �D�K� �D�L� �D�I��D�I��I�!�!�$�'�'�'��D�L���%�%�d�+�+�+��D�K�K�Kr$c��	|jj�|jd���|_|jj�|j�����|jj�|j�����|jjj	tjkr�|j���}tjrC|jjr7t j�dt'j|��zdz��|j�d��}tjr^|jjrR|� t j�d��n0t j�dt+|���d���|j���}tjr>|jjr2t j�dt/|��zdz��dS#t0t2t4f$r�}|jj�t/|����|jjr't9d	t;|j��zd
z��d|_|� ��Yd}~dSd}~wtj!tDf$r�}|jj�t/|����|jjr't9d	t;|j��zd
z��|j#tFj$krDt j%dkr4d|_|j�&��|� ��Yd}~dSd}~wwxYw)
NTr�z client cert is r�z client did not provide a cert
z cert binary is zb
z" server: connection cipher is now z'
 server:  bad connection attempt from z:
F�darwin)'r<r�r�r�r��selected_alpn_protocolsr��selected_alpn_protocolr�r�r
r�rsrr��chattyr�r�r�r�r�rbr�r\�ConnectionResetError�BrokenPipeError�ConnectionAbortedError�conn_errorsr�r�r�r�r�r�r_r��
EPROTOTYPErL�stop)r�r��cert_binaryr�r6s     r"�	wrap_connz.ThreadedEchoServer.ConnectionHandler.wrap_conn�	s��;
�#�{�2�>�>��I�4� ?� 1� 1�����3�:�:�4�<�;^�;^�;`�;`�a�a�a�T��*�1�1�$�,�2M�2M�2O�2O�P�P�P��;�&�2�c�6G�G�G��<�3�3�5�5�D���[�4�;�+=�[��
�(�(�);�f�n�T�>R�>R�)R�UY�)Y�Z�Z�Z�"&�,�":�":�4�"@�"@�K���W�4�;�+=�W�&�.��J�,�,�-O�P�P�P�P��J�,�,�-U��K�@P�@P�-U�-U�-U�V�V�V���,�,�.�.���?�`�t�{�'9�`��J�$�$�%I�C�PV�K�K�%W�Z^�%^�_�_�_��t��o)�/�;Q�R�
�
�
���'�.�.�s�1�v�v�6�6�6��;�%�g� �!K�d�SW�S\�o�o�!]�`e�!e�f�f�f�$����
�
�����u�u�u�u�u������L�'�*�
�
�
���'�.�.�s�1�v�v�6�6�6��;�%�g� �!K�d�SW�S\�o�o�!]�`e�!e�f�f�f�
�7�e�.�.�.�3�<�8�3K�3K�#(�D�L��K�$�$�&�&�&��J�J�L�L�L��u�u�u�u�u�����-
���s&�A!H	�	M<� A:J � M<�9B8M7�7M<c�v�|jr|j���S|j�d��S)Nr�)r�rLr�r`r�s r"rLz)ThreadedEchoServer.ConnectionHandler.read�	s4���|�
,��|�(�(�*�*�*��y�~�~�d�+�+�+r$c�x�|jr|j�|��S|j�|��Sr)r�r�r�rd)r�r�s  r"r�z*ThreadedEchoServer.ConnectionHandler.write�	s6���|�
-��|�)�)�%�0�0�0��y�~�~�e�,�,�,r$c�|�|jr|j���dS|j���dSr)r�r�r�r�s r"r�z*ThreadedEchoServer.ConnectionHandler.close�	s>���|�
"���"�"�$�$�$�$�$��	���!�!�!�!�!r$c��d|_|jjs|���sdS|j�r	|���}|���}|sTd|_	|j���|_d|_n#t$rYnwxYw|�
���n�|dkrMtjr+|jj
rtj�d��|�
��dS|jjrj|dkrdtjr+|jj
rtj�d��|�d��|���sdS�n|jjr�|jr�|dkr�tjr+|jj
rtj�d	��|�d��|j���|_d|_tjr+|jj
rtj�d
���n>|dkr�tjr+|jj
rtj�d��|j�d
��}|�t%|���d��dz���n�|dkr�tjr+|jj
rtj�d��	|j���|�d���n?#t*j$rC}|�t%|���d��dz��Yd}~�n�d}~wwxYw|dkrG|j����|�d���n�|�d���n�|dkrS|j���}|�t%|���d��dz���nD|dkrX|jj���}|�t5|���dd��dz��n�|dkrX|jj���}|�t5|���dd��dz��n�tjrU|jj
rI|jrdpd}tj�d|�d|�d|����d|�d�	��|�|�����n�#t$r�}|jjrHtjr<t?|t@��rtCd |j"����ntGd!��	|�d"��n#t$rYnwxYw|�
��d|_|j�$��Yd}~nd}~wwxYw|j��dSdS)#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 z (z), sending back z)...
z Connection reset by peer: zTest server failure:
sERROR
)%r�r<�starttls_serverr�rL�stripr�rar�r_r�rr��connectionchattyr�r�r�r�r�r��verify_client_post_handshaker
r�rsr��get_verified_chainrb�to_bytes�get_unverified_chainr2r�r[�ConnectionError�printr�r�r�)r��msg�strippedr�r6r��certs�ctypes        r"�runz(ThreadedEchoServer.ConnectionHandler.run�	sY���D�L��;�.�
��~�~�'�'���F��,�^
'�]'��)�)�+�+�C�"�y�y�{�{�H�#�D0�',���0�(,��(;�(;�(=�(=�D�I�,0�D�L�L��
 '�!�!�!�!�D�	!�����
�
�����!�W�,�,�"�?�T�t�{�/K�T��J�,�,�-R�S�S�S��
�
�������+�5�20�"�k�1�1�"�?�d�t�{�/K�d��J�,�,�-b�c�c�c��
�
�7�+�+�+�#�~�~�/�/�#�"�F�#��+�5�+0�$�,�+0�&�)�3�3�"�?�b�t�{�/K�b��J�,�,�-`�a�a�a��
�
�7�+�+�+�$(�L�$7�$7�$9�$9��	�'+���"�?�\�t�{�/K�\��J�,�,�-Z�[�[�[��!�%5�5�5�"�?�r�t�{�/K�r��J�,�,�-p�q�q�q�#�|�?�?��M�M���
�
�4��:�:�#4�#4�Z�#@�#@�5�#H�I�I�I�I�!�V�+�+�"�?�Z�t�{�/K�Z��J�,�,�-X�Y�Y�Y�0� �L�E�E�G�G�G�!�J�J�w�/�/�/�/�� #�|�K�K�K� �J�J�t�A�w�w�~�~�j�'A�'A�E�'I�J�J�J�J�J�J�J�J�����K����"�Z�/�/��<�3�3�5�5�A� �J�J�y�1�1�1�1� �J�J�z�2�2�2�2�!�Z�/�/�#�|�7�7�9�9���
�
�4��:�:�#4�#4�Z�#@�#@�5�#H�I�I�I�I�!�%5�5�5� $�� 4� G� G� I� I���
�
�3�u�:�:�#6�#6�q�%�#@�#@�5�#H�I�I�I�I�!�%7�7�7� $�� 4� I� I� K� K���
�
�3�u�:�:�#6�#6�q�%�#@�#@�5�#H�I�I�I�I�#�O�Q� �K�8�Q�%)�\�%A�k�$S�m�E��J�,�,�,�03���U�U�U�C�I�I�K�K�K�K����.P�Q�Q�Q��
�
�3�9�9�;�;�/�/�/����'�'�'��{�)�	C�g�o�	C�%�a��9�9�C�"� I�d�i� I� I�����)�)A�B�B�B���
�
�:�.�.�.�.��"�����������J�J�L�L�L�#(�D�L��K�$�$�&�&�&�&�&�&�&�&�����+'����S�,�^
'�^
'�^
'�^
'�^
's��1U<�%B�U<�
B�U<�B�A*U<�A2U<�8FU<�L<�%U<�<N�8N	�U<�	N�G-U<�<
X?�AX:�W1�0X:�1
W>�;X:�=W>�>7X:�:X?N)	r{rFrGr�r�rLr�r�rrXr$r"�ConnectionHandlerr�~	sy������	8�	�	�	�<	�<	�<	�|	,�	,�	,�	-�	-�	-�	"�	"�	"�c	'�c	'�c	'�c	'�c	'r$rNTFc��|
r|
|_n�t�|�|ntj��|_|�|ntj|j_|r|j�|��|r|j�|��|r|j�|��|	r|j�	|	��||_
||_||_tj
��|_tj|j��|_d|_d|_g|_g|_g|_t.j�|��d|_dSr�)r�r
rlr_r�r�r�r��set_alpn_protocolsrSr�rrr�r�rr6r=�flag�activer�r�r�r�r�r�r�)r��certificate�ssl_version�certreqs�cacertsr�rr�alpn_protocolsr�r�s           r"r�zThreadedEchoServer.__init__C
sS��
�	2�"�D�L�L��>�>�-8�-D�+6�+�/2�/F�H�H�D�L�5=�4H���-0�]�
�L�$��
<���2�2�7�;�;�;��
:���,�,�[�9�9�9��
@���/�/��?�?�?��
2���(�(��1�1�1���� 0���.����M�O�O��	�!�+�D�I�6�6��	���	����')��$� ��������!�!�$�'�'�'�����r$c��|�tj����|j���|Sr��startr��Eventr!�waitr�s r"�	__enter__zThreadedEchoServer.__enter__e
�3���
�
�9�?�$�$�%�%�%��	�������r$c�V�|���|���dSr)r�r�r�rts  r"�__exit__zThreadedEchoServer.__exit__j
s ���	�	�����	�	�����r$c�R�||_tj�|��dSr�r!r�r�r*�r�r!s  r"r*zThreadedEchoServer.startn
�&����	�����t�$�$�$�$�$r$c��|j�d��|j�d��d|_|jr|j���|j�rf	|j���\}}tjr9|j	r2tj�dt|��zdz��|�|||��}|���|���n�#t"$r9}tjr#tj�d|�d���Yd}~n~d}~wt$$r|���Yn[t($rO}tjr9|j	r2tj�dt|��zdz��Yd}~nd}~wwxYw|j��f|���dS)Ng�?r.Tz server:  new connection from r�z connection timeout z connection handling failed: )r�ro�listenr"r!r�r�rr�r�r�r�r�r�rr*r�TimeoutError�KeyboardInterruptr��
BaseExceptionr�)r��newconn�connaddr�handlerr6s     r"rzThreadedEchoServer.runr
s����	���S�!�!�!��	�����������9�	��I�M�M�O�O�O��k�	J�
J�$(�I�$4�$4�$6�$6�!����?�>�t�{�>��J�$�$�%E�'+�H�~�~�&6�8<�&=�>�>�>��0�0��w��I�I���
�
�������������
E�
E�
E��?�E��J�$�$�%C�A�%C�%C�%C�D�D�D����������$�
�
�
��	�	������ �
J�
J�
J��?�J�t�{�J��J�$�$�7�$�q�'�'�A�D�H�J�J�J����������
J�����k�	J�&	
�
�
�����s,�%B D�
F?�/E�!F?�'	F?�0AF:�:F?c�X�|j�"|j���d|_dSdSr)r�r�r�s r"r�zThreadedEchoServer.close�
s/���9� ��I�O�O�����D�I�I�I�!� r$c��d|_dS�NF)r"r�s r"r�zThreadedEchoServer.stop�
s
������r$)
NNNNTFFNNNr)
r{rFrGr�r�rr�r-r1r*rr�r�rXr$r"rCrC|	s�������C'�C'�C'�C'�C'�I�,�C'�C'�C'�J6:�(,�FK� $�'+�	 � � � �D���
���%�%�%�%����8���
����r$rCc�`�eZdZGd�dej��Zd�Zd�Zd�Zd�Z	dd�Z
d	�Zd
�ZdS)�AsyncoreEchoServerc�F�eZdZGd�dej��Zd�Zd�Zd�ZdS)�AsyncoreEchoServer.EchoServerc�2�eZdZd�Zd�Zd�Zd�Zd�Zd�ZdS)�/AsyncoreEchoServer.EchoServer.ConnectionHandlerc��t|d|d���|_tj�||j��d|_|���dS)NTF)r�r�r�)r�r�r	�dispatcher_with_sendr��_ssl_accepting�_do_ssl_handshake)r��connr�s   r"r�z8AsyncoreEchoServer.EchoServer.ConnectionHandler.__init__�
sb��.�t��7?�FK�M�M�M����-�6�6�t�T�[�I�I�I�&*��#��&�&�(�(�(�(�(r$c���t|jtj��rN|j���dkr1|���|j���dk�1dS)NrT)r[r�r
r�rV�handle_read_eventr�s r"�readablez8AsyncoreEchoServer.EchoServer.ConnectionHandler.readable�
sc���d�k�3�=�9�9�1��+�-�-�/�/�!�3�3��.�.�0�0�0��+�-�-�/�/�!�3�3��tr$c��	|j���d|_dS#tjtjf$rYdStj$r|���cYStj$r�t$r?}|j
dtjkr|���cYd}~SYd}~dSd}~wwxYw)NFr)
r�rBrIr
rAr}r��handle_closer�r_rtr��ECONNABORTED)r��errs  r"rJzAAsyncoreEchoServer.EchoServer.ConnectionHandler._do_ssl_handshake�
s���0��K�,�,�.�.�.�+0�D�'�'�'���,�c�.C�D�����F�F���/�/�/��,�,�.�.�.�.�.��|������3�3�3��x��{�e�&8�8�8�#�0�0�2�2�2�2�2�2�2�2�9�8�8�8�8�8�����3���s'�$�B=�"B=�&B=�>.B8�,B=�8B=c�^�|jr|���dS|�d��}tjr/t
j�dt|��z��|s|�	��dS|�
|�����dS)Nr�z server:  read %s from client
)rIrJr`rr�r�r�r�r�r�rdr2)r�r�s  r"�handle_readz;AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_read�
s����&�	0��*�*�,�,�,�,�,��9�9�T�?�?�D���Y��
�(�(�)J�T�RV�Z�Z�)W�X�X�X��0��
�
�������	�	�$�*�*�,�,�/�/�/�/�/r$c��|���tjr)tj�d|jz��dSdS)Nz server:  closed connection %s
)r�rr�r�r�r�r�r�s r"rPz<AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_close�
sJ���
�
�����?�W��J�$�$�%G�$�+�%U�V�V�V�V�V�W�Wr$c���rrXr�s r"r�z<AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_error�
s��r$N)	r{rFrGr�rNrJrTrPr�rXr$r"rrF�
sq������
)�
)�
)�
�
�
�

0�

0�

0�

0�

0�

0�
W�
W�
W�

�
�
�
�
r$rc��||_tjtjtj��}t	j|d��|_tj�	||��|�
d��dS)NrTr.)r�r�rU�SOCK_STREAMrr6r=r	�
dispatcherr�r7r�s   r"r�z&AsyncoreEchoServer.EchoServer.__init__�
s_��$�D�M��=����1C�D�D�D�%�/��b�9�9�D�I���(�(��t�4�4�4��K�K��N�N�N�N�Nr$c��tjr"tj�d|z��|�||j��dS)Nz$ server:  new connection from %s:%s
)rr�r�r�r�rr�)r��sock_objr�s   r"�handle_acceptedz-AsyncoreEchoServer.EchoServer.handle_accepted�
sG����
P��
� � �!H�$�!N�O�O�O��"�"�8�T�]�;�;�;�;�;r$c���rrXr�s r"r�z*AsyncoreEchoServer.EchoServer.handle_error�
s��r$N)	r{rFrGr	rHrr�r\r�rXr$r"�
EchoServerrD�
so������1	�1	�1	�1	�1	�� =�1	�1	�1	�f	�	�	�	<�	<�	<�
	�	�	�	�	r$r^c���d|_d|_|�|��|_|jj|_t
j�|��d|_dSr�)	r!r"r^r<r=r�r�r�r�)r�r�s  r"r�zAsyncoreEchoServer.__init__�
sQ����	�����o�o�h�/�/����K�$��	���!�!�$�'�'�'�����r$c�2�d|jj�d|j�d�S)N�<r}�>)rzr{r<r�s r"�__str__zAsyncoreEchoServer.__str__�
s ��� �N�3�3�3�T�[�[�[�A�Ar$c��|�tj����|j���|Srr)r�s r"r-zAsyncoreEchoServer.__enter__�
r.r$c��tjrtj�d��|���tjrtj�d��|���tjrtj�d��t�d���dS)Nz cleanup: stopping server.
z! cleanup: joining server thread.
z cleanup: successfully joined.
T)�
ignore_all)	rr�r�r�r�r�rr	�	close_allr0s  r"r1zAsyncoreEchoServer.__exit__�
s����?�	=��J���;�<�<�<��	�	�����?�	C��J���A�B�B�B��	�	�����?�	A��J���?�@�@�@����d��+�+�+�+�+r$Nc�R�||_tj�|��dSrr3r4s  r"r*zAsyncoreEchoServer.start�
r5r$c��d|_|jr|j���|jr,	t�d��n#YnxYw|j�*dSdS)NTr�)r"r!r�r	�loopr�s r"rzAsyncoreEchoServer.run�
st������9�	��I�M�M�O�O�O��k�	�
��
�
�a� � � � ��
������	�k�	�	�	�	�	s�A�Ac�F�d|_|j���dSr@)r"r<r�r�s r"r�zAsyncoreEchoServer.stops#�������������r$r)
r{rFrGr	rYr^r�rcr-r1r*rr�rXr$r"rBrB�
s�������B�B�B�B�B�h�)�B�B�B�H���B�B�B����

,�
,�
,�%�%�%�%��������r$rBr�Fc�(�	i}t||d���}|5|�tj��||���5}	|	�t|jf��|t
|��t|��fD]�}
|r.tj	r"tj�d|z��|	�|
��|	�
��}|r.tj	r"tj�d|z��||���krRtd|dd�t!|��|dd����t!|��fz�����|	�d��|r+tj	rtj�d	��|�|	���|	���|	���|	���|	���|	j|	jd
���|	���ddd��n#1swxYwY|j|d<|j|d<ddd��n#1swxYwY|S)
NF�r�r�r)r��session� client:  sending %r...
� client:  read %r
�4bad data <<%r>> (%d) received; expected <<%r>> (%d)
��over
� client:  closing connection.
)�compressionr��peercert�client_alpn_protocolr9�session_reusedrn�server_alpn_protocols�server_shared_ciphers)rCr�r�r�r�r=r�rYrr�r�r�r�rLr2�AssertionErrorrbr�rur�rsr�r9rxrnr�r�r�)r�r��indatar�r�sni_namernrr<r��arg�outdatas            r"�server_params_testr�s���
�E�
��'-�16�8�8�8�F�
�"?�"?�
�
'�
'��
��� (�'�(�;�;�	�>?�
�I�I�t�V�[�)�*�*�*��	�&� 1� 1�:�f�3E�3E�F�
>�
>��#�B���B��
�(�(�7�&�@�B�B�B���������&�&�(�(��#�J���J��
�(�(�)>��)H�I�I�I��f�l�l�n�n�,�,�(�O�"�3�B�3�<��W���!�#�2�#�;�,�,�.�.��F���=�=�>�>�>�-�

�G�G�I�����
H��?�H��J�$�$�%F�G�G�G��L�L� �}�}����(�(�*�*��M�M�O�O�()�(@�(@�(B�(B��9�9�;�;�"#�"2��9���
�
�
�
�G�G�I�I�I�?	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�@*0�)G��%�&�)/�)>��%�&�E"?�"?�"?�"?�"?�"?�"?�"?�"?�"?�"?����"?�"?�"?�"?�F�Ls6�*J�HI�J�I 	� J�#I 	�$J�J�Jc���	|�tj}tjdtjdtjdi|}tjr[|rdpd}tj�|t�	|��t�	|��|fz��tj��5t�|��}|xj
|zc_
t�|��}	|	xj
|zc_
ddd��n#1swxYwYt�|d��}
|
�]t!|	d��rM|tjkr=|	j|
kr2tj��5|
|	_ddd��n#1swxYwY|jtjkr|�d��t+|	|��||	fD]=}||_|�t0��|�t4���>	t7||	dd�	��}|sFt9d
t�	|���dt�	|���d����|d
ur'||dkrt9d|�d|d�����dSdS#tj$r|r�YdSt<$r#}
|s|
jt>j kr�Yd}
~
dSd}
~
wwxYw)Nr�r�r�z %s->%s %s
z
 {%s->%s} %s
rQrUF)r�rzClient protocol z  succeeded with server protocol r�Tr9zversion mismatch: expected z, got )!r
r�r�r�rr�r�r�r��get_protocol_namerr�rlrx�PROTOCOL_TO_TLS_VERSIONr�rRr^rQrcrSrVr�r�r�r�r�r�r{r�r_r��
ECONNRESET)�server_protocol�client_protocol�expect_success�	certsreqs�server_options�client_options�certtype�	formatstrr�r��min_versionrUrr6s              r"�try_protocol_combor�<s�������M�	��
�{���?���?���	�H�
��%�#�6��K�;K�	��
�����/�/��@�@��/�/��@�@�"�$�$�	%�	%�	%�

�	'�	)�	)�1�1�����8�8�����.�0�������8�8�����.�0���1�1�1�1�1�1�1�1�1�1�1����1�1�1�1�*�-�-�o�t�D�D�K���
�N�$5�6�6�	 �
�s�/�/�/��*�[�8�8��
+�
-�
-�	9�	9�-8�N�*�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9����	9�	9�	9�	9���#�"2�2�2��"�"�5�)�)�)����7�7�7���/�.�.��#������O�,�,�,��!�!�*�-�-�-�-�G�"�>�>�*/�%�I�I�I���	G� �.��(�(��9�9�9�9��(�(��9�9�9�9�;�<�<�
<��D�(�(� �E�)�$4�4�4� �.�$2�N�N�E�)�4D�4D�"F�G�G�
G�)�(�4�4���<�����	��	�	�	������	�Q�W��(8�8�8��9�8�8�8�8�8��������sC�6AD�D�D�=F�F�F�J#�#K$�8	K$�K�K$c�,�eZdZd�Zd�Zd�Zd�Zeje	j
d��d���Zd�Zd�Z
d	�Zd
�Zed��d���Zd
�Zd�Zed��d���Zd�Zed��d���Zed��d���Zed��d���Zed��d���Zd�Zd�Zd�Zd�Zd�Zd�Zd �Z d!�Z!d"�Z"d#�Z#d$�Z$d%�Z%ed��d&���Z&ed��ed��e'd'�������Z(ed��e'd(�����Z)ed��ed��e'd)�������Z*ed��d*���Z+d+�Z,ejd,e	j-vd-��d.���Z.d/�Z/eje0e	d0��d1��d2���Z1ej2e3d3��d4���Z4d5�Z5d6�Z6d7�Z7d8�Z8d9�Z9d:�Z:d;�Z;d<�Z<d=�Z=d>�Z>d?�Z?d@�Z@dA�ZAdB�ZBdC�ZCdD�ZDdES)F�
ThreadedTestsc	��	tjrtj�d��t��\}}}|�tjtj	���5t||dd|���ddd��n#1swxYwYd|_|�tj	tj���5|�tj
��5}t||dd|���ddd��n#1swxYwY|�dt|j����ddd��n#1swxYwY|�tj	tj	���5|�tj
��5}t||dd���ddd��n#1swxYwY|�dt|j����ddd��n#1swxYwY|�tjtj���5|�tj
��5}t||dd���ddd��n#1swxYwY|�dt|j����ddd��dS#1swxYwYdS)Nr�)rhr<T)r�r�r�rr}Fz@Cannot create a client socket with a PROTOCOL_TLS_SERVER context)r�r�r�r)rr�r�r�r�r�r�r
r`r_r�r�r�r�r�r\r�)r�r�r�r�r6s     r"�	test_echozThreadedTests.test_echo�sz��@��?�	#��J���T�"�"�"�3B�3D�3D�0����
�\�\��!8��AX�\�
Y�
Y�	2�	2��n�.<�&*�T�(0�
2�
2�
2�
2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2����	2�	2�	2�	2�).��%�
�\�\��!8��AX�\�
Y�
Y�		�		��"�"�3�<�0�0�
6�A�"�.�2@�*.��,4�6�6�6�6�
6�
6�
6�
6�
6�
6�
6�
6�
6�
6�
6����
6�
6�
6�
6�

�M�M�R��A�K� � �
�
�
�
		�		�		�		�		�		�		�		�		�		�		����		�		�		�		��\�\��!8��AX�\�
Y�
Y�	�	��"�"�3�<�0�0�
G�A�"�.�2@�*.��G�G�G�G�
G�
G�
G�
G�
G�
G�
G�
G�
G�
G�
G����
G�
G�
G�
G�
�M�M�R��A�K� � �
�
�
�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	��\�\��!8��AX�\�
Y�
Y�	"�	"��"�"�3�<�0�0�
G�A�"�.�2@�*.��G�G�G�G�
G�
G�
G�
G�
G�
G�
G�
G�
G�
G�
G����
G�
G�
G�
G�
�M�M�R��A�K� � �
"�
"�
"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"�	"����	"�	"�	"�	"�	"�	"s��*B�B�B� E�(D	�=E�	D
	�
E�D
	�+E�E�E�> G=�F>�2G=�>G	�G=�G	�+G=�=H�H�3 J3�I3�'J3�3I7	�7J3�:I7	�;+J3�3J7�:J7c�N�tjrtj�d��t��\}}}t
|d���}|5|�tj��d|���5}|�	t|jf��|�t��5|���ddd��n#1swxYwY|���|���}|�|d��|���}tjrftj�t%j|��dz��tj�dt)|��zdz��d|vr*|�d	t%j|��z��d
|dvr|�d��|�d|��|�d
|��t.�|d��}t.�|d
��}	|�||	��ddd��n#1swxYwYddd��dS#1swxYwYdS)Nr�F�r�r�)r�r��Can't get peer certificate.zConnection cipher is z.
r7z$No subject field in certificate: %s.r,zkMissing or invalid 'organizationName' field in certificate subject; should be 'Python Software Foundation'.r5r4)rr�r�r�r�r�rCr�r�r�r�r=r�r�rsrBrGr�r�r�r\r/r�r
rrE)
r�r�r�r�r<r�r�r��before�afters
          r"�test_getpeercertzThreadedTests.test_getpeercert�s,���?�	#��J���T�"�"�"�3B�3D�3D�0����#�N�5�I�I�I��
�	/�	/��+�+�F�M�O�O�DI�<D�,�F�F�
/�IJ��	�	�4���-�.�.�.��&�&�z�2�2�$�$��M�M�O�O�O�$�$�$�$�$�$�$�$�$�$�$����$�$�$�$���� � � ��}�}��������&C�D�D�D��������?�T��J�$�$�V�^�D�%9�%9�D�%@�A�A�A��J�$�$�%<�s�6�{�{�%J�U�%R�S�S�S��D�(�(��I�I�D�$�n�T�2�2�3�4�4�4�I��	�?�+�+��I�I�B�C�C�C��
�
�k�4�0�0�0��
�
�j�$�/�/�/��1�1�$�{�2C�D�D���0�0��j�1A�B�B�������.�.�.�7
/�
/�
/�
/�
/�
/�
/�
/�
/�
/�
/����
/�
/�
/�
/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/����	/�	/�	/�	/�	/�	/s[�*J�;<J�7C�J�C�J�C� FJ�6J�J	�J�	J	�
J�J�!Jc���tjrtj�d��t��\}}}t
tdd��}|�|j	tj
|z��t|d���}|5|�tj
��|���5}|�t|jf��|���}|�|d��ddd��n#1swxYwYddd��n#1swxYwY|xj	tjzc_	t|d���}|5|�tj
��|���5}|�tjd��5|�t|jf��ddd��n#1swxYwYddd��n#1swxYwYddd��n#1swxYwY|�t.��t|d���}|5|�tj
��|���5}|�t|jf��|���}|�|d��ddd��n#1swxYwYddd��dS#1swxYwYdS)	Nr�r�rTr�r�r�rv)rr�r�r�r�r�r]r
r�r�r�rCr�r�r�r�r=rsrGr�r�r�r��CRLFILE)r�r�r�r�r�r<r�r�s        r"�test_crl_checkzThreadedTests.test_crl_check�s����?�	#��J���T�"�"�"�3B�3D�3D�0����
�S�5�q�
9�
9������4�c�6H�2�6M�N�N�N�$�N�4�H�H�H��
�	E�	E��+�+�F�M�O�O�<D�,�F�F�
E�IJ��	�	�4���-�.�.�.��}�}��������&C�D�D�D�	
E�
E�
E�
E�
E�
E�
E�
E�
E�
E�
E����
E�
E�
E�
E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E����	E�	E�	E�	E�	�#�#�s�'@�@�#�#�#�N�4�H�H�H��
�	3�	3��+�+�F�M�O�O�<D�,�F�F�
3�IJ��+�+�C�L�,G�I�I�3�3��I�I�t�V�[�1�2�2�2�3�3�3�3�3�3�3�3�3�3�3����3�3�3�3�
3�
3�
3�
3�
3�
3�
3�
3�
3�
3�
3����
3�
3�
3�
3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3����	3�	3�	3�	3�	�,�,�W�5�5�5�#�N�4�H�H�H��
�	E�	E��+�+�F�M�O�O�<D�,�F�F�
E�IJ��	�	�4���-�.�.�.��}�}��������&C�D�D�D�	
E�
E�
E�
E�
E�
E�
E�
E�
E�
E�
E����
E�
E�
E�
E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E����	E�	E�	E�	E�	E�	Es��)D'�8AD�D'�D	�D'�D	�D'�'D+�.D+�)H�!G.�)"G�G.�G�G.�G�G.�"H�.G2	�2H�5G2	�6H�H	�H	�=)K�&AJ>�2K�>K	�K�K	�K�K�Kc��tjrtj�d��t��\}}}t
|d���}|5|�tj��|���5}|�	t|jf��|���}|�
|d��ddd��n#1swxYwYddd��n#1swxYwYt
|d���}|5|�tj��d���5}|�tjd��5|�	t|jf��ddd��n#1swxYwYddd��n#1swxYwYddd��n#1swxYwYt
|d���}|5tj��5}|�t"d��5|�|��ddd��n#1swxYwYddd��n#1swxYwYddd��dS#1swxYwYdS)	Nr�Tr�r�r�r�z:Hostname mismatch, certificate is not valid for 'invalid'.z'check_hostname requires server_hostname)rr�r�r�r�r�rCr�r�r�r�r=rsrGr�r
r�r�)r�r�r�r�r<r�r�s       r"rz!ThreadedTests.test_check_hostnamesW���?�	#��J���T�"�"�"�3B�3D�3D�0����$�N�4�H�H�H��
�	E�	E��+�+�F�M�O�O�<D�,�F�F�
E�IJ��	�	�4���-�.�.�.��}�}��������&C�D�D�D�	
E�
E�
E�
E�
E�
E�
E�
E�
E�
E�
E����
E�
E�
E�
E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E����	E�	E�	E�	E�$�N�4�H�H�H��
�	3�	3��+�+�F�M�O�O�<E�,�G�G�
3�JK��+�+��,�T�V�V�3�3��I�I�t�V�[�1�2�2�2�3�3�3�3�3�3�3�3�3�3�3����3�3�3�3�
3�
3�
3�
3�
3�
3�
3�
3�
3�
3�
3����
3�
3�
3�
3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3����	3�	3�	3�	3�$�N�4�H�H�H��
�	2�	2�����
2�A��+�+�J�,U�W�W�2�2�"�.�.�q�1�1�1�2�2�2�2�2�2�2�2�2�2�2����2�2�2�2�
2�
2�
2�
2�
2�
2�
2�
2�
2�
2�
2����
2�
2�
2�
2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2����	2�	2�	2�	2�	2�	2s��)C)�:AC�C)�C	�C)�C	�C)�)C-�0C-�)F-�0!F�"E?�3F�?F�F�F�F�
F-�F	�F-�F	�F-�-F1�4F1�I�H4�;H�H4�H!�!H4�$H!�%H4�(I�4H8	�8I�;H8	�<I�I�Iz)test requires hostname_checks_common_namec��t��\}}}d|_t|d���}|5|�t	j��|���5}|�t|jf��ddd��n#1swxYwYddd��n#1swxYwYtt��\}}}d|_t|d���}|5|�t	j��|���5}|�	tj��5|�t|jf��ddd��n#1swxYwYddd��n#1swxYwYddd��dS#1swxYwYdS)NFTr�r�)r�r�rCr�r�r�r�r=r�r�r
�SSLCertVerificationErrorrDs      r"r�z.ThreadedTests.test_hostname_checks_common_name%s���4C�3D�3D�0����5:��2�$�N�4�H�H�H��
�	/�	/��+�+�F�M�O�O�<D�,�F�F�
/�IJ��	�	�4���-�.�.�.�
/�
/�
/�
/�
/�
/�
/�
/�
/�
/�
/����
/�
/�
/�
/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/����	/�	/�	/�	/�
4C�9�3M�3M�0����5:��2�#�N�4�H�H�H��
�	3�	3��+�+�F�M�O�O�<D�,�F�F�
3�IJ��&�&�s�'C�D�D�3�3��I�I�t�V�[�1�2�2�2�3�3�3�3�3�3�3�3�3�3�3����3�3�3�3�
3�
3�
3�
3�
3�
3�
3�
3�
3�
3�
3����
3�
3�
3�
3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3����	3�	3�	3�	3�	3�	3s��)B�"B�8B�B	�B�B	�B�B�"B�)E>� E&�!"E�E&�E�E&�E�E&�E>�&E*	�*E>�-E*	�.E>�>F�Fc�:�t�tj��}|�t��|�d��t}t�tj��}|�t��t|d���}|5|�tj��|���5}|�
t|jf��|���}|�|d��|���d�d��}|�|dd�d	��ddd��n#1swxYwYddd��dS#1swxYwYdS�
NzECDHE:ECDSA:!NULL:!aRSATr�r�r�r�-r�)�ECDHE�ECDSA)r
rlr`r�r�rS�SIGNED_CERTFILE_ECC_HOSTNAMEr_r��SIGNED_CERTFILE_ECCrCr�r�r�r�r=rsrGr��split�r�r�r�r�r<r�r�r�s        r"�
test_ecc_certzThreadedTests.test_ecc_cert=s������(?�@�@���,�,�Z�8�8�8��"�"�#<�=�=�=�/������(?�@�@���&�&�':�;�;�;�$�N�4�H�H�H��
�	@�	@��+�+�F�M�O�O�<D�,�F�F�
@�IJ��	�	�4���-�.�.�.��}�}��������&C�D�D�D������A��,�,�S�1�1������r��r�
�,>�?�?�?�

@�
@�
@�
@�
@�
@�
@�
@�
@�
@�
@����
@�
@�
@�
@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@����	@�	@�	@�	@�	@�	@s7�,)F�BE8�,F�8E<	�<F�?E<	�F�F�Fc��t�tj��}|�t��tjj|_|�d��t}t�tj
��}|�t��|�t��t|d���}|5|�t!j��|���5}|�t$|jf��|���}|�|d��|���d�d��}|�|dd�d	��ddd��n#1swxYwYddd��dS#1swxYwYdSr�)r
rlr`r�r�rrkrhrSr�r_r�r�r�rCr�r�r�r�r=rsrGr�r�r�s        r"�test_dual_rsa_ecczThreadedTests.test_dual_rsa_eccRs$������(?�@�@���,�,�Z�8�8�8�*-��)?��&��"�"�#<�=�=�=�/������(?�@�@���&�&�':�;�;�;��&�&��7�7�7�$�N�4�H�H�H��
�	@�	@��+�+�F�M�O�O�<D�,�F�F�
@�IJ��	�	�4���-�.�.�.��}�}��������&C�D�D�D������A��,�,�S�1�1������r��r�
�,>�?�?�?�

@�
@�
@�
@�
@�
@�
@�
@�
@�
@�
@����
@�
@�
@�
@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@����	@�	@�	@�	@�	@�	@s7�)G�BF(�G�(F,	�,G�/F,	�0G�G�Gc��tjrtj�d��t
�t
j��}|�t��t
�t
j
��}t
j|_d|_
|�t��gd�}|D]�\}}t!|d���}|5|�t%j��|���5}|�|j|��|�t,|jf��|���}|�|j|��|�|d��ddd��n#1swxYwYddd��n#1swxYwY��t!|d���}|5|�t%j��d���5}|�t
j��5|�t,|jf��ddd��n#1swxYwYddd��n#1swxYwYddd��dS#1swxYwYdS)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�r�r�r�r
rlr_r��IDNSANSFILEr`r�r�r�r�r�rCr�r�r�r�r�r�r=rsrGr�r�)	r�r�r��
idn_hostnamesr��expected_hostnamer<r�r�s	         r"�test_check_hostname_idnz%ThreadedTests.test_check_hostname_idnls����?�	#��J���T�"�"�"�����(?�@�@���&�&�{�3�3�3��.�.��!8�9�9��!�/���!%����%�%�j�1�1�1�
�
�
�
�.3@�		I�		I�.�O�.�'��t�L�L�L�F��
I�
I��(�(�����9H�)�J�J�I�MN��$�$�Q�%6�8I�J�J�J��I�I�t�V�[�1�2�2�2��=�=�?�?�D��$�$�Q�%6�8I�J�J�J��O�O�D�*G�H�H�H�
I�I�I�I�I�I�I�I�I�I�I����I�I�I�I�
I�
I�
I�
I�
I�
I�
I�
I�
I�
I�
I����
I�
I�
I�
I��$�N�4�H�H�H��
�	3�	3��$�$�V�]�_�_�5I�%�K�K�
3�NO��&�&�s�';�<�<�3�3��I�I�t�V�[�1�2�2�2�3�3�3�3�3�3�3�3�3�3�3����3�3�3�3�
3�
3�
3�
3�
3�
3�
3�
3�
3�
3�
3����
3�
3�
3�
3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3����	3�	3�	3�	3�	3�	3s��)F,�BF�	F,�F�F,�F�F,�,F0	�3F0	�)I1�4 I�"I�6I�I�I�	I�
I�
I1�I	�I1� I	�!I1�1I5�8I5c�8�	t��\}}}|�t��tj|_tjj|_t|dd���}|5|�
tj��|���5}	|�t|jf��|�d��n�#tj$r8}t"jr"t&j�d|z��Yd}~n^d}~wt,$rN}|jt.jkr�t"jr"t&j�d|z��Yd}~nd}~wwxYwddd��n#1swxYwYddd��dS#1swxYwYdS)NTrmr�z'Use of invalid cert should have failed!z
SSLError is %r
z
socket.error is %r
)r�r�r�r
r�r�rrkrhrCr�r�r�r�r=r/r�rr�r�r�r�r_r�r��r�r�r�r�r<r�r6s       r"�test_wrong_cert_tls12z#ThreadedTests.test_wrong_cert_tls12�sN��	�
4C�3D�3D�0�����&�&�x�0�0�0�%(�%6��"�),��)?��&�#�"�4�$�
�
�
���	E�	E��*�*�6�=�?�?�;C�+�E�E�	E�HI�
E��	�	�4���-�.�.�.��	�	�C�D�D�D�D���<�
?�
?�
?��?�?��J�$�$�%9�A�%=�>�>�>�����������
C�
C�
C��7�e�.�.�.���?�C��J�$�$�%=��%A�B�B�B����������	
C����	E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E����	E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E�	E����	E�	E�	E�	E�	E�	Ess�))F�E7�!C�5E7�E(�.D
�E7�

E(�AE#�E7�#E(�(E7�+F�7E;	�;F�>E;	�?F�F�Fr�c��t��\}}}|�t��tj|_tjj|_tjj|_t|dd���}|5|�
tj��|d���5}|�t|jf��|�tjd��5|�d��|�d��|�d��|�d��ddd��n#1swxYwYddd��n#1swxYwYddd��dS#1swxYwYdS)	NTrmF�r��suppress_ragged_eofszalert unknown ca|EOF occurred�datar�sshould have failed already)r�r�r�r
r�r�rr�rQrCr�r�r�r�r=r�r�r�rLrDs      r"�test_wrong_cert_tls13z#ThreadedTests.test_wrong_cert_tls13�s'��3B�3D�3D�0�����&�&�x�0�0�0�%(�%6��"�),��)?��&�),��)?��&�#�"�4�$�
�
�
���
	�
	�
�
'�
'��
���8@�=B�(�D�D�
	�HI�
�I�I�t�V�[�)�*�*�*��'�'���/���
�
�
���� � � ����t�������5�6�6�6����t����
�
�
�
�
�
�
�
�
�
�
����
�
�
�
�
	�
	�
	�
	�
	�
	�
	�
	�
	�
	�
	����
	�
	�
	�
	�
	�
	�
	�
	�
	�
	�
	�
	�
	�
	�
	�
	����
	�
	�
	�
	�
	�
	s\�>*E:�(AE"�*AE�?E"�E�E"�E�E"�E:�"E&	�&E:�)E&	�*E:�:E>�E>c�������	tj���tj���tj���tj�t
������fd�}����fd�}tj|���}|���	|��|���dS#|���wxYw)Nc���������������\}}|�����������dSr)r7r�r�r�)�newsockr��
listener_gone�listener_readyr�s  ���r"�listenerz2ThreadedTests.test_rude_shutdown.<locals>.listener�se���
�H�H�J�J�J���� � � ��H�H�J�J�M�G�T��M�M�O�O�O�
�G�G�I�I�I��������r$c�T������tj��5}|�t�f������	t	|��}��d��n#t$rYnwxYwddd��dS#1swxYwYdS)Nz2connecting to closed SSL socket should have failed)r,r�r�r�r�r/r_)r�r�r�r�r=r�s  ����r"�	connectorz3ThreadedTests.test_rude_shutdown.<locals>.connector�s
������!�!�!�����
T�A��	�	�4��,�'�'�'��"�"�$�$�$�T�/��2�2�H��I�I�R�S�S�S�S�������D�����
T�
T�
T�
T�
T�
T�
T�
T�
T�
T�
T�
T����
T�
T�
T�
T�
T�
Ts5�1B�B�*B�
B
�
B�B
�
B�B!�$B!��target)	r�r+r�rr6r�r�r*r)r�r�r�rJr�r�r=r�s`   @@@@r"�test_rude_shutdownz ThreadedTests.test_rude_shutdown�s��������	�#��*�*��!��)�)�
��M�O�O���&�q�$�/�/��	 �	 �	 �	 �	 �	 �	 �
	T�
	T�
	T�
	T�
	T�
	T�
	T�
	T�
��H�-�-�-��	���	�	�	�	��I�K�K�K�
�F�F�H�H�H�H�H��A�F�F�H�H�H�H���s�
B3�3C	c	��tjrtj�d��t
�t
j��}|�t��t
�t
j
��}t|d���}|5|�tj
��t���5}	|�t |jf��n�#t
j$r�}d}|�|t
j��|�|jd��|�|j|��|�|t3|����|�dt3|����Yd}~nd}~wwxYwddd��n#1swxYwYddd��dS#1swxYwYdS)Nr�Tr�r�z&unable to get local issuer certificaterrrv)rr�r�r�r�r
rlr_r�r�r`rCr�r�r�r�r�r=r�rAr�r��verify_code�verify_messager�r�)r�r�r�r<r�r6rs       r"�test_ssl_cert_verify_errorz(ThreadedTests.test_ssl_cert_verify_error

sS���?�	#��J���T�"�"�"�����(?�@�@���&�&��7�7�7��.�.��!8�9�9��#�N�4�H�H�H��
�	H�	H��$�$�V�]�_�_�5M�%�O�O�

H�RS�H��I�I�t�V�[�1�2�2�2�2���|�H�H�H�B�C��)�)�!�S�-I�J�J�J��$�$�Q�]�B�7�7�7��$�$�Q�%5�s�;�;�;��M�M�#�t�A�w�w�/�/�/��M�M�"=�t�A�w�w�G�G�G�G�G�G�G�G�����
H����	

H�

H�

H�

H�

H�

H�

H�

H�

H�

H�

H����

H�

H�

H�

H�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H����	H�	H�	H�	H�	H�	Hsa�!.G�F9�!C3�2F9�3F*�BF%� F9�%F*�*F9�-G�9F=	�=G�F=	�G�G�Grfc�(�	tjrtj�d��ttjtjd��ttjtjdtj��ttjtjdtj	��ttjtj
d��td��r%ttjtjd��ttjtj
d��ttjtj
dtj���ttjtj
dtj���dS)Nr�TFr�r�)rr�r�r�r�r�r
�PROTOCOL_SSLv2r�r�r^ra�PROTOCOL_SSLv3rr�r�r�s r"�test_protocol_sslv2z!ThreadedTests.test_protocol_sslv2$
s*��G��?�	#��J���T�"�"�"��3�-�s�/A�4�H�H�H��3�-�s�/A�4��IZ�[�[�[��3�-�s�/A�4��IZ�[�[�[��3�-�s�/?��G�G�G��7�#�#�	N��s�1�3�3E�u�M�M�M��3�-�s�/A�5�I�I�I��3�-�s�/?��*-�/�	;�	;�	;�	;��3�-�s�/?��*-�/�	;�	;�	;�	;�	;�	;r$c��	tjrtj�d��td��ry	t
tjtj	d��nR#t$rE}tjr/tj�dt|��z��Yd}~nd}~wwxYwtd��r%t
tjtjd��t
tjtjd��td��r%t
tjtj
d��td��r0t
tjtjdtj��t
tjtjdtj��td��r0t
tjtj
dtj��td��r0t
tjtjdtj��t
tjtjdtj��td��r0t
tjtj
dtj��td��r1t
tjtjdtj���t
tjtjdtjtjz���td��r3t
tjtj
dtj���dSdS)	Nr�rfTz; SSL2 client to SSL23 server test unexpectedly failed:
 %s
rFr)r�)rr�r�r�r�rar�r
r^r�r_r\r�rr�r�r�r�r�)r�r�s  r"�test_PROTOCOL_TLSzThreadedTests.test_PROTOCOL_TLS6
s���H��?�	#��J���T�"�"�"��7�#�#�	"�
"�"�3�#3�S�5G��N�N�N�N���
"�
"�
"��?�"��J�$�$�W��a�&�&�!�"�"�"����������
"�����7�#�#�	L��s�/��1C�U�K�K�K��3�+�S�-=�t�D�D�D��7�#�#�	N��s�/��1C�W�M�M�M��7�#�#�	_��s�/��1C�U�C�L]�^�^�^��3�+�S�-=�t�S�EV�W�W�W��7�#�#�	a��s�/��1C�W�c�N_�`�`�`��7�#�#�	_��s�/��1C�U�C�L]�^�^�^��3�+�S�-=�t�S�EV�W�W�W��7�#�#�	a��s�/��1C�W�c�N_�`�`�`��7�#�#�	;��s�/��1C�U�*-�/�
;�
;�
;�
;�	�3�+�S�-=�t�*-�/�C�O�*K�	M�	M�	M�	M��7�#�#�	?��s�/��1C�U�.1�o�
?�
?�
?�
?�
?�
?�	?�	?s�%A#�#
B2�-;B-�-B2rc�|�	tjrtj�d��ttjtjd��ttjtjdtj��ttjtjdtj	��td��r%ttjtjd��ttjtjdtj
���ttjtjd��dS)Nr�rrfFr�)rr�r�r�r�r�r
r�r�r�rar�r^r�rr�s r"�test_protocol_sslv3z!ThreadedTests.test_protocol_sslv3`
s���G��?�	#��J���T�"�"�"��3�-�s�/A�7�K�K�K��3�-�s�/A�7�C�L]�^�^�^��3�-�s�/A�7�C�L]�^�^�^��7�#�#�	N��s�1�3�3E�u�M�M�M��3�-�s�/?��*-�/�	;�	;�	;�	;��3�-�s�/A�5�I�I�I�I�Ir$rc��	tjrtj�d��ttjtjd��ttjtjdtj��ttjtjdtj	��td��r%ttjtjd��td��r%ttjtjd��ttjtj
dtj���dS)Nr�rrfFrr�)rr�r�r�r�r�r
rr�r�rar�r�r^r�r�s r"�test_protocol_tlsv1z!ThreadedTests.test_protocol_tlsv1n
s���F��?�	#��J���T�"�"�"��3�-�s�/A�7�K�K�K��3�-�s�/A�7�C�L]�^�^�^��3�-�s�/A�7�C�L]�^�^�^��7�#�#�	N��s�1�3�3E�u�M�M�M��7�#�#�	N��s�1�3�3E�u�M�M�M��3�-�s�/?��*-�/�	;�	;�	;�	;�	;�	;r$rc��	tjrtj�d��ttjtjd��td��r%ttjtj	d��td��r%ttjtj
d��ttjtjdtj���ttjtjd��ttjtj
d��ttj
tjd��dS)Nr��TLSv1.1rfFrr�)rr�r�r�r�r�r
rrar�r�r^r�rur�s r"�test_protocol_tlsv1_1z#ThreadedTests.test_protocol_tlsv1_1}
s
��	2��?�	#��J���T�"�"�"��3�/��1E�y�Q�Q�Q��7�#�#�	P��s�3�S�5G��O�O�O��7�#�#�	P��s�3�S�5G��O�O�O��3�/��1A�5�*-�*;�	=�	=�	=�	=�	�3�+�S�-A�9�M�M�M��3�/��1E�u�M�M�M��3�/��1E�u�M�M�M�M�Mr$rkc��	tjrtj�d��ttjtjdtjtj	ztjtj	z���td��r%ttjtjd��td��r%ttjtjd��ttjtj
dtj���ttj
tjd��ttj��rJttjtjd��ttjtjd��ttj��rLttjtjd��ttjtjd��dSdS)Nr��TLSv1.2)r�r�rfFrr�)rr�r�r�r�r�r
rur�r�rar�r�r^r�rdrrr�s r"�test_protocol_tlsv1_2z#ThreadedTests.test_protocol_tlsv1_2�
s���	2��?�	#��J���T�"�"�"��3�/��1E�y�*-�/�#�/�*I�*-�/�#�/�*I�	L�	L�	L�	L��7�#�#�	P��s�3�S�5G��O�O�O��7�#�#�	P��s�3�S�5G��O�O�O��3�/��1A�5�*-�*;�	=�	=�	=�	=�	�3�+�S�-A�9�M�M�M��C�.�/�/�	P��s�3�S�5G��O�O�O��s�1�3�3G��O�O�O��C�0�1�1�	R��s�3�S�5I�5�Q�Q�Q��s�3�S�5I�5�Q�Q�Q�Q�Q�	R�	Rr$c��	d}ttddd���}d}|5tj��}|�d��|�t
|jf��tjrtj
�d��|D�]�}tjr"tj
�d|z��|r*|�|��|���}n*|�
|��|�d��}|������}|dkrV|�d	��rAtjr"tj
�d
|z��t%|��}d}��	|dkr[|�d	��rFtjr"tj
�d|z��|���}d}��jtjr"tj
�d
|z�����tjrtj
�d��|r|�d��n|�
d��|r|���n|���ddd��dS#1swxYwYdS)N)smsg 1sMSG 2rsMSG 3smsg 4rsmsg 5smsg 6T)rr�rFr�ror�rsokz/ client:  read %r from server, starting TLS...
rz- client:  read %r from server, ending TLS...
z client:  read %r from server
rtrs)rCr�r�r@r�r�r=rr�r�r�r�rLrdr`rr2r-r�rar�)	r��msgsr<�wrappedr�r|rKrrs	         r"�
test_starttlszThreadedTests.test_starttls�
s���D�c��#�H�48�+/�59�;�;�;����
�.	�.	��
���A�
�M�M�$����
�I�I�t�V�[�)�*�*�*���
'��
� � ��&�&�&��
E�
E���?�>��J�$�$�3�f�<�>�>�>��+��J�J�v�&�&�&�"�i�i�k�k�G�G��F�F�6�N�N�N��f�f�T�l�l�G��m�m�o�o�+�+�-�-���[�(�(�S�^�^�E�-B�-B�(���#��
�(�(�N�!�"�#�#�#�,�A�.�.�D�"�G�G��y�(�(�S�^�^�E�-B�-B�(���#��
�(�(�L�!�"�#�#�#����
�
�A�#�G�G���E��
�(�(�=��C�E�E�E����
D��
� � �!B�C�C�C��
"��
�
�9�%�%�%�%����y�!�!�!��
��
�
��������	�	�	�].	�.	�.	�.	�.	�.	�.	�.	�.	�.	�.	�.	����.	�.	�.	�.	�.	�.	s�JK�K�Kc��	t|t���}tjrtj�d��ttd��5}|�	��}ddd��n#1swxYwYd}d|j
tj�
t��dfz}t�t ���}t"j�||���}	|����d	��}|rrt-|��d
kr_|�	t-|����}tjr1tj�dt/|��|fz��|���n#|���wxYw|�||��dS)Nr�r��rbrTzhttps://localhost:%d/%sr�)r�rBzcontent-lengthrz/ client: read %d bytes from remote server '%s'
)r�r�rr�r�r�r�rKr�rLr=rrr�r
rr��urllib�request�urlopen�infor�rBrbr�r�)r�r<rNr3r5�urlr��dlens        r"�test_socketserverzThreadedTests.test_socketserver�
s���F�"�4�/�B�B�B���?�	#��J���T�"�"�"�
�(�D�
!�
!�	�Q������B�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�
��'��K�����x�0�0��3�+5�5���,�,�J�,�?�?���N�"�"�3��"�8�8��		��6�6�8�8�<�<� 0�1�1�D��
-��T���Q����V�V�C��I�I�&�&���?�-��J�$�$�J��r�7�7�F�+�,�-�-�-�
�G�G�I�I�I�I��A�G�G�I�I�I�I��������R� � � � � s�A9�9A=�A=�<BF,�,Gc
� �	tjrtj�d��d}tt��}|5ttj����}|�	d|j
f��tjr"tj�d|z��|�|��|���}tjr"tj�d|z��||���krX|�
d|dd�t|��|dd����t|��fz��|�d��tjrtj�d	��|���tjrtj�d
��ddd��dS#1swxYwYdS)Nr�r�r%rorprqrrrsrtz client:  connection closed.
)rr�r�r�r�rBr�r�r�r�r=rLr2r/rbr�)r�r|r<r�rs     r"�test_asyncore_serverz"ThreadedTests.test_asyncore_server�
s��5��?�	#��J���T�"�"�"���#�H�-�-��
�	C�	C� �����1�1�A�
�I�I�{�F�K�0�1�1�1���
:��
� � �/�&�8�:�:�:�
�G�G�F�O�O�O��f�f�h�h�G���
B��
� � �!6��!@�A�A�A��&�,�,�.�.�(�(��	�	�K��s��s�|�S��\�\��c�r�c�{�(�(�*�*�C��K�K�9�9�:�:�:�
�G�G�I������
D��
� � �!B�C�C�C�
�G�G�I�I�I���
C��
� � �!A�B�B�B�)	C�	C�	C�	C�	C�	C�	C�	C�	C�	C�	C�	C����	C�	C�	C�	C�	C�	Cs�F1H�H�
Hc
����	tjrtj�d��tttjtj	tdd���}|5ttj��dtttj������t|jf���fd�}�fd�}d�jdgt fd	�jdd
gt fd�jdgd�fg}d
�jdgfd�jdd
gfd|dgfd|dgfg}d}|D�]r\}}}	}
}||z�d��}	||g|
�R�}
d�|��}|�|
||��|�������}||���krW|�d�||dd�t!|��|dd�t!|���������#t6$r�}|	r)|�d�|�����t9|���|��s*|�d�||�����Yd}~��ld}~wwxYw|D�]L\}}}	}
||z�d��}	��|��||
�}||���krW|�d�||dd�t!|��|dd�t!|���������#t6$r�}|	r)|�d�|�����t9|���|��s*|�d�||���������Yd}~��Fd}~wwxYwd}��|��t=t!|����}|���d|��t!|����|�||��t>�nt>j t!|��z}|�!|��}��|��|�����|��|�"tF�j$��|�"tF�j%dg��|�"tF�j&d ��|�"tF�j't=d ��g����d!��|�"t6�jd��|�"t6�jd����(��ddd��dS#1swxYwYdS)"Nr�TF�r%r$r&r�r�r�r�r�r�c�`��td��}��|��}|d|�S�Nsd)r�ra)�br�r�s  �r"�
_recv_intoz0ThreadedTests.test_recv_send.<locals>._recv_into*s-����i�(�(�����A������%��y� r$c�f��td��}��|��\}}|d|�Sr�)r�rc)r�r�r�r�s   �r"�_recvfrom_intoz4ThreadedTests.test_recv_send.<locals>._recvfrom_into/s3����i�(�(���o�o�a�0�0���t���%��y� r$rdrezsome.addressr�c��dSrrX)r�s r"�<lambda>z.ThreadedTests.test_recv_send.<locals>.<lambda>8s��4�r$r`rbrarc�PREFIX_r�zsending with {})rzpWhile sending with <<{name:s}>> bad data <<{outdata:r}>> ({nout:d}) received; expected <<{indata:r}>> ({nin:d})
rr)r!r�noutr|�ninz>Failed to send with method <<{name:s}>>; expected to succeed.
r zFMethod <<{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.
r�r�r^rs))rr�r�r�r�rCr�r
r�r_r�r�r�r�r=rdrbrer�r`rbr��formatr�rLr2r/r�r\r-r��ctypes�c_ubyte�from_buffer_copyr�rfrgrhrirjr�)r�r<r�r��send_methods�recv_methods�data_prefix�	meth_name�	send_methr�rt�ret_val_methr|r�rrr6�	recv_methr��buffer�ubyte�	bytesliker�s                      @r"�test_recv_sendzThreadedTests.test_recv_sends����.��?�	#��J���T�"�"�"�#�H�-0�]�03�0G�,4�+/�5:�<�<�<���{	�{	� �����,1�)1�)1�*-�-�	9�9�9�A�

�I�I�t�V�[�)�*�*�*�
!�
!�
!�
!�
!�

!�
!�
!�
!�
!�����r�3�/��1�8�U�^�,<�c�B��A�I�t�R���@��L�����r�*��Q�Z���0@�A��j�$��3� �.�%��<�	�L�$�K�&2�
�
�"��I�~�t� �%�	�1�9�9�'�B�B���#�)�F�2�T�2�2�2�C�+�2�2�9�=�=�C��$�$�S�,�,�v�*>�*>�C�$�H�H�H��f�f�h�h�G��&�,�,�.�.�0�0��	�	�B�BH�&�%.������%(��\�\�'-�c�r�c�{��F���CI�C�C������"����%���	�	�5�5;�V��V�5K�5K�����q�6�6�,�,�Y�7�7���	�	�;�;A�6�%.�A�<B�<�<�����������������?K�
�
�:�	�9�n�d�%�	�1�9�9�'�B�B����F�F�6�N�N�N�'�i��.�G��&�,�,�.�.�0�0��	�	�B�BH�&�%.������%(��\�\�'-�c�r�c�{��F���CI�C�C������"����%���	�	�5�5;�V��V�5K�5K�����q�6�6�,�,�Y�7�7���	�	�;�;A�6�%.�A�<B�<�<�����F�F�H�H�H�H�H�H�H�H���������"�D�
�F�F�4�L�L�L��s�4�y�y�)�)�F����Q�V�V�B��/�/��T���;�;�;����V�T�*�*�*��!����T���2��!�2�2�4�8�8�	��	�	�)�$�$�$�� � ������4�0�0�0�

���1�1�5�9�9�9����1�1�9�w�i�H�H�H����1�1�9�c�B�B�B����1��n�y��~�~�.>�
@�
@�
@�
�G�G�I�������j�!�&�"�5�5�5����j�!�&�"�5�5�5�
�G�G�I�I�I�w{	�{	�{	�{	�{	�{	�{	�{	�{	�{	�{	�{	����{	�{	�{	�{	�{	�{	sl�#CW�>CH�W�
J
�A7J�W�J
�
%W�3B	L=�<W�=
O�BO�W�O�G5W�W#�&W#c�&�tt��}|�|��tjt
|jf��}|�|j��t|d���}|�|j��|�
d��|�|�d��d��|�|�
d��d��|�|�
��d��|�d��|�|�d��d��|�|�t!����d��dS)NF)r�r�rr$)rCr�rnr�r?r�r=r�r�r�rdr�r`rLr@rar�)r�r<r�s   r"�test_recv_zerozThreadedTests.test_recv_zero�sC��#�H�-�-�����&�!�!�!��$�d�F�K�%8�9�9������� � � ��Q�U�;�;�;������� � � �	
���w�������������C�(�(�(����������C�(�(�(���������7�+�+�+�	
�
�
�e�������������C�(�(�(�������Y�[�[�1�1�1�5�5�5�5�5r$c�X���tttjtjtdd���}|5tt
j��dtttj������t|j	f����
d��td�����fd�}|�tj
tjf|����
d������ddd��dS#1swxYwYdS)NTFr�r�i c�2��	������r)rd)r�r�s��r"�fill_bufferz8ThreadedTests.test_nonblocking_send.<locals>.fill_buffer�s��� ��F�F�3�K�K�K� r$)rCr�r
r�r_r�r�r�r�r=r@r�r�r}rAr�)r�r<rr�r�s   @@r"�test_nonblocking_sendz#ThreadedTests.test_nonblocking_send�sm����#�H�-0�]�03�0G�,4�+/�5:�<�<�<���	�	� �����,1�)1�)1�*-�-�	9�9�9�A�

�I�I�t�V�[�)�*�*�*�
�M�M�%� � � ��D�/�/�C�
 �
 �
 �
 �
 �
 �
���s�4�"�3�5�6A�
C�
C�
C�
�M�M�$����
�G�G�I�I�I�)	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s�CD�D#�&D#c�<����tjtj���d}tj���}t	j���d����fd�}t	j|���}|�������		tjtj��}|�	d��|�
||f��|�tdt|��|���n#|���wxYw	tjtj��}t|��}|�	d��|�td|j
||f��|���n#|���wxYw	d�|�������dS#d�|�������wxYw)Nr%Fc�0����������g}�sOtj�gggd��\}}}�|vr-|�����d����O|D]}|����dS)Nr�r)r7r�r|r�r�r�)�connsr)�wr6r��finishr<�starteds     ���r"�servez3ThreadedTests.test_handshake_timeout.<locals>.serve�s�����M�M�O�O�O��K�K�M�M�M��E��
5� �-���"�b�#�>�>���1�a��Q�;�;��L�L�������!3�4�4�4��
5��
�
���
�
�����
�
r$r�r�z	timed outT)r�rUrr6r�r+r�r*r,ror�r�r8r�r�r)	r�r�r=rrJr�rr<rs	      @@@r"�test_handshake_timeoutz$ThreadedTests.test_handshake_timeout�s��������v�~�.�.�����&�v�.�.���/�#�#����	�	�	�	�	�	�	�
��E�*�*�*��	���	�	�	�������	�
��M�&�.�1�1�����S�!�!�!��	�	�4��,�'�'�'��&�&�|�[�'7��<�<�<����	�	�	�	�����	�	�	�	����
��M�&�.�1�1��$�Q�'�'�����S�!�!�!��&�&�|�[�'(�y�4��,�@�@�@����	�	�	�	�����	�	�	�	����	��F�
�F�F�H�H�H��L�L�N�N�N�N�N���F�
�F�F�H�H�H��L�L�N�N�N�N���s8�A,D�?G/�D*�*G/�.A&F)�G/�)F?�?G/�/,Hc��
���
�t��\}}}tjtj���
d}tj�
��}|��
d����
|��
j��tj	���
d�d��
���
fd�}tj
|���}|����
���|�tj��|���}|�
||f��|�d��|���|���}	|���|��������
���|��t(j��|��|	��dS)Nr%Tr�c����������������\������d����dS)Nr8)r7r�r�rdr`)�evt�peer�remoter<s����r"rz/ThreadedTests.test_server_accept.<locals>.serve
sP����M�M�O�O�O��G�G�I�I�I�!�=�=�?�?�L�F�D��K�K����A���'�'�'�'�'r$r�r�r�)r�r�rUrr6r�rGr�r�r+r�r*r,r�rdr`r�r�rrAr
r�r�)r�rbrcr�r�r=rrJrh�client_addrrrrr<s          @@@@r"�test_server_acceptz ThreadedTests.test_server_accepts�������,;�+<�+<�(�
�J����v�~�.�.�����&�v�.�.���'�'��D�'�A�A������*�+�+�+��o��������	(�	(�	(�	(�	(�	(�	(�	(�
��E�*�*�*��	���	�	�	����
�
�
��'�'��M�O�O�X�(�
�
��	����$�'�(�(�(����G�������
�
�
��(�(�*�*��������	���������������������f�c�m�4�4�4�����{�+�+�+�+�+r$c��t�tj��}d|_|�tj����5}|�t��5}|���ddd��n#1swxYwY|�	|j
jtj��ddd��dS#1swxYwYdSr@)
r
rlr`r�r�r�r�r_rsr�r�r��ENOTCONN�r�r�r�r~s    r"�test_getpeercert_enotconnz'ThreadedTests.test_getpeercert_enotconn(sA���.�.��!8�9�9��!&���
�
 �
 �����
1�
1�	A�T��"�"�7�+�+�
#�r�� � �"�"�"�
#�
#�
#�
#�
#�
#�
#�
#�
#�
#�
#����
#�
#�
#�
#����R�\�/���@�@�@�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A����	A�	A�	A�	A�	A�	A�6�C�-B�C�B	�C�B	�-C�C�Cc��t�tj��}d|_|�tj����5}|�t��5}|���ddd��n#1swxYwY|�	|j
jtj��ddd��dS#1swxYwYdSr@)
r
rlr`r�r�r�r�r_rBr�r�r�rrs    r"�test_do_handshake_enotconnz(ThreadedTests.test_do_handshake_enotconn0sA���.�.��!8�9�9��!&���
�
 �
 �����
1�
1�	A�T��"�"�7�+�+�
$�r��!�!�#�#�#�
$�
$�
$�
$�
$�
$�
$�
$�
$�
$�
$����
$�
$�
$�
$����R�\�/���@�@�@�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A����	A�	A�	A�	A�	A�	Ar!c�b�t��\}}}tjj|_|�d��|�d��t
|���5}|�tj��|���5}|�	t��5|�t|j
f��ddd��n#1swxYwYddd��n#1swxYwYddd��n#1swxYwY|�d|jd��dS)N�AES128�AES256rBr�zno shared cipherr)r�r
rrkrhrSrCr�r�r�r_r�r�r=r�r�rDs      r"�test_no_shared_ciphersz$ThreadedTests.test_no_shared_ciphers8s���3B�3D�3D�0����),��)?��&��"�"�8�,�,�,��"�"�8�,�,�,�
��
7�
7�
7�	3�6��+�+�F�M�O�O�<D�,�F�F�
3�IJ��&�&�w�/�/�3�3��I�I�t�V�[�1�2�2�2�3�3�3�3�3�3�3�3�3�3�3����3�3�3�3�
3�
3�
3�
3�
3�
3�
3�
3�
3�
3�
3����
3�
3�
3�
3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3����	3�	3�	3�	3�
	
�
�
�(�&�*<�Q�*?�@�@�@�@�@sZ�#)D�C,�'"C�	C,�C�C,�C�C,� D�,C0	�0D�3C0	�4D�D�
Dc��	t�tj��}d|_tj|_t
ttjd���5}|�	tj
����5}|�|���d��|�|j
d��|�t|jf��|�|���d��ddd��n#1swxYwY|�|j
d��|�|���d��ddd��dS#1swxYwYdS)NF)r$r��TLSv1.3)r
rlr`r�r�r�rCr�r_r�r�r�r9r�r�r�r=r�)r�r�r<r�s    r"�test_version_basicz ThreadedTests.test_version_basicFs���	��.�.��!8�9�9��!&���!�m���
��,/�,C�',�.�.�.�		-�17��$�$�V�]�_�_�5�5�
9���
�
�a�i�i�k�k�4�0�0�0��
�
�a�i��.�.�.��	�	�4���-�.�.�.�� � ������i�8�8�8�	
9�
9�
9�
9�
9�
9�
9�
9�
9�
9�
9����
9�
9�
9�
9�

�M�M�!�)�T�*�*�*��M�M�!�)�)�+�+�t�,�,�,�		-�		-�		-�		-�		-�		-�		-�		-�		-�		-�		-�		-����		-�		-�		-�		-�		-�		-s8�'E:�B
D�E:�D#	�#E:�&D#	�'AE:�:E>�E>c��t��\}}}tjj|_t|���5}|�tj��|���5}|�t|j
f��|�|���dhd���|�
|���d��ddd��n#1swxYwYddd��dS#1swxYwYdS)NrBr�r>�TLS_AES_128_GCM_SHA256�TLS_AES_256_GCM_SHA384�TLS_CHACHA20_POLY1305_SHA256r))r�r
rr�rQrCr�r�r�r�r=r�r�r�r9rDs      r"�test_tls1_3zThreadedTests.test_tls1_3Ysz��3B�3D�3D�0����),��)?��&�
��
7�
7�
7�		9�6��+�+�F�M�O�O�<D�,�F�F�
9�IJ��	�	�4���-�.�.�.��
�
�a�h�h�j�j��m�.�.�.����
� � ������i�8�8�8�
9�
9�
9�
9�
9�
9�
9�
9�
9�
9�
9����
9�
9�
9�
9�		9�		9�		9�		9�		9�		9�		9�		9�		9�		9�		9�		9����		9�		9�		9�		9�		9�		9s6�)D�"A:C(�D�(C,	�,D�/C,	�0D�D�Dc�>�t��\}}}tjj|_tjj|_tjj|_tjj|_t|���5}|�tj	��|���5}|�
t|jf��|�
|���d��ddd��n#1swxYwYddd��dS#1swxYwYdS)NrBr�r�)r�r
rrrQrkrhrCr�r�r�r�r=r�r9rDs      r"�test_min_max_version_tlsv1_2z*ThreadedTests.test_min_max_version_tlsv1_2hso��4C�3D�3D�0����),��)=��&�),��)?��&�),��)?��&�),��)?��&�
��
7�
7�
7�	9�6��+�+�F�M�O�O�<D�,�F�F�
9�IJ��	�	�4���-�.�.�.�� � ������i�8�8�8�
9�
9�
9�
9�
9�
9�
9�
9�
9�
9�
9����
9�
9�
9�
9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9����	9�	9�	9�	9�	9�	9s7�;)D�$A
C:�.D�:C>	�>D�C>	�D�D�Dc�^�t��\}}}tjj|_tjj|_tjj|_tjj|_t||��t|���5}|�
tj��|���5}|�t|jf��|�|���d��ddd��n#1swxYwYddd��dS#1swxYwYdS)NrBr�r�)r�r
rrrQrkrhrrVrCr�r�r�r�r=r�r9rDs      r"�test_min_max_version_tlsv1_1z*ThreadedTests.test_min_max_version_tlsv1_1zs��4C�3D�3D�0����),��)=��&�),��)?��&�),��)=��&�),��)?��&��N�N�;�;�;�
��
7�
7�
7�	9�6��+�+�F�M�O�O�<D�,�F�F�
9�IJ��	�	�4���-�.�.�.�� � ������i�8�8�8�
9�
9�
9�
9�
9�
9�
9�
9�
9�
9�
9����
9�
9�
9�
9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9����	9�	9�	9�	9�	9�	9s7�)D"�4A
D
�>D"�
D	�D"�D	�D"�"D&�)D&c���t��\}}}tjj|_tjj|_tjj|_tjj|_t||��t|���5}|�	tj
��|���5}|�tj��5}|�
t|jf��ddd��n#1swxYwY|�dt#|j����ddd��n#1swxYwYddd��dS#1swxYwYdS)NrBr��alert)r�r
rrkrhrQrrVrCr�r�r�r�r�r�r=r�r\r�r�s       r"�test_min_max_version_mismatchz+ThreadedTests.test_min_max_version_mismatch�s���4C�3D�3D�0����),��)?��&�),��)?��&�),��)=��&�),��)=��&��N�N�;�;�;�
��
7�
7�
7�	9�6��+�+�F�M�O�O�<D�,�F�F�
9�IJ��&�&�s�|�4�4�3���I�I�t�V�[�1�2�2�2�3�3�3�3�3�3�3�3�3�3�3����3�3�3�3��
�
�g�s�1�;�'7�'7�8�8�8�	
9�
9�
9�
9�
9�
9�
9�
9�
9�
9�
9����
9�
9�
9�
9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9�	9����	9�	9�	9�	9�	9�	9sZ�)E�4 E�"D�6E�D�E�	D�
+E�5E�E	�E�E	�	E�E� Ec�2�t��\}}}tjj|_tjj|_tjj|_t
||��t|���5}|�tj	��|���5}|�
t|jf��|�
|���d��ddd��n#1swxYwYddd��dS#1swxYwYdS)NrBr�r)r�r
rrrQrhrVrCr�r�r�r�r=r�r9rDs      r"�test_min_max_version_sslv3z(ThreadedTests.test_min_max_version_sslv3�so��3B�3D�3D�0����),��)=��&�),��)=��&�),��)=��&��N�N�;�;�;�
��
7�
7�
7�	7�6��+�+�F�M�O�O�<D�,�F�F�
7�IJ��	�	�4���-�.�.�.�� � ������g�6�6�6�
7�
7�
7�
7�
7�
7�
7�
7�
7�
7�
7����
7�
7�
7�
7�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7����	7�	7�	7�	7�	7�	7s7�5)D�A
C4�(D�4C8	�8D�;C8	�<D�D�Dc���t��\}}}tjj|_t|���5}|�tj��|���5}|�t|j
f��|�d|���d��ddd��n#1swxYwYddd��dS#1swxYwYdS)NrBr��ECDHr)
r�r
rrkrhrCr�r�r�r�r=r�r�rDs      r"�test_default_ecdh_curvez%ThreadedTests.test_default_ecdh_curve�sN��4C�3D�3D�0����*-��)?��&�
 ��
7�
7�
7�	5�6��+�+�F�M�O�O�<D�,�F�F�
5�IJ��	�	�4���-�.�.�.��
�
�f�a�h�h�j�j��m�4�4�4�
5�
5�
5�
5�
5�
5�
5�
5�
5�
5�
5����
5�
5�
5�
5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5����	5�	5�	5�	5�	5�	5s6�)C�"AB>�2C�>C	�C�C	�C�C�Cr�r�c�l�	tjrtj�d��t��\}}}t
|dd���}|5|�tj��|���5}|�	t|jf��|�d��}tjr2tj�d�
|����|�|��|���dkr$|�t#|��d	��n#|�t#|��d
��|�d��|������}|�|t)|���d����ddd��n#1swxYwY|�tj��|���5}|�	t|jf��|�d��}tjr2tj�d
�
|����|�||��|�|��|���dkr$|�t#|��d	��n#|�t#|��d
��|�d��|������}|�|t)|���d����ddd��n#1swxYwYddd��dS#1swxYwYdS)Nr�TFrmr�r�z! got channel binding data: {0!r}
r)�0�sCB tls-unique
rz(got another channel binding data: {0!r}
)rr�r�r�r�r�rCr�r�r�r�r=r�r�r�r9r�rbrLrr�r��assertNotEqual)	r�r�r�r�r<r��cb_data�peer_data_repr�new_cb_datas	         r"r�z-ThreadedTests.test_tls_unique_channel_binding�sT��	/��?�	#��J���T�"�"�"�3B�3D�3D�0����#�N�+/�5:�<�<�<���-	G�-	G��+�+��M�O�O�$,�,�.�.�
C�12��	�	�4���-�.�.�.��/�/��=�=���?�N��J�$�$�<�C�C�G�L�L�N�N�N��$�$�W�-�-�-��9�9�;�;�)�+�+��$�$�S��\�\�2�6�6�6�6��$�$�S��\�\�2�6�6�6����*�+�+�+�!"�������!1�!1��� � ��!%�g���!5�!5�j�!A�!A�C�C�C�)
C�
C�
C�
C�
C�
C�
C�
C�
C�
C�
C����
C�
C�
C�
C�0 �+�+��M�O�O�$,�,�.�.�
G�12��	�	�4���-�.�.�.��3�3�L�A�A���?���J�$�$�C�J�J�'�)�)����
�#�#�G�[�9�9�9��$�$�W�-�-�-��9�9�;�;�)�+�+��$�$�S��\�\�2�6�6�6�6��$�$�S��\�\�2�6�6�6����*�+�+�+�!"�������!1�!1��� � ��!%�k�!2�!2�!9�!9�*�!E�!E�G�G�G�'
G�
G�
G�
G�
G�
G�
G�
G�
G�
G�
G����
G�
G�
G�
G�3-	G�-	G�-	G�-	G�-	G�-	G�-	G�-	G�-	G�-	G�-	G�-	G����-	G�-	G�-	G�-	G�-	G�-	Gs\�)N)�<EG"�N)�"G&	�&N)�)G&	�*+N)�E0N�N)�N	�N)�N	�N)�)N-�0N-c��t��\}}}t||dd|���}tjr8tj�d�|d����|�|dhd���dS)NT�r�rr}z got compression: {!r}
ru>N�RLE�ZLIB)	r�r�rr�r�r�r�r�r��r�r�r�r�rs     r"�test_compressionzThreadedTests.test_compression�s���3B�3D�3D�0����"�>�>�*.��,4�6�6�6���?�	V��J���7�>�>�u�]�?S�T�T�U�U�U��
�
�e�M�*�,C�,C�,C�D�D�D�D�Dr$rCz*ssl.OP_NO_COMPRESSION needed for this testc���t��\}}}|xjtjzc_|xjtjzc_t	||dd|���}|�|dd��dS)NTrDru)r�rxr
rCr�r�rGs     r"�test_compression_disabledz'ThreadedTests.test_compression_disableds���4C�3D�3D�0�������#�"7�7������#�"7�7���"�>�>�*.��,4�6�6�6��	
�
�
�e�M�*�D�1�1�1�1�1r$r�c��t��\}}}tjj|_|�t��|�d��tjj|_t||dd|���}|dd}|�	d��}d|vr(d|vr&d	|vr$|�
d
|dz��dSdSdSdS)N�kEDHTrDr�rr��ADH�EDH�DHEzNon-DH cipher: )r�r
rrkrhr�r�rSr�r�r/)r�r�r�r�rr��partss       r"�test_dh_paramszThreadedTests.test_dh_params
s���4C�3D�3D�0����),��)?��&��%�%�f�-�-�-��"�"�6�*�*�*�),��)?��&�"�>�>�*.��,4�6�6�6���x���#�����S�!�!������%�u�"4�"4��e�9K�9K��I�I�'�&��)�3�4�4�4�4�4���"4�"4�9K�9Kr$c��t��\}}}|�d��|�d��tjj|_t||dd|���}t��\}}}|�d��|�d��tjj|_t||dd|���}t��\}}}|�d��|�d��|�d��tjj|_|�tj	��5t||dd|���ddd��dS#1swxYwYdS)N�	secp384r1zECDHE:!eNULL:!aNULLTrDr�)
r�r�rSr
rrkrQr�r�r�rGs     r"�test_ecdh_curvezThreadedTests.test_ecdh_curves���3B�3D�3D�0�����%�%�k�2�2�2��"�"�#8�9�9�9�),��)?��&�"�>�>�*.��,4�6�6�6��
4C�3D�3D�0�����%�%�k�2�2�2��"�"�#8�9�9�9�),��)?��&�"�>�>�*.��,4�6�6�6��
4C�3D�3D�0�����%�%�l�3�3�3��%�%�k�2�2�2��"�"�#8�9�9�9�),��)?��&�
�
�
�s�|�
,�
,�	2�	2��~�~�&*�T�(0�
2�
2�
2�
2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2����	2�	2�	2�	2�	2�	2s�E5�5E9�<E9c��t��\}}}t||dd|���}|�|dd��dS)NTrDrw)r�r�r�rGs     r"�test_selected_alpn_protocolz)ThreadedTests.test_selected_alpn_protocol=sV��3B�3D�3D�0����"�>�>�*.��,4�6�6�6��	
�
�
�e�2�3�T�:�:�:�:�:r$c��t��\}}}|�ddg��t||dd|���}|�|dd��dS)Nr��barTrDrw)r�r r�r�rGs     r"�/test_selected_alpn_protocol_if_server_uses_alpnz=ThreadedTests.test_selected_alpn_protocol_if_server_uses_alpnEsn��3B�3D�3D�0�����)�)�5�%�.�9�9�9�"�>�>�*.��,4�6�6�6��	
�
�
�e�2�3�T�:�:�:�:�:r$c	�\�gd�}ddgdfddgdfdgdfddgdfg}|D�]\}}t��\}}}|�|��|�|��	t||dd|���}n#tj$r}	|	}Yd}	~	nd}	~	wwxYwd	t|���d
t|���dt|���d�}
|d
}|�|||
|dfz��t|d��r|ddnd}|�|||
|dfz����dS)N)r�rX�	milkshaker�rXr[zhttp/3.0zhttp/4.0TrDzfailed trying z	 (s) and z (c).
was expecting z, but got %s from the %srwrhryr��nothingr<)r�r r�r
r�r\r�rb)
r��server_protocols�protocol_tests�client_protocolsr
r�r�r�rr6r�
client_result�
server_results
             r"�test_alpn_protocolsz!ThreadedTests.test_alpn_protocolsNs���6�6�6���U�^�U�#��U�^�U�#��]�K�(��*�
%�t�,�	
��+9�	>�	>�&��h�7F�7H�7H�4�N�N�H��-�-�.>�?�?�?��-�-�.>�?�?�?�
�*�>�+9�26�<@�4<�	>�>�>����
�<�
�
�
������������
�����
�+�,�,�,�,�c�2B�.C�.C�.C�.C��H�
�
�
�
�'�C�"�"8�9�M����]�H� �M�8�#<�<�
>�
>�
>��u�4�5�6�6�F�E�"9�:�2�>�>�<E�
����]�H� �M�8�#<�<�
>�
>�
>�
>�/	>�	>s�A4�4B�B
�
Bc��dSrrXr�s r"�test_npn_protocolsz ThreadedTests.test_npn_protocolsps���r$c��t�tj��}|�t��t�tj��}|�t
��t�tj��}|�t��|||fSr)	r
rlr_r�r�r�r`r�r�)r�r��
other_contextr�s    r"�sni_contextszThreadedTests.sni_contextsss�������(?�@�@���&�&��7�7�7����s�'>�?�?�
��%�%�&6�7�7�7�����(?�@�@���,�,�Z�8�8�8��}�n�<�<r$c�T�|d}|�d|ff|d��dS)Nrvr.r7)r�)r�rr!r�s    r"�check_common_namezThreadedTests.check_common_name|s2���Z� ���
�
��d�+�-�t�I��?�?�?�?�?r$c�N���g�|���\}�}d|_��fd�}|�|��t||dd���}|��d|fg��|�|d��g�t||dd���}|��d|fg��|�|t��g�|�d��t||dd���}|�|t��|��g��dS)NFc�L����||f��|�	�|_dSdSr)r�r�)r�r�r��callsrfs   ��r"r�z6ThreadedTests.test_sni_callback.<locals>.servername_cb�s6����L�L�+��7�8�8�8��&�#0�� � � �'�&r$T�supermessage�r�r}r?�notfunny)rgr�r�r�r�rir�)r�r�r�r�rrlrfs     @@r"r�zThreadedTests.test_sni_callback�sy������8<�8I�8I�8K�8K�5��
�~�(-��%�	1�	1�	1�	1�	1�	1�	�.�.�}�=�=�=�"�>�>�*.�,:�<�<�<��
	
����.�.�!A� B�C�C�C����u�n�5�5�5���"�>�>�*.�,0�2�2�2��	
����$��!7� 8�9�9�9����u�&>�?�?�?����.�.�t�4�4�4�"�>�>�*.�,6�8�8�8��	
���u�&>�?�?�?������#�#�#�#�#r$c�:�|���\}}}d�}|�|��|�tj��5}t||dd���}ddd��n#1swxYwY|�|jjd��dS)Nc��tjSr)r
�ALERT_DESCRIPTION_ACCESS_DENIEDr�s   r"�cb_returning_alertzAThreadedTests.test_sni_callback_alert.<locals>.cb_returning_alert�s���6�6r$Frmrn�TLSV1_ALERT_ACCESS_DENIED)	rgr�r�r
r�r�r�r�r<)r�r�rfr�rsr~rs       r"�test_sni_callback_alertz%ThreadedTests.test_sni_callback_alert�s���8<�8I�8I�8K�8K�5��
�~�	7�	7�	7��.�.�/A�B�B�B�
�
�
�s�|�
,�
,�	@��&�~�~�.3�0>�@�@�@�E�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@����	@�	@�	@�	@�	
�����,�.I�J�J�J�J�Js�A0�0A4�7A4c���|���\}}}d�}|�|��tj��5}|�t
j��5}t||dd���}ddd��n#1swxYwY|�|j	j
d��|�|jjt��ddd��dS#1swxYwYdS)Nc��ddzdS)Nr�rrXr�s   r"�
cb_raisingz;ThreadedTests.test_sni_callback_raising.<locals>.cb_raising�s��
�a�C�C�C�Cr$Frmrn�SSLV3_ALERT_HANDSHAKE_FAILURE)rgr�r�catch_unraisable_exceptionr�r
r�r�r�r�r<�
unraisable�exc_type�ZeroDivisionError)r�r�rfr�rx�catchr~rs        r"�test_sni_callback_raisingz'ThreadedTests.test_sni_callback_raising�s���8<�8I�8I�8K�8K�5��
�~�	�	�	��.�.�z�:�:�:�
�
/�
1�
1�	K�U��"�"�3�<�0�0�
D�B�*�>�>�27�4B�D�D�D��
D�
D�
D�
D�
D�
D�
D�
D�
D�
D�
D����
D�
D�
D�
D�

���R�\�0�<�
>�
>�
>����U�-�6�8I�J�J�J�	K�	K�	K�	K�	K�	K�	K�	K�	K�	K�	K�	K����	K�	K�	K�	K�	K�	K�7� C!�$B�8C!�B	�C!�B	�AC!�!C%�(C%c���|���\}}}d�}|�|��tj��5}|�t
j��5}t||dd���}ddd��n#1swxYwY|�|j	j
d��|�|jjt��ddd��dS#1swxYwYdS)Nc��dS)Nr�rXr�s   r"�cb_wrong_return_typezOThreadedTests.test_sni_callback_wrong_return_type.<locals>.cb_wrong_return_type�s���5r$Frmrn�TLSV1_ALERT_INTERNAL_ERROR)rgr�rrzr�r
r�r�r�r�r<r{r|r�)r�r�rfr�r�r~r~rs        r"�#test_sni_callback_wrong_return_typez1ThreadedTests.test_sni_callback_wrong_return_type�s���9=�8I�8I�8K�8K�5��
�~�	�	�	��.�.�/C�D�D�D�
�
/�
1�
1�	C�U��"�"�3�<�0�0�
D�B�*�>�>�27�4B�D�D�D��
D�
D�
D�
D�
D�
D�
D�
D�
D�
D�
D����
D�
D�
D�
D�
���R�\�0�2N�O�O�O����U�-�6�	�B�B�B�	C�	C�	C�	C�	C�	C�	C�	C�	C�	C�	C�	C����	C�	C�	C�	C�	C�	Cr�c��	�t��\}}}|�d��|�d��gd�}t|||���}|dd}|�t	|��d��|D]6\�	}}t�	fd�|D����s|��	���7dS)Nz
AES128:AES256zAES256:eNULL)r&zAES-256�TLS_CHACHA20�TLS_AES�r}rzrc3� �K�|]}|�vV��	dSrrX)rh�algr!s  �r"riz4ThreadedTests.test_shared_ciphers.<locals>.<genexpr>�s'�����<�<�s�s�d�{�<�<�<�<�<�<r$)r�rSr��
assertGreaterrb�anyr/)
r�r�r�r��
expected_algsrr��tls_version�bitsr!s
         @r"�test_shared_ciphersz!ThreadedTests.test_shared_ciphers�s����3B�3D�3D�0�����"�"�?�3�3�3��"�"�>�2�2�2�
�
�
�
�#�>�>�,4�6�6�6���/�0��3�����3�w�<�<��+�+�+�'.�	 �	 �#�D�+�t��<�<�<�<�m�<�<�<�<�<�
 ��	�	�$�����	 �	 r$c��t��\}}}t|d���}|5|�tj��|���}|�t
|jf��|���|�t|j
d��|�t|jd��ddd��dS#1swxYwYdS)NFr�r�r�shello)r�rCr�r�r�r�r=r�r�r�rLr�rDs      r"�,test_read_write_after_close_raises_valuerrorz:ThreadedTests.test_read_write_after_close_raises_valuerror�s��3B�3D�3D�0����#�N�5�I�I�I��
�	=�	=��*�*�6�=�?�?�;C�+�E�E�A�
�I�I�t�V�[�)�*�*�*�
�G�G�I�I�I����j�!�&�$�7�7�7����j�!�'�8�<�<�<�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=����	=�	=�	=�	=�	=�	=s�B C�C�Cc�
�d}ttjd��5}|�|��ddd��n#1swxYwY|�tjtj��t
��\}}}t|d���}|5|�tj	��|���5}|�
t|jf��ttjd��5}|�
|��|�|�d��|��ddd��n#1swxYwYddd��n#1swxYwYddd��dS#1swxYwYdS)Nsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx�wbFr�r�r�r�)rKr�TESTFNr�r��unlinkr�rCr�r�r�r�r=�sendfiler�r`)	r��	TEST_DATArNr�r�r�r<r��files	         r"�
test_sendfilezThreadedTests.test_sendfile�sQ���	�
�)�"�D�
)�
)�	�Q�
�G�G�I����	�	�	�	�	�	�	�	�	�	�	����	�	�	�	����	�(�)�*:�;�;�;�3B�3D�3D�0����#�N�5�I�I�I��
�	>�	>��+�+�F�M�O�O�<D�,�F�F�
>�IJ��	�	�4���-�.�.�.��)�*�D�1�1�>�T��J�J�t�$�$�$��$�$�Q�V�V�D�\�\�9�=�=�=�>�>�>�>�>�>�>�>�>�>�>����>�>�>�>�
>�
>�
>�
>�
>�
>�
>�
>�
>�
>�
>����
>�
>�
>�
>�	>�	>�	>�	>�	>�	>�	>�	>�	>�	>�	>�	>����	>�	>�	>�	>�	>�	>si�?�A�A�)E8�<E �>?E	�=E �	E
�
E �E
�E �E8� E$	�$E8�'E$	�(E8�8E<�?E<c���t��\}}}tjj|_t|||���}|d}|�|j��|�|j	d��|�|j
d��|�|j��|�|jd��|�
|d��|���}|�|dd��|�|dd��t||||���}|���}|�|dd	��|�|dd��|�|d��|d}|�|j|j��|�||��|�||��|�|j	|j	��|�|j
|j
��t|||���}|�
|d��|d}|�|j|j��|�||��|���}|�|dd
��|�|dd��t||||���}|�|d��|d}	|�|	j|j��|�|	|��|�|	j	|j	��|�|	j
|j
��|���}|�|dd��|�|dd	��dS)Nr�rnrrxr�r�r�)rnr}r�rr8)r�r
rrkrhr�rG�idr�r�rq�
has_ticket�ticket_lifetime_hintr|r�r��assertIsNotrDr?)
r�r�r�r�rrn�	sess_stat�session2�session3�session4s
          r"�test_sessionzThreadedTests.test_sessions���3B�3D�3D�0����),��)?��&�#�>�>�,4�6�6�6���	�"������
�#�#�#����7�<��+�+�+����7�?�A�.�.�.�����*�+�+�+����7�7��;�;�;�����/�0�1�1�1�"�0�0�2�2�	�����8�,�a�0�0�0�����6�*�A�.�.�.�#�>�>�+2�X�G�G�G��"�0�0�2�2�	�����8�,�a�0�0�0�����6�*�A�.�.�.�����.�/�0�0�0���#�������g�j�1�1�1�����7�+�+�+�����7�+�+�+�����
�w�|�<�<�<����� 0�'�/�B�B�B�#�>�>�,4�6�6�6������/�0�1�1�1���#�����H�K���4�4�4����H�g�.�.�.�"�0�0�2�2�	�����8�,�a�0�0�0�����6�*�A�.�.�.�#�>�>�+2�X�G�G�G������.�/�0�0�0���#�������g�j�1�1�1�����7�+�+�+�����
�w�|�<�<�<����� 0�'�/�B�B�B�"�0�0�2�2�	�����8�,�a�0�0�0�����6�*�A�.�.�.�.�.r$c��t��\}}}t��\}}}tjj|_tjj|_t|d���}|5|�tj��|���5}|�|j	d��|�|j
d��|�t|j
f��|j	}|�|��|�t ��5}	t"|_	ddd��n#1swxYwY|�t%|	j��d��ddd��n#1swxYwY|�tj��|���5}|�t|j
f��|�t(��5}	||_	ddd��n#1swxYwY|�t%|	j��d��ddd��n#1swxYwY|�tj��|���5}||_	|�t|j
f��|�|j	j|j��|�|j	|��|�|j
d��ddd��n#1swxYwY|�tj��|���5}|�t(��5}	||_	|�t|j
f��ddd��n#1swxYwY|�t%|	j��d��ddd��n#1swxYwYddd��dS#1swxYwYdS)NFr�r�zValue is not a SSLSession.z#Cannot set session after handshake.Tz)Session refers to a different SSLContext.)r�r
rrkrhrCr�r�r�rnrxr�r�r=rGr�r�r�r\r�r�r�)
r�r�r�r��client_context2rir<r�rnr6s
          r"�test_session_handlingz#ThreadedTests.test_session_handlingAs���3B�3D�3D�0���� /� 1� 1����A�*-��)?��&�*-�.�*@��'�#�N�5�I�I�I��
�'	N�'	N��+�+�F�M�O�O�<D�,�F�F�

Q�IJ�� � ���D�1�1�1�� � ��!1�4�8�8�8��	�	�4���-�.�.�.��)������(�(�(��&�&�y�1�1�'�Q� &�A�I�'�'�'�'�'�'�'�'�'�'�'����'�'�'�'�� � ��Q�[�!1�!1�3O�P�P�P�

Q�

Q�

Q�

Q�

Q�

Q�

Q�

Q�

Q�

Q�

Q����

Q�

Q�

Q�

Q� �+�+�F�M�O�O�<D�,�F�F�
H�IJ��	�	�4���-�.�.�.��&�&�z�2�2�(�a� '�A�I�(�(�(�(�(�(�(�(�(�(�(����(�(�(�(�� � ��Q�[�!1�!1�!F�H�H�H�

H�
H�
H�
H�
H�
H�
H�
H�
H�
H�
H����
H�
H�
H�
H� �+�+�F�M�O�O�<D�,�F�F�
9�IJ�$��	��	�	�4���-�.�.�.�� � ����w�z�:�:�:�� � ���G�4�4�4�� � ��!1�4�8�8�8�
9�
9�
9�
9�
9�
9�
9�
9�
9�
9�
9����
9�
9�
9�
9�!�,�,�V�]�_�_�=E�-�G�G�
N�JK��&�&�z�2�2�3�a� '�A�I��I�I�t�V�[�1�2�2�2�3�3�3�3�3�3�3�3�3�3�3����3�3�3�3�� � ��Q�[�!1�!1�!L�N�N�N�

N�
N�
N�
N�
N�
N�
N�
N�
N�
N�
N����
N�
N�
N�
N�A'	N�'	N�'	N�'	N�'	N�'	N�'	N�'	N�'	N�'	N�'	N�'	N����'	N�'	N�'	N�'	N�'	N�'	Ns�$)O�
BE3�
D4�(E3�4D8�8E3�;D8�<+E3�'O�3E7	�7O�:E7	�;+O�&<H5�"G6�*H5�6G:�:H5�=G:�>+H5�)O�5H9	�9O�<H9	�=+O�(BK8�,O�8K<	�<O�?K<	�+O�+N:�)M;�/N:�;M?�?N:�M?�+N:�.O�:N>	�>O�N>	�O�O�ON)Er{rFrGr�r�r�rrrrJr
r�r�r�r�r�r�r{r�r�r�r�r�r�r�r�r�r�r�r�rr	r
rrr r#r'r*r/rIr1r3r6r8r;rKr�rHrRrJr0r1rQrTrVrYrbrdrgrir�rurr�r�r�r�r�r�rXr$r"r�r��s�������*"�*"�*"�X"/�"/�"/�H&E�&E�&E�P2�2�2�B�X���'�)T���3�3���3�*@�@�@�*@�@�@�463�63�63�p#E�#E�#E�J��)�$�$���%�$��4'�'�'�RH�H�H�.��'�"�"�;�;�#�"�;�"(?�(?�(?�T��'�"�"�J�J�#�"�J���'�"�"�;�;�#�"�;���)�$�$�N�N�%�$�N�"��)�$�$�R�R�%�$�R�.7�7�7�r!�!�!�4C�C�C�:F�F�F�P6�6�6�&���:/�/�/�b&,�&,�&,�PA�A�A�A�A�A�A�A�A�-�-�-�&��)�$�$�9�9�%�$�9���)�$�$���'�"�"��
9�
9���#�"�%�$�
9���)�$�$��
9�
9���%�$�
9���)�$�$���'�"�"��9�9���#�"�%�$�9� ��'�"�"�7�7�#�"�7�5�5�5�"�X����)B�B�E�G�G�8G�8G�G�G�8G�tE�E�E��X�����&9�:�:�E�G�G�2�2�G�G�2��X�_�^�%P�Q�Q�5�5�R�Q�5� 2�2�2�>;�;�;�;�;�;� >� >� >�D���=�=�=�@�@�@�&$�&$�&$�PK�K�K�K�K�K�$C�C�C�& � � �$=�=�=�
>�
>�
>�7/�7/�7/�r0N�0N�0N�0N�0Nr$r�r�zTest needs TLS 1.3c�P�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
dS)
�TestPostHandshakeAuthc���tjtjg}|D�]J}t�|��}|�|jd��d|_|�|jd��tj|_|�|jtj��|�|jd��d|_|�|jtj��|�|jd��tj|_d|_|�|jtj��|�|jd����LdSr�)	r
r_r`rlr��post_handshake_authr�r�r�)r�r|rcrUs    r"�test_pha_setterz%TestPostHandshakeAuth.test_pha_settervs=���#�S�%<�
�	�"�	<�	<�H��.�.��*�*�C����S�4�e�<�<�<�&*�C�#����S�4�d�;�;�;�!�/�C�O����S�_�c�.?�@�@�@����S�4�d�;�;�;�&+�C�#����S�_�c�.?�@�@�@����S�4�e�<�<�<�!�/�C�O�&*�C�#����S�_�c�.?�@�@�@����S�4�d�;�;�;�;�%	<�	<r$c�L�t��\}}}d|_tj|_d|_|�t��t|d���}|5|�tj	��|���5}|�
t|jf��|�
d��|�|�d��d��|�
d��|�|�d��d	��|�
d��|�|�d��d
��|�
d��|�|�d��d	��|�
d��|�d���d
��}|�d|��ddd��n#1swxYwYddd��dS#1swxYwYdS)NTFr�r�r	r�rrrr
rirr:)r�r�r
r�r�r�r�rCr�r�r�r�r=r�r�r`r�r�)r�r�r�r�r<r��	cert_texts       r"�test_pha_requiredz'TestPostHandshakeAuth.test_pha_required�s}��3B�3D�3D�0����-1��*�%(�%6��"�-1��*��&�&��7�7�7�#�N�5�I�I�I��
�	J�	J��+�+�F�M�O�O�<D�,�F�F�
J�IJ��	�	�4���-�.�.�.����
�#�#�#�� � �������z�:�:�:��������� � �������w�7�7�7����
�#�#�#�� � �������y�9�9�9��������� � �������w�7�7�7����
�#�#�#��F�F�4�L�L�/�/�
�;�;�	��
�
�=�y�I�I�I�
J�
J�
J�
J�
J�
J�
J�
J�
J�
J�
J����
J�
J�
J�
J�	J�	J�	J�	J�	J�	J�	J�	J�	J�	J�	J�	J����	J�	J�	J�	J�	J�	Js7�)H�E-H�5H�H	�H�H	�	H�H� Hc���t��\}}}d|_tj|_d|_d�}||_||_t
|d���}|5|�tj��|d���5}|�	t|jf��|�d��|�
tjd��5|�d��}|�|d	��|�d
��|�d��ddd��n#1swxYwYddd��n#1swxYwYddd��dS#1swxYwYdS)NTc��tjr=|tjkr/||||||f}tj�d|�d���dSdSdS)NzTLS: r�)rr�r�ALERTr�r�r�)rK�	directionr9�content_type�msg_typer�r�s       r"�msg_cbz>TestPostHandshakeAuth.test_pha_required_nocert.<locals>.msg_cb�sc����
5�<�?�3H�#H�#H��i��,��$�O���
� � �!3��!3�!3�!3�4�4�4�4�4�
5�
5�#H�#Hr$r�Fr�rz#(certificate required|EOF occurred)r�rr	)r�r�r
r�r��
_msg_callbackrCr�r�r�r�r=r�r�r�r`r�)r�r�r�r�r�r<r�r�s        r"�test_pha_required_nocertz.TestPostHandshakeAuth.test_pha_required_nocert�s3��3B�3D�3D�0����-1��*�%(�%6��"�-1��*�	5�	5�	5�
(.��$�'-��$�#�N�4�H�H�H��
�	!�	!��+�+�F�M�O�O�<D�AF�,�H�H�
!�KL��	�	�4���-�.�.�.���������+�+��L�9���!�!�
�6�6�$�<�<�D��$�$�T�7�3�3�3��G�G�J�'�'�'��F�F�4�L�L�L�!�!�!�!�!�!�!�!�!�!�!����!�!�!�!�
!�
!�
!�
!�
!�
!�
!�
!�
!�
!�
!����
!�
!�
!�
!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!����	!�	!�	!�	!�	!�	!s\�*E(�AE�AD9�-E�9D=�=E�D=�E�E(�E	�E(�E	�E(�(E,�/E,c��tjrtj�d��t��\}}}d|_tj|_	d|_|�
t��tj|_	t|d���}|5|�tj��|���5}|�t"|jf��|�d��|�|�d��d��|�d	��|�|�d��d
��|�d��|�|�d��d��ddd��n#1swxYwYddd��dS#1swxYwYdS)Nr�TFr�r�r	r�rrrr
)rr�r�r�r�r�r�r
r�r�r�r�r�rCr�r�r�r�r=r�r`rDs      r"�test_pha_optionalz'TestPostHandshakeAuth.test_pha_optional�s���?�	#��J���T�"�"�"�3B�3D�3D�0����-1��*�%(�%6��"�-1��*��&�&��7�7�7�&)�%6��"�#�N�5�I�I�I��
�		:�		:��+�+�F�M�O�O�<D�,�F�F�
:�IJ��	�	�4���-�.�.�.����
�#�#�#�� � �������z�:�:�:��������� � �������w�7�7�7����
�#�#�#�� � �������y�9�9�9�
:�
:�
:�
:�
:�
:�
:�
:�
:�
:�
:����
:�
:�
:�
:�		:�		:�		:�		:�		:�		:�		:�		:�		:�		:�		:�		:����		:�		:�		:�		:�		:�		:s7�)G�CF,� G�,F0	�0G�3F0	�4G�G�Gc�L�tjrtj�d��t��\}}}d|_tj|_	d|_t|d���}|5|�tj��|���5}|�
t|jf��|�d��|�|�d��d��|�d	��|�|�d��d
��|�d��|�|�d��d��ddd��n#1swxYwYddd��dS#1swxYwYdS)Nr�TFr�r�r	r�rrr)rr�r�r�r�r�r�r
r�r�rCr�r�r�r�r=r�r`rDs      r"�test_pha_optional_nocertz.TestPostHandshakeAuth.test_pha_optional_nocert�s����?�	#��J���T�"�"�"�3B�3D�3D�0����-1��*�%(�%6��"�-1��*�#�N�5�I�I�I��
�
	;�
	;��+�+�F�M�O�O�<D�,�F�F�	
;�IJ��	�	�4���-�.�.�.����
�#�#�#�� � �������z�:�:�:��������� � �������w�7�7�7����
�#�#�#�� � �������z�:�:�:�	
;�	
;�	
;�	
;�	
;�	
;�	
;�	
;�	
;�	
;�	
;����	
;�	
;�	
;�	
;�
	;�
	;�
	;�
	;�
	;�
	;�
	;�
	;�
	;�
	;�
	;�
	;����
	;�
	;�
	;�
	;�
	;�
	;s7�0)F�CF�5F�F	�F�F	�	F�F� Fc��t��\}}}d|_tj|_|�t��t|d���}|5|�tj	��|���5}|�
t|jf��|�
tjd��5|���ddd��n#1swxYwY|�d��|�d|�d����ddd��n#1swxYwYddd��dS#1swxYwYdS)	NTFr�r�z
not serverrsextension not receivedr�)r�r�r
r�r�r�r�rCr�r�r�r�r=r�r�rr�r�r`rDs      r"�test_pha_no_pha_clientz,TestPostHandshakeAuth.test_pha_no_pha_client�s��3B�3D�3D�0����-1��*�%(�%6��"��&�&��7�7�7�#�N�5�I�I�I��
�	G�	G��+�+�F�M�O�O�<D�,�F�F�
G�IJ��	�	�4���-�.�.�.��+�+�C�L�,�G�G�5�5��2�2�4�4�4�5�5�5�5�5�5�5�5�5�5�5����5�5�5�5���������
�
�7�������F�F�F�

G�
G�
G�
G�
G�
G�
G�
G�
G�
G�
G����
G�
G�
G�
G�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G����	G�	G�	G�	G�	G�	Gs\�)E�AD9�C$�D9�$C(�(D9�+C(�,AD9�-E�9D=	�=E�D=	�E�E�Ec��t��\}}}tj|_d|_|�t��t|d���}|5|�tj	��|���5}|�
t|jf��|�
d��|�|�d��d��|�
d��|�|�d��d	��|�
d��|�|�d��d��ddd��n#1swxYwYddd��dS#1swxYwYdS)
NTFr�r�r	r�r
rr)r�r
r�r�r�r�r�rCr�r�r�r�r=r�r�r`rDs      r"�test_pha_no_pha_serverz,TestPostHandshakeAuth.test_pha_no_pha_server
s���3B�3D�3D�0����%(�%6��"�-1��*��&�&��7�7�7�#�N�5�I�I�I��
�
	:�
	:��+�+�F�M�O�O�<D�,�F�F�	
:�IJ��	�	�4���-�.�.�.����
�#�#�#�� � �������y�9�9�9��������� � �������w�7�7�7����
�#�#�#�� � �������y�9�9�9�	
:�	
:�	
:�	
:�	
:�	
:�	
:�	
:�	
:�	
:�	
:����	
:�	
:�	
:�	
:�
	:�
	:�
	:�
	:�
	:�
	:�
	:�
	:�
	:�
	:�
	:�
	:����
	:�
	:�
	:�
	:�
	:�
	:s7�)F�CE)�F�)E-	�-F�0E-	�1F�F�Fc�P�t��\}}}tj|_tjj|_d|_|�t��t|d���}|5|�tj��|���5}|�
t|jf��|�d��|�d|�d����ddd��n#1swxYwYddd��dS#1swxYwYdS)NTFr�r�rsWRONG_SSL_VERSIONr�)r�r
r�r�rrkrhr�r�r�rCr�r�r�r�r=r�r�r`rDs      r"�test_pha_not_tls13z(TestPostHandshakeAuth.test_pha_not_tls13s���3B�3D�3D�0����%(�%6��"�),��)?��&�-1��*��&�&��7�7�7�#�N�5�I�I�I��
�	B�	B��+�+�F�M�O�O�<D�,�F�F�
B�IJ��	�	�4���-�.�.�.���������
�
�2�A�F�F�4�L�L�A�A�A�
B�
B�
B�
B�
B�
B�
B�
B�
B�
B�
B����
B�
B�
B�
B�	B�	B�	B�	B�	B�	B�	B�	B�	B�	B�	B�	B����	B�	B�	B�	B�	B�	Bs7�.)D�A D�7D�D	�D�
D	�D�D�"Dc��t}t�tj��}d|_|�t��d|_tj|_	t�tj
��}|�t��|�t��d|_tj
|_	t|d���}|5|�t!j��|���5}|�t$|jf��|�d��|�|�d��d��|�d��|�|�d��d	��|�d��|�|�d��d
��|�|���i��ddd��n#1swxYwYddd��dS#1swxYwYdS)NTFr�r�r	r�rrrr
)r�r
rlr`r�r�r�r�r�r�r_r�r�r�rCr�r�r�r�r=r�r�r`rs)r�r�r�r�r<r�s      r"�test_bpo37428_pha_cert_nonez1TestPostHandshakeAuth.test_bpo37428_pha_cert_none/s[��,������(?�@�@��-1��*��&�&��7�7�7�(-��%�%(�]��"�����(?�@�@���&�&��7�7�7��,�,�Z�8�8�8�-1��*�%(�%6��"�#�N�5�I�I�I��
�	6�	6��+�+�F�M�O�O�<D�,�F�F�

6�IJ��	�	�4���-�.�.�.����
�#�#�#�� � �������z�:�:�:��������� � �������w�7�7�7����
�#�#�#�� � �������y�9�9�9�� � ������"�5�5�5�

6�

6�

6�

6�

6�

6�

6�

6�

6�

6�

6����

6�

6�

6�

6�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6����	6�	6�	6�	6�	6�	6s7�()H9�DH!�H9�!H%	�%H9�(H%	�)H9�9H=�H=c	��td���\}}}t|d���}|5|�tj��|���5}|�t
|jf��|j���}|�	t|��d��|\}}|j���}	|�	t|	��d��|�	||	d��|�	t|��t|	d����|�	t|��t|	d����|�||��|�t|��t|����|�t|��t|����|�|���|�����|�dt|����|�d	t|����|�t$j��}
|�t$j��}|�|
t,��|�d
|
��|�|t.��|�	t0�|
��|��ddd��n#1swxYwYddd��dS#1swxYwYdS)NFr�r�r�r�r�rzCN=localhostzCN=our-ca-serverz-----BEGIN CERTIFICATE-----)r�rCr�r�r�r�r=r�rr�rbr�hashr�r?�get_infor��public_bytesr��ENCODING_PEM�ENCODING_DERrAr\r�r
r+)r�r�r�r�r<r��vc�ee�ca�uvcr2rs            r"�test_internal_chain_clientz0TestPostHandshakeAuth.test_internal_chain_clientNsI��3B��4
�4
�4
�0����$�N�5�I�I�I��
�	�	��+�+��
��� (�,���
���	�	�4���-�.�.�.��Y�1�1�3�3��� � ��R���!�,�,�,����B��i�4�4�6�6��� � ��S���1�-�-�-�� � ��S��V�,�,�,�� � ��b���4��A��<�<�8�8�8�� � ��b���4��A��<�<�8�8�8��#�#�B��+�+�+��#�#�D��H�H�d�2�h�h�7�7�7��#�#�D��H�H�d�2�h�h�7�7�7��#�#�B�K�K�M�M�2�;�;�=�=�A�A�A��
�
�n�d�2�h�h�7�7�7��
�
�0�$�r�(�(�;�;�;��o�o�d�&7�8�8���o�o�d�&7�8�8���%�%�c�3�/�/�/��
�
�;�S�A�A�A��%�%�c�5�1�1�1�� � ��,�,�S�1�1�3����7
�
�
�
�
�
�
�
�
�
�
����
�
�
�
�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s6�)M
�KL2�&M
�2L6	�6M
�9L6	�:M
�
M�Mc���t��\}}}|�t��tj|_tjj|_t|d���}|5|�
tj��|���5}|�t|jf��|�d��|�d��}|�|d��|�d��|�d��}|�|d��ddd��n#1swxYwYddd��dS#1swxYwYdS)NFr�r�sVERIFIEDCHAIN
r�s
sUNVERIFIEDCHAIN
)r�r�r�r
r�r�rrkrhrCr�r�r�r�r=r�r`r�)r�r�r�r�r<r��ress       r"�test_internal_chain_serverz0TestPostHandshakeAuth.test_internal_chain_serverss���3B�3D�3D�0�����&�&��7�7�7�%(�%6��"�),��)?��&�#�N�5�I�I�I��
�	1�	1��+�+��
��� (�,���

1���	�	�4���-�.�.�.����*�+�+�+��f�f�T�l�l��� � ��i�0�0�0����,�-�-�-��f�f�T�l�l��� � ��i�0�0�0�

1�

1�

1�

1�

1�

1�

1�

1�

1�

1�

1����

1�

1�

1�

1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1�	1����	1�	1�	1�	1�	1�	1s7�')E�B"D>�2E�>E	�E�E	�E�E�EN)r{rFrGr�r�r�r�r�r�r�r�r�r�r�rXr$r"r�r�ts�������<�<�<�0J�J�J�2#!�#!�#!�J:�:�:�0;�;�;�,G�G�G� :�:�:�(B�B�B�"6�6�6�>#�#�#�J1�1�1�1�1r$r��keylog_filenamez0test requires OpenSSL 1.1.1 with keylog callbackc�B�eZdZejfd�Zeeje	d��d�����Z
eeje	d��d�����Zeejej
jd��eje	d��d�������Zd�Zd�Zd	�Zd
S)�TestSSLDebugc��t|��5}tt|����cddd��S#1swxYwYdSr)rKrbr�)r��fnamerNs   r"�keylog_lineszTestSSLDebug.keylog_lines�s~��
�%�[�[�	 �A��t�A�w�w�<�<�	 �	 �	 �	 �	 �	 �	 �	 �	 �	 �	 �	 ����	 �	 �	 �	 �	 �	 s
�9�=�=r�c�D�|�tjtj��t�tj��}|�|jd��|�	tj�tj����tj|_|�|jtj��|�
tj�tj����|�|���d��d|_|�|jd��|�t t"f��5tj�tj�tj����|_ddd��n#1swxYwY|�t(��5d|_ddd��dS#1swxYwYdS)Nr�)r�rr�r�r
rlr`r�r�r|rr�isfilerGr�r��IsADirectoryError�PermissionErrorr�abspathr�rYs  r"�test_keylog_defaultsz!TestSSLDebug.test_keylog_defaults�s��	
���	�(�)�*:�;�;�;��n�n�S�4�5�5������,�d�3�3�3��������	�(8�9�9�:�:�:�'�.�������,�i�.>�?�?�?��������y�'7�8�8�9�9�9�����*�*�,�,�a�0�0�0�"�������,�d�3�3�3�
�
�
� 1�?�C�
D�
D�	3�	3�"$�'�/�/�����	� 0�1�1�#3�#3�C��	3�	3�	3�	3�	3�	3�	3�	3�	3�	3�	3����	3�	3�	3�	3�
�
�
�y�
)�
)�	$�	$�"#�C��	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$����	$�	$�	$�	$�	$�	$s%�AG�G�"G�H�H�Hc�h�|�tjtj��t	��\}}}tj|_t
|d���}|5|�tj��|���5}|�	t|jf��ddd��n#1swxYwYddd��n#1swxYwY|�|�
��d��d|_tj|_t
|d���}|5|�tj��|���5}|�	t|jf��ddd��n#1swxYwYddd��n#1swxYwY|�|�
��d��tj|_tj|_t
|d���}|5|�tj��|���5}|�	t|jf��ddd��n#1swxYwYddd��n#1swxYwY|�|�
��d��d|_d|_dS)NFr�r�r���)r�rr�r�r�r�rCr�r�r�r�r=r�r�rDrDs      r"�test_keylog_filenamez!TestSSLDebug.test_keylog_filename�s���	
���	�(�)�*:�;�;�;�3B�3D�3D�0����)2�)9��&�#�N�5�I�I�I��
�	/�	/��+�+�F�M�O�O�<D�,�F�F�
/�IJ��	�	�4���-�.�.�.�
/�
/�
/�
/�
/�
/�
/�
/�
/�
/�
/����
/�
/�
/�
/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/����	/�	/�	/�	/�
	
����*�*�,�,�a�0�0�0�)-��&�)2�)9��&�#�N�5�I�I�I��
�	/�	/��+�+�F�M�O�O�<D�,�F�F�
/�IJ��	�	�4���-�.�.�.�
/�
/�
/�
/�
/�
/�
/�
/�
/�
/�
/����
/�
/�
/�
/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/����	/�	/�	/�	/�	
���� 1� 1� 3� 3�R�8�8�8�)2�)9��&�)2�)9��&�#�N�5�I�I�I��
�	/�	/��+�+�F�M�O�O�<D�,�F�F�
/�IJ��	�	�4���-�.�.�.�
/�
/�
/�
/�
/�
/�
/�
/�
/�
/�
/����
/�
/�
/�
/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/����	/�	/�	/�	/�	
���� 1� 1� 3� 3�R�8�8�8�)-��&�)-��&�&�&s��!)C�
"B8�,C�8B<	�<C�?B<	�C�C�C�-)F�"F�8F�F	�F�F	�F�F�"F�)I1�,"I�I1�I	�I1�!I	�"I1�1I5�8I5z.test is not compatible with ignore_environmentc���|�tjtj��tjj�tj	��5tjtj	d<|�
tj	dtj��t�tj
��}|�
|jd��t���}|�
|jtj��t���}|�
|jtj��ddd��dS#1swxYwYdS)N�
SSLKEYLOGFILE)r�rr�r�rr�mockrN�dictr�environr�r
rlr`r�rrrYs  r"�test_keylog_envzTestSSLDebug.test_keylog_env�sg��
	
���	�(�)�*:�;�;�;�
�]�
 �
%�
%�b�j�
1�
1�	D�	D�*3�*:�B�J��'����R�Z��8�)�:J�K�K�K��.�.��!8�9�9�C����S�0�$�7�7�7��,�,�.�.�C����S�0�)�2B�C�C�C��,�,�.�.�C����S�0�)�2B�C�C�C�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D�	D����	D�	D�	D�	D�	D�	Ds�DE+�+E/�2E/c�6�t��\}}}d�}|�|jd��||_|�|j|��|�t��5t��|_ddd��dS#1swxYwYdS)Nc��dSrrX�rKr�r9r�r�r�s      r"r�z.TestSSLDebug.test_msg_callback.<locals>.msg_cb�r�r$)r�r�r�r�r�r�)r�r�r�r�r�s     r"�test_msg_callbackzTestSSLDebug.test_msg_callback�s���3B�3D�3D�0����	�	�	�	
�
�
�n�2�D�9�9�9�'-��$��
�
�n�2�F�;�;�;�
�
�
�y�
)�
)�	4�	4�+1�8�8�N�(�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4����	4�	4�	4�	4�	4�	4s�-B�B�Bc�p���t��\}}}tjj|_g���fd�}||_t
|d���}|5|�tj��|���5}|�	t|jf��ddd��n#1swxYwYddd��n#1swxYwY��dtjtjtjf�����dtjtjtjf���dS)Nc������|tj����|t����|ddh����||||f��dS)NrLr�)rAr
r�r�r�r�)rKr�r9r�r�r�rr�s      ��r"r�z4TestSSLDebug.test_msg_callback_tls12.<locals>.msg_cb�sk����!�!�$��
�6�6�6��!�!�$��.�.�.��M�M�)�f�g�%6�7�7�7��J�J�	�7�L�(�C�D�D�D�D�Dr$Fr�r�rLr�)r�r
rrkrhr�rCr�r�r�r�r=r�r�	HANDSHAKEr
�SERVER_KEY_EXCHANGE�CHANGE_CIPHER_SPEC)r�r�r�r�r�r<r�rs`      @r"�test_msg_callback_tls12z$TestSSLDebug.test_msg_callback_tls12�s�����3B�3D�3D�0����),��)?��&���	E�	E�	E�	E�	E�	E�(.��$�#�N�5�I�I�I��
�	/�	/��+�+�F�M�O�O�<D�,�F�F�
/�IJ��	�	�4���-�.�.�.�
/�
/�
/�
/�
/�
/�
/�
/�
/�
/�
/����
/�
/�
/�
/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/����	/�	/�	/�	/�
	
�
�
�
�Z�'��)B�
�
0�
2��	
�	
�	
�
	
�
�
�
�j�(�/�*L�
�
/�
1��	
�	
�	
�	
�	
s6�
)B;�6"B$�B;�$B(	�(B;�+B(	�,B;�;B?�B?c�\��t��\}}}t��d�d�}�fd�}||_||_t|d���}|5|�tj��|���5}|�t|jf��ddd��n#1swxYwY|�tj��|���5}|�t|jf��ddd��n#1swxYwYddd��dS#1swxYwYdS)Nr�c��dSrrXr�s      r"r�z@TestSSLDebug.test_msg_callback_deadlock_bpo43577.<locals>.msg_cbr�r$c����|_dSrrB)r�r�rU�server_context2s   �r"�sni_cbz@TestSSLDebug.test_msg_callback_deadlock_bpo43577.<locals>.sni_cbs���*�D�L�L�Lr$Fr�r�)	r�r��sni_callbackrCr�r�r�r�r=)	r�r�r�r�r�r�r<r�r�s	        @r"�#test_msg_callback_deadlock_bpo43577z0TestSSLDebug.test_msg_callback_deadlock_bpo43577s���3B�3D�3D�0����)�+�+�A�.��	�	�	�	+�	+�	+�	+�	+�(.��$�&,��#�#�N�5�I�I�I��
�	/�	/��+�+�F�M�O�O�<D�,�F�F�
/�IJ��	�	�4���-�.�.�.�
/�
/�
/�
/�
/�
/�
/�
/�
/�
/�
/����
/�
/�
/�
/� �+�+�F�M�O�O�<D�,�F�F�
/�IJ��	�	�4���-�.�.�.�
/�
/�
/�
/�
/�
/�
/�
/�
/�
/�
/����
/�
/�
/�
/�		/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/����	/�	/�	/�	/�	/�	/sZ�)D!�:"B(�D!�(B,	�,D!�/B,	�0+D!�"D	�=D!�	D
	�
D!�D
	�D!�!D%�(D%N)r{rFrGrr�r��requires_keylogrrr0r1r�r�r��flags�ignore_environmentr�r�r�r�rXr$r"r�r��s*������!*�!1� � � � ���X�_�^�%P�Q�Q�$�$�R�Q��_�$�,��X�_�^�%P�Q�Q� .� .�R�Q��_� .�D��X�_�S�Y�1�E�G�G��X�_�^�%P�Q�Q�
D�
D�R�Q�G�G��_�
D�
4�
4�
4�
�
�
�>/�/�/�/�/r$r�c�J�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�ZdS)�TestEnumerationsc�j�Gd�dtj��}tj|t��dS)Nc�p�eZdZejZejZejZ	ej
ZejZ
ejZejZdS)�;TestEnumerations.test_tlsversion.<locals>.CheckedTLSVersionN)r{rFrGr��PROTO_MINIMUM_SUPPORTEDrm�PROTO_SSLv3r�PROTO_TLSv1r�
PROTO_TLSv1_1r�
PROTO_TLSv1_2rk�
PROTO_TLSv1_3r��PROTO_MAXIMUM_SUPPORTEDrnrXr$r"�CheckedTLSVersionr&sJ������ $� <���$�E��$�E��(�G��(�G��(�G� $� <���r$r
)�enum�IntEnum�_test_simple_enumr)r�r
s  r"�test_tlsversionz TestEnumerations.test_tlsversion%sJ��	=�	=�	=�	=�	=���	=�	=�	=�	
��0�*�=�=�=�=�=r$c�j�Gd�dtj��}tj|t��dS)Nc�(�eZdZ	dZdZdZdZdZdZdS)�DTestEnumerations.test_tlscontenttype.<locals>.Checked_TLSContentTyperrr���r9�N)	r{rFrGr�r�r��APPLICATION_DATA�HEADER�INNER_CONTENT_TYPErXr$r"�Checked_TLSContentTyper1s8������
�"$���E��I�!���F�!&���r$r)rrr
r)r�rs  r"�test_tlscontenttypez$TestEnumerations.test_tlscontenttype0sJ��	'�	'�	'�	'�	'�T�\�	'�	'�	'�	
��5��G�G�G�G�Gr$c�j�Gd�dtj��}tj|t��dS)Nc��eZdZ	dZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#S)$�@TestEnumerations.test_tlsalerttype.<locals>.Checked_TLSAlertTyper�
rrr�r��(�)rQ�+�,�-�.�/r=�1�2�3�<�F�G�P�V�Zr^�m�n�o�p�q�r�s�t�xN)%r{rFrG�CLOSE_NOTIFY�UNEXPECTED_MESSAGE�BAD_RECORD_MAC�DECRYPTION_FAILED�RECORD_OVERFLOW�DECOMPRESSION_FAILURE�HANDSHAKE_FAILURE�NO_CERTIFICATE�BAD_CERTIFICATE�UNSUPPORTED_CERTIFICATE�CERTIFICATE_REVOKED�CERTIFICATE_EXPIRED�CERTIFICATE_UNKNOWN�ILLEGAL_PARAMETER�
UNKNOWN_CA�
ACCESS_DENIED�DECODE_ERROR�
DECRYPT_ERROR�EXPORT_RESTRICTION�PROTOCOL_VERSION�INSUFFICIENT_SECURITY�INTERNAL_ERROR�INAPPROPRIATE_FALLBACK�
USER_CANCELED�NO_RENEGOTIATION�MISSING_EXTENSION�UNSUPPORTED_EXTENSION�CERTIFICATE_UNOBTAINABLE�UNRECOGNIZED_NAME�BAD_CERTIFICATE_STATUS_RESPONSE�BAD_CERTIFICATE_HASH_VALUE�UNKNOWN_PSK_IDENTITY�CERTIFICATE_REQUIRED�NO_APPLICATION_PROTOCOLrXr$r"�Checked_TLSAlertTyper@s�������
��L�!#���N� "�� �O�$&�!� "���N� �O�&(�#�"$��"$��"$�� "���J��M��L��M�!#��!��$&�!��N�%'�"��M�"�� #��$'�!�'*�$� #��.1�+�),�&�#&� �#&� �&)�#�#�#r$rZ)rrr
r)r�rZs  r"�test_tlsalerttypez"TestEnumerations.test_tlsalerttype?sK��&	*�&	*�&	*�&	*�&	*�4�<�&	*�&	*�&	*�N	
��3�]�C�C�C�C�Cr$c�j�Gd�dtj��}tj|t��dS)Nc�h�eZdZ	dZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdZdZdZdZdZdZdZdZdS)�DTestEnumerations.test_tlsmessagetype.<locals>.Checked_TLSMessageTyperr�r�rr8r.r�rr�r>�
�r;r�rrr�rr��C�rN)r{rFrG�
HELLO_REQUEST�CLIENT_HELLO�SERVER_HELLO�HELLO_VERIFY_REQUEST�NEWSESSION_TICKET�END_OF_EARLY_DATA�HELLO_RETRY_REQUEST�ENCRYPTED_EXTENSIONS�CERTIFICATEr��CERTIFICATE_REQUEST�SERVER_DONE�CERTIFICATE_VERIFY�CLIENT_KEY_EXCHANGE�FINISHED�CERTIFICATE_URL�CERTIFICATE_STATUS�SUPPLEMENTAL_DATA�
KEY_UPDATE�
NEXT_PROTO�MESSAGE_HASHr�rXr$r"�Checked_TLSMessageTyper^js�������
��M��L��L�#$� � !�� !��"#��#$� ��K�"$��"$���K�!#��"$���H� �O�!#�� "���J��J��L�!'���r$rx)rrr
r
)r�rxs  r"�test_tlsmessagetypez$TestEnumerations.test_tlsmessagetypeisJ��	(�	(�	(�	(�	(�T�\�	(�	(�	(�6	
��5��G�G�G�G�Gr$c��tjtjddd�tj���}|j|_tj|tj��dS)N�
_SSLMethodr
c�8�|�d��o|dkS)NrZr�r-r s r"r�z1TestEnumerations.test_sslmethod.<locals>.<lambda>�s��T�_�_�[�9�9�W�d�FW�>W�r$��source)	r�
_old_convert_rr
r�r^rr
r{)r��Checked_SSLMethods  r"�test_sslmethodzTestEnumerations.test_sslmethod�sX�� �.���l�E�W�W��x�����->�,J��)���0�#�.�A�A�A�A�Ar$c��tjtjddd�tj���}tj|tj��dS)N�Optionsr
c�,�|�d��S)N�OP_r}r s r"r�z/TestEnumerations.test_options.<locals>.<lambda>�s��T�_�_�U�3�3�r$r~)rr��IntFlagr
r�r
r�)r��CheckedOptionss  r"ryzTestEnumerations.test_options�sJ���+���i��3�3��x�����
	
��~�s�{�;�;�;�;�;r$c��tjtjddd�tj���}tj|tj��dS)N�AlertDescriptionr
c�,�|�d��S)N�ALERT_DESCRIPTION_r}r s r"r�z8TestEnumerations.test_alertdescription.<locals>.<lambda>�s��T�_�_�-A�B�B�r$r~)rr�rr
r�r
r�)r��CheckedAlertDescriptions  r"�test_alertdescriptionz&TestEnumerations.test_alertdescription�sN��"&�"4���0�%�B�B��x�#�#�#��
	
��6��8L�M�M�M�M�Mr$c��tjtjddd�tj���}tj|tj��dS)N�SSLErrorNumberr
c�,�|�d��S)N�
SSL_ERROR_r}r s r"r�z6TestEnumerations.test_sslerrornumber.<locals>.<lambda>�s��T�_�_�\�:�:�r$r~)rr�rr
r�r
r�)r��Checked_SSLErrorNumbers  r"�test_sslerrornumberz$TestEnumerations.test_sslerrornumber�sN��!%�!3���.��:�:��x�"�"�"��
	
��5�s�7I�J�J�J�J�Jr$c��tjtjddd�tj���}tj|tj��dS)N�VerifyFlagsr
c�,�|�d��S)N�VERIFY_r}r s r"r�z3TestEnumerations.test_verifyflags.<locals>.<lambda>�s��T�_�_�Y�7�7�r$r~)rr�r�r
r�r
r�)r��CheckedVerifyFlagss  r"�test_verifyflagsz!TestEnumerations.test_verifyflags�sL��!�/���m�U�7�7��x�����
	
��1�3�?�C�C�C�C�Cr$c��tjtjddd�tj���}tj|tj��dS)N�
VerifyModer
c�,�|�d��S)N�CERT_r}r s r"r�z2TestEnumerations.test_verifymode.<locals>.<lambda>�s��T�_�_�W�5�5�r$r~)rr�rr
r�r
r�)r��CheckedVerifyModes  r"�test_verifymodez TestEnumerations.test_verifymode�sL�� �.���l�E�5�5��x�����
	
��0�#�.�A�A�A�A�Ar$N)
r{rFrGrrr[ryr�ryr�r�r�r�rXr$r"r�r�#s�������	>�	>�	>�
H�
H�
H�(D�(D�(D�TH�H�H�<B�B�B�<�<�<�N�N�N�K�K�K�D�D�D�B�B�B�B�Br$r�c��tj�rtjtjd�}|���D]"\}}|��}|r|dr	|�d|��}n!�#t
tj����}tdtj	�dtj
����td|z��tdtjz��tdtjz��	tdtj
z��n#t$rYnwxYwtt t"t$t&t(t*t,t.t0t2t4fD]8}t6j�|��stjd	|z����9t?j ��}tCj"t>j#g|�R�dS)
N)�Mac�Windowsrr}ztest_ssl: testing with z          under %sz          HAS_SNI = %rz          OP_ALL = 0x%8xz          OP_NO_TLSv1_1 = 0x%8xzCan't read certificate file %r)$rr�rL�mac_ver�	win32_ver�itemsr�rr
r@r?r�rwr�r�r�r�r�r�r�r�r�r�r�r��BADKEYr�rr�exists�
TestFailedr�threading_setuprr�addModuleCleanup�threading_cleanup)�platsr!rv�plat�filename�thread_infos      r"�setUpModuler��s�������#��)�
�
�� �+�+�-�-�	-�	-�J�D�$��4�6�6�D��
��Q��
�"&�$�$���-�������)�+�+�,�,�D�
��
�
 �
 �
 �#�":�":�<�	=�	=�	=�
�"�T�)�*�*�*�
�&���4�5�5�5�
�(�3�:�5�6�6�6�	��3�c�6G�G�H�H�H�H���	�	�	��D�	����	�.��'�>�=��)�:����	$�R�R��
�w�~�~�h�'�'�	R��$�%E��%P�Q�Q�Q�	R�#�2�4�4�K���.�@�O�;�O�O�O�O�O�Os�2D�
D�D�__main__r)r�TFNN)Nrr)�r�rr�
unittest.mockr�r�test.supportrrrrrr�r|r�rr�rr�r��urllib.requestr�r�r~rVrL�	sysconfigrxr��ImportError�import_deprecatedr	�
import_moduler
r�rrr
rrR�Py_DEBUGr1rs�_PROTOCOL_NAMESrRr�r?rj�get_config_varrr�r��verr]r�r#r��fsencoder�r�r�r�r�r�r�r�r�r�r�r*r�r�r�r�r�r�r�r�r�r�r&r�r�r�r�r�r�r�r�r�rrr�r�rCrDrErFrGrOrVrd�	lru_cacherar{r�r��ignore_warningsrwrIr�r�r��TestCaser�rOr3rHr^rl�requires_resourcer�r�r��test.ssl_serversr�r�rCrBr�r�r�rJr�rl�
HAS_KEYLOGr�r�r�r�r{�mainrXr$r"�<module>r�sM
���
�
�
���������������&�&�&�&�&�&�"�"�"�"�"�"�&�&�&�&�&�&�)�)�)�)�)�)�(�(�(�(�(�(�
�
�
�
�
�
�
�
���������	�	�	�	�	�	�	�	�����
�
�
�
�������������������������������M�M�M�M������
�F�F�F�����-�?�,�Z�8�8��"�m�!�%�(�(������K�K�K�K�K�K�K�K�K�K�K�K��7�3�*�+�+���5�c�l�g�5���F�3�&�'�'�	�����+�y�8��1��1�2J�K�K�����
)�
)�J�E�3�
����U�#�#���g�c�n�c�*�*��������������%(��E�"�"�:�:�:��9�]�#�#�����X�&�&���9�^�$�$��
�)�M�
"�
"�����X�&�&�����G�$�$�
��Y�3�4�4���I�2�3�3����	��8�	�	���r�{�6�"�"���)�H�l�3�3���	�(�L�1�1�
�/�+�+�&�-�.����
�"�)�$�
%�
%���)�N�+�+��&��
;�F�T�0�+�+�&�-�.�����$�9�^�,�,��*���i� 0�1�1��.���Y�x��
.�
.�
�
�Y�}�
%�
%�
��i�
�&�&���I�k�"�"�	���*���I�n�%�%�	�
�)�M�
"�
"���)�0�1�1��	��<�	 �	 ���I�k�"�"�	��y�+�,�,���i� 5�6�6��	��>�	"�	"���r�{�6�"�"���G�C�!4�a�8�8���7�3� 2�A�6�6���W�S�"6��:�:��%�g�c�+H�!�L�L��$�W�S�*F��J�J�����
�9�;�;�
�3�3�3�3�
�
�
�4�4�4�*��%�%���%�P���".�.�.����5�_�4�
����� #�}�t�!�D�$�/�/�/�/�/�,!0�4��4�4�4�4�4�2l1�l1�l1�l1�l1�x�(�l1�l1�l1�^{
 �{
 �{
 �{
 �{
 �8�$�{
 �{
 �{
 �|3D�3D�3D�3D�3D�H�%�3D�3D�3D�l<3�<3�<3�<3�<3�X�&�<3�<3�<3�~.�.�.�.�.�X�&�.�.�.�`n<�n<�n<�n<�n<�H�-�n<�n<�n<�b���9�%�%�L�L�L�L�L�X�&�L�L�&�%�L�2	Z�	Z�	Z�	Z�N�N�N�/�.�.�.�.�.�X�X�X�X�X��)�X�X�X�tt�t�t�t�t��)�t�t�t�l?G�EI�#�.�.�.�.�bIJ�KG�KG�KG�KG�\gN�gN�gN�gN�gN�H�%�gN�gN�gN�T/���_�_�Y�/�/�1E�F�F�P1�P1�P1�P1�P1�H�-�P1�P1�G�F�P1�f�W�S�^�%6�
7�
7�
�%�(�%��B�D�D��T/�T/�T/�T/�T/�8�$�T/�T/�T/�nTB�TB�TB�TB�TB�x�(�TB�TB�TB�n P� P� P�F�z����H�M�O�O�O�O�O��s$�.A3�3A=�<A=�D#�#D+�*D+