
    daf\                    	   d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d dlmZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl Z 	 d dl!Z! ejF                  d	      Z$d dl%Z%d d
l$m&Z&m'Z'm(Z(m)Z) ejT                  xr e j<                  dk(  Z+ e,e$jZ                        Z.ej^                  Z/e$j`                  dk\  Z1 ejd                  d      Z3i Z4dD ]'  \  Z5Z6	  e7e$e5      Z5 e7e$jL                  e6      Z6e6e4e5<   ) d Z9 e9d      Z: ejv                  e:      Z< e9d      Z= e9d      Z> ejv                  e=      Z? ejv                  e>      Z@ e9d      ZA e9d      ZBdZC e9d      ZD ejv                  eD      ZE e9dd      ZF e9dd      ZGddddddddZH e9d       ZI e9d!      ZJd"ZKd#d$d%d&d'd(d)dddd*
ZL e9d+      ZMd,ZN e9d-      ZOd.ZP e9dd/      ZQ e9d0      ZR e9d1      ZS e9d2      ZTd"ZUd3ZV e9d4      ZW e9d5      ZX e9d6      ZY e9d7      ZZ e9d8      Z[ e9d9      Z\ e9d:      Z] e9d;      Z^ ejv                  e^      Z_ e7e$d<d       Z` e7e$d=d       Za e7e$d>d       Zb e7e$d?d       Zc e7e$d@d       ZddA Ze ee       rdB ZfndC ZfdD Zge j                  dE        ZidF ZjdG ZkdH Zl e
j                  enI      Zoe$j                  dddddJdKZqeJfdLdMdNZr G dO dPej                        Zt G dQ dRej                        Zu G dS dTej                        Zv G dU dVej                        Zw G dW dXej                        Zx G dY dZej                        Zy ej                  d[       G d\ d]ej                               Z{dxd^Z|d_ Z}d d`l~mZ  G da dbej                         Z G dc ddej                         Z	 	 	 dydeZ	 dzdfZ G dg dhej                        Z ej                   eidi      dj       G dk dlej                               Z ee$j                  dm      Z ej                  edn      Z G do dpej                        Zdq Z G dr dsej                        Z G dt duej                        Zdv Zedwk(  r ej$                          yy# e"$ r dZ!Y Cw xY w# e8$ r Y w xY w){    N)support)import_helper)	os_helper)socket_helper)threading_helper)warnings_helper)asyncoressl)
TLSVersion_TLSContentType_TLSMessageType_TLSAlertTypewin32)   r   r   PY_SSL_DEFAULT_CIPHERS))PROTOCOL_SSLv3SSLv3)PROTOCOL_TLSv1TLSv1)PROTOCOL_TLSv1_1TLSv1_1c                      t        j                  j                  t         j                  j                  t              dg|  S )Ncertdata)ospathjoindirname__file__names    (/root/Python-3.12.4/Lib/test/test_ssl.py	data_filer"   ?   s)    77<<1:EEE    zkeycert.pemzssl_cert.pemzssl_key.pemzkeycert.passwd.pemzssl_key.passwd.pemsomepasscapathz
4e1295a3.0z
5ed36f99.0))countryNameXY)localityNamezCastle Anthrax)organizationNamezPython Software Foundation))
commonName	localhostzAug 26 14:23:15 2028 GMTzAug 29 14:23:15 2018 GMT98A7CF88C74A32ED))DNSr.   r   issuernotAfter	notBeforeserialNumbersubjectsubjectAltNameversionzrevocation.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-serverzOct 28 14:23:16 2037 GMTzAug 29 14:23:16 2018 GMTCB2D80995A69525C)
OCSP	caIssuerscrlDistributionPointsr2   r3   r4   r5   r6   r7   r8   zkeycert4.pemfakehostnamezkeycertecc.pemzlocalhost-eccz
ceff1710.0zallsans.pemzidnsans.pemz	nosan.pemzself-signed.pythontest.netnullcert.pembadcert.pemzXXXnonexisting.pem
badkey.pemz	nokia.pemznullbytecert.pemztalos-2019-0758.pemzffdh3072.pemOP_NO_COMPRESSIONOP_SINGLE_DH_USEOP_SINGLE_ECDH_USEOP_CIPHER_SERVER_PREFERENCEOP_ENABLE_MIDDLEBOX_COMPATc                      	 t        dd      5 } d| j                         v cd d d        S # 1 sw Y   y xY w# t        $ r Y yw xY w)Nz/etc/os-releasezutf-8)encodingubuntuF)openreadFileNotFoundError)fs    r!   	is_ubunturN      sJ     #g6 	(!qvvx'	( 	( 	( s#   7 +	7 47 7 	AAc                      | D ]H  }t        |d      s|j                  t        j                  j                  k  s8|j                  d       J y)z@"Lower security level to '1' and allow all ciphers for TLS 1.0/1minimum_versionz@SECLEVEL=1:ALLN)hasattrrP   r
   r   r   set_ciphers)ctxsctxs     r!   seclevel_workaroundrU      sA     	3C./##s~~'='== 12	3r#   c                       y N )rS   s    r!   rU   rU      s    r#   c                    t        | t              r'| j                  d      sJ t        t        | d      } | y| t        j
                  t        j                  t        j                  hv ry| j                  }t        |t        d      d       S )zCheck if a TLS protocol is available and enabled

    :param protocol: enum ssl._SSLMethod member or name
    :return: bool
    	PROTOCOL_NFT)
isinstancestr
startswithgetattrr
   PROTOCOL_TLSPROTOCOL_TLS_SERVERPROTOCOL_TLS_CLIENTr    has_tls_versionlen)protocolr    s     r!   has_tls_protocolre      s     (C "";///3$/#11 
 ==D4K 0 1233r#   c                 4   t        | t              rt        j                  j                  |    } t        t        d| j                         syt        r| t        j                  j                  k  ryt        j                  t        j                        }t        |d      r7|j                  t        j                  j                  k7  r| |j                  k  ryt        |d      r7|j                  t        j                  j                  k7  r| |j                  kD  ryy)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
SSLContextra   rQ   rP   MINIMUM_SUPPORTEDrh   MAXIMUM_SUPPORTED)r8   rT   s     r!   rb   rb      s     '3..,,W5 3$w||n-.Gcnn&<&<< ..00
1CC*+3>>#C#CCc)))&'s~~???#%%%r#   c                       fd}|S )zDecorator to skip tests when a required TLS version is not available

    :param version: TLS version name or ssl.TLSVersion member
    :return:
    c                 F     t        j                          fd       }|S )Nc                  Z    t              st        j                   d       | i |S )Nz is not available.)rb   unittestSkipTest)argskwfuncr8   s     r!   wrapperz8requires_tls_version.<locals>.decorator.<locals>.wrapper   s4    "7+''7)3E(FGGT(R((r#   )	functoolswraps)rv   rw   r8   s   ` r!   	decoratorz'requires_tls_version.<locals>.decorator   s%    			) 
	)
 r#   rX   )r8   rz   s   ` r!   requires_tls_versionr{      s     r#   c                     dj                  t        j                  t        j                                     }t
        j                  r#t        j                  j                  | |z          y y )N )	r   	tracebackformat_exceptionsys	exceptionr   verbosestdoutwrite)prefix
exc_formats     r!   handle_errorr     sD    )44S]]_EFJ

*,- r#   c                      t         j                  r2t        j                         j                  dkD  rt         j                   S t         j
                   S Nr   )timedaylight	localtimetm_isdstaltzonetimezonerX   r#   r!   
utc_offsetr   	  s5    }})22Q6}MM>r#   )category)	cert_reqsca_certscipherscertfilekeyfilec                   |j                  d      s-t        |d<   t        j                  t        j                        }n#t        j                  t        j
                        }|!|t        j                  k(  rd|_        ||_        ||j                  |       |||j                  ||       ||j                  |        |j                  | fi |S )Nserver_sideserver_hostnameF)getSIGNED_CERTFILE_HOSTNAMEr
   rl   ra   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                   | t         k(  rt        }n+| t        k(  rt        }n| t        k(  rt
        }nt        |       t        j                  t        j                        }|j                  t               t        j                  t        j                        }|j                  |        |r|j                  t               |||fS )zUCreate context

    client_context, server_context, hostname = testing_context()
    )SIGNED_CERTFILEr   SIGNED_CERTFILE2SIGNED_CERTFILE2_HOSTNAME	NOSANFILENOSAN_HOSTNAME
ValueErrorr
   rl   ra   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                   :   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zej                   d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Z ej8                  dej<                  v d      d        Zd Z d Z! ej8                  e"jF                  dk(  d      d        Z$ ej8                  e"jF                  dk(  d      d        Z%d  Z&d! Z'd" Z(d# Z)d$ Z* ej8                   e+       d%      d&        Z,d' Z- ej\                  d(d)      d*        Z/d+ Z0d, Z1y-).BasicSocketTestsc                     t         j                   t         j                   t         j                   t         j                   t         j
                   t         j                   t         j                   | j                  t         j                  d       | j                  t         j                  d       | j                  t         j                  d       | j                  t         j                  d       t         j                   t         j                   t         j                   t         j                    t         j"                   t         j$                   | j                  t         j&                  t         j(                         y )NT)r
   r   CERT_OPTIONALCERT_REQUIREDrE   rC   rD   rB   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_constantszBasicSocketTests.test_constantsF  s    ''d+t,$/$/))3+>+>?r#   c                     t        t              D ]U  }|j                  d      s| j                  |      5  t	        t        |      }| j                  |dd|        d d d        W y # 1 sw Y   bxY w)NOP_optionr   ssl.)dirr
   r]   subTestr^   assertGreaterEqual)r   r    values      r!   test_optionszBasicSocketTests.test_optionsZ  sw    H 	AD??5)T* AT*''qD-@A A	AA As   'A))A2	c                    t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  g}|D ]C  }| j                  |      5  | j                  t        d      5  d |_
        d d d        d d d        E t        j                  | t         j                         y # 1 sw Y   8xY w# 1 sw Y   xY w)N)ssl_typezimmutable type)_ssl_SSLContext
_SSLSocket	MemoryBIOCertificate
SSLSessionSSLErrorr   assertRaisesRegex	TypeErrorr   r   check_disallow_instantiation)r   	ssl_typesr   s      r!   test_ssl_typeszBasicSocketTests.test_ssl_typesc  s    OONNOOMM
	 " 	*Hx0 *++I7GH *%)HN** *	* 	,,T43C3CD* ** *s$   4CC
C
CCC	c                     | j                  t        d      5  t        j                         5 }t        j	                  |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wNzpublic constructor)r   r   socketr
   	SSLSocketr   ss     r!   test_private_initz"BasicSocketTests.test_private_initr  sY    ##I/CD 	! !Aa !	! 	!! !	! 	!s"   AAAA	AA(c                 2   t         j                  }| j                  t        |      d|j                  z         | j                  t        |      t        |j                               t         j                  |      }| j                  |j                  |       y )Nz$<_SSLMethod.PROTOCOL_TLS_CLIENT: %r>)	r
   ra   r   reprr   r\   rl   assertIsrd   r   protorT   s      r!   test_str_for_enumsz#BasicSocketTests.test_str_for_enumsw  sj     ''e&Lu{{&Z[US%56nnU#cllE*r#   c                 H   t         j                         }t        j                  r,t        j
                  j                  d||xr dxs dfz         |r1t         j                  d      }| j                  t        |      d       n/| j                  t         j                  t         j                  d       | j                  t        t         j                  d       t         j                  dd       t         j                  dd       t         j                  t        d	      d       y )
Nz
 RAND_status is %d (%s)
zsufficient randomnesszinsufficient randomness   zthis is a random stringg     R@s   this is a random bytes objects!   this is a random bytearray object)r
   RAND_statusr   r   r   r   r   
RAND_bytesr   rc   assertRaisesr   r   RAND_add	bytearray)r   vdatas      r!   test_randomzBasicSocketTests.test_random  s    OO??JJ: !A$A*A $: 9 ;; < >>"%DSY+cllCNNB? 	*cnnb9.55t<YCDdKr#   c                 ^   | j                  t        j                  j                  t              t
               | j                  t        j                  j                  t              t               t        j                  j                  t              }t        j                  r8t        j                  j                  dt        j                  |      z   dz          | j                  |d   d       | j                  |d   d       | j                  |d   d       | j                  |d   d	       y )
N
r7   ))r0   zprojects.developer.nokia.com)r0   zprojects.forum.nokia.comr;   )zhttp://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	NOKIACERTr   r   r   r   r   pprintpformatr   ps     r!   test_parse_certz BasicSocketTests.test_parse_cert  s     	HH&&x0	
 	HH&&7 	
 HH&&y1??JJTFNN1$55<=+,?	
 	6$AB;N	P23N	Pr#   c                    t         j                  j                  t              }t        j
                  r8t        j                  j                  dt        j                  |      z   dz          | j                  |dddddddd	       y )
Nr   ))r'   UK))r-   zcody-cazJun 14 18:00:58 2028 GMTzJun 18 18:00:58 2018 GMT02)r  ))r-   #codenomicon-vm-2.test.lal.cisco.com))r0   r	  r   r1   )r
   r   r   TALOS_INVALID_CRLDPr   r   r   r   r   r   r  r   r  s     r!   test_parse_cert_CVE_2019_5010z.BasicSocketTests.test_parse_cert_CVE_2019_5010  sw    HH&&':;??JJTFNN1$55<=L67 $H#E	
r#   c                    t         j                  j                  t              }t        j
                  r8t        j                  j                  dt        j                  |      z   dz          d}| j                  |d   |       | j                  |d   |       t         j                  dk\  rd}nd}| j                  |d   |       y )	Nr   )))r'   US))stateOrProvinceNameOregon))r*   	Beavertonr+   ))organizationalUnitNamezPython Core Development))r-   znull.python.org example.org))emailAddresszpython-dev@python.orgr6   r2   )r   	      )r0   zaltnull.python.org example.comemailz null@python.org user@example.orgURIz)http://null.python.org http://example.org
IP Addressz	192.0.2.1)r  z2001:DB8:0:0:0:0:0:1)r  r  r  r  )r  z	<invalid>r7   )r
   r   r   NULLBYTECERTr   r   r   r   r   r   r  r   _OPENSSL_API_VERSION)r   r  r6   sans       r!   test_parse_cert_CVE_2013_4238z.BasicSocketTests.test_parse_cert_CVE_2013_4238  s    HH&&|4??JJTFNN1$55<=A 	9w/8g.##y0;C0C 	+,c2r#   c                 t    t         j                  j                  t              }| j	                  |d   d       y )Nr7   )
)r0   allsans	othernamez<unsupported>r"  )r  zuser@example.org)r0   zwww.example.org)DirName)r&   r)   r+   ))r-   zdirname example)r  zhttps://www.python.org/)r  	127.0.0.1)r  z0:0:0:0:0:0:0:1)zRegistered IDz	1.2.3.4.5)r
   r   r   
ALLSANFILEr   r  s     r!   test_parse_all_sansz$BasicSocketTests.test_parse_all_sans  s1    HH&&z2+,	
r#   c                    t        t        d      5 }|j                         }d d d        t        j	                        }t        j                  |      }t        j	                  |      }| j                  ||       |j                  t        j                  dz         s| j                  d|z         |j                  dt        j                  z   dz         s| j                  d|z         y y # 1 sw Y   xY w)Nrr   z-DER-to-PEM didn't include correct header:
%r
z-DER-to-PEM didn't include correct footer:
%r
)rJ   CAFILE_CACERTrK   r
   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IIG"LM{{4#..0478IIG"LM 9	 	s   C,,C5c                 X   t         j                  }t         j                  }t         j                  }| 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
}	|dk\  rd|d
d|d
d|d
}
nd|d
d|d
d|d
}
| j                  |j                  |
|	df      ||t        |      f       y )Ni i   @      r      ?      z	LibreSSL dr   zOpenSSL .zAWS-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_version  s   &&$$a%a'a% 	:.:&+,(uc5&q)q!q)s#Q'S!q)UB'*VR("5),A:$U1IQuQiqq	BK$U1IQuQiqQ@KLL+|X>?3q6N	
r#   c                    t        j                   t         j                        }t        |      }t        j                  |      }t        j                  dt        f      5  ~d d d        | j                   |       d        y # 1 sw Y   !xY w)N )	r   AF_INETr   weakrefrefr   check_warningsResourceWarningr   )r   r   sswrs       r!   test_refcyclezBasicSocketTests.test_refcycle'  sj     MM&..)a [[_++R,AB 		t$	 	s   BB
c           	      `   t        j                   t         j                        }t        |      5 }| j                  t        |j
                  d       | j                  t        |j                  t        d             | j                  t        |j                  d       | j                  t        |j                  t        d      d       | j                  t        |j                  d       | j                  t        |j                  dd       | j                  t        |j                         | j                  t        |j                  dgddd       | j                  t        |j                  d       | j                  t        |j                   t        d      g       d d d        y # 1 sw Y   y xY w)Nr7     x)z0.0.0.0r   rX   r   d   )r   rT  r   r   OSErrorrecv	recv_intor   recvfromrecvfrom_intosendsendtoNotImplementedErrordupsendmsgrecvmsgrecvmsg_intor   r   rY  s      r!   test_wrapped_unconnectedz)BasicSocketTests.test_wrapped_unconnected2  s6    MM&..)a  	0Bgrww2gr||Yt_Egr{{A6gr'7'74!Lgrww5gryy$G1266:12::#fb!^=12::sC12??(~.0	0 	0 	0s   E,F$$F-c                     dD ]j  }t        j                   t         j                        }|j                  |       t        |      5 }| j	                  ||j                                d d d        l y # 1 sw Y   wxY w)N)Ng              @)r   rT  
settimeoutr   r   
gettimeout)r   timeoutr   rY  s       r!   test_timeoutzBasicSocketTests.test_timeoutD  sk     ( 	;Gfnn-ALL!!!$ ;  "--/:; ;	;; ;s   !A11A:	c                    t         j                  t         j                  t         j                  t         j                  g}t         j
                  t         j                  t         j                  t         j                  g}t         j                  j                  t         j                  j                  t         j                  j                  g}|D ]  }| j                  |      5  t         j                  t         j                        }| j!                  t"              5 }|xj$                  |z  c_        d d d        | j'                  dt)        j*                               d d d         |D ]  }t-        |      s| j                  |      5  | j!                  t"              5 }t         j                  |       d d d        | j'                  d|j.                   dt)        j*                               d d d         |D ]  }t1        |      s| j                  |      5  t         j                  t         j                        }| j!                  t"              5 }||_        d d d        |j4                  j6                  d|j.                  }	| j'                  d|	 dt)        j*                               d d d         y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   &xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nr   z4ssl.OP_NO_SSL*/ssl.OP_NO_TLS* options are deprecated)rd   r   z is deprecated)r8   r=  )r
   r   r   r   r   r   r   PROTOCOL_TLSv1_2r_   r   r   r   r   r   rl   ra   assertWarnsDeprecationWarningoptionsr   r\   warningre   r    rb   rP   	__class____name__)
r   rw  	protocolsversionsr   rT   cmrd   r8   version_texts
             r!   test_openssl111_deprecationsz-BasicSocketTests.test_openssl111_deprecationsM  s   OO	
     	
	 NN  NN  NN""
  	FV, nnS%<%<=%%&89 *RKK6)K*  J

O	 	 " 		H#H-x0 %%&89 -RNN8,-  8==/8

O 		   	G"7+g. nnS%<%<=%%&89 2R*1C'2*1*;*;*D*DgllS  <.7

O 	%* * - - 2 2 sm   !9KK 0-K
K' K6;K'9L K4AL  K
KK	K$K''K1	4K=9L  L
	c                    t         j                  j                  t         j                  j                  t              xs t         j
                  d|      }t        j                         }| j                  |j                         | j                  t        j                        5  t        ||       ddd       y# 1 sw Y   yxY w)z;Check that trying to use the given client certificate failsr   r   N)r   r   r   r   r   curdirr   
addCleanupcloser   r
   r   r   r   r   r   s      r!   bad_cert_testzBasicSocketTests.bad_cert_test  s    77<< 9 FRYY *H6}}

#s||, 	0T&.0	0 	0 	0s   #B::Cc                 &    | j                  d       y)z Wrapping with an empty cert filer?   Nr  r   s    r!   test_empty_certz BasicSocketTests.test_empty_cert  s    >*r#   c                 &    | j                  d       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                 &    | j                  d       y)z2Wrapping with a badly formatted key (syntax error)rA   Nr  r   s    r!   test_malformed_keyz#BasicSocketTests.test_malformed_key  s    <(r#   c                     t         j                  t         j                        }t        j                         5 }| j	                  t
        |j                  |dd       d d d        y # 1 sw Y   y xY w)NTzsome.hostnamer   )r
   rl   r`   r   r   r   r   )r   rT   r   s      r!   test_server_sidez!BasicSocketTests.test_server_side  sX    nnS445]]_ 	?j#//4.=  ?	? 	? 	?s   %A&&A/c                    t        j                  d      }t        j                   t         j                        }|j                  |j	                                t        |d      5 }| j                  t              5  |j                  d       d d d        d d d        |j                          y # 1 sw Y   "xY w# 1 sw Y   &xY w)Nr%  r   Fdo_handshake_on_connectzunknown-type)
r   create_serverrT  connectgetsocknamer   r   r   get_channel_bindingr  )r   r   crY  s       r!   test_unknown_channel_bindingz-BasicSocketTests.test_unknown_channel_binding  s      !12MM&..)			!--/"a? 	72"":. 7&&~67	7 	
	7 7	7 	7s$   %B:;B.B:.B7	3B::C
tls-unique*'tls-unique' channel binding not availablec                    t        j                   t         j                        }t        |      5 }| j                  |j	                  d             d d d        t        j                   t         j                        }t        |dt
              5 }| j                  |j	                  d             d d d        y # 1 sw Y   hxY w# 1 sw Y   y xY w)Nr  T)r   r   )r   rT  r   assertIsNoner  r   rk  s      r!   test_tls_unique_channel_bindingz0BasicSocketTests.test_tls_unique_channel_binding  s     MM&..)a  	DBb44\BC	D MM&..)aTHE 	Db44\BC	D 	D		D 	D	D 	Ds   !B7!C7C Cc                 V   t        t        j                  t        j                              }t        |      }| j	                  t
              5 }d }t        j                          d d d        | j                  |t        j                  j                  d                y # 1 sw Y   <xY wr   )r   r   rT  r   ru  rX  r   
gc_collectassertInr\   rx  rt   )r   rY  r)  r}  s       r!   test_dealloc_warnz"BasicSocketTests.test_dealloc_warn  sz    fmmFNN;<Ho. 	!"B 	! 	aRZZ__Q/01	! 	!s   BB(c                    t         j                         }| j                  t        |      d       | j	                  |t         j
                         t        j                         5 }t        |d<   t        |d<   t         j                         }| j                  |j                  t               | j                  |j                  t               d d d        y # 1 sw Y   y xY w)N   SSL_CERT_DIRSSL_CERT_FILE)r
   get_default_verify_pathsr   rc   rA  DefaultVerifyPathsr   EnvironmentVarGuardCAPATHr   cafiler%   )r   pathsenvs      r!   test_get_default_verify_pathsz.BasicSocketTests.test_get_default_verify_paths  s    ,,.UQ'eS%;%;<**, 	3"(C#+C 002EU\\84U\\62	3 	3 	3s   $A'CCr   Windows specificc                 (   | j                  t        j                  d             | j                  t        j                  d             | j                  t        t        j                         | j                  t
        t        j                  d       t               }dD ]  }t        j                  |      }| j                  |t               |D ]  }| j                  |t               | j                  t        |      d       |\  }}}| j                  |t               | j                  |ddh       | j                  |t        t        t        f       t!        |t        t        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)rF  r
   enum_certificatesr   r   WindowsErrorsetrA  listrC  r   rc   bytesr  	frozensetboolr[   update)	r   
trust_oids	storenamestoreelementcertenctrust
serverAuths	            r!   test_enum_certificatesz'BasicSocketTests.test_enum_certificates  s?   --d34--f56)S%:%:;,(=(=rBU
' 	-I)))4E!!%.  -%%gu5  Wq1#* c5%%dE2cJ#=>%%eid-CDei%56%%e,-	- )
j*-r#   c                    | j                  t        j                  d             | j                  t        t        j                         | j                  t
        t        j                  d       t        j                  d      }| j                  |t               |D ]c  }| j                  |t               | j                  t        |      d       | j                  |d   t               | j                  |d   ddh       e y )Nr  rS     r   r7  r  r  )rF  r
   	enum_crlsr   r   r  rA  r  rC  r   rc   r  r  )r   crlsr  s      r!   test_enum_crlszBasicSocketTests.test_enum_crls  s    d+,)S]]3,r:}}T"dD) 	BG!!'51S\1-!!'!*e4MM'!*z<&@A		Br#   c                    d}t         j                  d      }| j                  ||       | j                  |j                  d       | j                  |j                  d       | j                  |j
                  d       | j                  |j                  d       | j                  |t         j                         | j                  t        t         j                  d       t         j                  j                  d      }| j                  ||       | j                  |t         j                         | j                  t        t         j                  j                  d       | j                  t        d      5  t         j                  j                  d       d d d        t        d	      D ]  }	 t         j                  j                  |      }| j                  |j                  t               | j                  |j                  t               | j                  |j
                  t               | j                  |j                  t        t        d       f        t         j                  j!                  d      }| j                  ||       | j                  |t         j                         | j                  t         j                  j!                  d      |       | j                  t         j                  j!                  d      |       | j                  t        d
      5  t         j                  j!                  d       d d d        y # 1 sw Y   xY w# t        $ r Y w xY w# 1 sw Y   y xY w)N)   r  TLS Web Server Authenticationr  r  r  r  r  zunknown NID 100000i   zunknown object 'serverauth'
serverauth)r
   _ASN1Objectr   nid	shortnamelongnameoidrA  r   r   fromnidr   rangerB  r\   typefromname)r   expectedvaliobjs        r!   test_asn1objectz BasicSocketTests.test_asn1object  s   ) oo12h'#&5'FG"56c3??3*coo|Doo%%c*h'c3??3*coo&=&=rB##J0DE 	,OO##F+	,t 		BABoo--a0 %%cggs3%%cmmS9%%cllC8%%cggT$Z/@A		B oo&&'FGh'c3??311,?J112EF!	###J0MN 	3OO$$\2	3 	3'	, 	,
  	3 	3s*   5 M,M M#M	M M #M,c                 P   t         j                  d      }| j                  t         j                  j                  t         j                         | j                  t         j                  j                  |       | j                  t         j                  j                  j                  d       | j                  t         j                  j                  j                  d       | j                  t         j                  j                  j                  d       t         j                  d      }| j                  t         j                  j                  t         j                         | j                  t         j                  j                  |       | j                  t         j                  j                  j                  d       | j                  t         j                  j                  j                  d       | j                  t         j                  j                  j                  d       y )Nr  r  r  z1.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_enum  sX   oo12ckk55sG00#60044c:00::LI00441	3 oo12ckk55sG00#60044c:00::LI00441	3r#   c                 x   t        j                   t         j                  t         j                        }| j                  |j                         | j                  t              5 }t        |t        j                         d d d        | j                  t        j                        d       t        j                  t        j                        }| j                  t              5 }|j                  |       d d d        | j                  t        |j                        d       y # 1 sw Y   xY w# 1 sw Y   ;xY w)Nr   z!only stream sockets are supported)r   rT  
SOCK_DGRAMr  r  r   rf  r   r
   r   r   r\   r   rl   ra   r   )r   r   cxrT   s       r!   test_unsupported_dtlsz&BasicSocketTests.test_unsupported_dtls)  s    MM&..&*;*;< 23 	9rQ#--8	9R\\*,OPnnS44523 	rOOA	R\\*,OP	9 	9	 	s   #D$$D0$D-0D9c                 N    | j                  t        j                  |      |       y rW   )r   r
   cert_time_to_seconds)r   
timestring	timestamps      r!   cert_time_okzBasicSocketTests.cert_time_ok4  s    11*=yIr#   c                     | j                  t              5  t        j                  |       d d d        y # 1 sw Y   y xY wrW   )r   r   r
   r  )r   r  s     r!   cert_time_failzBasicSocketTests.cert_time_fail7  s3    z* 	1$$Z0	1 	1 	1s   5>z)local time needs to be different from UTCc                 L    | j                  dd       | j                  dd       y )NzMay  9 00:00:00 2007 GMTg   CA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&    
 	4lC4lCr#   c                    d}d}| j                  ||       | j                  t        j                  |      |       | j                  d|       | j                  d|       | j	                  d       | j	                  d       | j	                  d       | j	                  d	       | j	                  d
       | j	                  d       | j	                  d       d}| j                  d|       | j                  d|       | j                  dd       | j                  dd       | j                  dd       | j	                  d       | j                  dd       y )Nr  r  )	cert_timezJan 05 09:34:43 2018 GMTzJaN  5 09:34:43 2018 GmTzJan  5 09:34 2018 GMTzJan  5 09:34:43 2018zJan  5 09:34:43 2018 UTCzJan 35 09:34:43 2018 GMTzJon  5 09:34:43 2018 GMTzJan  5 24:00:00 2018 GMTzJan  5 09:60:43 2018 GMTg   WAzDec 31 23:59:60 2008 GMTzJan  1 00:00:00 2009 GMTzJan  5 09:34:59 2018 GMTiFOZzJan  5 09:34:60 2018 GMTiFOZzJan  5 09:34:61 2018 GMTiFOZzJan  5 09:34:62 2018 GMTzDec 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_secondsC  sA   /
*b)11J1GL4b94b934236767676767!
4jA4jA4jA4jA4jA67 	4nEr#   LC_ALLrS  c                     d } |       j                         dk(  r| j                  d       | j                  dd       | j                   |       dz          y )Nc                  .    t        j                  dd      S )Nz%b)	r7  r  r   r8     r  r   r   r   )r   strftimerX   r#   r!   local_february_namezNBasicSocketTests.test_cert_time_to_seconds_locale.<locals>.local_february_namej  s    =='BCCr#   febz>locale-specific month name needs to be different from C localezFeb  9 00:00:00 2007 GMTg   `rAz  9 00:00:00 2007 GMT)lowerskipTestr  r  )r   r  s     r!    test_cert_time_to_seconds_localez1BasicSocketTests.test_cert_time_to_seconds_localef  sZ    	D  &&(E1MM 4 5 	4lC/14KKLr#   c                 &   t        j                   t         j                        }| j                  |j                         t	        j
                  |      }t        t        j                   t         j                        t        j                        }| j                  |j                         |j                  t        |f      }t        j                  t        j                  t        j                  t        j                  f}| j!                  ||       y )Nr  )r   rT  r  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_erroru  s    v~~.%&&v.V]]6>>:&)&7&79 \\4,'  2 2EOO
 	b&!r#   c                    t               \  }}}t        |      }|5  |j                  t        j                         |      5 }|j	                  t
        |j                  f       | j                  |j                  d      d       | j                  |j                  d      d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r  r   r#   )
r   ThreadedEchoServerr   r   r  r
  r  r   r`  rd  r   r   r   r   r  r   s         r!   test_read_write_zeroz%BasicSocketTests.test_read_write_zero  s    3B3D0#N; 	1++FMMO<D , F 1IJ		4-.  C0  a0	1	1 	11 1	1 	1s$   &CA$B8'C8C	=CCN)2rz  
__module____qualname__r   r   r   r   r   r   r  r  r  r'  r5  rQ  r   cpython_onlyr[  rl  rr  r  r  r  r  r  r  r  rr   
skipUnlessr
   CHANNEL_BINDING_TYPESr  r  r  r   platformr  r  r  r  r  r  r  r   r  r  run_with_localer  r  r  rX   r#   r!   r   r   D  s   @(AE!
+L(P:
*3:
*
N!
F % %0$;3j0+*)? X)B)BBEGDGD2
3 X02DE. F.0 X02DEB FB%3N3"	QJ1 XDFDFD!FF WXr*M +M" 	1r#   r   c                      e Zd Zd Zd Z ej                  edk(  d      d        Zd Z	d Z
d Zd	 Zed
        Z ej                   eej"                  d      d      d        Zd Zd Zd Zd Z ej.                  ed      d        Zd Zd Z ej                  ej8                  d      d        Zd Zd Zd Z d Z!d Z" ej.                  e#jH                  dk(  d      d        Z% ej                  e#jH                  dk(  d        ej.                  e&jN                  d!      d"               Z(d# Z)d$ Z*d% Z+d& Z,d' Z-d( Z.d) Z/y*)+ContextTestsc                 H   t         D ]\  }t        |      st        j                         5  t        j                  |      }d d d        | j                  j                  |       ^ t        j                         5  t        j                         }d d d        | j                  j                  t        j                         | j                  t        t        j
                  d       | j                  t        t        j
                  d       y # 1 sw Y   xY w# 1 sw Y   xY w)Nr  *   )	PROTOCOLSre   r   rW  r
   rl   r   rd   r_   r   r   )r   rd   rT   s      r!   test_constructorzContextTests.test_constructor  s    ! 	9H)$335 3..2C3  x8		9
 ++- 	#.."C	#s'7'78*cnnb9*cnnb93 3	# 	#s   D:DD	D!c                    t         j                  t         j                        }|j                  d       |j                  d       | j	                  t         j
                  d      5  |j                  d       d d d        y # 1 sw Y   y xY w)NALLDEFAULTNo cipher can be selected^$:,;?*'dorothyx)r
   rl   ra   rR   r   r   r   rT   s     r!   test_cipherszContextTests.test_ciphers  se    nnS445	"##CLL2MN 	0OO./	0 	0 	0s   &BB
r7  z+Test applies only to Python default ciphersc                 6   t         j                  t         j                        }|j                         }|D ]a  }|d   }| j	                  d|       | j	                  d|       | j	                  d|       | j	                  d|       | j	                  d|       c y )Nr    PSKSRPMD5RC43DES)r
   rl   ra   get_ciphersassertNotIn)r   rT   r   suiter    s        r!   test_python_ciphersz ContextTests.test_python_ciphers  s     nnS445//# 	+E=DUD)UD)UD)UD)VT*	+r#   c           
      >   t         j                  t         j                        }|j                  d       t	        d |j                         D              }h d}|j                  |      }| j                  t        |      ddt        |       dt        |              y )NAESGCMc              3   &   K   | ]	  }|d      yw)r    NrX   ).0r<  s     r!   	<genexpr>z0ContextTests.test_get_ciphers.<locals>.<genexpr>  s     9!AfI9s   >   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
   rl   ra   rR   r  r4  intersectionr   rc   sorted)r   rT   namesr  rE  s        r!   test_get_cipherszContextTests.test_get_ciphers  s    nnS445!9s'899	
 ))(3qGF5M?,vhGWFX"Y	
r#   c                    t         j                  t         j                        }t         j                  t         j                  z  t         j
                  z  }|t        t        z  t        z  t        z  t        z  z  }| j                  ||j                         t        j                         5  |xj                  t         j                  z  c_        d d d        | j                  |t         j                  z  |j                         t        j                         5  |j                  t         j                   z  |_        d d d        | j                  ||j                         d|_        | j                  d|j                  t         j
                   z         | j!                  t"              5  d|_        d d d        | j!                  t"              5  ddz  |_        d d d        | j!                  t$              5  d|_        d d d        y # 1 sw Y   ;xY w# 1 sw Y   xY w# 1 sw Y   pxY w# 1 sw Y   TxY w# 1 sw Y   y xY w)Nr   r  r  r^  abc)r
   rl   ra   OP_ALLr   r   rB   rE   rC   rD   rF   r   rw  r   rW  r   r   OverflowErrorr   )r   rT   defaults      r!   r   zContextTests.test_options  s   nnS445::/#//A%(CC$%'9:./ 	0 	#++. ++- 	+KK3??*K	+3??2CKK@ ++- 	;;;#//)99CK	;#++. CKK3??*::; }- 	CK	}- 	#s(CK	#y) 	 CK	  	 '	+ 	+
	; 	;	 		# 	#	  	 s<   +$H$H*H!H-7H9HH!H*-H69Ic                    t        j                         5  t        j                  t        j                        }d d d        | j                  j                  t        j                         t        j                  |_        | j                  |j                  t        j                         t        j                  |_        | j                  |j                  t        j                         t        j                  |_        | j                  |j                  t        j                         | j                  t              5  d |_        d d d        | j                  t              5  d|_        d d d        t        j                  t        j                        }| j                  |j                  t        j                         | j                  |j                         t        j                  t        j                         }| j                  |j                  t        j                         | j#                  |j                         y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY wNr$  )r   rW  r
   rl   r_   r   r   r   r   r   r   r   r   r`   assertFalser   ra   rF  r,  s     r!   test_verify_mode_protocolz&ContextTests.test_verify_mode_protocol  s   ++- 	3..!1!12C	3 	#--8++#*;*;<++#*;*;<--#--8y) 	#"CO	#z* 	! CO	! nnS445#--8++,nnS445#*;*;<**++	3 	3	# 	#	! 	!s#   $I=I"IIII&c                    t         j                  t         j                        }| j                  |j                         t         j
                  rgd|_        | j                  |j                         d|_        | j                  |j                         d|_        | j                  |j                         y | j                  t              5  d|_        d d d        y # 1 sw Y   y xY wNTF)	r
   rl   ra   rF  hostname_checks_common_nameHAS_NEVER_CHECK_COMMON_NAMErP  r   AttributeErrorr,  s     r!    test_hostname_checks_common_namez-ContextTests.test_hostname_checks_common_name   s    nnS445778**.2C+OOC;;<.3C+S<<=.2C+OOC;;<"">2 726/7 7 7s   CC%c                 	   t         j                  t         j                        }t         j                  j                  t         j                  j
                  t         j                  j                  h}t         j                  j                  t         j                  j                  h}| j                  |j                  |       | j                  |j                  |       t         j                  j                  |_
        t         j                  j                  |_        | j                  |j                  t         j                  j                         | j                  |j                  t         j                  j                         t         j                  j                  |_
        t         j                  j
                  |_        | j                  |j                  t         j                  j                         | j                  |j                  t         j                  j
                         t         j                  j                  |_        | j                  |j                  t         j                  j                         t         j                  j                  |_        | j                  |j                  t         j                  j
                  t         j                  j                  t         j                  j                  h       t         j                  j                  |_
        | j                  |j                  t         j                  j                  t         j                  j                  h       | j                  t               5  d|_
        d d d        t#        t         j$                        rt         j                  t         j$                        }| j                  |j                  |       | j                  |j                  t         j                  j                         | j                  t               5  t         j                  j                  |_
        d d d        | j                  t               5  t         j                  j
                  |_        d d d        y y # 1 sw Y   xY w# 1 sw Y   UxY w# 1 sw Y   y xY wrO  )r
   rl   r`   r   rm   r   rk   rn   TLSv1_3r  rP   rh   r   r   r   r   r   re   r   )r   rT   minimum_rangemaximum_ranges       r!   test_min_max_versionz!ContextTests.test_min_max_version  sK   nnS445
 NN,,NN  NN""
 NN,,NN""	
 		
 		
 "nn44!nn44!7!7	
 	!7!7	
 "nn>>!nn22!A!A	
 	!5!5	
 "nn>>!A!A	
 "nn>>^^!!3>>#9#93>>;O;OP	

 "nn>>^^##S^^%;%;<	

 z* 	%"$C	% C001..!5!56CMM##] ##S^^%E%E "":. G&)nn&F&F#G"":. ;&)nn&:&:#; ; 2	% 	%G G; ;s$   R5 R)2 R5R&)R25R>security_levelzrequires OpenSSL >= 1.1.0c                     t         j                  t         j                        }h d}| j                  |j                  |       y )N>   r   r7  r  r   r8  r   )r
   rl   ra   r  r]  )r   rT   security_level_ranges      r!   test_security_levelz ContextTests.test_security_level]  s7    
 nnS445 
 	c((*>?r#   c                    t         j                  t         j                        }t        t         dd      }| j	                  |j
                  t         j                  |z         t         j                  |_        | j	                  |j
                  t         j                         t         j                  |_        | j	                  |j
                  t         j                         t         j                  |_        | j	                  |j
                  t         j                         t         j                  |_        | j	                  |j
                  t         j                         t         j                  t         j                  z  |_        | j	                  |j
                  t         j                  t         j                  z         | j                  t              5  d |_        d d d        y # 1 sw Y   y xY w)NVERIFY_X509_TRUSTED_FIRSTr   )r
   rl   r`   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_flagszContextTests.test_verify_flagsp  s]   nnS445S5q9))3+=+=+BC44))3+D+DE55))3+E+EF--))3+=+=>77))3+G+GH44s7M7MM))22S5K5KK	My) 	$#C	$ 	$ 	$s   G%%G.c                 *   t         j                  t         j                        }|j                  t        d        |j                  t        t               | j                  t        |j                  t               | j                  t              5 }|j                  t               d d d        | j                  j                  j                  t        j                         | j                  t         j                  d      5  |j                  t               d d d        | j                  t         j                  d      5  |j                  t                d d d        t         j                  t         j                        }|j                  t"        t$               |j                  t"        t$               |j                  t&        t(               | j                  t         j                  d      5  |j                  t"               d d d        | j                  t         j                  d      5  |j                  t$               d d d        | j                  t         j                  d      5  |j                  t$        t"               d d d        t         j                  t         j                        }t+        j,                  dt*        j.                        }| j                  t         j                  |      5  |j                  t0        t$               d d d        |j                  t2        t4               |j                  t2        t4        j7                                |j                  t2        t9        t4        j7                                      |j                  t"        t:        t4               |j                  t"        t:        t4        j7                                |j                  t"        t:        t9        t4        j7                                      | j                  t        d      5  |j                  t2        d       d d d        | j                  t         j                        5  |j                  t2        d       d d d        | j                  t<        d	      5  |j                  t2        d
dz         d d d        d }d }d }d }d }d }	d }
 G d d      }|j                  t2        |       |j                  t2        |       |j                  t2        |       |j                  t2         |              |j                  t2         |       j>                         | j                  t         j                        5  |j                  t2        |       d d d        | j                  t<        d	      5  |j                  t2        |       d d d        | j                  t        d      5  |j                  t2        |	       d d d        | j                  t@        d      5  |j                  t2        |
       d d d        |j                  t        |
       y # 1 sw Y   xY w# 1 sw Y   WxY w# 1 sw Y   &xY w# 1 sw Y   xY w# 1 sw Y   QxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   |xY w# 1 sw Y   JxY w# 1 sw Y   xY w# 1 sw Y   FxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)N)r   PEM (lib|routines)r   r   z|(
            key values mismatch         # OpenSSL
            |
            KEY_VALUES_MISMATCH         # AWS-LC
        ))passwordzshould be a stringTbadpasszcannot be longer   ai  c                      t         S rW   KEY_PASSWORDrX   r#   r!   getpass_unicodez:ContextTests.test_load_cert_chain.<locals>.getpass_unicode  s    r#   c                  *    t         j                         S rW   )rs  encoderX   r#   r!   getpass_bytesz8ContextTests.test_load_cert_chain.<locals>.getpass_bytes  s    &&((r#   c                  <    t        t        j                               S rW   )r   rs  rv  rX   r#   r!   getpass_bytearrayz<ContextTests.test_load_cert_chain.<locals>.getpass_bytearray  s    \00233r#   c                       y)Nro  rX   rX   r#   r!   getpass_badpassz:ContextTests.test_load_cert_chain.<locals>.getpass_badpass  s    r#   c                      ddz  S )Nrp  i   rX   rX   r#   r!   getpass_hugez7ContextTests.test_load_cert_chain.<locals>.getpass_huge  s    ;''r#   c                       y)Nr  rX   rX   r#   r!   getpass_bad_typez;ContextTests.test_load_cert_chain.<locals>.getpass_bad_type  s    r#   c                      t        d      )Ngetpass error)	ExceptionrX   r#   r!   getpass_exceptionz<ContextTests.test_load_cert_chain.<locals>.getpass_exception  s    O,,r#   c                       e Zd Zd Zd Zy):ContextTests.test_load_cert_chain.<locals>.GetPassCallablec                     t         S rW   rr  r   s    r!   __call__zCContextTests.test_load_cert_chain.<locals>.GetPassCallable.__call__      ##r#   c                     t         S rW   rr  r   s    r!   getpasszBContextTests.test_load_cert_chain.<locals>.GetPassCallable.getpass  r  r#   N)rz  r  r  r  r  rX   r#   r!   GetPassCallabler    s    $$r#   r  zmust return a stringr  )!r
   rl   r`   r   r   r   r   r_  NONEXISTINGCERTr   r   r  ENOENTr   r   BADCERT	EMPTYCERTONLYCERTONLYKEYBYTES_ONLYCERTBYTES_ONLYKEYrecompileXr*  CERTFILE_PROTECTEDrs  rv  r   ONLYKEY_PROTECTEDr   r  r  )r   rT   r}  regexrt  rw  ry  r{  r}  r  r  r  s               r!   test_load_cert_chainz!ContextTests.test_load_cert_chain  s   nnS445Hd3Hh7)S%8%8(Kw' 	120	1++U\\:##CLL2FG 	)(	)##CLL2FG 	+	*	+ nnS445Hg.Xw?^]K##CLL2FG 	*)	*##CLL2FG 	)(	)##CLL2FG 	D(C	D nnS445

  dd	
 ##CLL%8 	8w7	8 	.F.9L9L9NO.%.|/B/B/D%E 	 	GH&7FH&79L9L9NOH&7%l&9&9&;<	>##I/CD 	C 2TB	Cs||, 	H 2YG	H##J0BC 	L  2TF]K		L	 	)	4		(		-	$ 	$
 	.I.G.9JK.9JK.%4%6%>%> 	 	@s||, 	N 2_M	N##J0BC 	K 2\J	K##I/EF 	O 2=MN	O##I? 	P 2=NO	P 	H/@Ac	1 	1	) 	)	+ 	+	* 	*	) 	)	D 	D	8 	8	C 	C	H 	H	L 	L>	N 	N	K 	K	O 	O	P 	Ps   Y!Y.Y;2Z0Z.Z"9Z/*Z<)[	[[#=[03[=)\	!Y+.Y8;ZZZ"Z,/Z9<[	[[ #[-0[:=\	\c                    t         j                  t         j                        }|j                  t               |j                  t        d        |j                  t
               |j                  t
        d        | j                  t        |j                         | j                  t        |j                  d d d        | j                  t              5 }|j                  t               d d d        | j                  j                  j                  t        j                         | j                  t         j                  d      5  |j                  t                d d d        |j                  t        t"               |j                  t        t$               | j                  t        |j                  d d       y # 1 sw Y   xY w# 1 sw Y   mxY w)N)r  r%   rl  r%   T)r
   rl   r`   r   r   BYTES_CERTFILEr   r   r_  r  r   r   r  r  r   r   r  r  BYTES_CAPATHr   rT   r}  s      r!   test_load_verify_locationsz'ContextTests.test_load_verify_locations  sR   nnS445!!(+!!$!?!!.1!!!E)S%>%>?)S%>%>dDQw' 	72%%o6	7++U\\:##CLL2FG 	/%%g.	/!!(F3!!(<!@ 	)S%>%>dK	7 	7	/ 	/s   F<G<GGc                  	   t        t              5 }|j                         }d d d        t        j	                        }t        t
              5 }|j                         }d d d        t        j	                        }t        j                  t        j                        }| j                  |j                         d   d       |j                  |       | j                  |j                         d   d       |j                  |       | j                  |j                         d   d       |j                  |       | j                  |j                         d   d       t        j                  t        j                        }dj                  ||f      }|j                  |       | j                  |j                         d   d       t        j                  t        j                        }d|d|d	|d
g}|j                  dj                  |             | j                  |j                         d   d       t        j                  t        j                        }|j                  |       |j                  |       | j                  |j                         d   d       |j                  |       | j                  |j                         d   d       t        j                  t        j                        }dj                  ||f      }|j                  |       | j                  |j                         d   d       t        j                  t        j                        }| j                  t        |j                  t               | j                  t        j                   d      5  |j                  d       d d d        | j                  t        j                   d      5  |j                  d       d d d        | j                  t        j                         5  |j                  |dz          d d d        y # 1 sw Y   #xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   mxY w# 1 sw Y   y xY w)Nx509_car   cadatar7  r  r   headotheragaintailr#   z4no start line: cadata does not contain a certificatebrokenz6not enough data: cadata does not contain a certificates   broken   A)rJ   r*  rK   r
   r+  CAFILE_NEURONIOrl   ra   r   cert_store_statsr   r   r   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668L	$//= nnS445--/	:A>!!!4--/	:A>!!!6--/	:A>!!!6--/	:A> nnS44599j,78!!!2--/	:A> nnS445Jw &*!!8)<!=--/	:A> nnS445!!!4!!!6--/	:A>!!!4--/	:A> nnS44588Z67!!!2--/	:A> nnS445)S%>%>vN##LLB
 	7 %%X%6		7
 ##LLD
 	8 %%Y%7		8
 s||, 	@%%Z$->%?	@ 	@y	" 	"	$ 	$^	7 	7
	8 	8
	@ 	@s;   QQ.Q)Q(#Q4QQQ%(Q14Q=)Avoid mixing debug/release CRT on Windowsc                    t         j                  t         j                        }|j                  t               t
        j                  dk7  r|j                  t               | j                  t        |j                         | j                  t        |j                  d        | j                  t              5 }|j                  t               d d d        | j                  j                  j                  t        j                         | j                  t         j                         5 }|j                  t"               d d d        y # 1 sw Y   {xY w# 1 sw Y   y xY w)Nnt)r
   rl   r`   load_dh_paramsDHFILEr   r    BYTES_DHFILEr   r   rL   r  r   r   r  r  r   r   r  s      r!   test_load_dh_paramsz ContextTests.test_load_dh_params1  s    nnS4456"77d?|,)S%7%78)S%7%7>01 	0R/	0++U\\:s||, 	)x(	) 	)	0 	0	) 	)s   7E(EEEc                     t         j                  t         j                  hD ]C  }t         j                  |      }| j	                  |j                         dddddddddddd       E y )Nr   )numberr  connect_goodconnect_renegotiateacceptaccept_goodaccept_renegotiatehitsmissestimeouts
cache_full)r
   ra   r`   rl   r   session_statsr   s      r!   test_session_statszContextTests.test_session_stats?  so    --s/F/FG 	E..'CS..0 !'( &'3 	r#   c                 j    t         j                  t         j                        }|j                          y rW   )r
   rl   ra   set_default_verify_pathsr,  s     r!   test_set_default_verify_pathsz*ContextTests.test_set_default_verify_pathsP  s$     nnS445$$&r#   z#ECDH disabled on this OpenSSL buildc                    t         j                  t         j                        }|j                  d       |j                  d       | j	                  t
        |j                         | j	                  t
        |j                  d        | j	                  t        |j                  d       | j	                  t        |j                  d       y )N
prime256v1s
   prime256v1foo   foo)r
   rl   r`   set_ecdh_curver   r   r   r,  s     r!   test_set_ecdh_curvez ContextTests.test_set_ecdh_curveV  s    nnS445<(=))S%7%78)S%7%7>*c&8&8%@*c&8&8&Ar#   c                    t         j                  t         j                        }| j                  t        |j
                         | j                  t        |j
                  d       | j                  t        |j
                  d       | j                  t        |j
                  |       d }|j                  d        |j                  |       y )Nr8  rS  c                      y rW   rX   )r   
servernamerT   s      r!   dummycallbackz5ContextTests.test_sni_callback.<locals>.dummycallbacki      r#   )r
   rl   r`   r   r   set_servername_callback)r   rT   r  s      r!   test_sni_callbackzContextTests.test_sni_callback`  s    nnS445 	)S%@%@A)S%@%@!D)S%@%@"E)S%@%@#F	##D)##M2r#   c                     t         j                  t         j                        }|fd}|j                  |       t	        j
                  |      }~~t        j                          | j                   |       d        y )Nc                      y rW   rX   )r   r  rT   cycles       r!   r  z>ContextTests.test_sni_callback_refcycle.<locals>.dummycallbackr  r  r#   )	r
   rl   r`   r  rU  rV  gccollectr   )r   rT   r  rZ  s       r!   test_sni_callback_refcyclez'ContextTests.test_sni_callback_refcyclen  sZ     nnS4457: 	##M2[[


bdD!r#   c                    t         j                  t         j                        }| j                  |j	                         dddd       |j                  t               | j                  |j	                         dddd       |j                  t               | j                  |j	                         dddd       |j                  t               | j                  |j	                         dddd       y )Nr   )r  crlx509r7  r  )	r
   rl   ra   r   r  r   r   r   r*  r,  s     r!   test_cert_store_statsz"ContextTests.test_cert_store_statsz  s    nnS445--/!Q/	1H%--/!Q/	1!!(+--/!Q/	1!!-0--/!Q/	1r#   c                 F   t         j                  t         j                        }| j                  |j	                         g        |j                  t               | j                  |j	                         g        |j                  t               | j                  |j	                         ddddddddg       t        t              5 }|j                         }d d d        t         j                        }| j                  |j	                  d      |g       y # 1 sw Y   AxY w)	N)))r,   zRoot CA))r  zhttp://www.cacert.org))r-   zCA Cert Signing Authority))r  zsupport@cacert.orgzMar 29 12:29:49 2033 GMTzMar 30 12:29:49 2003 GMT00)z!https://www.cacert.org/revoke.crlr   )r2   r3   r4   r5   r=   r6   r8   T)r
   rl   ra   r   get_ca_certsr   r   r*  rJ   rK   r+  )r   rT   rM   r1  ders        r!   test_get_ca_certszContextTests.test_get_ca_certs  s    nnS445))+R0!!(+))+R0!!-0))+D 55"'ME  	 -  	A&&(C	&&s+))$/#7	 	s   DD c                    t         j                  t         j                        }|j                          t         j                  t         j                        }|j                  t         j                  j
                         |j                          t         j                  t         j                        }|j                  t         j                  j                         t         j                  t         j                        }| j                  t        |j                  d        | j                  t        |j                  d       y )Nr  )	r
   rl   ra   load_default_certsr  r  r  r   r   r,  s     r!   test_load_default_certsz$ContextTests.test_load_default_certs  s    nnS445 nnS445s{{667 nnS445s{{667nnS445)S%;%;TB)S%;%;]Kr#   r   znot-Windows specificc                 (   t         j                  t         j                        }t        j                         5 }t
        |d<   t        |d<   |j                          | j                  |j                         dddd       d d d        y # 1 sw Y   y xY w)Nr  r  r   r7  )r  r  r  )
r
   rl   ra   r   r  r  r   r  r   r  )r   rT   r  s      r!   test_load_default_certs_envz(ContextTests.test_load_default_certs_env  s~    nnS445**, 	Z"(C#+C ""$S113QVW5XY		Z 	Z 	Zs   ABBr  z3Debug build does not share environment between CRTsc                    t         j                  t         j                        }|j                          |j	                         }t         j                  t         j                        }t        j                         5 }t        |d<   t        |d<   |j                          |dxx   dz  cc<   | j                  |j	                         |       d d d        y # 1 sw Y   y xY w)Nr  r  r  r7  )
r
   rl   ra   r  r  r   r  r  r   r   )r   rT   statsr  s       r!   #test_load_default_certs_env_windowsz0ContextTests.test_load_default_certs_env_windows  s     nnS445 $$&nnS445**, 	<"(C#+C ""$&MQMS113U;	< 	< 	<s   ;ACCc                    | j                  |j                  t        j                  z  t        j                         t        dk7  r'| j                  |j                  t        z  t               t
        dk7  r'| j                  |j                  t
        z  t
               t        dk7  r'| j                  |j                  t        z  t               t        dk7  r'| j                  |j                  t        z  t               | j                  |j                  t        j                  z  t        rd       y t        j                         y r   )
r   rw  r
   r   rB   rC   rD   rE   OP_LEGACY_SERVER_CONNECTrj   r,  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474P4P	Rr#   c                    t         j                         }| j                  |j                  t         j                         | j                  |j
                  t         j                         | j                  |j                         | j                  |       t        t              5 }|j                         }d d d        t         j                  t        t              }| j                  |j                  t         j                         | j                  |j
                  t         j                         | j                  |       t         j                  t         j                  j                        }| j                  |j                  t         j                          | j                  |j
                  t         j"                         | j                  |       y # 1 sw Y   "xY w)N)r  r%   r  )r
   create_default_contextr   rd   ra   r   r   rF  r   r  rJ   r   rK   r  r  r  r`   r   )r   rT   rM   r  s       r!   test_create_default_contextz(ContextTests.test_create_default_context  sF   ((*s'>'>?#*;*;<**+$$S)* 	VVXF	((
606 ) 8s'>'>?#*;*;<$$S)(()@)@As'>'>?#--8$$S)	 	s   $GGc                    t         j                         }| j                  |j                  t         j                         | j                  |j
                  t         j                         | j                  |j                         | j                  |       t        t         j                        rt        j                         5  t         j                  t         j                        }d d d        | j                  |j                  t         j                         | j                  |j
                  t         j                         | j                  |       t        j                         5  t         j                  t         j                  t         j                  d      }d d d        | j                  |j                  t         j                         | j                  |j
                  t         j                         | j!                  |j                         | j                  |       t         j                  t         j"                  j$                        }| j                  |j                  t         j&                         | j                  |j
                  t         j                         | j                  |       y # 1 sw Y   xY w# 1 sw Y   +xY w)NT)r   r   )purpose)r
   _create_stdlib_contextr   rd   ra   r   r   rP  r   r  re   r   r   rW  rt  r   rF  r  r  r`   r,  s     r!   test__create_stdlib_contextz(ContextTests.test__create_stdlib_context  s   ((*s'>'>?#--8++,$$S)C../ //1 E001C1CDES\\3+=+=>S__cmm<((-++- 	,,$$++# - C	 	s';';<#*;*;<**+$$S)((1H1H(Is'>'>?#--8$$S))E E	 	s   $J8'5K8KKc                    t        j                         5  t        j                  t        j                        }d d d        | j                  j                         | j                  |j                  t        j                         d|_        | j                  |j                         | j                  |j                  t        j                         d|_        t        j                  |_        | j                  |j                         | j                  |j                  t        j                         d|_        t        j                  |_        d|_        | j                  |j                         | j                  |j                  t        j                         d|_        | j                  |j                         | j                  |j                  t        j                         d|_        t        j                  |_        d|_        | j                  |j                         | j                  |j                  t        j                         d|_        | j                  |j                         | j                  |j                  t        j                         | j                  t              5  t        j                  |_        d d d        d|_        | j                  |j                         t        j                  |_        | j                  |j                  t        j                         y # 1 sw Y   xY w# 1 sw Y   xxY wrS  )r   rW  r
   rl   r_   rP  r   r   r   r   rF  r   r   r   r   r,  s     r!   test_check_hostnamez ContextTests.test_check_hostname  sI   ++- 	3..!1!12C	3++,#--8 "**+#*;*;<"++++,#*;*;< #--"++,#--8!**+#*;*;<"++"++,#*;*;<!**+#*;*;< z* 	,!mmCO	,"++,--#--8S	3 	3H	, 	,s   $L00L=0L:=Mc                    t         j                  t         j                        }| j                  |j                         | j                  |j                  t         j                         t         j                  t         j                        }| j                  |j                         | j                  |j                  t         j                         y rW   )r
   rl   ra   rF  r   r   r   r   r`   rP  r   r,  s     r!   test_context_client_serverz'ContextTests.test_context_client_server<  s    nnS445**+#*;*;< nnS445++,#--8r#   c                     G d dt         j                        } G d dt         j                        }t         j                  t         j                        }||_        ||_        |j                  t        j                         d      5 }| j                  ||       d d d        |j                  t         j                         t         j                         d      }| j                  ||       y # 1 sw Y   TxY w)Nc                       e Zd Zy);ContextTests.test_context_custom_class.<locals>.MySSLSocketNrz  r  r  rX   r#   r!   MySSLSocketr  H      r#   r  c                       e Zd Zy);ContextTests.test_context_custom_class.<locals>.MySSLObjectNr   rX   r#   r!   MySSLObjectr  K  r  r#   r  Tr   )r
   r   	SSLObjectrl   r`   sslsocket_classsslobject_classr   r   rA  wrap_bior   )r   r  r  rT   r   r  s         r!   test_context_custom_classz&ContextTests.test_context_custom_classG  s    	#-- 		#-- 	 nnS445))__V]]_$_? 	54!!$4	5ll3==?CMMOlNc;/	5 	5s   	C//C8c                    t         j                  t         j                        }| j                  |j                  d       d|_        | j                  |j                  d       d|_        | j                  |j                  d       | j                  t              5  d|_        d d d        | j                  t              5  d |_        d d d        t         j                  t         j                        }| j                  |j                  d       | j                  t              5  d|_        d d d        y # 1 sw Y   xY w# 1 sw Y   zxY w# 1 sw Y   y xY w)Nr  r7  r   r  )	r
   rl   r`   r   num_ticketsr   r   r   ra   r,  s     r!   test_num_tickestzContextTests.test_num_tickestW  s   nnS445!,!,!,z* 	! CO	!y) 	#"CO	# nnS445!,z* 	 CO	  	 	! 	!	# 	#
	  	 s$   D5 E$E5D>E
EN)0rz  r  r  r&  r-  rr   r  r   r7  rH  r   rQ  rW  ignore_deprecationr\  rQ   r
   rl   r`  rj  r  r  r  skipIfPy_DEBUG_WIN32r  r  r  r   r  r  r  r  r  r  r   r  r  r   Py_DEBUGr  r  r  r  r  r  r  r  rX   r#   r!   r"  r"    s   
:0 X/14FH	+H	+
&  D,07 L; L;\ X 01#@	@$(WBrL&?@B X__^%PQ) R)"' X'LMB NB3
"188L X__S\\W,.DEZ FZ X02DEX__W%%JL<L F<R"***<*9X	90  r#   r"  c                   P    e Zd Zd Z ej
                  ed      d        Zd Zd Z	y)SSLErrorTestsc                 8   t         j                  dd      }| j                  t        |      d       | j                  |j                  d       t         j                  dd      }| j                  t        |      d       | j                  |j                  d       y )Nr7  r  )r
   r   r   r\   r  SSLZeroReturnError)r   es     r!   test_strzSSLErrorTests.test_strk  st    LLE"Q'!$""1e,Q'!$r#   r  c                    t         j                  t         j                        }| j                  t         j                        5 }|j                  t               d d d        | j                  j                  j                  d       d}| j                  |j                  j                  |       t        |j                        }| j                  d|v |       y # 1 sw Y   xY w)NPEMz+(NO_START_LINE|UNSUPPORTED_PUBLIC_KEY_TYPE)NO_START_LINE)r
   rl   ra   r   r   r  r   r   r   libraryassertRegexreasonr\   rF  )r   rT   r}  r  r   s        r!   test_lib_reasonzSSLErrorTests.test_lib_reasonu  s     nnS445s||, 	)x(	)--u5=,,e41,a0	) 	)s   CC"c                    t         j                  t         j                        }d|_        t         j                  |_        t        j                  d      5 }t        j                  |j                               }|j                  d       |j                  |dd      5 }| j                  t         j                        5 }|j                          d d d        t        j                         }| j#                  |j%                  d      |       | j'                  |j                   j(                  t         j*                         d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)NFr  r  z%The operation did not complete (read))r
   rl   ra   r   r   r   r   r  create_connectionr  setblockingr   r   SSLWantReadErrordo_handshaker\   r   rF  r]   r   r  SSL_ERROR_WANT_READ)r   rT   r   r  r}  s        r!   test_subclasszSSLErrorTests.test_subclass  s&    nnS445"--!!"23 		Nq((9AMM% E5I NQ&&s';';< %NN$%%-T UWXY  !3!3S5L5LMN		N 		N% %N N		N 		Ns>   A	E* E>EA2EE*EEE'	#E**E3c                 x   t         j                         }| j                  t              5  |j	                  t         j                         t         j                         d       d d d        | j                  t              5  |j	                  t         j                         t         j                         d       d d d        | j                  t              5  |j	                  t         j                         t         j                         d       d d d        y # 1 sw Y   xY w# 1 sw Y   lxY w# 1 sw Y   y xY w)NrS  r  z.example.orgzexample.org evil.com)r
   r  r   r   r
  r   r   r,  s     r!   test_bad_server_hostnamez&SSLErrorTests.test_bad_server_hostname  s    ((*z* 	-LL#--/)+  -	- z* 	9LL#--/)7  9	9 y) 	DLL#--/)B  D	D 	D	- 	-	9 	9	D 	Ds#   9D 9D$9D0D!$D-0D9N)
rz  r  r  r  rr   r  r  r  r&  r(  rX   r#   r!   r  r  i  s6    % X__^%PQ	1 R	1N$
Dr#   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)MemoryBIOTestsc                 z   t         j                         }|j                  d       | j                  |j	                         d       | j                  |j	                         d       |j                  d       |j                  d       | j                  |j	                         d       | j                  |j	                         d       |j                  d       | j                  |j	                  d      d       | j                  |j	                  d      d	       | j                  |j	                  d      d       y )
Nr  r#      bars   foobar   bazr  s   bar7     z)r
   r   r   r   rK   r   bios     r!   test_read_writezMemoryBIOTests.test_read_write  s    mmo		&V,S)		&		&Y/S)		&!e,!d+!c*r#   c                    t         j                         }| j                  |j                         | j	                  |j                         d       | j                  |j                         |j                  d       | j                  |j                         |j                          | j                  |j                         | j	                  |j                  d      d       | j                  |j                         | j	                  |j                  d      d       | j                  |j                         | j	                  |j                         d       | j                  |j                         y )Nr#   r  r  s   for7     o)	r
   r   rP  eofr   rK   r   	write_eofrF  r/  s     r!   test_eofzMemoryBIOTests.test_eof  s    mmo!S)!		&!!!e,!!d+ S) r#   c                    t         j                         }| j                  |j                  d       |j	                  d       | j                  |j                  d       t        d      D ]5  }|j                  d       | j                  |j                  d|z
  dz
         7 t        d      D ]2  }|j	                  d       | j                  |j                  |dz          4 |j                          | j                  |j                  d       y )Nr   r  r   r7  r]  )r
   r   r   pendingr   r  rK   )r   r0  r  s      r!   test_pendingzMemoryBIOTests.test_pending  s    mmoa(		&a(q 	1AHHQKS[[!A#a%0	1 q 	/AIIdOS[[!A#.	/ 	
a(r#   c                 6   t         j                         }|j                  d       | j                  |j	                         d       |j                  t        d             | j                  |j	                         d       |j                  t        d             | j                  |j	                         d       t        t        d            }|d d d   }| j                  t              5  |j                  t        |             d d d        y # 1 sw Y   y xY w)Nr  r,  r-  s	   noncontig)	r
   r   r   r   rK   r   
memoryviewr   BufferError)r   r0  mnoncontig_writables       r!   test_buffer_typesz MemoryBIOTests.test_buffer_types  s    mmo		&V,		)F#$V,		*V$%V,y./ttW{+ 	6IIj!345	6 	6 	6s   +DDc                 4   t         j                         }| j                  t        |j                  d       | j                  t        |j                  d        | j                  t        |j                  d       | j                  t        |j                  d       y )Nr  Tr7  )r
   r   r   r   r   r/  s     r!   test_error_typeszMemoryBIOTests.test_error_types  se    mmo)SYY6)SYY5)SYY5)SYY2r#   N)rz  r  r  r1  r6  r9  r@  rB  rX   r#   r!   r*  r*    s    +! )63r#   r*  c                       e Zd Zd Zd Zy)SSLObjectTestsc                     t         j                         }| j                  t        d      5  t         j	                  ||       d d d        y # 1 sw Y   y xY wr   )r
   r   r   r   r  r/  s     r!   r   z SSLObjectTests.test_private_init  sA    mmo##I/CD 	$MM#s#	$ 	$ 	$s   AAc                    t               \  }}}t        j                         }t        j                         }t        j                         }t        j                         }|j                  |||      }|j                  ||d      }	t	        d      D ]{  }
	 |j                          |j                  r|j                  |j                                	 |	j                          |j                  s]|j                  |j                                } |j                          |	j                          | j                  t        j                        5  |j                          d d d        |j                  |j                                |	j                          |j                  |j                                |j                          y # t        j                  $ r Y 7w xY w# t        j                  $ r Y w xY w# 1 sw Y   xY w)Nr  Tr  r   )r   r
   r   r
  r  r$  r#  r8  r   rK   r   unwrap)r   
client_ctx
server_ctxr   c_inc_outs_ins_outclientr  _s              r!   test_unwrapzSSLObjectTests.test_unwrap  s   +:+<(
J}}}}$$T5($K$$T5d$C q 	)A##% }}

5::<(##% }}

5::<(	) 	 s334 	MMO	
 	

5::<  	

5::< 7 ''  '' 	 	s0   GG!G;GG!G87G8;HN)rz  r  r  r   rP  rX   r#   r!   rD  rD    s    $
(r#   rD  c                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Z ej                  ej                   dk(  d      d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)SimpleBackgroundTestsz?Tests that connect to a simple server running in the backgroundc                    t         j                  t         j                        | _        | j                  j	                  t
               t        | j                        }| j                  |       t        |j                  f| _
        y )Nr  )r
   rl   r`   r   r   r   r  enterContextr
  r  server_addr)r   r  s     r!   setUpzSimpleBackgroundTests.setUp  s\    !nnS-D-DE++O<#D,?,?@&! &++.r#   c                    t        t        j                  t        j                        t        j                        5 }|j                  | j                         | j                  i |j                                | j                  |j                         d d d        t        t        j                  t        j                        t        j                  t              5 }|j                  | j                         | j                  |j                                | j                  |j                         d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r   r   )r   r   rT  r
   r   r  rU  r   getpeercertrP  r   r   r   rF  r   s     r!   test_connectz"SimpleBackgroundTests.test_connect  s    fmmFNN;&)mm5 	,89IId&&'R1Q]]+		, fmmFNN;&)&7&7%/1 	,45IId&&'OOAMMO,Q]]+	, 	,	, 	,	, 	,s   AD<AE<EEc                 f   t        t        j                  t        j                        t        j                        }| j                  |j                         t        j                  dt        j                        }| j                  t        j                  ||j                  | j                         y )Nr  |(
            certificate verify failed   # OpenSSL
            |
            CERTIFICATE_VERIFY_FAILED   # AWS-LC
        ))r   r   rT  r
   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 

  dd	
 	s||U yy$*:*:	<r#   c                 P   t        t        j                  t        j                        t        j                  t
              }| j                  |j                         | j                  d|j                  | j                               | j                  |j                                y )NrX  r   )r   r   rT  r
   r   r   r  r  r   r	  rU  rF  rY  r   s     r!   test_connect_exz%SimpleBackgroundTests.test_connect_ex<  sj    V]]6>>:&)&7&7%/1 	 ALL)9)9:;(r#   c                    t        t        j                  t        j                        t        j                  t
        d      }| j                  |j                         |j                  d       |j                  | j                        }| j                  |dt        j                  t        j                  f       t        j                  g |gg d       	 	 |j!                          	 | j'                  |j)                                y # t        j"                  $ r t        j                  |gg g d       Y n1t        j$                  $ r t        j                  g |gg d       Y nw xY w)NF)r   r   r  r   rn  )r   r   rT  r
   r   r   r  r  r"  r	  rU  r  r  EINPROGRESSr  selectr$  r#  SSLWantWriteErrorrF  rY  r   r   r  s      r!   test_non_blocking_connect_exz2SimpleBackgroundTests.test_non_blocking_connect_exE  s    V]]6>>:&)&7&7%/49; 	 	e\\$**+b1e//1B1BCDb1#r3'0  	( '' 0qc2r3/(( 0b1#r3/0 s   D ,E#5+E#"E#c                    t         j                  t         j                        }d|_        t         j                  |_        |j                  t        j                  t        j                              5 }|j                  | j                         | j                  i |j                                d d d        |j                  t        j                  t        j                        d      5 }|j                  | j                         d d d        t         j                  |_        |j                  t               |j                  t        j                  t        j                              5 }|j                  | j                         |j                         }| j!                  |       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)NFdummyr  )r
   rl   ra   r   r   r   r   r   rT  r  rU  r   rY  r   r   r   rF  r   rT   r   r  s       r!   test_connect_with_contextz/SimpleBackgroundTests.test_connect_with_context_  sK   nnS445"--__V]]6>>:; 	2qIId&&'R1	2 __V]]6>>:,3  5 	(89IId&&'	( ++!!*-__V]]6>>:; 	"qIId&&'==?DOOD!	" 	"	2 	2	( 	(	" 	"s$   2<F0*F=*=G	0F:=G	Gc                    t         j                  t         j                        }|j                  t	        j                  t        j
                        t              }| j                  |j                         t        j                  dt        j                        }| j                  t         j                  ||j                  | j                         y )Nr  r\  )r
   rl   ra   r   r   rT  r   r  r  r  r  r  r   r   r  rU  )r   rT   r   r  s       r!   test_connect_with_context_failz4SimpleBackgroundTests.test_connect_with_context_fails  s     nnS445OOMM&..)4  
 	 

  dd	
 	s||U !		4+;+;	=r#   c                    t         j                  t         j                        }|j                  t               |j                  t        j                  t        j                        t              5 }|j                  | j                         |j                         }| j                  |       d d d        t         j                  t         j                        }|j                  t               |j                  t        j                  t        j                        t              5 }|j                  | j                         |j                         }| j                  |       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r  )r
   rl   ra   r   r  r   r   rT  r   r  rU  rY  rF  r  rh  s       r!   test_connect_capathz)SimpleBackgroundTests.test_connect_capath  s    nnS445!!!0__V]]6>>:-E  G 	"JKIId&&'==?DOOD!		" nnS445!!!6__V]]6>>:-E  G 	"JKIId&&'==?DOOD!		" 	"	" 	"	" 	"s   2=E.(=E:.E7:Fc                    t        t              5 }|j                         }d d d        t        j	                        }t        j                  t        j                        }|j                  |       |j                  t        j                  t        j                        t              5 }|j                  | j                         |j                         }| j                  |       d d d        t        j                  t        j                        }|j                  |       |j                  t        j                  t        j                        t              5 }|j                  | j                         |j                         }| j                  |       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r  )rJ   r   rK   r
   r+  rl   ra   r   r   r   rT  r   r  rU  rY  rF  )r   rM   r1  r  rT   r   r  s          r!   test_connect_cadataz)SimpleBackgroundTests.test_connect_cadata  sW   * 	&&(C	&&s+nnS445!!!-__V]]6>>:-E  G 	"JKIId&&'==?DOOD!		" nnS445!!!-__V]]6>>:-E  G 	"JKIId&&'==?DOOD!		" 	"	 	
	" 	"	" 	"s#   F#+=F0=F<#F-0F9<Gr  z*Can't use a socket as a file under Windowsc                 N   t        t        j                  t        j                              }|j                  | j                         |j                         }|j                         }|j                          t        j                  |d       |j                          t        j                          | j                  t              5 }t        j                  |d       d d d        | j                  j                  j                   t         j"                         y # 1 sw Y   >xY wr   )r   r   rT  r  rU  filenomakefiler  r   rK   r  r  r   r_  r   r   r  EBADF)r   rY  fdrM   r  s        r!   test_makefile_closez)SimpleBackgroundTests.test_makefile_close  s    
 fmmFNN;<


4##$YY[KKM		
A




w' 	1GGBN	**EKK8	 	s   DD$c                 f   t        j                   t         j                        }|j                  | j                         |j	                  d       t        |t        j                  d      }| j                  |j                         d}	 	 |dz  }|j                          	 t        j                  r#t         j"                  j%                  d|z         y y # t        j                  $ r t        j                  |gg g        Y n0t        j                  $ r t        j                  g |gg        Y nw xY w)NFr   r  r   r7  z9
Needed %d calls to do_handshake() to establish session.
)r   rT  r  rU  r"  r   r
   r   r  r  r$  r#  rb  rc  r   r   r   r   r   )r   r   counts      r!   test_non_blocking_handshakez1SimpleBackgroundTests.test_non_blocking_handshake  s    MM&..)			$""#	eQ&)mm49; 	 +
 
 ??JJZ]bbc 	 '' +qc2r*(( +b1#r*+ s   C +D/*D/.D/c                 >    t        | g| j                  dt        i y )Nr  )_test_get_server_certificaterU  r   r   s    r!   test_get_server_certificatez1SimpleBackgroundTests.test_get_server_certificate  s    $TND,<,<N:Nr#   c           	         | j                   \  }}g fd}| j                  j                  |       t        j	                  ||f      }|s| j                  d|d|d       t        j	                  ||ft              }|s| j                  d|d|d       t        j                  r)t        j                  j                  d|d|d|d       | j                  ||g       y )	Nc                 (    j                  |       y rW   )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   )rU  r   r  r
   get_server_certificater.  r   r   r   r   r   r   r   )r   hostr  r  r1  r  s        @r!   test_get_server_certificate_sniz5SimpleBackgroundTests.test_get_server_certificate_sni  s    %%
d	-33MB(($6II4FG(($
(KII4FG??JJDRVX[\]d|4r#   c                 0    t        | g| j                    y rW   )!_test_get_server_certificate_failrU  r   s    r!    test_get_server_certificate_failz6SimpleBackgroundTests.test_get_server_certificate_fail  s     	*$B1A1ABr#   c                     d }| j                   j                  |       | j                  t        j                        5  t
        j                  | j                  t        d       d d d        y # 1 sw Y   y xY w)Nc                 .    t        j                  d       y )N皙?)r   sleepr  r  r  s      r!   r  zPSimpleBackgroundTests.test_get_server_certificate_timeout.<locals>.servername_cb  s    JJsOr#   皙?)r   rq  )	r   r  r   r   rq  r
   r  rU  r   )r   r  s     r!   #test_get_server_certificate_timeoutz9SimpleBackgroundTests.test_get_server_certificate_timeout  sb    	33MBv~~. 	4&&t'7'7*/2 ' 4	4 	4 	4s   'A..A7c                     t        t        j                  t        j                        t        j                  d      5 }|j                  | j                         d d d        t        t        j                  t        j                        t        j                  d      5 }|j                  | j                         d d d        | j                  t        j                  d      5  t        j                  t        j                        5 }t        |t        j                  d      }|j                  | j                         d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   *xY w# 1 sw Y   y xY w)Nr(  )r   r   r)  r*  r+  )	r   r   rT  r
   r   r  rU  r   r   )r   r   r   s      r!   r-  z"SimpleBackgroundTests.test_ciphers   s   fmmFNN;'*}}eE 	(HIIId&&'	( fmmFNN;'*}}iI 	(LMIId&&'	( ##CLL2MN 	,v~~. ,$$T.1mmEWY		$**+,	, 	,	( 	(	( 	(
, ,	, 	,s;   EE#$E48E(?E4EE%(E1	-E44E=c                    t         j                  t         j                        }|j                  t               | j                  |j                         g        |j                  t        j                  t        j                        d      5 }|j                  | j                         |j                         }| j                  |       d d d        | j                  t        |j                               d       y # 1 sw Y   3xY w)Nr  r.   r  r7  )r
   rl   ra   r   r  r   r  r   r   rT  r  rU  rY  rF  rc   rh  s       r!   test_get_ca_certs_capathz.SimpleBackgroundTests.test_get_ca_certs_capath  s    nnS445!!!0))+R0__V]]6>>:-8  : 	"=>IId&&'==?DOOD!		"
 	S--/0!4	" 	"s   =C==Dc                    t         j                  t         j                        }|j                  t               t         j                  t         j                        }|j                  t               t        j
                  t
        j                        }|j                  |d      5 }|j                  | j                         | j                  |j                  |       | j                  |j                  j                  |       ||_        | j                  |j                  |       | j                  |j                  j                  |       d d d        y # 1 sw Y   y xY w)Nr  r.   r  )r
   rl   ra   r   r  r   rT  r   r  rU  r   r   _sslobj)r   ctx1ctx2r   rY  s        r!   test_context_setgetz)SimpleBackgroundTests.test_context_setget  s    ~~c556""&"1~~c556""&"1MM&..)a= 	4JJt''(MM"**d+MM"**,,d3BJMM"**d+MM"**,,d3	4 	4 	4s   )B'EE"c                    |j                  dt        j                        }d}t        j                  |      D ]}  }	d }
|dz  }	  || }|j                         }|j                  |       |
 nK|
t        j                  k(  sI|j                  d      }|r|j                  |       n|j                           t        j                  r.t        j                   j                  d||j"                  fz         S # t        j
                  $ rD}|j                  t        j                  t        j                  fvr |j                  }
Y d }~d }~ww xY w)Nrq  r   r7  i   z"Needed %d calls to complete %s().
)r   r   SHORT_TIMEOUT
busy_retryr
   r   r  r%  SSL_ERROR_WANT_WRITErK   sendallr`  r   r5  r   r   r   rz  )r   r   incomingoutgoingrv   rt   r   rq  rx  rO  r  retr  bufs                 r!   ssl_io_loopz!SimpleBackgroundTests.ssl_io_loop)  s'    **Y(=(=>##G, 	)AEQJE Dk --/CLL }#111ii&NN3'&&(/	)0 ??JJB %t}}56 7
- <<  773#:#:#&#;#;#= =	 s   C88E9E

Ec                    t        j                   t         j                        }| j                  |j                         |j	                  | j
                         t        j                         }t        j                         }t        j                  t        j                        }| j                  |j                         | j                  |j                  t        j                         |j                  t                |j#                  ||dt$              }| j'                  |j(                  j*                  |       | j-                  |j/                                | j-                  |j1                                | j-                  |j3                                | j5                  t6        |j8                         dt        j:                  v r3|j1                         dk7  r | j-                  |j=                  d             | j?                  ||||j@                         | j                  |j/                                | j-                  |j3                                | jC                  |j1                                | j                  |j9                                dt        j:                  v r3|j1                         dk7  r | j                  |j=                  d             	 | j?                  ||||jD                         | j5                  t        jH                  |jJ                  d       y # t        jF                  $ r Y Aw xY w)NFr  TLSv1.3r  )&r   rT  r  r  r  rU  r
   r   rl   ra   rF  r   r   r   r   r   r   r
  r   r   r  ownerr  cipherr8   shared_ciphersr   r   rY  r  r  r  r$  assertIsNotNonerG  SSLSyscallErrorr   r   )r   r   r  r  rT   sslobjs         r!   test_bio_handshakez(SimpleBackgroundTests.test_bio_handshakeK  sK   }}V^^,

#T%%&==?==?nnS445**+#*;*;<!!*-h%68fnn**F3&--/*&..*+&//12*f&8&89 34449IY9Vf88FGx63F3FG(&//12V^^-.**,-34449IY9VOOF66|DE	T8Xv}}E
 	#,,f=	 "" 	 	s   L) )L?>L?c                    t        j                   t         j                        }| j                  |j                         |j	                  | j
                         t        j                         }t        j                         }t        j                  t        j                        }d|_
        t        j                  |_        |j                  ||d      }| j                  ||||j                         d}| j                  ||||j                   |       | j                  ||||j"                  d      }| j%                  |d       | j                  ||||j&                         y )NF   FOO
   s   foo
)r   rT  r  r  r  rU  r
   r   rl   ra   r   r   r   r
  r  r$  r   rK   r   rG  )r   r   r  r  rT   r  reqr  s           r!   test_bio_read_write_dataz.SimpleBackgroundTests.test_bio_read_write_datao  s   }}V^^,

#T%%&==?==?nnS445"--h%8x63F3FGx6<<EtXxdKh'x6==Ar#   c                    t               \  }}}t        j                  t        j                        5 }|j                  | j                         t
        j                         }t
        j                         }|j                  |||      }| j                  ||||j                         |j                          | j                  t
        j                  |j                         d d d        y # 1 sw Y   y xY w)Nr  )r   r   rT  r  rU  r
   r   r
  r  r$  r5  r   SSLEOFErrorrK   )r   r   r   r   r   r  r  r  s           r!   test_transport_eofz(SimpleBackgroundTests.test_transport_eof  s    3B3D0]]6>>* 
	<dLL))*}}H}}H#,,Xx=E - GFT8Xv7J7JK  coov{{;
	< 
	< 
	<s   B0C++C4N)rz  r  r  __doc__rV  rZ  r]  r_  re  ri  rk  rm  ro  rr   r  r   r    ru  ry  r|  r  r  r  r-  r  r  r  r  r  r  rX   r#   r!   rR  rR    s    I/,< ))4"(=&"."* X__RWW_&RS9 T9$d*O5*C
4,
54 D">HB"<r#   rR  networkc                       e Zd Zd Z ej
                  ej                  d       ej                  d      d               Z
y)NetworkedTestsc                 6   t        j                  t              5  t        t	        j                  t        j
                        t        j                  d      }| j                  |j                         |j                  d       |j                  t        df      }|dk(  r| j                  d       n$|t        j                  k(  r| j                  d       | j                  |t        j                   t        j"                  f       d d d        y # 1 sw Y   y xY w)NFrw  gHz>  r   z!REMOTE_HOST responded too quicklyzNetwork unreachable.)r   transient_internetREMOTE_HOSTr   r   rT  r
   r   r  r  ro  r	  r  r  ENETUNREACHr  EAGAINr  rd  s      r!   test_timeout_connect_exz&NetworkedTests.test_timeout_connect_ex  s     --k: 	A v~~!>*-*;*;8=?A OOAGG$LL#{C01BQwABu(((45MM"u||U->->?@	A 	A 	As   C,DDz
Needs IPv6walltimec                     t        j                  d      5  t        | dd       t        | dd       d d d        y # 1 sw Y   y xY w)Nzipv6.google.comr  )r   r  r{  r  r   s    r!    test_get_server_certificate_ipv6z/NetworkedTests.test_get_server_certificate_ipv6  sF     --.?@ 	L(/@#F-d4EsK	L 	L 	Ls	   :AN)rz  r  r  r  rr   r  r   IPV6_ENABLEDr   requires_resourcer  rX   r#   r!   r  r    sI    A  X33\BWz*L + CLr#   r  c           	      @   t         j                  ||f      }|s| j                  d|d|d       t         j                  ||f|      }|s| j                  d|d|d       t        j                  r*t
        j                  j                  d|d|d|d       y y )Nr  r  r  r  r  r  r   )r
   r  r.  r   r   r   r   r   )testr  r  r  r1  s        r!   r{  r{    s}    

$
$dD\
2C		tTBC

$
$dD\D
$
AC		tTBC

dTWXY r#   c           
      n   t        j                  |       5  	 t        j                  ||ft              }| j                  d|d|d|d       d d d        y # t        j                  $ r<}t        j                  r"t        j                  j                  d|z         Y d }~Sd }~ww xY w# 1 sw Y   y xY w)Nr  zGot server certificate z for r  r  z%s
)r   check_no_resource_warningr
   r  r   r.  r   r   r   r   r   r   )r  r  r  r1  xs        r!   r  r    s    		2	24	8 R	R,,dD\H,MC IIT4PQR R || 	-

  !,	-R Rs3   B+AB+B(,2B#B+#B((B++B4)make_https_serverc                   n    e Zd Z G d dej                        Z	 	 	 	 	 ddZd Zd ZddZ	d Z
d	 Zd
 Zy)r  c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	$ThreadedEchoServer.ConnectionHandlerzA 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| _        || _        || _        | j                  j	                  d       d | _        t        j                  j                  |        d| _	        y NFT)
r  runningr   addrr"  sslconn	threadingThread__init__daemon)r   r  connsockr  s       r!   r  z-ThreadedEchoServer.ConnectionHandler.__init__  sR     DK DL DIDIII!!$'DL%%d+DKr#   c                    	 | j                   j                  j                  | j                  d      | _        | j                   j
                  j                  | j                  j                                | j                   j                  j                  | j                  j                                | j                   j                  j                  t        j                  k(  r| j                  j                         }t        j                  rN| j                   j                  r8t         j"                  j%                  dt'        j(                  |      z   dz          | j                  j                  d      }t        j                  rd| j                   j                  rN| t         j"                  j%                  d       n,t         j"                  j%                  dt+        |       d       | j                  j-                         }t        j                  rD| j                   j                  r.t         j"                  j%                  dt/        |      z   dz          y# t0        t2        t4        f$ r}| j                   j6                  j                  t/        |             | j                   j                  r$t9        d	t;        | j<                        z   d
z          d| _        | jA                          Y d }~yd }~wt        jB                  tD        f$ r}| j                   j6                  j                  t/        |             | j                   j                  r$t9        d	t;        | j<                        z   d
z          |jF                  tF        jH                  k7  rDt         jJ                  dk7  r1d| _        | j                   jM                          | jA                          Y d }~yd }~ww xY w)NTr  z client cert is r   z client did not provide a cert
z cert binary is zb
z" server: connection cipher is now z'
 server:  bad connection attempt from z:
Fdarwin)'r  r   r   r   r  selected_alpn_protocolsr  selected_alpn_protocolr  r   r
   r   rY  r   r   chattyr   r   r   r   r  rc   r  r\   ConnectionResetErrorBrokenPipeErrorConnectionAbortedErrorconn_errorsr   r   r  r  r  r   r_  r  
EPROTOTYPEr  stop)r   r  cert_binaryr  r  s        r!   	wrap_connz.ThreadedEchoServer.ConnectionHandler.wrap_conn  s   ;#{{22>>II4  ?  133::4<<;^;^;`aT **11$,,2M2M2OP;;&&22c6G6GG<<335D4;;+=+=

(();fnnT>R)RUY)YZ"&,,":":4"@K4;;+=+=&.JJ,,-OPJJ,,/?K@P?QQT-UV,,.??t{{'9'9JJ$$%ICPVK%WZ^%^_o )/;QR  ''..s1v6;;%% !KdSWS\S\o!]`e!ef$

LL'*  ''..s1v6;;%% !KdSWS\S\o!]`e!ef
 77e...3<<83K#(DLKK$$&JJL-s&   A3I O!.A?K22O!C	OO!c                     | j                   r| j                   j                         S | j                  j                  d      S )Nr  )r  rK   r   r`  r   s    r!   rK   z)ThreadedEchoServer.ConnectionHandler.read	  s/    ||||((**yy~~d++r#   c                     | j                   r| j                   j                  |      S | j                  j                  |      S rW   )r  r   r   rd  )r   r  s     r!   r   z*ThreadedEchoServer.ConnectionHandler.write	  s1    ||||))%00yy~~e,,r#   c                     | j                   r| j                   j                          y | j                  j                          y rW   )r  r  r   r   s    r!   r  z*ThreadedEchoServer.ConnectionHandler.close	  s'    ||""$		!r#   c                    d| _         | j                  j                  s| j                         sy | j                   r	 | j	                         }|j                         }|s@d| _         	 | j                  j                         | _        d | _        | j                          n|dk(  rVt        j                  r5| j                  j                  rt        j                  j!                  d       | j                          y | j                  j                  rm|dk(  rht        j                  r5| j                  j                  rt        j                  j!                  d       | j!                  d       | j                         sy | j                  j                  r| j                  r|dk(  rt        j                  r5| j                  j                  rt        j                  j!                  d	       | j!                  d       | j                  j                         | _        d | _        t        j                  r| j                  j                  rt        j                  j!                  d
       n|dk(  rt        j                  r5| j                  j                  rt        j                  j!                  d       | j                  j#                  d      }| j!                  t%        |      j'                  d      dz          nK|dk(  rst        j                  r5| j                  j                  rt        j                  j!                  d       	 | j                  j)                          | j!                  d       n|dk(  r@| j                  j/                         | j!                  d       n| j!                  d       n|dk(  rH| j                  j/                         }| j!                  t%        |      j'                  d      dz          nA|dk(  rR| j                  j0                  j3                         }| j!                  t5        |      j7                  dd      dz          n|dk(  rR| j                  j0                  j9                         }| j!                  t5        |      j7                  dd      dz          nt        j                  rd| j                  j                  rN| j                  xr dxs d}t        j                  j!                  d|d|d|j;                         d|d	       | j!                  |j;                                | j                   ry y # t        $ r Y w xY w# t*        j,                  $ r6}| j!                  t%        |      j'                  d      dz          Y d }~dd }~ww xY w# t        $ r}| j                  j<                  rDt        j                  r4t?        |t@              rtC        d | jD                          ntG        d!       	 | j!                  d"       n# t        $ r Y nw xY w| j                          d| _         | j                  jI                          Y d }~(d }~ww xY w)#NTFs   overz" 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  bigs   UNVERIFIEDCHAIN	encryptedunencryptedz server: read z (z), sending back z)...
z Connection reset by peer: zTest server failure:
s   ERROR
)%r  r  starttls_serverr  rK   stripr  rG  r   r_  r  r   r   connectionchattyr   r   r   r  r   rv  verify_client_post_handshaker
   r   rY  r  get_verified_chainrc   to_bytesget_unverified_chainr  r  r[   ConnectionErrorprintr  r   r  )r   msgstrippedr   r  r  certsctypes           r!   runz(ThreadedEchoServer.ConnectionHandler.run%	  s   DL;;..~~',,]'))+C"yy{H#',0(,(;(;(=DI ,0DL

!W,"??t{{/K/KJJ,,-RS

++55"k1"??t{{/K/KJJ,,-bc

7+#~~/"++55$,,&)3"??t{{/K/KJJ,,-`a

7+$(LL$7$7$9	'+"??t{{/K/KJJ,,-Z[!%55"??t{{/K/KJJ,,-pq#||??M

4:#4#4Z#@5#HI!V+"??t{{/K/KJJ,,-XY0 LLEEG !JJw/!Z/<<335A JJy1 JJz2!Z/#||779

4:#4#4Z#@5#HI!%55 $ 4 4 G G I

3u:#6#6q%#@5#HI!%77 $ 4 4 I I K

3u:#6#6q%#@5#HI#OO KK88%)\\%Ak$SmEJJ,,03UCIIK.P Q

399;/Q ,,  ' ! !	!N  #|| K JJtAw~~j'AE'IJJK2  '{{))goo%a9 ""=dii[ I ))AB

:." JJL#(DL KK$$&&+'s   )V3 'U A3V3 :BV3 =G	V3 U' !G&V3 	U$ V3 #U$$V3 'V0:,V+&V3 +V00V3 3	Y4<AY/X)(Y/)	X52Y/4X554Y//Y4N)
rz  r  r  r  r  r  rK   r   r  r	  rX   r#   r!   ConnectionHandlerr    s'    	8	<	|	,	-	"c	'r#   r
  Nc                    |
r|
| _         nt        j                  ||nt        j                        | _         ||nt        j                  | j                   _        |r| j                   j                  |       |r| j                   j                  |       |r| j                   j                  |       |	r| j                   j                  |	       || _
        || _        || _        t        j                         | _        t        j                   | j                        | _        d | _        d| _        g | _        g | _        g | _        t.        j0                  j3                  |        d| _        y r  )r   r
   rl   r`   r   r   r   r   set_alpn_protocolsrR   r  r  r  r   r   r   r  r  flagactiver  r  r  r  r  r  r  )r   certificatessl_versioncertreqscacertsr  r  r  alpn_protocolsr   r   s              r!   r  zThreadedEchoServer.__init__	  s   
 "DL>>-8-D +6/2/F/FHDL 5=4H-0]] LL$227;,,[9//?((1 0.MMO	!++DII6		')$ !!$'r#   c                     | j                  t        j                                | j                  j	                          | S rW   startr  Eventr  waitr   s    r!   	__enter__zThreadedEchoServer.__enter__	  (    

9??$%		r#   c                 D    | j                          | j                          y rW   )r  r   r   rt   s     r!   __exit__zThreadedEchoServer.__exit__	  s    				r#   c                 P    || _         t        j                  j                  |        y rW   r  r  r  r  r   r  s     r!   r  zThreadedEchoServer.start	      	t$r#   c                    | j                   j                  d       | j                   j                  d       d| _        | j                  r| j                  j                          | j                  r	 | j                   j                         \  }}t        j                  r:| j                  r.t        j                  j                  dt        |      z   dz          | j                  | ||      }|j                          |j!                          | j                  r| j+                          y # t"        $ r=}t        j                  r#t        j                  j                  d|d       Y d }~_d }~wt$        $ r | j'                          Y }t(        $ rT}t        j                  r:| j                  r.t        j                  j                  dt        |      z   dz          Y d }~d }~ww xY w)Ng      ?r   Tz server:  new connection from r   z connection timeout z connection handling failed: )r   ro  listenr  r  r  r  r   r   r  r   r   r   r   r
  r  r   TimeoutErrorKeyboardInterruptr  BaseExceptionr  )r   newconnconnaddrhandlerr  s        r!   r	  zThreadedEchoServer.run	  sZ   		S!		99IIMMOkkJ$(II$4$4$6!??t{{JJ$$%E'+H~&68<&= >00wI kk& 	

   E??JJ$$';A5%CD$ 		  J??t{{JJ$$7$q'ADHJJs,   1BD) )	G$23E**G$G$A
GG$c                 `    | j                   "| j                   j                          d | _         y y rW   )r   r  r   s    r!   r  zThreadedEchoServer.close	  s&    99 IIOODI !r#   c                     d| _         y NF)r  r   s    r!   r  zThreadedEchoServer.stop	  s	    r#   )
NNNNTFFNNNrW   )rz  r  r  r  r  r
  r  r  r  r  r	  r  r  rX   r#   r!   r  r    sL    C'I,, C'J 6:(,FK $'+	 D
%8
r#   r  c                   b    e Zd Z G d dej                        Zd Zd Zd Zd Z	ddZ
d	 Zd
 Zy)AsyncoreEchoServerc                   H    e Zd Z G d dej                        Zd Zd Zd Zy)AsyncoreEchoServer.EchoServerc                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)/AsyncoreEchoServer.EchoServer.ConnectionHandlerc                     t        |d|d      | _        t        j                  j	                  | | 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6tT[[I&*#&&(r#   c                     t        | j                  t        j                        rK| j                  j	                         dkD  r.| j                          | j                  j	                         dkD  r.y)Nr   T)r[   r   r
   r   r8  handle_read_eventr   s    r!   readablez8AsyncoreEchoServer.EchoServer.ConnectionHandler.readable	  sO    dkk3==9++--/!3..0 ++--/!3r#   c                    	 | j                   j                          d| _        y # t        j                  t        j
                  f$ r Y y t        j                  $ r | j                         cY S t        j                  $ r  t        $ r?}|j                  d   t        j                  k(  r| j                         cY d }~S Y d }~y d }~ww xY w)NFr   )r   r$  r5  r
   r#  rc  r  handle_closer   r_  rt   r  ECONNABORTEDr   errs     r!   r6  zAAsyncoreEchoServer.EchoServer.ConnectionHandler._do_ssl_handshake	  s    0KK,,. +0D' ,,c.C.CD  /,,..||  3xx{e&8&88#0022 93s'   $ #C	"C-C/C7CCc                 :   | j                   r| j                          y | j                  d      }t        j                  r+t
        j                  j                  dt        |      z         |s| j                          y | j                  |j                                y )Nr  z server:  read %s from client
)r5  r6  r`  r   r   r   r   r   r   r  rd  r  )r   r   s     r!   handle_readz;AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_read
  sf    &&**,99T?D

(()JTRVZ)WX

		$**,/r#   c                     | j                          t        j                  r-t        j                  j                  d| j                  z         y y )Nz server:  closed connection %s
)r  r   r   r   r   r   r   r   s    r!   r<  z<AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_close
  s3    

??JJ$$%G$++%UV #r#   c                       rW   rX   r   s    r!   r   z<AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_error
  s    r#   N)	rz  r  r  r  r:  r6  rA  r<  r   rX   r#   r!   r
  r2  	  s!    )0
0W
r#   r
  c                    || _         t        j                  t        j                  t        j                        }t	        j
                  |d      | _        t        j                  j                  | |       | j                  d       y )NrS  r   )r   r   rT  SOCK_STREAMr   r  r  r	   
dispatcherr  r#  r  s      r!   r  z&AsyncoreEchoServer.EchoServer.__init__
  sX    $DM==1C1CDD%//b9DI((t4KKNr#   c                     t         j                  r"t        j                  j	                  d|z         | j                  || j                         y )Nz$ server:  new connection from %s:%s
)r   r   r   r   r   r
  r   )r   sock_objr  s      r!   handle_acceptedz-AsyncoreEchoServer.EchoServer.handle_accepted
  s5    

  !H$!NO""8T]];r#   c                       rW   rX   r   s    r!   r   z*AsyncoreEchoServer.EchoServer.handle_error"
  s    r#   N)	rz  r  r  r	   r4  r
  r  rI  r   rX   r#   r!   
EchoServerr0  	  s$    1	 = = 1	f		<
	r#   rK  c                     d | _         d| _        | j                  |      | _        | j                  j                  | _        t
        j                  j                  |        d| _        y r  )	r  r  rK  r  r  r  r  r  r  )r   r   s     r!   r  zAsyncoreEchoServer.__init__%
  sL    	ooh/KK$$	!!$'r#   c                 P    d| j                   j                  d| j                  dS )N<r}   >)ry  rz  r  r   s    r!   __str__zAsyncoreEchoServer.__str__-
  s     NN33T[[AAr#   c                     | j                  t        j                                | j                  j	                          | S rW   r  r   s    r!   r  zAsyncoreEchoServer.__enter__0
  r  r#   c                    t         j                  rt        j                  j	                  d       | j                          t         j                  rt        j                  j	                  d       | j                          t         j                  rt        j                  j	                  d       t        j                  d       y )Nz cleanup: stopping server.
z! cleanup: joining server thread.
z cleanup: successfully joined.
T)
ignore_all)	r   r   r   r   r   r  r   r	   	close_allr  s     r!   r  zAsyncoreEchoServer.__exit__5
  sp    ??JJ;<		??JJAB		??JJ?@d+r#   Nc                 P    || _         t        j                  j                  |        y rW   r  r   s     r!   r  zAsyncoreEchoServer.startA
  r!  r#   c                     d| _         | j                  r| j                  j                          | j                   r$	 t        j                  d       | j                   r#y y #  Y xY w)NTr7  )r  r  r  r	   loopr   s    r!   r	  zAsyncoreEchoServer.runE
  sH    99IIMMOkka  kks   A A#c                 F    d| _         | j                  j                          y r,  )r  r  r  r   s    r!   r  zAsyncoreEchoServer.stopO
  s    r#   rW   )rz  r  r  r	   rF  rK  r  rP  r  r  r  r	  r  rX   r#   r!   r.  r.  	  s;    Bh)) BHB

,%r#   r.  c                    i }t        ||d      }|5  | j                  t        j                         ||      5 }	|	j                  t        |j
                  f       |t        |      t        |      fD ]  }
|r2t        j                  r"t        j                  j                  d|z         |	j                  |
       |	j                         }|r2t        j                  r"t        j                  j                  d|z         ||j                         k7  st        d|dd t!        |      |dd j                         t!        |      fz         |	j                  d	       |r/t        j                  rt        j                  j                  d
       |j#                  |	j%                         |	j'                         |	j)                         |	j+                         |	j-                         |	j.                  |	j0                  d       |	j3                          ddd       |j4                  |d<   |j6                  |d<   ddd       |S # 1 sw Y   1xY w# 1 sw Y   |S xY w)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)r  r   r   r  r
  r  r   r<  r   r   r   r   r   rK   r  AssertionErrorrc   r  rb  r  rY  r  r8   re  r[  r  r  r  )r   r   indatar  r  sni_namer[  r  r  r   argoutdatas               r!   server_params_testrm  S
  s    E'-168F 
 "?'' (' ( ; 	>?IItV[[)*	& 1:f3EF >#

((7&@B&&(#

(()>)HIflln,(O"3B<W!#2;,,.F==> >> GGI??JJ$$%FGLL }}((*MMO()(@(@(B99;"#"2"299  GGI?	@ *0)G)G%&)/)>)>%&E"?F LE	 	"?F Ls*   'ICIC>I&II
	IIc                    |t         j                  }t         j                  dt         j                  dt         j                  di|   }t        j
                  rU|xr dxs d}t        j                  j                  |t         j                  |      t         j                  |       |fz         t        j                         5  t         j                  |      }|xj                  |z  c_        t         j                  |       }	|	xj                  |z  c_        ddd       t        j                  |d      }
|
Rt!        	d      rF| t         j"                  k(  r3|	j$                  |
kD  r$t        j                         5  |
|	_        ddd       j&                  t         j"                  k(  r|j)                  d       t+        	|       ||	fD ]3  }||_        |j/                  t0               |j3                  t4               5 	 t7        ||	d	d	
      }|s8t9        dt         j                  |      dt         j                  |       d      |dur||d   k7  rt9        d|d|d         yy# 1 sw Y   TxY w# 1 sw Y   xY w# t         j:                  $ r |r Y yt<        $ r*}|s|j>                  t>        j@                  k7  r Y d}~yd}~ww xY w)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
rP   r(  F)r  r  zClient protocol z  succeeded with server protocol r  Tr8   zversion mismatch: expected z, got )!r
   r   r   r   r   r   r   r   r   get_protocol_namer   rW  rl   rw  PROTOCOL_TO_TLS_VERSIONr   rQ   r_   rP   rd   rR   rU   r   r   r   r   r   rm  rh  r   r_  r  
ECONNRESET)server_protocolclient_protocolexpect_success	certsreqsserver_optionsclient_optionscerttype	formatstrr   r   min_versionrT   r  r  s                 r!   try_protocol_combor{  
  s    MM	{?? 	H
 #6K;K	

//@//@"$$ 	%
 
	'	'	) 18.08.01 *--otDK N$56s///**[8 ++- 	9-8N*	9 #"2"22""5)7/ .#O,!!*-.G">>*/%I  ((9((9;< < D( E)$44 $2E)4D"F G G 5 )c1 1"	9 	9( <<   QWW(8(88 9s7   AI(8I5=J (I25I>KK! KKc                      e Zd Z ej                  d      d        Zd Zd Zd Z e	j                  ej                  d      d        Zd Zd	 Zd
 Zd Z ed      d        Zd Zd Zd Z ed      d        Z ed      d        Z ed      d        Z ed      d        Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z' ed      d&        Z( ed       ed      e)d'                      Z* ed      e)d(               Z+ ed       ed      e)d)                      Z, ed      d*        Z-d+ Z. e	j                  d,ej^                  v d-      d.        Z0d/ Z1 e	j                   e2ed0      d1      d2        Z3d3 Z4d4 Z5 e	jl                  e7d5      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   t         j                  rt        j                  j	                  d       t               \  }}}| j                  t        j                  t        j                        5  t        ||dd|       ddd       d|_        | j                  t        j                  t        j                        5  | j                  t        j                        5 }t        ||dd|       ddd       | j                  dt        j                                ddd       | j                  t        j                  t        j                        5  | j                  t        j                        5 }t        ||dd       ddd       | j                  dt        j                                ddd       | j                  t        j                  t        j                        5  | j                  t        j                        5 }t        ||dd       ddd       | j                  dt        j                                ddd       y# 1 sw Y   xY w# 1 sw Y   mxY w# 1 sw Y   MxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   vxY w# 1 sw Y   yxY w)	z2Basic test of an SSL client connecting to a serverr   )rN  r  T)r   r   r  r  rj  NFz@Cannot create a client socket with a PROTOCOL_TLS_SERVER context)r   r   r  r  )r   r   r   r   r   r   r   r
   ra   r`   rm  r   r   r   r  r\   r   )r   r   r   r   r  s        r!   	test_echozThreadedTests.test_echo
  s-    ??JJT"3B3D0\\!8!8AXAX\Y 	2n.<&*T(02	2 ).%\\!8!8AXAX\Y 		""3<<0 6A".2@*.,466
 MMRAKK 		 \\!8!8AXAX\Y 	""3<<0 GA".2@*.GG MMRAKK 	 \\!8!8AXAX\Y 	"""3<<0 GA".2@*.GG MMRAKK "	" 	"9	2 	26 6		 		G G	 	G G	" 	"sx   -I< I%I--I% I>1I2-I>% JJ
-JII"	I%%I/2I;	7I>>J
J	JJc                    t         j                  rt        j                  j	                  d       t               \  }}}t        |d      }|5  |j                  t        j                         d|      5 }|j                  t        |j                  f       | j                  t              5  |j                          d d d        |j                          |j                         }| j!                  |d       |j#                         }t         j                  rct        j                  j	                  t%        j&                  |      dz          t        j                  j	                  dt)        |      z   dz          d|vr'| j+                  d	t%        j&                  |      z         d
|d   vr| j+                  d       | j-                  d|       | j-                  d|       t.        j1                  |d         }t.        j1                  |d         }	| j3                  ||	       d d d        d d d        y # 1 sw Y   yxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   Fr   r  )r  r   Can't get peer certificate.zConnection cipher is z.
r6   z$No subject field in certificate: %s.r+   zkMissing or invalid 'organizationName' field in certificate subject; should be 'Python Software Foundation'.r4   r3   )r   r   r   r   r   r   r  r   r   r  r
  r  r   r   rY  r$  rF  r  r   r  r\   r.  r  r
   r  rD  )
r   r   r   r   r  r   r  r  beforeafters
             r!   test_getpeercertzThreadedTests.test_getpeercert   s   ??JJT"3B3D0#N5I 	/++FMMODI<D , F /IJ		4-. &&z2 $MMO$ }}&CD??JJ$$V^^D%9D%@AJJ$$%<s6{%JU%RSD(IID$nnT23 4I	?+IIBC k40j$/11${2CD00j1AB.7/	/ 	/$ $/ /	/ 	/s=   'I47I +H3<E&I "I3H=8I  I		IIc                    t         j                  rt        j                  j	                  d       t               \  }}}t        t        dd      }| j                  |j                  t        j                  |z         t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                   f       |j#                         }| j%                  |d       d d d        d d d        |xj                  t        j&                  z  c_	        t        |d      }t)        j*                  dt(        j,                        }|5  |j                  t        j                         |      5 }| j/                  t        j0                  |      5  |j                  t        |j                   f       d d d        d d d        d d d        |j3                  t4               t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                   f       |j#                         }| j%                  |d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   PxY w# 1 sw Y   y xY w)	Nr   rb  r   Tr  r  r  r\  )r   r   r   r   r   r   r^   r
   r   rc  rd  r  r   r   r  r
  r  rY  rF  re  r  r  r  r   r   r   CRLFILE)	r   r   r   r   ri  r  r   r  r  s	            r!   test_crl_checkzThreadedTests.test_crl_check$  sf   ??JJT"3B3D0S5q944c6H6H26MN $N4H 	E++FMMO<D , F EIJ		4-.}}&CD	E	E 	##s'@'@@##N4H

  dd	
  	3++FMMO<D , F 3IJ++CLL%@ 3IItV[[1233	3 	,,W5#N4H 	E++FMMO<D , F EIJ		4-.}}&CD	E	E 	E5E E	E 	E(3 33 3	3 	3E E	E 	Es   &J1AI;5J&J-!J!""JJ!J- &K&AJ9*K;J	 JJJJ!!J*	&J--J69K	>KKc                    t         j                  rt        j                  j	                  d       t               \  }}}t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       |j                         }| j                  |d       d d d        d d d        t        |d      }t        j                  dt        j                         }|5  |j                  t        j                         d      5 }| j#                  t$        j&                  |      5  |j                  t        |j                  f       d d d        d d d        d d d        t        |d      }|5  t        j                         5 }| j#                  t(        d      5  |j                  |       d d d        d d d        d d d        y # 1 sw Y   ,xY w# 1 sw Y   1xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   XxY w# 1 sw Y   \xY w# 1 sw Y   y xY w)	Nr   Tr  r  r  r\  invalidz'check_hostname requires server_hostname)r   r   r   r   r   r   r  r   r   r  r
  r  rY  rF  r  r  r  r   r
   CertificateErrorr   )r   r   r   r   r  r   r  r  s           r!   r  z!ThreadedTests.test_check_hostnameQ  s   ??JJT"3B3D0 $N4H 	E++FMMO<D , F EIJ		4-.}}&CD	E	E $N4H

  dd	
  	3++FMMO<E , G 3JK++C,@,@%H 3IItV[[1233	3 $N4H 	2 2A++J,UW 2"..q122	2 	2-E E	E 	E$3 33 3	3 	32 22 2	2 	2s   &G.3AG!7G.:&H !H"G;#H+H
H7H+6HH+H7!G+	&G..G8;H HH	HHH($H++H4	0H77I z)test requires hostname_checks_common_namec                    t               \  }}}|j                  sJ d|_        t        |d      }|5  |j                  t	        j                         |      5 }|j                  t        |j                  f       d d d        d d d        t        t              \  }}}d|_        t        |d      }|5  |j                  t	        j                         |      5 }| j                  t        j                        5  |j                  t        |j                  f       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   2xY w# 1 sw Y   6xY w# 1 sw Y   y xY w)NFTr  r  )r   rT  r  r   r   r  r
  r  r   r   r
   SSLCertVerificationErrorr  s         r!   rW  z.ThreadedTests.test_hostname_checks_common_namev  sW    4C3D099995:2 $N4H 	/++FMMO<D , F /IJ		4-./	/
 4C93M05:2#N4H 	3++FMMO<D , F 3IJ&&s'C'CD 3IItV[[1233	3 	3/ /	/ 	/3 33 3	3 	3s_   &E"D5;E4&E% E:"EE$E%5D>	:EE
EEE"	E%%E.c                    t         j                  t         j                        }|j                  t               |j                  d       t        }t         j                  t         j                        }|j                  t               t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       |j!                         }| j#                  |d       |j%                         d   j'                  d      }| j#                  |d d d	       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w
NzECDHE:ECDSA:!NULL:!aRSATr  r  r  r   -r  )ECDHEECDSA)r
   rl   ra   r   r   rR   SIGNED_CERTFILE_ECC_HOSTNAMEr`   r   SIGNED_CERTFILE_ECCr  r   r   r  r
  r  rY  rF  r  splitr   r   r   r   r  r   r  r  s           r!   test_ecc_certzThreadedTests.test_ecc_cert  s$   (?(?@,,Z8""#<=/(?(?@&&':; $N4H 	@++FMMO<D , F @IJ		4-.}}&CDA,,S1r
,>?@	@ 	@@ @	@ 	@s%   &E=A;E	8E	E	EEc                 *   t         j                  t         j                        }|j                  t               t         j
                  j                  |_        |j                  d       t        }t         j                  t         j                        }|j                  t               |j                  t               t        |d      }|5  |j                  t!        j                          |      5 }|j#                  t$        |j&                  f       |j)                         }| j+                  |d       |j-                         d   j/                  d      }| j+                  |d d d	       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wr  )r
   rl   ra   r   r   r   rk   rh   rR   r  r`   r   r  r   r  r   r   r  r
  r  rY  rF  r  r  r  s           r!   test_dual_rsa_ecczThreadedTests.test_dual_rsa_ecc  sF   (?(?@,,Z8 *-)?)?&""#<=/(?(?@&&':;&&7 $N4H 	@++FMMO<D , F @IJ		4-.}}&CDA,,S1r
,>?@	@ 	@@ @	@ 	@s%   &F	1A;E=,F	=F	F		Fc                 $   t         j                  rt        j                  j	                  d       t
        j                  t
        j                        }|j                  t               t
        j                  t
        j                        }t
        j                  |_        d|_        |j                  t               g d}|D ]  \  }}t!        |d      }|5  |j#                  t%        j$                         |      5 }| j'                  |j(                  |       |j+                  t,        |j.                  f       |j1                         }| j'                  |j(                  |       | j3                  |d       d d d        d d d         t!        |d      }|5  |j#                  t%        j$                         d      5 }| j5                  t
        j6                        5  |j+                  t,        |j.                  f       d d d        d d d        d d d        t!        |d      5 }t9        j:                  |       5  | j5                  t<              5  |j#                  t%        j$                         d       d d d        d d d        d d d        t!        |d      5 }t9        j:                  |       5  | j5                  t>              5  |j#                  t%        j$                         d	       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   ^xY w# 1 sw Y   #xY w# 1 sw Y   (xY w# 1 sw Y   -xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)
Nr   T))u   könig.idn.pythontest.netxn--knig-5qa.idn.pythontest.net)r  r  )s   xn--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  zpython.example.orgz.pythontest.nets   knig.idn.pythontest.net) r   r   r   r   r   r
   rl   r`   r   IDNSANSFILEra   r   r   r   r   r   r  r   r   r   r   r  r
  r  rY  rF  r   r  r   r  UnicodeErrorUnicodeDecodeError)	r   r   r   idn_hostnamesr   expected_hostnamer  r   r  s	            r!   test_check_hostname_idnz%ThreadedTests.test_check_hostname_idn  s   ??JJT"(?(?@&&{3..!8!89!//!%%%j1
. 3@ 		I.O.'tLF I((9H ) J IMN$$Q%6%68IJIItV[[12==?D$$Q%6%68IJOOD*GHII I		I $N4H 	3$$V]]_5I % K 3NO&&s';';< 3IItV[[1233	3
  tD 	? ::4@ ?&&|4 ?'',= ( ???	?
  tD 	L ::4@ L&&'9: L'',J ( LLL	L 	L)I II I3 33 3	3 	3? ?? ?	? 	?L LL L	L 	Ls   &L=A<L	9L&L=  L0 "L#L0
L='M"=M&M
9MM"N4M:
&M.0M:8N	LLL 	#L-(L00L:	5L==M
MMM	M""M+.M73M::N	?NNc                 <   t               \  }}}|j                  t               t        j                  |_        t        j                  j                  |_        t        |dd      }|5  |j                  t        j                         |      5 }	 |j                  t        |j                  f       | j                  d       ddd       ddd       y# t        j                   $ r<}t"        j$                  r"t&        j(                  j+                  d|z         Y d}~[d}~wt,        $ rZ}|j.                  t.        j0                  k7  r t"        j$                  r"t&        j(                  j+                  d|z         Y d}~d}~ww xY w# 1 sw Y   xY w# 1 sw Y   yxY w)zConnecting 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.
        TrZ  r  z'Use of invalid cert should have failed!z
SSLError is %r
Nz
socket.error is %r
)r   r   r   r
   r   r   r   rk   rh   r  r   r   r  r
  r  r.  r   r   r   r   r   r   r_  r  rq  r   r   r   r   r  r   r  s          r!   test_wrong_cert_tls12z#ThreadedTests.test_wrong_cert_tls12  sT    4C3D0&&x0%(%6%6"),)?)?&#"4$
  	E**6==?;C + E	EHIE 		4-. 		CD#	E 	E 	E << ???JJ$$%9A%=> C77e...??JJ$$%=%AB	C	E 	E 	E 	Esa   (&FF!C1FFF&2DFF)AE>9F>FFF	FFrY  c                    t               \  }}}|j                  t               t        j                  |_        t        j                  j                  |_        t        j                  j                  |_        t        |dd      }|5  |j                  t        j                         |d      5 }|j                  t        |j                  f       | j                  t        j                   d      5  |j#                  d       |j%                  d       |j#                  d       |j%                  d       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)	NTrZ  Fr   suppress_ragged_eofsz4alert unknown ca|EOF occurred|TLSV1_ALERT_UNKNOWN_CA   datar  s   should have failed already)r   r   r   r
   r   r   r   rY  rP   r  r   r   r  r
  r  r   r   r   rK   r  s         r!   test_wrong_cert_tls13z#ThreadedTests.test_wrong_cert_tls13$  s2   3B3D0&&x0%(%6%6"),)?)?&),)?)?&#"4$
  	''8@=B ( D	 HIIItV[[)*''F 
  t56t	 	 	
 	 	 	 	s>   'E&.AE0AE5E=E&EEE#	E&&E/c                 ~    t        j                         t        j                         t        j                         t        j                  t
              fd} fd}t        j                  |      }|j                          	  |        |j                          y# |j                          w xY w)ztA brutal shutdown of an SSL server should raise an OSError
        in the client when attempting handshake.
        c                      j                          j                          j                         \  } }| j                          j                          j                          y rW   )r#  r  r  r  )newsockr  listener_gonelistener_readyr   s     r!   listenerz2ThreadedTests.test_rude_shutdown.<locals>.listenerM  sE    HHJ HHJMGTMMOGGIr#   c                     j                          t        j                         5 } | j                  t        f       j                          	 t	        |       }j                  d       d d d        y # t        $ r Y w xY w# 1 sw Y   y xY w)Nz2connecting to closed SSL socket should have failed)r  r   r  r
  r   r.  r_  )r  r  r  r  r  r   s     r!   	connectorz3ThreadedTests.test_rude_shutdown.<locals>.connectorU  s    ! TA		4,'""$T/2H IIRST T
  T Ts/   (BA4B4	B =B?B  BBtargetN)	r  r  r   r   r  r
  r  r  r   )r   r  r  rI  r  r  r  r   s   `   @@@@r!   test_rude_shutdownz ThreadedTests.test_rude_shutdown?  s}     #*!)MMO&&q$/	 
	T H-			KFFHAFFHs   B* *B<c                    t         j                  rt        j                  j	                  d       t
        j                  t
        j                        }|j                  t               t
        j                  t
        j                        }t        |d      }|5  |j                  t        j                         t              5 }	 |j                  t         |j"                  f       | j%                  d       d d d        d d d        y # t
        j&                  $ r}d}| j)                  |t
        j*                         | j-                  |j.                  d       | j-                  |j0                  |       d| d	}| j3                  t5        |      |       t7        j8                  d
t6        j:                        }| j3                  t5        |      |       Y d }~d }~ww xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   Tr  r  zExpected connection failurez&unable to get local issuer certificater_  (z|CERTIFICATE_VERIFY_FAILED)z(
                        certificate verify failed   # OpenSSL
                        |
                        CERTIFICATE_VERIFY_FAILED   # AWS-LC
                    ))r   r   r   r   r   r
   rl   r`   r   r   ra   r  r   r   r   r  r
  r  r.  r   rA  r  r   verify_codeverify_messager  r   r  r  r  )r   r   r   r  r   r  r  r  s           r!   test_ssl_cert_verify_errorz(ThreadedTests.test_ssl_cert_verify_errorh  s   ??JJT"(?(?@&&7..!8!89#N4H 	5$$V]]_5M % O 5RS5IItV[[12II;<	5	5 	5 || 5BC))!S-I-IJ$$Q]]B7$$Q%5%5s;u$?@E$$T!We4JJ ( $$	 E
 $$T!We4455 5	5 	5sI   *G/G#2D	8G/	G B:GG#G  G##G,	(G//G8c                 "   t         j                  rt        j                  j	                  d       t        d      r)t        t        j                  t        j                  d       t        t        j                  t        j                  d       t        d      r)t        t        j                  t        j                  d       t        d      r8t        t        j                  t        j                  dt        j                         t        t        j                  t        j                  dt        j                         t        d      r8t        t        j                  t        j                  dt        j                         t        d      r8t        t        j                  t        j                  dt        j                         t        t        j                  t        j                  dt        j                         t        d      r8t        t        j                  t        j                  dt        j                         t        d      r9t        t        j                  t        j                  dt        j                         t        t        j                  t        j                  dt        j                  t        j                  z         t        d      r:t        t        j                  t        j                  dt        j                         yy)z:Connecting to an SSLv23 server with various client optionsr   r   FTr   )rv  N)r   r   r   r   r   rb   r{  r
   r_   r   r   r   r   r   r   r   r   s    r!   test_PROTOCOL_TLSzThreadedTests.test_PROTOCOL_TLS  s   ??JJT"7#s//1C1CUK3++S-=-=tD7#s//1C1CWM7#s//1C1CUCL]L]^3++S-=-=tSEVEVW7#s//1C1CWcN_N_`7#s//1C1CUCL]L]^3++S-=-=tSEVEVW7#s//1C1CWcN_N_` 7#s//1C1CU*-//; 	3++S-=-=t*-//COO*K	M7#s//1C1CU.1oo? $r#   r   c                 X   t         j                  rt        j                  j	                  d       t        t        j                  t        j                  d       t        t        j                  t        j                  dt        j                         t        t        j                  t        j                  dt        j                         t        t        j                  t        j                  dt        j                         t        t        j                  t        j                  d       y)z9Connecting to an SSLv3 server with various client optionsr   r   Frw  N)r   r   r   r   r   r{  r
   r   r   r   r_   r   r   r   s    r!   test_protocol_sslv3z!ThreadedTests.test_protocol_sslv3  s     ??JJT"3--s/A/A7K3--s/A/A7CL]L]^3--s/A/A7CL]L]^3--s/?/?*-//	;3--s/A/A5Ir#   r   c                 n   t         j                  rt        j                  j	                  d       t        t        j                  t        j                  d       t        t        j                  t        j                  dt        j                         t        t        j                  t        j                  dt        j                         t        d      r)t        t        j                  t        j                  d       t        t        j                  t        j                  dt        j                         y)z8Connecting to a TLSv1 server with various client optionsr   r   r   Fr  N)r   r   r   r   r   r{  r
   r   r   r   rb   r   r_   r   r   s    r!   test_protocol_tlsv1z!ThreadedTests.test_protocol_tlsv1  s     ??JJT"3--s/A/A7K3--s/A/A7CL]L]^3--s/A/A7CL]L]^7#s1133E3EuM3--s/?/?*-//	;r#   r   c                    t         j                  rt        j                  j	                  d       t        t        j                  t        j                  d       t        d      r)t        t        j                  t        j                  d       t        t        j                  t        j                  dt        j                         t        t        j                  t        j                  d       t        t        j                  t        j                  d       t        t        j                  t        j                  d       y)zjConnecting to a TLSv1.1 server with various client options.
           Testing against older TLS versions.r   TLSv1.1r   Fr  N)r   r   r   r   r   r{  r
   r   rb   r   r_   r   rt  r   s    r!   test_protocol_tlsv1_1z#ThreadedTests.test_protocol_tlsv1_1  s     ??JJT"3//1E1EyQ7#s33S5G5GO3//1A1A5*-*;*;	= 	3++S-A-A9M3//1E1EuM3//1E1EuMr#   rk   c                    t         j                  rt        j                  j	                  d       t        t        j                  t        j                  dt        j                  t        j                  z  t        j                  t        j                  z         t        d      r)t        t        j                  t        j                  d       t        t        j                  t        j                  dt        j                         t        t        j                  t        j                  d       t        t        j                        rRt        t        j                  t        j                  d       t        t        j                  t        j                  d       t        t        j                         rSt        t        j                  t        j                   d       t        t        j                   t        j                  d       yy)zjConnecting to a TLSv1.2 server with various client options.
           Testing against older TLS versions.r   TLSv1.2)rv  rw  r   Fr  N)r   r   r   r   r   r{  r
   rt  r   r   rb   r   r_   r   re   r   r   r   s    r!   test_protocol_tlsv1_2z#ThreadedTests.test_protocol_tlsv1_2  s8    ??JJT"3//1E1Ey*-//#//*I*-//#//*I	L 7#s33S5G5GO3//1A1A5*-*;*;	= 	3++S-A-A9MC../s33S5G5GOs1133G3GOC001s33S5I5I5Qs33S5I5I5Q 2r#   c                 B   d}t        t        ddd      }d}|5  t        j                         }|j                  d       |j	                  t
        |j                  f       t        j                  rt        j                  j                  d       |D ]  }t        j                  r"t        j                  j                  d|z         |r"j                  |       |j                         }n"|j                  |       |j                  d      }|j                         j!                         }|dk(  rQ|j#                  d	      r@t        j                  r"t        j                  j                  d
|z         t%        |      }d}|dk(  rW|j#                  d	      rFt        j                  r"t        j                  j                  d|z         j'                         }d}Lt        j                  s^t        j                  j                  d|z          t        j                  rt        j                  j                  d       |rj                  d       n|j                  d       |rj)                          n|j)                          ddd       y# 1 sw Y   yxY w)z6Switching from clear text to encrypted and back again.)s   msg 1s   MSG 2r  s   MSG 3s   msg 4r  s   msg 5s   msg 6T)r  r  r  Fr   r\  r  r  s   okz/ client:  read %r from server, starting TLS...
r  z- client:  read %r from server, ending TLS...
z client:  read %r from server
ra  r`  N)r  r   r   r"  r  r
  r  r   r   r   r   r   rK   rd  r`  r  r  r]   r   rG  r  )	r   msgsr  wrappedr   ri  r7  rl  r  s	            r!   test_starttlszThreadedTests.test_starttls  s   c#H48+/59;  .	AMM$IItV[[)*

  & E??JJ$$3f<>JJv&"iikGFF6NffTlGmmo++-[(S^^E-B

((N!"# ,A.D"Gy(S^^E-B

((L!"# A#G

((=CE;E> 

  !BC

9%y!

	].	 .	 .	s   GJ0BJJc                    t        | t              }t        j                  rt        j
                  j                  d       t        t        d      5 }|j                         }ddd       d}d|j                   d}t        j                  t              }t        j                  j!                  ||	      }	 |j#                         j%                  d
      }|ret'        |      dkD  rW|j                  t'        |            }t        j                  r-t        j
                  j                  dt)        |      |fz         |j+                          | j-                  |       y# 1 sw Y   xY w# |j+                          w xY w)z8Using socketserver to create and manage SSL connections.r  r   rbNrS  zhttps://localhost:z/test_ssl.pyr  r  zcontent-lengthr   z/ client: read %d bytes from remote server '%s'
)r  r   r   r   r   r   r   rJ   r   rK   r  r
   r  r   urllibrequesturlopeninfor   rB  rc   r  r   )r   r  rM   r2  r4  urlr   dlens           r!   test_socketserverzThreadedTests.test_socketserver   s#   "4/B??JJT"(D! 	QB	"6;;-|<,,J,?NN""3"8		668<< 01DTQVVCI&??JJ$$Jr7F+,- GGIR #	 	  GGIs   E!8BE. !E+.F c           
         t         j                  rt        j                  j	                  d       d}t        t              }|5  t        t        j                               }|j                  d|j                  f       t         j                  r"t        j                  j	                  d|z         |j	                  |       |j                         }t         j                  r"t        j                  j	                  d|z         ||j                         k7  r>| j                  d|dd t        |      |dd j                         t        |      fz         |j	                  d	       t         j                  rt        j                  j	                  d
       |j                          t         j                  rt        j                  j	                  d       ddd       y# 1 sw Y   yxY w)z'Check the example asyncore integration.r   r  r%  r\  r]  r^  Nr_  r`  ra  z client:  connection closed.
)r   r   r   r   r   r.  r   r   r   r  r  rK   r  r.  rc   r  )r   ri  r  r   rl  s        r!   test_asyncore_serverz"ThreadedTests.test_asyncore_server:  sZ   ??JJT"#H- 	C 1AII{FKK01

  /&8:GGFOffhG

  !6!@A&,,.(		Ks|S\cr{((*CK99: GGI

  !BCGGI

  !AB)	C 	C 	Cs   FGG%c                 x
   t         j                  rt        j                  j	                  d       t        t        t        j                  t        j                  t        dd      }|5  t        t        j                         dt        t        t        j                        j                  t        |j                  f       fd}fd}dj                  dg t         fd	j"                  dd
gt         fdj$                  dg d fg}dj&                  dg fdj(                  dd
gfd|dg fd|dg fg}d}|D ]  \  }}}	}
}||z   j+                  d      }	  ||g|
 }dj-                  |      }| j/                  | ||      |       j1                         }||j3                         k7  r=| j5                  dj-                  ||dd t!        |      |dd t!        |                    |D ]  \  }}}	}
||z   j+                  d      }	 j                  |        ||
 }||j3                         k7  r=| j5                  dj-                  ||dd t!        |      |dd t!        |                    d}j                  |       t=        t!        |            }| j/                  j1                  d |      t!        |             | j/                  ||       t>        ^t>        j@                  t!        |      z  }|jC                  |      }j%                  |       | j/                  j1                         |       | jE                  tF        jH                         | jE                  tF        jJ                  dg       | jE                  tF        jL                  d!       | jE                  tF        jN                  t=        d!      g       j	                  d"       | jE                  t6        j&                  d        | jE                  t6        j0                  d        jQ                          ddd       y# t6        $ rj}|	r!| j5                  dj-                  |             t9        |      j;                  |      s"| j5                  dj-                  ||             Y d}~kd}~ww xY w# t6        $ rz}|	r!| j5                  dj-                  |             t9        |      j;                  |      s"| j5                  dj-                  ||             j1                          Y d}~;d}~ww xY w# 1 sw Y   yxY w)#z Test recv(), send() and friends.r   TFr  r  r  r  r  r   r   r   r   c                  F    t        d      } j                  |       }| d | S Nsd                                                                                                       )r   ra  )brx  r   s     r!   
_recv_intoz0ThreadedTests.test_recv_send.<locals>._recv_intoj  s&    i(A%y r#   c                  L    t        d      } j                  |       \  }}| d | S r  )r   rc  )r  rx  r  r   s      r!   _recvfrom_intoz4ThreadedTests.test_recv_send.<locals>._recvfrom_intoo  s+    i(ooa0t%y r#   rd  re  zsome.addressr  c                      y rW   rX   )r  s    r!   <lambda>z.ThreadedTests.test_recv_send.<locals>.<lambda>x  s    r#   r`  rb  ra  rc  PREFIX_asciizsending with {}r  zpWhile 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.
r   zFMethod <<{name:s}>> failed with unexpected exception message: {exp:s}
)r    expzrWhile receiving with <<{name:s}>> bad data <<{outdata:r}>> ({nout:d}) received; expected <<{indata:r}>> ({nin:d})
zAFailed to receive with method <<{name:s}>>; expected to succeed.
r  r  r^  r`  ))r   r   r   r   r   r  r   r
   r   r`   r   r   r  r
  r  rd  rc   re  r  r`  rb  rv  formatr   rK   r  r.  r   r\   r]   r   ctypesc_ubytefrom_buffer_copyr   rf  rg  rh  ri  rj  r  )r   r  r  r  send_methodsrecv_methodsdata_prefix	meth_name	send_methrt  rt   ret_val_methri  r  r  rl  r  	recv_methr   bufferubyte	bytesliker   s                         @r!   test_recv_sendzThreadedTests.test_recv_sendW  s   ??JJT"#H-0]]030G0G,4+/5:<  {	 ,1)1)1*---	9A
 IItV[[)*!
! r3/188U^,<cBAIItR@L r*QZZ0@Aj$3 .%<	L $K &2 "I~t %	199'B#F2T2C+229=C$$S,v*>C$HffhG&,,.0		BBH&%.%(\'-cr{F CI C@ ?K :	9nd%	199'BFF6N'.G&,,.0		BBH&%.%(\'-cr{F CI C@ DFF4Ls4y)FQVVB/T;VT* !T2!2248			)$  40
 115591199wiH1199cB1nny~.>@GGIj!&&"5j!&&"5GGIw{	 {	f " %		55;VV5K q6,,Y7		;;A6%.A <B <: " %		55;VV5K q6,,Y7		;;A6%.A <B < FFHHa{	 {	sf   (C,T0BP4) T0
A&R*0F;T04	R'=AR"T0"R''T0*	T-3A/T("T0(T--T00T9c                    t        t              }| j                  |       t        j                  t
        |j                  f      }| j                  |j                         t        |d      }| j                  |j                         |j                  d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                         d       |j                  d       | j                  |j                  d      d       | j                  |j                  t!                     d       y )NFr  r  r   r#   )r  r   rT  r   r!  r
  r  r  r  r   rd  r   r`  rK   r"  ra  r   )r   r  r   s      r!   test_recv_zerozThreadedTests.test_recv_zero  s    #H-&!$$dFKK%89 QU;  	
wC(C(7+ 	
eC(Y[115r#   c                    t        t              }| j                  |       t        j                  t
        |j                  f      }| j                  |j                         t        |d      }| j                  |j                         |j                  d       t        j                  dddg      }| j                  |j                  |      d       | j                  t        |      d d d        G d dt              }|j                  d        |d	      }| j                  |j                  |      d       | j                  t        |      d
       y )NFr  r  Ir   r8  c                       e Zd Zd Zy);ThreadedTests.test_recv_into_buffer_protocol_len.<locals>.Bc                     ddz   y Nr7  r   rX   r   s    r!   __len__zCThreadedTests.test_recv_into_buffer_protocol_len.<locals>.B.__len__   s	    !r#   N)rz  r  r  r  rX   r#   r!   Br    s    r#   r  r  s   data  )r  r   rT  r   r!  r
  r  r  r  r   rd  arrayr   ra  r  r   )r   r  r   r  r  s        r!   "test_recv_into_buffer_protocol_lenz0ThreadedTests.test_recv_into_buffer_protocol_len  s    #H-&!$$dFKK%89 QU; 	wkk#1v&S)1-sBQ1		 	 	
wdS)1-s[1r#   c                 8   t        t        t        j                  t        j                  t        dd      }|5  t        t        j                         dt        t        t        j                        j                  t        |j                  f       j                  d       t        d      fd}| j                  t        j                  t        j                  f|       j                  d       j                          d d d        y # 1 sw Y   y xY w)NTFr  r  i    c                  *    	 j                          rW   )rd  )r  r   s   r!   fill_bufferz8ThreadedTests.test_nonblocking_send.<locals>.fill_buffer  s    FF3K r#   )r  r   r
   r   r`   r   r   r  r
  r  r"  r   r   rc  r#  r  )r   r  r  r  r   s      @@r!   test_nonblocking_sendz#ThreadedTests.test_nonblocking_send  s    #H-0]]030G0G,4+/5:<  	 ,1)1)1*---	9A
 IItV[[)*MM%  D/C  s44"3356AC MM$GGI)	 	 	s   CDDc                    t        j                   t         j                        d}t        j                        }t	        j
                         dfd}t	        j                  |      }|j                          j                          	 	 t        j                   t         j                        }|j                  d       |j                  ||f       | j                  t        dt        |       |j                          	 t        j                   t         j                        }t        |      }|j                  d       | j                  t        d|j                  ||f       |j                          	 d|j                          j                          y # j                          w xY w# |j                          w xY w# d|j                          j                          w xY w)Nr%  Fc                     j                          j                          g } sFt        j                  gg g d      \  }}}|v r"| j                  j	                         d          sF| D ]  }|j                           y )Nr  r   )r#  r  rb  r  r  r  )connsr)  wr  r   finishr  starteds        r!   servez3ThreadedTests.test_handshake_timeout.<locals>.serve,  sx    MMOKKME --"b#>1aQ; LL!34   

r#   r  r  z	timed outT)r   rT  r   r  r  r  r  r  r  ro  r  r   r$  r   r  r   )	r   r  r  r  rI  r  r  r  r  s	         @@@r!   test_handshake_timeoutz$ThreadedTests.test_handshake_timeout$  s^   v~~.&&v.//#	 E*			MM&..1S!		4,'&&|['7< 	MM&..1$Q'S!&&|['(yy4,@ 	FFFHLLN 	 	FFFHLLNs8   A#F 6G A#F3 *G F00G 3GG $G,c                 Z  
 t               \  }}}t        j                  t        j                        d}t        j                        }|j                  d      | j                  j                         t        j                         
d d 
fd}t        j                  |      }|j                          
j                          |j                  t        j                         |      }|j                  ||f       |j                  d       |j                          |j!                         }	|j#                          |j%                          j#                          j#                          | j'                  t(        j*                         | j-                  |	       y )Nr%  Tr  c                      j                           j                          j                         \  j                  j	                  d             y )Nr8  )r#  r  r  rd  r`  )evtpeerremoter  s   r!   r  z/ThreadedTests.test_server_accept.<locals>.serveb  s8    MMOGGI!==?LFDKKA'r#   r  r  r  )r   r   rT  r   r  r   rF  r   r  r  r  r  r  r  rd  r`  r  r  r   rA  r
   r   r   )r   rH  rI  r   r  r  r  rI  rN  client_addrr  r  r  r  s             @@@@r!   test_server_acceptz ThreadedTests.test_server_acceptU  s?    ,;+<(
Jv~~.&&v.''D'A**+oo	( E*		
''MMOX ( 
 	$'(G((*	fcmm4{+r#   c                    t         j                  t         j                        }d|_        |j	                  t        j
                               5 }| j                  t              5 }|j                          d d d        | j                  j                  j                  t        j                         d d d        y # 1 sw Y   FxY w# 1 sw Y   y xY wr,  )r
   rl   ra   r   r   r   r   r_  rY  r   r   r  ENOTCONNr   r   r   r}  s       r!   test_getpeercert_enotconnz'ThreadedTests.test_getpeercert_enotconn}  s    ..!8!89!&  1 	AT""7+ #r  "#R\\//@	A 	A# #	A 	A$   C$B:5<C:C	?CCc                    t         j                  t         j                        }d|_        |j	                  t        j
                               5 }| j                  t              5 }|j                          d d d        | j                  j                  j                  t        j                         d d d        y # 1 sw Y   FxY w# 1 sw Y   y xY wr,  )r
   rl   ra   r   r   r   r   r_  r$  r   r   r  r  r  s       r!   test_do_handshake_enotconnz(ThreadedTests.test_do_handshake_enotconn  s    ..!8!89!&  1 	AT""7+ $r!!#$R\\//@	A 	A$ $	A 	Ar  c                 ,   t               \  }}}t        j                  j                  |_        |j                  d       |j                  d       t        |      5 }|j                  t        j                         |      5 }| j                  t              5  |j                  t        |j                  f       d d d        d d d        d d d        | j                  dj                  d          y # 1 sw Y   9xY w# 1 sw Y   =xY w# 1 sw Y   AxY w)NAES128AES256r  r  NO_SHARED_CIPHERr   )r   r
   r   rk   rh   rR   r  r   r   r   r_  r  r
  r  r  r  r  s         r!   test_no_shared_ciphersz$ThreadedTests.test_no_shared_ciphers  s    3B3D0),)?)?&""8,""8,7 	36++FMMO<D , F 3IJ&&w/ 3IItV[[1233	3
 	(&*<*<Q*?@3 33 3	3 	3s<   &D
C>"C2:C>D
2C;7C>>D	D

Dc                    t         j                  t         j                        }d|_        t         j                  |_        t        t        t         j                  d      5 }|j                  t        j                               5 }| j                  |j                         d       | j                  |j                  d       |j                  t        |j                   f       | j#                  |j                         d       ddd       | j                  j                  d       | j                  |j                         d       ddd       y# 1 sw Y   NxY w# 1 sw Y   yxY w)zt
        Basic tests for SSLSocket.version().
        More tests are done in the test_protocol_*() methods.
        F)r  r  Nr  )r
   rl   ra   r   r   r   r  r   r`   r   r   r   r8   r  r  r
  r  r   )r   r   r  r   s       r!   test_version_basicz ThreadedTests.test_version_basic  s   
 ..!8!89!&!mm,/,C,C',. 		-17$$V]]_5 9aiik40aii.		4-.  i8	9
 MM!))T*MM!))+t,		- 		-9 9		- 		-s&    $EA>EAEE	EE$c                    t               \  }}}t        j                  j                  |_        t        |      5 }|j                  t        j                         |      5 }|j                  t        |j                  f       | j                  |j                         d   h d       | j                  |j                         d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r  r   >   TLS_AES_128_GCM_SHA256TLS_AES_256_GCM_SHA384TLS_CHACHA20_POLY1305_SHA256r  )r   r
   r   rY  rP   r  r   r   r  r
  r  r  r  r   r8   r  s         r!   test_tls1_3zThreadedTests.test_tls1_3  s    3B3D0),)?)?&7 		96++FMMO<D , F 9IJ		4-.ahhjm . 
   i89		9 		99 9		9 		9s$   &C$ A'CC$C!	C$$C-c                 P   t               \  }}}t        j                  j                  |_        t        j                  j
                  |_        t        j                  j
                  |_        t        j                  j
                  |_        t        |      5 }|j                  t        j                         |      5 }|j                  t        |j                  f       | j                  |j                         d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r  r  )r   r
   r   r   rP   rk   rh   r  r   r   r  r
  r  r   r8   r  s         r!   test_min_max_version_tlsv1_2z*ThreadedTests.test_min_max_version_tlsv1_2  s     4C3D0),)=)=&),)?)?&),)?)?&),)?)?&7 	96++FMMO<D , F 9IJ		4-.  i89	9 	99 9	9 	9s%   &D=AD?DD	DD%c                 h   t               \  }}}t        j                  j                  |_        t        j                  j
                  |_        t        j                  j                  |_        t        j                  j                  |_        t        ||       t        |      5 }|j                  t        j                         |      5 }|j                  t        |j                  f       | j                  |j!                         d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r  r  )r   r
   r   r   rP   rk   rh   r   rU   r  r   r   r  r
  r  r   r8   r  s         r!   test_min_max_version_tlsv1_1z*ThreadedTests.test_min_max_version_tlsv1_1  s     4C3D0),)=)=&),)?)?&),)=)=&),)?)?&NN;7 	96++FMMO<D , F 9IJ		4-.  i89	9 	99 9	9 	9s%   #&D(	ADD(D%	!D((D1c                    t               \  }}}t        j                  j                  |_        t        j                  j                  |_        t        j                  j                  |_        t        j                  j                  |_        t        ||       t        |      5 }|j                  t        j                         |      5 }| j                  t        j                        5 }|j                  t        |j                  f       d d d        | j!                  t#        j$                        d       d d d        d d d        y # 1 sw Y   ?xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r  z(alert|ALERT))r   r
   r   rk   rh   rP   r   rU   r  r   r   r   r   r  r
  r  r  r\   r   r  s          r!   test_min_max_version_mismatchz+ThreadedTests.test_min_max_version_mismatch  s!    4C3D0),)?)?&),)?)?&),)=)=&),)=)=&NN;7 	D6++FMMO<D , F DIJ&&s||4 3IItV[[123  Q[[!1?C	D	D 	D3 3D D	D 	Ds<   #&E!	 E)"E	-E8E!	EEE	E!!E*c                 *   t               \  }}}t        j                  j                  |_        t        j                  j                  |_        t        j                  j                  |_        t        ||       t        |      5 }|j                  t        j                         |      5 }|j                  t        |j                  f       | j                  |j                         d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r  r   )r   r
   r   r   rP   rh   rU   r  r   r   r  r
  r  r   r8   r  s         r!   test_min_max_version_sslv3z(ThreadedTests.test_min_max_version_sslv3  s    3B3D0),)=)=&),)=)=&),)=)=&NN;7 	76++FMMO<D , F 7IJ		4-.  g67	7 	77 7	7 	7s%   &D	*AC=,D	=D	D		Dc                    t               \  }}}t        j                  j                  |_        t        |      5 }|j                  t        j                         |      5 }|j                  t        |j                  f       | j                  d|j                         d          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r  ECDHr   )r   r
   r   rk   rh   r  r   r   r  r
  r  r  r  r  s         r!   test_default_ecdh_curvez%ThreadedTests.test_default_ecdh_curve  s     4C3D0 *-)?)?&
  7 	56++FMMO<D , F 5IJ		4-.fahhjm45	5 	55 5	5 	5s$   &C AB6%C6B?	;CCr  r  c                    t         j                  rt        j                  j	                  d       t               \  }}}t        j                  j                  |_	        t        |dd      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       |j!                  d      }t         j                  r.t        j                  j	                  dj#                  |             | j%                  |       |j'                         dk(  r| j)                  t+        |      d	       n| j)                  t+        |      d
       |j	                  d       |j-                         j/                         }| j)                  |t1        |      j3                  d             ddd       |j                  t        j                         |      5 }|j                  t        |j                  f       |j!                  d      }t         j                  r.t        j                  j	                  dj#                  |             | j5                  |       | j%                  |       |j'                         dk(  r| j)                  t+        |      d	       n| j)                  t+        |      d
       |j	                  d       |j-                         j/                         }| j)                  |t1        |      j3                  d             ddd       ddd       y# 1 sw Y   wxY w# 1 sw Y   xY w# 1 sw Y   yxY w)z Test tls-unique channel binding.r   TFrZ  r  r  z! got channel binding data: {0!r}
r  0      s   CB tls-unique
r  Nz(got another channel binding data: {0!r}
)r   r   r   r   r   r   r
   r   rk   rh   r  r   r   r  r
  r  r  r  r  r8   r   rc   rK   r  r   rv  assertNotEqual)	r   r   r   r   r  r   cb_datapeer_data_reprnew_cb_datas	            r!   r  z-ThreadedTests.test_tls_unique_channel_binding  s    ??JJT"3B3D0 *-)?)?&#N+/5:<  -	G++MMO$, , . C12		4-.//=??JJ$$<CCGLN $$W-99;)+$$S\26$$S\26 *+!"!1  !%g!5!5j!AC)C0  ++MMO$, , . G12		4-.33LA??JJ$$CJJ')
 ##G[9$$W-99;)+$$S\26$$S\26*+!"!1  !%k!2!9!9*!EG'G3-	G -	GC C0G G3-	G -	Gs>   -&MD%L-8-M%D7L:M-L7	2M:M	?MMc                     t               \  }}}t        ||dd|      }t        j                  r1t        j
                  j                  dj                  |d                | j                  |d   h d       y )NTr  r  rj  z got compression: {!r}
rb  >   NRLEZLIB)	r   rm  r   r   r   r   r   r  r  r   r   r   r   r  s        r!   test_compressionzThreadedTests.test_compressionR  sg    3B3D0">>*.,46 ??JJ7>>u]?STUeM*,CDr#   rB   z*ssl.OP_NO_COMPRESSION needed for this testc                     t               \  }}}|xj                  t        j                  z  c_        |xj                  t        j                  z  c_        t	        ||dd|      }| j                  |d   d        y )NTr?  rb  )r   rw  r
   rB   rm  r   rB  s        r!   test_compression_disabledz'ThreadedTests.test_compression_disabled[  sm     4C3D0#"7"77#"7"77">>*.,46 	eM*D1r#   c                     t               \  }}}|xj                  t        j                  z  c_        t	        ||dd|       y NTr?  r   rw  r
   r  rm  r   r   r   r   s       r!   test_legacy_server_connectz(ThreadedTests.test_legacy_server_connectf  s<    3B3D0#">">>>>*.,4	6r#   c                     t               \  }}}|xj                  t        j                   z  c_        t	        ||dd|       y rG  rH  rI  s       r!   test_no_legacy_server_connectz+ThreadedTests.test_no_legacy_server_connectm  s?    3B3D03#?#?"??>>*.,4	6r#   r  c                    t               \  }}}t        j                  j                  |_        |j                  t               |j                  d       t        j                  j                  |_        t        ||dd|      }|d   d   }|j                  d      }d|vr"d|vrd	|vr| j                  d
|d   z          y y y y )NkEDHTr?  r  r   r  ADHEDHDHEzNon-DH key exchange: )r   r
   r   rk   rh   r  r  rR   rm  r  r.  )r   r   r   r   r  r  partss          r!   test_dh_paramszThreadedTests.test_dh_paramst  s     4C3D0),)?)?&%%f-""6*),)?)?&">>*.,46 x#S!%u"4e9KII-q	9: :L"4r#   c                    t               \  }}}|j                  d       |j                  d       t        j                  j
                  |_        t        ||dd|      }t               \  }}}|j                  d       |j                  d       t        j                  j
                  |_        t        ||dd|      }t               \  }}}|j                  d       |j                  d       |j                  d       t        j                  j
                  |_        | j                  t        j                        5  t        ||dd|       d d d        y # 1 sw Y   y xY w)N	secp384r1zECDHE:!eNULL:!aNULLTr?  r  )
r   r  rR   r
   r   rk   rP   rm  r   r   rB  s        r!   test_ecdh_curvezThreadedTests.test_ecdh_curve  s7   3B3D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||, 	2~~&*T(02	2 	2 	2s   >EE!c                 j    t               \  }}}t        ||dd|      }| j                  |d   d        y )NTr?  rd  )r   rm  r   rB  s        r!   test_selected_alpn_protocolz)ThreadedTests.test_selected_alpn_protocol  s=    3B3D0">>*.,46 	e23T:r#   c                     t               \  }}}|j                  ddg       t        ||dd|      }| j                  |d   d        y )Nr  barTr?  rd  )r   r  rm  r   rB  s        r!   /test_selected_alpn_protocol_if_server_uses_alpnz=ThreadedTests.test_selected_alpn_protocol_if_server_uses_alpn  sO    3B3D0))5%.9">>*.,46 	e23T:r#   c           	         g d}ddgdfddgdfdgdfddgd fg}|D ]  \  }}t               \  }}}|j                  |       |j                  |       	 t        ||dd|      }d	t        |      d
t        |      dt        |      d}
|d   }| j                  |||
|dfz         t        |d         r|d   d   nd}| j                  |||
|dfz          y # t        j                  $ r}	|	}Y d }	~	d }	~	ww xY w)N)r  rZ  	milkshaker  rZ  r]  zhttp/3.0zhttp/4.0Tr?  zfailed trying z	 (s) and z (c).
was expecting z, but got %s from the %srd  rN  rf  r  nothingr  )r   r  rm  r
   r   r\   r   rc   )r   server_protocolsprotocol_testsclient_protocolsr  r   r   r   r  r  r  client_resultserver_results                r!   test_alpn_protocolsz!ThreadedTests.test_alpn_protocols  sO   6U^U#U^U#]K(*%t,	
 +9 	>&h7F7H4NNH--.>?--.>?*>+926<@4<	> +,c2B.CH'C ""89M]H M8#<<> u456 ""9:2><E ]H M8#<<>/	> << s   CC9-C44C9c                 (    t         j                  rJ y rW   )r
   HAS_NPNr   s    r!   test_npn_protocolsz ThreadedTests.test_npn_protocols  s    ;;;r#   c                 \   t         j                  t         j                        }|j                  t               t         j                  t         j                        }|j                  t
               t         j                  t         j                        }|j                  t               |||fS rW   )	r
   rl   r`   r   r   r   ra   r   r   )r   r   other_contextr   s       r!   sni_contextszThreadedTests.sni_contexts  sv    (?(?@&&7s'>'>?%%&67(?(?@,,Z8}n<<r#   c                 >    |d   }| j                  d|ff|d          y )Nrc  r-   r6   )r  )r   r  r    r  s       r!   check_common_namezThreadedTests.check_common_name  s&    Z d+-tI?r#   c                    g | j                         \  }}d|_        fd}|j                  |       t        ||dd      }| j	                  d|fg       | j                  |d       g t        ||dd       }| j	                  d |fg       | j                  |t               g |j                  d        t        ||dd      }| j                  |t               | j	                  g        y )NFc                 @    j                  ||f       || _        y y rW   )r  r   )r  r  r  callsri  s      r!   r  z6ThreadedTests.test_sni_callback.<locals>.servername_cb  s'    LL+78&#0  'r#   Tsupermessager  rj  r>   notfunny)rj  r   r  rm  r   rl  r   )r   r   r   r  r  ro  ri  s        @@r!   r  zThreadedTests.test_sni_callback  s   8<8I8I8K5~(-%	1 	..}=">>*.,:<
 	..!A BCun5">>*.,02 	$!7 89u&>? ..t4">>*.,68 	u&>?#r#   c                 &   | j                         \  }}}d }|j                  |       | j                  t        j                        5 }t        ||dd      }d d d        | j                  j                  j                  d       y # 1 sw Y   0xY w)Nc                 "    t         j                  S rW   )r
   ALERT_DESCRIPTION_ACCESS_DENIEDr  s      r!   cb_returning_alertzAThreadedTests.test_sni_callback_alert.<locals>.cb_returning_alert  s    666r#   Frp  rq  TLSV1_ALERT_ACCESS_DENIED)	rj  r  r   r
   r   rm  r   r   r  )r   r   ri  r   rv  r}  r  s          r!   test_sni_callback_alertz%ThreadedTests.test_sni_callback_alert  s    8<8I8I8K5~	7../ABs||, 	@&~~.30>@E	@ 	,,.IJ		@ 	@s   BBc                    | j                         \  }}}d }|j                  |       t        j                         5 }| j	                  t
        j                        5 }t        ||dd      }d d d        d}| j                  j                  j                  |       | j                  |j                  j                  t               d d d        y # 1 sw Y   dxY w# 1 sw Y   y xY w)Nc                     ddz   y r  rX   r  s      r!   
cb_raisingz;ThreadedTests.test_sni_callback_raising.<locals>.cb_raising   s	    aCr#   Frp  rq  z0(SSLV3_ALERT_HANDSHAKE_FAILURE|NO_PRIVATE_VALUE))rj  r  r   catch_unraisable_exceptionr   r
   r   rm  r  r   r  r   
unraisableexc_typeZeroDivisionError)	r   r   ri  r   r{  catchr}  r  r  s	            r!   test_sni_callback_raisingz'ThreadedTests.test_sni_callback_raising  s    8<8I8I8K5~	..z://1 		KU""3<<0 DB*>>274BDD GER\\00%8U--668IJ		K 		KD D		K 		Ks$    CC-ACC	CC%c                    | j                         \  }}}d }|j                  |       t        j                         5 }| j	                  t
        j                        5 }t        ||dd      }d d d        | j                  j                  j                  d       | j                  |j                  j                  t               d d d        y # 1 sw Y   bxY w# 1 sw Y   y xY w)Nc                      y)Nr  rX   r  s      r!   cb_wrong_return_typezOThreadedTests.test_sni_callback_wrong_return_type.<locals>.cb_wrong_return_type4  s    r#   Frp  rq  TLSV1_ALERT_INTERNAL_ERROR)rj  r  r   r|  r   r
   r   rm  r   r   r  r}  r~  r   )r   r   ri  r   r  r  r}  r  s           r!   #test_sni_callback_wrong_return_typez1ThreadedTests.test_sni_callback_wrong_return_type/  s     9=8I8I8K5~	../CD//1 	CU""3<<0 DB*>>274BDD R\\002NOU--66	B	C 	CD D	C 	Cs$    CC-ACC	CC#c                 2  	 t               \  }}}|j                  d       |j                  d       g d}t        |||      }|d   d   }| j                  t	        |      d       |D ],  \  	}}t        	fd|D              r| j                  	       . y )NzAES128:AES256zAES256:eNULL)r"  zAES-256TLS_CHACHA20TLS_AESrj  rg  r   c              3   &   K   | ]  }|v  
 y wrW   rX   )r;  algr    s     r!   r<  z4ThreadedTests.test_shared_ciphers.<locals>.<genexpr>Q  s     <ssd{<s   )r   rR   rm  assertGreaterrc   anyr.  )
r   r   r   r   expected_algsr  r   tls_versionbitsr    s
            @r!   test_shared_ciphersz!ThreadedTests.test_shared_ciphersB  s    3B3D0""?3"">2
 #>>,46/033w<+'. 	 #D+t<m<<		$	 r#   c                    t               \  }}}t        |d      }|5  |j                  t        j                         |      }|j	                  t
        |j                  f       |j                          | j                  t        |j                  d       | j                  t        |j                  d       d d d        y # 1 sw Y   y xY w)NFr  r  r  s   hello)r   r  r   r   r  r
  r  r  r   r   rK   r   r  s         r!   ,test_read_write_after_close_raises_valuerrorz:ThreadedTests.test_read_write_after_close_raises_valuerrorT  s    3B3D0#N5I 	=**6==?;C + EAIItV[[)*GGIj!&&$7j!''8<	= 	= 	=s   BC  C	c                    d}t        t        j                  d      5 }|j                  |       d d d        | j	                  t        j
                  t        j                         t               \  }}}t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       t        t        j                  d      5 }|j                  |       | j                  |j                  d      |       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   'xY w# 1 sw Y   +xY w# 1 sw Y   y xY w)Ns   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwbFr  r  r  r  )rJ   r   TESTFNr   r  unlinkr   r  r   r   r  r
  r  sendfiler   r`  )	r   	TEST_DATArM   r   r   r   r  r   files	            r!   test_sendfilezThreadedTests.test_sendfilea  s#   	)""D) 	QGGI		(()*:*:;3B3D0#N5I 	>++FMMO<D , F >IJ		4-.)**D1 >TJJt$$$QVVD\9=>>	> 	>	 	> >> >	> 	>sG   D0&E(<E	$3D=E	E0D:=EE		E	EEc                 "   t               \  }}}t        j                  j                  |_        t        |||      }|d   }| j                  |j                         | j                  |j                  d       | j                  |j                  d       | j                  |j                         | j                  |j                  d       | j                  |d          |j                         }| j                  |d   d       | j                  |d   d       t        ||||      }|j                         }| j                  |d   d	       | j                  |d   d       | j                  |d          |d   }| j                  |j                  |j                         | j                  ||       | j!                  ||       | j#                  |j                  |j                         | j#                  |j                  |j                         t        |||      }| j                  |d          |d   }| j%                  |j                  |j                         | j%                  ||       |j                         }| j                  |d   d
       | j                  |d   d       t        ||||      }| j                  |d          |d   }	| j                  |	j                  |j                         | j                  |	|       | j#                  |	j                  |j                         | j#                  |	j                  |j                         |j                         }| j                  |d   d       | j                  |d   d	       y )Nr  r[  r   re  r  r7  r  )r[  rj  r  r   r8  )r   r
   r   rk   rh   rm  rF  idr  r   rq  
has_ticketticket_lifetime_hintrP  r  r   assertIsNotr   r:  )
r   r   r   r   r  r[  	sess_statsession2session3session4s
             r!   test_sessionzThreadedTests.test_sessionp  s   3B3D0),)?)?& #>>,46	"

#7<<+7??A.**+777;/01"002	8,a06*A. #>>+2XG"002	8,a06*A../0#gjj17+7+w||< 0 0'//B #>>,46/01#HKK4Hg."002	8,a06*A. #>>+2XG./0#gjj17+w||< 0 0'//B"002	8,a06*A.r#   c                 t   t               \  }}}t               \  }}}t        j                  j                  |_        t        j                  j                  |_        t        |d      }|5  |j                  t        j                         |      5 }| j                  |j                  d        | j                  |j                  d        |j                  t        |j                  f       |j                  }| j                  |       | j                  t               5 }	t"        |_	        d d d        | j                  t%        	j&                        d       d d d        |j                  t        j                         |      5 }|j                  t        |j                  f       | j                  t(              5 }	|_	        d d d        | j                  t%        	j&                        d       d d d        |j                  t        j                         |      5 }|_	        |j                  t        |j                  f       | j                  |j                  j*                  |j*                         | j                  |j                  |       | j                  |j                  d       d d d        |j                  t        j                         |      5 }| j                  t(              5 }	|_	        |j                  t        |j                  f       d d d        | j                  t%        	j&                        d       d d d        d d d        y # 1 sw Y   0xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ^xY w# 1 sw Y   y xY w)NFr  r  zValue is not a SSLSession.z#Cannot set session after handshake.Tz)Session refers to a different SSLContext.)r   r
   r   rk   rh   r  r   r   r   r[  re  r  r
  r  rF  r   r   r  r\   r   r   r  )
r   r   r   r   client_context2rO  r  r   r[  r  s
             r!   test_session_handlingz#ThreadedTests.test_session_handling  s    3B3D0 / 1A *-)?)?&*-..*@*@'#N5I '	N++FMMO<D , F 
QIJ  D1  !1!148		4-.))(&&y1 'Q &AI'  Q[[!13OP
Q  ++FMMO<D , F HIJ		4-.&&z2 (a 'AI(  Q[[!1!FHH  ++FMMO<D , F 9IJ $			4-.  wzz:  G4  !1!1489 !,,V]]_=E - G NJK&&z2 3a 'AIIItV[[123   Q[[!1!LNNA'	N '	N' '
Q 
Q ( (	H H9 93 3N NA'	N '	Ns   *&N.BM#M(-M#-N.7M=9M0-M=.-N.BN
,-N.N"/)N-N"N.M M##M-	(N.0M:5M==N	N.
N	N.NN""N+	'N..N7N)Irz  r  r  r   r  r  r  r  r  rr   r  r
   rU  rW  r  r  r  r  r{   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r  r$  r&  r+  r  r-  r/  r1  r3  r6  r  r  rC  rQ   rE  rJ  rL  r  r  rS  rV  rX  r[  rd  rg  rj  rl  r  rx  r  r  r  r  r  r  r  rX   r#   r!   r}  r}  
  s   Wz**" +*"X"/H+EZ#2J X'')T33*@*@4@LD#EJ )$ %4'R5>?B '"	J #	J '"
; #
; )$N %N )$R %R*7r!4C:FP6&2*:/b&,PA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=@&$PKK&C& $=>7/r0Nr#   r}  rY  zTest needs TLS 1.3c                   N    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)TestPostHandshakeAuthc                    t         j                  t         j                  g}|D ]a  }t         j                  |      }| j	                  |j
                  d       d|_        | j	                  |j
                  d       t         j                  |_        | j	                  |j                  t         j                         | j	                  |j
                  d       d|_        | j	                  |j                  t         j                         | j	                  |j
                  d       t         j                  |_        d|_        | j	                  |j                  t         j                         | j	                  |j
                  d       d y r  )	r
   r`   ra   rl   r   post_handshake_authr   r   r   )r   r{  rd   rT   s       r!   test_pha_setterz%TestPostHandshakeAuth.test_pha_setter  s'   ##S%<%<
	 " 	<H..*CS44e<&*C#S44d;!//COS__c.?.?@S44d;&+C#S__c.?.?@S44e<!//CO&*C#S__c.?.?@S44d;%	<r#   c                    t               \  }}}d|_        t        j                  |_        d|_        |j                  t               t        |d      }|5  |j                  t        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                  d       | j                  |j                  d      d	       |j                  d       |j                  d      j!                  d      }| j#                  d|       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NTFr  r  r  r  r  r  r  r  r  i   r  r9   )r   r  r
   r   r   r   r   r  r   r   r  r
  r  r   r   r`  decoder  )r   r   r   r   r  r   	cert_texts          r!   test_pha_requiredz'TestPostHandshakeAuth.test_pha_required  s|   3B3D0-1*%(%6%6"-1*&&7#N5I 	J++FMMO<D , F JIJ		4-.
#  z:  w7
#  y9  w7
#FF4L//
;	=yIJ	J 	JJ J	J 	Js%   &G<D-F:)G:G	?GGc                    t               \  }}}d|_        t        j                  |_        d|_        d }||_        ||_        t        |d      }|5  |j                  t        j                         |d      5 }|j                  t        |j                  f       |j                  d       | j                  t        j                  d      5  |j                  d      }| j!                  |d	       |j                  d
       |j                  d       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)NTc                     t         j                  r@|t        j                  k(  r,| |||||f}t        j
                  j                  d|d       y y y )NzTLS: r   )r   r   r   ALERTr   r   r   )r7  	directionr8   content_typemsg_typer   r  s          r!   msg_cbz>TestPostHandshakeAuth.test_pha_required_nocert.<locals>.msg_cb  sK    <?3H3H#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_callbackr  r   r   r  r
  r  r   r   r   r`  r   )r   r   r   r   r  r  r   r   s           r!   test_pha_required_nocertz.TestPostHandshakeAuth.test_pha_required_nocert  s2   3B3D0-1*%(%6%6"-1*	5
 (.$'-$#N4H 	!++FMMO<DAF , H !KL		4-. ++LL9 !
 66$<D$$T73 GGJ' FF4L!!	! 	!! !! !	! 	!s>   'E9AD7AD+D7E+D40D77E 	<EEc                 B   t         j                  rt        j                  j	                  d       t               \  }}}d|_        t        j                  |_	        d|_        |j                  t               t        j                  |_	        t        |d      }|5  |j                  t        j                         |      5 }|j!                  t"        |j$                  f       |j	                  d       | j'                  |j)                  d      d       |j	                  d	       | j'                  |j)                  d      d
       |j	                  d       | j'                  |j)                  d      d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   TFr  r  r  r  r  r  r  r  )r   r   r   r   r   r   r  r
   r   r   r   r   r   r  r   r   r  r
  r  r   r`  r  s         r!   test_pha_optionalz'TestPostHandshakeAuth.test_pha_optional4  sF   ??JJT"3B3D0-1*%(%6%6"-1*&&7 &)%6%6"#N5I 		:++FMMO<D , F :IJ		4-.
#  z:  w7
#  y9:		: 		:: :		: 		:s%   &F B8F	8F	F	FFc                    t         j                  rt        j                  j	                  d       t               \  }}}d|_        t        j                  |_	        d|_        t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       |j	                  d       | j!                  |j#                  d      d       |j	                  d	       | j!                  |j#                  d      d
       |j	                  d       | j!                  |j#                  d      d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   TFr  r  r  r  r  r  r  )r   r   r   r   r   r   r  r
   r   r   r  r   r   r  r
  r  r   r`  r  s         r!   test_pha_optional_nocertz.TestPostHandshakeAuth.test_pha_optional_nocertL  s(   ??JJT"3B3D0-1*%(%6%6"-1*#N5I 
	;++FMMO<D , F 	;IJ		4-.
#  z:  w7
#  z:	;
	; 
	;	; 	;
	; 
	;s%   0&E+B8EE+E(	$E++E4c                 n   t               \  }}}d|_        t        j                  |_        |j                  t               t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       | j                  t        j                  d      5  |j                          d d d        |j!                  d       | j#                  d|j%                  d             d d d        d d d        y # 1 sw Y   LxY w# 1 sw Y   xY w# 1 sw Y   y xY w)	NTFr  r  z
not serverr  s   extension not receivedr  )r   r  r
   r   r   r   r   r  r   r   r  r
  r  r   r   r  r   r  r`  r  s         r!   test_pha_no_pha_clientz,TestPostHandshakeAuth.test_pha_no_pha_clientb  s
   3B3D0-1*%(%6%6"&&7#N5I 	G++FMMO<D , F GIJ		4-.++CLL,G 522457FG	G 	G5 5G G	G 	Gs=   &D+5AD7D:DD+DDD(	$D++D4c                    t               \  }}}t        j                  |_        d|_        |j                  t               t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       |j                  d       | j                  |j                  d      d       |j                  d       | j                  |j                  d      d	       |j                  d       | j                  |j                  d      d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)
NTFr  r  r  r  r  r  r  )r   r
   r   r   r  r   r   r  r   r   r  r
  r  r   r   r`  r  s         r!   test_pha_no_pha_serverz,TestPostHandshakeAuth.test_pha_no_pha_serverr  s   3B3D0%(%6%6"-1*&&7#N5I 
	:++FMMO<D , F 	:IJ		4-.
#  y9  w7
#  y9	:
	: 
	:	: 	:
	: 
	:s%   &E
5B8D>-E
>E	E

Ec                 "   t               \  }}}t        j                  |_        t        j                  j
                  |_        d|_        |j                  t               t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       |j!                  d       | j#                  d|j%                  d             d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NTFr  r  r  s   WRONG_SSL_VERSIONr  )r   r
   r   r   r   rk   rh   r  r   r   r  r   r   r  r
  r  r   r  r`  r  s         r!   test_pha_not_tls13z(TestPostHandshakeAuth.test_pha_not_tls13  s    3B3D0%(%6%6"),)?)?&-1*&&7#N5I 	B++FMMO<D , F BIJ		4-.2AFF4LAB	B 	BB B	B 	Bs%   .&DAC9(D9D	>DDc                    t         }t        j                  t        j                        }d|_        |j                  t               d|_        t        j                  |_	        t        j                  t        j                        }|j                  t               |j                  t               d|_        t        j                  |_	        t        |d      }|5  |j                  t!        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        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NTFr  r  r  r  r  r  r  r  )r   r
   rl   ra   r  r   r   r   r   r   r`   r   r   r   r  r   r   r  r
  r  r   r   r`  rY  )r   r   r   r   r  r   s         r!   test_bpo37428_pha_cert_nonez1TestPostHandshakeAuth.test_bpo37428_pha_cert_none  s    ,(?(?@-1*&&7(-%%(]]"(?(?@&&7,,Z8-1*%(%6%6"#N5I 	6++FMMO<D , F 
6IJ		4-.
#  z:  w7
#  y9  "5
6	6 	6
6 
6	6 	6s%   &G5 CG)G5)G2	.G55G>c           	         t        d      \  }}}t        |d      }|5  |j                  t        j                         |      5 }|j	                  t
        |j                  f       |j                  j                         }| j                  t        |      d       |\  }}|j                  j                         }	| j                  t        |	      d       | j                  ||	d          | j                  t        |      t        |	d                | j                  t        |      t        |	d                | j                  ||       | j                  t        |      t        |             | j                  t        |      t        |             | j                  |j                         |j                                | j!                  dt        |             | j!                  d	t        |             |j#                  t$        j&                        }
|j#                  t$        j(                        }| j+                  |
t,               | j!                  d
|
       | j+                  |t.               | j                  t0        j3                  |
      |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NFr   r  r  r  r7  r   zCN=localhostzCN=our-ca-serverz-----BEGIN CERTIFICATE-----)r   r  r   r   r  r
  r  r  r   r   rc   r  hashr   r:  get_infor  public_bytesr   ENCODING_PEMENCODING_DERrA  r\   r  r
   r+  )r   r   r   r   r  r   vceecauvcr1  r  s               r!   test_internal_chain_clientz0TestPostHandshakeAuth.test_internal_chain_client  s&   3B4
0 $N5I 	++ ( ,   		4-.YY113  R!,Bii446  S1-  SV,  b4A<8  b4A<8##B+##DHd2h7##DHd2h7##BKKM2;;=And2h70$r(;ood&7&78ood&7&78%%c3/;SA%%c51  ,,S137	 	 	 	s$   &J6IJ*J6*J3	/J66J?c                    t               \  }}}|j                  t               t        j                  |_        t        j                  j                  |_        t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       |j                  d       |j!                  d      }| j#                  |d       |j                  d       |j!                  d      }| j#                  |d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NFr  r  s   VERIFIEDCHAIN
r  s   
s   UNVERIFIEDCHAIN
)r   r   r   r
   r   r   r   rk   rh   r  r   r   r  r
  r  r   r`  r   )r   r   r   r   r  r   ress          r!   test_internal_chain_serverz0TestPostHandshakeAuth.test_internal_chain_server  s
   3B3D0&&7%(%6%6"),)?)?&#N5I 	1++ ( ,  
1 		4-.*+ffTl  i0,-ffTl  i0
1	1 	1
1 
1	1 	1s%   '&D4B
D(D4(D1	-D44D=N)rz  r  r  r  r  r  r  r  r  r  r  r  r  r  rX   r#   r!   r  r    s>    <0J2#!J:0;,G :(B"6>#J1r#   r  keylog_filenamez0test requires OpenSSL 1.1.1 with keylog callbackc                   D   e Zd Zej                  fdZe ej                  e	d      d               Z
e ej                  e	d      d               Ze ej                  ej                  j                  d       ej                  e	d      d                      Zd Zd Zd	 Zy
)TestSSLDebugc                 l    t        |      5 }t        t        |            cd d d        S # 1 sw Y   y xY wrW   )rJ   rc   r  )r   fnamerM   s      r!   keylog_lineszTestSSLDebug.keylog_lines  s+    %[ 	 AtAw<	  	  	 s   *3r  c                 2   | j                  t        j                  t        j                         t        j                  t        j                        }| j                  |j                  d        | j                  t        j                  j                  t        j                               t        j                  |_        | j                  |j                  t        j                         | j                  t        j                  j                  t        j                               | j                  | j                         d       d |_        | j                  |j                  d        | j                  t         t"        f      5  t        j                  j%                  t        j                  j'                  t        j                              |_        d d d        | j                  t(              5  d|_        d d d        y # 1 sw Y   /xY w# 1 sw Y   y xY w)Nr7  )r  r   r  r  r
   rl   ra   r   r  rP  r   r   isfilerF  r  r   IsADirectoryErrorPermissionErrorr   abspathr   r,  s     r!   test_keylog_defaultsz!TestSSLDebug.test_keylog_defaults  so    		(()*:*:;nnS445,,d3	(8(89:'..,,i.>.>?y'7'789**,a0",,d3 1?CD 	3"$''//	 0 01#3C	3
 y) 	$"#C	$ 	$	3 	3
	$ 	$s   AH0HH
Hc                    | j                  t        j                  t        j                         t	               \  }}}t        j                  |_        t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       d d d        d d d        | j                  | j                         d       d |_        t        j                  |_        t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       d d d        d d d        | j                  | j                         d       t        j                  |_        t        j                  |_        t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       d d d        d d d        | j                  | j                         d       d |_        d |_        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   txY w# 1 sw Y   xxY w)NFr  r  r        )r  r   r  r  r   r  r  r   r   r  r
  r  r   r  r   r  s         r!   test_keylog_filenamez!TestSSLDebug.test_keylog_filename  s    		(()*:*:;3B3D0)2)9)9&#N5I 	/++FMMO<D , F /IJ		4-./	/
 	**,a0)-&)2)9)9&#N5I 	/++FMMO<D , F /IJ		4-./	/ 	 1 1 3R8)2)9)9&)2)9)9&#N5I 	/++FMMO<D , F /IJ		4-./	/ 	 1 1 3R8)-&)-&3/ /	/ 	// /	/ 	// /	/ 	/sl   !&I	"H<)I	&I#*"II#5&I<"I0=I<<I	I		II 	I##I-0I9	5I<<Jz.test is not compatible with ignore_environmentc                    | j                  t        j                  t        j                         t        j
                  j                  j                  t        j                        5  t        j                  t        j                  d<   | j                  t        j                  d   t        j                         t        j                  t        j                        }| j                  |j                  d        t        j                         }| j                  |j                  t        j                         t        j!                         }| j                  |j                  t        j                         d d d        y # 1 sw Y   y xY w)NSSLKEYLOGFILE)r  r   r  r  rr   mockrM  dictr   environr   r
   rl   ra   r  r  r  r,  s     r!   test_keylog_envzTestSSLDebug.test_keylog_env6  s   
 		(()*:*:;]]  %%bjj1 	D*3*:*:BJJ'RZZ8):J:JK..!8!89CS00$7,,.CS00)2B2BC,,.CS00)2B2BC	D 	D 	Ds   &DE==Fc                    t               \  }}}d }| j                  |j                  d        ||_        | j                  |j                  |       | j                  t              5  t               |_        d d d        y # 1 sw Y   y xY w)Nc                      y rW   rX   r7  r  r8   r  r  r   s         r!   r  z.TestSSLDebug.test_msg_callback.<locals>.msg_cbL  r  r#   )r   r   r  r   r   r  )r   r   r   r   r  s        r!   test_msg_callbackzTestSSLDebug.test_msg_callbackI  su    3B3D0	 	n22D9'-$n22F;y) 	4+18N(	4 	4 	4s   &A??Bc                 ~    t               \  }}}t        j                  j                  |_        g  fd}||_        t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       d d d        d d d         j                  dt        j                  t        j                  t        j                   f        j                  dt        j                  t        j"                  t        j"                  f       y # 1 sw Y   xY w# 1 sw Y   xY w)Nc                     j                  | t        j                         j                  |t               j	                  |ddh       j                  ||||f       y )NrK   r   )rA  r
   r   r  r  r  )r7  r  r8   r  r  r   r  r   s         r!   r  z4TestSSLDebug.test_msg_callback_tls12.<locals>.msg_cb[  sO    !!$6!!$.MM)fg%67JJ	7L(CDr#   Fr  r  rK   r   )r   r
   r   rk   rh   r  r  r   r   r  r
  r  r  r   	HANDSHAKEr   SERVER_KEY_EXCHANGECHANGE_CIPHER_SPEC)r   r   r   r   r  r  r   r  s   `      @r!   test_msg_callback_tls12z$TestSSLDebug.test_msg_callback_tls12U  s   3B3D0),)?)?&	E (.$#N5I 	/++FMMO<D , F /IJ		4-./	/
 	Z'')B)B002	

 	j((/*L*L//1	
/ /	/ 	/s$   &D34"D'D3'D0	,D33D<c                    t               \  }}}t               d   d }fd}||_        ||_        t        |d      }|5  |j	                  t        j
                         |      5 }|j                  t        |j                  f       d d d        |j	                  t        j
                         |      5 }|j                  t        |j                  f       d d d        d d d        y # 1 sw Y   axY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr7  c                      y rW   rX   r  s         r!   r  z@TestSSLDebug.test_msg_callback_deadlock_bpo43577.<locals>.msg_cbx  r  r#   c                     | _         y rW   r  )r   r  rT   server_context2s      r!   sni_cbz@TestSSLDebug.test_msg_callback_deadlock_bpo43577.<locals>.sni_cb{  s
    *DLr#   Fr  r  )	r   r  sni_callbackr  r   r   r  r
  r  )	r   r   r   r   r  r  r  r   r  s	           @r!   #test_msg_callback_deadlock_bpo43577z0TestSSLDebug.test_msg_callback_deadlock_bpo43577t  s    3B3D0)+A.		+ (.$&,##N5I 	/++FMMO<D , F /IJ		4-./  ++FMMO<D , F /IJ		4-./		/ 	// // /		/ 	/s<   &D("C*
-D7"C6D*C3	/D6C?	;DDN)rz  r  r  r   r  r  requires_keylogrr   r  r  r  r  r   flagsignore_environmentr  r  r  r  rX   r#   r!   r  r    s    !*!1!1   X__^%PQ$ R $, X__^%PQ . R  .D X__SYY11EGX__^%PQD RG D
4
>/r#   r  c           	          | j                  t        j                  t        j                  t	        j
                  ddd             y )Niir7  r   )
setsockoptr   
SOL_SOCKET	SO_LINGERstructpack)r   s    r!   )set_socket_so_linger_on_with_zero_timeoutr    s+    OOF%%v'7'7T1a9PQr#   c                   R    e Zd ZdZ G d dej
                        Zd Zd Zd Z	d Z
y)	TestPreHandshakeClosezQVerify behavior of close sockets with received data before to the handshake.
    c                   @     e Zd Zdd fd
Zd Zd Z fdZd Z xZS )6TestPreHandshakeClose.SingleConnectionTestServerThreadN)rq  c                    || _         d| _        d | _        d | _        d | _        |t
        j                  | _        n|| _        t        | %  |       y )Nr#   r   )
call_after_acceptreceived_data
wrap_errorr  r  r   r  rq  superr  )r   r    r  rq  ry  s       r!   r  z?TestPreHandshakeClose.SingleConnectionTestServerThread.__init__  sQ    %6D"!$D"DO DMDI&44&G$'r#   c                 &    | j                          | S rW   )r  r   s    r!   r  z@TestPreHandshakeClose.SingleConnectionTestServerThread.__enter__  s    JJLKr#   c                     	 | j                   r| j                   j                          | j                          d | _        y # t        $ r Y #w xY wrW   )r  r  r_  r   r  r  s     r!   r  z?TestPreHandshakeClose.SingleConnectionTestServerThread.__exit__  sD    ==MM'') IIK"DO  s   &A   	AAc                 H   t         j                  t         j                  j                        | _        t         j
                  | j                  _        | j                  j                  t               | j                  j                  t        t               t        j                         | _        t        j                  | j                        | _        | j                  j!                  | j"                         | j                  j%                  d       t&        | Q          y )Nr  rm  r7  )r
   r  r  r  ssl_ctxr   r   r   r  r   r  r   r  r   r  r  ro  rq  r#  r  r  )r   ry  s    r!   r  z<TestPreHandshakeClose.SingleConnectionTestServerThread.start  s    55ckk6M6MNDL'*'8'8DLL$LL..h.?LL(((G(L"MMODM%//>DIMM$$T\\2MM  #GMOr#   c                 ,   	 | j                   j                         \  }}	 | j                   j                          |5  | j	                  |      r
	 d d d        y 	 | j
                  j                  |d      }	 |j                  d      | _        d d d        y # t        $ r Y | j                   j                          y w xY w# | j                   j                          w xY w# t        $ r Y \w xY w# t        $ r}|| _
        Y d }~ud }~ww xY w# 1 sw Y   y xY w)NTr    )r  r  r$  r  r  r  r   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!QJ-7__S-A*    ##%	 ##% #   *&)DOO* sp   B D
C-7C	B<B? ;B<<B? ?C	C*'D
)C**D
-	D6D=D
DD

D)	rz  r  r  r  r  r  r  r	  __classcell__)ry  s   @r!    SingleConnectionTestServerThreadr    s    ?C 
	(		#			r#   r  c                 f   t         j                  dk(  ry t        |t              s]t        |t              r|j
                  t
        j                  k(  s0t        j                  dt        |dd      t        j                        r)	 | j                  dt         j                   d|       d }y y # d }w xY w)Nlinuxzwrong.version.numberr  rS  z!Could not recreate conditions on z: err=)r   r  r[   r  r_  r  EINVALr  searchr^   r  r  r>  s     r!   "non_linux_skip_if_other_okay_errorz8TestPreHandshakeClose.non_linux_skip_if_other_okay_error  s    <<7"s01W%#))u||*CII,gc8R.H"$$O A#,, P'"%) *  P s   %B, ,B0c                 "   t        j                         t        j                         fd}| j                  |d      }| j                  |       t	        j                         5 }|j                  |j                  j                                t        |       |j                  d       j                          |j                  d       |j                          d d d        j                          |j                          |j                  }d |_        	 | j!                  d|j"                         | j%                  |t&               | j)                  |       | j%                  |t*        j,                         | j/                  d|j0                  d          | j/                  d|j2                         | j5                  d	|j0                  d	          | j7                  |j8                  d
       d }d }y # 1 sw Y   xY w# d }d }w xY w)Nc                 z    j                          j                  t        j                        st	        d      y)Nz+wrap_socket event never set, test may fail.F)r  r  r   r  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4W5J5JK"#PQQr#   preauth_data_to_tls_serverr  r    Fs   DELETE /data HTTP/1.0

r#   before TLS handshake with datar7  r   attr must existr  )r  r  r  rT  r   r  r  r  r  r"  r  rd  r  r  r   r  r   r  rA  r_  r  r
   r   r  rt   r  r:  r  r  )r   r  r  rN  r  r$  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 	&!]]_ 	NN6??66895f=u% %%'KK89LLN	 	%((*&&
 	S&"6"67!!*g633J?!!*cll;MM:JOOA<NOMM:J<M<MN:??1#56j006GH JF7	 	4 JFs   )A7G;CH ;HHc                 T  	
 t        j                         
t        j                         		
fd}| j                  |d      }| j                  |       t	        |j
                         t        j                         5 }|j                  |j
                  j                                
j                          	j                  t        j                        s| j                  d       t        j                         }	 |j!                  |d      }d }|j#                  d      }|j%                          d d d        |j)                          	 | j+                  d       | j-                  t&               | j/                  |       | j-                  |t        j0                         | j3                  d	|j4                  d
          | j3                  d	|j6                         | j9                  d|j4                  d          | j;                  |j<                  d       t?        j@                  |       5  d }d d d        d }y # t&        $ r}|}d}Y d }~d }~ww xY w# 1 sw Y   )xY w# 1 sw Y   d }y xY w# t?        j@                  |       5  d }d d d        d }w # 1 sw Y   d }w xY wxY w)Nc                     j                  t        j                        st        d       t	        |        | j                  d       | j                          j                          y)Nz ERROR: test client took too longsW   HTTP/1.0 307 Temporary Redirect
Location: https://example.com/someone-elses-server

T)r  r   r  r  r  rd  r  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_accept  sZ    7<<W=R=RS89 6nE   "0446r#   preauth_data_to_tls_clientr'  ztest server took too longr.   r  r  r#   r(  r7  r   r)  r  )!r  r  r  rT  r  r  r   r  r  r  r  r   r  r.  r
   r  r   r`  r  r_  r   r   rA  r  r   r  rt   r  r:  r  r  r   r  )r   r  r  rN  r  
tls_clientr  r  r?  r.  r/  s            @@r!   test_preauth_data_to_tls_clientz5TestPreHandshakeClose.test_preauth_data_to_tls_client  s;   /8/@,/8/@,	 66"31 7 3 	&!1&//B]]_ 	#NN6??668904467<<W=R=RS		56002G	#$00 1 =
 "
 * 4  "!	#$ 		S-0!!*g633J?!!*cll;MM:JOOA<NOMM:J<M<MN:??1#56j006GH !::4@ "!
"F-  $ 
 #$	# 	#<"F !::4@ "!
"F"Fsh   >A>I=H?#ICI5 1I'?	IIIIII$'I25J'JJ'J$	J'c                    t        j                          G fddt        j                  j                        }fd}d}| j                  |d|      }| j                  |       t        |j                          ||j                  j                         d   |j                  t        j                         |      }t        j                  |       5  | j                  t               5  |j#                  d	d
ddi       |j%                         }d d d        d d d        |j'                          y # 1 sw Y   "xY w# 1 sw Y   &xY w)Nc                       e Zd Z fdZy)eTestPreHandshakeClose.test_https_client_non_tls_response_ignored.<locals>.SynchronizedHTTPSConnectionc                 `   t         j                  j                  j                  |        j	                  t
        j                        s/t
        j                  rt        j                  j                  d       | j                  j                  | j                  | j                        | _        y )Nz"server_responding event never set.r  )httprN  HTTPConnectionr  r  r   r  r   r   r   r   _contextr   r   r  )r   server_respondings    r!   r  zmTestPreHandshakeClose.test_https_client_non_tls_response_ignored.<locals>.SynchronizedHTTPSConnection.connectS  st     **2248 )--g.C.CDJJ$$%IJ MM55		499 6 >	r#   N)rz  r  r  r  )r:  s   r!   SynchronizedHTTPSConnectionr5  R  s    	>r#   r;  c                 ~    t        |        | j                  d       | j                          j                          y)Ns!   HTTP/1.0 402 Payment Required

T)r  rd  r  r  )r-  r:  s    r!   r  z[TestPreHandshakeClose.test_https_client_non_tls_response_ignored.<locals>.call_after_accept^  s;    5nE   "!!#r#   g       @non_tls_http_RST_responder)r  r    rq  r   )r  r   rq  HEADz/testHostr.   )headers)r  r  r7  rN  HTTPSConnectionr  rT  r  r  r  r  r
   r  r   r  r   r_  r  getresponser   )r   r;  r  rq  r  
connectionresponser:  s          @r!   *test_https_client_non_tls_response_ignoredz@TestPreHandshakeClose.test_https_client_non_tls_response_ignoredO  s   %OO-
	>$++*E*E 
	>	 66"31 7 ! 	&!1&//B0++-a0[[224	

 66t< 	0!!'*	0vw8MN!--/H	0 	0
 		0 	0 	0 	0s$   D>*'D2D>2D;	7D>>EN)rz  r  r  r  r  r  r  r  r*  r2  rE  rX   r#   r!   r	  r	    s0    :9+;+; :x2*X9v3r#   r	  c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)TestEnumerationsc                 j     G d dt         j                        }t        j                  |t               y )Nc                       e Zd Zej                  Zej                  Zej                  Z	ej                  Zej                  Zej                  Zej                   Zy);TestEnumerations.test_tlsversion.<locals>.CheckedTLSVersionN)rz  r  r  r   PROTO_MINIMUM_SUPPORTEDrm   PROTO_SSLv3r   PROTO_TLSv1r   PROTO_TLSv1_1r   PROTO_TLSv1_2rk   PROTO_TLSv1_3rY  PROTO_MAXIMUM_SUPPORTEDrn   rX   r#   r!   CheckedTLSVersionrJ    sQ     $ < <$$E$$E((G((G((G $ < <r#   rR  )enumIntEnum_test_simple_enumr   )r   rR  s     r!   test_tlsversionz TestEnumerations.test_tlsversion  s%    	= 	= 	0*=r#   c                 j     G d dt         j                        }t        j                  |t               y )Nc                   (    e Zd ZdZdZdZdZdZdZdZ	y)	DTestEnumerations.test_tlscontenttype.<locals>.Checked_TLSContentTypezPContent types (record layer)

            See RFC 8446, section B.1
            r_  r        r9    N)
rz  r  r  r  r  r  r  APPLICATION_DATAHEADERINNER_CONTENT_TYPErX   r#   r!   Checked_TLSContentTyperY    s*     "$EI!F!&r#   r`  )rS  rT  rU  r   )r   r`  s     r!   test_tlscontenttypez$TestEnumerations.test_tlscontenttype  s%    	'T\\ 	' 	5Gr#   c                 j     G d dt         j                        }t        j                  |t               y )Nc                       e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!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  rZ     (   )   r$  +   ,   -   .   /   r8  1   2   3   <   F   G   P   V   Z   r^  m   n   o   p   q   r   s   t   x   N)&rz  r  r  r  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_PROTOCOLrX   r#   r!   Checked_TLSAlertTyperd    s     L!#N " O$&! "N O&(#"$"$"$ "JMLM!#!$&!N%'"M" #$'!'*$ #.1+),&#& #& &)#r#   r  )rS  rT  rU  r   )r   r  s     r!   test_tlsalerttypez"TestEnumerations.test_tlsalerttype  s&    &	*4<< &	*N 	3]Cr#   c                 j     G d dt         j                        }t        j                  |t               y )Nc                   h    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZy)DTestEnumerations.test_tlsmessagetype.<locals>.Checked_TLSMessageTypezVMessage types (handshake protocol)

            See RFC 8446, section B.3
            r   r7  r  r   r8  r   r  r  r  r9        r;  r   r_  r  rZ  r[     C      r\  N)rz  r  r  r  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  rX   r#   r!   Checked_TLSMessageTyper    s     MLL#$  ! !"##$ K"$"$K!#"$H O!# "JJL!'r#   r  )rS  rT  rU  r   )r   r  s     r!   test_tlsmessagetypez$TestEnumerations.test_tlsmessagetype  s%    	(T\\ 	(6 	5Gr#   c                     t        j                  t         j                  ddd t        j                        }|j
                  |_        t        j                  |t        j                         y )N
_SSLMethodr
   c                 2    | j                  d      xr | dk7  S )NrZ   r   r]   r   s    r!   r  z1TestEnumerations.test_sslmethod.<locals>.<lambda>  s    T__[9WdFW>W r#   source)	rS  _old_convert_rT  r
   r   r_   r   rU  r  )r   Checked_SSLMethods     r!   test_sslmethodzTestEnumerations.test_sslmethod  sN     ..lEWxx ->,J,J)0#..Ar#   c                     t        j                  t         j                  ddd t        j                        }t        j
                  |t        j                         y )NOptionsr
   c                 $    | j                  d      S )Nr   r  r   s    r!   r  z/TestEnumerations.test_options.<locals>.<lambda>  s    T__U3 r#   r  )rS  r  IntFlagr
   r   rU  r  )r   CheckedOptionss     r!   r   zTestEnumerations.test_options  s=    ++i3xx
 	~s{{;r#   c                     t        j                  t         j                  ddd t        j                        }t        j
                  |t        j                         y )NAlertDescriptionr
   c                 $    | j                  d      S )NALERT_DESCRIPTION_r  r   s    r!   r  z8TestEnumerations.test_alertdescription.<locals>.<lambda>  s    T__-AB r#   r  )rS  r  rT  r
   r   rU  r  )r   CheckedAlertDescriptions     r!   test_alertdescriptionz&TestEnumerations.test_alertdescription  sB    "&"4"40%Bxx#
 	68L8LMr#   c                     t        j                  t         j                  ddd t        j                        }t        j
                  |t        j                         y )NSSLErrorNumberr
   c                 $    | j                  d      S )N
SSL_ERROR_r  r   s    r!   r  z6TestEnumerations.test_sslerrornumber.<locals>.<lambda>  s    T__\: r#   r  )rS  r  rT  r
   r   rU  r  )r   Checked_SSLErrorNumbers     r!   test_sslerrornumberz$TestEnumerations.test_sslerrornumber  sB    !%!3!3.:xx"
 	5s7I7IJr#   c                     t        j                  t         j                  ddd t        j                        }t        j
                  |t        j                         y )NVerifyFlagsr
   c                 $    | j                  d      S )NVERIFY_r  r   s    r!   r  z3TestEnumerations.test_verifyflags.<locals>.<lambda>  s    T__Y7 r#   r  )rS  r  r  r
   r   rU  r  )r   CheckedVerifyFlagss     r!   test_verifyflagsz!TestEnumerations.test_verifyflags  s?    !//mU7xx
 	13??Cr#   c                     t        j                  t         j                  ddd t        j                        }t        j
                  |t        j                         y )N
VerifyModer
   c                 $    | j                  d      S )NCERT_r  r   s    r!   r  z2TestEnumerations.test_verifymode.<locals>.<lambda>  s    T__W5 r#   r  )rS  r  rT  r
   r   rU  r  )r   CheckedVerifyModes     r!   test_verifymodez TestEnumerations.test_verifymode  s?     ..lE5xx
 	0#..Ar#   N)rz  r  r  rV  ra  r  r  r  r   r  r  r  r  rX   r#   r!   rG  rG    s=    	>H(DTH<B<NKDBr#   rG  c                     t         j                  rt        j                  t        j                  d} | j                         D ]  \  }} |       }|s|d   s|d|} n t        t        j                               }t        dt        j                  dt        j                         t        d|z         t        dt        j                  z         t        dt        j                  z         	 t        dt        j                  z         t        t         t"        t$        t&        t(        t*        t,        t.        t0        t2        t4        fD ]9  }t6        j8                  j;                  |      r#t        j<                  d	|z         t?        j@                         }tC        jD                  t>        jF                  g|  y # t        $ r Y w xY w)
N)MacWindowsr   r}   ztest_ssl: testing with z          under %sz          HAS_SNI = %rz          OP_ALL = 0x%8xz          OP_NO_TLSv1_1 = 0x%8xzCan't read certificate file %r)$r   r   r  mac_ver	win32_veritemsr   r  r
   r@  r?  r   rK  r   rV  r   r  r  r  r  r  r   r   r   r  BADKEYr  r   r   exists
TestFailedr   threading_setuprr   addModuleCleanupthreading_cleanup)platsr    rv   platfilenamethread_infos         r!   setUpModuler    sq   ##))
  ++- 	-JD$6DQ"&-		- ))+,D  #":":< 	="T)*&45(3::56	3c6G6GGH
 	.'>=):	$ R
 ww~~h'$$%E%PQQR #224K.@@O;O  		s   3G 	GG__main__rW   )r  TFNN)Nr   r   )r   rr   unittest.mockr  r   test.supportr   r   r   r   r   r	   r  r  r   rb  r  r   rS  r  http.clientr7  r   r  r   urllib.requestr  r  r~   rU  r  	sysconfigrx   r  ImportErrorimport_moduler
   r   r   r   r   r   r  r  rF  _PROTOCOL_NAMESr%  r
  r?  rj   get_config_varr   rp  r   verr^   rV  r"   r   fsencoder  r  r  r  r  r  r  rs  r  r  r  r*  r   r  r   r   r   r   r   r  r  r   r&  r  r   r   r  r  r  r  r  r   r  r
  r  r  rB   rC   rD   rE   rF   rN   rU   re   	lru_cacherb   r{   r   r   ignore_warningsrv  r  r   r   r   TestCaser   r"  r  r*  rD  rR  r  r  r{  r  test.ssl_serversr  r  r  r.  rm  r{  r}  r  r  rQ   rl   
HAS_KEYLOGr  r  r  r	  rG  r  rz  mainrX   r#   r!   <module>r     s       & " & ) ( !  	      	  	         
 "m!!%(  K K!!=cllg&=3&&'	++y8 1112JK   
)JE3
U#cnnc* &)E"
)F ]#X&^$
M
"X&G$34 23 	8	r{{6"Hl3(L1/ ++&- ." $
% N+&  ;FT0 ++&- . $ ^, *  01 .  x.
}%
&k"	*n%	
M
"01	<	 k"	+, 56 	>	"r{{6" C!4a8 3 2A6 S"6: %c+H!L $S*FJ  ;34* ! !H". 5_44   #}}t!D$/, !0 4 42J	1x(( J	1ZU 8$$ U p4DH%% 4Dn@3X&& @3F.X&& .`y<H-- y<x 9%LX&& L &L4	Z	R /X)) Xtt)) tl ?GEI#.b IJKG\HNH%% HNV0 _Y/1EFP1H-- P1 GP1f S^^%67
%(%%BDT/8$$ T/nRsH-- slTBx(( TBn PF zHMMO {`  F2  s$   S SSSSS