Sindbad~EG File Manager

Current Path : /proc/2568807/root/usr/local/lib/python3.12/test/__pycache__/
Upload File :
Current File : //proc/2568807/root/usr/local/lib/python3.12/test/__pycache__/test_ssl.cpython-312.opt-1.pyc

�

'Μg�\��	�ddlZddlZddlZddlmZddlmZddlmZddlmZddlm	Z	ddlm
Z
ddlmZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z 	ddl!Z!ejFd	�Z$ddl%Z%dd
l$m&Z&m'Z'm(Z(m)Z)ejTxrej<dk(Z+e,e$jZ�Z.ej^Z/e$j`dk\Z1ejdd
�Z3iZ4dD]'\Z5Z6	e7e$e5�Z5e7e$jLe6�Z6e6e4e5<�)d�Z9e9d�Z:ejve:�Z<e9d�Z=e9d�Z>ejve=�Z?ejve>�Z@e9d�ZAe9d�ZBdZCe9d�ZDejveD�ZEe9dd�ZFe9dd�ZGdddddddd�ZHe9d �ZIe9d!�ZJd"ZKd#d$d%d&d'd(d)dddd*�
ZLe9d+�ZMd,ZNe9d-�ZOd.ZPe9dd/�ZQe9d0�ZRe9d1�ZSe9d2�ZTd"ZUd3ZVe9d4�ZWe9d5�ZXe9d6�ZYe9d7�ZZe9d8�Z[e9d9�Z\e9d:�Z]e9d;�Z^ejve^�Z_e7e$d<d�Z`e7e$d=d�Zae7e$d>d�Zbe7e$d?d�Zce7e$d@d�ZddA�Zeee�rdB�ZfndC�ZfdD�Zge j�dE��ZidF�ZjdG�ZkdH�Zle
j�en�I�Zoe$j�dddddJ�dK�ZqeJfdLdM�dN�ZrGdO�dPej��ZtGdQ�dRej��ZuGdS�dTej��ZvGdU�dVej��ZwGdW�dXej��ZxGdY�dZej��Zyej�d[�Gd\�d]ej���Z{dxd^�Z|d_�Z}dd`l~mZGda�dbe�j�Z�Gdc�dde�j�Z�			dyde�Z�	dzdf�Z�Gdg�dhej��Z�e�jeidi�dj�Gdk�dlej���Z�e�e$�jdm�Z�e�je�dn�Z�Gdo�dpej��Z�dq�Z�Gdr�dsej��Z�Gdt�duej��Z�dv�Z�e�dwk(re�j$�yy#e"$rdZ!Y��CwxYw#e8$rY���wxYw){�N)�support)�
import_helper)�	os_helper)�
socket_helper)�threading_helper)�warnings_helper)�asyncore�ssl)�
TLSVersion�_TLSContentType�_TLSMessageType�
_TLSAlertType�win32)�rr�PY_SSL_DEFAULT_CIPHERS))�PROTOCOL_SSLv3�SSLv3)�PROTOCOL_TLSv1�TLSv1)�PROTOCOL_TLSv1_1�TLSv1_1c��tjjtjjt�dg|���S)N�certdata)�os�path�join�dirname�__file__��names �*/usr/local/lib/python3.12/test/test_ssl.py�	data_filer"?s)��
�7�7�<�<�������1�:�E��E�E�zkeycert.pemzssl_cert.pemzssl_key.pemzkeycert.passwd.pemzssl_key.passwd.pem�somepass�capathz
4e1295a3.0z
5ed36f99.0)�)�countryName�XY�)�localityNamezCastle Anthrax�)�organizationNamezPython Software Foundation))�
commonName�	localhostzAug 26 14:23:15 2028 GMTzAug 29 14:23:15 2018 GMT�98A7CF88C74A32ED))�DNSr.r��issuer�notAfter�	notBefore�serialNumber�subject�subjectAltName�versionzrevocation.crlzkeycert3.pemr.)z)http://testca.pythontest.net/testca/ocsp/)z0http://testca.pythontest.net/testca/pycacert.cer)z2http://testca.pythontest.net/testca/revocation.crl)r&))r,�Python Software Foundation CA))r-z
our-ca-serverzOct 28 14:23:16 2037 GMTzAug 29 14:23:16 2018 GMT�CB2D80995A69525C)
�OCSP�	caIssuers�crlDistributionPointsr2r3r4r5r6r7r8zkeycert4.pem�fakehostnamezkeycertecc.pemz
localhost-eccz
ceff1710.0zallsans.pemzidnsans.pemz	nosan.pemzself-signed.pythontest.net�nullcert.pem�badcert.pemzXXXnonexisting.pem�
badkey.pemz	nokia.pemznullbytecert.pemztalos-2019-0758.pemzffdh3072.pem�OP_NO_COMPRESSION�OP_SINGLE_DH_USE�OP_SINGLE_ECDH_USE�OP_CIPHER_SERVER_PREFERENCE�OP_ENABLE_MIDDLEBOX_COMPATc��	tdd��5}d|j�vcddd�S#1swYyxYw#t$rYywxYw)Nz/etc/os-releasezutf-8)�encoding�ubuntuF)�open�read�FileNotFoundError)�fs r!�	is_ubunturN�sA����#�g�
6�!��q�v�v�x�'�7�
6�
6������s#�
7�+�	7�4�7�7�	A�Ac��|D]H}t|d�s�|jtjjks�8|jd��Jy)z@"Lower security level to '1' and allow all ciphers for TLS 1.0/1�minimum_versionz@SECLEVEL=1:ALLN)�hasattrrPr
rr�set_ciphers)�ctxs�ctxs  r!�seclevel_workaroundrU�s<���C���.�/��#�#�s�~�~�'=�'=�=���� 1�2�r#c��y�N�)rSs r!rUrU�s��r#c���t|t�rtt|d�}|�y|tjtj
tjhvry|j}t|td�d�S)z�Check if a TLS protocol is available and enabled

    :param protocol: enum ssl._SSLMethod member or name
    :return: bool
    NFT�	PROTOCOL_)
�
isinstance�str�getattrr
�PROTOCOL_TLS�PROTOCOL_TLS_SERVER�PROTOCOL_TLS_CLIENTr �has_tls_version�len)�protocolr s  r!�has_tls_protocolrd�sr���(�C� ��3��$�/���������#�1�1������
��=�=�D��4��K� 0� 1�2�3�3r#c�4�t|t�rtjj|}ttd|j���sytr|tjjkrytjtj�}t|d�r7|jtjjk7r||jkryt|d�r7|jtjjk7r||jkDryy)z{Check if a TLS/SSL version is enabled

    :param version: TLS version name or ssl.TLSVersion member
    :return: bool
    �HAS_FrP�maximum_versionT)r[r\r
r�__members__r]r �IS_OPENSSL_3_0_0�TLSv1_2�
SSLContextr`rQrP�MINIMUM_SUPPORTEDrg�MAXIMUM_SUPPORTED)r8rTs  r!rara�s����'�3���.�.�,�,�W�5���3�$�w�|�|�n�-�.���G�c�n�n�&<�&<�<���.�.��0�0�
1�C��C�*�+����3�>�>�#C�#C�C��c�)�)�)����&�'����s�~�~�?�?�?��#�%�%�%��r#c����fd�}|S)z�Decorator to skip tests when a required TLS version is not available

    :param version: TLS version name or ssl.TLSVersion member
    :return:
    c�F���tj����fd��}|S)Nc�Z��t��stj��d����|i|��S)Nz is not available.)ra�unittest�SkipTest)�args�kw�funcr8s  ��r!�wrapperz8requires_tls_version.<locals>.decorator.<locals>.wrapper�s4���"�7�+��'�'�7�)�3E�(F�G�G��T�(�R�(�(r#)�	functools�wraps)rurvr8s` �r!�	decoratorz'requires_tls_version.<locals>.decorator�s%���	����	�	)�
�	)�
�r#rX)r8rys` r!�requires_tls_versionrz�s�����r#c���djtjtj���}t
jr#tjj||z�yy)N� )	r�	traceback�format_exception�sys�	exceptionr�verbose�stdout�write)�prefix�
exc_formats  r!�handle_errorr�sD�����)�4�4�S�]�]�_�E�F�J�����
�
����*�,�-�r#c��tjr2tj�jdkDrtjStj
S�Nr)�time�daylight�	localtime�tm_isdst�altzone�timezonerXr#r!�
utc_offsetr�	s5���}�}����)�2�2�Q�6����}���M�M�>�r#)�category)�	cert_reqs�ca_certs�ciphers�certfile�keyfilec��|jd�s-t|d<tjtj�}n#tjtj
�}|�!|tjk(rd|_||_|�|j|�|�|�|j||�|�|j|�|j|fi|��S)N�server_side�server_hostnameF)
�get�SIGNED_CERTFILE_HOSTNAMEr
rkr`r_�	CERT_NONE�check_hostname�verify_mode�load_verify_locations�load_cert_chainrR�wrap_socket)�sockr�r�r�r�r��kwargs�contexts        r!�test_wrap_socketr�s����:�:�m�$�$<�� �!��.�.��!8�!8�9���.�.��!8�!8�9������
�
�%�%*�G�"�'������%�%�h�/���w�2�����'�2������G�$��7���t�.�v�.�.r#T��server_chainc��|tk(rt}n+|tk(rt}n|tk(rt
}nt
|��tjtj�}|jt�tjtj�}|j|�|r|jt�|||fS)zUCreate context

    client_context, server_context, hostname = testing_context()
    )�SIGNED_CERTFILEr��SIGNED_CERTFILE2�SIGNED_CERTFILE2_HOSTNAME�	NOSANFILE�NOSAN_HOSTNAME�
ValueErrorr
rkr`r��
SIGNING_CAr_r�)�server_certr��hostname�client_context�server_contexts     r!�testing_contextr�+s���
�o�%�+��	�(�	(�,��	�	�	!�!����%�%��^�^�C�$;�$;�<�N��(�(��4��^�^�C�$;�$;�<�N��"�"�;�/���,�,�Z�8��>�8�3�3r#c�:�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zej d
��Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zej8dej<vd�d��Zd�Z d�Z!ej8e"jFdk(d�d��Z$ej8e"jFdk(d�d��Z%d �Z&d!�Z'd"�Z(d#�Z)d$�Z*ej8e+�d%�d&��Z,d'�Z-ej\d(d)�d*��Z/d+�Z0d,�Z1y-).�BasicSocketTestsc��tjtjtjtjtj
tjtj|jtjd�|jtjd�|jtjd�|jtjd�tjtjtjtj tj"tj$|jtj&tj(�y)NT)r
r��
CERT_OPTIONAL�
CERT_REQUIREDrErCrDrB�assertEqual�HAS_SNI�HAS_ECDH�HAS_TLSv1_2�HAS_TLSv1_3�OP_NO_SSLv2�OP_NO_SSLv3�OP_NO_TLSv1�
OP_NO_TLSv1_3�
OP_NO_TLSv1_1�
OP_NO_TLSv1_2r^�PROTOCOL_SSLv23��selfs r!�test_constantszBasicSocketTests.test_constantsFs����
�
��������'�'����������������d�+�������t�,�������$�/�������$�/�����������������������)�)�3�+>�+>�?r#c���tt�D]U}|jd�s�|j|��5t	t|�}|j|dd|���ddd��Wy#1swY�bxYw)N�OP_��optionr�ssl.)�dirr
�
startswith�subTestr]�assertGreaterEqual)r�r �values   r!�test_optionszBasicSocketTests.test_optionsZsb����H�D��?�?�5�)�����T��*���T�*���'�'��q�D���-�@�+�*��+�*�s�'A)�)A2	c���tjtjtjtjtj
tjg}|D]C}|j|��5|jtd�5d|_
ddd�ddd��Etj|tj�y#1swY�8xYw#1swY��xYw)N)�ssl_typezimmutable type)
�_ssl�_SSLContext�
_SSLSocket�	MemoryBIO�Certificate�
SSLSession�SSLErrorr��assertRaisesRegex�	TypeErrorr�r�check_disallow_instantiation)r��	ssl_typesr�s   r!�test_ssl_typeszBasicSocketTests.test_ssl_typescs�������O�O��N�N�����O�O��M�M�

�	�"�H����x��0��+�+�I�7G�H�%)�H�N�I�1�0�"�	�,�,�T�4�3C�3C�D�I�H��1�0�s$�4C�C
�C�
C�C�C	c���|jtd�5tj�5}tj	|�ddd�ddd�y#1swY�xYw#1swYyxYw�Nzpublic constructor)r�r��socketr
�	SSLSocket�r��ss  r!�test_private_initz"BasicSocketTests.test_private_initrsH��
�
#�
#�I�/C�
D�����A��
�
�a� �!�E�
D� ���E�
D�s"�A�A�A�A	�A�A(c�2�tj}|jt|�d|jz�|jt|�t|j��tj
|�}|j|j|�y)Nz$<_SSLMethod.PROTOCOL_TLS_CLIENT: %r>)	r
r`r��reprr�r\rk�assertIsrc�r��protorTs   r!�test_str_for_enumsz#BasicSocketTests.test_str_for_enumswsj���'�'������e��&L�u�{�{�&Z�[�����U��S����%5�6��n�n�U�#���
�
�c�l�l�E�*r#c�H�tj�}tjr,tj
j
d||xrdxsdfz�|r1tjd�}|jt|�d�n/|jtjtjd�|jttjd�tjdd�tjdd�tjtd	�d�y)
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�rr�r��
RAND_bytesr�rb�assertRaisesr�r��RAND_add�	bytearray)r��v�datas   r!�test_randomzBasicSocketTests.test_random�s����O�O����?�?��J�J���:� !�A�$A�*A�$:� 9� ;�;�
<�
��>�>�"�%�D����S��Y��+����c�l�l�C�N�N�B�?�	
���*�c�n�n�b�9����.��5����5�t�<����Y�C�D�d�Kr#c�^�|jtjjt�t
�|jtjjt�t�tjjt�}tjr8tjjdtj|�zdz�|j|dd�|j|dd�|j|dd�|j|dd	�y)
N�
r7))r0zprojects.developer.nokia.com)r0zprojects.forum.nokia.comr;)zhttp://ocsp.verisign.comr<)z0http://SVRIntl-G3-aia.verisign.com/SVRIntlG3.cerr=)z0http://SVRIntl-G3-crl.verisign.com/SVRIntlG3.crl)r�r
r��_test_decode_cert�CERTFILE�
CERTFILE_INFOr��SIGNED_CERTFILE_INFO�	NOKIACERTrr�rr�r��pprint�pformat�r��ps  r!�test_parse_certz BasicSocketTests.test_parse_cert�s���	
����H�H�&�&�x�0��	
�	
����H�H�&�&��7� �	
�
�H�H�&�&�y�1���?�?��J�J���T�F�N�N�1�$5�5��<�=�����+�,�?�	�
	
����6��$A�B�����;��N�	P�����2�3�N�	Pr#c��tjjt�}tj
r8tjjdtj|�zdz�|j|dddddddd	��y)
Nr�)�)r'�UK))r-zcody-cazJun 14 18:00:58 2028 GMTzJun 18 18:00:58 2018 GMT�02)r))r-�#codenomicon-vm-2.test.lal.cisco.com))r0r	rr1)r
r�r��TALOS_INVALID_CRLDPrr�rr�r�rrr�rs  r!�test_parse_cert_CVE_2019_5010z.BasicSocketTests.test_parse_cert_CVE_2019_5010�sw���H�H�&�&�':�;���?�?��J�J���T�F�N�N�1�$5�5��<�=����
�L�6�7� $�H�#E��
�	
r#c��tjjt�}tj
r8tjjdtj|�zdz�d}|j|d|�|j|d|�tjdk\rd}nd}|j|d|�y)	Nr�)))r'�US))�stateOrProvinceName�Oregon))r*�	Beavertonr+))�organizationalUnitNamezPython Core Development))r-znull.python.orgexample.org))�emailAddresszpython-dev@python.orgr6r2)r�	�)�r0zaltnull.python.orgexample.com��emailz null@python.orguser@example.org��URIz)http://null.python.orghttp://example.org��
IP Addressz	192.0.2.1)rz2001:DB8:0:0:0:0:0:1)rrrr)rz	<invalid>r7)
r
r�r��NULLBYTECERTrr�rr�r�rrr��_OPENSSL_API_VERSION)r�rr6�sans    r!�test_parse_cert_CVE_2013_4238z.BasicSocketTests.test_parse_cert_CVE_2013_4238�s����H�H�&�&�|�4���?�?��J�J���T�F�N�N�1�$5�5��<�=�A��	
����9��w�/�����8��g�.��#�#�y�0�;�C�0�C�	
����+�,�c�2r#c�t�tjjt�}|j	|dd�y)Nr7)
)r0�allsans��	othernamez
<unsupported>r")rzuser@example.org)r0zwww.example.org)�DirName)r&r)r+))r-zdirname example)rzhttps://www.python.org/)r�	127.0.0.1)rz0:0:0:0:0:0:0:1)z
Registered IDz	1.2.3.4.5)r
r�r��
ALLSANFILEr�rs  r!�test_parse_all_sansz$BasicSocketTests.test_parse_all_sans�s1���H�H�&�&�z�2������+�,�
�	
r#c���ttd�5}|j�}ddd�tj	�}tj|�}tj	|�}|j
||�|jtjdz�s|jd|z�|jdtjzdz�s|jd|z�yy#1swY��xYw)N�rr�z-DER-to-PEM didn't include correct header:
%r
z-DER-to-PEM didn't include correct footer:
%r
)rJ�
CAFILE_CACERTrKr
�PEM_cert_to_DER_cert�DER_cert_to_PEM_certr�r��
PEM_HEADER�fail�endswith�
PEM_FOOTER)r�rM�pem�d1�p2�d2s      r!�test_DER_to_PEMz BasicSocketTests.test_DER_to_PEM�s���
�-��
%���&�&�(�C�&�
�
%�
%�c�
*��
�
%�
%�b�
)��
�
%�
%�b�
)������R� ��}�}�S�^�^�d�2�3��I�I�G�"�L�M��{�{�4�#�.�.�0�4�7�8��I�I�G�"�L�M�9�&�
%�s�C,�,C5c�X�tj}tj}tj}|j	|t
�|j	|t�|j	|t�|j|d�|j|d�|\}}}}}|j|d�|j|d�|j|d�|j|d�|j|d�|j|d�|j|d�|j|d�|j|d�|j|d�d	|d
��}	|dk\rd|d
�d
|d
�d
|d
��}
nd|d
�d
|d
�d
|d
��}
|j|j|
|	df�||t|�f�y)Nii@��r��?�z	LibreSSL �drzOpenSSL �.zAWS-LC)r
�OPENSSL_VERSION_NUMBER�OPENSSL_VERSION_INFO�OPENSSL_VERSION�assertIsInstance�int�tupler\r��
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�:�$�U�1�I�Q�u�Q�i�q��q�	�B�K�$�U�1�I�Q�u�Q�i�q��Q��@�K����
�L�L�+�|�X�>�?�
��3�q�6�N�	
r#c��tjtj�}t|�}tj|�}tjdtf�5~ddd�|j|�d�y#1swY�!xYw)N�)	r��AF_INETr��weakref�refr�check_warnings�ResourceWarningr�)r�r��ss�wrs    r!�
test_refcyclezBasicSocketTests.test_refcycle'se��
�M�M�&�.�.�)��
�a�
 ��
�[�[��_��
�
+�
+�R��,A�
B��C������t�$�C�
B�s�B�B
c	�`�tjtj�}t|�5}|jt|j
d�|jt|jtd��|jt|jd�|jt|jtd�d�|jt|jd�|jt|jdd�|jt|j�|jt|jdgddd�|jt|jd�|jt|j td�g�ddd�y#1swYyxYw)Nr7�x)z0.0.0.0rrXr�d)r�rTr�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�M�&�.�.�)��
�a�
 �B����g�r�w�w��2����g�r�|�|�Y�t�_�E����g�r�{�{�A�6����g�r�'7�'7��4��!�L����g�r�w�w��5����g�r�y�y�$��G����1�2�6�6�:����1�2�:�:�#�f�b�!�^�
=����1�2�:�:�s�C����1�2�?�?�(��~�.�
0�!�
 �
 �s�E,F$�$F-c��dD]j}tjtj�}|j|�t|�5}|j	||j��ddd��ly#1swY�wxYw)N)Ng�@)r�rT�
settimeoutr�r��
gettimeout)r��timeoutr�rYs    r!�test_timeoutzBasicSocketTests.test_timeoutDs]��(�G��
�
�f�n�n�-�A�
�L�L��!�!�!�$��� � ��"�-�-�/�:�%�$�(�%�$�s�!A1�1A:	c��tjtjtjtjg}tj
tjtjtjg}tjjtjjtjjg}|D]�}|j|��5tjtj�}|j!t"�5}|xj$|zc_ddd�|j'dt)j*��ddd���|D]�}t-|�s�|j|��5|j!t"�5}tj|�ddd�|j'd|j.�d�t)j*��ddd���|D]�}t1|�s�|j|��5tjtj�}|j!t"�5}||_ddd�|j4j6�d|j.��}	|j'd|	�d�t)j*��ddd���y#1swY���xYw#1swY��xYw#1swY��&xYw#1swY���xYw#1swY��xYw#1swY��
xYw)Nr�z4ssl.OP_NO_SSL*/ssl.OP_NO_TLS* options are deprecated)rcr�z is deprecated)r8r=)r
r�r�r�r�rr�PROTOCOL_TLSv1_2r^rrrrr�rkr`�assertWarns�DeprecationWarning�optionsr�r\�warningrdr rarP�	__class__�__name__)
r�rw�	protocols�versionsr�rT�cmrcr8�version_texts
          r!�test_openssl111_deprecationsz-BasicSocketTests.test_openssl111_deprecationsMsJ���O�O����������	
��
���� � �� � ����	
�	�
�N�N� � ��N�N� � ��N�N�"�"�
���F����V��,��n�n�S�%<�%<�=���%�%�&8�9�R��K�K�6�)�K�:�� � �J���
�
�O��	-�,��"�H�#�H�-�����x��0��%�%�&8�9�R��N�N�8�,�:�� � ��8�=�=�/��8���
�
�O��1�0�"� �G�"�7�+�����g��.��n�n�S�%<�%<�=���%�%�&8�9�R�*1�C�'�:�*1�*;�*;�*D�*D�g�l�l�S��� � ��<�.��7���
�
�O��/�.� �%:�9��-�,��:�9��1�0��:�9��/�.�sm�!9K
�K�0-K
�
K'� K�6;K'�9L�K4�AL�K
�K
�
K	�K$�K'�'K1	�4K=�9L�L
	c��tjjtjjt�xstj
d|�}t
j�}|j|j�|jtj�5t||��ddd�y#1swYyxYw)z;Check that trying to use the given client certificate failsr�r�N)
rrrrr�curdirr��
addCleanup�closer�r
r�r��r�r�r�s   r!�
bad_cert_testzBasicSocketTests.bad_cert_test�sw���7�7�<�<������� 9� F�R�Y�Y� *�H�6���}�}�������
�
�#�
�
�
�s�|�|�
,��T�&.�
0�-�
,�
,�s�#B:�:Cc�&�|jd�y)z Wrapping with an empty cert filer?N�r�r�s r!�test_empty_certz BasicSocketTests.test_empty_cert�s�����>�*r#c�&�|jd�y)z:Wrapping with a badly formatted certificate (syntax error)r@Nr�r�s r!�test_malformed_certz$BasicSocketTests.test_malformed_cert�s�����=�)r#c�&�|jd�y)z2Wrapping with a badly formatted key (syntax error)rANr�r�s r!�test_malformed_keyz#BasicSocketTests.test_malformed_key�s�����<�(r#c���tjtj�}tj�5}|j	t
|j|dd��ddd�y#1swYyxYw)NTz
some.hostname�r�)r
rkr_r�r�r�r�)r�rTr�s   r!�test_server_sidez!BasicSocketTests.test_server_side�sM���n�n�S�4�4�5��
�]�]�_�����j�#�/�/�4��.=�
�
?��_�_�s�%A&�&A/c��tjd�}tjtj�}|j|j	��t|d��5}|j
t�5|jd�ddd�ddd�|j�y#1swY�"xYw#1swY�&xYw)N�r%rF��do_handshake_on_connectzunknown-type)
r��
create_serverrT�connect�getsocknamer�r�r��get_channel_bindingr�)r�r��crYs    r!�test_unknown_channel_bindingz-BasicSocketTests.test_unknown_channel_binding�s���� � �!1�2���M�M�&�.�.�)��	�	�	�!�-�-�/�"�
�a��
?�2��"�"�:�.��&�&�~�6�/�@�	
���	�/�.��@�
?�s$�%B:�;B.�
B:�.B7	�3B:�:C�
tls-unique�*'tls-unique' channel binding not availablec��tjtj�}t|�5}|j|j	d��ddd�tjtj�}t|dt
��5}|j|j	d��ddd�y#1swY�hxYw#1swYyxYw)Nr�T)r�r�)r�rTr��assertIsNoner�r�rks   r!�test_tls_unique_channel_bindingz0BasicSocketTests.test_tls_unique_channel_binding�s���
�M�M�&�.�.�)��
�a�
 �B����b�4�4�\�B�C�!�
�M�M�&�.�.�)��
�a�T�H�
E�����b�4�4�\�B�C�F�
E�	!�
 ��F�
E�s�!B7�
!C�7C�Cc�V�ttjtj��}t|�}|j	t
�5}d}t
j�ddd�|j|tjjd��y#1swY�<xYwr�)r�r�rTr�rurXr�
gc_collect�assertInr\rxrs)r�rYr)r}s    r!�test_dealloc_warnz"BasicSocketTests.test_dealloc_warn�ss��
�f�m�m�F�N�N�;�
<����H��
�
�
�o�
.�"��B���� �/�	
�
�
�a��R�Z�Z�_�_�Q�/�0�1�/�
.�s�
B�B(c��tj�}|jt|�d�|j	|tj
�t
j�5}t|d<t|d<tj�}|j|jt�|j|jt�ddd�y#1swYyxYw)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�%;�%;�<�
�
*�
*�
,��"(�C���#+�C�� ��0�0�2�E����U�\�\�8�4����U�\�\�6�2�-�
,�
,�s
�$A'C�Cr�Windows specificc�(�|jtjd��|jtjd��|jttj�|jt
tjd�t
�}dD]�}tj|�}|j|t�|D]�}|j|t�|jt|�d�|\}}}|j|t�|j|ddh�|j|tttf�t!|ttf�s��|j#|�����d}|j||�y)	N�CA�ROOTrS)r�r�r�x509_asn�
pkcs_7_asn�1.3.6.1.5.5.7.3.1)rFr
�enum_certificatesr�r��WindowsError�setrA�listrCr�rb�bytesr��	frozenset�boolr[�update)	r��
trust_oids�	storename�store�element�cert�enc�trust�
serverAuths	         r!�test_enum_certificatesz'BasicSocketTests.test_enum_certificates�s5������-�-�d�3�4�����-�-�f�5�6����)�S�%:�%:�;����,��(=�(=�r�B��U�
�'�I��)�)�)�4�E��!�!�%��.� ���%�%�g�u�5�� � ��W��q�1�#*� ��c�5��%�%�d�E�2��
�
�c�J��#=�>��%�%�e�i��d�-C�D��e�i��%5�6��%�%�e�,�!�(�)�
��
�
�j�*�-r#c��|jtjd��|jttj�|jt
tjd�tjd�}|j
|t�|D]c}|j
|t�|jt|�d�|j
|dt�|j|dddh��ey)Nr�rS�rr7r�r�)
rFr
�	enum_crlsr�r�r�rAr�rCr�rbr�r�)r��crlsr�s   r!�test_enum_crlszBasicSocketTests.test_enum_crls�s�������
�
�d�+�,����)�S�]�]�3����,��
�
�r�:��}�}�T�"�����d�D�)��G��!�!�'�5�1����S��\�1�-��!�!�'�!�*�e�4��M�M�'�!�*�z�<�&@�A�	r#c���d}tjd�}|j||�|j|jd�|j|jd�|j|j
d�|j|jd�|j|tj�|jttjd�tjjd�}|j||�|j|tj�|jttjjd�|jtd�5tjjd�ddd�td	�D]�}	tjj|�}|j|jt�|j|jt�|j|j
t�|j|jttd�f���tjj!d�}|j||�|j|tj�|jtjj!d�|�|jtjj!d�|�|jtd
�5tjj!d�ddd�y#1swY���xYw#t$rY���wxYw#1swYyxYw)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�sv��)���o�o�1�2������h�'�������#�&��������5�������'F�G�������"5�6����c�3�?�?�3����*�c�o�o�|�D��o�o�%�%�c�*������h�'����c�3�?�?�3����*�c�o�o�&=�&=�r�B�
�
#�
#�J�0D�
E��O�O�#�#�F�+�F��t��A�
B��o�o�-�-�a�0���%�%�c�g�g�s�3��%�%�c�m�m�S�9��%�%�c�l�l�C�8��%�%�c�g�g��T�$�Z�/@�A���o�o�&�&�'F�G������h�'����c�3�?�?�3�������1�1�,�?��J�������1�1�2E�F�!�	#�
�
#�
#�J�0M�
N��O�O�$�$�\�2�O�
N�'F�
E��
�
��
��O�
N�s*�5 M�,M� M#�M�	M �M �#M,c�P�tjd�}|jtjjtj�|jtjj|�|jtjjjd�|jtjjjd�|jtjjjd�tjd�}|jtjjtj�|jtjj|�|jtjjjd�|jtjjjd�|jtjjjd�y)Nr�r�r�z1.3.6.1.5.5.7.3.2��
clientAuth)
r
r�rA�Purpose�SERVER_AUTHr�r�r�r��CLIENT_AUTH)r�r�s  r!�test_purpose_enumz"BasicSocketTests.test_purpose_enumsX���o�o�1�2�����c�k�k�5�5�s���G�������0�0�#�6�������0�0�4�4�c�:�������0�0�:�:�L�I�������0�0�4�4�1�	3��o�o�1�2�����c�k�k�5�5�s���G�������0�0�#�6�������0�0�4�4�c�:�������0�0�:�:�L�I�������0�0�4�4�1�	3r#c�x�tjtjtj�}|j|j�|jt�5}t|tj��ddd�|jtj�d�tjtj�}|jt�5}|j|�ddd�|jt|j�d�y#1swY��xYw#1swY�;xYw)N�r�z!only stream sockets are supported)r�rT�
SOCK_DGRAMr�r�r�rfr�r
r�r�r\r�rkr`r�)r�r��cxrTs    r!�test_unsupported_dtlsz&BasicSocketTests.test_unsupported_dtls)s����M�M�&�.�.�&�*;�*;�<�������� �
�
�
�2�
3�r��Q�#�-�-�8�4�����R�\�\�*�,O�P��n�n�S�4�4�5��
�
�
�2�
3�r��O�O�A��4�����R�\�\�*�,O�P�
4�
3��4�
3�s�#D$�$D0�$D-�0D9c�N�|jtj|�|�yrW)r�r
�cert_time_to_seconds)r��
timestring�	timestamps   r!�cert_time_okzBasicSocketTests.cert_time_ok4s������1�1�*�=�y�Ir#c��|jt�5tj|�ddd�y#1swYyxYwrW)r�r�r
r�)r�r�s  r!�cert_time_failzBasicSocketTests.cert_time_fail7s*��
�
�
�z�
*��$�$�Z�0�+�
*�
*�s�5�>z)local time needs to be different from UTCc�L�|jdd�|jdd�y)NzMay  9 00:00:00 2007 GMTg�C��A�Jan  5 09:34:43 2018 GMT���ѓ�A)r�r�s r!�"test_cert_time_to_seconds_timezonez3BasicSocketTests.test_cert_time_to_seconds_timezone;s&��
	
���4�l�C����4�l�Cr#c��d}d}|j||�|jtj|��|�|jd|�|jd|�|j	d�|j	d�|j	d�|j	d	�|j	d
�|j	d�|j	d�d
}|jd|�|jd|�|jdd�|jdd�|jdd�|j	d�|jdd�y)Nr�r�)�	cert_timezJan 05 09:34:43 2018 GMTzJaN  5 09:34:43 2018 GmTzJan  5 09:34 2018 GMTzJan  5 09:34:43 2018zJan  5 09:34:43 2018 UTCzJan 35 09:34:43 2018 GMTzJon  5 09:34:43 2018 GMTzJan  5 24:00:00 2018 GMTzJan  5 09:60:43 2018 GMTg�W�AzDec 31 23:59:60 2008 GMTzJan  1 00:00:00 2009 GMTzJan  5 09:34:59 2018 GMTi�FOZzJan  5 09:34:60 2018 GMTi�FOZzJan  5 09:34:61 2018 GMTi�FOZzJan  5 09:34:62 2018 GMTzDec 31 23:59:59 9999 GMTg�� �MB)r�r�r
r�r�)r�r��ts�
newyear_tss    r!�test_cert_time_to_secondsz*BasicSocketTests.test_cert_time_to_secondsCsA��/�
�
�����*�b�)�����1�1�J�1�G��L����4�b�9����4�b�9����3�4����2�3����6�7����6�7����6�7����6�7����6�7�!�
����4�j�A����4�j�A����4�j�A����4�j�A����4�j�A����6�7�	
���4�n�Er#�LC_ALLrSc��d�}|�j�dk(r|jd�|jdd�|j|�dz�y)Nc�.�tjdd�S)Nz%b)	r7r�rr8�r�rrr)r��strftimerXr#r!�local_february_namezNBasicSocketTests.test_cert_time_to_seconds_locale.<locals>.local_february_namejs���=�=��'B�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�skipTestr�r�)r�rs  r!� test_cert_time_to_seconds_localez1BasicSocketTests.test_cert_time_to_seconds_localefsZ��	D�� �&�&�(�E�1��M�M�4�
5�	
���4�l�C����/�1�4K�K�Lr#c�&�tjtj�}|j|j�t	j
|�}t
tjtj�tj��}|j|j�|jt|f�}tjtjtjtjf}|j!||�y)Nr�)r�rTr�r�r�	bind_portr�r
r��
connect_ex�HOST�errno�ECONNREFUSED�EHOSTUNREACH�	ETIMEDOUT�EWOULDBLOCKr�)r��server�portr��rc�errorss      r!�test_connect_ex_errorz&BasicSocketTests.test_connect_ex_errorus������v�~�~�.��������%��&�&�v�.���V�]�]�6�>�>�:�&)�&7�&7�
9�������� �
�\�\�4��,�
'��
���� 2� 2�E�O�O����
��	
�
�
�b�&�!r#c��t�\}}}t|��}|5|jtj�|��5}|j	t
|jf�|j|jd�d�|j|jd�d�ddd�ddd�y#1swY�xYw#1swYyxYw)N�r�r�rr#)
r��ThreadedEchoServerr�r�r�r
rr�r`rd�r�r�r�r�rr�s      r!�test_read_write_zeroz%BasicSocketTests.test_read_write_zero�s���3B�3D�0����#�N�;��
��+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.�� � ������C�0�� � ������a�0�	F��V�F�F���V�s$�&C�A$B8�'C�8C	�=C�C
N)2rz�
__module__�__qualname__r�r�r�r�r�r�rrrr'r5rQr�cpython_onlyr[rlrrrr�r�r�r�r�r�rq�
skipUnlessr
�CHANNEL_BINDING_TYPESr�r�r�r�platformr�r�r�r�r�r�r�r�r�r��run_with_localerrrrXr#r!r�r�Ds���@�(A�
E�!�
+�L�(P�:
�*3�:
�*
N�!
�F
���%��%�0�$;�3�j0�+�*�)�?���X�����)B�)B�B�E�G�D�G�D�2�
3��X�������0�2D�E�.�F�.�0�X�������0�2D�E�B�F�B�%3�N3�"	Q�J�1��X�����D�F�D�F�D�!F�F�W���X�r�*�M�+�M�"� 	1r#r�c��eZdZd�Zd�Zejedk(d�d��Zd�Z	d�Z
d�Zd	�Ze
d
��Zejeej"d�d�d
��Zd�Zd�Zd�Zd�Zej.ed�d��Zd�Zd�Zejej8d�d��Zd�Zd�Zd�Z d�Z!d�Z"ej.e#jHdk(d�d��Z%eje#jHdk(d �ej.e&jNd!�d"���Z(d#�Z)d$�Z*d%�Z+d&�Z,d'�Z-d(�Z.d)�Z/y*)+�ContextTestsc�H�tD]\}t|�s�tj�5tj|�}ddd�|j
j|��^tj�5tj�}ddd�|j
jtj�|jttj
d�|jttj
d�y#1swY��xYw#1swY��xYw)Nr��*)�	PROTOCOLSrdrrWr
rkr�rcr^r�r�)r�rcrTs   r!�test_constructorzContextTests.test_constructor�s���!�H���)�$�3�3�5��.�.��2�C�6�� � ����x�8�	"�
�
+�
+�
-��.�.�"�C�.�������s�'7�'7�8����*�c�n�n�b�9����*�c�n�n�b�9�6�5��.�
-�s�D�:D�D	�D!c��tjtj�}|jd�|jd�|j	tj
d�5|jd�ddd�y#1swYyxYw)N�ALL�DEFAULT�No cipher can be selected�^$:,;?*'dorothyx)r
rkr`rRr�r��r�rTs  r!�test_cipherszContextTests.test_ciphers�s]���n�n�S�4�4�5����������	�"�
�
#�
#�C�L�L�2M�
N��O�O�.�/�O�
N�
N�s�&B�B
r7z+Test applies only to Python default ciphersc�6�tjtj�}|j�}|D]a}|d}|j	d|�|j	d|�|j	d|�|j	d|�|j	d|��cy)Nr �PSK�SRP�MD5�RC4�3DES)r
rkr`�get_ciphers�assertNotIn)r�rTr��suiter s     r!�test_python_ciphersz ContextTests.test_python_ciphers�s����n�n�S�4�4�5���/�/�#���E���=�D����U�D�)����U�D�)����U�D�)����U�D�)����V�T�*�
r#c
�>�tjtj�}|jd�t	d�|j�D��}hd�}|j
|�}|jt|�ddt|��dt|����y)N�AESGCMc3�&K�|]	}|d���y�w)r NrX)�.0r<s  r!�	<genexpr>z0ContextTests.test_get_ciphers.<locals>.<genexpr>�s����9�'8�!�A�f�I�'8�s�>�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
rkr`rRr�r4�intersectionr�rb�sorted)r�rT�namesr�rEs     r!�test_get_cipherszContextTests.test_get_ciphers�s����n�n�S�4�4�5������!��9�s���'8�9�9��	
���)�)�(�3��������q�G�F�5�M�?�,�v�h�GW�FX�"Y�	
r#c��tjtj�}tjtjztj
z}|ttztztztzz}|j||j�tj�5|xjtjzc_ddd�|j|tjz|j�tj�5|jtjz|_ddd�|j||j�d|_|jd|jtj
z�|j!t"�5d|_ddd�|j!t"�5ddz|_ddd�|j!t$�5d|_ddd�y#1swY��;xYw#1swY��xYw#1swY�pxYw#1swY�TxYw#1swYyxYw)Nrr�r�r^�abc)r
rkr`�OP_ALLr�r�rBrErCrDrFr�rwrrWr�r��
OverflowErrorr�)r�rT�defaults   r!r�zContextTests.test_options�s����n�n�S�4�4�5���:�:����/�#�/�/�A���%�(C�C�$�%�'9�:�.�/�	0��	
����#�+�+�.��
+�
+�
-��K�K�3�?�?�*�K�.�����3�?�?�2�C�K�K�@��
+�
+�
-��;�;�#�/�/�)9�9�C�K�.�����#�+�+�.��������C�K�K�3�?�?�*:�:�;��
�
�}�
-��C�K�.�
�
�
�}�
-��s�(�C�K�.�
�
�
�y�
)��C�K�*�
)�'.�
-��
.�
-��.�
-��
-�
-��
)�
)�s<�+$H�$H�*H!�H-�7H9�H�H�!H*�-H6�9Ic���tj�5tjtj�}ddd�|jjtj�tj|_|j|jtj�tj|_|j|jtj�tj|_|j|jtj�|jt�5d|_ddd�|jt�5d|_ddd�tjtj�}|j|jtj�|j|j�tjtj �}|j|jtj�|j#|j�y#1swY��xYw#1swY��
xYw#1swY��xYw�Nr$)rrWr
rkr^r�r�r�r�r�r�r�r�r_�assertFalser�r`rFr,s  r!�test_verify_mode_protocolz&ContextTests.test_verify_mode_protocol�s���
�
+�
+�
-��.�.��!1�!1�2�C�.�	
������#�-�-�8��+�+���������#�*;�*;�<��+�+���������#�*;�*;�<��-�-���������#�-�-�8�
�
�
�y�
)�"�C�O�*�
�
�
�z�
*� �C�O�+��n�n�S�4�4�5��������#�-�-�8�����+�+�,��n�n�S�4�4�5��������#�*;�*;�<�����*�*�+�+.�
-��*�
)��
*�
*�s#�$I�=I�"I�I
�I�I&c���tjtj�}|j|j�tj
rgd|_|j|j�d|_|j
|j�d|_|j|j�y|jt�5d|_ddd�y#1swYyxYw�NTF)	r
rkr`rF�hostname_checks_common_name�HAS_NEVER_CHECK_COMMON_NAMErPr��AttributeErrorr,s  r!� test_hostname_checks_common_namez-ContextTests.test_hostname_checks_common_names����n�n�S�4�4�5������7�7�8��*�*�.2�C�+��O�O�C�;�;�<�.3�C�+����S�<�<�=�.2�C�+��O�O�C�;�;�<��"�"�>�2�26��/�3�2�2�s�C�C%c�	�tjtj�}tjjtjj
tjjh}tjjtjjh}|j|j|�|j|j|�tjj|_
tjj|_|j|jtjj�|j|jtjj�tjj|_
tjj
|_|j|jtjj�|j|jtjj
�tjj|_|j|jtjj�tjj|_|j|jtjj
tjjtjjh�tjj|_
|j|jtjjtjjh�|jt �5d|_
ddd�t#tj$�r�tjtj$�}|j|j|�|j|jtjj�|jt �5tjj|_
ddd�|jt �5tjj
|_ddd�yy#1swY��xYw#1swY�UxYw#1swYyxYwrO)r
rkr_rrlrrjrm�TLSv1_3r�rPrgrr�rr�r�rdr)r�rT�
minimum_range�
maximum_ranges    r!�test_min_max_versionz!ContextTests.test_min_max_versions.���n�n�S�4�4�5��

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

�
�
�N�N�,�,��N�N�"�"�	
�
�	
�
�
�����	
�	
�
�
�����	
�"�n�n�4�4���!�n�n�4�4������������!7�!7�	
�	
���������!7�!7�	
�"�n�n�>�>���!�n�n�2�2������������!A�!A�	
�	
���������!5�!5�	
�"�n�n�>�>������������!A�!A�	
�"�n�n�>�>����
�
����
�^�^�
!�
!�3�>�>�#9�#9�3�>�>�;O�;O�P�	
�
"�n�n�>�>����
�
����
�^�^�
#�
#�S�^�^�%;�%;�<�	
�
�
�
�z�
*�"$�C��+��C�0�0�1��.�.��!5�!5�6�C��M�M��#�#�]�
�
����#�#�S�^�^�%E�%E�
��"�"�:�.�&)�n�n�&F�&F��#�/��"�"�:�.�&)�n�n�&:�&:��#�/�.�2�+�
*��/�.��.�.�s$�R�5 R)�2 R5�R&�)R2�5R>�security_levelzrequires OpenSSL >= 1.1.0c��tjtj�}hd�}|j|j|�y)N>rr7r�rr8r)r
rkr`r�r])r�rT�security_level_ranges   r!�test_security_levelz ContextTests.test_security_level]s7��
�n�n�S�4�4�5�� 
��	
�
�
�c�(�(�*>�?r#c���tjtj�}ttdd�}|j	|j
tj|z�tj|_|j	|j
tj�tj|_|j	|j
tj�tj|_|j	|j
tj�tj|_|j	|j
tj�tjtjz|_|j	|j
tjtjz�|jt�5d|_ddd�y#1swYyxYw)N�VERIFY_X509_TRUSTED_FIRSTr)
r
rkr_r]r��verify_flags�VERIFY_DEFAULT�VERIFY_CRL_CHECK_LEAF�VERIFY_CRL_CHECK_CHAIN�VERIFY_ALLOW_PROXY_CERTS�VERIFY_X509_STRICTr�r�)r�rT�tfs   r!�test_verify_flagszContextTests.test_verify_flagspsT���n�n�S�4�4�5��
�S�5�q�
9������)�)�3�+=�+=��+B�C��4�4�������)�)�3�+D�+D�E��5�5�������)�)�3�+E�+E�F��-�-�������)�)�3�+=�+=�>��7�7�������)�)�3�+G�+G�H��4�4�s�7M�7M�M�������)�)��2�2�S�5K�5K�K�	M�
�
�
�y�
)�#�C��*�
)�
)�s�G%�%G.c�*�tjtj�}|jtd��|jtt��|jt|jt��|jt�5}|jt�ddd�|jjjtj�|jtjd�5|jt�ddd�|jtjd�5|jt �ddd�tjtj�}|jt"t$�|jt"t$��|jt&t(��|jtjd�5|jt"�ddd�|jtjd�5|jt$�ddd�|jtjd�5|jt$t"��ddd�tjtj�}t+j,dt*j.�}|jtj|�5|jt0t$�ddd�|jt2t4��|jt2t4j7���|jt2t9t4j7����|jt"t:t4�|jt"t:t4j7��|jt"t:t9t4j7���|jtd�5|jt2d��ddd�|jtj�5|jt2d��ddd�|jt<d	�5|jt2d
dz��ddd�d�}d
�}d�}d�}d�}d�}	d�}
Gd�d�}|jt2|��|jt2|��|jt2|��|jt2|���|jt2|�j>��|jtj�5|jt2|��ddd�|jt<d	�5|jt2|��ddd�|jtd�5|jt2|	��ddd�|jt@d�5|jt2|
��ddd�|jt|
��y#1swY���xYw#1swY��WxYw#1swY��&xYw#1swY���xYw#1swY��QxYw#1swY��xYw#1swY���xYw#1swY��|xYw#1swY��JxYw#1swY��xYw#1swY��FxYw#1swY��xYw#1swY��xYw#1swY��xYw)N)r��PEM (lib|routines)�r�r�z|(
            key values mismatch         # OpenSSL
            |
            KEY_VALUES_MISMATCH         # AWS-LC
        ))�passwordzshould be a stringT�badpasszcannot be longer�ai�c��tSrW��KEY_PASSWORDrXr#r!�getpass_unicodez:ContextTests.test_load_cert_chain.<locals>.getpass_unicode�s���r#c�*�tj�SrW)rs�encoderXr#r!�
getpass_bytesz8ContextTests.test_load_cert_chain.<locals>.getpass_bytes�s���&�&�(�(r#c�<�ttj��SrW)r�rsrvrXr#r!�getpass_bytearrayz<ContextTests.test_load_cert_chain.<locals>.getpass_bytearray�s���\�0�0�2�3�3r#c��y)NrorXrXr#r!�getpass_badpassz:ContextTests.test_load_cert_chain.<locals>.getpass_badpass�s��r#c��ddzS)NrpirXrXr#r!�getpass_hugez7ContextTests.test_load_cert_chain.<locals>.getpass_huge�s
���;�'�'r#c��y)NrrXrXr#r!�getpass_bad_typez;ContextTests.test_load_cert_chain.<locals>.getpass_bad_type�s��r#c��td��)N�
getpass error)�	ExceptionrXr#r!�getpass_exceptionz<ContextTests.test_load_cert_chain.<locals>.getpass_exception�s
���O�,�,r#c��eZdZd�Zd�Zy)�:ContextTests.test_load_cert_chain.<locals>.GetPassCallablec��tSrWrrr�s r!�__call__zCContextTests.test_load_cert_chain.<locals>.GetPassCallable.__call__����#�#r#c��tSrWrrr�s r!�getpasszBContextTests.test_load_cert_chain.<locals>.GetPassCallable.getpass�r�r#N)rzrrr�r�rXr#r!�GetPassCallabler��s��
$�
$r#r�zmust return a stringr�)!r
rkr_r�r�r�r�r_�NONEXISTINGCERTr�r�r�ENOENTr�r��BADCERT�	EMPTYCERT�ONLYCERT�ONLYKEY�BYTES_ONLYCERT�
BYTES_ONLYKEY�re�compile�Xr*�CERTFILE_PROTECTEDrsrvr��ONLYKEY_PROTECTEDr�r�r�)r�rTr}�regexrtrwryr{r}rr�r�s            r!�test_load_cert_chainz!ContextTests.test_load_cert_chain�s#���n�n�S�4�4�5�����H�d��3����H�h��7����)�S�%8�%8�(��K�
�
�
�w�
'�2�����0�(�������+�+�U�\�\�:�
�
#�
#�C�L�L�2F�
G�����(�H�
�
#�
#�C�L�L�2F�
G����	�*�H��n�n�S�4�4�5�����H�g�.����X�w��?����^�]��K�
�
#�
#�C�L�L�2F�
G�����)�H�
�
#�
#�C�L�L�2F�
G�����(�H�
�
#�
#�C�L�L�2F�
G�����(��C�H��n�n�S�4�4�5���
�
�
��d�d�	��
�
#�
#�C�L�L�%�
8����
�w�7�9�	���.���F����.��9L�9L�9N��O����.�%.�|�/B�/B�/D�%E�	�	G����H�&7��F����H�&7��9L�9L�9N�O����H�&7�%�l�&9�&9�&;�<�	>�
�
#�
#�I�/C�
D���� 2�T��B�E�
�
�
�s�|�|�
,���� 2�Y��G�-�
�
#�
#�J�0B�
C�
��� 2�T�F�]��K�	D�	 �	)�	4�	�	(�	�	-�	$�	$�
	���.���I����.���G����.�9J��K����.��9J��K����.�%4�%6�%>�%>�	�	@�
�
�
�s�|�|�
,���� 2�_��M�-�
�
#�
#�J�0B�
C���� 2�\��J�D�
�
#�
#�I�/E�
F���� 2�=M��N�G�
�
#�
#�I��
?���� 2�=N��O�@�	���H�/@��A�c(�
'��H�
G��
G�
G��H�
G��
G�
G��
G�
G��9�
8��E�
D��
,�
,��
C�
C��>-�
,��
C�
C��
F�
F��
?�
?�s��Y!�Y.�Y;�2Z�0Z�.Z"�9Z/�*Z<�)[	�[�[#�=[0�3[=�)\	�!Y+�.Y8�;Z�Z�Z�"Z,�/Z9�<[�	[�[ �#[-�0[:�=\�	\c��tjtj�}|jt�|jtd��|jt
�|jt
d��|j
t|j�|j
t|jddd�|j
t�5}|jt�ddd�|jjjtj�|jtjd�5|jt �ddd�|jtt"�|jtt$��|j
t|jdd�y#1swY��xYw#1swY�mxYw)N)r�r%rl�r%T)r
rkr_r�r��BYTES_CERTFILEr�r�r_r�r�r�rr�r�r�r�r��BYTES_CAPATH�r�rTr}s   r!�test_load_verify_locationsz'ContextTests.test_load_verify_locations�sF���n�n�S�4�4�5���!�!�(�+��!�!��$�!�?��!�!�.�1��!�!���!�E����)�S�%>�%>�?����)�S�%>�%>��d�D�Q�
�
�
�w�
'�2��%�%�o�6�(�������+�+�U�\�\�:�
�
#�
#�C�L�L�2F�
G��%�%�g�.�H��!�!�(�F�3��!�!�(�<�!�@�	
���)�S�%>�%>��d�K�(�
'��H�
G�s�F<�G�<G�Gc�	�tt�5}|j�}ddd�tj	�}tt
�5}|j�}ddd�tj	�}tj
tj�}|j|j�dd�|j|��|j|j�dd�|j|��|j|j�dd�|j|��|j|j�dd�tj
tj�}dj||f�}|j|��|j|j�dd�tj
tj�}d|d|d	|d
g}|jdj|���|j|j�dd�tj
tj�}|j|��|j|��|j|j�dd�|j|��|j|j�dd�tj
tj�}dj||f�}|j|��|j|j�dd�tj
tj�}|jt|jt��|jtj d�5|jd
��ddd�|jtj d�5|jd��ddd�|jtj �5|j|dz��ddd�y#1swY��#xYw#1swY���xYw#1swY��xYw#1swY�mxYw#1swYyxYw)N�x509_car��cadatar7r�r��head�other�again�tailr#z4no start line: cadata does not contain a certificate�brokenz6not enough data: cadata does not contain a certificatesbroken�A)rJr*rKr
r+�CAFILE_NEURONIOrkr`r��cert_store_statsr�rr�r��objectr�r�)r�rM�
cacert_pem�
cacert_der�neuronio_pem�neuronio_derrT�combineds        r!�test_load_verify_cadataz$ContextTests.test_load_verify_cadata�s���
�-�
 �A�����J�!��-�-�j�9�
�
�/�
"�a��6�6�8�L�#��/�/��=���n�n�S�4�4�5������-�-�/�	�:�A�>��!�!��!�4�����-�-�/�	�:�A�>��!�!��!�6�����-�-�/�	�:�A�>��!�!��!�6�����-�-�/�	�:�A�>��n�n�S�4�4�5���9�9�j�,�7�8���!�!��!�2�����-�-�/�	�:�A�>��n�n�S�4�4�5���J���w� �&�*���!�!����8�)<�!�=�����-�-�/�	�:�A�>��n�n�S�4�4�5���!�!��!�4��!�!��!�6�����-�-�/�	�:�A�>��!�!��!�4�����-�-�/�	�:�A�>��n�n�S�4�4�5���8�8�Z��6�7���!�!��!�2�����-�-�/�	�:�A�>��n�n�S�4�4�5�����)�S�%>�%>�v��N�
�
#�
#��L�L�B�
�
�%�%�X�%�6�	
�
�
#�
#��L�L�D�
�
�%�%�Y�%�7�	
�
�
�
�s�|�|�
,��%�%�Z�$�->�%�?�-�
,�y!�
 ��#�
"��^
�
��

�
��
-�
,�s;�Q�
Q�.Q�)Q(�#Q4�Q�Q�Q%�(Q1�4Q=�)Avoid mixing debug/release CRT on Windowsc��tjtj�}|jt�t
jdk7r|jt�|jt|j�|jt|jd�|jt�5}|jt�ddd�|jjjtj�|jtj �5}|jt"�ddd�y#1swY�{xYw#1swYyxYw)N�nt)r
rkr_�load_dh_params�DHFILErr �BYTES_DHFILEr�r�rLr�r�r�rr�r�r�r�s   r!�test_load_dh_paramsz ContextTests.test_load_dh_params1s����n�n�S�4�4�5�����6�"�
�7�7�d�?����|�,����)�S�%7�%7�8����)�S�%7�%7��>�
�
�
�0�
1�R�����/�2�������+�+�U�\�\�:�
�
�
�s�|�|�
,�����x�(�-�
,�2�
1��-�
,�s�7E�(E�E�Ec���tjtjhD]C}tj|�}|j	|j�dddddddddddd���Ey)Nr)�numberr��connect_good�connect_renegotiate�accept�accept_good�accept_renegotiate�hits�misses�timeouts�
cache_full)r
r`r_rkr��
session_statsr�s   r!�test_session_statszContextTests.test_session_stats?sk���-�-�s�/F�/F�G�E��.�.��'�C����S�.�.�0��� !�'(�� �&'�����3�
�Hr#c�j�tjtj�}|j�yrW)r
rkr`�set_default_verify_pathsr,s  r!�test_set_default_verify_pathsz*ContextTests.test_set_default_verify_pathsPs$���n�n�S�4�4�5���$�$�&r#z#ECDH disabled on this OpenSSL buildc��tjtj�}|jd�|jd�|j	t
|j�|j	t
|jd�|j	t|jd�|j	t|jd�y)N�
prime256v1s
prime256v1�foo�foo)r
rkr_�set_ecdh_curver�r�r�r,s  r!�test_set_ecdh_curvez ContextTests.test_set_ecdh_curveVs����n�n�S�4�4�5�����<�(����=�)����)�S�%7�%7�8����)�S�%7�%7��>����*�c�&8�&8�%�@����*�c�&8�&8�&�Ar#c��tjtj�}|jt|j
�|jt|j
d�|jt|j
d�|jt|j
|�d�}|jd�|j|�y)Nr8rSc��yrWrX)r��
servernamerTs   r!�
dummycallbackz5ContextTests.test_sni_callback.<locals>.dummycallbacki���r#)r
rkr_r�r��set_servername_callback)r�rTr�s   r!�test_sni_callbackzContextTests.test_sni_callback`s����n�n�S�4�4�5��	
���)�S�%@�%@�A����)�S�%@�%@�!�D����)�S�%@�%@�"�E����)�S�%@�%@�#�F�	��#�#�D�)��#�#�M�2r#c��tjtj�}|fd�}|j|�t	j
|�}~~t
j�|j|�d�y)Nc��yrWrX)r�r�rT�cycles    r!r�z>ContextTests.test_sni_callback_refcycle.<locals>.dummycallbackrr�r#)	r
rkr_r�rUrV�gc�collectr�)r�rTr�rZs    r!�test_sni_callback_refcyclez'ContextTests.test_sni_callback_refcyclensZ���n�n�S�4�4�5��7:�	��#�#�M�2�
�[�[��
����
�
�
���
�
�b�d�D�!r#c���tjtj�}|j|j	�dddd��|jt�|j|j	�dddd��|jt�|j|j	�dddd��|jt�|j|j	�dddd��y)Nr)r��crl�x509r7r�)	r
rkr`r�r�r�r�r�r*r,s  r!�test_cert_store_statsz"ContextTests.test_cert_store_statszs����n�n�S�4�4�5������-�-�/��!�Q�/�	1����H�%�����-�-�/��!�Q�/�	1��!�!�(�+�����-�-�/��!�Q�/�	1��!�!�-�0�����-�-�/��!�Q�/�	1r#c�F�tjtj�}|j|j	�g�|jt�|j|j	�g�|jt�|j|j	�dddddddd�g�tt�5}|j�}ddd�tj�}|j|j	d�|g�y#1swY�AxYw)	N)))r,zRoot CA))rzhttp://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)r2r3r4r5r=r6r8T)r
rkr`r��get_ca_certsr�r�r*rJrKr+)r�rTrMr1�ders     r!�test_get_ca_certszContextTests.test_get_ca_certs�s����n�n�S�4�4�5������)�)�+�R�0��!�!�(�+�����)�)�+�R�0��!�!�-�0�����)�)�+�D�5�5�"�'M�E���
�
	��-�
 �A��&�&�(�C�!��&�&�s�+������)�)�$�/�#��7�!�
 �s�D�D c��tjtj�}|j�tjtj�}|jtjj
�|j�tjtj�}|jtjj�tjtj�}|jt|jd�|jt|jd�y)Nr�)	r
rkr`�load_default_certsr�r�r�r�r�r,s  r!�test_load_default_certsz$ContextTests.test_load_default_certs�s����n�n�S�4�4�5����� ��n�n�S�4�4�5�����s�{�{�6�6�7���� ��n�n�S�4�4�5�����s�{�{�6�6�7��n�n�S�4�4�5�����)�S�%;�%;�T�B����)�S�%;�%;�]�Kr#rznot-Windows specificc�(�tjtj�}tj�5}t
|d<t|d<|j�|j|j�dddd��ddd�y#1swYyxYw)Nr�r�rr7)r�r�r�)
r
rkr`rr�r�r�r�r�r�)r�rTr�s   r!�test_load_default_certs_envz(ContextTests.test_load_default_certs_env�sq���n�n�S�4�4�5��
�
*�
*�
,��"(�C���#+�C�� ��"�"�$����S�1�1�3�Q��VW�5X�Y�	-�
,�
,�s�AB�Br�z3Debug build does not share environment between CRTsc��tjtj�}|j�|j	�}tjtj�}tj�5}t|d<t|d<|j�|dxxdz
cc<|j|j	�|�ddd�y#1swYyxYw)Nr�r�r�r7)
r
rkr`r�r�rr�r�r�r�)r�rT�statsr�s    r!�#test_load_default_certs_env_windowsz0ContextTests.test_load_default_certs_env_windows�s����n�n�S�4�4�5����� ��$�$�&���n�n�S�4�4�5��
�
*�
*�
,��"(�C���#+�C�� ��"�"�$��&�M�Q��M����S�1�1�3�U�;�-�
,�
,�s
�;AC�Cc��|j|jtjztj�tdk7r'|j|jtzt�t
dk7r'|j|jt
zt
�tdk7r'|j|jtzt�tdk7r'|j|jtzt�|j|jtjztrd�ytj�yr�)
r�rwr
r�rBrCrDrE�OP_LEGACY_SERVER_CONNECTrir,s  r!�_assert_context_optionsz$ContextTests._assert_context_options�s���������s���6����H���!����S�[�[�+<�<�.�
0��q� ����S�[�[�+;�;�-�
/���"����S�[�[�+=�=�/�
1�&�!�+����S�[�[�+F�F�8�
:�������s�'C�'C�C�.��	R�47�4P�4P�	Rr#c���tj�}|j|jtj�|j|j
tj�|j|j�|j|�tt�5}|j�}ddd�tjtt��}|j|jtj�|j|j
tj�|j|�tjtjj�}|j|jtj �|j|j
tj"�|j|�y#1swY��"xYw)N)r�r%r�)r
�create_default_contextr�rcr`r�r�rFr�r�rJr�rKr�r�r�r_r�)r�rTrMr�s    r!�test_create_default_contextz(ContextTests.test_create_default_context�s?���(�(�*��������s�'>�'>�?�������#�*;�*;�<�����*�*�+��$�$�S�)�
�*�
���V�V�X�F���(�(�
�6�06�)�8��������s�'>�'>�?�������#�*;�*;�<��$�$�S�)��(�(����)@�)@�A��������s�'>�'>�?�������#�-�-�8��$�$�S�)��
�s�$G�Gc��tj�}|j|jtj�|j|j
tj�|j|j�|j|�ttj�r�tj�5tjtj�}ddd�|j|jtj�|j|j
tj�|j|�tj�5tjtjtjd��}ddd�|j|jtj�|j|j
tj�|j!|j�|j|�tjtj"j$��}|j|jtj&�|j|j
tj�|j|�y#1swY���xYw#1swY��+xYw)NT)r�r�)�purpose)r
�_create_stdlib_contextr�rcr`r�r�rPr�r�rdrrrWrtr�rFr�r�r_r,s  r!�test__create_stdlib_contextz(ContextTests.test__create_stdlib_context�s����(�(�*��������s�'>�'>�?�������#�-�-�8�����+�+�,��$�$�S�)��C�.�.�/� �/�/�1��0�0��1C�1C�D��2����S�\�\�3�+=�+=�>����S�_�_�c�m�m�<��(�(��-�
�
+�
+�
-��,�,��$�$��+�+�#�-��C�.�	
������s�';�';�<�������#�*;�*;�<�����*�*�+��$�$�S�)��(�(����1H�1H�(�I��������s�'>�'>�?�������#�-�-�8��$�$�S�)�)2�1��.�
-�s�$J8�'5K�8K�Kc��tj�5tjtj�}ddd�|jj�|j|jtj�d|_|j|j�|j|jtj�d|_tj|_|j|j�|j|jtj�d|_tj|_d|_|j|j�|j|jtj�d|_|j|j�|j|jtj�d|_tj|_d|_|j|j�|j|jtj�d|_|j|j�|j|jtj�|jt�5tj|_ddd�d|_|j|j�tj|_|j|jtj�y#1swY���xYw#1swY�xxYwrS)rrWr
rkr^rPr�r�r�r�rFr�r�r�r�r,s  r!�test_check_hostnamez ContextTests.test_check_hostnames;��
�
+�
+�
-��.�.��!1�!1�2�C�.�����+�+�,�������#�-�-�8�"�������*�*�+�������#�*;�*;�<�"����+�+�������+�+�,�������#�*;�*;�<�#����-�-���"�������+�+�,�������#�-�-�8�!�������*�*�+�������#�*;�*;�<�"����+�+���"�������+�+�,�������#�*;�*;�<�!�������*�*�+�������#�*;�*;�<��
�
�z�
*�!�m�m�C�O�+�"�������+�+�,��-�-���������#�-�-�8�S.�
-��H+�
*�s�$L0�0L=�0L:�=Mc��tjtj�}|j|j�|j|jtj�tjtj�}|j|j�|j|jtj�yrW)r
rkr`rFr�r�r�r�r_rPr�r,s  r!�test_context_client_serverz'ContextTests.test_context_client_server<s����n�n�S�4�4�5������*�*�+�������#�*;�*;�<��n�n�S�4�4�5������+�+�,�������#�-�-�8r#c��Gd�dtj�}Gd�dtj�}tjtj�}||_||_|jtj�d��5}|j||�ddd�|jtj�tj�d��}|j||�y#1swY�TxYw)Nc��eZdZy)�;ContextTests.test_context_custom_class.<locals>.MySSLSocketN�rzrrrXr#r!�MySSLSocketr�H���r#rc��eZdZy)�;ContextTests.test_context_custom_class.<locals>.MySSLObjectNrrXr#r!�MySSLObjectrKrr#rT�r�)r
r��	SSLObjectrkr_�sslsocket_class�sslobject_classr�r�rA�wrap_bior�)r�rrrTr�r�s      r!�test_context_custom_classz&ContextTests.test_context_custom_classGs���	�#�-�-�	�	�#�-�-�	��n�n�S�4�4�5��)���)���
�_�_�V�]�]�_�$�_�
?�4��!�!�$��4�@��l�l�3�=�=�?�C�M�M�O��l�N�����c�;�/�@�
?�s�	C/�/C8c��tjtj�}|j|jd�d|_|j|jd�d|_|j|jd�|jt�5d|_ddd�|jt�5d|_ddd�tjtj�}|j|jd�|jt�5d|_ddd�y#1swY��xYw#1swY�zxYw#1swYyxYw)Nr�r7rr�)	r
rkr_r��num_ticketsr�r�r�r`r,s  r!�test_num_tickestzContextTests.test_num_tickestWs����n�n�S�4�4�5��������!�,����������!�,����������!�,�
�
�
�z�
*� �C�O�+�
�
�
�y�
)�"�C�O�*��n�n�S�4�4�5��������!�,�
�
�
�z�
*��C�O�+�
*�+�
*��
)�
)��
+�
*�s$�D5�E�$E
�5D>�E
�
EN)0rzrrr&r-rqrrr7rHr�rQrW�ignore_deprecationr\rQr
rkr`rjr�r�r��skipIf�Py_DEBUG_WIN32r�r�r�r�r�r�r�r�r�r�rrr�r�Py_DEBUGr�r�r�r�r�r�rrrXr#r!r"r"�s���
:�0��X���/�1�4�F�H�	+�H�	+�
�&  �D,�07��L;��L;�\�X������� 0�1�#��
@�	�
@�$�(WB�rL�&?@�B�X�_�_�^�%P�Q�)�R�)��"'��X������'L�M�B�N�B�3�
"�1�8�8
L��X�_�_�S�\�\�W�,�.D�E�Z�F�Z��X�������0�2D�E��X�_�_�W�%�%�J�L�<�L�F�<�R�"*�**�<*9�X	9�0�  r#r"c�P�eZdZd�Zej
ed�d��Zd�Zd�Z	y)�
SSLErrorTestsc�8�tjdd�}|jt|�d�|j|jd�tjdd�}|jt|�d�|j|jd�y)Nr7r�)r
r�r�r\r�SSLZeroReturnError)r��es  r!�test_strzSSLErrorTests.test_strkst���L�L��E�"������Q���'�������!�$��"�"�1�e�,������Q���'�������!�$r#r�c���tjtj�}|jtj�5}|jt�ddd�|jjjd�d}|j|jj|�t|j�}|jd|v|�y#1swY��xYw)N�PEMz+(NO_START_LINE|UNSUPPORTED_PUBLIC_KEY_TYPE)�
NO_START_LINE)r
rkr`r�r�r�r�r�r��library�assertRegex�reasonr\rF)r�rTr}r�r�s     r!�test_lib_reasonzSSLErrorTests.test_lib_reasonus����n�n�S�4�4�5��
�
�
�s�|�|�
,�����x�(�-�������-�-�u�5�=��������,�,�e�4�����������1�,�a�0�
-�
,�s�C�C"c���tjtj�}d|_tj|_t
jd�5}t
j|j��}|jd�|j|dd��5}|jtj�5}|j�ddd�tj �}|j#|j%d�|�|j'|j j(tj*�ddd�ddd�y#1swY��xYw#1swY�xYw#1swYyxYw)NFr�r�z%The operation did not complete (read))r
rkr`r�r�r�r�r��create_connectionr��setblockingr�r��SSLWantReadError�do_handshaker\r�rFr�r�r�SSL_ERROR_WANT_READ)r�rTr�r�r}s     r!�
test_subclasszSSLErrorTests.test_subclass�s���n�n�S�4�4�5��"����-�-���
�
!�
!�"2�
3�q��(�(�����9�A�
�M�M�%� �����E�5��I�Q��&�&�s�';�';�<���N�N�$�=�����%��������-T� U�WX�Y�� � ����!3�!3�S�5L�5L�M�
J�4�
3�=�<��J�I��4�
3�s>�A	E*� E�>E�A2E�E*�E�E�E'	�#E*�*E3c�x�tj�}|jt�5|j	tj�tj�d��ddd�|jt�5|j	tj�tj�d��ddd�|jt�5|j	tj�tj�d��ddd�y#1swY��xYw#1swY�lxYw#1swYyxYw)NrSr�z.example.orgzexample.orgevil.com)r
r�r�r�r
r�r�r,s  r!�test_bad_server_hostnamez&SSLErrorTests.test_bad_server_hostname�s����(�(�*��
�
�
�z�
*��L�L�����#�-�-�/�)+�
�
-�+��
�
�z�
*��L�L�����#�-�-�/�)7�
�
9�+��
�
�y�
)��L�L�����#�-�-�/�)B�
�
D�*�
)�
+�
*��+�
*��*�
)�s#�9D�9D$�9D0�D!�$D-�0D9N)
rzrrrrqrrrr&r(rXr#r!rris6��%��X�_�_�^�%P�Q�	1�R�	1�N�$
Dr#rc�*�eZdZd�Zd�Zd�Zd�Zd�Zy)�MemoryBIOTestsc�z�tj�}|jd�|j|j	�d�|j|j	�d�|jd�|jd�|j|j	�d�|j|j	�d�|jd�|j|j	d�d�|j|j	d�d	�|j|j	d�d�y)
Nr�r#�barsfoobar�bazr�sbar7�z)r
r�r�r�rK�r��bios  r!�test_read_writezMemoryBIOTests.test_read_write�s����m�m�o���	�	�&���������V�,��������S�)��	�	�&���	�	�&���������Y�/��������S�)��	�	�&��������!��e�,�������!��d�+�������!��c�*r#c���tj�}|j|j�|j	|j�d�|j|j�|j
d�|j|j�|j�|j|j�|j	|jd�d�|j|j�|j	|jd�d�|j|j�|j	|j�d�|j|j�y)Nr#r�r�sfor7�o)	r
r�rP�eofr�rKr��	write_eofrFr/s  r!�test_eofzMemoryBIOTests.test_eof�s����m�m�o��������!��������S�)�������!��	�	�&��������!��
�
��������!�������!��e�,�������!�������!��d�+������� ��������S�)������� r#c��tj�}|j|jd�|j	d�|j|jd�td�D]5}|j
d�|j|jd|z
dz
��7td�D]2}|j	d�|j|j|dz��4|j
�|j|jd�y)Nrr�rr7r])r
r�r��pendingr�r�rK)r�r0r�s   r!�test_pendingzMemoryBIOTests.test_pending�s����m�m�o��������a�(��	�	�&��������a�(��q��A��H�H�Q�K����S�[�[�!�A�#�a�%�0���q��A��I�I�d�O����S�[�[�!�A�#�.��	���
�������a�(r#c�6�tj�}|jd�|j|j	�d�|jtd��|j|j	�d�|jt
d��|j|j	�d�t
td��}|ddd�}|jt�5|jt
|��ddd�y#1swYyxYw)Nr�r,r-s	noncontig���)	r
r�r�r�rKr��
memoryviewr��BufferError)r�r0�m�noncontig_writables    r!�test_buffer_typesz MemoryBIOTests.test_buffer_types�s����m�m�o���	�	�&���������V�,��	�	�)�F�#�$��������V�,��	�	�*�V�$�%��������V�,��y��.�/���t��t�W��
�
�
�{�
+��I�I�j�!3�4�5�,�
+�
+�s�+D�Dc�4�tj�}|jt|jd�|jt|jd�|jt|jd�|jt|jd�y)Nr�Tr7)r
r�r�r�r�r/s  r!�test_error_typeszMemoryBIOTests.test_error_types�se���m�m�o�����)�S�Y�Y��6����)�S�Y�Y��5����)�S�Y�Y��5����)�S�Y�Y��2r#N)rzrrr1r6r9r@rBrXr#r!r*r*�s��+�!� )�6�3r#r*c��eZdZd�Zd�Zy)�SSLObjectTestsc��tj�}|jtd�5tj	||�ddd�y#1swYyxYwr�)r
r�r�r�rr/s  r!r�z SSLObjectTests.test_private_init�s9���m�m�o��
�
#�
#�I�/C�
D��M�M�#�s�#�E�
D�
D�s�A�Ac��t�\}}}tj�}tj�}tj�}tj�}|j|||��}|j||d��}	t	d�D]{}
	|j�|jr|j|j��	|	j�|js�]|j|j���}|j�|	j�|jtj�5|j�ddd�|j|j��|	j�|j|j��|j�y#tj$rY��7wxYw#tj$rY��wxYw#1swY��xYw)Nr�Trr)r�r
r�r
r�r$r#r8r�rKr��unwrap)r��
client_ctx�
server_ctxr��c_in�c_out�s_in�s_out�clientr�_s           r!�test_unwrapzSSLObjectTests.test_unwrap�s���+:�+<�(�
�J���}�}����
�
����}�}����
�
����$�$�T�5�(�$�K���$�$�T�5�d�$�C���q��A�
��#�#�%��}�}��
�
�5�:�:�<�(�
��#�#�%��}�}��
�
�5�:�:�<�(��	���������
�
�s�3�3�
4��M�M�O�5�
	
�
�
�5�:�:�<� ��
�
��	
�
�
�5�:�:�<� ��
�
���7�'�'�
��
���'�'�
��
��5�
4�s0�G�G!�G;�G�G�!G8�7G8�;HN)rzrrr�rPrXr#r!rDrD�s��$�
(r#rDc���eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Ze
jej dk(d�d
��Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zy)�SimpleBackgroundTestsz?Tests that connect to a simple server running in the backgroundc��tjtj�|_|jj	t
�t
|j��}|j|�t|jf|_
y)Nr)r
rkr_r�r�r�r�enterContextr
r�server_addr)r�rs  r!�setUpzSimpleBackgroundTests.setUps\��!�n�n�S�-D�-D�E������+�+�O�<�#�D�,?�,?�@�����&�!� �&�+�+�.��r#c��ttjtj�tj��5}|j|j�|ji|j��|j|j�ddd�ttjtj�tjt��5}|j|j�|j|j��|j|j�ddd�y#1swY��xYw#1swYyxYw)Nr��r�r�)r�r�rTr
r�r�rUr��getpeercertrPr�r�r�rFr�s  r!�test_connectz"SimpleBackgroundTests.test_connects���
�f�m�m�F�N�N�;�&)�m�m�5�89�
�I�I�d�&�&�'����R�����1����Q�]�]�+�	5��f�m�m�F�N�N�;�&)�&7�&7�%/�1�45�
�I�I�d�&�&�'��O�O�A�M�M�O�,����Q�]�]�+�1�1�5�5��1�1�s�AD<�AE�<E�Ec�f�ttjtj�tj��}|j|j�tjdtj�}|jtj||j|j�y)Nr��|(
            certificate verify failed   # OpenSSL
            |
            CERTIFICATE_VERIFY_FAILED   # AWS-LC
        ))r�r�rTr
r�r�r�r�r�r�r�r�r�rU)r�r�r�s   r!�test_connect_failz'SimpleBackgroundTests.test_connect_fail,sy��
�V�]�]�6�>�>�:�&)�&7�&7�
9�������� ��
�
�
��d�d�	��
	
���s�|�|�U� �y�y�$�*:�*:�	<r#c�P�ttjtj�tjt
��}|j
|j�|jd|j|j��|j|j��y)NrXr)
r�r�rTr
r�r�r�r�r�r	rUrFrYr�s  r!�test_connect_exz%SimpleBackgroundTests.test_connect_ex<sj���V�]�]�6�>�>�:�&)�&7�&7�%/�
1��	
������ �����A�L�L��)9�)9�:�;�����
�
��(r#c���ttjtj�tjt
d��}|j
|j�|jd�|j|j�}|j|dtjtjf�tjg|ggd�		|j!�	|j'|j)��y#tj"$rtj|gggd�Yn1tj$$rtjg|ggd�YnwxYw��)NF)r�r�r�rrn)r�r�rTr
r�r�r�r�r"r	rUr�r�EINPROGRESSr�selectr$r#�SSLWantWriteErrorrFrY�r�r�rs   r!�test_non_blocking_connect_exz2SimpleBackgroundTests.test_non_blocking_connect_exEs��
�V�]�]�6�>�>�:�&)�&7�&7�%/�49�
;��	
������ �	�
�
�e��
�\�\�$�*�*�
+���
�
�b�1�e�/�/��1B�1B�C�D��
�
�b�1�#�r�3�'��
0���� ��	
����
�
��(���'�'�
0��
�
�q�c�2�r�3�/��(�(�
0��
�
�b�1�#�r�3�/�
0��
s�D�,E#�5+E#�"E#c��tjtj�}d|_tj|_|j
tjtj��5}|j|j�|ji|j��ddd�|j
tjtj�d��5}|j|j�ddd�tj|_|jt�|j
tjtj��5}|j|j�|j�}|j!|�ddd�y#1swY��xYw#1swY��xYw#1swYyxYw)NF�dummyr�)r
rkr`r�r�r�r�r�rTr�rUr�rYr�r�r�rF�r�rTr�r�s    r!�test_connect_with_contextz/SimpleBackgroundTests.test_connect_with_context_s6���n�n�S�4�4�5��"����-�-���
�_�_�V�]�]�6�>�>�:�
;�q�
�I�I�d�&�&�'����R�����1�<��_�_�V�]�]�6�>�>�:�,3��5�89�
�I�I�d�&�&�'�5��+�+����!�!�*�-�
�_�_�V�]�]�6�>�>�:�
;�q�
�I�I�d�&�&�'��=�=�?�D��O�O�D�!�<�
;�<�
;��5�5��<�
;�s$�2<F0�*F=�*=G	�0F:�=G�	Gc��tjtj�}|jt	jtj
�t��}|j|j�tjdtj�}|jtj||j|j�y)Nr�r\)r
rkr`r�r�rTr�r�r�r�r�r�r�r�r�rU)r�rTr�r�s    r!�test_connect_with_context_failz4SimpleBackgroundTests.test_connect_with_context_failss����n�n�S�4�4�5���O�O��M�M�&�.�.�)�4�
�
��	
������ ��
�
�
��d�d�	��
	
���s�|�|�U� !�	�	�4�+;�+;�	=r#c��tjtj�}|jt��|jt
jtj�t��5}|j|j�|j�}|j|�ddd�tjtj�}|jt��|jt
jtj�t��5}|j|j�|j�}|j|�ddd�y#1swY��xYw#1swYyxYw)Nr�r�)r
rkr`r�r�r�r�rTr�r�rUrYrFr�rhs    r!�test_connect_capathz)SimpleBackgroundTests.test_connect_capath�s���n�n�S�4�4�5���!�!��!�0�
�_�_�V�]�]�6�>�>�:�-E��G�JK�
�I�I�d�&�&�'��=�=�?�D��O�O�D�!�	G��n�n�S�4�4�5���!�!��!�6�
�_�_�V�]�]�6�>�>�:�-E��G�JK�
�I�I�d�&�&�'��=�=�?�D��O�O�D�!�	G�G�G�G��G�G�s�2=E.�(=E:�.E7�:Fc��tt�5}|j�}ddd�tj	�}tjtj�}|j|��|jtjtj�t��5}|j|j�|j�}|j|�ddd�tjtj�}|j|��|jtjtj�t��5}|j|j�|j�}|j|�ddd�y#1swY���xYw#1swY��xYw#1swYyxYw)Nr�r�)rJr�rKr
r+rkr`r�r�r�rTr�r�rUrYrF)r�rMr1r�rTr�r�s       r!�test_connect_cadataz)SimpleBackgroundTests.test_connect_cadata�sM��
�*�
���&�&�(�C���&�&�s�+���n�n�S�4�4�5���!�!��!�-�
�_�_�V�]�]�6�>�>�:�-E��G�JK�
�I�I�d�&�&�'��=�=�?�D��O�O�D�!�	G��n�n�S�4�4�5���!�!��!�-�
�_�_�V�]�]�6�>�>�:�-E��G�JK�
�I�I�d�&�&�'��=�=�?�D��O�O�D�!�	G�G��
��
G�G��G�G�s#�F#�+=F0�=F<�#F-�0F9�<Gr�z*Can't use a socket as a file under Windowsc�N�ttjtj��}|j|j�|j�}|j
�}|j�tj|d�|j�tj�|jt�5}tj|d�ddd�|jjj t j"�y#1swY�>xYwr�)r�r�rTr�rU�fileno�makefiler�rrKr�r�r�r_r�r�r�EBADF)r�rY�fdrMrs     r!�test_makefile_closez)SimpleBackgroundTests.test_makefile_close�s���
�f�m�m�F�N�N�;�
<��
�
�
�4�#�#�$�
�Y�Y�[���K�K�M��	���	�
����A��
���
�
�
�
��
�
�
�w�
'�1��G�G�B��N�(�������*�*�E�K�K�8�(�
'�s�D�D$c�f�tjtj�}|j|j�|j	d�t|tjd��}|j|j�d}		|dz
}|j�	tjr#t j"j%d|z�yy#tj$rtj|ggg�Yn0tj$rtjg|gg�YnwxYw��)NF�r�r�rr7z9
Needed %d calls to do_handshake() to establish session.
)r�rTr�rUr"r�r
r�r�r�r$r#rbrcrr�rr�r�)r�r��counts   r!�test_non_blocking_handshakez1SimpleBackgroundTests.test_non_blocking_handshake�s����M�M�&�.�.�)��	�	�	�$�"�"�#�	�
�
�e���Q�&)�m�m�49�
;��	
������ ����
+���
����� ��
�?�?��J�J���Z�]b�b�c���	�'�'�
+��
�
�q�c�2�r�*��(�(�
+��
�
�b�1�#�r�*�
+��s�C�+D/�*D/�.D/c�>�t|g|j��dti�y)Nr�)�_test_get_server_certificaterUr�r�s r!�test_get_server_certificatez1SimpleBackgroundTests.test_get_server_certificate�s��$�T�N�D�,<�,<�N�:�Nr#c	����|j\}}g��fd�}|jj|�tj	||f�}|s|jd|�d|�d��tj	||ft��}|s|jd|�d|�d��tjr)tjjd|�d|�d|�d��|j�||g�y)	Nc�(���j|�yrW)�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�)
rUr�r�r
�get_server_certificater.r�rr�rr�r�r�)r��hostrr�r1r�s     @r!�test_get_server_certificate_sniz5SimpleBackgroundTests.test_get_server_certificate_sni�s�����%�%�
��d���	-����3�3�M�B��(�(�$���6����I�I�4��F�G��(�(�$���
�(�K����I�I�4��F�G��?�?��J�J���D�RV�X[�\�]������d�|�4r#c�0�t|g|j���yrW)�!_test_get_server_certificate_failrUr�s r!� test_get_server_certificate_failz6SimpleBackgroundTests.test_get_server_certificate_fail�s��	*�$�B��1A�1A�Br#c���d�}|jj|�|jtj�5t
j
|jtd��ddd�y#1swYyxYw)Nc�.�tjd�y)N皙�����?)r��sleep�r�r�r�s   r!r�zPSimpleBackgroundTests.test_get_server_certificate_timeout.<locals>.servername_cb�s
���J�J�s�Or#皙�����?)r�rq)	r�r�r�r�rqr
r�rUr�)r�r�s  r!�#test_get_server_certificate_timeoutz9SimpleBackgroundTests.test_get_server_certificate_timeout�sY��	����3�3�M�B�
�
�
�v�~�~�
.��&�&�t�'7�'7�*�/2�
'�
4�/�
.�
.�s�'A.�.A7c��ttjtj�tjd��5}|j|j�ddd�ttjtj�tjd��5}|j|j�ddd�|jtjd�5tjtj�5}t|tjd��}|j|j�ddd�ddd�y#1swY��xYw#1swY��xYw#1swY�*xYw#1swYyxYw)Nr()r�r�r)r*r+)	r�r�rTr
r�r�rUr�r�)r�r�r�s   r!r-z"SimpleBackgroundTests.test_cipherss	��
�f�m�m�F�N�N�;�'*�}�}�e�E�HI�
�I�I�d�&�&�'�E��f�m�m�F�N�N�;�'*�}�}�i�I�LM�
�I�I�d�&�&�'�I��
#�
#�C�L�L�2M�
N����v�~�~�.�$�$�T�.1�m�m�EW�Y���	�	�$�*�*�+�/�O�
N�E�E��I�I��
/�.��O�
N�s;�E�E�#$E4�8E(�?E4�E�E%�(E1	�-E4�4E=c��tjtj�}|jt��|j|j
�g�|jtjtj�d��5}|j|j�|j�}|j|�ddd�|jt|j
��d�y#1swY�3xYw)Nr�r.r�r7)r
rkr`r�r�r�r�r�r�rTr�rUrYrFrbrhs    r!�test_get_ca_certs_capathz.SimpleBackgroundTests.test_get_ca_certs_capaths����n�n�S�4�4�5���!�!��!�0�����)�)�+�R�0�
�_�_�V�]�]�6�>�>�:�-8��:�=>�
�I�I�d�&�&�'��=�=�?�D��O�O�D�!�	:�
	
����S�-�-�/�0�!�4�:�:�s�=C=�=Dc���tjtj�}|jt��tjtj�}|jt��tj
t
j�}|j|d��5}|j|j�|j|j|�|j|jj|�||_|j|j|�|j|jj|�ddd�y#1swYyxYw)Nr�r.r�)
r
rkr`r�r�r�rTr�r�rUr�r��_sslobj)r��ctx1�ctx2r�rYs     r!�test_context_setgetz)SimpleBackgroundTests.test_context_setgets����~�~�c�5�5�6���"�"�&�"�1��~�~�c�5�5�6���"�"�&�"�1��M�M�&�.�.�)��
�
�
�a��
�
=���J�J�t�'�'�(��M�M�"�*�*�d�+��M�M�"�*�*�,�,�d�3��B�J��M�M�"�*�*�d�+��M�M�"�*�*�,�,�d�3�
>�
=�
=�s
�)B'E�E"c��|jdtj�}d}tj|�D]}}	d}
|dz
}	||�}|j�}
|j|
�|
�nK|
tjk(s�I|jd�}
|
r|j|
��n|j��tjr.tj jd||j"fz�S#tj
$rD}|jtjtjfvr�|j}
Yd}~��d}~wwxYw)Nrqrr7i�z"Needed %d calls to complete %s().
)r�r�
SHORT_TIMEOUT�
busy_retryr
r�rr%�SSL_ERROR_WANT_WRITErK�sendallr`r�r5r�rr�rz)r�r��incoming�outgoingrursr�rqrxrOr�retr�bufs              r!�ssl_io_loopz!SimpleBackgroundTests.ssl_io_loop)s"���*�*�Y��(=�(=�>�����#�#�G�,�A��E��Q�J�E�
 ��D�k���-�-�/�C��L�L����}���#�1�1�1��i�i��&����N�N�3�'��&�&�(�/-�0�?�?��J�J���B� %�t�}�}�5�6�
7��
��-�<�<�
 ��7�7�3�#:�#:�#&�#;�#;�#=�=�������	
 �s�C8�8E�9E
�
Ec��tjtj�}|j|j�|j	|j
�tj�}tj�}tjtj�}|j|j�|j|jtj�|jt �|j#||dt$�}|j'|j(j*|�|j-|j/��|j-|j1��|j-|j3��|j5t6|j8�dtj:vr3|j1�dk7r |j-|j=d��|j?||||j@�|j|j/��|j-|j3��|jC|j1��|j|j9��dtj:vr3|j1�dk7r |j|j=d��	|j?||||jD�|j5tjH|jJd�y#tjF$rY�AwxYw)NFr��TLSv1.3r�)&r�rTr�r�r�rUr
r�rkr`rFr�r�r�r�r�r�r
r�r�r��ownerr��cipherr8�shared_ciphersr�r�rYrr�r�r$�assertIsNotNonerG�SSLSyscallErrorr�r�)r�r�r�r�rT�sslobjs      r!�test_bio_handshakez(SimpleBackgroundTests.test_bio_handshakeKsK���}�}�V�^�^�,������
�
�#����T�%�%�&��=�=�?���=�=�?���n�n�S�4�4�5������*�*�+�������#�*;�*;�<��!�!�*�-����h��%�6�8���
�
�f�n�n�*�*�F�3����&�-�-�/�*����&�.�.�*�+����&�/�/�1�2����*�f�&8�&8�9��3�4�4�4����9I�Y�9V����f�8�8��F�G�����x��6�3F�3F�G�����
�
��(����&�/�/�1�2����V�^�^�-�.�����*�*�,�-��3�4�4�4����9I�Y�9V��O�O�F�6�6�|�D�E�	����T�8�X�v�}�}�E�
	
���#�,�,����f�=��	�"�"�	�
�	�s�L)�)L?�>L?c���tjtj�}|j|j�|j	|j
�tj�}tj�}tjtj�}d|_
tj|_|j||d�}|j||||j�d}|j||||j |�|j||||j"d�}|j%|d�|j||||j&�y)NF�FOO
�sfoo
)r�rTr�r�r�rUr
r�rkr`r�r�r�r
r�r$r�rKr�rG)r�r�r�r�rTr��reqr�s        r!�test_bio_read_write_dataz.SimpleBackgroundTests.test_bio_read_write_dataos���}�}�V�^�^�,������
�
�#����T�%�%�&��=�=�?���=�=�?���n�n�S�4�4�5��"����-�-������h��%�8������x��6�3F�3F�G�������x��6�<�<��E����t�X�x����d�K������h�'�����x��6�=�=�Ar#c���t�\}}}tjtj�5}|j|j�t
j
�}t
j
�}|j|||��}|j||||j�|j�|jt
j|j�ddd�y#1swYyxYw)Nr�)r�r�rTr�rUr
r�r
r�r$r5r��SSLEOFErrorrK)r�r�r�r�r�r�r�r�s        r!�test_transport_eofz(SimpleBackgroundTests.test_transport_eof�s���3B�3D�0����
�]�]�6�>�>�
*�d��L�L��)�)�*��}�}��H��}�}��H�#�,�,�X�x�=E�-�G�F����T�8�X�v�7J�7J�K�
��� ����c�o�o�v�{�{�;�+�
*�
*�s�B0C+�+C4N)rzrr�__doc__rVrZr]r_rerirkrmrorqrrr ruryr|r�r�r�r-r�r�r�r�r�r�rXr#r!rRrRs���I�/�
,�<� )�)�4"�(=�&"�."�*�X�_�_�R�W�W��_�&R�S�9�T�9�$d�*O�5�*C�
4�,�
5�
4� �D">�HB�"<r#rR�networkc��eZdZd�Zej
ejd�ejd�d���Z
y)�NetworkedTestsc�6�tjt�5tt	jtj
�tjd��}|j|j�|jd�|jtdf�}|dk(r|jd�n$|tjk(r|jd�|j|tj tj"f�ddd�y#1swYyxYw)NFrwgH�����z>�rz!REMOTE_HOST responded too quicklyzNetwork unreachable.)r�transient_internet�REMOTE_HOSTr�r�rTr
r�r�r�ror	rr�ENETUNREACHr��EAGAINrrds   r!�test_timeout_connect_exz&NetworkedTests.test_timeout_connect_ex�s����
-�
-�k�
:� ����v�~�~�!>�*-�*;�*;�8=�?�A�
�O�O�A�G�G�$�
�L�L��#����{�C�0�1�B��Q�w��
�
�A�B��u�(�(�(��
�
�4�5��M�M�"�u�|�|�U�->�->�?�@�;�
:�
:�s�C,D�Dz
Needs IPv6�walltimec��tjd�5t|dd�t|dd�ddd�y#1swYyxYw)Nzipv6.google.comr�)rr�r{r�r�s r!� test_get_server_certificate_ipv6z/NetworkedTests.test_get_server_certificate_ipv6�s:���
-�
-�.?�
@�(��/@�#�F�-�d�4E�s�K�A�
@�
@�s	�:�AN)rzrrr�rqrr�IPV6_ENABLEDr�requires_resourcer�rXr#r!r�r��sI��A� �X����3�3�\�B��W���z�*�L�+�C�Lr#r�c	�@�tj||f�}|s|jd|�d|�d��tj||f|��}|s|jd|�d|�d��tjr*t
jjd|�d|�d|�d��yy)Nr�r�r�r�r�r�r�)r
r�r.rr�rr�r�)�testr�rr�r1s     r!r{r{�s}��

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

�
$�
$�d�D�\�D�
$�
A�C���	�	�t�T�B�C�����
�
����d�TW�X�Y�r#c
�n�tj|�5	tj||ft��}|jd|�d|�d|�d��ddd�y#tj$r<}tjr"tjjd|z�Yd}~�Sd}~wwxYw#1swYyxYw)Nr�zGot server certificate z for r�r�z%s
)r�check_no_resource_warningr
r�r�r.r�rr�rr�r�)r�r�rr1�xs     r!r�r��s���	�	2�	2�4�	8�	R��,�,�d�D�\�H�,�M�C�
�I�I��T�4�P�Q�
9�	8���|�|�	-�����
�
� � ��!��,���	-��
9�	8�s3�B+�A�B+�B(�,2B#�B+�#B(�(B+�+B4)�make_https_serverc�n�eZdZGd�dej�Z					dd�Zd�Zd�Zdd�Z	d�Z
d	�Zd
�Zy)
rc�4�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	y)	�$ThreadedEchoServer.ConnectionHandlerz�A mildly complicated class, because we want it to work both
        with and without the SSL wrapper around the socket connection, so
        that we can test the STARTTLS functionality.c���||_d|_||_||_|jj	d�d|_tjj|�d|_	y�NFT)
r�runningr��addrr"�sslconn�	threading�Thread�__init__�daemon)r�r�connsockr�s    r!r�z-ThreadedEchoServer.ConnectionHandler.__init__�sR�� �D�K� �D�L� �D�I��D�I��I�I�!�!�$�'��D�L����%�%�d�+��D�Kr#c���	|jjj|jd��|_|jj
j
|jj��|jjj
|jj��|jjjtjk(�r|jj�}tjrN|jjr8t j"j%dt'j(|�zdz�|jjd�}tjrd|jjrN|� t j"j%d�n,t j"j%dt+|��d��|jj-�}tjrD|jjr.t j"j%dt/|�zdz�y#t0t2t4f$r�}|jj6j
t/|��|jjr$t9d	t;|j<�zd
z�d|_|jA�Yd}~yd}~wtjBtDf$r�}|jj6j
t/|��|jjr$t9d	t;|j<�zd
z�|jFtFjHk7rDt jJdk7r1d|_|jjM�|jA�Yd}~yd}~wwxYw)
NTrz 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)'rr�r�r�r��selected_alpn_protocolsr�selected_alpn_protocolr�r�r
r�rYrr��chattyrr�r�rrrbr�r\�ConnectionResetError�BrokenPipeError�ConnectionAbortedError�conn_errorsr�r�r�r�r�r�r_r�
EPROTOTYPEr�stop)r�r��cert_binaryr�rs     r!�	wrap_connz.ThreadedEchoServer.ConnectionHandler.wrap_conn�s���;
�#�{�{�2�2�>�>��I�I�4� ?� 1������3�3�:�:�4�<�<�;^�;^�;`�a�T���*�*�1�1�$�,�,�2M�2M�2O�P��;�;�&�&�2�2�c�6G�6G�G��<�<�3�3�5�D����4�;�;�+=�+=��
�
�(�(�);�f�n�n�T�>R�)R�UY�)Y�Z�"&�,�,�":�":�4�"@�K����4�;�;�+=�+=�&�.��J�J�,�,�-O�P��J�J�,�,�/?��K�@P�?Q�QT�-U�V����,�,�.���?�?�t�{�{�'9�'9��J�J�$�$�%I�C�PV�K�%W�Z^�%^�_���o)�/�;Q�R�
����'�'�.�.�s�1�v�6��;�;�%�%� �!K�d�SW�S\�S\�o�!]�`e�!e�f�$����
�
�����L�L�'�*�
����'�'�.�.�s�1�v�6��;�;�%�%� �!K�d�SW�S\�S\�o�!]�`e�!e�f�
�7�7�e�.�.�.�3�<�<�8�3K�#(�D�L��K�K�$�$�&��J�J�L���-
�s&�A3I�O!�.A?K2�2O!�C	O�O!c��|jr|jj�S|jjd�S)Nr�)r�rKr�r`r�s r!rKz)ThreadedEchoServer.ConnectionHandler.read	s/���|�|��|�|�(�(�*�*��y�y�~�~�d�+�+r#c��|jr|jj|�S|jj|�SrW)r�r�r�rd)r�r�s  r!r�z*ThreadedEchoServer.ConnectionHandler.write	s1���|�|��|�|�)�)�%�0�0��y�y�~�~�e�,�,r#c��|jr|jj�y|jj�yrW)r�r�r�r�s r!r�z*ThreadedEchoServer.ConnectionHandler.close	s'���|�|����"�"�$��	�	���!r#c���d|_|jjs|j�sy|j�r	|j	�}|j�}|s@d|_	|jj�|_d|_|j��n�|dk(rVtjr5|jjrtjj!d�|j�y|jjrm|dk(rhtjr5|jjrtjj!d�|j!d�|j��s�y|jjr�|jr�|dk(r�tjr5|jjrtjj!d	�|j!d�|jj�|_d|_tj�r|jj�r�tjj!d
��n�|dk(r�tjr5|jjrtjj!d�|jj#d
�}|j!t%|�j'd�dz��nK|dk(rstjr5|jjrtjj!d�	|jj)�|j!d��n�|dk(r@|jj/��|j!d��n�|j!d��n�|dk(rH|jj/�}|j!t%|�j'd�dz��nA|dk(rR|jj0j3�}|j!t5|�j7dd�dz�n�|dk(rR|jj0j9�}|j!t5|�j7dd�dz�n�tjrd|jjrN|jxrdxsd}tjj!d|�d|�d|j;��d|�d�	�|j!|j;��|jr��yy#t$rY���wxYw#t*j,$r6}|j!t%|�j'd�dz�Yd}~�dd}~wwxYw#t$r�}|jj<rDtjr4t?|t@�rtCd |jD���ntGd!�	|j!d"�n#t$rYnwxYw|j�d|_|jjI�Yd}~��(d}~wwxYw)#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
VERIFIEDCHAINr7�bigsUNVERIFIEDCHAIN�	encrypted�unencryptedz server: read z (z), sending back z)...
z Connection reset by peer: zTest server failure:
sERROR
)%r�r�starttls_serverr�rK�stripr�rGr�r_r�rr��connectionchattyrr�r�r�r�rv�verify_client_post_handshaker
r�rYr��get_verified_chainrb�to_bytes�get_unverified_chainrr�r[�ConnectionError�printr�r�r�)r��msg�strippedr�rr��certs�ctypes        r!�runz(ThreadedEchoServer.ConnectionHandler.run%	s����D�L��;�;�.�.��~�~�'���,�,�]'��)�)�+�C�"�y�y�{�H�#�',���0�(,���(;�(;�(=�D�I�,0�D�L��
�
��!�W�,�"�?�?�t�{�{�/K�/K��J�J�,�,�-R�S��
�
����+�+�5�5�"�k�1�"�?�?�t�{�{�/K�/K��J�J�,�,�-b�c��
�
�7�+�#�~�~�/�"��+�+�5�5�$�,�,�&�)�3�"�?�?�t�{�{�/K�/K��J�J�,�,�-`�a��
�
�7�+�$(�L�L�$7�$7�$9��	�'+���"�?�?�t�{�{�/K�/K��J�J�,�,�-Z�[�!�%5�5�"�?�?�t�{�{�/K�/K��J�J�,�,�-p�q�#�|�|�?�?��M���
�
�4��:�#4�#4�Z�#@�5�#H�I�!�V�+�"�?�?�t�{�{�/K�/K��J�J�,�,�-X�Y�0� �L�L�E�E�G�!�J�J�w�/�!�Z�/��<�<�3�3�5�A� �J�J�y�1� �J�J�z�2�!�Z�/�#�|�|�7�7�9���
�
�4��:�#4�#4�Z�#@�5�#H�I�!�%5�5� $��� 4� 4� G� G� I���
�
�3�u�:�#6�#6�q�%�#@�5�#H�I�!�%7�7� $��� 4� 4� I� I� K���
�
�3�u�:�#6�#6�q�%�#@�5�#H�I�#�O�O� �K�K�8�8�%)�\�\�%A�k�$S�m�E��J�J�,�,�03�U�C�I�I�K��.P�Q��
�
�3�9�9�;�/�Q�,�,�� '�!�!�	!��N #�|�|�K� �J�J�t�A�w�~�~�j�'A�E�'I�J�J��K��2�'��{�{�)�)�g�o�o�%�a��9�"�"=�d�i�i�[� I��)�)A�B���
�
�:�.��"������J�J�L�#(�D�L��K�K�$�$�&�&��+'�s��)V3�'U�A3V3�:BV3�=G	V3�U'�!G&V3�	U$� V3�#U$�$V3�'V0�:,V+�&V3�+V0�0V3�3	Y4�<AY/�X)�(Y/�)	X5�2Y/�4X5�54Y/�/Y4N)
rzrrr�r�r�rKr�r�r	rXr#r!�ConnectionHandlerr��s'��	8�	�<	�|	,�	-�	"�c	'r#r
Nc���|
r|
|_n�tj|�|ntj�|_|�|ntj|j_|r|jj
|�|r|jj|�|r|jj|�|	r|jj|	�||_
||_||_tj�|_tj |j�|_d|_d|_g|_g|_g|_t.j0j3|�d|_yr�)r�r
rkr_r�r�r�r��set_alpn_protocolsrRr�r�r�r�r�rrr�flag�activer�r�r�r�r�r�r�)r��certificate�ssl_version�certreqs�cacertsr�r�r��alpn_protocolsr�r�s           r!r�zThreadedEchoServer.__init__�	s��
�"�D�L��>�>�-8�-D�+6�/2�/F�/F�H�D�L�5=�4H��-0�]�]�
�L�L�$�����2�2�7�;�����,�,�[�9�����/�/��?�����(�(��1���� 0���.����M�M�O��	�!�+�+�D�I�I�6��	���	����')��$� ���������!�!�$�'���r#c��|jtj��|jj	�|SrW��startr��Eventr
�waitr�s r!�	__enter__zThreadedEchoServer.__enter__�	�(���
�
�9�?�?�$�%��	�	�����r#c�D�|j�|j�yrW)r�r�r�rss  r!�__exit__zThreadedEchoServer.__exit__�	s���	�	���	�	�r#c�P�||_tjj|�yrW�r
r�r�r�r�r
s  r!rzThreadedEchoServer.start�	�����	������t�$r#c���|jjd�|jjd�d|_|jr|jj�|jr�	|jj
�\}}tjr:|jr.tjjdt|�zdz�|j|||�}|j�|j!�|jr��|j+�y#t"$r=}tjr#tjjd|�d��Yd}~�_d}~wt$$r|j'�Y�}t($rT}tjr:|jr.tjjdt|�zdz�Yd}~��d}~wwxYw)Ng�?rTz server:  new connection from r�z connection timeout z connection handling failed: )r�ro�listenrr
r�r�rr�r�rr�r�r�r
rr�TimeoutError�KeyboardInterruptr��
BaseExceptionr�)r��newconn�connaddr�handlerrs     r!r	zThreadedEchoServer.run�	sZ���	�	���S�!��	�	���������9�9��I�I�M�M�O��k�k�
J�$(�I�I�$4�$4�$6�!����?�?�t�{�{��J�J�$�$�%E�'+�H�~�&6�8<�&=�>��0�0��w��I���
�
�������k�k�&	
�
�
��� �
E��?�?��J�J�$�$�';�A�5��%C�D���$�
��	�	�� �
J��?�?�t�{�{��J�J�$�$�7�$�q�'�A�D�H�J���
J�s,�1BD)�)	G$�23E*�*G$�G$�A
G�G$c�`�|j�"|jj�d|_yyrW)r�r�r�s r!r�zThreadedEchoServer.close�	s&���9�9� ��I�I�O�O���D�I�!r#c��d|_y�NF)rr�s r!r�zThreadedEchoServer.stop�	s	����r#)
NNNNTFFNNNrW)
rzrrr�r�r
r�rrrr	r�r�rXr#r!rr�sL��C'�I�,�,�C'�J6:�(,�FK� $�'+�	 �D�
�%��8�
r#rc�b�eZdZGd�dej�Zd�Zd�Zd�Zd�Z	dd�Z
d	�Zd
�Zy)�AsyncoreEchoServerc�H�eZdZGd�dej�Zd�Zd�Zd�Zy)�AsyncoreEchoServer.EchoServerc�0�eZdZd�Zd�Zd�Zd�Zd�Zd�Zy)�/AsyncoreEchoServer.EchoServer.ConnectionHandlerc��t|d|d��|_tjj	||j�d|_|j
�y)NTF)r�r�r�)r�r�r	�dispatcher_with_sendr��_ssl_accepting�_do_ssl_handshake)r��connr�s   r!r�z8AsyncoreEchoServer.EchoServer.ConnectionHandler.__init__�	sI��.�t��7?�FK�M����-�-�6�6�t�T�[�[�I�&*��#��&�&�(r#c���t|jtj�rK|jj	�dkDr.|j�|jj	�dkDr�.y)NrT)r[r�r
r�r8�handle_read_eventr�s r!�readablez8AsyncoreEchoServer.EchoServer.ConnectionHandler.readable�	sO���d�k�k�3�=�=�9��+�+�-�-�/�!�3��.�.�0��+�+�-�-�/�!�3�r#c��	|jj�d|_y#tjtj
f$rYytj$r|j�cYStj$r�t$r?}|jdtjk(r|j�cYd}~SYd}~yd}~wwxYw)NFr)
r�r$r5r
r#rcr��handle_closer�r_rsr�ECONNABORTED�r��errs  r!r6zAAsyncoreEchoServer.EchoServer.ConnectionHandler._do_ssl_handshake�	s���0��K�K�,�,�.�+0�D�'���,�,�c�.C�.C�D������/��,�,�.�.��|�|����3��x�x��{�e�&8�&8�8�#�0�0�2�2�9��3�s'�$�#C�	"C�-C�/C�7C�Cc�:�|jr|j�y|jd�}tjr+t
jjdt|�z�|s|j�y|j|j��y)Nr�z server:  read %s from client
)r5r6r`rr�rr�r�r�r�rdr)r�r�s  r!�handle_readz;AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_read
sf���&�&��*�*�,��9�9�T�?�D�����
�
�(�(�)J�T�RV�Z�)W�X���
�
���	�	�$�*�*�,�/r#c��|j�tjr-tjjd|jz�yy)Nz server:  closed connection %s
)r�rr�rr�r�r�r�s r!r<z<AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_close
s3���
�
���?�?��J�J�$�$�%G�$�+�+�%U�V�#r#c���rWrXr�s r!r�z<AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_error
s��r#N)	rzrrr�r:r6rAr<r�rXr#r!r
r2�	s!��
)�
�

0�

0�
W�

r#r
c��||_tjtjtj�}t	j
|d�|_tjj||�|jd�y)NrSr)r�r�rT�SOCK_STREAMrrrr	�
dispatcherr�r#r�s   r!r�z&AsyncoreEchoServer.EchoServer.__init__
sX��$�D�M��=�=�����1C�1C�D�D�%�/�/��b�9�D�I����(�(��t�4��K�K��Nr#c��tjr"tjj	d|z�|j||j�y)Nz$ server:  new connection from %s:%s
)rr�rr�r�r
r�)r��sock_objr�s   r!�handle_acceptedz-AsyncoreEchoServer.EchoServer.handle_accepted
s5������
�
� � �!H�$�!N�O��"�"�8�T�]�]�;r#c���rWrXr�s r!r�z*AsyncoreEchoServer.EchoServer.handle_error"
s��r#N)	rzrrr	r4r
r�rIr�rXr#r!�
EchoServerr0�	s$��1	�� =� =�1	�f	�	<�
	r#rKc���d|_d|_|j|�|_|jj|_t
jj|�d|_yr�)	r
rrKrrr�r�r�r�)r�r�s  r!r�zAsyncoreEchoServer.__init__%
sL����	�����o�o�h�/����K�K�$�$��	����!�!�$�'���r#c�P�d|jj�d|j�d�S)N�<r|�>)ryrzrr�s r!�__str__zAsyncoreEchoServer.__str__-
s�� �N�N�3�3�T�[�[�A�Ar#c��|jtj��|jj	�|SrWrr�s r!rzAsyncoreEchoServer.__enter__0
rr#c��tjrtjj	d�|j�tjrtjj	d�|j
�tjrtjj	d�tjd��y)Nz cleanup: stopping server.
z! cleanup: joining server thread.
z cleanup: successfully joined.
T)�
ignore_all)	rr�rr�r�r�rr	�	close_allrs  r!rzAsyncoreEchoServer.__exit__5
sp���?�?��J�J���;�<��	�	���?�?��J�J���A�B��	�	���?�?��J�J���?�@����d�+r#Nc�P�||_tjj|�yrWrr s  r!rzAsyncoreEchoServer.startA
r!r#c���d|_|jr|jj�|jr$	tjd�|jr�#yy#Y�xYw)NTr7)rr
r�r	�loopr�s r!r	zAsyncoreEchoServer.runE
sH������9�9��I�I�M�M�O��k�k�
��
�
�a� ��k�k��
��s�A�A#c�F�d|_|jj�yr,)rrr�r�s r!r�zAsyncoreEchoServer.stopO
s����������r#rW)
rzrrr	rFrKr�rPrrrr	r�rXr#r!r.r.�	s;��B�h�)�)�B�H�B��

,�%��r#r.c��i}t||d��}|5|jtj�||��5}	|	jt|j
f�|t
|�t|�fD]�}
|r2tjr"tjjd|z�|	j|
�|	j�}|r2tjr"tjjd|z�||j�k7s��td|ddt!|�|ddj�t!|�fz��|	jd	�|r/tjrtjjd
�|j#|	j%�|	j'�|	j)�|	j+�|	j-�|	j.|	j0d��|	j3�ddd�|j4|d<|j6|d
<ddd�|S#1swY�1xYw#1swY|SxYw)zW
    Launch a server, connect a client to it and try various reads
    and writes.
    F�r�r�r�)r��session� client:  sending %r...
� client:  read %r
�4bad data <<%r>> (%d) received; expected <<%r>> (%d)
N��over
� client:  closing connection.
)�compressionr��peercert�client_alpn_protocolr8�session_reusedr[�server_alpn_protocols�server_shared_ciphers)rr�r�r�r
rr�r<rr�rr�r�rKr�AssertionErrorrbr�rbr�rYr�r8rer[r�r�r�)r�r��indatar�r��sni_namer[r�rr��arg�outdatas            r!�server_params_testrmS
s���
�E�
��'-�16�8�F�
�
�
'�
'��
�
�� (�'�(�;�>?�
�I�I�t�V�[�[�)�*��	�&� 1�:�f�3E�F��#�����
�
�(�(�7�&�@�B�������&�&�(��#�����
�
�(�(�)>��)H�I��f�l�l�n�,�(�O�"�3�B�<��W��!�#�2�;�,�,�.��F��=�=�>�>�G�
�G�G�I����?�?��J�J�$�$�%F�G��L�L� �}�}���(�(�*��M�M�O�()�(@�(@�(B��9�9�;�"#�"2�"2��9�9��
�
�G�G�I�?;�@*0�)G�)G��%�&�)/�)>�)>��%�&�E
�F�L�E;�;��
�F�L�s*�'I
�CI�C>I�&I
�I
	�I
�
Ic��|�tj}tjdtjdtjdi|}tj
rU|xrdxsd}tjj|tj|�tj|�|fz�tj�5tj|�}|xj|zc_
tj|�}	|	xj|zc_
ddd�tj|d�}
|
�Rt!	d�rF|tj"k(r3|	j$|
kDr$tj�5|
|	_ddd�j&tj"k(r|j)d�t+	|�||	fD]3}||_|j/t0�|j3t4��5	t7||	d	d	�
�}|s8t9dtj|��dtj|��d
���|dur||dk7rt9d|�d|d����yy#1swY��TxYw#1swY��xYw#tj:$r|r�Yyt<$r*}
|s|
j>t>j@k7r�Yd}
~
yd}
~
wwxYw)a<
    Try to SSL-connect using *client_protocol* to *server_protocol*.
    If *expect_success* is true, assert that the connection succeeds,
    if it's false, assert that the connection fails.
    Also, if *expect_success* is a string, assert that it is the protocol
    version actually used by the connection.
    Nr�r�r�z %s->%s %s
z
 {%s->%s} %s
rPr(F)r�r�zClient protocol z  succeeded with server protocol r�Tr8zversion mismatch: expected z, got )!r
r�r�r�rr�rr�r��get_protocol_namerrWrkrw�PROTOCOL_TO_TLS_VERSIONr�rQr^rPrcrRrUr�r�r�r�r�rmrhr�r_r�
ECONNRESET)�server_protocol�client_protocol�expect_success�	certsreqs�server_options�client_options�certtype�	formatstrr�r��min_versionrTr�rs              r!�try_protocol_combor{�
s������M�M�	��
�
�{����?����?���	�H�
���#�6��K�;K�	��
�
�����/�/��@��/�/��@�"�$�$�	%�

�	'�	'�	)�����8�����.�0������8�����.�0��
*�*�-�-�o�t�D�K���
�N�$5�6��s�/�/�/��*�*�[�8��
+�
+�
-�-8�N�*�.����#�"2�"2�2��"�"�5�)����7���/��#������O�,��!�!�*�-�0�G�"�>�>�*/�%�I��� ��(�(��9��(�(��9�;�<�
<��D�(� �E�)�$4�4� �$2�E�)�4D�"F�G�
G�5�)�c
*�	)��".�
-��(�<�<��������Q�W�W��(8�(8�8��9���s7�AI(�8I5�=J�(I2�5I>�K�K�! K�Kc��eZdZejd�d��Zd�Zd�Zd�Ze	jejd�d��Z
d�Zd	�Zd
�Zd�Zed�d
��Zd�Zd�Zd�Zed�d��Zed�d��Zed�d��Zed�d��Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z!d �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.e	jd,ej^vd-�d.��Z0d/�Z1e	je2ed0�d1�d2��Z3d3�Z4d4�Z5e	jle7d5�d6��Z8d7�Z9d8�Z:d9�Z;d:�Z<d;�Z=d<�Z>d=�Z?d>�Z@d?�ZAd@�ZBdA�ZCdB�ZDdC�ZEdD�ZFdE�ZGdF�ZHyG)H�
ThreadedTestsr�c	�D�tjrtjj	d�t�\}}}|j
tjtj��5t||dd|��ddd�d|_|j
tjtj��5|jtj�5}t||dd|��ddd�|jdtj ��ddd�|j
tjtj��5|jtj�5}t||dd��ddd�|jdtj ��ddd�|j
tjtj��5|jtj�5}t||dd��ddd�|jdtj ��ddd�y#1swY���xYw#1swY��mxYw#1swY��MxYw#1swY��xYw#1swY��xYw#1swY�vxYw#1swYyxYw)	z2Basic test of an SSL client connecting to a serverr�)rNrT)r�r�r�r�rjNFz@Cannot create a client socket with a PROTOCOL_TLS_SERVER context)r�r�r�r�)rr�rr�r�r�r�r
r`r_rmr�r�r�r�r\r�)r�r�r�r�rs     r!�	test_echozThreadedTests.test_echo�
s����?�?��J�J���T�"�3B�3D�0����
�\�\��!8�!8��AX�AX�\�
Y��n�.<�&*�T�(0�
2�Z�).��%�
�\�\��!8�!8��AX�AX�\�
Y��"�"�3�<�<�0�A�"�.�2@�*.��,4�6�1�

�M�M�R��A�K�K� �
�
Z��\�\��!8�!8��AX�AX�\�
Y��"�"�3�<�<�0�A�"�.�2@�*.��G�1�
�M�M�R��A�K�K� �
�Z��\�\��!8�!8��AX�AX�\�
Y��"�"�3�<�<�0�A�"�.�2@�*.��G�1�
�M�M�R��A�K�K� �
"�Z�
Y�9Z�
Y��1�0��Z�
Y��1�0��Z�
Y��1�0��Z�
Y�sx�-I�< I%�I�--I%� I>�1I2�-I>�% J�J
�-J�I�I"	�I%�%I/�2I;	�7I>�>J�
J	�J�Jc��tjrtjj	d�t�\}}}t
|d��}|5|jtj�d|��5}|jt|jf�|jt�5|j�ddd�|j�|j�}|j!|d�|j#�}tjrctjj	t%j&|�dz�tjj	dt)|�zdz�d|vr'|j+d	t%j&|�z�d
|dvr|j+d�|j-d|�|j-d
|�t.j1|d�}t.j1|d
�}	|j3||	�ddd�ddd�y#1swY��yxYw#1swY�xYw#1swYyxYw)Nr�F�r�r�)r�r��Can't get peer certificate.zConnection cipher is z.
r6z$No subject field in certificate: %s.r+zkMissing or invalid 'organizationName' field in certificate subject; should be 'Python Software Foundation'.r4r3)rr�rr�r�r�rr�r�r�r
rr�r�rYr$rFr�rrr\r.r�r
r�rD)
r�r�r�r�rr�r�r��before�afters
          r!�test_getpeercertzThreadedTests.test_getpeercerts����?�?��J�J���T�"�3B�3D�0����#�N�5�I��
��+�+�F�M�M�O�DI�<D�,�F�IJ��	�	�4����-�.��&�&�z�2��M�M�O�3���� ��}�}�������&C�D�������?�?��J�J�$�$�V�^�^�D�%9�D�%@�A��J�J�$�$�%<�s�6�{�%J�U�%R�S��D�(��I�I�D�$�n�n�T�2�3�4�I��	�?�+��I�I�B�C��
�
�k�4�0��
�
�j�$�/��1�1�$�{�2C�D���0�0��j�1A�B�������.�7F��V�3�2��
F�F���V�s=�
'I�47I�+H3�<E&I�"I�3H=�8I�I		�I�Ic��tjrtjj	d�t�\}}}t
tdd�}|j|jtj|z�t|d��}|5|jtj�|��5}|jt|j f�|j#�}|j%|d�ddd�ddd�|xjtj&zc_	t|d��}t)j*dt(j,�}|5|jtj�|��5}|j/tj0|�5|jt|j f�ddd�ddd�ddd�|j3t4�t|d��}|5|jtj�|��5}|jt|j f�|j#�}|j%|d�ddd�ddd�y#1swY���xYw#1swY���xYw#1swY��xYw#1swY��xYw#1swY��xYw#1swY�PxYw#1swYyxYw)	Nr�rbrTr�r�r�r\)rr�rr�r�r�r]r
r�rcrdrr�r�r�r
rrYrFrer�r�r�r�r�r��CRLFILE)	r�r�r�r�rirr�r�r�s	         r!�test_crl_checkzThreadedTests.test_crl_check$s/���?�?��J�J���T�"�3B�3D�0����
�S�5�q�
9������4�4�c�6H�6H�2�6M�N�$�N�4�H��
��+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.��}�}�������&C�D�	F��	�#�#�s�'@�'@�@�#�#�N�4�H���
�
�
��d�d�	��
��+�+�F�M�M�O�<D�,�F�IJ��+�+�C�L�L�%�@��I�I�t�V�[�[�1�2�A�F��	�,�,�W�5�#�N�4�H��
��+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.��}�}�������&C�D�	F��V�5F�F���V��(A�@��F�F���V��F�F���V�s��&J�1AI;�5J�&J-�!J!�""J�J!�J-�&K�&AJ9�*K�;J	�J�J�J�J!�!J*	�&J-�-J6�9K	�>K�Kc��tjrtjj	d�t�\}}}t
|d��}|5|jtj�|��5}|jt|jf�|j�}|j|d�ddd�ddd�t
|d��}tjdtj �}|5|jtj�d��5}|j#t$j&|�5|jt|jf�ddd�ddd�ddd�t
|d��}|5tj�5}|j#t(d�5|j|�ddd�ddd�ddd�y#1swY��,xYw#1swY��1xYw#1swY��xYw#1swY��xYw#1swY��xYw#1swY�XxYw#1swY�\xYw#1swYyxYw)	Nr�Tr�r�r�r\�invalidz'check_hostname requires server_hostname)rr�rr�r�r�rr�r�r�r
rrYrFr�r�r�r�r
�CertificateErrorr�)r�r�r�r�rr�r�r�s        r!r�z!ThreadedTests.test_check_hostnameQs����?�?��J�J���T�"�3B�3D�0����$�N�4�H��
��+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.��}�}�������&C�D�	F��$�N�4�H���
�
�
��d�d�	��
��+�+�F�M�M�O�<E�,�G�JK��+�+�C�,@�,@�%�H��I�I�t�V�[�[�1�2�I�G��$�N�4�H��
�����A��+�+�J�,U�W�"�.�.�q�1�W�!��V�-F�F���V��$I�H��G�G���V��W�W��!����V�s��
&G.�3AG!�7G.�:&H� !H�"G;�#H�+H�
H7�H+�6H�H+�H7�!G+	�&G.�.G8�;H�H�H	�H�H�H(�$H+�+H4	�0H7�7Iz)test requires hostname_checks_common_namec���t�\}}}d|_t|d��}|5|jt	j�|��5}|jt|jf�ddd�ddd�tt�\}}}d|_t|d��}|5|jt	j�|��5}|jtj�5|jt|jf�ddd�ddd�ddd�y#1swY��xYw#1swY��xYw#1swY�2xYw#1swY�6xYw#1swYyxYw)NFTr�r�)r�rTrr�r�r�r
rr�r�r
�SSLCertVerificationErrorrs      r!rWz.ThreadedTests.test_hostname_checks_common_namevs,��4C�3D�0����5:��2�$�N�4�H��
��+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.�F��
4C�9�3M�0����5:��2�#�N�4�H��
��+�+�F�M�M�O�<D�,�F�IJ��&�&�s�'C�'C�D��I�I�t�V�[�[�1�2�E�F��V�F�F���V��E�D��F�F���V�s_�&D3�"D'�-D3�&&E� E�,"D?�E�E�'D0	�,D3�3D<�?E�E�E	�E�E c���tjtj�}|jt�|jd�t}tjtj�}|jt�t|d��}|5|jtj�|��5}|jt|jf�|j!�}|j#|d�|j%�dj'd�}|j#|ddd	�ddd�ddd�y#1swY�xYw#1swYyxYw�
NzECDHE:ECDSA:!NULL:!aRSATr�r�r�r�-r�)�ECDHE�ECDSA)r
rkr`r�r�rR�SIGNED_CERTFILE_ECC_HOSTNAMEr_r��SIGNED_CERTFILE_ECCrr�r�r�r
rrYrFr��split�r�r�r�r�rr�r�r�s        r!�
test_ecc_certzThreadedTests.test_ecc_cert�s������(?�(?�@���,�,�Z�8��"�"�#<�=�/������(?�(?�@���&�&�':�;�$�N�4�H��
��+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.��}�}�������&C�D�����A��,�,�S�1������r��
�,>�?�
F��V�F�F���V�s%�&E�=A;E	�8E�	E	�E�Ec�*�tjtj�}|jt�tj
j|_|jd�t}tjtj�}|jt�|jt�t|d��}|5|jt!j �|��5}|j#t$|j&f�|j)�}|j+|d�|j-�dj/d�}|j+|ddd	�ddd�ddd�y#1swY�xYw#1swYyxYwr�)r
rkr`r�r�rrjrgrRr�r_r�r�r�rr�r�r�r
rrYrFr�r�r�s        r!�test_dual_rsa_ecczThreadedTests.test_dual_rsa_ecc�s0������(?�(?�@���,�,�Z�8�*-���)?�)?��&��"�"�#<�=�/������(?�(?�@���&�&�':�;��&�&��7�$�N�4�H��
��+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.��}�}�������&C�D�����A��,�,�S�1������r��
�,>�?�
F��V�F�F���V�s%�&F	�1A;E=�,F	�=F	�F	�	Fc�$�tjrtjj	d�t
j
t
j�}|jt�t
j
t
j�}t
j|_d|_
|jt�gd�}|D]�\}}t!|d��}|5|j#t%j$�|��5}|j'|j(|�|j+t,|j.f�|j1�}|j'|j(|�|j3|d�ddd�ddd���t!|d��}|5|j#t%j$�d��5}|j5t
j6�5|j+t,|j.f�ddd�ddd�ddd�t!|d��5}t9j:|�5|j5t<�5|j#t%j$�d��ddd�ddd�ddd�t!|d��5}t9j:|�5|j5t>�5|j#t%j$�d	��ddd�ddd�ddd�y#1swY���xYw#1swY��^xYw#1swY��#xYw#1swY��(xYw#1swY��-xYw#1swY��xYw#1swY��xYw#1swY��xYw#1swY�xYw#1swY��xYw#1swYyxYw)
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.orgz.pythontest.netsk�nig.idn.pythontest.net) rr�rr�r�r
rkr_r��IDNSANSFILEr`r�r�r�r�r�rr�r�r�r�r�r
rrYrFr�r�rr��UnicodeError�UnicodeDecodeError)	r�r�r��
idn_hostnamesr��expected_hostnamerr�r�s	         r!�test_check_hostname_idnz%ThreadedTests.test_check_hostname_idn�s����?�?��J�J���T�"�����(?�(?�@���&�&�{�3��.�.��!8�!8�9��!�/�/���!%����%�%�j�1�
�
�.3@�.�O�.�'��t�L�F���(�(�����9H�)�J�MN��$�$�Q�%6�%6�8I�J��I�I�t�V�[�[�1�2��=�=�?�D��$�$�Q�%6�%6�8I�J��O�O�D�*G�H�
J���3@�$�N�4�H��
��$�$�V�]�]�_�5I�%�K�NO��&�&�s�';�';�<��I�I�t�V�[�[�1�2�=�K��
 ��t�
D�� �:�:�4�@��&�&�|�4��'�'��
�
��,=�(�?�5�A�E�
 ��t�
D�� �:�:�4�@��&�&�'9�:��'�'��
�
��,J�(�L�;�A�E�
D�)J�J�����=�<��K�K���V��5�4��A�@��E�
D��;�:��A�@��E�
D�s��&L�=A<L	�9L�&L=� L0� "L#�L0�
L=�'M"�=M�&M
�9M�M"�N�4M:�
&M.�0M:�8N�	L�L�L 	�#L-�(L0�0L:	�5L=�=M�
M�M�M	�M"�"M+�.M7�3M:�:N	�?N�Nc�<�t�\}}}|jt�tj|_tjj|_t|dd��}|5|jtj�|��5}	|jt|jf�|jd�ddd�ddd�y#tj $r<}t"j$r"t&j(j+d|z�Yd}~�[d}~wt,$rZ}|j.t.j0k7r�t"j$r"t&j(j+d|z�Yd}~��d}~wwxYw#1swY��xYw#1swYyxYw)z�Connecting when the server rejects the client's certificate

        Launch a server with CERT_REQUIRED, and check that trying to
        connect to it with a wrong client certificate fails.
        TrZr�z'Use of invalid cert should have failed!z
SSLError is %r
Nz
socket.error is %r
)r�r�r�r
r�r�rrjrgrr�r�r�r
rr.r�rr�rr�r�r_rrq�r�r�r�r�rr�rs       r!�test_wrong_cert_tls12z#ThreadedTests.test_wrong_cert_tls12�s>��4C�3D�0�����&�&�x�0�%(�%6�%6��"�),���)?�)?��&�#�"�4�$�
����*�*�6�=�=�?�;C�+�E�HI�
E��	�	�4����-�.��	�	�C�D�!E��V���<�<�
?��?�?��J�J�$�$�%9�A�%=�>����
C��7�7�e�.�.�.���?�?��J�J�$�$�%=��%A�B���	
C��E�E���V�sa�(&F�F�!C�1F�F�F�&2D�F�F�)AE>�9F�>F�F�F	�F�FrYc���t�\}}}|jt�tj|_tjj|_tjj|_t|dd��}|5|jtj�|d��5}|jt|jf�|jtj d�5|j#d�|j%d�|j#d�|j%d�ddd�ddd�ddd�y#1swY�xYw#1swY�xYw#1swYyxYw)	NTrZF�r��suppress_ragged_eofsz4alert unknown ca|EOF occurred|TLSV1_ALERT_UNKNOWN_CA�datar�sshould have failed already)r�r�r�r
r�r�rrYrPrr�r�r�r
rr�r�r�rKrs      r!�test_wrong_cert_tls13z#ThreadedTests.test_wrong_cert_tls13$s��3B�3D�0�����&�&�x�0�%(�%6�%6��"�),���)?�)?��&�),���)?�)?��&�#�"�4�$�
���
�
'�
'��
�
��8@�=B�(�D�GH�
�I�I�t�V�[�[�)�*��'�'����F��
���� ����t�����5�6����t���	D��V�
���	D�D���V�s>�'E&�.AE�0AE�5E�=E&�E�E�E#	�E&�&E/c�~������tj��tj��tj��tj�t
�����fd�}����fd�}tj|��}|j�	|�|j�y#|j�wxYw)ztA brutal shutdown of an SSL server should raise an OSError
        in the client when attempting handshake.
        c�����j��j��j�\}}|j��j��j�yrW)r#r�r�r�)�newsockr��
listener_gone�listener_readyr�s  ���r!�listenerz2ThreadedTests.test_rude_shutdown.<locals>.listenerMsE���
�H�H�J���� ��H�H�J�M�G�T��M�M�O�
�G�G�I����r#c����j�tj�5}|jt�f��j�	t	|�}�jd�ddd�y#t$rY�wxYw#1swYyxYw)Nz2connecting to closed SSL socket should have failed)rr�r�r
r�r.r_)r�r�r�r�rr�s  ����r!�	connectorz3ThreadedTests.test_rude_shutdown.<locals>.connectorUsx������!�����A��	�	�4��,�'��"�"�$�T�/��2�H��I�I�R�S�!���
�����!��s/�(B�A4�B�4	B�=B�?B�B�B��targetN)	r�rr�rrr
r�rr)r�r�r�rIr�r�rr�s`   @@@@r!�test_rude_shutdownz ThreadedTests.test_rude_shutdown?s}���#���*��!���)�
��M�M�O���&�&�q�$�/��	 �
	T�
���H�-��	���	�	��K�
�F�F�H��A�F�F�H�s�B*�*B<c��tjrtjj	d�t
j
t
j�}|jt�t
j
t
j�}t|d��}|5|jtj�t��5}	|jt |j"f�|j%d�ddd�ddd�y#t
j&$r�}d}|j)|t
j*�|j-|j.d�|j-|j0|�d|�d	�}|j3t5|�|�t7j8d
t6j:�}|j3t5|�|�Yd}~��d}~wwxYw#1swY��xYw#1swYyxYw)Nr�Tr�r�zExpected connection failurez&unable to get local issuer certificater_�(z|CERTIFICATE_VERIFY_FAILED)z�(
                        certificate verify failed   # OpenSSL
                        |
                        CERTIFICATE_VERIFY_FAILED   # AWS-LC
                    ))rr�rr�r�r
rkr_r�r�r`rr�r�r�r�r
rr.r�rAr�r��verify_code�verify_messagerr�r�r�r�)r�r�r�rr�rrr�s        r!�test_ssl_cert_verify_errorz(ThreadedTests.test_ssl_cert_verify_errorhs~���?�?��J�J���T�"�����(?�(?�@���&�&��7��.�.��!8�!8�9��#�N�4�H��
��$�$�V�]�]�_�5M�%�O�RS�5��I�I�t�V�[�[�1�2��I�I�;�<�	O��V���|�|�
5�B�C��)�)�!�S�-I�-I�J��$�$�Q�]�]�B�7��$�$�Q�%5�%5�s�;���u�$?�@�E��$�$�T�!�W�e�4��J�J�(��$�$�	 �E�
�$�$�T�!�W�e�4�4��
5��O�O���V�sI�*G/�G#�2D	�8G/�	G �B:G�G#�G � G#�#G,	�(G/�/G8c�"�tjrtjj	d�td�r)t
tjtjd�t
tjtjd�td�r)t
tjtjd�td�r8t
tjtjdtj�t
tjtjdtj�td�r8t
tjtjdtj�td�r8t
tjtjdtj�t
tjtjdtj�td�r8t
tjtjdtj�td�r9t
tjtjdtj��t
tjtjdtjtjz��td�r:t
tjtjdtj��yy)z:Connecting to an SSLv23 server with various client optionsr�rFTr)rvN)rr�rr�r�rar{r
r^rrr�r�r�r�r�r�s r!�test_PROTOCOL_TLSzThreadedTests.test_PROTOCOL_TLS�s����?�?��J�J���T�"��7�#��s�/�/��1C�1C�U�K��3�+�+�S�-=�-=�t�D��7�#��s�/�/��1C�1C�W�M��7�#��s�/�/��1C�1C�U�C�L]�L]�^��3�+�+�S�-=�-=�t�S�EV�EV�W��7�#��s�/�/��1C�1C�W�c�N_�N_�`��7�#��s�/�/��1C�1C�U�C�L]�L]�^��3�+�+�S�-=�-=�t�S�EV�EV�W��7�#��s�/�/��1C�1C�W�c�N_�N_�`��7�#��s�/�/��1C�1C�U�*-�/�/�
;�	�3�+�+�S�-=�-=�t�*-�/�/�C�O�O�*K�	M��7�#��s�/�/��1C�1C�U�.1�o�o�
?�$r#rc�X�tjrtjj	d�ttjtjd�ttjtjdtj�ttjtjdtj�ttjtjdtj��ttjtjd�y)z9Connecting to an SSLv3 server with various client optionsr�rF�rwN)
rr�rr�r�r{r
rr�r�r^r�rr�s r!�test_protocol_sslv3z!ThreadedTests.test_protocol_sslv3�s����?�?��J�J���T�"��3�-�-�s�/A�/A�7�K��3�-�-�s�/A�/A�7�C�L]�L]�^��3�-�-�s�/A�/A�7�C�L]�L]�^��3�-�-�s�/?�/?��*-�/�/�	;��3�-�-�s�/A�/A�5�Ir#rc�n�tjrtjj	d�ttjtjd�ttjtjdtj�ttjtjdtj�td�r)ttjtjd�ttjtjdtj��y)z8Connecting to a TLSv1 server with various client optionsr�rrFr�N)rr�rr�r�r{r
rr�r�rarr^r�r�s r!�test_protocol_tlsv1z!ThreadedTests.test_protocol_tlsv1�s����?�?��J�J���T�"��3�-�-�s�/A�/A�7�K��3�-�-�s�/A�/A�7�C�L]�L]�^��3�-�-�s�/A�/A�7�C�L]�L]�^��7�#��s�1�1�3�3E�3E�u�M��3�-�-�s�/?�/?��*-�/�/�	;r#rc��tjrtjj	d�ttjtjd�td�r)ttjtjd�ttjtjdtj��ttjtjd�ttjtjd�ttjtjd�y)zjConnecting to a TLSv1.1 server with various client options.
           Testing against older TLS versions.r��TLSv1.1rFr�N)
rr�rr�r�r{r
rrarr^r�rtr�s r!�test_protocol_tlsv1_1z#ThreadedTests.test_protocol_tlsv1_1�s����?�?��J�J���T�"��3�/�/��1E�1E�y�Q��7�#��s�3�3�S�5G�5G��O��3�/�/��1A�1A�5�*-�*;�*;�	=�	�3�+�+�S�-A�-A�9�M��3�/�/��1E�1E�u�M��3�/�/��1E�1E�u�Mr#rjc��tjrtjj	d�ttjtjdtjtjztjtjz��td�r)ttjtjd�ttjtjdtj��ttjtjd�ttj�rRttjtjd�ttjtjd�ttj �rSttjtj d�ttj tjd�yy)zjConnecting to a TLSv1.2 server with various client options.
           Testing against older TLS versions.r��TLSv1.2)rvrwrFr�N)rr�rr�r�r{r
rtr�r�rarr^r�rdrrr�s r!�test_protocol_tlsv1_2z#ThreadedTests.test_protocol_tlsv1_2�s8���?�?��J�J���T�"��3�/�/��1E�1E�y�*-�/�/�#�/�/�*I�*-�/�/�#�/�/�*I�	L��7�#��s�3�3�S�5G�5G��O��3�/�/��1A�1A�5�*-�*;�*;�	=�	�3�+�+�S�-A�-A�9�M��C�.�.�/��s�3�3�S�5G�5G��O��s�1�1�3�3G�3G��O��C�0�0�1��s�3�3�S�5I�5I�5�Q��s�3�3�S�5I�5I�5�Q�2r#c�B�d}ttddd��}d}|5tj�}|jd�|j	t
|jf�tjrtjjd�|D�]}tjr"tjjd|z�|r"j|�|j�}n"|j|�|jd�}|j�j!�}|dk(rQ|j#d	�r@tjr"tjjd
|z�t%|�}d}��|dk(rW|j#d	�rFtjr"tjjd|z�j'�}d}��Ltjs��^tjjd
|z����tjrtjjd�|rjd�n|jd�|rj)�n|j)�ddd�y#1swYyxYw)z6Switching from clear text to encrypted and back again.)smsg 1sMSG 2r�sMSG 3smsg 4r�smsg 5smsg 6T)r�r�r�Fr�r\r�r�sokz/ client:  read %r from server, starting TLS...
r�z- client:  read %r from server, ending TLS...
z client:  read %r from server
rar`N)rr�r�r"r�r
rrr�rr�r�rKrdr`r�rr�r�rGr�)	r��msgsr�wrappedr�rir7rlrs	         r!�
test_starttlszThreadedTests.test_starttls�s���c��#�H�48�+/�59�;����
��
�
��A�
�M�M�$��
�I�I�t�V�[�[�)�*�����
�
� � ��&����?�?��J�J�$�$�3�f�<�>���J�J�v�&�"�i�i�k�G��F�F�6�N��f�f�T�l�G��m�m�o�+�+�-���[�(�S�^�^�E�-B�����
�
�(�(�N�!�"�#�,�A�.�D�"�G��y�(�S�^�^�E�-B�����
�
�(�(�L�!�"�#����
�A�#�G�����
�
�(�(�=��C�E�;�>����
�
� � �!B�C���
�
�9�%����y�!���
�
�����	�]�V�V�s�GJ�0BJ�Jc��t|t��}tjrtj
j
d�ttd�5}|j�}ddd�d}d|j�d�}tjt��}tjj!||�	�}	|j#�j%d
�}|ret'|�dkDrW|jt'|��}tjr-tj
j
dt)|�|fz�|j+�|j-|�y#1swY��xYw#|j+�wxYw)
z8Using socketserver to create and manage SSL connections.r�r��rbNrSzhttps://localhost:z/test_ssl.py�r�rzcontent-lengthrz/ client: read %d bytes from remote server '%s'
)r�r�rr�rr�r�rJrrKrr
r�r��urllib�request�urlopen�infor�rBrbr�r�)r�rrMr2r4�urlr��dlens        r!�test_socketserverzThreadedTests.test_socketserver 
s��"�4�/�B���?�?��J�J���T�"�
�(�D�
!�Q�����B�"�
��"�6�;�;�-�|�<���,�,�J�,�?���N�N�"�"�3��"�8��		��6�6�8�<�<� 0�1�D���T��Q���V�V�C��I�&���?�?��J�J�$�$�J��r�7�F�+�,�-�
�G�G�I�����R� �#"�
!�� 
�G�G�I�s�E!�8BE.�!E+�.Fc
���tjrtjj	d�d}tt�}|5ttj��}|jd|jf�tjr"tjj	d|z�|j	|�|j�}tjr"tjj	d|z�||j�k7r>|jd|ddt|�|ddj�t|�fz�|j	d	�tjrtjj	d
�|j�tjrtjj	d�ddd�y#1swYyxYw)z'Check the example asyncore integration.r�r�r%r\r]r^Nr_r`raz client:  connection closed.
)rr�rr�r�r.r�r�r�r�rrKrr.rbr�)r�rirr�rls     r!�test_asyncore_serverz"ThreadedTests.test_asyncore_server:
sK���?�?��J�J���T�"���#�H�-��
� �����1�A�
�I�I�{�F�K�K�0�1�����
�
� � �/�&�8�:�
�G�G�F�O��f�f�h�G�����
�
� � �!6��!@�A��&�,�,�.�(��	�	�K��s��|�S��\��c�r�{�(�(�*�C��K�9�9�:�
�G�G�I������
�
� � �!B�C�
�G�G�I�����
�
� � �!A�B�)�V�V�s
�FG�G%c
�x
��tjrtjj	d�tttjtjtdd��}|5ttj�dtttj����jt|jf��fd�}�fd�}d�jdgt fd	�j"dd
gt fd�j$dgd�fg}d
�j&dgfd�j(dd
gfd|dgfd|dgfg}d}|D]�\}}}	}
}||zj+d�}	||g|
���}
dj-|�}|j/|
||�|���j1�}||j3�k7r=|j5dj-||ddt!|�|ddt!|������|D]�\}}}	}
||zj+d�}	�j|�||
�}||j3�k7r=|j5dj-||ddt!|�|ddt!|������d}�j|�t=t!|��}|j/�j1d |�t!|��|j/||�t>�^t>j@t!|�z}|jC|�}�j%|�|j/�j1�|�|jEtF�jH�|jEtF�jJdg�|jEtF�jLd!�|jEtF�jNt=d!�g��j	d"�|jEt6�j&d �|jEt6�j0d ��jQ�ddd�y#t6$rj}|	r!|j5dj-|���t9|�j;|�s"|j5dj-||���Yd}~��kd}~wwxYw#t6$rz}|	r!|j5dj-|���t9|�j;|�s"|j5dj-||����j1�Yd}~��;d}~wwxYw#1swYyxYw)#z Test recv(), send() and friends.r�TF�rrrr�r��r�r�r�r�c�F��td�}�j|�}|d|S�Nsd)r�ra)�brxr�s  �r!�
_recv_intoz0ThreadedTests.test_recv_send.<locals>._recv_intoj
s&����i�(�����A�����%�y� r#c�L��td�}�j|�\}}|d|Sr�)r�rc)r�rxr�r�s   �r!�_recvfrom_intoz4ThreadedTests.test_recv_send.<locals>._recvfrom_intoo
s+����i�(���o�o�a�0���t���%�y� r#rdrezsome.addressr�c��yrWrX)r�s r!�<lambda>z.ThreadedTests.test_recv_send.<locals>.<lambda>x
s��4r#r`rbrarc�PREFIX_�asciizsending with {}�rzpWhile sending with <<{name:s}>> bad data <<{outdata:r}>> ({nout:d}) received; expected <<{indata:r}>> ({nin:d})
Nr_)r rl�noutri�ninz>Failed to send with method <<{name:s}>>; expected to succeed.
rzFMethod <<{name:s}>> failed with unexpected exception message: {exp:s}
)r �expzrWhile receiving with <<{name:s}>> bad data <<{outdata:r}>> ({nout:d}) received; expected <<{indata:r}>> ({nin:d})
zAFailed to receive with method <<{name:s}>>; expected to succeed.
r�r�r^r`))rr�rr�r�rr�r
r�r_r�r�r�r
rrdrbrer�r`rbrv�formatr�rKrr.r�r\r�r��ctypes�c_ubyte�from_buffer_copyr�rfrgrhrirjr�)r�rr�r��send_methods�recv_methods�data_prefix�	meth_name�	send_methrtrs�ret_val_methrir�rrlr�	recv_methr��buffer�ubyte�	bytesliker�s                      @r!�test_recv_sendzThreadedTests.test_recv_sendW
s�����?�?��J�J���T�"�#�H�-0�]�]�03�0G�0G�,4�+/�5:�<��� �����,1�)1�)1�*-�-�-�	9�A�

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

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

���1�1�5�5�9����1�1�9�9�w�i�H����1�1�9�9�c�B����1��n�n�y��~�.>�
@�
�G�G�I�����j�!�&�&�"�5����j�!�&�&�"�5�
�G�G�I�w�V��f"��%��	�	�5�5;�V��V�5K���q�6�,�,�Y�7��	�	�;�;A�6�%.�A�<B�<������:"��%��	�	�5�5;�V��V�5K���q�6�,�,�Y�7��	�	�;�;A�6�%.�A�<B�<���F�F�H�H����a�V�sf�(C,T0�BP4�) T0�
A&R*�0F;T0�4	R'�=AR"�T0�"R'�'T0�*	T-�3A/T(�"T0�(T-�-T0�0T9c��tt�}|j|�tjt
|jf�}|j|j�t|d��}|j|j�|jd�|j|jd�d�|j|jd�d�|j|j�d�|jd�|j|jd�d�|j|jt!��d�y)NF�r�r�rr#)rr�rTr�r!r
rr�r�r�rdr�r`rKr"rar�)r�rr�s   r!�test_recv_zerozThreadedTests.test_recv_zero�
s���#�H�-�����&�!��$�$�d�F�K�K�%8�9�������� ��Q�U�;�������� �	
���w����������C�(���������C�(��������7�+�	
�
�
�e����������C�(�������Y�[�1�1�5r#c��tt�}|j|�tjt
|jf�}|j|j�t|d��}|j|j�|jd�tjdddg�}|j|j|�d�|jt|�ddd�Gd�dt�}|jd�|d	�}|j|j|�d�|jt|�d
�y)NFr�r��Irr8c��eZdZd�Zy)�;ThreadedTests.test_recv_into_buffer_protocol_len.<locals>.Bc��ddzy�Nr7rrXr�s r!�__len__zCThreadedTests.test_recv_into_buffer_protocol_len.<locals>.B.__len__s	���!�r#N)rzrrrrXr#r!�Br��
s��
r#rr�sdata)rr�rTr�r!r
rr�r�r�rd�arrayr�rar�r�)r�rr�r�rs     r!�"test_recv_into_buffer_protocol_lenz0ThreadedTests.test_recv_into_buffer_protocol_len�
s��#�H�-�����&�!��$�$�d�F�K�K�%8�9�������� ��Q�U�;�������� �	���w���k�k�#��1�v�&��������S�)�1�-�����s��B�Q���1�	�	�	�	
���w����d��������S�)�1�-�����s��[�1r#c�8���tttjtjtdd��}|5tt
j�dtttj����jt|jf��jd�td����fd�}|jtjtjf|��jd��j�ddd�y#1swYyxYw)NTFr�r�i c�*��	�j���rW)rd)r�r�s��r!�fill_bufferz8ThreadedTests.test_nonblocking_send.<locals>.fill_buffers�����F�F�3�K�r#)rr�r
r�r_r�r�r�r
rr"r�r�rcr#r�)r�rrr�r�s   @@r!�test_nonblocking_sendz#ThreadedTests.test_nonblocking_sends����#�H�-0�]�]�03�0G�0G�,4�+/�5:�<��� �����,1�)1�)1�*-�-�-�	9�A�

�I�I�t�V�[�[�)�*�
�M�M�%� ��D�/�C�
 �
���s�4�4�"�3�3�5�6A�
C�
�M�M�$��
�G�G�I�)�V�V�s�C
D�Dc������tjtj��d}tj��}t	j
��d����fd�}t	j|��}|j��j�		tjtj�}|jd�|j||f�|jtdt|�|j�	tjtj�}t|�}|jd�|jtd|j||f�|j�	d�|j��j�y#j�wxYw#|j�wxYw#d�|j��j�wxYw)Nr%Fc����j��j�g}�sFtj�gggd�\}}}�|vr"|j�j	�d��s�F|D]}|j��y)Nr�r)r#r�rbrr�r�)�connsr)�wrr��finishr�starteds     ���r!�servez3ThreadedTests.test_handshake_timeout.<locals>.serve,ss����M�M�O��K�K�M��E�� �-�-���"�b�#�>���1�a��Q�;��L�L������!3�4�����
�
��r#r�r�z	timed outT)r�rTrrr�rr�rrror�r�r$r�r�r)	r�r�rrrIr�rrrs	      @@@r!�test_handshake_timeoutz$ThreadedTests.test_handshake_timeout$s^������v�~�~�.�����&�&�v�.���/�/�#����	�
���E�*��	���	�����	�
��M�M�&�.�.�1�����S�!��	�	�4��,�'��&�&�|�[�'7��<����	�
��M�M�&�.�.�1��$�Q�'�����S�!��&�&�|�[�'(�y�y�4��,�@����	��F�
�F�F�H��L�L�N�����	�����	���F�
�F�F�H��L�L�N�s8�A#F�6G�A#F3�*G�F0�0G�3G�G�$G,c�Z�
���
�t�\}}}tjtj��
d}tj�
�}|j�
d���
|j
�
j�tj��
d�d��
���
fd�}tj|��}|j��
j�|jtj�|��}|j||f�|jd�|j�|j!�}	|j#�|j%��j#��
j#�|j'�t(j*�|j-�|	�y)Nr%Trc����j��j��j�\���j�j	d��y)Nr8)r#r�r�rdr`)�evt�peer�remoters����r!rz/ThreadedTests.test_server_accept.<locals>.servebs8����M�M�O��G�G�I�!�=�=�?�L�F�D��K�K����A��'r#r�r�r�)r�r�rTrrr�rFr�r�rr�rrr�rdr`r�r�rrAr
r�r�)r�rHrIr�r�rrrIrN�client_addrrrrrs          @@@@r!�test_server_acceptz ThreadedTests.test_server_acceptUs?���,;�+<�(�
�J�����v�~�~�.�����&�&�v�.���'�'��D�'�A������*�*�+��o�o�������	(�
���E�*��	���	����
��'�'��M�M�O�X�(�
��	����$�'�(����G�����
��(�(�*������	���������������f�c�m�m�4�����{�+r#c��tjtj�}d|_|j	tj
��5}|j
t�5}|j�ddd�|jjjtj�ddd�y#1swY�FxYw#1swYyxYwr,)
r
rkr`r�r�r�r�r_rYr�r�r�ENOTCONN�r�r�r�r}s    r!�test_getpeercert_enotconnz'ThreadedTests.test_getpeercert_enotconn}s����.�.��!8�!8�9��!&���
�
 �
 �����
1�T��"�"�7�+�r�� � �"�,����R�\�\�/�/����@�2�
1�+�+��2�
1��$�C�$B:�5<C�:C	�?C�Cc��tjtj�}d|_|j	tj
��5}|j
t�5}|j�ddd�|jjjtj�ddd�y#1swY�FxYw#1swYyxYwr,)
r
rkr`r�r�r�r�r_r$r�r�rrrs    r!�test_do_handshake_enotconnz(ThreadedTests.test_do_handshake_enotconn�s����.�.��!8�!8�9��!&���
�
 �
 �����
1�T��"�"�7�+�r��!�!�#�,����R�\�\�/�/����@�2�
1�+�+��2�
1�rc�,�t�\}}}tjj|_|jd�|jd�t
|��5}|jtj�|��5}|jt�5|jt|jf�ddd�ddd�ddd�|jdjd�y#1swY�9xYw#1swY�=xYw#1swY�AxYw)N�AES128�AES256rr��NO_SHARED_CIPHERr)r�r
rrjrgrRrr�r�r�r_r�r
rr�r�rs      r!�test_no_shared_ciphersz$ThreadedTests.test_no_shared_ciphers�s���3B�3D�0����),���)?�)?��&��"�"�8�,��"�"�8�,�
��
7�6��+�+�F�M�M�O�<D�,�F�IJ��&�&�w�/��I�I�t�V�[�[�1�2�0�F�8�
	
�
�
�(�&�*<�*<�Q�*?�@�0�/��F�F��8�
7�s<�&D
�C>�"C2�:C>�D
�2C;�7C>�>D	�D
�
Dc���tjtj�}d|_tj|_t
ttjd��5}|jtj��5}|j|j�d�|j|jd�|jt|j f�|j#|j�d�ddd�|jjd�|j|j�d�ddd�y#1swY�NxYw#1swYyxYw)zt
        Basic tests for SSLSocket.version().
        More tests are done in the test_protocol_*() methods.
        F)rr�Nr�)r
rkr`r�r�r�rr�r_r�r�r�r8r�r�r
rr�)r�r�rr�s    r!�test_version_basicz ThreadedTests.test_version_basic�s���
�.�.��!8�!8�9��!&���!�m�m���
��,/�,C�,C�',�.�17��$�$�V�]�]�_�5���
�
�a�i�i�k�4�0��
�
�a�i�i��.��	�	�4����-�.�� � �����i�8�	6�

�M�M�!�)�)�T�*��M�M�!�)�)�+�t�,�.�.�6�5��.�.�s&� $E�A>E�AE�E	�E�E$c���t�\}}}tjj|_t|��5}|j
tj�|��5}|jt|jf�|j|j�dhd��|j|j�d�ddd�ddd�y#1swY�xYw#1swYyxYw)Nrr�r>�TLS_AES_128_GCM_SHA256�TLS_AES_256_GCM_SHA384�TLS_CHACHA20_POLY1305_SHA256r�)r�r
rrYrPrr�r�r�r
rr�r�r�r8rs      r!�test_tls1_3zThreadedTests.test_tls1_3�s���3B�3D�0����),���)?�)?��&�
��
7�6��+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.��
�
�a�h�h�j��m�.��
� � �����i�8�F�8�
7�F�F��8�
7�s$�&C$� A'C�C$�C!	�C$�$C-c�P�t�\}}}tjj|_tjj
|_tjj
|_tjj
|_t|��5}|jtj�|��5}|jt|jf�|j|j�d�ddd�ddd�y#1swY�xYw#1swYyxYw)Nrr�r�)r�r
rrrPrjrgrr�r�r�r
rr�r8rs      r!�test_min_max_version_tlsv1_2z*ThreadedTests.test_min_max_version_tlsv1_2�s���4C�3D�0����),���)=�)=��&�),���)?�)?��&�),���)?�)?��&�),���)?�)?��&�
��
7�6��+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.�� � �����i�8�F�8�
7�F�F��8�
7�s%�&D�=AD�?D�D	�D�D%c�h�t�\}}}tjj|_tjj
|_tjj|_tjj|_t||�t|��5}|jtj�|��5}|jt|jf�|j|j!�d�ddd�ddd�y#1swY�xYw#1swYyxYw)Nrr�r�)r�r
rrrPrjrgrrUrr�r�r�r
rr�r8rs      r!�test_min_max_version_tlsv1_1z*ThreadedTests.test_min_max_version_tlsv1_1�s���4C�3D�0����),���)=�)=��&�),���)?�)?��&�),���)=�)=��&�),���)?�)?��&��N�N�;�
��
7�6��+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.�� � �����i�8�F�8�
7�F�F��8�
7�s%�#&D(�	AD�D(�D%	�!D(�(D1c���t�\}}}tjj|_tjj|_tjj|_tjj|_t||�t|��5}|jtj�|��5}|jtj�5}|jt|jf�ddd�|j!t#j$�d�ddd�ddd�y#1swY�?xYw#1swY�xYw#1swYyxYw)Nrr�z
(alert|ALERT))r�r
rrjrgrPrrUrr�r�r�r�r�r
rrr\r�r�s       r!�test_min_max_version_mismatchz+ThreadedTests.test_min_max_version_mismatch�s��4C�3D�0����),���)?�)?��&�),���)?�)?��&�),���)=�)=��&�),���)=�)=��&��N�N�;�
��
7�6��+�+�F�M�M�O�<D�,�F�IJ��&�&�s�|�|�4���I�I�t�V�[�[�1�2�5�� � ��Q�[�[�!1�?�C�	F�8�
7�5�4��F�F��8�
7�s<�#&E!�	 E�)"E	�-E�8E!�	E�E�E	�E!�!E*c�*�t�\}}}tjj|_tjj|_tjj|_t
||�t|��5}|jtj�|��5}|jt|jf�|j|j�d�ddd�ddd�y#1swY�xYw#1swYyxYw)Nrr�r)r�r
rrrPrgrUrr�r�r�r
rr�r8rs      r!�test_min_max_version_sslv3z(ThreadedTests.test_min_max_version_sslv3�s���3B�3D�0����),���)=�)=��&�),���)=�)=��&�),���)=�)=��&��N�N�;�
��
7�6��+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.�� � �����g�6�F�8�
7�F�F��8�
7�s%�&D	�*AC=�,D	�=D	�D	�	Dc��t�\}}}tjj|_t|��5}|j
tj�|��5}|jt|jf�|jd|j�d�ddd�ddd�y#1swY�xYw#1swYyxYw)Nrr��ECDHr)
r�r
rrjrgrr�r�r�r
rr�r�rs      r!�test_default_ecdh_curvez%ThreadedTests.test_default_ecdh_curves���4C�3D�0����*-���)?�)?��&�
 ��
7�6��+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.��
�
�f�a�h�h�j��m�4�F�8�
7�F�F��8�
7�s$�&C� AB6�%C�6B?	�;C�Cr�r�c��tjrtjj	d�t�\}}}tjj|_	t|dd��}|5|jtj�|��5}|jt|jf�|j!d�}tjr.tjj	dj#|��|j%|�|j'�dk(r|j)t+|�d	�n|j)t+|�d
�|j	d�|j-�j/�}|j)|t1|�j3d��d
d
d
�|jtj�|��5}|jt|jf�|j!d�}tjr.tjj	dj#|��|j5|�|j%|�|j'�dk(r|j)t+|�d	�n|j)t+|�d
�|j	d�|j-�j/�}|j)|t1|�j3d��d
d
d
�d
d
d
�y
#1swY��wxYw#1swY�xYw#1swYy
xYw)z Test tls-unique channel binding.r�TFrZr�r�z! got channel binding data: {0!r}
r��0�sCB tls-unique
r�Nz(got another channel binding data: {0!r}
)rr�rr�r�r�r
rrjrgrr�r�r�r
rr�r�r�r8r�rbrKr�r�rv�assertNotEqual)	r�r�r�r�rr��cb_data�peer_data_repr�new_cb_datas	         r!r�z-ThreadedTests.test_tls_unique_channel_bindings����?�?��J�J���T�"�3B�3D�0����*-���)?�)?��&�#�N�+/�5:�<����+�+��M�M�O�$,�,�.�12��	�	�4����-�.��/�/��=���?�?��J�J�$�$�<�C�C�G�L�N��$�$�W�-��9�9�;�)�+��$�$�S��\�2�6��$�$�S��\�2�6����*�+�!"������!1��� � ��!%�g��!5�!5�j�!A�C�).�0 �+�+��M�M�O�$,�,�.�12��	�	�4����-�.��3�3�L�A���?�?��J�J�$�$�C�J�J�'�)��
�#�#�G�[�9��$�$�W�-��9�9�;�)�+��$�$�S��\�2�6��$�$�S��\�2�6����*�+�!"������!1��� � ��!%�k�!2�!9�!9�*�!E�G�'.�3�V�.�.��0.�.��3�V�s>�-&M�D%L-�8-M�%D7L:�M�-L7	�2M�:M	�?M�Mc���t�\}}}t||dd|��}tjr1tj
j
dj|d��|j|dhd��y)NT�r�r�rjz got compression: {!r}
rb>N�RLE�ZLIB)	r�rmrr�rr�r�r�r��r�r�r�r�r�s     r!�test_compressionzThreadedTests.test_compressionRsg��3B�3D�0����"�>�>�*.��,4�6���?�?��J�J���7�>�>�u�]�?S�T�U��
�
�e�M�*�,C�Dr#rBz*ssl.OP_NO_COMPRESSION needed for this testc��t�\}}}|xjtjzc_|xjtjzc_t	||dd|��}|j|dd�y)NTr?rb)r�rwr
rBrmr�rBs     r!�test_compression_disabledz'ThreadedTests.test_compression_disabled[sm��4C�3D�0�������#�"7�"7�7�����#�"7�"7�7��"�>�>�*.��,4�6��	
�
�
�e�M�*�D�1r#c��t�\}}}|xjtjzc_t	||dd|��y�NTr?�r�rwr
r�rm�r�r�r�r�s    r!�test_legacy_server_connectz(ThreadedTests.test_legacy_server_connectfs<��3B�3D�0�������#�">�">�>���>�>�*.��,4�	6r#c��t�\}}}|xjtjzc_t	||dd|��yrGrHrIs    r!�test_no_legacy_server_connectz+ThreadedTests.test_no_legacy_server_connectms?��3B�3D�0�������3�#?�#?�"?�?���>�>�*.��,4�	6r#r�c��t�\}}}tjj|_|jt�|jd�tjj|_t||dd|��}|dd}|jd�}d|vr"d|vrd	|vr|jd
|dz�yyyy)N�kEDHTr?r�rr��ADH�EDH�DHEzNon-DH key exchange: )r�r
rrjrgr�r�rRrmr�r.)r�r�r�r�r�r��partss       r!�test_dh_paramszThreadedTests.test_dh_paramsts���4C�3D�0����),���)?�)?��&��%�%�f�-��"�"�6�*�),���)?�)?��&�"�>�>�*.��,4�6���x���#�����S�!�����%�u�"4��e�9K��I�I�-��q�	�9�:�:L�"4�r#c���t�\}}}|jd�|jd�tjj
|_t||dd|��}t�\}}}|jd�|jd�tjj
|_t||dd|��}t�\}}}|jd�|jd�|jd�tjj
|_|jtj�5t||dd|��ddd�y#1swYyxYw)N�	secp384r1zECDHE:!eNULL:!aNULLTr?r�)
r�r�rRr
rrjrPrmr�r�rBs     r!�test_ecdh_curvezThreadedTests.test_ecdh_curve�s.��3B�3D�0�����%�%�k�2��"�"�#8�9�),���)?�)?��&�"�>�>�*.��,4�6��
4C�3D�0�����%�%�k�2��"�"�#8�9�),���)?�)?��&�"�>�>�*.��,4�6��
4C�3D�0�����%�%�l�3��%�%�k�2��"�"�#8�9�),���)?�)?��&�
�
�
�s�|�|�
,��~�~�&*�T�(0�
2�-�
,�
,�s�>E�E!c�j�t�\}}}t||dd|��}|j|dd�y)NTr?rd)r�rmr�rBs     r!�test_selected_alpn_protocolz)ThreadedTests.test_selected_alpn_protocol�s=��3B�3D�0����"�>�>�*.��,4�6��	
�
�
�e�2�3�T�:r#c��t�\}}}|jddg�t||dd|��}|j|dd�y)Nr��barTr?rd)r�rrmr�rBs     r!�/test_selected_alpn_protocol_if_server_uses_alpnz=ThreadedTests.test_selected_alpn_protocol_if_server_uses_alpn�sO��3B�3D�0�����)�)�5�%�.�9�"�>�>�*.��,4�6��	
�
�
�e�2�3�T�:r#c	��gd�}ddgdfddgdfdgdfddgdfg}|D]�\}}t�\}}}|j|�|j|�	t||dd|��}d	t|��d
t|��dt|��d�}
|d
}|j
|||
|dfz�t|d�r|ddnd}|j
|||
|dfz���y#tj$r}	|	}Yd}	~	��d}	~	wwxYw)N)r�rZ�	milkshaker�rZr]zhttp/3.0zhttp/4.0Tr?zfailed trying z	 (s) and z (c).
was expecting z, but got %s from the %srdrNrfr��nothingr)r�rrmr
r�r\r�rb)
r��server_protocols�protocol_tests�client_protocolsr�r�r�r�r�rr�
client_result�
server_results
             r!�test_alpn_protocolsz!ThreadedTests.test_alpn_protocols�sJ��6���U�^�U�#��U�^�U�#��]�K�(��*�
%�t�,�	
��+9�&��h�7F�7H�4�N�N�H��-�-�.>�?��-�-�.>�?�
�*�>�+9�26�<@�4<�	>����+�,�c�2B�.C��H�
�'�C�"�"8�9�M����]�H� �M�8�#<�<�
>��u�4�5�6�"�"9�:�2�>�<E�
����]�H� �M�8�#<�<�
>�/+9���<�<�
����
�s�C�C9�-C4�4C9c��yrWrXr�s r!�test_npn_protocolsz ThreadedTests.test_npn_protocols�s�r#c�\�tjtj�}|jt�tjtj�}|jt
�tjtj�}|jt�|||fSrW)	r
rkr_r�r�r�r`r�r�)r�r��
other_contextr�s    r!�sni_contextszThreadedTests.sni_contexts�sv������(?�(?�@���&�&��7����s�'>�'>�?�
��%�%�&6�7�����(?�(?�@���,�,�Z�8��}�n�<�<r#c�>�|d}|jd|ff|d�y)Nrcr-r6)r�)r�r�r r�s    r!�check_common_namezThreadedTests.check_common_name�s&���Z� ���
�
��d�+�-�t�I��?r#c�����g�|j�\}�}d|_��fd�}|j|�t||dd��}|j	�d|fg�|j|d�g�t||dd��}|j	�d|fg�|j|t�g�|jd�t||dd��}|j|t�|j	�g�y)NFc�@���j||f�|��|_yyrW)rr�)r�r�r��callsrhs   ��r!r�z6ThreadedTests.test_sni_callback.<locals>.servername_cb�s'����L�L�+��7�8��&�#0�� �'r#T�supermessage�r�rjr>�notfunny)rir�r�rmr�rkr�)r�r�r�r�r�rnrhs     @@r!r�zThreadedTests.test_sni_callback�s�����8<�8I�8I�8K�5��
�~�(-��%�	1�	�.�.�}�=�"�>�>�*.�,:�<��
	
����.�.�!A� B�C����u�n�5���"�>�>�*.�,0�2��	
����$��!7� 8�9����u�&>�?����.�.�t�4�"�>�>�*.�,6�8��	
���u�&>�?������#r#c�&�|j�\}}}d�}|j|�|jtj�5}t||dd��}ddd�|j
jjd�y#1swY�0xYw)Nc�"�tjSrW)r
�ALERT_DESCRIPTION_ACCESS_DENIEDr�s   r!�cb_returning_alertzAThreadedTests.test_sni_callback_alert.<locals>.cb_returning_alerts���6�6�6r#Frorp�TLSV1_ALERT_ACCESS_DENIED)	rir�r�r
r�rmr�r�r)r�r�rhr�rur}r�s       r!�test_sni_callback_alertz%ThreadedTests.test_sni_callback_alerts��8<�8I�8I�8K�5��
�~�	7��.�.�/A�B�
�
�
�s�|�|�
,��&�~�~�.3�0>�@�E�-�	
������,�,�.I�J�	-�
,�s�B�Bc���|j�\}}}d�}|j|�tj�5}|j	t
j�5}t||dd��}ddd�d}|jjj|�|j|jjt�ddd�y#1swY�dxYw#1swYyxYw)Nc��ddzyrrXr�s   r!�
cb_raisingz;ThreadedTests.test_sni_callback_raising.<locals>.cb_raising s	��
�a�Cr#Frorpz0(SSLV3_ALERT_HANDSHAKE_FAILURE|NO_PRIVATE_VALUE))rir�r�catch_unraisable_exceptionr�r
r�rmrr�rr��
unraisable�exc_type�ZeroDivisionError)	r�r�rhr�rz�catchr}r�r�s	         r!�test_sni_callback_raisingz'ThreadedTests.test_sni_callback_raisings���8<�8I�8I�8K�5��
�~�	��.�.�z�:�
�
/�
/�
1�U��"�"�3�<�<�0�B�*�>�>�27�4B�D��1�G�E����R�\�\�0�0�%�8����U�-�-�6�6�8I�J�2�
1�0�0��2�
1�s$� C�C�-AC�C	�C�C%c���|j�\}}}d�}|j|�tj�5}|j	t
j�5}t||dd��}ddd�|jjjd�|j|jjt�ddd�y#1swY�bxYw#1swYyxYw)Nc��y)Nr�rXr�s   r!�cb_wrong_return_typezOThreadedTests.test_sni_callback_wrong_return_type.<locals>.cb_wrong_return_type4s��r#Frorp�TLSV1_ALERT_INTERNAL_ERROR)rir�rr{r�r
r�rmr�r�rr|r}r�)r�r�rhr�r�rr}r�s        r!�#test_sni_callback_wrong_return_typez1ThreadedTests.test_sni_callback_wrong_return_type/s���9=�8I�8I�8K�5��
�~�	��.�.�/C�D�
�
/�
/�
1�U��"�"�3�<�<�0�B�*�>�>�27�4B�D��1�
���R�\�\�0�0�2N�O����U�-�-�6�6�	�B�2�
1�0�0��2�
1�s$� C�C�-AC�C	�C�C#c�2�	�t�\}}}|jd�|jd�gd�}t|||��}|dd}|jt	|�d�|D],\�	}}t�	fd�|D��r�|j
�	��.y)Nz
AES128:AES256zAES256:eNULL)r"zAES-256�TLS_CHACHA20�TLS_AES�rjrgrc3�&�K�|]}|�v���
y�wrWrX)r;�algr s  �r!r<z4ThreadedTests.test_shared_ciphers.<locals>.<genexpr>Qs�����<�m�s�s�d�{�m�s�)r�rRrm�
assertGreaterrb�anyr.)
r�r�r�r��
expected_algsr�r��tls_version�bitsr s
         @r!�test_shared_ciphersz!ThreadedTests.test_shared_ciphersBs����3B�3D�0�����"�"�?�3��"�"�>�2�
�
�#�>�>�,4�6���/�0��3�����3�w�<��+�'.�#�D�+�t��<�m�<�<��	�	�$��(/r#c��t�\}}}t|d��}|5|jtj�|��}|j	t
|jf�|j�|jt|jd�|jt|jd�ddd�y#1swYyxYw)NFr�r�r�shello)r�rr�r�r�r
rr�r�r�rKr�rs      r!�,test_read_write_after_close_raises_valuerrorz:ThreadedTests.test_read_write_after_close_raises_valuerrorTs���3B�3D�0����#�N�5�I��
��*�*�6�=�=�?�;C�+�E�A�
�I�I�t�V�[�[�)�*�
�G�G�I����j�!�&�&�$�7����j�!�'�'�8�<��V�V�s�BC�C	c���d}ttjd�5}|j|�ddd�|j	tj
tj�t
�\}}}t|d��}|5|jtj�|��5}|jt|jf�ttjd�5}|j|�|j|jd�|�ddd�ddd�ddd�y#1swY��xYw#1swY�'xYw#1swY�+xYw#1swYyxYw)Nsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx�wbFr�r�r�r�)rJr�TESTFNr�r��unlinkr�rr�r�r�r
r�sendfiler�r`)	r��	TEST_DATArMr�r�r�rr��files	         r!�
test_sendfilezThreadedTests.test_sendfileas���	�
�)�"�"�D�
)�Q�
�G�G�I��*����	�(�(�)�*:�*:�;�3B�3D�0����#�N�5�I��
��+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.��)�*�*�D�1�T��J�J�t�$��$�$�Q�V�V�D�\�9�=�2�F��V�*�
)��2�1��F�F���V�sG�D0�&E�(<E	�$3D=�E	�E�0D:�=E�E	�	E	�E�Ec�"�t�\}}}tjj|_t|||��}|d}|j
|j�|j|jd�|j|jd�|j
|j�|j|jd�|j|d�|j�}|j|dd�|j|dd�t||||��}|j�}|j|dd	�|j|dd�|j
|d�|d}|j|j|j�|j||�|j!||�|j#|j|j�|j#|j|j�t|||��}|j|d�|d}|j%|j|j�|j%||�|j�}|j|dd
�|j|dd�t||||��}|j
|d�|d}	|j|	j|j�|j|	|�|j#|	j|j�|j#|	j|j�|j�}|j|dd�|j|dd	�y)Nr�r[rrer�r7r�)r[rjr�rr8)r�r
rrjrgrmrF�idr�r�rq�
has_ticket�ticket_lifetime_hintrPr�r��assertIsNotr�r:)
r�r�r�r�r�r[�	sess_stat�session2�session3�session4s
          r!�test_sessionzThreadedTests.test_sessionps��3B�3D�0����),���)?�)?��&�#�>�>�,4�6���	�"������
�
�#����7�<�<��+����7�?�?�A�.�����*�*�+����7�7�7��;�����/�0�1�"�0�0�2�	�����8�,�a�0�����6�*�A�.�#�>�>�+2�X�G��"�0�0�2�	�����8�,�a�0�����6�*�A�.�����.�/�0���#��������g�j�j�1�����7�+�����7�+�����
�
�w�|�|�<����� 0� 0�'�/�/�B�#�>�>�,4�6������/�0�1���#�����H�K�K����4����H�g�.�"�0�0�2�	�����8�,�a�0�����6�*�A�.�#�>�>�+2�X�G������.�/�0���#��������g�j�j�1�����7�+�����
�
�w�|�|�<����� 0� 0�'�/�/�B�"�0�0�2�	�����8�,�a�0�����6�*�A�.r#c�t�t�\}}}t�\}}}tjj|_tjj|_t|d��}|5|j
tj�|��5}|j|jd�|j|jd�|jt|jf�|j}|j|�|jt �5}	t"|_	ddd�|jt%	j&�d�ddd�|j
tj�|��5}|jt|jf�|jt(�5}	|_	ddd�|jt%	j&�d�ddd�|j
tj�|��5}|_	|jt|jf�|j|jj*|j*�|j|j|�|j|jd�ddd�|j
tj�|��5}|jt(�5}	|_	|jt|jf�ddd�|jt%	j&�d�ddd�ddd�y#1swY��0xYw#1swY��xYw#1swY���xYw#1swY���xYw#1swY��xYw#1swY�xYw#1swY�^xYw#1swYyxYw)NFr�r�zValue is not a SSLSession.z#Cannot set session after handshake.Tz)Session refers to a different SSLContext.)r�r
rrjrgrr�r�r�r[rer�r
rrFr�r�r�r\r�r�r�)
r�r�r�r��client_context2rOrr�r[rs
          r!�test_session_handlingz#ThreadedTests.test_session_handling�s���3B�3D�0���� /� 1����A�*-���)?�)?��&�*-�.�.�*@�*@��'�#�N�5�I��
��+�+�F�M�M�O�<D�,�F�IJ�� � ����D�1�� � ��!1�!1�4�8��	�	�4����-�.��)�)������(��&�&�y�1�Q� &�A�I�2�� � ��Q�[�[�!1�3O�P�F� �+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.��&�&�z�2�a� '�A�I�3�� � ��Q�[�[�!1�!F�H�
F� �+�+�F�M�M�O�<D�,�F�IJ�$��	��	�	�4����-�.�� � ������w�z�z�:�� � ����G�4�� � ��!1�!1�4�8�F�!�,�,�V�]�]�_�=E�-�G�JK��&�&�z�2�a� '�A�I��I�I�t�V�[�[�1�2�3�� � ��Q�[�[�!1�!L�N�
G�A�V�2�1��F�F�� 3�2��	F�F��F�F��3�2��G�G��A�V�s��*&N.�BM#�M�(-M#�-N.�7M=�9M0�-M=�.-N.�BN
�,-N.�N"�/)N�-N"�N.�M �M#�#M-	�(N.�0M:�5M=�=N	�N.�
N	�N.�N�N"�"N+	�'N.�.N7N)Irzrrrr�rr�r�r�rqrr
rUrWr�r�r�r�rzr�r�r�r�r�r�r�r�r�r�r�r�r�rr	rrrrr$r&r+rr-r/r1r3r6rr�rCrQrErJrLrrrSrVrXr[rdrfrirkr�rwr�r�r�r�r�r�r�rXr#r!r}r}�
s���W���z�*�*"�+�*"�X"/�H+E�Z#2�J�X����'�'�)T��3��3�*@�*@�4@L�D#E�J�)�$��%��4'�R5�>?�B�'�"�	J�#�	J��'�"�
;�#�
;��)�$�
N�%�
N��)�$�R�%�R�*7�r!�4C�:F�P6�&2�*�:/�b&,�PA�A�A�-�&�)�$�9�%�9��)�$��'�"��
9��#�%�
9��)�$��
9��%�
9��)�$��'�"��D��#�%�D� �'�"�7�#�7�5�"�X�����)B�)B�B�E�G�<G�G�<G�|E��X�����&9�:�E�G�2�G�2�6�6��X�_�_�^�%P�Q�;�R�;� 2�>;�;� >�D�=�@�&$�PK�K�&C�& �$=�
>�7/�r0Nr#r}rYzTest needs TLS 1.3c�N�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
y)
�TestPostHandshakeAuthc��tjtjg}|D�]a}tj|�}|j	|j
d�d|_|j	|j
d�tj|_|j	|jtj�|j	|j
d�d|_|j	|jtj�|j	|j
d�tj|_d|_|j	|jtj�|j	|j
d���dyr�)	r
r_r`rkr��post_handshake_authr�r�r�)r�r{rcrTs    r!�test_pha_setterz%TestPostHandshakeAuth.test_pha_setter�s"���#�#�S�%<�%<�
�	�"�H��.�.��*�C����S�4�4�e�<�&*�C�#����S�4�4�d�;�!�/�/�C�O����S�_�_�c�.?�.?�@����S�4�4�d�;�&+�C�#����S�_�_�c�.?�.?�@����S�4�4�e�<�!�/�/�C�O�&*�C�#����S�_�_�c�.?�.?�@����S�4�4�d�;�%"r#c��t�\}}}d|_tj|_d|_|jt�t|d��}|5|jtj�|��5}|jt|jf�|jd�|j|jd�d�|jd�|j|jd�d	�|jd�|j|jd�d
�|jd�|j|jd�d	�|jd�|jd�j!d
�}|j#d|�ddd�ddd�y#1swY�xYw#1swYyxYw)NTFr�r�r�r�r�r�r�r�r�ir�r9)r�r�r
r�r�r�r�rr�r�r�r
rr�r�r`�decoder�)r�r�r�r�rr��	cert_texts       r!�test_pha_requiredz'TestPostHandshakeAuth.test_pha_required�sf��3B�3D�0����-1��*�%(�%6�%6��"�-1��*��&�&��7�#�N�5�I��
��+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.����
�#�� � ������z�:������� � ������w�7����
�#�� � ������y�9������� � ������w�7����
�#��F�F�4�L�/�/�
�;�	��
�
�=�y�I�F��V�F�F���V�s%�&G�<D-F:�)G�:G	�?G�Gc��t�\}}}d|_tj|_d|_d�}||_||_t
|d��}|5|jtj�|d��5}|jt|jf�|jd�|jtjd�5|jd�}|j!|d	�|jd
�|jd�ddd�ddd�ddd�y#1swY�xYw#1swY�xYw#1swYyxYw)NTc��tjr@|tjk(r,||||||f}tj
j
d|�d��yyy)NzTLS: r�)rr�r�ALERTrr�r�)r7�	directionr8�content_type�msg_typer�r�s       r!�msg_cbz>TestPostHandshakeAuth.test_pha_required_nocert.<locals>.msg_cbsK�����<�?�3H�3H�#H��i��,��$�O���
�
� � �5����!3�4�$I�r#r�Fr�r�z#(certificate required|EOF occurred)r�r�r�)r�r�r
r�r��
_msg_callbackrr�r�r�r
rr�r�r�r`r�)r�r�r�r�r�rr�r�s        r!�test_pha_required_nocertz.TestPostHandshakeAuth.test_pha_required_nocerts ��3B�3D�0����-1��*�%(�%6�%6��"�-1��*�	5�
(.��$�'-��$�#�N�4�H��
��+�+�F�M�M�O�<D�AF�,�H�KL��	�	�4����-�.�������+�+��L�L�9��
�6�6�$�<�D��$�$�T�7�3��G�G�J�'��F�F�4�L��H��V����H�H���V�s>�'E�9AD7�AD+�D7�E�+D4�0D7�7E	�<E�Ec�B�tjrtjj	d�t�\}}}d|_tj|_	d|_|jt�tj|_	t|d��}|5|jtj�|��5}|j!t"|j$f�|j	d�|j'|j)d�d�|j	d	�|j'|j)d�d
�|j	d�|j'|j)d�d�ddd�ddd�y#1swY�xYw#1swYyxYw)Nr�TFr�r�r�r�r�r�r�r�)rr�rr�r�r�r�r
r�r�r�r�r�rr�r�r�r
rr�r`rs      r!�test_pha_optionalz'TestPostHandshakeAuth.test_pha_optional4s9���?�?��J�J���T�"�3B�3D�0����-1��*�%(�%6�%6��"�-1��*��&�&��7�&)�%6�%6��"�#�N�5�I��
��+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.����
�#�� � ������z�:������� � ������w�7����
�#�� � ������y�9�F��V�F�F���V�s%�&F�B8F	�8F�	F	�F�Fc���tjrtjj	d�t�\}}}d|_tj|_	d|_t|d��}|5|jtj�|��5}|jt|jf�|j	d�|j!|j#d�d�|j	d	�|j!|j#d�d
�|j	d�|j!|j#d�d�ddd�ddd�y#1swY�xYw#1swYyxYw)Nr�TFr�r�r�r�r�r�r�)rr�rr�r�r�r�r
r�r�rr�r�r�r
rr�r`rs      r!�test_pha_optional_nocertz.TestPostHandshakeAuth.test_pha_optional_nocertLs���?�?��J�J���T�"�3B�3D�0����-1��*�%(�%6�%6��"�-1��*�#�N�5�I��
��+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.����
�#�� � ������z�:������� � ������w�7����
�#�� � ������z�:�F��V�F�F���V�s%�0&E+�B8E�E+�E(	�$E+�+E4c�n�t�\}}}d|_tj|_|jt�t|d��}|5|jtj�|��5}|jt|jf�|jtjd�5|j�ddd�|j!d�|j#d|j%d��ddd�ddd�y#1swY�LxYw#1swY�xYw#1swYyxYw)	NTFr�r�z
not serverr�sextension not receivedr�)r�r�r
r�r�r�r�rr�r�r�r
rr�r�r�r�r�r`rs      r!�test_pha_no_pha_clientz,TestPostHandshakeAuth.test_pha_no_pha_clientbs���3B�3D�0����-1��*�%(�%6�%6��"��&�&��7�#�N�5�I��
��+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.��+�+�C�L�L�,�G��2�2�4�H�������
�
�7������F�
F��V�H�G��F�F���V�s=�&D+�5AD�7D�:D�D+�D�D�D(	�$D+�+D4c��t�\}}}tj|_d|_|jt�t|d��}|5|jtj�|��5}|jt|jf�|jd�|j|jd�d�|jd�|j|jd�d	�|jd�|j|jd�d�ddd�ddd�y#1swY�xYw#1swYyxYw)
NTFr�r�r�r�r�r�r�)r�r
r�r�r�r�r�rr�r�r�r
rr�r�r`rs      r!�test_pha_no_pha_serverz,TestPostHandshakeAuth.test_pha_no_pha_serverrs��3B�3D�0����%(�%6�%6��"�-1��*��&�&��7�#�N�5�I��
��+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.����
�#�� � ������y�9������� � ������w�7����
�#�� � ������y�9�F��V�F�F���V�s%�&E
�5B8D>�-E
�>E	�E
�
Ec�"�t�\}}}tj|_tjj
|_d|_|jt�t|d��}|5|jtj�|��5}|jt|jf�|j!d�|j#d|j%d��ddd�ddd�y#1swY�xYw#1swYyxYw)NTFr�r�r�sWRONG_SSL_VERSIONr�)r�r
r�r�rrjrgr�r�r�rr�r�r�r
rr�r�r`rs      r!�test_pha_not_tls13z(TestPostHandshakeAuth.test_pha_not_tls13�s���3B�3D�0����%(�%6�%6��"�),���)?�)?��&�-1��*��&�&��7�#�N�5�I��
��+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.�������
�
�2�A�F�F�4�L�A�F��V�F�F���V�s%�.&D�AC9�(D�9D	�>D�Dc��t}tjtj�}d|_|jt�d|_tj|_	tjtj�}|jt�|jt�d|_tj|_	t|d��}|5|jt!j �|��5}|j#t$|j&f�|j)d�|j+|j-d�d�|j)d�|j+|j-d�d	�|j)d�|j+|j-d�d
�|j+|j/�i�ddd�ddd�y#1swY�xYw#1swYyxYw)NTFr�r�r�r�r�r�r�r�)r�r
rkr`r�r�r�r�r�r�r_r�r�r�rr�r�r�r
rr�r�r`rY)r�r�r�r�rr�s      r!�test_bpo37428_pha_cert_nonez1TestPostHandshakeAuth.test_bpo37428_pha_cert_none�sv��,������(?�(?�@��-1��*��&�&��7�(-��%�%(�]�]��"�����(?�(?�@���&�&��7��,�,�Z�8�-1��*�%(�%6�%6��"�#�N�5�I��
��+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.����
�#�� � ������z�:������� � ������w�7����
�#�� � ������y�9�� � �����"�5�F��V�F�F���V�s%�&G5�CG)�G5�)G2	�.G5�5G>c	��td��\}}}t|d��}|5|jtj�|��5}|j	t
|jf�|jj�}|jt|�d�|\}}|jj�}	|jt|	�d�|j||	d�|jt|�t|	d��|jt|�t|	d��|j||�|jt|�t|��|jt|�t|��|j|j�|j��|j!dt|��|j!d	t|��|j#t$j&�}
|j#t$j(�}|j+|
t,�|j!d
|
�|j+|t.�|jt0j3|
�|�ddd�ddd�y#1swY�xYw#1swYyxYw)NFr�r�r�r�r7rzCN=localhostzCN=our-ca-serverz-----BEGIN CERTIFICATE-----)r�rr�r�r�r
rr�rr�rbr�hashr�r:�get_infor��public_bytesr��ENCODING_PEM�ENCODING_DERrAr\r�r
r+)r�r�r�r�rr��vc�ee�ca�uvcr1r�s            r!�test_internal_chain_clientz0TestPostHandshakeAuth.test_internal_chain_client�s��3B��4
�0����$�N�5�I��
��+�+��
�
�� (�,����	�	�4����-�.��Y�Y�1�1�3��� � ��R��!�,����B��i�i�4�4�6��� � ��S��1�-�� � ��S��V�,�� � ��b��4��A��<�8�� � ��b��4��A��<�8��#�#�B��+��#�#�D��H�d�2�h�7��#�#�D��H�d�2�h�7��#�#�B�K�K�M�2�;�;�=�A��
�
�n�d�2�h�7��
�
�0�$�r�(�;��o�o�d�&7�&7�8���o�o�d�&7�&7�8���%�%�c�3�/��
�
�;�S�A��%�%�c�5�1�� � ��,�,�S�1�3��7��V�����V�s$�&J6�IJ*�J6�*J3	�/J6�6J?c��t�\}}}|jt�tj|_tjj|_t|d��}|5|jtj�|��5}|jt|jf�|jd�|j!d�}|j#|d�|jd�|j!d�}|j#|d�ddd�ddd�y#1swY�xYw#1swYyxYw)NFr�r�sVERIFIEDCHAIN
r�s
sUNVERIFIEDCHAIN
)r�r�r�r
r�r�rrjrgrr�r�r�r
rr�r`r�)r�r�r�r�rr��ress       r!�test_internal_chain_serverz0TestPostHandshakeAuth.test_internal_chain_server�s���3B�3D�0�����&�&��7�%(�%6�%6��"�),���)?�)?��&�#�N�5�I��
��+�+��
�
�� (�,����	�	�4����-�.����*�+��f�f�T�l��� � ��i�0����,�-��f�f�T�l��� � ��i�0���V�����V�s%�'&D4�
B
D(�D4�(D1	�-D4�4D=N)rzrrr�r�r�r�r�r�r�r�r�r�r�rXr#r!r�r��s>��<�0J�2#!�J:�0;�,G� :�(B�"6�>#�J1r#r��keylog_filenamez0test requires OpenSSL 1.1.1 with keylog callbackc�D�eZdZejfd�Zeeje	d�d���Z
eeje	d�d���Zeejejjd�eje	d�d����Zd�Zd�Zd	�Zy
)�TestSSLDebugc�l�t|�5}tt|��cddd�S#1swYyxYwrW)rJrbr�)r��fnamerMs   r!�keylog_lineszTestSSLDebug.keylog_lines�s ��
�%�[�A��t�A�w�<��[�[�s�*�3r�c�2�|jtjtj�tjtj�}|j|jd�|jtjjtj��tj|_|j|jtj�|jtjjtj��|j|j�d�d|_|j|jd�|jt t"f�5tjj%tjj'tj��|_ddd�|jt(�5d|_ddd�y#1swY�/xYw#1swYyxYw)Nr7)r�rr�r�r
rkr`r�r�rPrr�isfilerFr�r��IsADirectoryError�PermissionErrorr�abspathr�r,s  r!�test_keylog_defaultsz!TestSSLDebug.test_keylog_defaults�sa��	
���	�(�(�)�*:�*:�;��n�n�S�4�4�5������,�,�d�3���������	�(8�(8�9�:�'�.�.�������,�,�i�.>�.>�?���������y�'7�'7�8�9�����*�*�,�a�0�"�������,�,�d�3�
�
�
� 1�?�C�
D�"$�'�'�/�/������	� 0� 0�1�#3�C��E�
�
�
�y�
)�"#�C��*�
)�E�
D��
*�
)�s�AH�0H
�H
�
Hc��|jtjtj�t	�\}}}tj|_t
|d��}|5|jtj�|��5}|jt|jf�ddd�ddd�|j|j�d�d|_tj|_t
|d��}|5|jtj�|��5}|jt|jf�ddd�ddd�|j|j�d�tj|_tj|_t
|d��}|5|jtj�|��5}|jt|jf�ddd�ddd�|j|j�d�d|_d|_y#1swY���xYw#1swY���xYw#1swY��xYw#1swY��xYw#1swY�txYw#1swY�xxYw)NFr�r�r���)r�rr�r�r�r�rr�r�r�r
rr�r�r�rs      r!�test_keylog_filenamez!TestSSLDebug.test_keylog_filenames��	
���	�(�(�)�*:�*:�;�3B�3D�0����)2�)9�)9��&�#�N�5�I��
��+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.�F��
	
����*�*�,�a�0�)-��&�)2�)9�)9��&�#�N�5�I��
��+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.�F��	
���� 1� 1� 3�R�8�)2�)9�)9��&�)2�)9�)9��&�#�N�5�I��
��+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.�F��	
���� 1� 1� 3�R�8�)-��&�)-��&�3F�F���V��F�F���V��F�F���V�sl�!&I	�"H<�)I	�&I#�*"I�I#�5&I<�"I0�=I<�<I	�I	�	I�I 	�I#�#I-�0I9	�5I<�<Jz.test is not compatible with ignore_environmentc��|jtjtj�tj
jjtj�5tjtjd<|jtjdtj�tjtj�}|j|jd�tj�}|j|jtj�tj!�}|j|jtj�ddd�y#1swYyxYw)N�
SSLKEYLOGFILE)r�rr�r�rq�mockrM�dictr�environr�r
rkr`r�r�r�r,s  r!�test_keylog_envzTestSSLDebug.test_keylog_env6s���
	
���	�(�(�)�*:�*:�;�
�]�]�
 �
 �
%�
%�b�j�j�
1�*3�*:�*:�B�J�J��'����R�Z�Z��8�)�:J�:J�K��.�.��!8�!8�9�C����S�0�0�$�7��,�,�.�C����S�0�0�)�2B�2B�C��,�,�.�C����S�0�0�)�2B�2B�C�2�
1�
1�s
�&DE=�=Fc��t�\}}}d�}|j|jd�||_|j|j|�|jt�5t�|_ddd�y#1swYyxYw)Nc��yrWrX�r7r�r8r�r�r�s      r!r�z.TestSSLDebug.test_msg_callback.<locals>.msg_cbLr�r#)r�r�r�r�r�r�)r�r�r�r�r�s     r!�test_msg_callbackzTestSSLDebug.test_msg_callbackIsl��3B�3D�0����	�	
�
�
�n�2�2�D�9�'-��$��
�
�n�2�2�F�;�
�
�
�y�
)�+1�8�N�(�*�
)�
)�s�&A?�?Bc�~���t�\}}}tjj|_g���fd�}||_t
|d��}|5|jtj�|��5}|jt|jf�ddd�ddd��jdtjtjtj f���jdtjtj"tj"f��y#1swY��xYw#1swY��xYw)Nc�����j|tj��j|t��j	|ddh��j||||f�y)NrKr�)rAr
r�r�r�r)r7r�r8r�r�r�rr�s      ��r!r�z4TestSSLDebug.test_msg_callback_tls12.<locals>.msg_cb[sO����!�!�$��
�
�6��!�!�$��.��M�M�)�f�g�%6�7��J�J�	�7�L�(�C�Dr#Fr�r�rKr�)r�r
rrjrgr�rr�r�r�r
rr�r�	HANDSHAKEr
�SERVER_KEY_EXCHANGE�CHANGE_CIPHER_SPEC)r�r�r�r�r�rr�rs`      @r!�test_msg_callback_tls12z$TestSSLDebug.test_msg_callback_tls12Us���3B�3D�0����),���)?�)?��&���	E�(.��$�#�N�5�I��
��+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.�F��
	
�
�
�
�Z�'�'��)B�)B�
�
0�
0�
2��	
�
	
�
�
�
�j�(�(�/�*L�*L�
�
/�
/�
1��	
�F�F���V�s$�&D3�4"D'�D3�'D0	�,D3�3D<c���t�\}}}t�d�d�}�fd�}||_||_t|d��}|5|j	tj
�|��5}|j
t|jf�ddd�|j	tj
�|��5}|j
t|jf�ddd�ddd�y#1swY�axYw#1swY�xYw#1swYyxYw)Nr7c��yrWrXr�s      r!r�z@TestSSLDebug.test_msg_callback_deadlock_bpo43577.<locals>.msg_cbxr�r#c����|_yrWr)r�r�rT�server_context2s   �r!�sni_cbz@TestSSLDebug.test_msg_callback_deadlock_bpo43577.<locals>.sni_cb{s
���*�D�Lr#Fr�r�)	r�r��sni_callbackrr�r�r�r
r)	r�r�r�r�r�r�rr�r�s	        @r!�#test_msg_callback_deadlock_bpo43577z0TestSSLDebug.test_msg_callback_deadlock_bpo43577ts����3B�3D�0����)�+�A�.��	�	+�(.��$�&,��#�#�N�5�I��
��+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.�F� �+�+�F�M�M�O�<D�,�F�IJ��	�	�4����-�.�F�	�V�F�F��F�F��	�V�s<�&D�("C*�
-D�7"C6�D�*C3	�/D�6C?	�;D�DN)rzrrrr�r��requires_keylogrqrrr�r�r�flags�ignore_environmentr�r�r�r�rXr#r!r�r��s���!*�!1�!1� ���X�_�_�^�%P�Q�$�R��$�,��X�_�_�^�%P�Q� .�R�� .�D��X�_�_�S�Y�Y�1�1�E�G��X�_�_�^�%P�Q�
D�R�G��
D�
4�
�>/r#r�c	��|jtjtjt	j
ddd��y)N�iir7r)�
setsockoptr��
SOL_SOCKET�	SO_LINGER�struct�pack)r�s r!�)set_socket_so_linger_on_with_zero_timeoutr�s+���O�O�F�%�%�v�'7�'7����T�1�a�9P�Qr#c�R�eZdZdZGd�dej
�Zd�Zd�Zd�Z	d�Z
y)	�TestPreHandshakeClosezQVerify behavior of close sockets with received data before to the handshake.
    c�@��eZdZdd��fd�
Zd�Zd�Z�fd�Zd�Z�xZS)�6TestPreHandshakeClose.SingleConnectionTestServerThreadN)rqc���||_d|_d|_d|_d|_|�t
j|_n||_t�|�%|��y)Nr#r)
�call_after_accept�
received_data�
wrap_errorr�rrr�rq�superr�)r�r rrqrys    �r!r�z?TestPreHandshakeClose.SingleConnectionTestServerThread.__init__�sQ���%6�D�"�!$�D��"�D�O� �D�M��D�I���&�4�4���&����G��$��'r#c�&�|j�|SrW)rr�s r!rz@TestPreHandshakeClose.SingleConnectionTestServerThread.__enter__�s���J�J�L��Kr#c��	|jr|jj�|j�d|_y#t$rY�#wxYwrW)r�r�r_rrrs  r!rz?TestPreHandshakeClose.SingleConnectionTestServerThread.__exit__�sD��
��=�=��M�M�'�'�)�
�I�I�K�"�D�O���
��
�s�&A�	A�Ac�H��tjtjj�|_tj
|j_|jjt��|jjtt��tj�|_tj|j�|_|jj!|j"�|jj%d�t&�|�Q�y)Nr�rmr7)r
r�r�r��ssl_ctxr�r�r�r�r�r�r�r�rrrrorqr#rr)r�rys �r!rz<TestPreHandshakeClose.SingleConnectionTestServerThread.start�s�����5�5�c�k�k�6M�6M�N�D�L�'*�'8�'8�D�L�L�$��L�L�.�.�h�.�?��L�L�(�(�(�G�(�L�"�M�M�O�D�M�%�/�/��
�
�>�D�I��M�M�$�$�T�\�\�2��M�M� � ��#��G�M�Or#c�,�	|jj�\}}	|jj�|5|j	|�r
	ddd�y	|j
j
|d��}	|jd�|_ddd�y#t$rY|jj�ywxYw#|jj�wxYw#t$rY�\wxYw#t$r}||_
Yd}~�ud}~wwxYw#1swYyxYw)NTr�)r�r�r$r�rrr�r`r
r_r)r�r7�address�
tls_socketr?s     r!r	z:TestPreHandshakeClose.SingleConnectionTestServerThread.run�s���
&� $�
�
� 4� 4� 6�
��g�
�
�
�#�#�%���)�)�$�/�����!%���!9�!9�$�D�!9�!Q�J��-7�_�_�S�-A��*����
 �
���
�
�#�#�%�	
���
�
�#�#�%��#������*�&)�D�O�O��*����sp�B�D
�C-�7C�	B<�B?�;B<�<B?�?C�	C*�'D
�)C*�*D
�-	D�6D�=D
�D�D
�
D)	rzrrr�rrrr	�
__classcell__)rys@r!� SingleConnectionTestServerThreadr
�s���?C�
	(�	�	#�		�	r#rc�f�tjdk(ryt|t�s]t|t�r|j
t
jk(s0tjdt|dd�tj�r)	|jdtj�d|���d}yy#d}wxYw)N�linuxzwrong.version.numberrrSz!Could not recreate conditions on z: err=)rrr[r�r_r�EINVALr��searchr]r�rr>s  r!�"non_linux_skip_if_other_okay_errorz8TestPreHandshakeClose.non_linux_skip_if_other_okay_error�s����<�<�7�"���s�0�1�
��W�
%�#�)�)�u�|�|�*C��I�I�,�g�c�8�R�.H�"�$�$�O�
��
�
� A�#�,�,��P'�"%��)�*���
P����s�%B,�,B0c�"���tj��tj����fd�}|j|d��}|j|�t	j�5}|j|jj��t|�|jd��j�|jd�|j�ddd��j�|j�|j}d|_	|j!d|j"�|j%|t&�|j)|�|j%|t*j,�|j/d|j0d�|j/d|j2�|j5d	|j0d	�|j7|j8d
��d}d}y#1swY��xYw#d}d}wxYw)Nc�z���j��jtj�st	d��y)Nz+wrap_socket event never set, test may fail.F)r�rrr��RuntimeError)�unused�ready_for_server_wrap_socket�server_accept_calleds ��r!rzPTestPreHandshakeClose.test_preauth_data_to_tls_server.<locals>.call_after_accept�s2��� �$�$�&�/�4�4�W�5J�5J�K�"�#P�Q�Q�r#�preauth_data_to_tls_server�rr FsDELETE /data HTTP/1.0

r#�before TLS handshake with datar7r�attr must existr�)r�rrrTr�r�r�r�rr"rrdr�r�rrr�r
rAr_rr
r�r�rsrr:r�r)r�rrrNrr#r$s     @@r!�test_preauth_data_to_tls_serverz5TestPreHandshakeClose.test_preauth_data_to_tls_server�s����(���0��'0���'8�$�	��6�6�"3�1�7�3��	
���&�!�
�]�]�_���N�N�6�?�?�6�6�8�9�5�f�=����u�%� �%�%�'��K�K�8�9��L�L�N��	%�(�(�*����
��&�&�
� ���	����S�&�"6�"6�7��!�!�*�g�6��3�3�J�?��!�!�*�c�l�l�;��M�M�:�J�O�O�A�<N�O��M�M�:�J�<M�<M�N�����:�?�?�1�#5�6����j�0�0�6G��H��J��F�7�_��4�J��F�s�)A7G;�CH�;H�Hc�T�	�
�tj��
tj��	�	�
fd�}|j|d��}|j|�t	|j
�t
j�5}|j|j
j���
j��	jtj�s|jd�tj�}	|j!|d��}d}|j#d�}|j%�ddd�|j)�	|j+d�|j-t&�|j/|�|j-|tj0�|j3d	|j4d
�|j3d	|j6�|j9d|j4d�|j;|j<d�
�t?j@|�5d}ddd�d}y#t&$r}|}d}Yd}~��d}~wwxYw#1swY��)xYw#1swYd}yxYw#t?j@|�5d}ddd�d}w#1swYd}wxYwxYw)Nc�����jtj�std�t	|�|jd�|j
��j�y)Nz ERROR: test client took too longsWHTTP/1.0 307 Temporary Redirect
Location: https://example.com/someone-elses-server

T)rrr�rrrdr�r�)�conn_to_client�$client_can_continue_with_wrap_socket�$server_can_continue_with_wrap_sockets ��r!rzPTestPreHandshakeClose.test_preauth_data_to_tls_client.<locals>.call_after_acceptsZ���7�<�<�W�=R�=R�S��8�9�
6�n�E�����
�
� � �"�0�4�4�6�r#�preauth_data_to_tls_clientr&ztest server took too longr.r�rr#r'r7rr(r�)!r�rrrTrr�r�r�r�r�rrr�r.r
r�r�r`r�r_rr�rArr�r�rsrr:r�rrr�)r�rrrNr�
tls_clientrr
r?r-r.s         @@r!�test_preauth_data_to_tls_clientz5TestPreHandshakeClose.test_preauth_data_to_tls_clients-���/8���/@�,�/8���/@�,�	��6�6�"3�1�7�3��	
���&�!�1�&�/�/�B�
�]�]�_���N�N�6�?�?�6�6�8�9�0�4�4�6�7�<�<�W�=R�=R�S��	�	�5�6��0�0�2�G�	
#�$�0�0���1�=�
�"�
� *���� 4�
�� � �"�!�$	���
�
	����S�-�0��!�!�*�g�6��3�3�J�?��!�!�*�c�l�l�;��M�M�:�J�O�O�A�<N�O��M�M�:�J�<M�<M�N�����:�?�?�1�#5�6����j�0�0�6G��H�!�:�:�4�@�!�
�A��F��-�
$� �
� #�
��
$���_��<A��F��!�:�:�4�@�!�
�A��F�A��F�sh�>A>I�=H?�#I�CI5�1I'�?	I�I�I�I�I�I$�'I2�5J'�J�J'�J$�	J'c���tj��G�fd�dtjj�}�fd�}d}|j|d|��}|j
|�t|j�||jj�d|jtj�|��}tj|�5|jt �5|j#d	d
ddi�
�|j%�}ddd�ddd�|j'�y#1swY�"xYw#1swY�&xYw)Nc���eZdZ�fd�Zy)�eTestPreHandshakeClose.test_https_client_non_tls_response_ignored.<locals>.SynchronizedHTTPSConnectionc�`��tjjj|��j	t
j�s/t
jrtjjd�|jj|j|j��|_
y)Nz"server_responding event never set.r�)�httprN�HTTPConnectionr�rrr�r�rr�r��_contextr�r�r�)r��server_respondings �r!r�zmTestPreHandshakeClose.test_https_client_non_tls_response_ignored.<locals>.SynchronizedHTTPSConnection.connectSst������*�*�2�2�4�8�)�-�-�g�.C�.C�D�����J�J�$�$�%I�J� �M�M�5�5��	�	�4�9�9�6�>��	r#N)rzrrr�)r9s�r!�SynchronizedHTTPSConnectionr4Rs���	
>r#r:c�~��t|�|jd�|j��j�y)Ns!HTTP/1.0 402 Payment Required

T)rrdr�r�)r,r9s �r!rz[TestPreHandshakeClose.test_https_client_non_tls_response_ignored.<locals>.call_after_accept^s;���5�n�E�����
�
� � �"��!�!�#�r#g@�non_tls_http_RST_responder)rr rqr)rr�rq�HEADz/test�Hostr.)�headers)r�rr6rN�HTTPSConnectionrrTrr�r�rr
r�rr�r�r_r��getresponser)r�r:rrqr�
connection�responser9s       @r!�*test_https_client_non_tls_response_ignoredz@TestPreHandshakeClose.test_https_client_non_tls_response_ignoredOs���%�O�O�-��
	>�$�+�+�*E�*E�
	>�	����6�6�"3�1��7�!��	
���&�!�1�&�/�/�B�0����+�+�-�a�0��[�[��2�2�4��	
�
��
6�
6�t�
<��!�!�'�*����v�w���8M��N�!�-�-�/�H�+�=�
	���
�	+�*��=�
<�s$�D>�*'D2�D>�2D;	�7D>�>EN)rzrrr�r�r�rrr)r1rDrXr#r!rr�s0���:�9�+;�+;�:�x�2*�X9�v3r#rc�H�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zy)�TestEnumerationsc�j�Gd�dtj�}tj|t�y)Nc��eZdZejZejZejZ	ejZejZ
ejZej Zy)�;TestEnumerations.test_tlsversion.<locals>.CheckedTLSVersionN)rzrrr��PROTO_MINIMUM_SUPPORTEDrl�PROTO_SSLv3r�PROTO_TLSv1r�
PROTO_TLSv1_1r�
PROTO_TLSv1_2rj�
PROTO_TLSv1_3rY�PROTO_MAXIMUM_SUPPORTEDrmrXr#r!�CheckedTLSVersionrI�sQ�� $� <� <���$�$�E��$�$�E��(�(�G��(�(�G��(�(�G� $� <� <�r#rQ)�enum�IntEnum�_test_simple_enumr)r�rQs  r!�test_tlsversionz TestEnumerations.test_tlsversion�s%��	=����	=�	
���0�*�=r#c�j�Gd�dtj�}tj|t�y)Nc�(�eZdZdZdZdZdZdZdZdZ	y)	�DTestEnumerations.test_tlscontenttype.<locals>.Checked_TLSContentTypezPContent types (record layer)

            See RFC 8446, section B.1
            r_r���r9�N)
rzrrr�r�r�r��APPLICATION_DATA�HEADER�INNER_CONTENT_TYPErXr#r!�Checked_TLSContentTyperX�s*��
�"$���E��I�!���F�!&�r#r_)rRrSrTr)r�r_s  r!�test_tlscontenttypez$TestEnumerations.test_tlscontenttype�s%��	'�T�\�\�	'�	
���5��Gr#c�j�Gd�dtj�}tj|t�y)Nc��eZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%y$)%�@TestEnumerations.test_tlsalerttype.<locals>.Checked_TLSAlertTypezaAlert types for TLSContentType.ALERT messages

            See RFC 8466, section B.2
            r�
r_r�rY��(�)r$�+�,�-�.�/r8�1�2�3�<�F�G�P�V�Zr^�m�n�o�p�q�r�s�t�xN)&rzrrr��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_TLSAlertTyperc�s���
��L�!#���N� "�� �O�$&�!� "���N� �O�&(�#�"$��"$��"$�� "���J��M��L��M�!#��!��$&�!��N�%'�"��M�"�� #��$'�!�'*�$� #��.1�+�),�&�#&� �#&� �&)�#r#r�)rRrSrTr)r�r�s  r!�test_tlsalerttypez"TestEnumerations.test_tlsalerttype�s&��&	*�4�<�<�&	*�N	
���3�]�Cr#c�j�Gd�dtj�}tj|t�y)Nc�h�eZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdZdZdZdZdZdZdZdZdZy)�DTestEnumerations.test_tlsmessagetype.<locals>.Checked_TLSMessageTypezVMessage types (handshake protocol)

            See RFC 8446, section B.3
            rr7r�rr8rr�rr�r9�
�r;r�r_r�rYrZ��C�r[N)rzrrr��
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��s���
��M��L��L�#$� � !�� !��"#��#$� ��K�"$��"$���K�!#��"$���H� �O�!#�� "���J��J��L�!'�r#r�)rRrSrTr
)r�r�s  r!�test_tlsmessagetypez$TestEnumerations.test_tlsmessagetype�s%��	(�T�\�\�	(�6	
���5��Gr#c���tjtjddd�tj��}|j
|_tj|tj�y)N�
_SSLMethodr
c�2�|jd�xr|dk7S)NrZr��r�rs r!r�z1TestEnumerations.test_sslmethod.<locals>.<lambda>�s��T�_�_�[�9�W�d�FW�>W�Wr#��source)	rR�
_old_convert_rSr
r�r^r�rTr�)r��Checked_SSLMethods  r!�test_sslmethodzTestEnumerations.test_sslmethod�sN�� �.�.����l�E�W��x�x���->�,J�,J��)����0�#�.�.�Ar#c��tjtjddd�tj��}tj
|tj�y)N�Optionsr
c�$�|jd�S)Nr�r�rs r!r�z/TestEnumerations.test_options.<locals>.<lambda>�s
��T�_�_�U�3r#r�)rRr��IntFlagr
r�rTr�)r��CheckedOptionss  r!r�zTestEnumerations.test_options�s=���+�+����i��3��x�x���
	
���~�s�{�{�;r#c��tjtjddd�tj��}tj
|tj�y)N�AlertDescriptionr
c�$�|jd�S)N�ALERT_DESCRIPTION_r�rs r!r�z8TestEnumerations.test_alertdescription.<locals>.<lambda>�s��T�_�_�-A�Br#r�)rRr�rSr
r�rTr�)r��CheckedAlertDescriptions  r!�test_alertdescriptionz&TestEnumerations.test_alertdescription�sB��"&�"4�"4����0�%�B��x�x�#��
	
���6��8L�8L�Mr#c��tjtjddd�tj��}tj
|tj�y)N�SSLErrorNumberr
c�$�|jd�S)N�
SSL_ERROR_r�rs r!r�z6TestEnumerations.test_sslerrornumber.<locals>.<lambda>s
��T�_�_�\�:r#r�)rRr�rSr
r�rTr�)r��Checked_SSLErrorNumbers  r!�test_sslerrornumberz$TestEnumerations.test_sslerrornumbersB��!%�!3�!3����.��:��x�x�"��
	
���5�s�7I�7I�Jr#c��tjtjddd�tj��}tj
|tj�y)N�VerifyFlagsr
c�$�|jd�S)N�VERIFY_r�rs r!r�z3TestEnumerations.test_verifyflags.<locals>.<lambda>s
��T�_�_�Y�7r#r�)rRr�r�r
r�rTr�)r��CheckedVerifyFlagss  r!�test_verifyflagsz!TestEnumerations.test_verifyflagss?��!�/�/����m�U�7��x�x���
	
���1�3�?�?�Cr#c��tjtjddd�tj��}tj
|tj�y)N�
VerifyModer
c�$�|jd�S)N�CERT_r�rs r!r�z2TestEnumerations.test_verifymode.<locals>.<lambda>s
��T�_�_�W�5r#r�)rRr�rSr
r�rTr�)r��CheckedVerifyModes  r!�test_verifymodez TestEnumerations.test_verifymodes?�� �.�.����l�E�5��x�x���
	
���0�#�.�.�Ar#N)
rzrrrUr`r�r�r�r�r�r�r�r�rXr#r!rFrF�s=��	>�
H�(D�TH�<B�<�N�K�D�Br#rFc��tjr�tjtjd�}|j�D]\}}|�}|s�|ds�|�d|��}nt
tj��}tdtj�dtj���td|z�tdtjz�tdtjz�	tdtjz�tt t"t$t&t(t*t,t.t0t2t4fD]9}t6j8j;|�r�#tj<d	|z��t?j@�}tCjDt>jFg|���y#t$rY��wxYw)
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�r�mac_ver�	win32_ver�itemsr�rr
r@r?r�rKr�rVr�r�r�r�r�r�r�r�r�r��BADKEYr�rr�exists�
TestFailedr�threading_setuprq�addModuleCleanup�threading_cleanup)�platsr ru�plat�filename�thread_infos      r!�setUpModuler�se������#�#��)�)�
�� �+�+�-�J�D�$��6�D���Q��"&��-���	(���)�)�+�,�D�
�
�
 �
 �#�":�":�<�	=�
�"�T�)�*�
�&����4�5�
�(�3�:�:�5�6�	��3�c�6G�6G�G�H�
	�.��'�>�=��)�:����	$��
�w�w�~�~�h�'��$�$�%E��%P�Q�Q�
$�#�2�2�4�K����.�@�@�O�;�O���	��	�s�3G�	G�
G�__main__rW)r�TFNN)Nrr)�rrq�
unittest.mockr�r�test.supportrrrrrr	rr�r�rbrr�rRr��http.clientr6rrr�urllib.requestr�r�r}rUr�	sysconfigrwr��ImportError�
import_moduler
r�rrr
rrrrF�_PROTOCOL_NAMESr%r
r?ri�get_config_varrrpr��verr]rVr"r��fsencoder�r�r�r�r�r�r�rsr�r�r�r*r�r�r�r�r�r�r�r�r�r�r&r�r�r�r�r�r�r�r�r�rr
r�r�rBrCrDrErFrNrUrd�	lru_cacherarzr�r��ignore_warningsrvrr�r�r��TestCaser�r"rr*rDrRr�r�r{r��test.ssl_serversr�r�rr.rmr{r}rr�rQrk�
HAS_KEYLOGr�r�rrrFr�rz�mainrXr#r!�<module>r
s�������&�"�&�)�(�!��	�
�
�
���	��	��
����������
"�m�!�!�%�(���K�K��!�!�=�c�l�l�g�&=���3�&�&�'�	������+�+�y�8��1��1�1�2J�K�����J�E�3�
���U�#���c�n�n�c�*��&)��E�"��F��]�#������X�&���^�$��
�M�
"������X�&������G�$�
��3�4���2�3����	�8�	���r�{�{�6�"���H�l�3���(�L�1�
�/�+�+�&�-�.���
�"�$�
%���N�+��&��
;�F�T�0�+�+�&�-�.����$�^�,��*��� 0�1��.���x��
.�
�
�}�
%�
��
�&���k�"�	���*���n�%�	�
�M�
"���0�1��	�<�	 ���k�"�	��+�,��� 5�6��	�>�	"���r�{�{�6�"���C�!4�a�8���3� 2�A�6���S�"6��:��%�c�+H�!�L��$�S�*F��J���
�;�3�
�4�*���!��!�H�".��5�_�4�4�
��� #�}�}�t�!�D�$�/�,!0�4��4�2J	1�x�(�(�J	1�ZU �8�$�$�U �p4D�H�%�%�4D�n@3�X�&�&�@3�F.�X�&�&�.�`y<�H�-�-�y<�x����9�%�L�X�&�&�L�&�L�4	Z�	R�/�X��)�)�X�tt��)�)�t�l?G�EI�#�.�bIJ�KG�\HN�H�%�%�HN�V0����_�Y�/�1E�F�P1�H�-�-�P1�G�P1�f�S�^�^�%6�
7�
�%�(�%�%��B�D��T/�8�$�$�T/�nR�s�H�-�-�s�lTB�x�(�(�TB�n P�F�z���H�M�M�O���{`��
�F���2����s$�S�S�S�S�S�S

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists