
    0hh                    D
   S SK r S SKrS SKrS SKJr  S SKJr  S SKJr  S SK	J
r
  S SK	Jr  S SK	Jr  S SK	Jr  S S	K	Jr  S S
K	Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK r S SK!r!S SK"r"S SK#r#S SK$J%r%   S SK&r&\
RP                  " S5      r)S SK*r*S SK)J+r+J,r,J-r-J.r.J/r/  \R`                  =(       a    \ RB                  S:H  r1\2" \)Rf                  5      r4\Rj                  r5\)Rl                  S:  r7\"Rp                  " S5      r90 r:S H(  u  r;r< \=" \)\;5      r;\=" \)RX                  \<5      r<\<\:\;'   M*     S r?\?" S5      r@\R                  " \@5      rB\?" S5      rC\?" S5      rD\R                  " \C5      rE\R                  " \D5      rF\?" S5      rG\?" S5      rHSrI\?" S5      rJ\R                  " \J5      rK\?" SS5      rL\?" SS5      rMSSSSSS S!S".rN\?" S#5      rO\?" S$5      rP\?" S%5      rQS&rRS'S(S)S*S+S,S-SS S!S..
rS\?" S/5      rTS0rU\?" S15      rVS2rW\?" S35      rXS4rY\?" S55      rZ\?" SS65      r[\?" S75      r\\?" S85      r]\?" S95      r^S&r_S:r`\?" S;5      ra\?" S<5      rb\?" S=5      rc\?" S>5      rd\?" S?5      re\?" S@5      rf\?" SA5      rg\?" SB5      rh\R                  " \h5      ri\=" \)SCS 5      rj\=" \)SDS 5      rk\=" \)SES 5      rl\=" \)SFS 5      rm\=" \)SGS 5      rnSH ro\o" 5       (       a  SI rpOSJ rpSK rq\#R                  SL 5       rsSM rtSN ruSO rv\R                  " \xSP9ry\)R                  SSSSSQ.SR jr{SSq|Sq}\P4STSU.SV jjr~ " SW SX\R                  5      r " SY SZ\R                  5      r " S[ S\\R                  5      r " S] S^\R                  5      r " S_ S`\R                  5      r " Sa Sb\R                  5      r\GR                  " Sc5       " Sd Se\R                  5      5       rSSf jrSg rS ShKJr   " Si Sj\R                  5      r " Sk Sl\R                  5      r   SSm jr SSn jrSo r " Sp Sq\R                  5      r\GR$                  " \s" Sr5      Ss5       " St Su\R                  5      5       r\" \)GR*                  Sv5      r\GR$                  " \Sw5      r " Sx Sy\R                  5      rSz r " S{ S|\R                  5      r " S} S~\R                  5      rS r\S:X  a  \GR<                  " 5         gg! \' a    Sr& GNvf = f! \> a     GM  f = f)    N)literal_eval)Thread)support)import_helper)	os_helper)socket_helper)threading_helper)warnings_helper)asyncore)nullcontextssl)Purpose
TLSVersion_TLSContentType_TLSMessageType_TLSAlertTypewin32)   r   r   PY_SSL_DEFAULT_CIPHERS))PROTOCOL_SSLv3SSLv3)PROTOCOL_TLSv1TLSv1)PROTOCOL_TLSv1_1TLSv1_1c                      [         R                  R                  " [         R                  R                  [        5      S/U Q76 $ )Ncertdata)ospathjoindirname__file__names    6/opt/python-3.13.8/usr/lib/python3.13/test/test_ssl.py	data_filer&   B   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Jan 24 04:21:36 2043 GMTzNov 25 04:21:36 2023 GMT(53E14833F7546C29256DD0F034F776C5E983004C))DNSr2   r   issuernotAfter	notBeforeserialNumbersubjectsubjectAltNameversionzrevocation.crlzkeycert3.pemz	cert3.pemr2   )z)http://testca.pythontest.net/testca/ocsp/)z0http://testca.pythontest.net/testca/pycacert.cer)z2http://testca.pythontest.net/testca/revocation.crl)r*   ))r0   Python Software Foundation CA))r1   zour-ca-serverzOct 28 14:23:16 2037 GMTzAug 29 14:23:16 2018 GMTCB2D80995A69525C)
OCSP	caIssuerscrlDistributionPointsr6   r7   r8   r9   r:   r;   r<   zkeycert4.pemfakehostnamezkeycertecc.pemzlocalhost-ecczleaf-missing-aki.keycert.pemzexample.comzleaf-missing-aki.ca.pemz
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                       [        SSS9 n SU R                  5       ;   sS S S 5        $ ! , (       d  f       g = f! [         a     gf = f)Nz/etc/os-releasezutf-8)encodingubuntuF)openreadFileNotFoundError)fs    r%   	is_ubunturR      sA     #g6!qvvx' 766 s#   
: )	: 
7: : 
AAc                      U  Hc  n[        US5      (       d  M  UR                  [        R                  R                  ::  d  M@  UR
                  S:  d  MR  UR                  S5        Me     g )Nminimum_version   z@SECLEVEL=1:ALL)hasattrrT   r   r   r   security_levelset_ciphers)ctxsctxs     r%   seclevel_workaroundr[      sM    C.//##s~~'='==""Q& 12 r'   c                      g N )rY   s    r%   r[   r[      s    r'   c                    [        U [        5      (       a  [        [        U S 5      n U c  gU [        R                  [        R
                  [        R                  1;   a  gU R                  n[        U[        S5      S  5      $ )NFT	PROTOCOL_)

isinstancestrgetattrr   PROTOCOL_TLSPROTOCOL_TLS_SERVERPROTOCOL_TLS_CLIENTr$   has_tls_versionlen)protocolr$   s     r%   has_tls_protocolrj      su     (C  3$/#11 
 ==D4K 0 1233r'   c                 l   [        U [        5      (       a  [        R                  R                  U    n [        [        SU R                   35      (       d  g[        (       a  U [        R                  R                  :  a  g[        R                  [        R                  5      n[        US5      (       a8  UR                  [        R                  R                  :w  a  XR                  :  a  g[        US5      (       a8  UR                  [        R                  R                  :w  a  XR                  :  a  gg)NHAS_FrT   maximum_versionT)ra   rb   r   r   __members__rc   r$   IS_OPENSSL_3_0_0TLSv1_2
SSLContextrf   rV   rT   MINIMUM_SUPPORTEDrm   MAXIMUM_SUPPORTED)r<   rZ   s     r%   rg   rg      s     '3..,,W5 3$w||n-..Gcnn&<&<< ..00
1CC*++3>>#C#CC)))&''s~~???%%%r'   c                    ^  U 4S jnU$ )Nc                 J   >^  [         R                  " T 5      U U4S j5       nU$ )Nc                  f   > [        T5      (       d  [        R                  " T S35      eT" U 0 UD6$ )Nz is not available.)rg   unittestSkipTest)argskwfuncr<   s     r%   wrapper8requires_tls_version.<locals>.decorator.<locals>.wrapper  s7    "7++''7)3E(FGGT(R((r'   )	functoolswraps)r{   r|   r<   s   ` r%   	decorator'requires_tls_version.<locals>.decorator  s%    			) 
	)
 r'   r^   )r<   r   s   ` r%   requires_tls_versionr      s     r'   c                     SR                  [        R                  " [        R                  " 5       5      5      n[
        R                  (       a"  [        R                  R                  X-   5        g g )N )	r    	tracebackformat_exceptionsys	exceptionr   verbosestdoutwrite)prefix
exc_formats     r%   handle_errorr     sB    )44S]]_EFJ

,- r'   c                      [         R                  (       a4  [         R                  " 5       R                  S:  a  [         R                  * $ [         R
                  * $ Nr   )timedaylight	localtimetm_isdstaltzonetimezoner^   r'   r%   
utc_offsetr     s5    }})22Q6}MM>r'   )category)	cert_reqsca_certscipherscertfilekeyfilec                   UR                  S5      (       d-  [        US'   [        R                  [        R                  5      nO#[        R                  [        R
                  5      nUb!  U[        R                  :X  a  SUl        Xl        Ub  UR                  U5        Uc  Ub  UR                  XE5        Ub  UR                  U5        UR                  " U 40 UD6$ )Nserver_sideserver_hostnameF)getSIGNED_CERTFILE_HOSTNAMEr   rq   rf   re   	CERT_NONEcheck_hostnameverify_modeload_verify_locationsload_cert_chainrX   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$t.v..r'   FTserver_chainc                   [         (       a  [        b  [        $ U [        :X  a  [        nO-U [        :X  a  [
        nOU [        :X  a  [        nO[        U 5      e[        R                  [        R                  5      nUR                  [        5        [        R                  [        R                  5      nUR                  U 5        U(       a  UR                  [        5        [         (       a  [        b  X4U4qX4U4$ r]   )USE_SAME_TEST_CONTEXT_TEST_CONTEXTSIGNED_CERTFILEr   SIGNED_CERTFILE2SIGNED_CERTFILE2_HOSTNAME	NOSANFILENOSAN_HOSTNAME
ValueErrorr   rq   rf   r   
SIGNING_CAre   r   )server_certr   hostnameclient_contextserver_contexts        r%   testing_contextr   :  s     $  o%+	(	(,			!!%%^^C$;$;<N((4^^C$;$;<N"";/,,Z8$*HDM833r'   c                   D   \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS r\R"                  S 5       rS rS rS rS rS rS rS rS rS r\R:                  " S\R>                  ;   S5      S 5       r S r!S r"\R:                  " \#RH                  S:H  S5      S 5       r%\R:                  " \#RH                  S:H  S5      S  5       r&S! r'S" r(S# r)S$ r*S% r+\R:                  " \," 5       S&5      S' 5       r-S( r.\R^                  " S)S*5      S+ 5       r0S, r1S- r2S.r3g/)0BasicSocketTestsi\  c                     [         R                    [         R                    [         R                    [         R                    [         R
                    [         R                    [         R                    U R                  [         R                  S5        U R                  [         R                  S5        U R                  [         R                  S5        U R                  [         R                  S5        [         R                    [         R                    [         R                    [         R                     [         R"                    [         R$                    U R                  [         R&                  [         R(                  5        g )NT)r   r   CERT_OPTIONALCERT_REQUIREDrI   rG   rH   rF   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_2rd   PROTOCOL_SSLv23selfs    r%   test_constantsBasicSocketTests.test_constants^  s    ''d+t,$/$/))3+>+>?r'   c                     [        [        5       HY  nUR                  S5      (       d  M  U R                  US9   [	        [        U5      nU R                  USSU 35        S S S 5        M[     g ! , (       d  f       Mm  = f)NOP_optionr   ssl.)dirr   
startswithsubTestrc   assertGreaterEqual)r   r$   values      r%   test_optionsBasicSocketTests.test_optionsr  se    HD??5))T*T*''qD-@ +*  +*s   'A..
A=	c                    [         R                  [         R                  [         R                  [         R                  [         R
                  [         R                  /nU HA  nU R                  US9   U R                  [        S5         S Ul
        S S S 5        S S S 5        MC     [        R                  " U [         R                  5        g ! , (       d  f       N@= f! , (       d  f       M  = f)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_typesBasicSocketTests.test_ssl_types{  s    OONNOOMM
	 "Hx0++I7GH%)HN I 10 " 	,,T43C3CD IH 10s$   1CC
C

CC
C*	c                     U R                  [        S5         [        R                  " 5        n[        R	                  U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = fNzpublic constructor)r   r   socketr   	SSLSocketr   ss     r%   test_private_init"BasicSocketTests.test_private_init  sH    ##I/CDAa  ! ED  EDs"   A%AA%
A"	A%%
A3c                 2   [         R                  nU R                  [        U5      SUR                  -  5        U R                  [        U5      [        UR                  5      5        [         R                  U5      nU R                  UR                  U5        g )Nz$<_SSLMethod.PROTOCOL_TLS_CLIENT: %r>)	r   rf   r   reprr   rb   rq   assertIsri   r   protorZ   s      r%   test_str_for_enums#BasicSocketTests.test_str_for_enums  sj     ''e&Lu{{&Z[US%56nnU#cllE*r'   c                 n   [         R                  5       n[        R                  (       a5  [        R
                  R                  SX=(       a    S=(       d    S4-  5        U(       a1  [         R                  S5      nU R                  [        U5      S5        O/U R                  [         R                  [         R                  S5        U R                  [        [         R                  S5        [         R                  SS5        [         R                  SS5        [         R                  [        S	5      S5        g )
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   rh   assertRaisesr   r   RAND_add	bytearray)r   vdatas      r%   test_randomBasicSocketTests.test_random  s    OO??JJ: !$A*A $: 9 ;; < >>"%DSY+cllCNNB? 	*cnnb9.55t<YCDdKr'   c                 j   U R                  [        R                  R                  [        5      [
        5        U R                  [        R                  R                  [        5      [        5        [        R                  R                  [        5      n[        R                  (       a9  [        R                  R                  S[        R                  " U5      -   S-   5        U R                  US   S5        U R                  US   S5        U R                  US   S5        U R                  US   S	5        g )
N
r;   ))r4   zprojects.developer.nokia.com)r4   zprojects.forum.nokia.comr?   )zhttp://ocsp.verisign.comr@   )z0http://SVRIntl-G3-aia.verisign.com/SVRIntlG3.cerrA   )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_cert 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                    [         R                  R                  [        5      n[        R
                  (       a9  [        R                  R                  S[        R                  " U5      -   S-   5        U R                  USSSSSSSS	.5        g )
Nr
  ))r+   UK))r1   zcody-cazJun 14 18:00:58 2028 GMTzJun 18 18:00:58 2018 GMT02)r  ))r1   #codenomicon-vm-2.test.lal.cisco.com))r4   r  r   r5   )r   r   r  TALOS_INVALID_CRLDPr   r   r   r   r   r  r  r   r  s     r%   test_parse_cert_CVE_2019_5010.BasicSocketTests.test_parse_cert_CVE_2019_5010  sw    HH&&':;??JJTFNN1$55<=L67 $H#E	
r'   c                    [         R                  R                  [        5      n[        R
                  (       a9  [        R                  R                  S[        R                  " U5      -   S-   5        SnU R                  US   U5        U R                  US   U5        [         R                  S:  a  SnOSnU R                  US   U5        g )	Nr
  )))r+   US))stateOrProvinceNameOregon))r.   	Beavertonr/   ))organizationalUnitNamezPython Core Development))r1   znull.python.org example.org))emailAddresszpython-dev@python.orgr:   r6   )r   	      )r4   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>r;   )r   r   r  NULLBYTECERTr   r   r   r   r   r  r  r   _OPENSSL_API_VERSION)r   r  r:   sans       r%   test_parse_cert_CVE_2013_4238.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    [         R                  R                  [        5      nU R	                  US   S5        g )Nr;   )
)r4   allsans	othernamez<unsupported>r5  )r)  zuser@example.org)r4   zwww.example.org)DirName)r*   r-   r/   ))r1   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_sans$BasicSocketTests.test_parse_all_sans  s1    HH&&z2+,	
r'   c                    [        [        S5       nUR                  5       nS S S 5        [        R	                  W5      n[        R                  U5      n[        R	                  U5      nU R                  X55        UR                  [        R                  S-   5      (       d  U R                  SU-  5        UR                  S[        R                  -   S-   5      (       d  U R                  SU-  5        g g ! , (       d  f       N= f)Nrr
  z-DER-to-PEM didn't include correct header:
%r
z-DER-to-PEM didn't include correct footer:
%r
)rN   CAFILE_CACERTrO   r   PEM_cert_to_DER_certDER_cert_to_PEM_certr   r   
PEM_HEADERfailendswith
PEM_FOOTER)r   rQ   pemd1p2d2s         r%   test_DER_to_PEM BasicSocketTests.test_DER_to_PEM  s    -%&&(C &%%c*%%b)%%b) }}S^^d233IIG"LM{{4#..04788IIG"LM 9 &%s   C55
Dc                 R   [         R                  n[         R                  n[         R                  nU R	                  U[
        5        U R	                  U[        5        U R	                  U[        5        U R                  US5        U R                  US5        Uu  pEpgnU R                  US5        U R                  US5        U R                  US5        U R                  US5        U R                  US5        U R                  US5        U R                  US5        U R                  US5        U R                  US5        U R                  US5        S	US
 3n	US:  a  SUS
 SUS
 SUS
 3n
OSUS
 SUS
 SUS
 3n
U R                  UR                  XS45      X2[        U5      45        g )Ni i   @rU      r      ?      z	LibreSSL dr   zOpenSSL .zAWS-LC)r   OPENSSL_VERSION_NUMBEROPENSSL_VERSION_INFOOPENSSL_VERSIONassertIsInstanceinttuplerb   r   
assertLessassertLessEqual
assertTruer   hex)r   ntr   majorminorfixpatchstatuslibressl_veropenssl_vers              r%   test_openssl_version%BasicSocketTests.test_openssl_version  s   &&$$a%a'a% 	:.:&+,(c&q)q!q)s#Q'S!q)UB'*VR("5),A:$U1IQuQiqq	BK$U1IQuQiqQ@KLL+X>?3q6N	
r'   c                 *   [         R                   " [         R                  5      n[        U5      n[        R                  " U5      n[
        R                  " S[        45         AS S S 5        U R                  U" 5       S 5        g ! , (       d  f       N&= f)N )	r   AF_INETr   weakrefrefr
   check_warningsResourceWarningr   )r   r   sswrs       r%   test_refcycleBasicSocketTests.test_refcycle?  se     MM&..)a [[_++R,AB Ct$ CBs   "B
Bc           	      l   [         R                   " [         R                  5      n[        U5       nU R                  [        UR
                  S5        U R                  [        UR                  [        S5      5        U R                  [        UR                  S5        U R                  [        UR                  [        S5      S5        U R                  [        UR                  S5        U R                  [        UR                  SS5        U R                  [        UR                  5        U R                  [        UR                  S/SSS5        U R                  [        UR                  S5        U R                  [        UR                   [        S5      /5        S S S 5        g ! , (       d  f       g = f)NrU      x)z0.0.0.0r   r^   r   d   )r   ri  r   r  OSErrorrecv	recv_intor  recvfromrecvfrom_intosendsendtoNotImplementedErrordupsendmsgrecvmsgrecvmsg_intor   r   rn  s      r%   test_wrapped_unconnected)BasicSocketTests.test_wrapped_unconnectedJ  s-    MM&..)a B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 !  s   E,F%%
F3c                 
   S Hk  n[         R                   " [         R                  5      nUR                  U5        [        U5       nU R	                  XR                  5       5        S S S 5        Mm     g ! , (       d  f       M  = f)N)Ng              @)r   ri  
settimeoutr   r   
gettimeout)r   timeoutr   rn  s       r%   test_timeoutBasicSocketTests.test_timeout\  s[     (Gfnn-ALL!!!$  --/: %$ ( %$s    A33
B	c                 p   [         R                  [         R                  [         R                  [         R                  /n[         R
                  [         R                  [         R                  [         R                  /n[         R                  R                  [         R                  R                  [         R                  R                  /nU H  nU R                  US9   [         R                  [         R                  5      nU R!                  ["        5       nU=R$                  U-  sl        S S S 5        U R'                  S[)        WR*                  5      5        S S S 5        M     U H  n[-        U5      (       d  M  U R                  US9   U R!                  ["        5       n[         R                  U5        S S S 5        U R'                  SUR.                   S3[)        WR*                  5      5        S S S 5        M     U H  n[1        U5      (       d  M  U R                  US9   [         R                  [         R                  5      nU R!                  ["        5       nXl        S S S 5        UR4                  R6                  < SUR.                  < 3n	U R'                  SU	 S3[)        WR*                  5      5        S S S 5        M     g ! , (       d  f       GN= f! , (       d  f       GM   = f! , (       d  f       GN>= f! , (       d  f       GM  = f! , (       d  f       N= f! , (       d  f       GM4  = f)Nr   z4ssl.OP_NO_SSL*/ssl.OP_NO_TLS* options are deprecated)ri   r   z is deprecated)r<   rQ  )r   r   r   r   r   r   r   PROTOCOL_TLSv1_2rd   r   r   r   r   r   rq   rf   assertWarnsDeprecationWarningoptionsr   rb   warningrj   r$   rg   rT   	__class____name__)
r   r  	protocolsversionsr   rZ   cmri   r<   version_texts
             r%   test_openssl111_deprecations-BasicSocketTests.test_openssl111_deprecationse  sN   OO	
     	
	 NN  NN  NN""
 FV,nnS%<%<=%%&89RKK6)K :  J

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

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

O /.  % :9 -, :9 10 :9 /.sm   9KK
--KL"K/8;L%9L%L%AL%

KK
K,	/
K>9L
L	
L"L%%
L5	c                    [         R                  R                  [         R                  R                  [        5      =(       d    [         R
                  SU5      n[        R                  " 5       nU R                  UR                  5        U R                  [        R                  5         [        UUS9  S S S 5        g ! , (       d  f       g = f)Nr   r   )r   r   r    r!   r"   curdirr   
addCleanupcloser  r   r   r   r   r   r   s      r%   bad_cert_testBasicSocketTests.bad_cert_test  sw    77<< 9 FRYY *H6}}

#s||,T&.0 -,,s   )B==
Cc                 &    U R                  S5        g )NrC   r  r   s    r%   test_empty_cert BasicSocketTests.test_empty_cert  s    >*r'   c                 &    U R                  S5        g )NrD   r  r   s    r%   test_malformed_cert$BasicSocketTests.test_malformed_cert  s    =)r'   c                 &    U R                  S5        g )NrE   r  r   s    r%   test_malformed_key#BasicSocketTests.test_malformed_key  s    <(r'   c           	          [         R                  [         R                  5      n[        R                  " 5        nU R	                  [
        UR                  USSS9  S S S 5        g ! , (       d  f       g = f)NTzsome.hostnamer   )r   rq   re   r   r  r   r   )r   rZ   r   s      r%   test_server_side!BasicSocketTests.test_server_side  sM    nnS445]]_j#//4.=  ? __s   "A$$
A2c                    [         R                  " S5      n[         R                   " [         R                  5      nUR                  UR	                  5       5        [        USS9 nU R                  [        5         UR                  S5        S S S 5        S S S 5        UR                  5         g ! , (       d  f       N'= f! , (       d  f       N0= f)Nr8  r   Fdo_handshake_on_connectzunknown-type)
r   create_serverri  connectgetsocknamer   r  r   get_channel_bindingr  )r   r   crn  s       r%   test_unknown_channel_binding-BasicSocketTests.test_unknown_channel_binding  s      !12MM&..)			!--/"a?2"":.&&~6 / @ 	
	 /. @?s$   $B>:B-B>-
B;	7B>>
C
tls-unique*'tls-unique' channel binding not availablec                    [         R                   " [         R                  5      n[        U5       nU R                  UR	                  S5      5        S S S 5        [         R                   " [         R                  5      n[        US[
        S9 nU R                  UR	                  S5      5        S S S 5        g ! , (       d  f       Nk= f! , (       d  f       g = f)Nr  T)r   r   )r   ri  r   assertIsNoner  r  r  s      r%   test_tls_unique_channel_binding0BasicSocketTests.test_tls_unique_channel_binding  s     MM&..)a Bb44\BC ! MM&..)aTHEb44\BC FE	 !  FEs   !B6!C6
C
Cc                 d   [        [        R                  " [        R                  5      5      n[        U5      nU R	                  [
        5       nS n[        R                  " 5         S S S 5        U R                  U[        WR                  R                  S   5      5        g ! , (       d  f       NA= fr   )r   r   ri  r   r  rm  r   
gc_collectassertInrb   r  ry   )r   rn  r=  r  s       r%   test_dealloc_warn"BasicSocketTests.test_dealloc_warn  ss    fmmFNN;<Ho."B  / 	aRZZ__Q/01 /.s   B!!
B/c                    [         R                  5       nU R                  [        U5      S5        U R	                  U[         R
                  5        [        R                  " 5        n[        US'   [        US'   [         R                  5       nU R                  UR                  [        5        U R                  UR                  [        5        S S S 5        g ! , (       d  f       g = f)N   SSL_CERT_DIRSSL_CERT_FILE)r   get_default_verify_pathsr   rh   rU  DefaultVerifyPathsr   EnvironmentVarGuardCAPATHr  cafiler)   )r   pathsenvs      r%   test_get_default_verify_paths.BasicSocketTests.test_get_default_verify_paths  s    ,,.UQ'eS%;%;<**,"(C#+C 002EU\\84U\\62 -,,s   %A'C
C#r   Windows specificc                 8   U R                  [        R                  S5      5        U R                  [        R                  S5      5        U R                  [        [        R                  5        U R                  [
        [        R                  S5        [        5       nS H  n[        R                  U5      nU R                  U[        5        U H  nU R                  U[        5        U R                  [        U5      S5        Uu  pVnU R                  U[        5        U R                  USS15        U R                  U[        [        [        45        [!        U[        [        45      (       d  M  UR#                  U5        M     M     SnU R                  X5        g )	NCAROOTrh  )r  r  r   x509_asn
pkcs_7_asn1.3.6.1.5.5.7.3.1)rZ  r   enum_certificatesr  r   WindowsErrorsetrU  listrW  r   rh   bytesr  	frozensetboolra   update)	r   
trust_oids	storenamestoreelementcertenctrust
serverAuths	            r%   test_enum_certificates'BasicSocketTests.test_enum_certificates  s4   --d34--f56)S%:%:;,(=(=rBU
'I)))4E!!%. %%gu5  Wq1#* 5%%dE2cJ#=>%%eid-CDei%566%%e, ! ( )
j-r'   c                    U R                  [        R                  S5      5        U R                  [        [        R                  5        U R                  [
        [        R                  S5        [        R                  S5      nU R                  U[        5        U Hd  nU R                  U[        5        U R                  [        U5      S5        U R                  US   [        5        U R                  US   SS15        Mf     g )Nr  rh     r   rU   r  r  )rZ  r   	enum_crlsr  r   r  rU  r  rW  r   rh   r  r  )r   crlsr  s      r%   test_enum_crlsBasicSocketTests.test_enum_crls  s    d+,)S]]3,r:}}T"dD)G!!'51S\1-!!'!*e4MM'!*z<&@A	 r'   c                    Sn[         R                  S5      nU R                  X!5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        U R                  U[         R                  5        U R                  [        [         R                  S5        [         R                  R                  S5      nU R                  X!5        U R                  U[         R                  5        U R                  [        [         R                  R                  S5        U R                  [        S5         [         R                  R                  S5        S S S 5        [        S	5       H  n [         R                  R                  U5      nU R                  UR                  [        5        U R                  UR                  [        5        U R                  UR
                  [        5        U R                  UR                  [        [        S 5      45        M     [         R                  R!                  S5      nU R                  X!5        U R                  U[         R                  5        U R                  [         R                  R!                  S5      U5        U R                  [         R                  R!                  S5      U5        U R                  [        S
5         [         R                  R!                  S5        S S S 5        g ! , (       d  f       GN= f! [         a     GM  f = f! , (       d  f       g = f)N)   r  TLS Web Server Authenticationr  r  r  r  r  zunknown NID 100000i   zunknown object 'serverauth'
serverauth)r   _ASN1Objectr   nid	shortnamelongnameoidrU  r  r   fromnidr   rangerV  rb   typefromname)r   expectedvaliobjs        r%   test_asn1object BasicSocketTests.test_asn1object	  sp   ) oo12'#&5'FG"56c3??3*coo|Doo%%c*'c3??3*coo&=&=rB##J0DEOO##F+ FtABoo--a0 %%cggs3%%cmmS9%%cllC8%%cggT$Z/@A  oo&&'FG'c3??311,?J112EF!	###J0MNOO$$\2 ON' FE
   ONs*   3 M*M M)
M
M&%M&)
M7c                 P   [         R                  S5      nU R                  [         R                  R                  [         R                  5        U R                  [         R                  R                  U5        U R                  [         R                  R                  R                  S5        U R                  [         R                  R                  R                  S5        U R                  [         R                  R                  R                  S5        [         R                  S5      nU R                  [         R                  R                  [         R                  5        U R                  [         R                  R                  U5        U R                  [         R                  R                  R                  S5        U R                  [         R                  R                  R                  S5        U R                  [         R                  R                  R                  S5        g )Nr  r  r  z1.3.6.1.5.5.7.3.2   
clientAuth)
r   r  rU  r   SERVER_AUTHr   r  r  r  CLIENT_AUTH)r   r  s     r%   test_purpose_enum"BasicSocketTests.test_purpose_enum0  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                    [         R                   " [         R                  [         R                  5      nU R                  UR                  5        U R                  [        5       n[        U[        R                  S9  S S S 5        U R                  [        WR                  5      S5        [        R                  [        R                  5      nU R                  [        5       nUR                  U5        S S S 5        U R                  [        UR                  5      S5        g ! , (       d  f       N= f! , (       d  f       NE= f)Nr   z!only stream sockets are supported)r   ri  
SOCK_DGRAMr  r  r  r|  r   r   r   r   rb   r   rq   rf   r   )r   r   cxrZ   s       r%   test_unsupported_dtls&BasicSocketTests.test_unsupported_dtlsA  s    MM&..&*;*;< 23rQ#--8 4R\\*,OPnnS44523rOOA 4R\\*,OP 43 43s   $D""D3"
D03
Ec                 N    U R                  [        R                  U5      U5        g r]   )r   r   cert_time_to_seconds)r   
timestring	timestamps      r%   cert_time_okBasicSocketTests.cert_time_okL  s    11*=yIr'   c                     U R                  [        5         [        R                  U5        S S S 5        g ! , (       d  f       g = fr]   )r  r   r   r  )r   r  s     r%   cert_time_failBasicSocketTests.cert_time_failO  s*    z*$$Z0 +**s	   5
Az)local time needs to be different from UTCc                 L    U R                  SS5        U R                  SS5        g )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_timezone3BasicSocketTests.test_cert_time_to_seconds_timezoneS  s&    
 	4lC4lCr'   c                    SnSnU R                  X5        U R                  [        R                  US9U5        U R                  SU5        U R                  SU5        U R	                  S5        U R	                  S5        U R	                  S5        U R	                  S	5        U R	                  S
5        U R	                  S5        U R	                  S5        SnU R                  SU5        U R                  SU5        U R                  SS5        U R                  SS5        U R                  SS5        U R	                  S5        U R                  SS5        g )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_seconds*BasicSocketTests.test_cert_time_to_seconds[  s?   /
*)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_ALLrh  c                     S nU" 5       R                  5       S:X  a  U R                  S5        U R                  SS5        U R                  U" 5       S-   5        g )Nc                  0    [         R                  " SS5      $ )Nz%b)	rU   r  r   rL     r  r   r   r   )r   strftimer^   r'   r%   local_february_nameNBasicSocketTests.test_cert_time_to_seconds_locale.<locals>.local_february_name  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_locale1BasicSocketTests.test_cert_time_to_seconds_locale~  sZ    	D  &&(E1MM 4 5 	4lC/14KKLr'   c                 $   [         R                   " [         R                  5      nU R                  UR                  5        [        R
                  " U5      n[        [         R                   " [         R                  5      [        R                  S9nU R                  UR                  5        UR                  [        U45      n[        R                  [        R                  [        R                  [        R                  4nU R!                  XE5        g )Nr  )r   ri  r  r  r   	bind_portr   r   r   
connect_exHOSTerrnoECONNREFUSEDEHOSTUNREACH	ETIMEDOUTEWOULDBLOCKr  )r   serverportr   rcerrorss         r%   test_connect_ex_error&BasicSocketTests.test_connect_ex_error  s    v~~.%&&v.V]]6>>:&)&7&79 \\4,'  2 2EOO
 	b!r'   c                    [        5       u  pn[        US9nU   UR                  [        R                  " 5       US9 nUR	                  [
        UR                  45        U R                  UR                  S5      S5        U R                  UR                  S5      S5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr   r  r   r'   )
r   ThreadedEchoServerr   r   r  r6  r=  r   rv  rz  r   r   r   r   r<  r   s         r%   test_read_write_zero%BasicSocketTests.test_read_write_zero  s    3B3D0#N;++FMMO<D , FIJ		4-.  C0  a0	F VF F Vs#   $CA$B2!C2
C 	<C
Cr^   N)4r  
__module____qualname____firstlineno__r   r   r   r   r   r  r  r  r1  r:  rI  re  r   cpython_onlyrp  r  r  r  r  r  r  r  r  r  rw   
skipUnlessr   CHANNEL_BINDING_TYPESr  r  r  r   platformr  r  r  r  r  r  r  r   r  r%  run_with_localer1  r@  rF  __static_attributes__r^   r'   r%   r   r   \  s   @(AE!
+L(P:
*3:
*
N!
F % %0$;3j0+*)? )B)BBEGDGD2
3 02DE. F.0 02DEB FB%3N3"	QJ1 DFDFD!FF Xr*M +M" 	1r'   r   c                      \ rS rSrS rS r\R                  " \S:H  S5      S 5       r	S r
S rS	 rS
 r\S 5       r\R                  " \" \R$                  S5      S5      S 5       rS rS r\R.                  " 5       S 5       rS rS rS rS rS r\R                  " \R<                  S5      S 5       rS r S r!S r"S r#S r$\RJ                  " \&RN                  S:H  S5      S  5       r(\R                  " \&RN                  S:H  S!5      \RJ                  " \)RT                  S"5      S# 5       5       r+S$ r,S% r-S& r.S' r/S( r0S) r1S* r2S+r3g,)-ContextTestsi  c                 p   [          Hd  n[        U5      (       d  M  [        R                  " 5          [        R                  U5      nS S S 5        U R                  WR                  U5        Mf     [        R                  " 5          [        R                  5       nS S S 5        U R                  WR                  [        R                  5        U R                  [        [        R
                  S5        U R                  [        [        R
                  S5        g ! , (       d  f       N= f! , (       d  f       N= f)Nr  *   )	PROTOCOLSrj   r
   rl  r   rq   r   ri   rd   r  r   )r   ri   rZ   s      r%   test_constructorContextTests.test_constructor  s    !H))$335..2C 6  x8	 "
 ++-.."C .s'7'78*cnnb9*cnnb9 65 .-s   DD'
D$	'
D5c                 $   [         R                  [         R                  5      nUR                  S5        UR                  S5        U R	                  [         R
                  S5         UR                  S5        S S S 5        g ! , (       d  f       g = f)NALLDEFAULTNo cipher can be selected^$:,;?*'dorothyx)r   rq   rf   rX   r   r   r   rZ   s     r%   test_ciphersContextTests.test_ciphers  s]    nnS445	"##CLL2MNOO./ ONNs   &B
BrU   z+Test applies only to Python default ciphersc                 :   [         R                  [         R                  5      nUR                  5       nU Hb  nUS   nU R	                  SU5        U R	                  SU5        U R	                  SU5        U R	                  SU5        U R	                  SU5        Md     g )Nr$   PSKSRPMD5RC43DES)r   rq   rf   get_ciphersassertNotIn)r   rZ   r   suiter$   s        r%   test_python_ciphers ContextTests.test_python_ciphers  s     nnS445//#E=DUD)UD)UD)UD)VT* r'   c           
      >   [         R                  [         R                  5      nUR                  S5        [	        S UR                  5        5       5      n1 SknUR                  U5      nU R                  [        U5      SS[        U5       S[        U5       35        g )NAESGCMc              3   *   #    U  H	  oS    v   M     g7f)r$   Nr^   ).0rP  s     r%   	<genexpr>0ContextTests.test_get_ciphers.<locals>.<genexpr>  s     9'8!fI'8s   >   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   rq   rf   rX   r  rf  intersectionr   rh   sorted)r   rZ   namesr   ry  s        r%   test_get_ciphersContextTests.test_get_ciphers  s    nnS445!9s'899	
 ))(3qGF5M?,vhGWFX"Y	
r'   c                    [         R                  [         R                  5      n[         R                  [         R                  -  [         R
                  -  nU[        [        -  [        -  [        -  [        -  -  nU R                  X!R                  5        [        R                  " 5          U=R                  [         R                  -  sl        S S S 5        U R                  U[         R                  -  UR                  5        [        R                  " 5          UR                  [         R                  ) -  Ul        S S S 5        U R                  X!R                  5        SUl        U R                  SUR                  [         R
                  ) -  5        U R!                  ["        5         SUl        S S S 5        U R!                  ["        5         SS-  Ul        S S S 5        U R!                  [$        5         SUl        S S S 5        g ! , (       d  f       GN@= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nh= f! , (       d  f       g = f)Nr   r  r  rt  abc)r   rq   rf   OP_ALLr   r   rF   rI   rG   rH   rJ   r   r  r
   rl  r   r  OverflowErrorr   )r   rZ   defaults      r%   r   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I
H
H(+
H9<
I

Ic                    [         R                  " 5          [        R                  [        R                  5      nS S S 5        U R                  WR                  [        R                  5        [        R                  Ul        U R                  UR                  [        R                  5        [        R                  Ul        U R                  UR                  [        R                  5        [        R                  Ul        U R                  UR                  [        R                  5        U R                  [        5         S Ul        S S S 5        U R                  [        5         SUl        S S S 5        [        R                  [        R                  5      nU R                  UR                  [        R                  5        U R                  UR                  5        [        R                  [        R                   5      nU R                  UR                  [        R                  5        U R#                  UR                  5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= fNrT  )r
   rl  r   rq   rd   r   r   r   r   r   r  r   r   re   assertFalser   rf   rZ  r]  s     r%   test_verify_mode_protocol&ContextTests.test_verify_mode_protocol   s   ++-..!1!12C . 	#--8++#*;*;<++#*;*;<--#--8y)"CO *z* CO + nnS445#--8++,nnS445#*;*;<**++ .- *)**s#   $I>I#I(
I
I%(
I7c                    [         R                  [         R                  5      nU R                  UR                  5        [         R
                  (       ag  SUl        U R                  UR                  5        SUl        U R                  UR                  5        SUl        U R                  UR                  5        g U R                  [        5         SUl        S S S 5        g ! , (       d  f       g = fNTF)	r   rq   rf   rZ  hostname_checks_common_nameHAS_NEVER_CHECK_COMMON_NAMEr  r  AttributeErrorr]  s     r%    test_hostname_checks_common_name-ContextTests.test_hostname_checks_common_name  s    nnS445778**.2C+OOC;;<.3C+S<<=.2C+OOC;;<"">226/ 322s   C!!
C/c                 	   [         R                  [         R                  5      n[         R                  R                  [         R                  R
                  [         R                  R                  1n[         R                  R                  [         R                  R                  1nU R                  UR                  U5        U R                  UR                  U5        [         R                  R                  Ul
        [         R                  R                  Ul        U R                  UR                  [         R                  R                  5        U R                  UR                  [         R                  R                  5        [         R                  R                  Ul
        [         R                  R
                  Ul        U R                  UR                  [         R                  R                  5        U R                  UR                  [         R                  R
                  5        [         R                  R                  Ul        U R                  UR                  [         R                  R                  5        [         R                  R                  Ul        U R                  UR                  [         R                  R
                  [         R                  R                  [         R                  R                  15        [         R                  R                  Ul
        U R                  UR                  [         R                  R                  [         R                  R                  15        U R                  [         5         SUl
        S S S 5        [#        [         R$                  5      (       a  [         R                  [         R$                  5      nU R                  UR                  U5        U R                  UR                  [         R                  R                  5        U R                  [         5         [         R                  R                  Ul
        S S S 5        U R                  [         5         [         R                  R
                  Ul        S S S 5        g g ! , (       d  f       GN= f! , (       d  f       N_= f! , (       d  f       g = fr  )r   rq   re   r   rr   r   rp   rs   TLSv1_3r  rT   rm   r   r   r   r  r   rj   r   )r   rZ   minimum_rangemaximum_ranges       r%   test_min_max_version!ContextTests.test_min_max_version&  s1   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1..!5!56CMM##] ##S^^%E%E "":.&)nn&F&F# /"":.&)nn&:&:# /. 2 +* /...s$   R!: R37 S!
R03
S
SrW   zrequires OpenSSL >= 1.1.0c                     [         R                  [         R                  5      n1 SknU R                  UR                  U5        g )N>   r   rU   r  r   rL  r*  )r   rq   rf   r  rW   )r   rZ   security_level_ranges      r%   test_security_level ContextTests.test_security_levelu  s7    
 nnS445 
 	c((*>?r'   c                    [         R                  [         R                  5      n[        [         SS5      nU R	                  UR
                  [         R                  U-  5        [         R                  Ul        U R	                  UR
                  [         R                  5        [         R                  Ul        U R	                  UR
                  [         R                  5        [         R                  Ul        U R	                  UR
                  [         R                  5        [         R                  Ul        U R	                  UR
                  [         R                  5        [         R                  [         R                  -  Ul        U R	                  UR
                  [         R                  [         R                  -  5        U R                  [        5         S Ul        S S S 5        g ! , (       d  f       g = f)NVERIFY_X509_TRUSTED_FIRSTr   )r   rq   re   rc   r   verify_flagsVERIFY_DEFAULTVERIFY_CRL_CHECK_LEAFVERIFY_CRL_CHECK_CHAINVERIFY_ALLOW_PROXY_CERTSVERIFY_X509_STRICTr  r   )r   rZ   tfs      r%   test_verify_flagsContextTests.test_verify_flags  sT   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%%
G3c                 8   [         R                  [         R                  5      nUR                  [        S S9  UR                  [        [        S9  U R                  [        UR                  [        S9  U R                  [        5       nUR                  [        5        S S S 5        U R                  WR                  R                  [        R                  5        U R                  [         R                  S5         UR                  [        5        S S S 5        U R                  [         R                  S5         UR                  [         5        S S S 5        [         R                  [         R                  5      nUR                  ["        [$        5        UR                  ["        [$        S9  UR                  [&        [(        S9  U R                  [         R                  S5         UR                  ["        5        S S S 5        U R                  [         R                  S5         UR                  [$        5        S S S 5        U R                  [         R                  S5         UR                  [$        ["        S9  S S S 5        [         R                  [         R                  5      n[*        R,                  " S[*        R.                  5      nU R                  [         R                  U5         UR                  [0        [$        5        S S S 5        UR                  [2        [4        S9  UR                  [2        [4        R7                  5       S9  UR                  [2        [9        [4        R7                  5       5      S9  UR                  ["        [:        [4        5        UR                  ["        [:        [4        R7                  5       5        UR                  ["        [:        [9        [4        R7                  5       5      5        U R                  [        S5         UR                  [2        SS9  S S S 5        U R                  [         R                  5         UR                  [2        SS9  S S S 5        U R                  [<        S	5         UR                  [2        S
S-  S9  S S S 5        S nS nS nS nS nS n	S n
 " S S5      nUR                  [2        US9  UR                  [2        US9  UR                  [2        US9  UR                  [2        U" 5       S9  UR                  [2        U" 5       R>                  S9  U R                  [         R                  5         UR                  [2        US9  S S S 5        U R                  [<        S	5         UR                  [2        US9  S S S 5        U R                  [        S5         UR                  [2        U	S9  S S S 5        U R                  [@        S5         UR                  [2        U
S9  S S S 5        UR                  [        U
S9  g ! , (       d  f       GN= f! , (       d  f       GN)= f! , (       d  f       GN= f! , (       d  f       GNd= f! , (       d  f       GN8= f! , (       d  f       GN	= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNV= f! , (       d  f       GN2= f! , (       d  f       GNq= f! , (       d  f       GNP= f! , (       d  f       GN/= f! , (       d  f       GN= f)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                      [         $ r]   KEY_PASSWORDr^   r'   r%   getpass_unicode:ContextTests.test_load_cert_chain.<locals>.getpass_unicode  s    r'   c                  *    [         R                  5       $ r]   )r  encoder^   r'   r%   getpass_bytes8ContextTests.test_load_cert_chain.<locals>.getpass_bytes  s    &&((r'   c                  <    [        [        R                  5       5      $ r]   )r  r  r  r^   r'   r%   getpass_bytearray<ContextTests.test_load_cert_chain.<locals>.getpass_bytearray  s    \00233r'   c                      g)Nr  r^   r^   r'   r%   getpass_badpass:ContextTests.test_load_cert_chain.<locals>.getpass_badpass  s    r'   c                      SS-  $ )Nr  i   r^   r^   r'   r%   getpass_huge7ContextTests.test_load_cert_chain.<locals>.getpass_huge  s    ;''r'   c                      g)Nr%  r^   r^   r'   r%   getpass_bad_type;ContextTests.test_load_cert_chain.<locals>.getpass_bad_type  s    r'   c                      [        S5      e)Ngetpass error)	Exceptionr^   r'   r%   getpass_exception<ContextTests.test_load_cert_chain.<locals>.getpass_exception  s    O,,r'   c                        \ rS rSrS rS rSrg):ContextTests.test_load_cert_chain.<locals>.GetPassCallablei  c                     [         $ r]   r  r   s    r%   __call__CContextTests.test_load_cert_chain.<locals>.GetPassCallable.__call__      ##r'   c                     [         $ r]   r  r   s    r%   getpassBContextTests.test_load_cert_chain.<locals>.GetPassCallable.getpass  r  r'   r^   N)r  rH  rI  rJ  r  r  rP  r^   r'   r%   GetPassCallabler    s    $$r'   r  zmust return a stringr  )!r   rq   re   r   r  r  r   ru  NONEXISTINGCERTr   r   r7  ENOENTr   r   BADCERT	EMPTYCERTONLYCERTONLYKEYBYTES_ONLYCERTBYTES_ONLYKEYrecompileXr>  CERTFILE_PROTECTEDr  r  r  ONLYKEY_PROTECTEDr   r  r  )r   rZ   r  regexr  r  r  r  r  r  r  r  s               r%   test_load_cert_chain!ContextTests.test_load_cert_chain  s#   nnS445Hd3Hh7)S%8%8(Kw'20 (++U\\:##CLL2FG( H##CLL2FG	* H nnS445Hg.Xw?^]K##CLL2FG) H##CLL2FG( H##CLL2FG(C H nnS445

  dd	
 ##CLL%8w7 9 	.F.9L9L9NO.%.|/B/B/D%E 	 	GH&7FH&79L9L9NOH&7%l&9&9&;<	>##I/CD 2TB Es||, 2YG -##J0BC  2TF]K	 D	 	)	4		(		-	$ 	$
 	.I.G.9JK.9JK.%4%6%>%> 	 	@s||, 2_M -##J0BC 2\J D##I/EF 2=MN G##I? 2=NO @ 	H/@Ac (' HGGG HGGGGG 98 ED,,CC> -,CCFF??s   X :X28Y#Y!Y(Y:(ZZZ0?[[[&;[8.\
 
X/2
Y
Y
Y%(
Y7:
Z	
Z
Z-0
Z?
[
[#&
[58
\

\c                   ^ [         R                  5       mU4S jn[        S5       Vs/ s H  n[        R                  " US9PM     nn[
        R                  " 5        n[
        R                  " U5          S S S 5        U R                  UR                  5        S S S 5        g s  snf ! , (       d  f       N7= f! , (       d  f       g = f)Nc                  0   > T R                  [        5        g r]   )r   r  )rZ   s   r%   race=ContextTests.test_load_cert_chain_thread_safety.<locals>.race  s    )r'   r&  target)
r   create_default_contextr  	threadingr   r	   catch_threading_exceptionstart_threadsr  	exc_value)r   r  _threadsr  rZ   s        @r%   "test_load_cert_chain_thread_safety/ContextTests.test_load_cert_chain_thread_safety  s     ((*	* ;@(C(Q9##40(C779R!//8 9 bll+	 :9 D88 :9s)   B#B95B(7#B9(
B6	2B99
Cc                    [         R                  [         R                  5      nUR                  [        5        UR                  [        S S9  UR                  [
        5        UR                  [
        S S9  U R                  [        UR                  5        U R                  [        UR                  S S S 5        U R                  [        5       nUR                  [        5        S S S 5        U R                  WR                  R                  [        R                  5        U R                  [         R                  S5         UR                  [         5        S S S 5        UR                  [        ["        5        UR                  [        [$        S9  U R                  [        UR                  S S5        g ! , (       d  f       N= f! , (       d  f       Nt= f)N)r  r)   r  r)   T)r   rq   re   r   r  BYTES_CERTFILEr  r   ru  r  r   r   r7  r  r   r   r  r  BYTES_CAPATHr   rZ   r  s      r%   test_load_verify_locations'ContextTests.test_load_verify_locations  sF   nnS445!!(+!!$!?!!.1!!!E)S%>%>?)S%>%>dDQw'2%%o6 (++U\\:##CLL2FG%%g. H!!(F3!!(<!@ 	)S%>%>dK (' HGs   F3 G3
G
Gc                    [        [        5       nUR                  5       nS S S 5        [        R	                  W5      n[        [
        5       nUR                  5       nS S S 5        [        R	                  W5      n[        R                  [        R                  5      nU R                  UR                  5       S   S5        UR                  US9  U R                  UR                  5       S   S5        UR                  US9  U R                  UR                  5       S   S5        UR                  US9  U R                  UR                  5       S   S5        [        R                  [        R                  5      nSR                  X$45      nUR                  US9  U R                  UR                  5       S   S5        [        R                  [        R                  5      nSUSUS	US
/nUR                  SR                  U5      S9  U R                  UR                  5       S   S5        [        R                  [        R                  5      nUR                  US9  UR                  US9  U R                  UR                  5       S   S5        UR                  US9  U R                  UR                  5       S   S5        [        R                  [        R                  5      nSR                  X545      nUR                  US9  U R                  UR                  5       S   S5        [        R                  [        R                  5      nU R                  [        UR                  [        S9  U R                  [        R                   S5         UR                  SS9  S S S 5        U R                  [        R                   S5         UR                  SS9  S S S 5        U R                  [        R                   5         UR                  US-   S9  S S S 5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N~= f! , (       d  f       g = f)Nx509_car   cadatarU   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)rN   r>  rO   r   r?  CAFILE_NEURONIOrq   rf   r   cert_store_statsr   r    r  r   objectr   r   )r   rQ   
cacert_pem
cacert_derneuronio_pemneuronio_derrZ   combineds           r%   test_load_verify_cadata$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
 %%X%6	

 ##LLD
 %%Y%7	

 s||,%%Z$->%? -,y !  #"^
 


 

 -,s;   PP+P=Q=Q
P(+
P:=
Q
Q
Q-c                 ,   [         R                  [         R                  5      n UR                  [        5        [        R                  S:w  a  UR                  [        5        U R                  [        UR                  5        U R                  [        UR                  S 5        U R                  [        5       nUR                  [        5        S S S 5        U R                  WR                   R"                  ["        R$                  5        U R                  [         R&                  5       nUR                  [(        5        S S S 5        g ! [
         a    [        (       a  U R                  S5        e f = f! , (       d  f       N= f! , (       d  f       g = f)N"not supported on Win32 debug buildnt)r   rq   re   load_dh_paramsDHFILERuntimeErrorPy_DEBUG_WIN32r0  r   r$   BYTES_DHFILEr  r   rP   r  r   r   r7  r  r   r  r  s      r%   test_load_dh_params ContextTests.test_load_dh_params\  s   nnS445	v&
 77d?|,)S%7%78)S%7%7>01R/ 2++U\\:s||,x( -,  	~BC	 21 -,s#   E	 9E4*F	(E14
F
Fc                     [         R                  [         R                  1 HD  n[         R                  U5      nU R	                  UR                  5       SSSSSSSSSSSS.5        MF     g )Nr   )numberr  connect_goodconnect_renegotiateacceptaccept_goodaccept_renegotiatehitsmissestimeouts
cache_full)r   rf   re   rq   r   session_statsr   s      r%   test_session_statsContextTests.test_session_statsn  sk    --s/F/FGE..'CS..0 !'( &'3  Hr'   c                 j    [         R                  [         R                  5      nUR                  5         g r]   )r   rq   rf   set_default_verify_pathsr]  s     r%   test_set_default_verify_paths*ContextTests.test_set_default_verify_paths  s$     nnS445$$&r'   z#ECDH disabled on this OpenSSL buildc                    [         R                  [         R                  5      nUR                  S5        UR                  S5        U R	                  [
        UR                  5        U R	                  [
        UR                  S 5        U R	                  [        UR                  S5        U R	                  [        UR                  S5        g )N
prime256v1s
   prime256v1foo   foo)r   rq   re   set_ecdh_curver  r   r   r]  s     r%   test_set_ecdh_curve ContextTests.test_set_ecdh_curve  s    nnS445<(=))S%7%78)S%7%7>*c&8&8%@*c&8&8&Ar'   c                    [         R                  [         R                  5      nU R                  [        UR
                  5        U R                  [        UR
                  S5        U R                  [        UR
                  S5        U R                  [        UR
                  U5        S nUR                  S 5        UR                  U5        g )NrL  rh  c                     g r]   r^   )r   
servernamerZ   s      r%   dummycallback5ContextTests.test_sni_callback.<locals>.dummycallback      r'   )r   rq   re   r  r   set_servername_callback)r   rZ   r/  s      r%   test_sni_callbackContextTests.test_sni_callback  s    nnS445 	)S%@%@A)S%@%@!D)S%@%@"E)S%@%@#F	##D)##M2r'   c                     [         R                  [         R                  5      nU4S jnUR                  U5        [        R
                  " U5      nAA[        R                  " 5         U R                  U" 5       S 5        g )Nc                     g r]   r^   )r   r.  rZ   cycles       r%   r/  >ContextTests.test_sni_callback_refcycle.<locals>.dummycallback  r1  r'   )	r   rq   re   r2  rj  rk  gccollectr   )r   rZ   r/  ro  s       r%   test_sni_callback_refcycle'ContextTests.test_sni_callback_refcycle  sZ     nnS4457: 	##M2[[


bdD!r'   c                    [         R                  [         R                  5      nU R                  UR	                  5       SSSS.5        UR                  [        5        U R                  UR	                  5       SSSS.5        UR                  [        5        U R                  UR	                  5       SSSS.5        UR                  [        5        U R                  UR	                  5       SSSS.5        g )Nr   )r  crlx509rU   r  )	r   rq   rf   r   r   r   r  r   r>  r]  s     r%   test_cert_store_stats"ContextTests.test_cert_store_stats  s    nnS445--/!Q/	1H%--/!Q/	1!!(+--/!Q/	1!!-0--/!Q/	1r'   c                 P   [         R                  [         R                  5      nU R                  UR	                  5       / 5        UR                  [        5        U R                  UR	                  5       / 5        UR                  [        5        U R                  UR	                  5       SSSSSSSS./5        [        [        5       nUR                  5       nS S S 5        [         R                  W5      nU R                  UR	                  S5      U/5        g ! , (       d  f       NF= f)	N)))r0   zRoot CA))r#  zhttp://www.cacert.org))r1   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   )r6   r7   r8   r9   rA   r:   r<   T)r   rq   rf   r   get_ca_certsr   r  r>  rN   rO   r?  )r   rZ   rQ   rE  ders        r%   test_get_ca_certs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                    [         R                  [         R                  5      nUR                  5         [         R                  [         R                  5      nUR                  [         R                  R
                  5        UR                  5         [         R                  [         R                  5      nUR                  [         R                  R                  5        [         R                  [         R                  5      nU R                  [        UR                  S 5        U R                  [        UR                  S5        g )Nr	  )	r   rq   rf   load_default_certsr   r	  r
  r  r   r]  s     r%   test_load_default_certs$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                 4   [         R                  [         R                  5      n[        R                  " 5        n[
        US'   [        US'   UR                  5         U R                  UR                  5       SSSS.5        S S S 5        g ! , (       d  f       g = f)Nr  r  r   rU   )r>  r?  r  )
r   rq   rf   r   r  r  r  rI  r   r   )r   rZ   r  s      r%   test_load_default_certs_env(ContextTests.test_load_default_certs_env  sq    nnS445**,"(C#+C ""$S113QVW5XY	 -,,s   AB		
Br  z3Debug build does not share environment between CRTsc                    [         R                  [         R                  5      nUR                  5         UR	                  5       n[         R                  [         R                  5      n[
        R                  " 5        n[        US'   [        US'   UR                  5         US==   S-  ss'   U R                  UR	                  5       U5        S S S 5        g ! , (       d  f       g = f)Nr  r  r?  rU   )
r   rq   rf   rI  r   r   r  r  r  r   )r   rZ   statsr  s       r%   #test_load_default_certs_env_windows0ContextTests.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                    U R                  UR                  [        R                  -  [        R                  5        [        S:w  a'  U R                  UR                  [        -  [        5        [
        S:w  a'  U R                  UR                  [
        -  [
        5        [        S:w  a'  U R                  UR                  [        -  [        5        [        S:w  a'  U R                  UR                  [        -  [        5        U R                  UR                  [        R                  -  [        (       a  S5        g [        R                  5        g r   )
r   r  r   r   rF   rG   rH   rI   OP_LEGACY_SERVER_CONNECTro   r]  s     r%   _assert_context_options$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                    [         R                  5       nU R                  UR                  [         R                  5        U R                  UR
                  [         R                  5        U R                  UR                  [         R                  -  [         R                  5        U R                  UR                  [         R                  -  [         R                  5        U R                  UR                  5        U R                  U5        [        [        5       nUR                  5       nS S S 5        [         R                  [        [         WS9nU R                  UR                  [         R                  5        U R                  UR
                  [         R                  5        U R                  U5        [         R                  [         R"                  R$                  5      nU R                  UR                  [         R&                  5        U R                  UR
                  [         R(                  5        U R                  U5        g ! , (       d  f       GN$= f)N)r  r)   r  )r   r  r   ri   rf   r   r   r  VERIFY_X509_PARTIAL_CHAINr  rZ  r   rU  rN   r   rO   r  r   r
  re   r   )r   rZ   rQ   r  s       r%   test_create_default_context(ContextTests.test_create_default_context  s   ((*s'>'>?#*;*;<))C,I,II66	8))C,B,BB**	,**+$$S)*VVXF ((
606 ) 8s'>'>?#*;*;<$$S)(()@)@As'>'>?#--8$$S) s   I
Ic                    [         R                  5       nU R                  UR                  [         R                  5        U R                  UR
                  [         R                  5        U R                  UR                  5        U R                  U5        [        [         R                  5      (       a  [        R                  " 5          [         R                  [         R                  5      nS S S 5        U R                  UR                  [         R                  5        U R                  UR
                  [         R                  5        U R                  U5        [        R                  " 5          [         R                  [         R                  [         R                  SS9nS S S 5        U R                  UR                  [         R                  5        U R                  UR
                  [         R                  5        U R!                  UR                  5        U R                  U5        [         R                  [         R"                  R$                  S9nU R                  UR                  [         R&                  5        U R                  UR
                  [         R                  5        U R                  U5        g ! , (       d  f       GN= f! , (       d  f       GN2= f)NT)r   r   purpose)r   _create_stdlib_contextr   ri   rf   r   r   r  r   rU  rj   r   r
   rl  r  r   rZ  r   r
  re   r]  s     r%   test__create_stdlib_context(ContextTests.test__create_stdlib_context%  s   ((*s'>'>?#--8++,$$S)C..// //1001C1CD 2S\\3+=+=>S__cmm<((-++-,,$$++# - C . 	s';';<#*;*;<**+$$S)((1H1H(Is'>'>?#--8$$S)) 21 .-s   $J9.2K9
K
Kc                    [         R                  " 5          [        R                  [        R                  5      nS S S 5        U R                  WR                  5        U R                  UR                  [        R                  5        SUl        U R                  UR                  5        U R                  UR                  [        R                  5        SUl        [        R                  Ul        U R                  UR                  5        U R                  UR                  [        R                  5        SUl        [        R                  Ul        SUl        U R                  UR                  5        U R                  UR                  [        R                  5        SUl        U R                  UR                  5        U R                  UR                  [        R                  5        SUl        [        R                  Ul        SUl        U R                  UR                  5        U R                  UR                  [        R                  5        SUl        U R                  UR                  5        U R                  UR                  [        R                  5        U R                  [        5         [        R                  Ul        S S S 5        SUl        U R                  UR                  5        [        R                  Ul        U R                  UR                  [        R                  5        g ! , (       d  f       GN= f! , (       d  f       N= fr  )r
   rl  r   rq   rd   r  r   r   r   r   rZ  r   r   r  r   r]  s     r%   test_check_hostname ContextTests.test_check_hostnameC  s;   ++-..!1!12C .++,#--8 "**+#*;*;<"++++,#*;*;< #--"++,#--8!**+#*;*;<"++"++,#*;*;<!**+#*;*;< z*!mmCO +"++,--#--8S .-H +*s   $L11M1
M 
Mc                    [         R                  [         R                  5      nU R                  UR                  5        U R                  UR                  [         R                  5        [         R                  [         R                  5      nU R                  UR                  5        U R                  UR                  [         R                  5        g r]   )r   rq   rf   rZ  r   r   r   r   re   r  r   r]  s     r%   test_context_client_server'ContextTests.test_context_client_servero  s    nnS445**+#*;*;< nnS445++,#--8r'   c                     " S S[         R                  5      n " S S[         R                  5      n[         R                  [         R                  5      nXl        X#l        UR                  [        R                  " 5       SS9 nU R                  XA5        S S S 5        UR                  [         R                  5       [         R                  5       SS9nU R                  XR5        g ! , (       d  f       NU= f)Nc                       \ rS rSrSrg);ContextTests.test_context_custom_class.<locals>.MySSLSocketi{  r^   Nr  rH  rI  rJ  rP  r^   r'   r%   MySSLSocketri  {      r'   rk  c                       \ rS rSrSrg);ContextTests.test_context_custom_class.<locals>.MySSLObjecti~  r^   Nrj  r^   r'   r%   MySSLObjectrn  ~  rl  r'   ro  Tr   )r   r   	SSLObjectrq   re   sslsocket_classsslobject_classr   r   rU  wrap_bior   )r   rk  ro  rZ   r   r  s         r%   test_context_custom_class&ContextTests.test_context_custom_classz  s    	#-- 		#-- 	 nnS445))__V]]_$_?4!!$4 @ll3==?CMMOlNc/ @?s   C&&
C4c                    [         R                  [         R                  5      nU R                  UR                  S5        SUl        U R                  UR                  S5        SUl        U R                  UR                  S5        U R                  [        5         SUl        S S S 5        U R                  [        5         S Ul        S S S 5        [         R                  [         R                  5      nU R                  UR                  S5        U R                  [        5         SUl        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr  rU   r   r  )	r   rq   re   r   num_ticketsr  r   r   rf   r]  s     r%   test_num_tickestContextTests.test_num_tickest  s    nnS445!,!,!,z* CO +y)"CO * nnS445!,z*CO +* +*))
 +*s$   D5 E$E5
E
E
E%r^   N)4r  rH  rI  rJ  rV  r^  rw   rL  r   ri  r|  r   r  r  ignore_deprecationr  rV   r   rq   r  r  r  r	   requires_working_threadingr  r  r  r  r  r#  r   r*  r3  r;  r@  rF  rJ  skipIfr   rN  rM  r   Py_DEBUGrQ  rU  rY  r_  rb  re  ru  ry  rP  r^   r'   r%   rR  rR    s   
:0 /14FH	+H	+
&  D,07 L; L;\  01#@	@$(WBr 002, 3,$L&?@B)$"' 'LMB NB3
"188L __S\\W,.DEZ FZ 02DE__W%%JL<L F<R"*2*<*9X	90  r'   rR  c                   ,    \ rS rSrS rS rS rS rSrg)SSLErrorTestsi  c                 8   [         R                  SS5      nU R                  [        U5      S5        U R                  UR                  S5        [         R                  SS5      nU R                  [        U5      S5        U R                  UR                  S5        g )NrU   r'  )r   r   r   rb   r7  SSLZeroReturnError)r   es     r%   test_strSSLErrorTests.test_str  st    LLE"Q'!$""1e,Q'!$r'   c                 .   [         R                  [         R                  5      n U R                  [         R                  5       nUR                  [        5        S S S 5        U R                  WR                  R                  S5        SnU R                  UR                  R                  U5        [        UR                  5      nU R!                  SU;   U5        g ! , (       d  f       N= f! [         a    [        (       a  U R                  S5        e f = f)Nr
  PEMz+(NO_START_LINE|UNSUPPORTED_PUBLIC_KEY_TYPE)NO_START_LINE)r   rq   rf   r  r   r  r  r  r  r0  r   r   libraryassertRegexreasonrb   rZ  )r   rZ   r  r  r   s        r%   test_lib_reasonSSLErrorTests.test_lib_reason  s    nnS445	""3<<0B""8, 1 	--u5=,,e41,a0 10 	~BC	s)   C, CC, 
C)%C, )C, ,(Dc                    [         R                  [         R                  5      nSUl        [         R                  Ul        [        R                  " S5       n[        R                  " UR                  5       5      nUR                  S5        UR                  USSS9 nU R                  [         R                  5       nUR                  5         S S S 5        [        WR                   5      nU R#                  UR%                  S5      U5        U R'                  UR                   R(                  [         R*                  5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g = f)NFr  r  z%The operation did not complete (read))r   rq   rf   r   r   r   r   r  create_connectionr  setblockingr   r  SSLWantReadErrordo_handshakerb   r   rZ  r   r   r7  SSL_ERROR_WANT_READ)r   rZ   r   r  r  s        r%   test_subclassSSLErrorTests.test_subclass  s    nnS445"--!!"23q((9AMM% E5IQ&&s';';<NN$ =%-T UWXY  !3!3S5L5LM J 43 =< JI 43s>   AE3 E"=EA2E" E3
EE""
E0	,E33
Fc                    [         R                  5       nU R                  [        5         UR	                  [         R                  5       [         R                  5       SS9  S S S 5        U R                  [        5         UR	                  [         R                  5       [         R                  5       SS9  S S S 5        U R                  [        5         UR	                  [         R                  5       [         R                  5       SS9  S S S 5        g ! , (       d  f       N= f! , (       d  f       Ns= f! , (       d  f       g = f)Nrh  r  z.example.orgzexample.org evil.com)r   r  r  r   rt  r   r   r]  s     r%   test_bad_server_hostname&SSLErrorTests.test_bad_server_hostname  s    ((*z*LL#--/)+  - + z*LL#--/)7  9 + y)LL#--/)B  D *) +* +* *)s#   6D=6D 6D1
D 
D.1
D?r^   N)	r  rH  rI  rJ  r  r  r  r  rP  r^   r'   r%   r  r    s    %1"N$
Dr'   r  c                   2    \ rS rSrS rS rS rS rS rSr	g)	MemoryBIOTestsi  c                 z   [         R                  5       nUR                  S5        U R                  UR	                  5       S5        U R                  UR	                  5       S5        UR                  S5        UR                  S5        U R                  UR	                  5       S5        U R                  UR	                  5       S5        UR                  S5        U R                  UR	                  S5      S5        U R                  UR	                  S5      S	5        U R                  UR	                  S5      S5        g )
Nr(  r'      bars   foobar   bazr  s   barU      z)r   r   r   r   rO   r   bios     r%   test_read_writeMemoryBIOTests.test_read_write  s    mmo		&V,S)		&		&Y/S)		&!e,!d+!c*r'   c                    [         R                  5       nU R                  UR                  5        U R	                  UR                  5       S5        U R                  UR                  5        UR                  S5        U R                  UR                  5        UR                  5         U R                  UR                  5        U R	                  UR                  S5      S5        U R                  UR                  5        U R	                  UR                  S5      S5        U R                  UR                  5        U R	                  UR                  5       S5        U R                  UR                  5        g )Nr'   r(  r  s   forU      o)	r   r   r  eofr   rO   r   	write_eofrZ  r  s     r%   test_eofMemoryBIOTests.test_eof  s    mmo!S)!		&!!!e,!!d+ S) r'   c                 $   [         R                  5       nU R                  UR                  S5        UR	                  S5        U R                  UR                  S5        [        S5       H6  nUR                  S5        U R                  UR                  SU-
  S-
  5        M8     [        S5       H3  nUR	                  S5        U R                  UR                  US-   5        M5     UR                  5         U R                  UR                  S5        g )Nr   r(  r   rU   rs  )r   r   r   pendingr   r  rO   )r   r  r  s      r%   test_pendingMemoryBIOTests.test_pending  s    mmoa(		&a(qAHHQKS[[!A#a%0  qAIIdOS[[!A#.  	
a(r'   c                 @   [         R                  5       nUR                  S5        U R                  UR	                  5       S5        UR                  [        S5      5        U R                  UR	                  5       S5        UR                  [        S5      5        U R                  UR	                  5       S5        [        [        S5      5      nUS S S2   nU R                  [        5         UR                  [        U5      5        S S S 5        g ! , (       d  f       g = f)Nr(  r  r  s	   noncontig)	r   r   r   r   rO   r  
memoryviewr  BufferError)r   r  mnoncontig_writables       r%   test_buffer_types MemoryBIOTests.test_buffer_types  s    mmo		&V,		)F#$V,		*V$%V,y./ttW{+IIj!345 ,++s   +D
Dc                 4   [         R                  5       nU R                  [        UR                  S5        U R                  [        UR                  S 5        U R                  [        UR                  S5        U R                  [        UR                  S5        g )Nr'  TrU   )r   r   r  r   r   r  s     r%   test_error_typesMemoryBIOTests.test_error_types  se    mmo)SYY6)SYY5)SYY5)SYY2r'   r^   N)
r  rH  rI  rJ  r  r  r  r  r  rP  r^   r'   r%   r  r    s    +! )63r'   r  c                        \ rS rSrS rS rSrg)SSLObjectTestsi  c                     [         R                  5       nU R                  [        S5         [         R	                  X5        S S S 5        g ! , (       d  f       g = fr   )r   r   r   r   rq  r  s     r%   r    SSLObjectTests.test_private_init  s7    mmo##I/CDMM## EDDs   A


Ac                 $   [        5       u  pn[        R                  5       n[        R                  5       n[        R                  5       n[        R                  5       nUR                  XEUS9nUR                  XgSS9n	[	        S5       H  n
 UR                  5         UR                  (       a  UR                  UR                  5       5         U	R                  5         UR                  (       d  Mh  UR                  UR                  5       5        M     UR                  5         U	R                  5         U R                  [        R                  5         UR                  5         S S S 5        UR                  UR                  5       5        U	R                  5         UR                  UR                  5       5        UR                  5         g ! [        R                   a     GNEf = f! [        R                   a     GNf = f! , (       d  f       N= f)Nr  Trp  r*  )r   r   r   rt  r  r  r  r  r   rO   r  unwrap)r   
client_ctx
server_ctxr   c_inc_outs_ins_outclientr<  r  s              r%   test_unwrapSSLObjectTests.test_unwrap!  s   +:+<(
}}}}$$T($K$$Td$C qA##% }}

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

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

5::<  	

5::< 7 ''  ''  54s0   GG&HG#"G#&G>=G>
Hr^   N)r  rH  rI  rJ  r   r  rP  r^   r'   r%   r  r    s    $
(r'   r  c                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 r\R                  " \R                   S:H  S5      S 5       rS rS rS rS rS rS rS rS rS rS rS rS rSrg)SimpleBackgroundTestsiK  c                    [         R                  [         R                  5      U l        U R                  R	                  [
        5        [        U R                  S9nU R                  U5        [        UR                  4U l
        g )NrC  )r   rq   re   r   r   r   rD  enterContextr6  r=  server_addr)r   r<  s     r%   setUpSimpleBackgroundTests.setUpN  s\    !nnS-D-DE++O<#D,?,?@&! &++.r'   c                    [        [        R                  " [        R                  5      [        R                  S9 nUR                  U R                  5        U R                  0 UR                  5       5        U R                  UR                  5        S S S 5        [        [        R                  " [        R                  5      [        R                  [        S9 nUR                  U R                  5        U R                  UR                  5       5        U R                  UR                  5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr  r   r   )r   r   ri  r   r   r  r  r   getpeercertr  r   r   r   rZ  r   s     r%   test_connect"SimpleBackgroundTests.test_connectU  s    fmmFNN;&)mm589IId&&'R1Q]]+	5 fmmFNN;&)&7&7%/145IId&&'OOAMMO,Q]]+1 15 51 1s   AD8AE	8
E	
Ec                 d   [        [        R                  " [        R                  5      [        R                  S9nU R                  UR                  5        [        R                  " S[        R                  5      nU R                  [        R                  UUR                  U R                  5        g )Nr  |(
            certificate verify failed   # OpenSSL
            |
            CERTIFICATE_VERIFY_FAILED   # AWS-LC
        ))r   r   ri  r   r   r  r  r  r  r  r   r   r  r  )r   r   r  s      r%   test_connect_fail'SimpleBackgroundTests.test_connect_faild  sy     V]]6>>:&)&7&79 

  dd	
 	s||U yy$*:*:	<r'   c                 L   [        [        R                  " [        R                  5      [        R                  [
        S9nU R                  UR                  5        U R                  SUR                  U R                  5      5        U R                  UR                  5       5        g )Nr  r   )r   r   ri  r   r   r   r  r  r   r5  r  rZ  r  r   s     r%   test_connect_ex%SimpleBackgroundTests.test_connect_ext  sj    V]]6>>:&)&7&7%/1 	 ALL)9)9:;(r'   c                    [        [        R                  " [        R                  5      [        R                  [
        SS9nU R                  UR                  5        UR                  S5        UR                  U R                  5      nU R                  US[        R                  [        R                  45        [        R                  " / U// S5          UR!                  5          U R'                  UR)                  5       5        g ! [        R"                   a    [        R                  " U// / S5         O3[        R$                   a    [        R                  " / U// S5         Of = fM  )NF)r   r   r  r   r  )r   r   ri  r   r   r   r  r  r  r5  r  r  r7  EINPROGRESSr;  selectr  r  SSLWantWriteErrorrZ  r  r   r   r>  s      r%   test_non_blocking_connect_ex2SimpleBackgroundTests.test_non_blocking_connect_ex}  s    V]]6>>:&)&7&7%/49; 	 	e\\$**+b1e//1B1BCDb1#r3'0  	( '' 0qc2r3/(( 0b1#r3/0 s   D .E&6-E&%E&c                    [         R                  [         R                  5      nSUl        [         R                  Ul        UR                  [        R                  " [        R                  5      5       nUR                  U R                  5        U R                  0 UR                  5       5        S S S 5        UR                  [        R                  " [        R                  5      SS9 nUR                  U R                  5        S S S 5        [         R                  Ul        UR                  [        5        UR                  [        R                  " [        R                  5      5       nUR                  U R                  5        UR                  5       nU R!                  U5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       g = f)NFdummyr  )r   rq   rf   r   r   r   r   r   ri  r  r  r   r  r   r   r   rZ  r   rZ   r   r  s       r%   test_connect_with_context/SimpleBackgroundTests.test_connect_with_context  s6   nnS445"--__V]]6>>:;qIId&&'R1 < __V]]6>>:,3  589IId&&'5 ++!!*-__V]]6>>:;qIId&&'==?DOOD! <; <;5 5 <;s$   3<F0)G*=G0
F?
G
G!c                    [         R                  [         R                  5      nUR                  [        R                  " [        R
                  5      [        S9nU R                  UR                  5        [        R                  " S[        R                  5      nU R                  [         R                  UUR                  U R                  5        g )Nr  r  )r   rq   rf   r   r   ri  r   r  r  r  r  r  r   r   r  r  )r   rZ   r   r  s       r%   test_connect_with_context_fail4SimpleBackgroundTests.test_connect_with_context_fail  s     nnS445OOMM&..)4  
 	 

  dd	
 	s||U !		4+;+;	=r'   c                    [         R                  [         R                  5      nUR                  [        S9  UR                  [        R                  " [        R                  5      [        S9 nUR                  U R                  5        UR                  5       nU R                  U5        S S S 5        [         R                  [         R                  5      nUR                  [        S9  UR                  [        R                  " [        R                  5      [        S9 nUR                  U R                  5        UR                  5       nU R                  U5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr  r  )r   rq   rf   r   r  r   r   ri  r   r  r  r  rZ  r  r  s       r%   test_connect_capath)SimpleBackgroundTests.test_connect_capath  s    nnS445!!!0__V]]6>>:-E  GJKIId&&'==?DOOD!	G nnS445!!!6__V]]6>>:-E  GJKIId&&'==?DOOD!	G GG GG Gs   -=E$=E5$
E25
Fc                    [        [        5       nUR                  5       nS S S 5        [        R	                  W5      n[        R                  [        R                  5      nUR                  US9  UR                  [        R                  " [        R                  5      [        S9 nUR                  U R                  5        UR                  5       nU R                  U5        S S S 5        [        R                  [        R                  5      nUR                  US9  UR                  [        R                  " [        R                  5      [        S9 nUR                  U R                  5        UR                  5       nU R                  U5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       g = f)Nr  r  )rN   r   rO   r   r?  rq   rf   r   r   r   ri  r   r  r  r  rZ  )r   rQ   rE  rE  rZ   r   r  s          r%   test_connect_cadata)SimpleBackgroundTests.test_connect_cadata  sM   *&&(C &&s+nnS445!!!-__V]]6>>:-E  GJKIId&&'==?DOOD!	G nnS445!!!-__V]]6>>:-E  GJKIId&&'==?DOOD!	G G 
G GG Gs#   F&=F+=F<
F(+
F9<
G
r  z*Can't use a socket as a file under Windowsc                 `   [        [        R                  " [        R                  5      5      nUR                  U R                  5        UR                  5       nUR                  5       nUR                  5         [        R                  " US5        UR                  5         [        R                  " 5         U R                  [        5       n[        R                  " US5        S S S 5        U R                  WR                  R                   [         R"                  5        g ! , (       d  f       NC= fr   )r   r   ri  r  r  filenomakefiler  r   rO   r9  r:  r  ru  r   r   r7  EBADF)r   rn  fdrQ   r  s        r%   test_makefile_close)SimpleBackgroundTests.test_makefile_close  s    
 fmmFNN;<


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


w'1GGBN (**EKK8 ('s   
D
D-c                 v   [         R                   " [         R                  5      nUR                  U R                  5        UR	                  S5        [        U[        R                  SS9nU R                  UR                  5        Sn  US-  nUR                  5          [        R                  (       a#  [         R"                  R%                  SU-  5        g g ! [        R                   a    [        R                  " U// / 5         O2[        R                   a    [        R                  " / U// 5         Of = fM  )NFr   r  r   rU   z9
Needed %d calls to do_handshake() to establish session.
)r   ri  r  r  r  r   r   r   r  r  r  r  r  r  r   r   r   r   r   )r   r   counts      r%   test_non_blocking_handshake1SimpleBackgroundTests.test_non_blocking_handshake  s    MM&..)			$""#	eQ&)mm49; 	 +
 
 ??JJZ]bbc 	 '' +qc2r*(( +b1#r*+ s   	C -D6,D65D6c                 >    [        U /U R                  Q7S[        06  g )Nr  )_test_get_server_certificater  r   r   s    r%   test_get_server_certificate1SimpleBackgroundTests.test_get_server_certificate  s    $TND,<,<N:Nr'   c           	        ^ U R                   u  p/ mU4S jnU R                  R                  U5        [        R	                  X45      nU(       d  U R                  SU< SU< S35        [        R	                  X4[        S9nU(       d  U R                  SU< SU< S35        [        R                  (       a,  [        R                  R                  SU< SU< SU< S35        U R                  TX/5        g )	Nc                 (   > TR                  U5        g r]   )append)ssl_sockserver_nameinitial_contextserver_namess      r%   servername_cbLSimpleBackgroundTests.test_get_server_certificate_sni.<locals>.servername_cb  s    ,r'   No server certificate on :!r   
Verified certificate for  is
r
  )r  r   r2  r   get_server_certificaterB  r   r   r   r   r   r   r   )r   hostr=  r  rE  r  s        @r%   test_get_server_certificate_sni5SimpleBackgroundTests.test_get_server_certificate_sni  s    %%
	-33MB(($6II4FG(($
(KII4FG??JJDRVX[\]|4r'   c                 0    [        U /U R                  Q76   g r]   )!_test_get_server_certificate_failr  r   s    r%    test_get_server_certificate_fail6SimpleBackgroundTests.test_get_server_certificate_fail*  s     	*$B1A1ABr'   c                     S nU R                   R                  U5        U R                  [        R                  5         [
        R                  U R                  [        SS9  S S S 5        g ! , (       d  f       g = f)Nc                 0    [         R                  " S5        g )N皙?)r   sleepr  r  r  s      r%   r  PSimpleBackgroundTests.test_get_server_certificate_timeout.<locals>.servername_cb0  s    JJsOr'   皙?)r   r  )	r   r2  r  r   r  r   r  r  r   )r   r  s     r%   #test_get_server_certificate_timeout9SimpleBackgroundTests.test_get_server_certificate_timeout/  sY    	33MBv~~.&&t'7'7*/2 ' 4 /..s   $A++
A9c                    [        [        R                  " [        R                  5      [        R                  SS9 nUR                  U R                  5        S S S 5        [        [        R                  " [        R                  5      [        R                  SS9 nUR                  U R                  5        S S S 5        U R                  [        R                  S5         [        R                  " [        R                  5       n[        U[        R                  SS9nUR                  U R                  5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N9= f! , (       d  f       g = f)NrY  )r   r   rZ  r[  r\  )	r   r   ri  r   r   r  r  r   r   )r   r   r   s      r%   r^  "SimpleBackgroundTests.test_ciphers8  s	   fmmFNN;'*}}eEHIIId&&'E fmmFNN;'*}}iILMIId&&'I ##CLL2MNv~~.$$T.1mmEWY		$**+ / ONE EI I
 /. ONs;   E
E%E=5E,9E=

E
E),
E:	6E==
Fc                    [         R                  [         R                  5      nUR                  [        S9  U R                  UR                  5       / 5        UR                  [        R                  " [        R                  5      SS9 nUR                  U R                  5        UR                  5       nU R                  U5        S S S 5        U R                  [        UR                  5       5      S5        g ! , (       d  f       N8= f)Nr  r2   r  rU   )r   rq   rf   r   r  r   rD  r   r   ri  r  r  r  rZ  rh   r  s       r%   test_get_ca_certs_capath.SimpleBackgroundTests.test_get_ca_certs_capathF  s    nnS445!!!0))+R0__V]]6>>:-8  :=>IId&&'==?DOOD!	:
 	S--/0!4: :s   	=C88
Dc                    [         R                  [         R                  5      nUR                  [        S9  [         R                  [         R                  5      nUR                  [        S9  [
        R
                  " [
        R                  5      nUR                  USS9 nUR                  U R                  5        U R                  UR                  U5        U R                  UR                  R                  U5        X$l        U R                  UR                  U5        U R                  UR                  R                  U5        S S S 5        g ! , (       d  f       g = f)Nr  r2   r  )r   rq   rf   r   r  r   ri  r   r  r  r   r   _sslobj)r   ctx1ctx2r   rn  s        r%   test_context_setget)SimpleBackgroundTests.test_context_setgetR  s    ~~c556""&"1~~c556""&"1MM&..)a=JJt''(MM"**d+MM"**,,d3JMM"**d+MM"**,,d3 >==s   !B&E
Ec                    UR                  S[        R                  5      nSn[        R                  " U5       H  n	S n
US-  n U" U6 nUR                  5       nUR                  U5        U
c    OUU
[        R                  :X  d  ML  UR                  S5      nU(       a  UR                  U5        Mw  UR                  5         M     [        R                  (       a-  [        R                   R                  SXR"                  4-  5        W$ ! [        R
                   aF  nUR                  [        R                  [        R                  4;  a  e UR                  n
 S nAGNS nAff = f)Nr  r   rU   i   z"Needed %d calls to complete %s().
)r   r   SHORT_TIMEOUT
busy_retryr   r   r7  r  SSL_ERROR_WANT_WRITErO   sendallrv  r   r  r   r   r   r  )r   r   incomingoutgoingr{   ry   r   r  r  r  r7  retr  bufs                 r%   ssl_io_loop!SimpleBackgroundTests.ssl_io_loopa  s     **Y(=(=>##G,AEQJE Dk --/CLL }#111ii&NN3'&&(/ -0 ??JJB %}}56 7
- <<  773#:#:#&#;#;#= =	 s   DE";EE"c                    [         R                   " [         R                  5      nU R                  UR                  5        UR	                  U R
                  5        [        R                  5       n[        R                  5       n[        R                  [        R                  5      nU R                  UR                  5        U R                  UR                  [        R                  5        UR                  [         5        UR#                  X#S[$        5      nU R'                  UR(                  R*                  U5        U R-                  UR/                  5       5        U R-                  UR1                  5       5        U R-                  UR3                  5       5        U R5                  [6        UR8                  5        S[        R:                  ;   a4  UR1                  5       S:w  a   U R-                  UR=                  S5      5        U R?                  XX5R@                  5        U R                  UR/                  5       5        U R-                  UR3                  5       5        U RC                  UR1                  5       5        U R                  UR9                  5       5        S[        R:                  ;   a4  UR1                  5       S:w  a   U R                  UR=                  S5      5         U R?                  XX5RD                  5        U R5                  [        RH                  URJ                  S5        g ! [        RF                   a     NBf = f)NFr  TLSv1.3r(  )&r   ri  r  r  r  r  r   r   rq   rf   rZ  r   r   r   r   r   r   rt  r   r   r%  ownerr  cipherr<   shared_ciphersr  r   r  rM  r  r3  r  assertIsNotNoner  SSLSyscallErrorr   r   )r   r   r/  r0  rZ   sslobjs         r%   test_bio_handshake(SimpleBackgroundTests.test_bio_handshake  sA   }}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3F3FG(&//12V^^-.**,-34449IY9VOOF66|DE	TX}}E
 	#,,f=	 "" 	 	s   #L+ +MMc                    [         R                   " [         R                  5      nU R                  UR                  5        UR	                  U R
                  5        [        R                  5       n[        R                  5       n[        R                  [        R                  5      nSUl
        [        R                  Ul        UR                  X#S5      nU R                  XX5R                  5        SnU R                  XX5R                   U5        U R                  XX5R"                  S5      nU R%                  US5        U R                  XX5R&                  5        g )NF   FOO
   s   foo
)r   ri  r  r  r  r  r   r   rq   rf   r   r   r   rt  r3  r  r   rO   r   r  )r   r   r/  r0  rZ   r<  reqr2  s           r%   test_bio_read_write_data.SimpleBackgroundTests.test_bio_read_write_data  s    }}V^^,

#T%%&==?==?nnS445"--h%83F3FG<<EtxdKh'==Ar'   c                    [        5       u  pn[        R                  " [        R                  5       nUR                  U R                  5        [
        R                  5       n[
        R                  5       nUR                  XVUS9nU R                  XEXgR                  5        UR                  5         U R                  [
        R                  UR                  5        S S S 5        g ! , (       d  f       g = f)Nr  )r   r   ri  r  r  r   r   rt  r3  r  r  r  SSLEOFErrorrO   )r   r   r   r   r   r/  r0  r<  s           r%   test_transport_eof(SimpleBackgroundTests.test_transport_eof  s    3B3D0]]6>>*dLL))*}}H}}H#,,X=E - GFTX7J7JK  coov{{; +**s   B*C%%
C3)r  r   N)r  rH  rI  rJ  r  r  r  r  r  r  r  r  r  rw   r}  r   r$   r  r  r  r  r  r  r^  r"  r(  r3  r=  rC  rG  rP  r^   r'   r%   r  r  K  s    /,< ))4"(=&"."* __RWW_&RS9 T9$d*O5*C
4,
54 D">HB"<r'   r  networkc                       \ rS rSrS r\R                  " \R                  S5      \	R                  " S5      S 5       5       rSrg)NetworkedTestsi  c                 B   [         R                  " [        5         [        [        R                  " [        R
                  5      [        R                  SS9nU R                  UR                  5        UR                  S5        UR                  [        S45      nUS:X  a  U R                  S5        O%U[        R                  :X  a  U R                  S5        U R                  U[        R                   [        R"                  45        S S S 5        g ! , (       d  f       g = f)NFr  gHz>  r   z!REMOTE_HOST responded too quicklyzNetwork unreachable.)r   transient_internetREMOTE_HOSTr   r   ri  r   r   r  r  r  r5  r0  r7  ENETUNREACHr  EAGAINr;  r  s      r%   test_timeout_connect_ex&NetworkedTests.test_timeout_connect_ex  s     --k: v~~!>*-*;*;8=?A OOAGG$LL#{C01BQwABu(((45MM"u||U->->?@ ;::s   C,D
Dz
Needs IPv6walltimec                     [         R                  " S5         [        U SS5        [        U SS5        S S S 5        g ! , (       d  f       g = f)Nzipv6.google.comrM  )r   rN  r  r  r   s    r%    test_get_server_certificate_ipv6/NetworkedTests.test_get_server_certificate_ipv6  s:     --.?@(/@#F-d4EsK A@@s	   ;
A	r^   N)r  rH  rI  rJ  rR  rw   rL  r   IPV6_ENABLEDr   requires_resourcerV  rP  r^   r'   r%   rK  rK    sE    A  33\Bz*L + CLr'   rK  c           	      b   [         R                  X45      nU(       d  U R                  SU< SU< S35        [         R                  X4US9nU(       d  U R                  SU< SU< S35        [        R                  (       a-  [
        R                  R                  SU< SU< SU< S35        g g )Nr  r	  r
  r  r  r  r
  )r   r  rB  r   r   r   r   r   )testr  r=  r  rE  s        r%   r  r    sy    

$
$d\
2C		tTBC

$
$d\D
$
AC		tTBC

dTWXY r'   c           
         [         R                  " U 5          [        R                  X4[        S9nU R                  SU< SU< SU< S35        S S S 5        g ! [        R                   aA  n[        R                  (       a"  [        R                  R                  SU-  5         S nANYS nAff = f! , (       d  f       g = f)Nr  zGot server certificate z for r	  r
  z%s
)r
   check_no_resource_warningr   r  r  rB  r   r   r   r   r   r   )r[  r  r=  rE  xs        r%   r  r    s    		2	24	8	R,,d\H,MC IIT4PQ 
9	8 || 	-

  !,	- 
9	8s3   B1AB1B.-7B)$B1)B..B11
B?)make_https_serverc                   z    \ rS rSr " S S\R
                  5      r     SS jrS rS r	SS jr
S	 rS
 rS rSrg)rD  i  c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
$ThreadedEchoServer.ConnectionHandleri  c                     Xl         SU l        X l        X0l        U R                  R	                  S5        S U l        [        R                  R                  U 5        SU l	        g NFT)
r<  runningr   addrr  sslconnr  r   __init__daemon)r   r<  connsockrf  s       r%   rh  -ThreadedEchoServer.ConnectionHandler.__init__	  sL     K DL IIII!!$'DL%%d+DKr'   c                     U R                   R                  R                  U R                  SS9U l        U R                   R
                  R                  U R                  R                  5       5        U R                   R                  R                  U R                  R                  5       5        U R                   R                  R                  [        R                  :X  Ga  U R                  R                  5       n[        R                  (       aT  U R                   R                  (       a9  [         R"                  R%                  S[&        R(                  " U5      -   S-   5        U R                  R                  S5      n[        R                  (       aj  U R                   R                  (       aO  Uc   [         R"                  R%                  S5        O,[         R"                  R%                  S[+        U5       S35        U R                  R-                  5       n[        R                  (       aI  U R                   R                  (       a.  [         R"                  R%                  S[/        U5      -   S-   5        g! [0        [2        [4        4 a  nU R                   R6                  R                  [/        U5      5        U R                   R                  (       a$  [9        S	[;        U R<                  5      -   S
-   5        SU l        U RA                  5          S nAgS nAf[        RB                  [D        4 a  nU R                   R6                  R                  [/        U5      5        U R                   R                  (       a$  [9        S	[;        U R<                  5      -   S
-   5        URF                  [F        RH                  :w  a+  [         RJ                  S:w  a  SU l        U RA                  5          S nAgS nAff = f)NTrp  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   rg  selected_alpn_protocolsr  selected_alpn_protocolr9  r   r   r   r  r   r   chattyr   r   r   r  r  rh   r8  rb   ConnectionResetErrorBrokenPipeErrorConnectionAbortedErrorconn_errorsr   r   rf  re  r  r   ru  r7  
EPROTOTYPErN  )r   r  cert_binaryr8  r  s        r%   	wrap_conn.ThreadedEchoServer.ConnectionHandler.wrap_conn	  s   :#{{22>>II4  ?  133::4<<;^;^;`aR **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^%^_m )/;QR  ''..s1v6;;%% !KdSWS\S\o!]`e!ef$

LL'*  ''..s1v6;;%% !KdSWS\S\o!]`e!ef
 77e...3<<83K#(DLJJL+s&   A0I8 8O3BLO33B6O..O3c                     U R                   (       a  U R                   R                  5       $ U R                  R                  S5      $ )NrA  )rg  rO   r   rv  r   s    r%   rO   )ThreadedEchoServer.ConnectionHandler.readJ	  s/    ||||((**yy~~d++r'   c                     U R                   (       a  U R                   R                  U5      $ U R                  R                  U5      $ r]   )rg  r   r   rz  )r   r  s     r%   r   *ThreadedEchoServer.ConnectionHandler.writeP	  s1    ||||))%00yy~~e,,r'   c                     U R                   (       a  U R                   R                  5         g U R                  R                  5         g r]   )rg  r  r   r   s    r%   r  *ThreadedEchoServer.ConnectionHandler.closeV	  s'    ||""$		!r'   c                    SU l         U R                  R                  (       d  U R                  5       (       d  g U R                   (       Ga   U R	                  5       nUR                  5       nU(       d@  SU l          U R                  R                  5       U l        S U l        U R                  5         GOUS:X  a`  [        R                  (       a:  U R                  R                  (       a  [        R                  R!                  S5        U R                  5         g U R                  R                  (       a~  US:X  ax  [        R                  (       a:  U R                  R                  (       a  [        R                  R!                  S5        U R!                  S5        U R                  5       (       d  g GOU R                  R                  (       a  U R                  (       a  US:X  a  [        R                  (       a:  U R                  R                  (       a  [        R                  R!                  S	5        U R!                  S5        U R                  R                  5       U l        S U l        [        R                  (       a:  U R                  R                  (       a  [        R                  R!                  S
5        GOUS:X  a  [        R                  (       a:  U R                  R                  (       a  [        R                  R!                  S5        U R                  R#                  S5      nU R!                  [%        U5      R'                  S5      S-   5        GOuUS:X  a}  [        R                  (       a:  U R                  R                  (       a  [        R                  R!                  S5         U R                  R)                  5         U R!                  S5        GOUS:X  aA  U R                  R/                  5       b  U R!                  S5        GOU R!                  S5        GOUS:X  aH  U R                  R/                  5       nU R!                  [%        U5      R'                  S5      S-   5        GO]US:X  aS  U R                  R0                  R3                  5       nU R!                  [5        U5      R7                  SS5      S-   5        GOUS:X  aR  U R                  R0                  R9                  5       nU R!                  [5        U5      R7                  SS5      S-   5        O[        R                  (       aw  U R                  R                  (       a\  U R                  =(       a    S=(       d    Sn[        R                  R!                  SU< SU< SUR;                  5       < SU< S3	5        U R!                  UR;                  5       5         U R                   (       a  GM  g g ! [         a     GNPf = f! [*        R,                   a6  nU R!                  [%        U5      R'                  S5      S-   5         S nANlS nAff = f! [         a  n[=        U[>        5      (       ad  U R                  R@                  (       a-  [        R                  (       a  [C        S U RD                   35        U R                  5         SU l          S nAg U R                  R@                  (       a   [        R                  (       a  [G        S!5         U R!                  S"5        O! [         a     Of = fU R                  5         SU l          S nAGNrS nAff = f)#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   VERIFIEDCHAINrU   bigs   UNVERIFIEDCHAIN	encryptedunencryptedz server: read z (z), sending back z)...
z Connection reset by peer: zTest server failure:
s   ERROR
)$re  r<  starttls_serverrw  rO   striprg  r  r   ru  r  r   r   connectionchattyr   r   r   r  r   r  verify_client_post_handshaker   r   r  r%  get_verified_chainrh   to_bytesget_unverified_chainr/  ra   ConnectionErrorrp  printrf  r   )r   msgstrippedr  r  r  certsctypes           r%   run(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+#~~//"  0++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  )!!_55  ;;--'//!$?		{"KL

',{{))goo$%=>

:." JJL#(DLL')s   .Y ;W$ Y 3A%Y BY 2DY ;BY AY /W5 	Y 2Y Y #AY 1AY 
AY "B+Y $
W2.Y 1W22Y 5X?	,X:5Y :X??Y 
]A4] ;] \] 
\ ] \  ]  ])rf  ri  re  r<  r   rg  N)r  rH  rI  rJ  rh  rw  rO   r   r  r  rP  r^   r'   r%   ConnectionHandlerrb    s"    	;	z	,	-	"a	)r'   r  Nc                    U
(       a  Xl         O[        R                  Ub  UO[        R                  5      U l         Ub  UO[        R                  U R                   l        U(       a  U R                   R                  U5        U(       a  U R                   R                  U5        U(       a  U R                   R                  U5        U	(       a  U R                   R                  U	5        XPl
        X`l        Xpl        [        R                  " 5       U l        [        R                   " U R                  5      U l        S U l        SU l        / U l        / U l        / U l        [.        R0                  R3                  U 5        SU l        SU l        g rd  )r   r   rq   re   r   r   r   r   set_alpn_protocolsrX   rp  r  r  r   r   r   r4  r=  flagactivern  r9  rt  r  r   rh  ri  _in_context)r   certificatessl_versioncertreqscacertsrp  r  r  alpn_protocolsr   r   s              r%   rh  ThreadedEchoServer.__init__	  s   
 "L>>-8-D +6/2/F/FHDL 5=4H-0]] LL$227;,,[9//?((1 0.MMO	!++DII6		')$ !!$' r'   c                     U R                   (       a  [        S5      eSU l         U R                  [        R                  " 5       5        U R
                  R                  5         U $ )Nz&Re-entering ThreadedEchoServer contextT)r  r   startr  Eventr  waitr   s    r%   	__enter__ThreadedEchoServer.__enter__	  sE    EFF

9??$%		r'   c                 R    SU l         U R                  5         U R                  5         g NF)r  stopr    r   ry   s     r%   __exit__ThreadedEchoServer.__exit__	  s     				r'   c                     U R                   (       d  [        S5      eXl        [        R                  R                  U 5        g )N4ThreadedEchoServer must be used as a context manager)r  r   r  r  r   r  r   r  s     r%   r  ThreadedEchoServer.start	  s6    FH H	t$r'   c                 \   U R                   (       d  [        S5      eU R                  R                  S5        U R                  R	                  S5        SU l        U R                  (       a  U R                  R                  5         U R
                  (       a   U R                  R                  5       u  p[        R                  (       a?  U R                  (       a.  [        R                  R                  S[        U5      -   S-   5        U R!                  XU5      nUR#                  5         UR%                  5         U R
                  (       a  M  U R/                  5         g ! [&         aC  n[        R                  (       a$  [        R                  R                  SU< S35         S nANlS nAf[(         a    U R+                  5          N[,         a^  n[        R                  (       a?  U R                  (       a.  [        R                  R                  S[        U5      -   S-   5         S nANS nAff = f)	Nr  g      ?r*  Tz server:  new connection from r
  z connection timeout z connection handling failed: )r  r   r   r  listenr  r  r  r  r   r   rp  r   r   r   r   r  r  r    TimeoutErrorKeyboardInterruptr  BaseExceptionr  )r   newconnconnaddrhandlerr  s        r%   r  ThreadedEchoServer.run	  ss   FH H		S!		99IIMMOkkJ$(II$4$4$6!??t{{JJ$$%E'+H~&68<&= >00I kkk& 	

   E??JJ$$';A5%CD$ 		  J??t{{JJ$$7$q'ADHJJs,   B"E 
H+'9F%%H+	H+AH&&H+c                 b    U R                   b"  U R                   R                  5         S U l         g g r]   )r   r  r   s    r%   r  ThreadedEchoServer.close
  s&    99 IIOODI !r'   c                     SU l         g r  )r  r   s    r%   r  ThreadedEchoServer.stop
  s	    r'   )r  r  rp  rt  r  r   ri  r  r=  rn  r9  r   r  )
NNNNTFFNNNr]   )r  rH  rI  rJ  r  r   r  rh  r  r  r  r  r  r  rP  r^   r'   r%   rD  rD    sL    @)I,, @)D 6:(,FK $'+	!!F%>
r'   rD  c                   l    \ rS rSr " S S\R
                  5      rS rS rS r	S r
SS	 jrS
 rS rSrg)AsyncoreEchoServeri
  c                   P    \ rS rSr " S S\R
                  5      rS rS rS r	Sr
g)	AsyncoreEchoServer.EchoServeri"
  c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
/AsyncoreEchoServer.EchoServer.ConnectionHandleri$
  c                     [        USUSS9U l        [        R                  R	                  X R                  5        SU l        U R                  5         g )NTF)r   r   r  )r   r   r   dispatcher_with_sendrh  _ssl_accepting_do_ssl_handshake)r   connr   s      r%   rh  8AsyncoreEchoServer.EchoServer.ConnectionHandler.__init__&
  sG    .t7?FKM --66t[[I&*#&&(r'   c                     [        U R                  [        R                  5      (       aN  U R                  R	                  5       S:  a0  U R                  5         U R                  R	                  5       S:  a  M0  g)Nr   T)ra   r   r   r   r  handle_read_eventr   s    r%   readable8AsyncoreEchoServer.EchoServer.ConnectionHandler.readable.
  sR    dkk3==99++--/!3..0 ++--/!3r'   c                     U R                   R                  5         SU l        g ! [        R                  [        R
                  4 a     g [        R                   a    U R                  5       s $ [        R                   a    e [         a@  nUR                  S   [        R                  :X  a  U R                  5       s S nA$  S nAg S nAff = f)NFr   )r   r  r  r   r  r  rF  handle_closer   ru  ry   r7  ECONNABORTEDr   errs     r%   r  AAsyncoreEchoServer.EchoServer.ConnectionHandler._do_ssl_handshake4
  s    0KK,,. +0D' ,,c.C.CD  /,,..||  3xx{e&8&88#0022 93s'   $ $C
#C/C0C<CCc                 X   U R                   (       a  U R                  5         g U R                  S5      n[        R                  (       a+  [
        R                  R                  S[        U5      -  5        U(       d  U R                  5         g U R                  UR                  5       5        g )NrA  z server:  read %s from client
)r  r  rv  r   r   r   r   r   r   r  rz  r/  )r   r  s     r%   handle_read;AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_readC
  sf    &&**,99T?D

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

		$**,/r'   c                     U R                  5         [        R                  (       a-  [        R                  R                  SU R                  -  5        g g )Nz server:  closed connection %s
)r  r   r   r   r   r   r   r   s    r%   r  <AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_closeO
  s3    

??JJ$$%G$++%UV #r'   c                     e r]   r^   r   s    r%   r   <AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_errorT
  s    r'   )r  r   N)r  rH  rI  rJ  rh  r  r  r  r  r   rP  r^   r'   r%   r  r  $
  s!    )0
0W
r'   r  c                    Xl         [        R                  " [        R                  [        R                  5      n[        R
                  " US5      U l        [        R                  R                  X5        U R                  S5        g )Nrh  r*  )r   r   ri  SOCK_STREAMr   r4  r=  r   
dispatcherrh  r  r  s      r%   rh  &AsyncoreEchoServer.EchoServer.__init__W
  sT    $M==1C1CDD%//b9DI((4KKNr'   c                     [         R                  (       a"  [        R                  R	                  SU-  5        U R                  XR                  5        g )Nz$ server:  new connection from %s:%s
)r   r   r   r   r   r  r   )r   sock_objrf  s      r%   handle_accepted-AsyncoreEchoServer.EchoServer.handle_accepted^
  s3    

  !H$!NO""8]];r'   c                     e r]   r^   r   s    r%   r   *AsyncoreEchoServer.EchoServer.handle_errorc
  s    r'   )r   r=  N)r  rH  rI  rJ  r   r  r  rh  r  r   rP  r^   r'   r%   
EchoServerr  "
  s$    1	 = = 1	f		<
	r'   r  c                     S U l         SU l        U R                  U5      U l        U R                  R                  U l        [
        R                  R                  U 5        SU l        g rd  )	r  r  r  r<  r=  r  r   rh  ri  )r   r   s     r%   rh  AsyncoreEchoServer.__init__f
  sL    	ooh/KK$$	!!$'r'   c                 T    SU R                   R                  < SU R                  < S3$ )N<r   >)r  r  r<  r   s    r%   __str__AsyncoreEchoServer.__str__n
  s     NN33T[[AAr'   c                     U R                  [        R                  " 5       5        U R                  R	                  5         U $ r]   )r  r  r  r  r  r   s    r%   r  AsyncoreEchoServer.__enter__q
  s(    

9??$%		r'   c                    [         R                  (       a  [        R                  R	                  S5        U R                  5         [         R                  (       a  [        R                  R	                  S5        U R                  5         [         R                  (       a  [        R                  R	                  S5        [        R                  " SS9  g )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  AsyncoreEchoServer.__exit__v
  sp    ??JJ;<		??JJAB		??JJ?@d+r'   Nc                 N    Xl         [        R                  R                  U 5        g r]   )r  r  r   r  r  s     r%   r  AsyncoreEchoServer.start
  s    	t$r'   c                     SU l         U R                  (       a  U R                  R                  5         U R                   (       a+   [        R                  " S5        U R                   (       a  M*  g g !    N= f)NTrU   )r  r  r  r   loopr   s    r%   r  AsyncoreEchoServer.run
  sJ    99IIMMOkka  kkks   A0 0A4c                 F    SU l         U R                  R                  5         g r  )r  r<  r  r   s    r%   r  AsyncoreEchoServer.stop
  s    r'   )r  ri  r  r=  r<  r]   )r  rH  rI  rJ  r   r  r  rh  r  r  r  r  r  r  rP  r^   r'   r%   r  r  
  s;    Bh)) BHB

,%r'   r  c                    0 n[        UUSS9nU   U R                  [        R                  " 5       XVS9 n	U	R                  [        UR
                  45        U[        U5      [        U5      4 H  n
U(       a7  [        R                  (       a"  [        R                  R                  SU-  5        U	R                  U
5        U	R                  5       nU(       a7  [        R                  (       a"  [        R                  R                  SU-  5        XR                  5       :w  d  M  [        SUS S [!        U5      US S R                  5       [!        U5      4-  5      e   U	R                  S5        U(       a4  [        R                  (       a  [        R                  R                  S	5        UR#                  U	R%                  5       U	R'                  5       U	R)                  5       U	R+                  5       U	R-                  5       U	R.                  U	R0                  S
.5        U	R3                  5         S S S 5        UR4                  US'   UR6                  US'   S S S 5        U$ ! , (       d  f       N6= f! , (       d  f       U$ = f)NFr   rp  r  )r   session client:  sending %r...
 client:  read %r
4bad data <<%r>> (%d) received; expected <<%r>> (%d)
      over
 client:  closing connection.
)compressionr8  peercertclient_alpn_protocolr<   session_reusedr  server_alpn_protocolsserver_shared_ciphers)rD  r   r   r  r6  r=  r  r  r   r   r   r   r   rO   r/  AssertionErrorrh   r  r
  r8  r  ro  r<   r  r  r  rn  r9  )r   r   indatarp  r  sni_namer  rP  r<  r   argoutdatas               r%   server_params_testr  
  s    E'-168F 
'' ( ( ;>?IItV[[)*	& 1:f3EF#

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

(()>)HIlln,(O"3B<W!#2;,,.F==> > G GGI??JJ$$%FGLL }}((*MMO()(@(@(B99;"#"2"299  GGI?;@ *0)G)G%&)/)>)>%&E 
F LE; ; 
F Ls*   $I,C*I"D	I+&I,
I)	%I,,
I;c                    Uc  [         R                  n[         R                  S[         R                  S[         R                  S0U   n[        R
                  (       a_  U=(       a    S=(       d    Sn[        R                  R                  U[         R                  U5      [         R                  U 5      U4-  5        [        R                  " 5          [         R                  U5      nU=R                  U-  sl        [         R                  U 5      n	U	=R                  U-  sl        S S S 5        [        R                  US 5      n
U
bY  [!        W	S5      (       aH  U [         R"                  :X  a4  U	R$                  U
:  a$  [        R                  " 5          Xl        S S S 5        WR&                  [         R"                  :X  a  UR)                  S5        [+        W	U5        X4 H3  nX;l        UR/                  [0        5        UR3                  [4        5        M5      [7        XSSS	9nU(       d:  [9        S
[         R                  U5      < S[         R                  U 5      < S35      eUSLa  X,S   :w  a  [9        SU< SUS   < 35      eg g ! , (       d  f       GNh= f! , (       d  f       GN= f! [         R:                   a    U(       a  e  g [<         a0  nU(       d  UR>                  [>        R@                  :w  a  e  S nAg S nAff = f)Nr   r   r   z %s->%s %s
z {%s->%s} %s
rT   rY  F)rp  r  zClient protocol z  succeeded with server protocol r
  Tr<   zversion mismatch: expected z, got )!r   r   r   r   r   r   r   r   r   get_protocol_namer
   rl  rq   r  PROTOCOL_TO_TLS_VERSIONr   rV   rd   rT   ri   rX   r[   r   r   r   r   r   r  r  r   ru  r7  
ECONNRESET)server_protocolclient_protocolexpect_success	certsreqsserver_optionsclient_optionscerttype	formatstrr   r   min_versionrZ   rP  r  s                 r%   try_protocol_combor#  
  s    MM	{?? 	H
 #6K;K	

//@//@"$$ 	%
 
	'	'	)8.08.0 
* *--otDK N$566s///**[8 ++--8* . #"2"22""5)7/#O,!!*- 0G">*/%I  ((9((9;< < D( )$44 $2E)4D"F G G 5 )c 
*	)" .-( <<   QWW(8(88 9s7   AJJJ, 
J
J),L
	L&K>>Lc                 b    U R                  5        H  nU H  nSU 3US   ;   d  M      g   M     g)NzKx=descriptionTF)rf  )rZ   aliasesr8  aliass       r%   supports_kx_aliasr(    s8    //#EUG}} 55  $ r'   c                      \ rS rSr\R
                  " S5      S 5       r\R                  " \R                  S5      S 5       r
S rS rS r\R                  " \R                  S	5      S
 5       rS r\R                  " \S5      S 5       rS rSQS jrS r\" S5      S 5       rS rS rS r\" S5      S 5       r\" S5      S 5       r\" S5      S 5       r\" S5      S 5       rS r S r!S  r"S! r#S" r$S# r%S$ r&S% r'S& r(S' r)S( r*S) r+S* r,\" S5      S+ 5       r-\" S5      \" S5      \.S, 5       5       5       r/\" S5      \.S- 5       5       r0\" S5      \" S5      \.S. 5       5       5       r1\" S5      S/ 5       r2S0 r3\R                  " S1\Rh                  ;   S25      S3 5       r5S4 r6\R                  " \7" \S55      S65      S7 5       r8S8 r9S9 r:S: r;S; r<S< r=S= r>S> r?S? r@S@ rASA rBSB rCSC rDSD rESE rFSF rGSG rHSH rISI rJSJ rK\" S5      \R                  " \R                  SK5      SL 5       5       rM\" S5      \R                  " \R                  SK5      SM 5       5       rNSN rOSOrPgP)RThreadedTestsi  rT  c           
      d   [         R                  (       a  [        R                  R	                  S5        [        5       u  pnU R                  [        R                  [        R                  S9   [        UUSSUS9  S S S 5        SUl        U R                  [        R                  [        R                  S9   U R                  [        R                  5       n[        UUSSUS9  S S S 5        U R                  S[        WR                   5      5        S S S 5        U R                  [        R                  [        R                  S9   U R                  [        R                  5       n[        UUSSS9  S S S 5        U R                  S[        WR                   5      5        S S S 5        U R                  [        R                  [        R                  S9   U R                  [        R                  5       n[        UUSSS9  S S S 5        U R                  S[        WR                   5      5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       GNk= f! , (       d  f       GNP= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr
  )r  r<  T)r   r   rp  r  r  Fz@Cannot create a client socket with a PROTOCOL_TLS_SERVER context)r   r   rp  r  )r   r   r   r   r   r   r   r   rf   re   r  r   r  r   r  rb   r   )r   r   r   r   r  s        r%   	test_echoThreadedTests.test_echo  s    ??JJT"3B3D0\\!8!8AXAX\Yn.<&*T(02 Z ).%\\!8!8AXAX\Y""3<<0A".2@*.,46 1
 MMRAKK  Z \\!8!8AXAX\Y""3<<0A".2@*.G 1 MMRAKK  Z \\!8!8AXAX\Y""3<<0A".2@*.G 1 MMRAKK " ZY9 ZY 10 ZY 10 ZY 10 ZYsx   .H77 II	%-I I?&I-3-I? J!4J-J!7
I	
I	I
I*-
I<	7I??
J
J	J!!
J/z*test is only useful if the GIL is disabledc           	         / nSq  U R                  U R                  U R                  U R                  [
        R                  " U R                  SS9U R                  U R                  4 HE  n[        S5       H3  nU R                  X#S9   UR                  [        US95        S S S 5        M5     MG     [        R                  " 5        nU H+  nU R                  US9   UR!                  5         S S S 5        M-     U H+  nU R                  US9   UR#                  5         S S S 5        M-     UR$                  b5  ['        UR$                  [(        R*                  5      (       d  UR$                  eS S S 5        Sq g ! , (       d  f       GM  = f! , (       d  f       M  = f! , (       d  f       M  = f! , (       d  f       NH= f! Sq f = f)NTF)warnings_filtersr*  )r{   numr  )thread)r   r,  test_alpn_protocolstest_getpeercerttest_crl_checkr~   partialtest_check_hostname_idntest_wrong_cert_tls12test_wrong_cert_tls13r  r   r  r   r	   r  r  r    r  ra   rw   rx   )r   r  r{   r0  r  r1  s         r%   test_ssl_in_multiple_threads*ThreadedTests.test_ssl_in_multiple_threadsI  st     !% 	*((%%##!!00%* **** !8C49vT':; :9 $$ ";;=%FV4 54 & &FV4 54 & <<+%bllH4E4EFF ll* > %*!! :9
 54 54 >= %*!sm   BF> E6!%F> F-F	, F-FAF-+F> 6
F 	F> 	
FF-
F*%F--
F;7F> >Gc                    [         R                  (       a  [        R                  R	                  S5        [        5       u  pn[        USS9nU   UR                  [        R                  " 5       SUS9 nUR                  [        UR                  45        U R                  [        5         UR                  5         S S S 5        UR                  5         UR                  5       nU R!                  US5        UR#                  5       n[         R                  (       ad  [        R                  R	                  [$        R&                  " U5      S-   5        [        R                  R	                  S[)        U5      -   S-   5        SU;  a(  U R+                  S	[$        R&                  " U5      -  5        S
US   ;  a  U R+                  S5        U R-                  SU5        U R-                  SU5        [.        R1                  US   5      n[.        R1                  US   5      n	U R3                  X5        S S S 5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       N)= f! , (       d  f       g = f)Nr
  Fr   rp  )r  r   Can't get peer certificate.zConnection cipher is z.
r:   z$No subject field in certificate: %s.r/   zkMissing or invalid 'organizationName' field in certificate subject; should be 'Python Software Foundation'.r8   r7   )r   r   r   r   r   r   rD  r   r   r  r6  r=  r  r   r  r  rZ  r8  r  r  rb   rB  r  r   r  rX  )
r   r   r   r   r<  r   r  r8  beforeafters
             r%   r3  ThreadedTests.test_getpeercertr  s   ??JJT"3B3D0#N5I++FMMODI<D , FIJ		4-. &&z2MMO 3 }}&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F V 32F F Vs=   %I37I*H<;E0I+I<
II
I	I
I-c                    [         R                  (       a  [        R                  R	                  S5        [        5       u  pn[        [        SS5      nU R                  UR                  [        R                  U-  5        [        USS9nU   UR                  [        R                  " 5       US9 nUR                  [        UR                   45        UR#                  5       nU R%                  US5        S S S 5        S S S 5        U=R                  [        R&                  -  sl	        [        USS9n[(        R*                  " S[(        R,                  5      nU   UR                  [        R                  " 5       US9 nU R/                  [        R0                  U5         UR                  [        UR                   45        S S S 5        S S S 5        S S S 5        UR3                  [4        5        [        USS9nU   UR                  [        R                  " 5       US9 nUR                  [        UR                   45        UR#                  5       nU R%                  US5        S S S 5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nn= f! , (       d  f       g = f)	Nr
  r  r   Tr<  r  r=  r  )r   r   r   r   r   r   rc   r   r   r  r  rD  r   r   r  r6  r=  r  rZ  r  r  r  r  r   r   r   CRLFILE)	r   r   r   r   r  r<  r   r  r  s	            r%   r4  ThreadedTests.test_crl_check  s-   ??JJT"3B3D0S5q944c6H6H26MN $N4H++FMMO<D , FIJ		4-.}}&CD	F  	##s'@'@@##N4H

  dd	
 ++FMMO<D , FIJ++CLL%@IItV[[12 AF  	,,W5#N4H++FMMO<D , FIJ		4-.}}&CD	F V5F F V( A@F F VF F Vs   $J0AI14J$J7<!J&"J?J&J78$KAK K1
J 	;J
J
J#J&&
J4	0J77
K
K	K
K'c                    [         R                  (       a  [        R                  R	                  S5        [        5       u  pn[        USS9nU   UR                  [        R                  " 5       US9 nUR                  [        UR                  45        UR                  5       nU R                  US5        S S S 5        S S S 5        [        USS9n[        R                  " S[        R                   5      nU   UR                  [        R                  " 5       SS9 nU R#                  [$        R&                  U5         UR                  [        UR                  45        S S S 5        S S S 5        S S S 5        [        USS9nU   [        R                  " 5        nU R#                  [(        S5         UR                  U5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       GN+= f! , (       d  f       GN5= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nv= f! , (       d  f       N= f! , (       d  f       g = f)	Nr
  Tr<  r  r=  r  invalidz'check_hostname requires server_hostname)r   r   r   r   r   r   rD  r   r   r  r6  r=  r  rZ  r  r  r  r   r   CertificateErrorr   )r   r   r   r   r<  r   r  r  s           r%   rb  !ThreadedTests.test_check_hostname  s   ??JJT"3B3D0 $N4H++FMMO<D , FIJ		4-.}}&CD	F  $N4H

  dd	
 ++FMMO<E , GJK++C,@,@%HIItV[[12 IG  $N4HA++J,UW"..q1W ! V-F F V$ IHG G VW W ! Vs   $G,2AG6G,7$H !H<"G>H&H II/H1I	I
G)	$G,,
G;>
HH
H	H  
H.1
H?;I
I	I
I!z)test requires hostname_checks_common_namec                    [        5       u  pnSUl        [        USS9nU   UR                  [        R                  " 5       US9 nUR                  [        UR                  45        S S S 5        S S S 5        [        [        5      u  pnSUl        [        USS9nU   UR                  [        R                  " 5       US9 nU R                  [        R                  5         UR                  [        UR                  45        S S S 5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       NA= f! , (       d  f       NJ= f! , (       d  f       g = f)NFTr<  r  )r   r  rD  r   r   r  r6  r=  r   r  r   SSLCertVerificationErrorrE  s         r%   r  .ThreadedTests.test_hostname_checks_common_name  s(    4C3D05:2 $N4H++FMMO<D , FIJ		4-.F 
 4C93M05:2#N4H++FMMO<D , FIJ&&s'C'CDIItV[[12 EF VF F V EDF F Vs_   $D,"D'D,$E  E "D=E
E
D)	%D,,
D:=
EE
E	E
E-c                    [         R                  [         R                  5      nUR                  [        5        UR                  S5        [        n[         R                  [         R                  5      nUR                  [        5        [        USS9nU   UR                  [        R                  " 5       US9 nUR                  [        UR                  45        UR!                  5       nU R#                  US5        UR%                  5       S   R'                  S5      nU R#                  US S S	5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f
NzECDHE:ECDSA:!NULL:!aRSATr<  r  r=  r   -r  )ECDHEECDSA)r   rq   rf   r   r   rX   SIGNED_CERTFILE_ECC_HOSTNAMEre   r   SIGNED_CERTFILE_ECCrD  r   r   r  r6  r=  r  rZ  r8  splitr   r   r   r   r<  r   r  r8  s           r%   test_ecc_certThreadedTests.test_ecc_cert   s   (?(?@,,Z8""#<=/(?(?@&&':; $N4H++FMMO<D , FIJ		4-.}}&CDA,,S1r
,>?F VF F Vs%   $E8A;E3E
E	E
E#z2test requires RFC 5280 check added in OpenSSL 3.0+c                    [         R                  5       nUR                  [        5        [        n[         R                  [
        R                  S9nUR                  [        5        [        USS9nU   UR                  [        R                  " 5       US9 nU R                  [         R                  5         UR                  [        UR                   45        S S S 5        S S S 5        S S S 5        [         R                  5       nUR                  [        5        U=R"                  [         R$                  ) -  sl        [         R                  [
        R                  S9nUR                  [        5        [        USS9nU   UR                  [        R                  " 5       US9 nUR                  [        UR                   45        UR'                  5       nU R)                  US5        S S S 5        S S S 5        g ! , (       d  f       GN'= f! , (       d  f       GN1= f! , (       d  f       GN;= f! , (       d  f       NM= f! , (       d  f       g = f)Nr\  Tr<  r  r=  )r   r  r   LEAF_MISSING_AKI_CA"LEAF_MISSING_AKI_CERTFILE_HOSTNAMEr   r
  r   LEAF_MISSING_AKI_CERTFILErD  r   r   r  r   r  r6  r=  r  r  r  rZ  )r   r   r   r   r<  r   r  s          r%   test_verify_strict ThreadedTests.test_verify_strict  s    335,,-@A533G<O<O3P&&'@A#N4H++FMMO<D , FIJ&&s||4IItV[[12 5F  335,,-@A##(>(>'>>#33G<O<O3P&&'@A#N4H++FMMO<D , FIJ		4-.}}&CD	F V 54F F VF F Vsa   2$H H
6"G8H
 H?$H?#AH.'H?8
HH


H	H
H+.
H<	8H??
Ic                 4   [         R                  [         R                  5      nUR                  [        5        [         R
                  R                  Ul        UR                  S5        [        n[         R                  [         R                  5      nUR                  [        5        UR                  [        5        [        USS9nU   UR                  [         R                   " 5       US9 nUR#                  [$        UR&                  45        UR)                  5       nU R+                  US5        UR-                  5       S   R/                  S5      nU R+                  US S S	5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = frL  )r   rq   rf   r   r   r   rp   rm   rX   rP  re   r   rQ  r   rD  r   r   r  r6  r=  r  rZ  r8  rR  rS  s           r%   test_dual_rsa_eccThreadedTests.test_dual_rsa_ecc5  s0   (?(?@,,Z8 *-)?)?&""#<=/(?(?@&&':;&&7 $N4H++FMMO<D , FIJ		4-.}}&CDA,,S1r
,>?F VF F Vs%   $F	,A;E8'F	8
F	F		
Fc                    [         R                  (       a  [        R                  R	                  S5        [
        R                  [
        R                  5      nUR                  [        5        [
        R                  [
        R                  5      n[
        R                  Ul        SUl        UR                  [        5        / SQnU H  u  pV[!        USS9nU   UR#                  [$        R$                  " 5       US9 nU R'                  UR(                  U5        UR+                  [,        UR.                  45        UR1                  5       n	U R'                  UR(                  U5        U R3                  U	S5        S S S 5        S S S 5        M     [!        USS9nU   UR#                  [$        R$                  " 5       SS9 nU R5                  [
        R6                  5         UR+                  [,        UR.                  45        S S S 5        S S S 5        S S S 5        [!        USS9 nU(       a  [8        R:                  " U 5      O	[=        5          U R5                  [>        5         UR#                  [$        R$                  " 5       SS9  S S S 5        S S S 5        S S S 5        [!        USS9 nU(       a  [8        R:                  " U 5      O	[=        5          U R5                  [@        5         UR#                  [$        R$                  " 5       S	S9  S S S 5        S S S 5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       GMz  = f! , (       d  f       GNM= f! , (       d  f       GNW= f! , (       d  f       GNa= f! , (       d  f       N= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)
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)ra  ra  )s.   xn--knigsgsschen-lcb0w.idna2003.pythontest.netra  ).xn--knigsgchen-b4a3dun.idna2008.pythontest.netrb  )s.   xn--knigsgchen-b4a3dun.idna2008.pythontest.netrb  r<  r  r=  zpython.example.orgz.pythontest.nets   knig.idn.pythontest.net)!r   r   r   r   r   r   rq   re   r   IDNSANSFILErf   r   r   r   r   r   rD  r   r   r   r   r  r6  r=  r  rZ  r  rF  r
   r]  r   UnicodeErrorUnicodeDecodeError)
r   r/  r   r   idn_hostnamesr   expected_hostnamer<  r   r  s
             r%   r6  %ThreadedTests.test_check_hostname_idnO  s   ??JJT"(?(?@&&{3..!8!89!//!%%%j1
. 3@.O'tLF((9H ) JMN$$Q%6%68IJIItV[[12==?D$$Q%6%68IJOOD*GHJ  3@ $N4H$$V]]_5I % KNO&&s';';<IItV[[12 =K  ~dCv $  99$? ]# l+ARS ,	# D ~dCv $  99$? ]# 01 >    2	# DC7J J  =<K K V ,+	# # DC" 21	# # DCs   $L1<A<L8L1$M(< M"M>MM( (NN$M:N
N$(OO "$N/O O
L.)L11
M	
MM
M%	 M((
M7:
NN
N	N
N,/
N=9O  
O	
O
Oc                 ^   [        5       u  pnUR                  [        5        [        R                  Ul        [        R                  R                  Ul        [        USSS9nU   UR                  [        R                  " 5       US9 n UR                  [        UR                  45        U R                  S5        S S S 5        S S S 5        g ! [        R                    aA  n["        R$                  (       a"  [&        R(                  R+                  SU-  5         S nANaS nAf[,         a`  nUR.                  [.        R0                  :w  a  e ["        R$                  (       a"  [&        R(                  R+                  SU-  5         S nANS nAff = f! , (       d  f       N= f! , (       d  f       g = f)NTr  r  z'Use of invalid cert should have failed!z
SSLError is %r
z
socket.error is %r
)r   r   r  r   r   r   r   rp   rm   rD  r   r   r  r6  r=  rB  r   r   r   r   r   r   ru  r7  r  r   r   r   r   r<  r   r  s          r%   r7  #ThreadedTests.test_wrong_cert_tls12  s<    4C3D0&&x0%(%6%6"),)?)?&#"4$
 **6==?;C + EHIE 		4-. 		CD!E V << ???JJ$$%9A%=> C77e...??JJ$$%=%AB	CE E Vsa   $$FF
!C+F<FF
!7DFF
*AF FF

F
F	F
F,r  c                    [        5       u  pnUR                  [        5        [        R                  Ul        [        R                  R                  Ul        [        R                  R                  Ul        [        USSS9nU   UR                  [        R                  " 5       USS9 nUR                  [        UR                  45        U R                  [         S5         UR#                  S5        UR%                  S5        UR#                  S5        UR%                  S5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g = f)	NTr  Fr   suppress_ragged_eofszsalert unknown ca|EOF occurred|TLSV1_ALERT_UNKNOWN_CA|closed by the remote host|Connection reset by peer|Broken pipe   datar  s   should have failed already)r   r   r  r   r   r   r   r  rT   rD  r   r   r  r6  r=  r   ru  r   rO   rE  s         r%   r8  #ThreadedTests.test_wrong_cert_tls13  s   3B3D0&&x0%(%6%6"),)?)?&),)?)?&#"4$
 ''8@=B ( DGHIItV[[)*''  t56t	D V
 	D D Vs=   %E (8E AD>%E-E >
EE
E	E  
E.c                   ^ ^^^^ [         R                  " 5       m[         R                  " 5       m[        R                  " 5       m[        R                  " T[
        5      mUUU4S jnUUUU 4S jn[         R                  " US9nUR                  5          U" 5         UR                  5         g ! UR                  5         f = f)Nc                     > TR                  5         TR                  5         TR                  5       u  pU R                  5         TR                  5         TR                  5         g r]   )r  r  r  r  )newsockrf  listener_gonelistener_readyr   s     r%   listener2ThreadedTests.test_rude_shutdown.<locals>.listener  sC    HHJ HHJMGMMOGGIr'   c                  ,  > TR                  5         [        R                  " 5        n U R                  [        T45        TR                  5          [	        U 5      nTR                  S5        S S S 5        g ! [         a     Nf = f! , (       d  f       g = f)Nz2connecting to closed SSL socket should have failed)r  r   r  r6  r   rB  ru  )r  r  rt  ru  r=  r   s     r%   	connector3ThreadedTests.test_rude_shutdown.<locals>.connector  sx    !A		4,'""$T/2H IIRS !
   !s/   (BA5B5
B?BBB
Br  )	r  r  r   r   r4  r6  r   r  r    )r   rv  ry  r]  rt  ru  r=  r   s   `   @@@@r%   test_rude_shutdown ThreadedTests.test_rude_shutdown  s     #*!)MMO&&q$/	 
	T 
	T H-			KFFHAFFHs   B. .C c                    [         R                  (       a  [        R                  R	                  S5        [
        R                  [
        R                  5      nUR                  [        5        [
        R                  [
        R                  5      n[        USS9nU   UR                  [        R                  " 5       [        S9 n UR                  [         UR"                  45        U R%                  S5        S S S 5        S S S 5        g ! [
        R&                   a  nSnU R)                  U[
        R*                  5        U R-                  UR.                  S5        U R-                  UR0                  U5        SU S	3nU R3                  [5        U5      U5        [6        R8                  " S
[6        R:                  5      nU R3                  [5        U5      U5         S nANS nAff = f! , (       d  f       N= f! , (       d  f       g = f)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   rq   re   r   r   rf   rD  r   r   r   r  r6  r=  rB  r   rU  rI  r   verify_codeverify_messager  r   r  r  r  )r   r   r   r<  r   r  r  r  s           r%   test_ssl_cert_verify_error(ThreadedTests.test_ssl_cert_verify_error
  s~   ??JJT"(?(?@&&7..!8!89#N4H$$V]]_5M % ORS5IItV[[12II;<	O V || 5BC))!S-I-IJ$$Q]]B7$$Q%5%5s;u$?@E$$T!We4JJ ( $$	 E
 $$T!We445O O VsI   (G6G%2D	8G6	G"B;GG%G""G%%
G3	/G66
Hc                 j   [         R                  (       a  [        R                  R	                  S5        [        S5      (       a)  [        [        R                  [        R                  S5        [        [        R                  [        R                  S5        [        S5      (       a)  [        [        R                  [        R                  S5        [        S5      (       a8  [        [        R                  [        R                  S[        R                  5        [        [        R                  [        R                  S[        R                  5        [        S5      (       a8  [        [        R                  [        R                  S[        R                  5        [        S5      (       a8  [        [        R                  [        R                  S[        R                  5        [        [        R                  [        R                  S[        R                  5        [        S5      (       a8  [        [        R                  [        R                  S[        R                  5        [        S5      (       a6  [        [        R                  [        R                  S[        R                  S9  [        [        R                  [        R                  S[        R                  [        R                  -  S9  [        S5      (       a7  [        [        R                  [        R                  S[        R                  S9  g g )Nr
  r   FTr   )r  )r   r   r   r   r   rg   r#  r   rd   r   r   r   r   r   r   r   r   s    r%   test_PROTOCOL_TLS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                 \   [         R                  (       a  [        R                  R	                  S5        [        [        R                  [        R                  S5        [        [        R                  [        R                  S[        R                  5        [        [        R                  [        R                  S[        R                  5        [        [        R                  [        R                  S[        R                  S9  [        [        R                  [        R                  S5        g )Nr
  r   Fr  )r   r   r   r   r   r#  r   r   r   r   rd   r   r   r   s    r%   test_protocol_sslv3!ThreadedTests.test_protocol_sslv3J  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                 |   [         R                  (       a  [        R                  R	                  S5        [        [        R                  [        R                  S5        [        [        R                  [        R                  S[        R                  5        [        [        R                  [        R                  S[        R                  5        [        S5      (       a)  [        [        R                  [        R                  S5        [        [        R                  [        R                  S[        R                  S9  g )Nr
  r   r   Fr  )r   r   r   r   r   r#  r   r   r   r   rg   r   rd   r   r   s    r%   test_protocol_tlsv1!ThreadedTests.test_protocol_tlsv1V  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                    [         R                  (       a  [        R                  R	                  S5        [        [        R                  [        R                  S5        [        S5      (       a)  [        [        R                  [        R                  S5        [        [        R                  [        R                  S[        R                  S9  [        [        R                  [        R                  S5        [        [        R                  [        R                  S5        [        [        R                  [        R                  S5        g )Nr
  TLSv1.1r   Fr  )r   r   r   r   r   r#  r   r   rg   r   rd   r   r  r   s    r%   test_protocol_tlsv1_1#ThreadedTests.test_protocol_tlsv1_1c  s     ??JJT"3//1E1EyQ7##s33S5G5GO3//1A1A5*-*;*;	= 	3++S-A-A9M3//1E1EuM3//1E1EuMr'   rp   c                 ,   [         R                  (       a  [        R                  R	                  S5        [        [        R                  [        R                  S[        R                  [        R                  -  [        R                  [        R                  -  S9  [        S5      (       a)  [        [        R                  [        R                  S5        [        [        R                  [        R                  S[        R                  S9  [        [        R                  [        R                  S5        [        [        R                  5      (       aR  [        [        R                  [        R                  S5        [        [        R                  [        R                  S5        [        [        R                   5      (       aS  [        [        R                  [        R                   S5        [        [        R                   [        R                  S5        g g )Nr
  TLSv1.2)r  r  r   Fr  )r   r   r   r   r   r#  r   r  r   r   rg   r   rd   r   rj   r   r   r   s    r%   test_protocol_tlsv1_2#ThreadedTests.test_protocol_tlsv1_2s  sA    ??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1s33S5I5I5Qs33S5I5I5Q 2r'   c                    Sn[        [        SSSS9nSnU   [        R                  " 5       nUR                  S5        UR	                  [
        UR                  45        [        R                  (       a  [        R                  R                  S5        U GH  n[        R                  (       a"  [        R                  R                  SU-  5        U(       a"  WR                  U5        UR                  5       nO"UR                  U5        UR                  S5      nUR                  5       R!                  5       nUS:X  a]  UR#                  S	5      (       aG  [        R                  (       a"  [        R                  R                  S
U-  5        [%        U5      nSnGM  US:X  ab  UR#                  S	5      (       aL  [        R                  (       a"  [        R                  R                  SU-  5        WR'                  5       nSnGMo  [        R                  (       d  GM  [        R                  R                  SU-  5        GM     [        R                  (       a  [        R                  R                  S5        U(       a  WR                  S5        OUR                  S5        U(       a  WR)                  5         OUR)                  5         S S S 5        g ! , (       d  f       g = f)N)s   msg 1s   MSG 2r  s   MSG 3s   msg 4r  s   msg 5s   msg 6T)r  rp  r  Fr
  r  rA  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
r	  r  )rD  r  r   r  r  r6  r=  r   r   r   r   r   rO   rz  rv  r  r/  r   r   r  r  )	r   msgsr<  wrappedr   r  r  r  r  s	            r%   test_starttlsThreadedTests.test_starttls  s   c#H48+/59; AMM$IItV[[)*

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

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

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

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

  !BC

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

	] VVs   H KB-K
K c                    [        U [        S9n[        R                  (       a  [        R
                  R                  S5        [        [        S5       nUR                  5       nS S S 5        SnSUR                   S3n[        R                  [        S9n[        R                  R!                  XVS9n UR#                  5       R%                  S	5      nU(       ak  ['        U5      S
:  a\  UR                  ['        U5      5      n[        R                  (       a-  [        R
                  R                  S[)        U5      U4-  5        UR+                  5         U R-                  WU5        g ! , (       d  f       GN
= f! UR+                  5         f = f)Nr  r
  rbrh  zhttps://localhost:z/test_ssl.pyr  rC  zcontent-lengthr   z/ client: read %d bytes from remote server '%s'
)r_  r   r   r   r   r   r   rN   r"   rO   r=  r   r  r   urllibrequesturlopeninfor   rV  rh   r  r   )r   r<  rQ   rF  rH  urlr   dlens           r%   test_socketserver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'3BE9 '
E69Fc           
         [         R                  (       a  [        R                  R	                  S5        Sn[        [        5      nU   [        [        R                  " 5       5      nUR                  SUR                  45        [         R                  (       a"  [        R                  R	                  SU-  5        UR	                  U5        UR                  5       n[         R                  (       a"  [        R                  R	                  SU-  5        XAR                  5       :w  a>  U R                  SUS S [        U5      US S R                  5       [        U5      4-  5        UR	                  S5        [         R                  (       a  [        R                  R	                  S	5        UR                  5         [         R                  (       a  [        R                  R	                  S
5        S S S 5        g ! , (       d  f       g = f)Nr
  r@  r8  r  r  r  r  r  r	  z client:  connection closed.
)r   r   r   r   r   r  r  r   r   r  r=  rO   r/  rB  rh   r  )r   r  r<  r   r  s        r%   test_asyncore_server"ThreadedTests.test_asyncore_server  sI   ??JJT"#H- 1AII{FKK01

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

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

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

  !AB) VVs   F%G66
Hc                 
  ^ [         R                  (       a  [        R                  R	                  S5        [        [        [        R                  [        R                  [        SSS9nU   [        [        R                  " 5       S[        [        [        R                  S9mTR                  [        UR                  45        U4S jnU4S jnSTR                  S/ [         4S	TR"                  SS
/[         4STR$                  S/ S 4/nSTR&                  S/ 4STR(                  SS
/4SUS/ 4SUS/ 4/nSnU H  u  pxpnXg-   R+                  S5      n U" U/U
Q76 nSR-                  U5      nU R/                  X" U5      US9  TR1                  5       nXR3                  5       :w  a;  U R5                  SR-                  XS S [!        U5      US S [!        U5      S95        M  M     U H  u  nnpXg-   R+                  S5      n TR                  U5        U" U
6 nXR3                  5       :w  a;  U R5                  SR-                  XS S [!        U5      US S [!        U5      S95        M  M     SnTR                  U5        [=        [!        U5      5      nU R/                  TR1                  SU5      [!        U5      5        U R/                  UU5        [>        b^  [>        R@                  [!        U5      -  nURC                  U5      nTR%                  U5        U R/                  TR1                  5       U5        U RE                  [F        TRH                  5        U RE                  [F        TRJ                  S/5        U RE                  [F        TRL                  S 5        U RE                  [F        TRN                  [=        S 5      /5        TR	                  S!5        U RE                  [6        TR&                  S5        U RE                  [6        TR0                  S5        TRQ                  5         S S S 5        g ! [6         av  nU	(       a  U R5                  SR-                  US95        [9        U5      R;                  U5      (       d&  U R5                  SR-                  UUS95         S nAGMi   S nAGMp  S nAff = f! [6         a  nU	(       a  U R5                  SR-                  US95        [9        U5      R;                  U5      (       d  U R5                  SR-                  UUS95        TR1                  5          S nAGMM  S nAff = f! , (       d  f       g = f)"Nr
  TFr  r  r  rp  r  r   r   r   r   c                  F   > [        S5      n TR                  U 5      nU S U $ Nsd                                                                                                       )r  rw  )br  r   s     r%   
_recv_into0ThreadedTests.test_recv_send.<locals>._recv_into  s&    i(A%y r'   c                  J   > [        S5      n TR                  U 5      u  pU S U $ r  )r  ry  )r  r  rf  r   s      r%   _recvfrom_into4ThreadedTests.test_recv_send.<locals>._recvfrom_into  s)    i(ooa0%y r'   rz  r{  zsome.addressr.  c                     g r]   r^   )r^  s    r%   <lambda>.ThreadedTests.test_recv_send.<locals>.<lambda>  s    4r'   rv  rx  rw  ry  PREFIX_asciizsending with {}r  zpWhile sending with <<{name:s}>> bad data <<{outdata:r}>> ({nout:d}) received; expected <<{indata:r}>> ({nin:d})
r  )r$   r  noutr  ninz>Failed to send with method <<{name:s}>>; expected to succeed.
r#   zFMethod <<{name:s}>> failed with unexpected exception message: {exp:s}
)r$   expzrWhile receiving with <<{name:s}>> bad data <<{outdata:r}>> ({nout:d}) received; expected <<{indata:r}>> ({nin:d})
zAFailed to receive with method <<{name:s}>>; expected to succeed.
ro  r  rt  r  ))r   r   r   r   r   rD  r  r   r   re   r   r   r  r6  r=  rz  rh   r{  r.  rv  rx  r  formatr   rO   r/  rB  r   rb   r   r  ctypesc_ubytefrom_buffer_copyr  r|  r}  r~  r  r  r  )r   r<  r  r  send_methodsrecv_methodsdata_prefix	meth_name	send_methr  ry   ret_val_methr  r1  r  r  r  	recv_methr  bufferubyte	bytesliker   s                         @r%   test_recv_sendThreadedTests.test_recv_send  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"~ %199'B#F2T2C+229=C$$S,v*>C$HffhG,,.0		BBH&%.%(\'-cr{F CI C 1 &2> ?K:	9n%199'BFF6N'.G,,.0		BBH&%.%(\'-cr{F CI C 1 ?K@ 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 Vf " %		55;VV5K q6,,Y77		;;A6%.A <B <  8: " %		55;VV5K q6,,Y77		;;A6%.A <B < FFHHa Vsf   *C)T=BP. "T=A"R1%G T=.
R.8A#R)T=)R..T=1
T:;A3T5.T=5T::T==
Uc                    [        [        5      nU R                  U5        [        R                  " [
        UR                  45      nU R                  UR                  5        [        USS9nU R                  UR                  5        UR                  S5        U R                  UR                  S5      S5        U R                  UR                  S5      S5        U R                  UR                  5       S5        UR                  S5        U R                  UR                  S5      S5        U R                  UR                  [!        5       5      S5        g )NFrn  ro  r   r'   )rD  r  r  r   r  r6  r=  r  r  r   rz  r   rv  rO   r  rw  r  )r   r<  r   s      r%   test_recv_zeroThreadedTests.test_recv_zero  s    #H-&!$$dFKK%89 QU;  	
wC(C(7+ 	
eC(Y[115r'   c                    [        [        5      nU R                  U5        [        R                  " [
        UR                  45      nU R                  UR                  5        [        USS9nU R                  UR                  5        UR                  S5        [        R                  " SSS/5      nU R                  UR                  U5      S5        U R                  [        U5      S S S5         " S S[        5      nUR                  S5        U" S	5      nU R                  UR                  U5      S5        U R                  [        U5      S
5        g )NFr  ro  Ir   rL  c                       \ rS rSrS rSrg);ThreadedTests.test_recv_into_buffer_protocol_len.<locals>.Bi  c                     SS-    g NrU   r   r^   r   s    r%   __len__CThreadedTests.test_recv_into_buffer_protocol_len.<locals>.B.__len__  s	    !r'   r^   N)r  rH  rI  rJ  r  rP  r^   r'   r%   Br    s    r'   r  r  s   data  )rD  r  r  r   r  r6  r=  r  r  r   rz  arrayr   rw  r  r  )r   r<  r   r2  r  s        r%   "test_recv_into_buffer_protocol_len0ThreadedTests.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           	      :  ^^ [        [        [        R                  [        R                  [        SSS9nU   [        [        R                  " 5       S[        [        [        R                  S9mTR                  [        UR                  45        TR                  S5        [        S5      mUU4S jnU R                  [        R                  [        R                  4U5        TR                  S5        TR                  5         S S S 5        g ! , (       d  f       g = f)NTFr  r  i    c                  ,   >  TR                  T 5        M  r]   )rz  )r2  r   s   r%   fill_buffer8ThreadedTests.test_nonblocking_send.<locals>.fill_buffer  s    FF3K r'   )rD  r  r   r   re   r   r   r  r6  r=  r  r  r  r  r  r  )r   r<  r  r2  r   s      @@r%   test_nonblocking_send#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) VVs   CD
Dc                   ^^^ [         R                   " [         R                  5      mSn[        R                  " T5      n[        R
                  " 5       mSmUUU4S jn[        R                  " US9nUR                  5         TR                  5           [         R                   " [         R                  5      nUR                  S5        UR                  X45        U R                  [        S[        U5        UR                  5          [         R                   " [         R                  5      n[        U5      nUR                  S5        U R                  [        SUR                  X45        UR                  5          SmUR                  5         TR                  5         g ! WR                  5         f = f! UR                  5         f = f! SmUR                  5         TR                  5         f = f)Nr8  Fc                  &  > TR                  5         TR                  5         / n T(       dN  [        R                  " T// / S5      u  pnTU;   a"  U R                  TR	                  5       S   5        T(       d  MN  U  H  nUR                  5         M     g )Nr  r   )r  r  r  r  r  r  )connsr=  wr  r   finishr<  starteds        r%   serve3ThreadedTests.test_handshake_timeout.<locals>.serve  ss    MMOKKME --"b#>aQ; LL!34 f 

 r'   r  r  z	timed outT)r   ri  r   r4  r  r  r   r  r  r  r  r   r  r   r  r    )	r   r  r=  r  r]  r  r  r<  r  s	         @@@r%   test_handshake_timeout$ThreadedTests.test_handshake_timeout  sZ   v~~.&&v.//#	 E*			MM&..1S!		4,'&&|['7< 	MM&..1$Q'S!&&|['(yy4,@ 	FFFHLLN 	 	FFFHLLNs8   A#F  8G
 	A#F5 ,G
  F22G
 5GG
 
$G.c                 P  ^
^^^ [        5       u  pn[        R                  " [        R                  5      mSn[        R                  " T5      nUR                  TSS9mU R                  TR                  5        [        R                  " 5       m
S mS mU
UUU4S jn[        R                  " US9nUR                  5         T
R                  5         UR                  [        R                  " 5       US9nUR                  X545        UR                  S5        UR                  5         UR!                  5       n	UR#                  5         UR%                  5         TR#                  5         TR#                  5         U R'                  T[(        R*                  5        U R-                  TU	5        g )Nr8  Trp  c                     > TR                  5         T R                  5         TR                  5       u  mmTR                  TR	                  S5      5        g )NrL  )r  r  r  rz  rv  )evtpeerremoter<  s   r%   r  /ThreadedTests.test_server_accept.<locals>.serve  s8    MMOGGI!==?LFDKKA'r'   r  r  ro  )r   r   ri  r   r4  r   rZ  r   r  r  r   r  r  r  rz  rv  r  r  r    rU  r   r   r   )r   r  r  r   r  r=  r  r]  r  client_addrr  r  r  r<  s             @@@@r%   test_server_accept ThreadedTests.test_server_accept  s@    ,;+<(
v~~.&&v.''D'A**+oo	( 	( E*		
''MMOX ( 
 	'(G((*	fcmm4{+r'   c                    [         R                  [         R                  5      nSUl        UR	                  [
        R
                  " 5       5       nU R                  [        5       nUR                  5         S S S 5        U R                  WR                  R                  [        R                  5        S S S 5        g ! , (       d  f       NK= f! , (       d  f       g = fr  )r   rq   rf   r   r   r   r  ru  r  r   r   r7  ENOTCONNr   r   r   r  s       r%   test_getpeercert_enotconn'ThreadedTests.test_getpeercert_enotconn  s    ..!8!89!&  1T""7+r  " ,R\\//@ 21++ 21$   C%B;6<C;
C		C
Cc                    [         R                  [         R                  5      nSUl        UR	                  [
        R
                  " 5       5       nU R                  [        5       nUR                  5         S S S 5        U R                  WR                  R                  [        R                  5        S S S 5        g ! , (       d  f       NK= f! , (       d  f       g = fr  )r   rq   rf   r   r   r   r  ru  r  r   r   r7  r  r  s       r%   test_do_handshake_enotconn(ThreadedTests.test_do_handshake_enotconn'  s    ..!8!89!&  1T""7+r!!# ,R\\//@ 21++ 21r  c                 >   [        5       u  pn[        R                  R                  Ul        UR                  S5        UR                  S5        [        US9 nUR                  [        R                  " 5       US9 nU R                  [        5         UR                  [        UR                  45        S S S 5        S S S 5        S S S 5        U R                  SWR                  S   5        g ! , (       d  f       N>= f! , (       d  f       NG= f! , (       d  f       NP= f)NAES128AES256rC  r  NO_SHARED_CIPHERr   )r   r   r   rp   rm   rX   rD  r   r   r  ru  r  r6  r=  r  rt  rE  s         r%   test_no_shared_ciphers$ThreadedTests.test_no_shared_ciphers/  s    3B3D0),)?)?&""8,""8,76++FMMO<D , FIJ&&w/IItV[[12 0F 8
 	(&*<*<Q*?@ 0/F F 87s<   $D<C="C,4C=<D,
C:6C==
D	D
Dc                    [         R                  [         R                  5      nSUl        [         R                  Ul        [        [        [         R                  SS9 nUR                  [        R                  " 5       5       nU R                  UR                  5       S 5        U R                  UR                  S 5        UR                  [        UR                   45        U R#                  UR                  5       S5        S S S 5        U R                  WR                  S 5        U R                  UR                  5       S 5        S S S 5        g ! , (       d  f       NS= f! , (       d  f       g = f)NF)r  rp  r6  )r   rq   rf   r   r   r   rD  r  re   r   r   r   r<   r%  r  r6  r=  r   )r   r   r<  r   s       r%   test_version_basic ThreadedTests.test_version_basic=  s    
 ..!8!89!&!mm,/,C,C',.17$$V]]_5aiik40aii.		4-.  i8	 6
 MM!))T*MM!))+t,. . 65. .s&   %EA>E AE
E	E
E,c                    [        5       u  pn[        R                  R                  Ul        [        US9 nUR                  [        R                  " 5       US9 nUR                  [        UR                  45        U R                  UR                  5       S   1 Sk5        U R                  UR                  5       S5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NrC  r  r   >   TLS_AES_128_GCM_SHA256TLS_AES_256_GCM_SHA384TLS_CHACHA20_POLY1305_SHA256r6  )r   r   r   r  rT   rD  r   r   r  r6  r=  r  r8  r   r<   rE  s         r%   test_tls1_3ThreadedTests.test_tls1_3P  s    3B3D0),)?)?&76++FMMO<D , FIJ		4-.ahhjm . 
   i8F 87F F 87s$   $C#A'CC#
C 	C##
C1c                 X   [        5       u  pn[        R                  R                  Ul        [        R                  R
                  Ul        [        R                  R
                  Ul        [        R                  R
                  Ul        [        US9 nUR                  [        R                  " 5       US9 nUR                  [        UR                  45        U R                  UR                  5       S5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NrC  r  r  )r   r   r   r   rT   rp   rm   rD  r   r   r  r6  r=  r   r<   rE  s         r%   test_min_max_version_tlsv1_2*ThreadedTests.test_min_max_version_tlsv1_2_  s     4C3D0),)=)=&),)?)?&),)?)?&),)?)?&76++FMMO<D , FIJ		4-.  i8F 87F F 87s%   $D7AD
9D

D	D
D)c                 n   [        5       u  pn[        R                  R                  Ul        [        R                  R
                  Ul        [        R                  R                  Ul        [        R                  R                  Ul        [        X5        [        US9 nUR                  [        R                  " 5       US9 nUR                  [        UR                  45        U R                  UR!                  5       S5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NrC  r  r  )r   r   r   r   rT   rp   rm   r   r[   rD  r   r   r  r6  r=  r   r<   rE  s         r%   test_min_max_version_tlsv1_1*ThreadedTests.test_min_max_version_tlsv1_1q  s     4C3D0),)=)=&),)?)?&),)=)=&),)?)?&N;76++FMMO<D , FIJ		4-.  i8F 87F F 87s%   $D&ADD&
D#	D&&
D4c                    [        5       u  pn[        R                  R                  Ul        [        R                  R                  Ul        [        R                  R                  Ul        [        R                  R                  Ul        [        X5        [        US9 nUR                  [        R                  " 5       US9 nU R                  [        R                  5       nUR                  [        UR                  45        S S S 5        U R!                  [#        WR$                  5      S5        S S S 5        S S S 5        g ! , (       d  f       ND= f! , (       d  f       N(= f! , (       d  f       g = f)NrC  r  z(alert|ALERT))r   r   r   rp   rm   rT   r   r[   rD  r   r   r  r   r  r6  r=  r  rb   r   rj  s          r%   test_min_max_version_mismatch+ThreadedTests.test_min_max_version_mismatch  s    4C3D0),)?)?&),)?)?&),)=)=&),)=)=&N;76++FMMO<D , FIJ&&s||4IItV[[12 5  Q[[!1?C	F 87 54F F 87s<   $E$ E""E-E1E$
EE
E!	E$$
E2c                 0   [        5       u  pn[        R                  R                  Ul        [        R                  R                  Ul        [        R                  R                  Ul        [        X5        [        US9 nUR                  [        R                  " 5       US9 nUR                  [        UR                  45        U R                  UR                  5       S5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NrC  r  r   )r   r   r   r   rT   rm   r[   rD  r   r   r  r6  r=  r   r<   rE  s         r%   test_min_max_version_sslv3(ThreadedTests.test_min_max_version_sslv3  s    3B3D0),)=)=&),)=)=&),)=)=&N;76++FMMO<D , FIJ		4-.  g6F 87F F 87s%   ?$D#AC6%D6
D	 D
Dc                    [        5       u  pn[        R                  R                  Ul        [        US9 nUR                  [        R                  " 5       US9 nUR                  [        UR                  45        U R                  SUR                  5       S   5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NrC  r  ECDHr   )r   r   r   rp   rm   rD  r   r   r  r6  r=  r  r8  rE  s         r%   test_default_ecdh_curve%ThreadedTests.test_default_ecdh_curve  s     4C3D0 *-)?)?&
  76++FMMO<D , FIJ		4-.fahhjm4F 87F F 87s$   $CAB0C0
B>	:C
Cr  r  c                    [         R                  (       a  [        R                  R	                  S5        [        5       u  pn[        R                  R                  Ul	        [        USSS9nU   UR                  [        R                  " 5       US9 nUR                  [        UR                  45        UR!                  S5      n[         R                  (       a.  [        R                  R	                  SR#                  U5      5        U R%                  U5        UR'                  5       S:X  a  U R)                  [+        U5      S	5        OU R)                  [+        U5      S
5        UR	                  S5        UR-                  5       R/                  5       nU R)                  U[1        U5      R3                  S5      5        S S S 5        UR                  [        R                  " 5       US9 nUR                  [        UR                  45        UR!                  S5      n[         R                  (       a.  [        R                  R	                  SR#                  U5      5        U R5                  WU5        U R%                  U5        UR'                  5       S:X  a  U R)                  [+        U5      S	5        OU R)                  [+        U5      S
5        UR	                  S5        UR-                  5       R/                  5       nU R)                  U[1        U5      R3                  S5      5        S S S 5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       N)= f! , (       d  f       g = f)Nr
  TFr  r  r  z! got channel binding data: {0!r}
r6  0      s   CB tls-unique
r  z(got another channel binding data: {0!r}
)r   r   r   r   r   r   r   r   rp   rm   rD  r   r   r  r6  r=  r  r  r:  r<   r   rh   rO   r  r   r  assertNotEqual)	r   r   r   r   r<  r   cb_datapeer_data_reprnew_cb_datas	            r%   r  -ThreadedTests.test_tls_unique_channel_binding  s    ??JJT"3B3D0 *-)?)?&#N+/5:< ++MMO$, , .12		4-.//=??JJ$$<CCGLN $$W-99;)+$$S\26$$S\26 *+!"!1  !%g!5!5j!AC).0  ++MMO$, , .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'.3 V. .0. .3 Vs>   .$MD+L6=+M(D=M%M6
M	 M
M	M
M'c                     [        5       u  pn[        XSSUS9n[        R                  (       a1  [        R
                  R                  SR                  US   5      5        U R                  US   1 Sk5        g )NTrp  r  r  z got compression: {!r}
r
  >   NRLEZLIB)	r   r  r   r   r   r   r   r  r  r   r   r   r   rP  s        r%   test_compressionThreadedTests.test_compression  sc    3B3D0">*.,46 ??JJ7>>u]?STUeM*,CDr'   rF   z*ssl.OP_NO_COMPRESSION needed for this testc                     [        5       u  pnU=R                  [        R                  -  sl        U=R                  [        R                  -  sl        [	        XSSUS9nU R                  US   S 5        g )NTr&  r
  )r   r  r   rF   r  r   r)  s        r%   test_compression_disabled'ThreadedTests.test_compression_disabled  si     4C3D0#"7"77#"7"77">*.,46 	eM*D1r'   c                 |    [        5       u  pnU=R                  [        R                  -  sl        [	        XSSUS9  g NTr&  r   r  r   rT  r  r   r   r   r   s       r%   test_legacy_server_connect(ThreadedTests.test_legacy_server_connect  s8    3B3D0#">">>>*.,4	6r'   c                 ~    [        5       u  pnU=R                  [        R                  ) -  sl        [	        XSSUS9  g r0  r1  r2  s       r%   test_no_legacy_server_connect+ThreadedTests.test_no_legacy_server_connect  s;    3B3D03#?#?"??>*.,4	6r'   c                 N   [        5       u  pn1 Skn[        X5      (       a  [        X$5      (       d  U R                  S5        [        R                  R
                  Ul         UR                  [        5        UR                  S5        [        R                  R
                  Ul        [        XSSUS9nUS   S   nUR                  S	5      nUR                  U5      (       d  U R                  S
US   -   5        g g ! [         a    [        (       a  U R                  S5        e f = f)N>   ADHDHEEDHz#libssl doesn't support ephemeral DHr
  kEDHTr&  r8  r   rM  zNon-DH key exchange: )r   r(  r0  r   r   rp   rm   r  r  r  r  rX   r  rR  ry  rB  )r   r   r   r   dhe_aliasesrP  r8  partss           r%   test_dh_paramsThreadedTests.test_dh_params  s    4C3D0+!.>>%nBBMM?@),)?)?&	))&1
 	""6*),)?)?&">*.,46 x#S!''..II-q	9: /  	~BC	s   #C< <(D$c           	         [        5       u  pnUR                  S5        UR                  S5        [        R                  R
                  Ul        [        XSSUS9n[        5       u  pnUR                  S5        UR                  S5        [        R                  R
                  Ul        [        XSSUS9n[        5       u  pnUR                  S5        UR                  S5        UR                  S5        [        R                  R
                  Ul        U R                  [        R                  5         [        XSSUS9  S S S 5        g ! , (       d  f       g = f)N	secp384r1zECDHE:!eNULL:!aNULLTr&  r&  )
r   r)  rX   r   r   rp   rT   r  r  r   r)  s        r%   test_ecdh_curveThreadedTests.test_ecdh_curve0  s"   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||,~&*T(02 -,,s   3E		
Ec                 `    [        5       u  pn[        XSSUS9nU R                  US   S 5        g )NTr&  r  )r   r  r   r)  s        r%   test_selected_alpn_protocol)ThreadedTests.test_selected_alpn_protocolO  s9    3B3D0">*.,46 	e23T:r'   c                     [        5       u  pnUR                  SS/5        [        XSSUS9nU R                  US   S 5        g )Nr'  barTr&  r  )r   r  r  r   r)  s        r%   /test_selected_alpn_protocol_if_server_uses_alpn=ThreadedTests.test_selected_alpn_protocol_if_server_uses_alpnW  sK    3B3D0))5%.9">*.,46 	e23T:r'   c           	         / SQnSS/S4SS/S4S/S4SS/S 4/nU H  u  p4[        5       u  pVnUR                  U5        UR                  U5         [        UUSSUS9nS	[        U5      < S
[        U5      < S[        U5      < S3n
US   nU R                  XXS4-  5        [        US   5      (       a  US   S   OSnU R                  XXS4-  5        M     g ! [        R                   a  n	U	n S n	A	NS n	A	ff = f)N)r'  rI  	milkshaker'  rI  rM  zhttp/3.0zhttp/4.0Tr&  zfailed trying z	 (s) and z (c).
was expecting z, but got %s from the %sr  r  r  r  nothingr<  )r   r  r  r   r   rb   r   rh   )r   server_protocolsprotocol_testsclient_protocolsr   r   r   r   rP  r  r  client_resultserver_results                r%   r2  !ThreadedTests.test_alpn_protocols`  sA   6U^U#U^U#]K(*%t,	
 +9&7F7H4NH--.>?--.>?*>+926<@4<	> +,c2B.CH'C ""89M] 8#<<> u4566 ""9:2><E ] 8#<<>/ +9 << s   CC;/C66C;c                     g r]   r^   r   s    r%   test_npn_protocols ThreadedTests.test_npn_protocols  s    r'   c                 Z   [         R                  [         R                  5      nUR                  [        5        [         R                  [         R                  5      nUR                  [
        5        [         R                  [         R                  5      nUR                  [        5        XU4$ r]   )	r   rq   re   r   r   r   rf   r   r   )r   r   other_contextr   s       r%   sni_contextsThreadedTests.sni_contexts  st    (?(?@&&7s'>'>?%%&67(?(?@,,Z8n<<r'   c                 >    US   nU R                  SU44US   5        g )Nr  r1   r:   )r  )r   rP  r$   r  s       r%   check_common_nameThreadedTests.check_common_name  s&    Z d+-tI?r'   c                   ^^ / mU R                  5       u  nmnSUl        UU4S jnUR                  U5        [        X!SSS9nU R	                  TSU4/5        U R                  US5        / m[        X!SS S9nU R	                  TS U4/5        U R                  U[        5        / mUR                  S 5        [        X!SSS9nU R                  U[        5        U R	                  T/ 5        g )NFc                 @   > TR                  X45        Ub  TU l        g g r]   )r  r   )r  r  r  callsrY  s      r%   r  6ThreadedTests.test_sni_callback.<locals>.servername_cb  s%    LL+78&#0  'r'   Tsupermessagerp  r  rB   notfunny)rZ  r   r2  r  r   r]  r   )r   r   r   r  rP  ra  rY  s        @@r%   r3  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                 &   U R                  5       u  pnS nUR                  U5        U R                  [        R                  5       n[        X1SSS9nS S S 5        U R                  WR                  R                  S5        g ! , (       d  f       N5= f)Nc                 "    [         R                  $ r]   )r   ALERT_DESCRIPTION_ACCESS_DENIEDr  s      r%   cb_returning_alertAThreadedTests.test_sni_callback_alert.<locals>.cb_returning_alert  s    666r'   Frc  rd  TLSV1_ALERT_ACCESS_DENIED)	rZ  r2  r  r   r   r  r   r   r  )r   r   rY  r   rj  r  rP  s          r%   test_sni_callback_alert%ThreadedTests.test_sni_callback_alert  s{    8<8I8I8K5~	7../ABs||,&~.30>@E - 	,,.IJ	 -,s   B
Bc           	         U R                  5       u  pnS nUR                  U5        [        R                  " 5        nU R	                  [
        R                  5       n[        X1SSS9nS S S 5        SnU R                  WR                  R                  U5        U R                  UR                  R                  [        5        S S S 5        g ! , (       d  f       Ni= f! , (       d  f       g = f)Nc                     SS-    g r  r^   r  s      r%   
cb_raising;ThreadedTests.test_sni_callback_raising.<locals>.cb_raising  s	    aCr'   Frc  rd  z0(SSLV3_ALERT_HANDSHAKE_FAILURE|NO_PRIVATE_VALUE))rZ  r2  r   catch_unraisable_exceptionr  r   r   r  r  r   r  r   
unraisableexc_typeZeroDivisionError)	r   r   rY  r   rq  catchr  rP  r  s	            r%   test_sni_callback_raising'ThreadedTests.test_sni_callback_raising  s    8<8I8I8K5~	..z://1U""3<<0B*>274BD 1 GER\\00%8U--668IJ 2100 21s$    CC)AC
C	C
C+c           	         U R                  5       u  pnS nUR                  U5        [        R                  " 5        nU R	                  [
        R                  5       n[        X1SSS9nS S S 5        U R                  WR                  R                  S5        U R                  UR                  R                  [        5        S S S 5        g ! , (       d  f       Ng= f! , (       d  f       g = f)Nc                     g)Nr'  r^   r  s      r%   cb_wrong_return_typeOThreadedTests.test_sni_callback_wrong_return_type.<locals>.cb_wrong_return_type  s    r'   Frc  rd  TLSV1_ALERT_INTERNAL_ERROR)rZ  r2  r   rs  r  r   r   r  r   r   r  rt  ru  r   )r   r   rY  r   r|  rw  r  rP  s           r%   #test_sni_callback_wrong_return_type1ThreadedTests.test_sni_callback_wrong_return_type  s     9=8I8I8K5~	../CD//1U""3<<0B*>274BD 1 R\\002NOU--66	B 2100 21s$    CC
)AC

C	C
C)c                 8  ^	 [        5       u  pnUR                  S5        UR                  S5        / SQn[        XUS9nUS   S   nU R                  [	        U5      S5        U H3  u  m	px[        U	4S jU 5       5      (       a  M"  U R                  T	5        M5     g )NzAES128:AES256zAES256:eNULL)r   zAES-256TLS_CHACHA20TLS_AESr  r  r   c              3   ,   >#    U  H	  oT;   v   M     g 7fr]   r^   )rn  algr$   s     r%   ro  4ThreadedTests.test_shared_ciphers.<locals>.<genexpr>  s     <msd{ms   )r   rX   r  assertGreaterrh   anyrB  )
r   r   r   r   expected_algsrP  r   tls_versionbitsr$   s
            @r%   test_shared_ciphers!ThreadedTests.test_shared_ciphers  s    3B3D0""?3"">2
 #>,46/033w<+'.#D+<m<<<		$ (/r'   c                    [        5       u  pn[        USS9nU   UR                  [        R                  " 5       US9nUR	                  [
        UR                  45        UR                  5         U R                  [        UR                  S5        U R                  [        UR                  S5        S S S 5        g ! , (       d  f       g = f)NFr<  r  rA  s   hello)r   rD  r   r   r  r6  r=  r  r  r   rO   r   rE  s         r%   ,test_read_write_after_close_raises_valuerror:ThreadedTests.test_read_write_after_close_raises_valuerror  s    3B3D0#N5I**6==?;C + EAIItV[[)*GGIj!&&$7j!''8< VVs   BB::
Cc                    Sn[        [        R                  S5       nUR                  U5        S S S 5        U R	                  [        R
                  [        R                  5        [        5       u  p4n[        USS9nU   UR                  [        R                  " 5       US9 nUR                  [        UR                  45        [        [        R                  S5       nUR                  U5        U R                  UR                  S5      U5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       N1= f! , (       d  f       N:= f! , (       d  f       g = f)Ns   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwbFr<  r  r  rA  )rN   r   TESTFNr   r  unlinkr   rD  r   r   r  r6  r=  sendfiler   rv  )	r   	TEST_DATArQ   r   r   r   r<  r   files	            r%   test_sendfileThreadedTests.test_sendfile  s   	)""D)QGGI *	(()*:*:;3B3D0#N5I++FMMO<D , FIJ		4-.)**D1TJJt$$$QVVD\9= 2F V *) 21F F VsG   D*>$E"<E3D<EE*
D9<
E
E
E	E
E,c                    [        5       u  pn[        R                  R                  Ul        [        XUS9nUS   nU R                  UR                  5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  5        U R                  UR                  S5        U R                  US   5        UR                  5       nU R                  US   S5        U R                  US   S5        [        XXSS9nUR                  5       nU R                  US   S	5        U R                  US   S5        U R                  US   5        US   nU R                  UR                  UR                  5        U R                  Xu5        U R!                  Xu5        U R#                  UR                  UR                  5        U R#                  UR                  UR                  5        [        XUS9nU R                  US   5        US   nU R%                  UR                  UR                  5        U R%                  X5        UR                  5       nU R                  US   S
5        U R                  US   S5        [        XXSS9nU R                  US   5        US   n	U R                  U	R                  UR                  5        U R                  X5        U R#                  U	R                  UR                  5        U R#                  U	R                  UR                  5        UR                  5       nU R                  US   S5        U R                  US   S	5        g )Nr  r  r   r  r  rU   r  )r  r  r  r   rL  )r   r   r   rp   rm   r  rZ  idr  r   r  
has_ticketticket_lifetime_hintr  r  r   assertIsNotr   r   )
r   r   r   r   rP  r  	sess_statsession2session3session4s
             r%   test_sessionThreadedTests.test_session  s   3B3D0),)?)?& #>,46	"

#7<<+7??A.**+777;/01"002	8,a06*A. #>+2G"002	8,a06*A../0#gjj1++w||< 0 0'//B #>,46/01#HKK4H."002	8,a06*A. #>+2G./0#gjj1+w||< 0 0'//B"002	8,a06*A.r'   c                    [        5       u  pn[        5       u  n  n[        R                  R                  Ul        [        R                  R                  Ul        [        USS9nU   UR                  [        R                  " 5       US9 nU R                  UR                  S 5        U R                  UR                  S 5        UR                  [        UR                  45        UR                  nU R                  U5        U R                  [         5       n	["        Ul	        S S S 5        U R                  [%        W	R&                  5      S5        S S S 5        UR                  [        R                  " 5       US9 nUR                  [        UR                  45        U R                  [(        5       n	WUl	        S S S 5        U R                  [%        W	R&                  5      S5        S S S 5        UR                  [        R                  " 5       US9 nWUl	        UR                  [        UR                  45        U R                  UR                  R*                  UR*                  5        U R                  UR                  U5        U R                  UR                  S5        S S S 5        UR                  [        R                  " 5       US9 nU R                  [(        5       n	WUl	        UR                  [        UR                  45        S S S 5        U R                  [%        W	R&                  5      S5        S S S 5        S S S 5        g ! , (       d  f       GN/= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)NFr<  r  zValue is not a SSLSession.z#Cannot set session after handshake.Tz)Session refers to a different SSLContext.)r   r   r   rp   rm   rD  r   r   r   r  r  r  r6  r=  rZ  r  r   r  rb   r   r   r  )
r   r   r   r   client_context2r  r<  r   r  r  s
             r%   test_session_handling#ThreadedTests.test_session_handlingT  s   3B3D0 / 1A *-)?)?&*-..*@*@'#N5I++FMMO<D , FIJ  D1  !1!148		4-.))(&&y1Q &AI 2  Q[[!13OPF  ++FMMO<D , FIJ		4-.&&z2a 'AI 3  Q[[!1!FHF  ++FMMO<D , FIJ $			4-.  wzz:  G4  !1!148F !,,V]]_=E - GJK&&z2a 'AIIItV[[12 3   Q[[!1!LNGA V 21F F  32	F FF F 32G GA Vs   &$O
BMM
"-M+O:7N 1M.9-N &+OBN"+ON4#)N#-N49O

MM
M+	&O.
M=8N  
N	
O
N 	O#
N1-N44
O	>O
Oz&TLS-PSK disabled on this OpenSSL buildc                   ^ ^^^	^
 [         R                  S5      m
[        R                  [        R                  5      nSUl        [        R                  Ul        [        R                  R                  Ul
        UR                  S5        UR                  U
4S j5        [        R                  [        R                  5      n[        R                  R                  Ul
        UR                  S5        UR                  U
4S j5        [        US9nU   UR!                  ["        R"                  " 5       5       nUR%                  [&        UR(                  45        S S S 5        S S S 5        [         R                  S5      m	UR                  U	4S j5        [        US9nU   UR!                  ["        R"                  " 5       5       nT R+                  [        R,                  5         UR%                  [&        UR(                  45        S S S 5        S S S 5        S S S 5        S	mS
mUUU
U 4S jnUU
U 4S jnUR                  U5        UR                  UT5        [        US9nU   UR!                  ["        R"                  " 5       5       nUR%                  [&        UR(                  45        S S S 5        S S S 5        T R/                  [        R,                  S5         UR                  UT5        S S S 5        T R/                  [        R,                  S5         UR                  U5        S S S 5        SmSmUR                  U5        UR                  UT5        [        US9nU   UR!                  ["        R"                  " 5       5       nUR%                  [&        UR(                  45        S S S 5        S S S 5        g ! , (       d  f       GNd= f! , (       d  f       GNn= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNp= f! , (       d  f       GNz= f! , (       d  f       GNQ= f! , (       d  f       GN)= f! , (       d  f       N= f! , (       d  f       g = f)NdeadbeefFra  c                    > S T4$ r]   r^   )hintpsks    r%   r  (ThreadedTests.test_psk.<locals>.<lambda>  s	    T3Kr'   c                    > T$ r]   r^   )identityr  s    r%   r  r    s    r'   rC  cafebabec                    > S T4$ r]   r^   )r  incorrect_psks    r%   r  r    s
    T=<Qr'   identity-hintclient-identityc                 0   > TR                  U T5        TT4$ r]   r   )r  client_identityidentity_hintr  r   s    r%   client_callback/ThreadedTests.test_psk.<locals>.client_callback  s    T=1"C''r'   c                 ,   > TR                  U T5        T$ r]   r  r  r  r  r   s    r%   server_callback/ThreadedTests.test_psk.<locals>.server_callback      X7Jr'   zCannot add PSK server callbackzCannot add PSK client callbacku   身份暗示u   客户身份)r  fromhexr   rq   rf   r   r   r   r   rp   rm   rX   set_psk_client_callbackre   set_psk_server_callbackrD  r   r   r  r6  r=  r  r   r   )r   r   r   r<  r   r  r  r  r  r  r  s   `      @@@@r%   test_pskThreadedTests.test_psk  s	    mmJ'(?(?@(-%%(]]"),)?)?&""5)../GH(?(?@),)?)?&""5)../CD $N;++FMMO<		4-. = 
 j1../QR#N;++FMMO<&&s||4IItV[[12 5 =  (+	( 	(	 	..?..N#N;++FMMO<		4-. = 
 ##CLL2RS22?MR T##CLL2RS22?C T '(..?..N#N;++FMMO<		4-. = VY =< V 54 =< V* =< V
 TSSS =< Vs   %O7"N6O%O> O,#"OO,O> %P""P'P"P4Q%Q)"Q%Q)6
O	 O
O
O)$O,,
O;	6O>>
P
P	P""
P14
Q
Q
Q&	"Q))
Q7c                 ,  ^ ^^	 [         R                  S5      m	SnSmUU	U 4S jnUU	U 4S jn[        R                  [        R                  5      nSUl        [        R                  Ul        [        R                  R                  Ul
        UR                  S5        UR                  U5        [        R                  [        R                  5      n[        R                  R                  Ul
        UR                  S5        UR                  X15        [        US9nU   UR!                  ["        R"                  " 5       5       nUR%                  [&        UR(                  45        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)	Nr  r  r  c                 .   > TR                  U 5        TT4$ r]   )r  )r  r  r  r   s    r%   r  6ThreadedTests.test_psk_tls1_3.<locals>.client_callback  s    d#"C''r'   c                 ,   > TR                  U T5        T$ r]   r  r  s    r%   r  6ThreadedTests.test_psk_tls1_3.<locals>.server_callback  r  r'   Fra  rC  )r  r  r   rq   rf   r   r   r   r   r  rT   rX   r  re   r  rD  r   r   r  r6  r=  )
r   r  r  r  r   r   r<  r   r  r  s
   `       @@r%   test_psk_tls1_3ThreadedTests.test_psk_tls1_3  s    mmJ''+	(
	 (?(?@(-%%(]]"),)?)?&""5)..?(?(?@),)?)?&""5)..N#N;++FMMO<		4-. = V<< Vs$   %F"E4#F4
F	>F
Fc           	      R  ^ ^	^
 Sm	[         R                  " 5       m
U	U
U 4S jn[        5       u  p#n[        US9nU   UR	                  [
        R
                  " 5       US9 nUR                  [        UR                  45        UR                  S5        UR                  S5        UR                  S5        T R                  UR                  S5      S5        [        R                  " 5        n[         R                   " UU4SS	9nUR#                  5         T
R%                  5         UR                  T	5        UR'                  5         UR(                  b  UR(                  e S S S 5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g = f)
Ns   1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111c                 ~   > TR                  5         U R                  [        T5      5      nTR                  UT5        g r]   )r  rv  rh   r   )r   receivedr  eventr   s     r%   
backgroundJThreadedTests.test_thread_recv_while_main_thread_sends.<locals>.background  s.    IIKyyT+HXt,r'   rC  r  rU   s   123r   T)r  ry   ri  )r  r  r   rD  r   r   r  r6  r=  r  r  r.  r   rv  r	   r  r   r  r  r    r  )r   r  r   r   r   r<  r   r  r1  r  r  s   `        @@r%   (test_thread_recv_while_main_thread_sends6ThreadedTests.test_thread_recv_while_main_thread_sends  sG    !	-
 4C3D0#N;++FMMO<D , FIMdFKK01"  #V$  1v6%??AR&--Z4874IFLLNJJLLL&KKM||/ ll* 0 BF V BAF F Vs=   $FBF*A2E6F%F6
F F
F	F
F&r^   N)T)Qr  rH  rI  rJ  r   rY  r,  rw   rL  Py_GIL_DISABLEDr9  r3  r4  rb  r   r  r  rT  ro   rZ  r]  r6  r7  r   r8  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  rM  r  r*  rV   r-  r3  r6  r?  rC  rF  rJ  r2  rV  rZ  r]  r3  rm  rx  r  r  r  r  r  r  HAS_PSKr  r  r  rP  r^   r'   r%   r*  r*    s   z**" +*"X 002^_&* `&*P"/H+EZ#2J '')T33*@* )MOEOE<@4N`#EJ )$ %8'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" )B)BBEG<GG<G|E &9:EG2G266;42>;; >D=@&$PKK&C& $=>7/r0Nd )$&NO@/ P %@/D )$&NO/ P %/>"+r'   r*  r  zTest needs TLS 1.3c                   \    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rSrg)TestPostHandshakeAuthi  c                    [         R                  [         R                  /nU GHb  n[         R                  U5      nU R	                  UR
                  S5        SUl        U R	                  UR
                  S5        [         R                  Ul        U R	                  UR                  [         R                  5        U R	                  UR
                  S5        SUl        U R	                  UR                  [         R                  5        U R	                  UR
                  S5        [         R                  Ul        SUl        U R	                  UR                  [         R                  5        U R	                  UR
                  S5        GMe     g rd  )	r   re   rf   rq   r   post_handshake_authr   r   r   )r   r  ri   rZ   s       r%   test_pha_setter%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                    [        5       u  pnSUl        [        R                  Ul        SUl        UR                  [        5        [        USS9nU   UR                  [        R                  " 5       US9 nUR                  [        UR                  45        UR                  S5        U R                  UR                  S5      S5        UR                  S5        U R                  UR                  S5      S	5        UR                  S5        U R                  UR                  S5      S
5        UR                  S5        U R                  UR                  S5      S	5        UR                  S5        UR                  S5      R!                  S5      nU R#                  SU5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NTFr<  r  r  rA  r  r  r  r  r  i   r  r=   )r   r  r   r   r   r   r   rD  r   r   r  r6  r=  r   r   rv  decoder  )r   r   r   r   r<  r   	cert_texts          r%   test_pha_required'TestPostHandshakeAuth.test_pha_required*  sd   3B3D0-1*%(%6%6"-1*&&7#N5I++FMMO<D , FIJ		4-.
#  z:  w7
#  y9  w7
#FF4L//
;	=yIF VF F Vs%   $G6D-F4#G4
G	>G
Gc                    [        5       u  pnSUl        [        R                  Ul        SUl        S nXBl        XAl        [        USS9nU   UR                  [        R                  " 5       USS9 nUR                  [        UR                  45        UR                  S5        U R                  [        S5         UR                  S5      nU R!                  US	5        UR                  S
5        UR                  S5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g = f)NTc                     [         R                  (       a?  U[        R                  :X  a*  XX#XE4n[        R
                  R                  SU< S35        g g g )NzTLS: r
  )r   r   r   ALERTr   r   r   )r  	directionr<   content_typemsg_typer  r  s          r%   msg_cb>TestPostHandshakeAuth.test_pha_required_nocert.<locals>.msg_cbI  sE    <?3H3H#HO

  5!34 $Ir'   r<  Frm  r  z`certificate required|EOF occurred|closed by the remote host|Connection reset by peer|Broken piperA  r  r  )r   r  r   r   r   _msg_callbackrD  r   r   r  r6  r=  r   r   ru  rv  r   )r   r   r   r   r  r<  r   r  s           r%   test_pha_required_nocert.TestPostHandshakeAuth.test_pha_required_nocertC  s   3B3D0-1*%(%6%6"-1*	5
 (.$'-$#N4H++FMMO<DAF , HKL		4-. ++$ 66$<D$$T73 GGJ' FF4L!H V H H Vs>   %D;1A	D*:AD D*D;
D'#D**
D8	4D;;
E	c                 T   [         R                  (       a  [        R                  R	                  S5        [        5       u  pnSUl        [        R                  Ul	        SUl        UR                  [        5        [        R                  Ul	        [        USS9nU   UR                  [        R                  " 5       US9 nUR!                  ["        UR$                  45        UR	                  S5        U R'                  UR)                  S5      S5        UR	                  S	5        U R'                  UR)                  S5      S
5        UR	                  S5        U R'                  UR)                  S5      S5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr
  TFr<  r  r  rA  r  r  r  r  )r   r   r   r   r   r   r  r   r   r   r   r   r   rD  r   r   r  r6  r=  r   rv  rE  s         r%   test_pha_optional'TestPostHandshakeAuth.test_pha_optionall  s7   ??JJT"3B3D0-1*%(%6%6"-1*&&7 &)%6%6"#N5I++FMMO<D , FIJ		4-.
#  z:  w7
#  y9F VF F Vs%   $F?B8F7F
F	F
F'c                     [         R                  (       a  [        R                  R	                  S5        [        5       u  pnSUl        [        R                  Ul	        SUl        [        USS9nU   UR                  [        R                  " 5       US9 nUR                  [        UR                  45        UR	                  S5        U R!                  UR#                  S5      S5        UR	                  S	5        U R!                  UR#                  S5      S
5        UR	                  S5        U R!                  UR#                  S5      S5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr
  TFr<  r  r  rA  r  r  r  )r   r   r   r   r   r   r  r   r   r   rD  r   r   r  r6  r=  r   rv  rE  s         r%   test_pha_optional_nocert.TestPostHandshakeAuth.test_pha_optional_nocert  s   ??JJT"3B3D0-1*%(%6%6"-1*#N5I++FMMO<D , FIJ		4-.
#  z:  w7
#  z:F VF F Vs%   1$E/B8EE/
E,	(E//
E=c                    [        5       u  pnSUl        [        R                  Ul        UR                  [        5        [        USS9nU   UR                  [        R                  " 5       US9 nUR                  [        UR                  45        U R                  [        R                  S5         UR                  5         S S S 5        UR!                  S5        U R#                  SUR%                  S5      5        S S S 5        S S S 5        g ! , (       d  f       NQ= f! , (       d  f       N(= f! , (       d  f       g = f)	NTFr<  r  z
not serverr  s   extension not receivedrA  )r   r  r   r   r   r   r   rD  r   r   r  r6  r=  r   r   r  r   r  rv  rE  s         r%   test_pha_no_pha_client,TestPostHandshakeAuth.test_pha_no_pha_client  s    3B3D0-1*%(%6%6"&&7#N5I++FMMO<D , FIJ		4-.++CLL,G224 H7FF V HGF F Vs=   $D//AD1D:D<D/
DD
D,	(D//
D=c                    [        5       u  pn[        R                  Ul        SUl        UR                  [        5        [        USS9nU   UR                  [        R                  " 5       US9 nUR                  [        UR                  45        UR                  S5        U R                  UR                  S5      S5        UR                  S5        U R                  UR                  S5      S	5        UR                  S5        U R                  UR                  S5      S5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)
NTFr<  r  r  rA  r  r  r  )r   r   r   r   r  r   r   rD  r   r   r  r6  r=  r   r   rv  rE  s         r%   test_pha_no_pha_server,TestPostHandshakeAuth.test_pha_no_pha_server  s   3B3D0%(%6%6"-1*&&7#N5I++FMMO<D , FIJ		4-.
#  y9  w7
#  y9F VF F Vs%   $E	/B8D8'E	8
E	E		
Ec                 *   [        5       u  pn[        R                  Ul        [        R                  R
                  Ul        SUl        UR                  [        5        [        USS9nU   UR                  [        R                  " 5       US9 nUR                  [        UR                  45        UR!                  S5        U R#                  SUR%                  S5      5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NTFr<  r  r  s   WRONG_SSL_VERSIONrA  )r   r   r   r   r   rp   rm   r  r   r   rD  r   r   r  r6  r=  r   r  rv  rE  s         r%   test_pha_not_tls13(TestPostHandshakeAuth.test_pha_not_tls13  s    3B3D0%(%6%6"),)?)?&-1*&&7#N5I++FMMO<D , FIJ		4-.2AFF4LAF VF F Vs%   *$DAC3"D3
D	=D
Dc                    [         n[        R                  [        R                  5      nSUl        UR                  [        5        SUl        [        R                  Ul	        [        R                  [        R                  5      nUR                  [        5        UR                  [        5        SUl        [        R                  Ul	        [        USS9nU   UR                  [         R                   " 5       US9 nUR#                  [$        UR&                  45        UR)                  S5        U R+                  UR-                  S5      S5        UR)                  S5        U R+                  UR-                  S5      S	5        UR)                  S5        U R+                  UR-                  S5      S
5        U R+                  UR/                  5       0 5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NTFr<  r  r  rA  r  r  r  r  )r   r   rq   rf   r  r   r   r   r   r   re   r   r   r   rD  r   r   r  r6  r=  r   r   rv  r  )r   r   r   r   r<  r   s         r%   test_bpo37428_pha_cert_none1TestPostHandshakeAuth.test_bpo37428_pha_cert_none  sv    ,(?(?@-1*&&7(-%%(]]"(?(?@&&7,,Z8-1*%(%6%6"#N5I++FMMO<D , FIJ		4-.
#  z:  w7
#  y9  "5F VF F Vs%   $G5;CG$G5$
G2	.G55
Hc           	         [        SS9u  pn[        USS9nU   UR                  [        R                  " 5       US9 nUR	                  [
        UR                  45        UR                  R                  5       nU R                  [        U5      S5        Uu  pxUR                  R                  5       n	U R                  [        U	5      S5        U R                  XyS   5        U R                  [        U5      [        U	S   5      5        U R                  [        U5      [        U	S   5      5        U R                  Xx5        U R                  [        U5      [        U5      5        U R                  [        U5      [        U5      5        U R                  UR                  5       UR                  5       5        U R!                  S[        U5      5        U R!                  S	[        U5      5        UR#                  [$        R&                  5      n
UR#                  [$        R(                  5      nU R+                  U
[,        5        U R!                  S
U
5        U R+                  U[.        5        U R                  [0        R3                  U
5      U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NFr   r<  r  r  rU   r   zCN=localhostzCN=our-ca-serverz-----BEGIN CERTIFICATE-----)r   rD  r   r   r  r6  r=  r%  r  r   rh   r  hashr   r   get_infor  public_bytesr   ENCODING_PEMENCODING_DERrU  rb   r  r   r?  )r   r   r   r   r<  r   vceecauvcrE  rE  s               r%   test_internal_chain_client0TestPostHandshakeAuth.test_internal_chain_client  s   3B4
0 $N5I++ ( ,  		4-.YY113  R!,ii446  S1-  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 V  Vs#   $J/IJJ/
J,	(J//
J=c                 (   [        SS9u  pn[        USS9n[        [        5       n[        R                  UR                  5       5      nS S S 5        [        [        5       n[        R                  UR                  5       5      nS S S 5        U   UR                  [        R                  " 5       US9 nUR                  [        UR                  45        UR                  5       n	U R                  [        U	5      S5        U	u  pU R!                  U
["        5        U R!                  U["        5        U R                  WU5        U R                  WU
5        UR%                  5       nU R                  [        U5      S5        U R!                  US   ["        5        U R                  XS   5        U R'                  X5        S S S 5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       GNb= f! , (       d  f       N;= f! , (       d  f       g = f)NFr   r<  r  r  rU   r   )r   rD  rN   r   r   r?  rO   SINGED_CERTFILE_ONLYr   r   r  r6  r=  r  r   rh   rU  r  r  r   )r   r   r   r   r<  rQ   expected_ca_certexpected_ee_certr   r  r  r  r	  s                r%   test_certificate_chain,TestPostHandshakeAuth.test_certificate_chain  s   3B4
0 $N5I*"77A  &'1"77A ( ++ ( ,  		4-.))+  R!,%%b%0%%b%0  !126  !126,,.  S1-%%c!fe4  V,##B+' V  ('  Vs<   $G!$G $H3D
G2=H
G 
G/2
H 	<H
Hc                    [        5       u  pnUR                  [        5        [        R                  Ul        [        R                  R                  Ul        [        USS9nU   UR                  [        R                  " 5       US9 nUR                  [        UR                  45        UR                  S5        UR!                  S5      nU R#                  US5        UR                  S5        UR!                  S5      nU R#                  US5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NFr<  r  s   VERIFIEDCHAIN
rA  s   
s   UNVERIFIEDCHAIN
)r   r   r   r   r   r   r   rp   rm   rD  r   r   r  r6  r=  r   rv  r   )r   r   r   r   r<  r   ress          r%   test_internal_chain_server0TestPostHandshakeAuth.test_internal_chain_server5  s    3B3D0&&7%(%6%6"),)?)?&#N5I++ ( ,  		4-.*+ffTl  i0,-ffTl  i0 V  Vs%   #$D3B
D"D3"
D0	,D33
Er^   N)r  rH  rI  rJ  r  r  r  r  r  r  r  r  r  r
  r  r  rP  r^   r'   r%   r  r    sD    <0J2'!R:0;,G :(B"6>#J ,D1r'   r  keylog_filenamez0test requires OpenSSL 1.1.1 with keylog callbackc                       \ rS rSr\R
                  4S jr\S 5       r\S 5       r	\\
R                  " \R                  R                  S5      S 5       5       rS rS rS	 rS
rg)TestSSLDebugiN  c                 v    [        U5       n[        [        U5      5      sS S S 5        $ ! , (       d  f       g = fr]   )rN   rh   r  )r   fnamerQ   s      r%   keylog_linesTestSSLDebug.keylog_linesP  s     %[AtAw< [[s   *
8c                    U R                  [        R                  [        R                  5        [        R                  [        R                  5      nU R                  UR                  S 5        U R                  [        R                  R                  [        R                  5      5         [        R                  Ul        U R                  UR                  [        R                  5        U R!                  [        R                  R                  [        R                  5      5        U R                  U R#                  5       S5        S Ul        U R                  UR                  S 5        U R%                  [&        [(        45         [        R                  R+                  [        R                  R-                  [        R                  5      5      Ul        S S S 5        U R%                  [.        5         SUl        S S S 5        g ! [         a    [        (       a  U R                  S5        e f = f! , (       d  f       N_= f! , (       d  f       g = f)Nr
  rU   )r  r   r  r  r   rq   rf   r   r  r  r   r   isfiler  r  r0  rZ  r  r  IsADirectoryErrorPermissionErrorr!   abspathr   r]  s     r%   test_keylog_defaults!TestSSLDebug.test_keylog_defaultsT  s   	(()*:*:;nnS445,,d3	(8(89:	"+"2"2C
 	,,i.>.>?y'7'789**,a0",,d3 1?CD"$''//	 0 01#3C E
 y)"#C *)!  	~BC	 ED
 *)s%   +H AH-1H>(H*-
H;>
Ic                    U R                  [        R                  [        R                  5        [	        5       u  pn [        R                  Ul        [        USS9nU   UR                  [        R                  " 5       US9 nUR                  [        UR                  45        S S S 5        S S S 5        U R                  U R!                  5       S5        S Ul        [        R                  Ul        [        USS9nU   UR                  [        R                  " 5       US9 nUR                  [        UR                  45        S S S 5        S S S 5        U R#                  U R!                  5       S5        [        R                  Ul        [        R                  Ul        [        USS9nU   UR                  [        R                  " 5       US9 nUR                  [        UR                  45        S S S 5        S S S 5        U R#                  U R!                  5       S5        S Ul        S Ul        g ! [         a    [        (       a  U R                  S5        e f = f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNA= f! , (       d  f       GNK= f! , (       d  f       N= f! , (       d  f       N= f)Nr
  Fr<  r  r        )r  r   r  r  r   r  r  r  r0  rD  r   r   r  r6  r=  r   r  r   rE  s         r%   test_keylog_filename!TestSSLDebug.test_keylog_filenamep  s*   	(()*:*:;3B3D0	-6-=-=N* $N5I++FMMO<D , FIJ		4-.F 
 	**,a0)-&)2)9)9&#N5I++FMMO<D , FIJ		4-.F  	 1 1 3R8)2)9)9&)2)9)9&#N5I++FMMO<D , FIJ		4-.F  	 1 1 3R8)-&)-&A  	~BC	F F VF F VF F Vsw   H- $I*"I$I*<$J "I<J($J1"J .J1-(I
I'	"I**
I9<
J	J
J 
J.	*J11
J?z.test is not compatible with ignore_environmentc                 t   U R                  [        R                  [        R                  5        [        R
                  R                  R                  [        R                  5         [        R                  [        R                  S'   U R                  [        R                  S   [        R                  5        [        R                  [        R                  5      nU R                  UR                  S 5         [        R                  5       nU R                  UR                  [        R                  5        [        R'                  5       nU R                  UR                  [        R                  5        S S S 5        g ! [          a    ["        (       a  U R%                  S5        e f = f! , (       d  f       g = f)NSSLKEYLOGFILEr
  )r  r   r  r  rw   mockra  dictr   environr   r   rq   rf   r  r  r  r  r0  r^  r]  s     r%   test_keylog_envTestSSLDebug.test_keylog_env  s)    		(()*:*:;]]  %%bjj1*3*:*:BJJ'RZZ8):J:JK..!8!89CS00$7002
 S00)2B2BC,,.CS00)2B2BC! 21   !>MM"FG 21s&   &BF)9E>A(F)>(F&&F))
F7c                    [        5       u  pnS nU R                  UR                  S 5        XAl        U R                  UR                  U5        U R                  [        5         [        5       Ul        S S S 5        g ! , (       d  f       g = f)Nc                     g r]   r^   r  r  r<   r  r  r  s         r%   r  .TestSSLDebug.test_msg_callback.<locals>.msg_cb  r1  r'   )r   r   r  r  r   r  )r   r   r   r   r  s        r%   test_msg_callbackTestSSLDebug.test_msg_callback  sh    3B3D0	 	n22D9'-$n22F;y)+18N( *))s   $A==
Bc                   ^ ^ [        5       u  pn[        R                  R                  Ul        / mUU 4S jnXAl        [        USS9nU   UR                  [        R                  " 5       US9 nUR                  [        UR                  45        S S S 5        S S S 5        T R                  S[        R                  [        R                  [        R                   4T5        T R                  S[        R                  [        R"                  [        R"                  4T5        g ! , (       d  f       N= f! , (       d  f       N= f)Nc                    > TR                  U [        R                  5        TR                  U[        5        TR	                  USS15        TR                  XX445        g )NrO   r   )rU  r   r   r  r  r  )r  r  r<   r  r  r  r  r   s         r%   r  4TestSSLDebug.test_msg_callback_tls12.<locals>.msg_cb  sK    !!$6!!$.MM)fg%67JJ	LCDr'   Fr<  r  rO   r   )r   r   r   rp   rm   r  rD  r   r   r  r6  r=  r  r   	HANDSHAKEr   SERVER_KEY_EXCHANGECHANGE_CIPHER_SPEC)r   r   r   r   r  r<  r   r  s   `      @r%   test_msg_callback_tls12$TestSSLDebug.test_msg_callback_tls12  s    3B3D0),)?)?&	E (.$#N5I++FMMO<D , FIJ		4-.F 
 	Z'')B)B002	

 	j((/*L*L//1	
F F Vs$   
$D2."D!D2!
D/	+D22
E c                 (  ^ [        5       u  pn[        5       S   mS nU4S jnXBl        XRl        [        USS9nU   UR	                  [
        R
                  " 5       US9 nUR                  [        UR                  45        S S S 5        UR	                  [
        R
                  " 5       US9 nUR                  [        UR                  45        S S S 5        S S S 5        g ! , (       d  f       Nd= f! , (       d  f       N(= f! , (       d  f       g = f)NrU   c                     g r]   r^   r2  s         r%   r  @TestSSLDebug.test_msg_callback_deadlock_bpo43577.<locals>.msg_cb  r1  r'   c                    > TU l         g r]   rC  )r   r.  rZ   server_context2s      r%   sni_cb@TestSSLDebug.test_msg_callback_deadlock_bpo43577.<locals>.sni_cb  s
    *DLr'   Fr<  r  )	r   r  sni_callbackrD  r   r   r  r6  r=  )	r   r   r   r   r  rC  r<  r   rB  s	           @r%   #test_msg_callback_deadlock_bpo435770TestSSLDebug.test_msg_callback_deadlock_bpo43577  s    3B3D0)+A.		+ (.$&,##N5I++FMMO<D , FIJ		4-.F  ++FMMO<D , FIJ		4-.F	 VF FF F	 Vs;   $D!"C!+D."C2D!
C/	+D2
D 	<D
Dr^   N)r  rH  rI  rJ  r   r  r  requires_keylogr"  r'  rw   r}  r   flagsignore_environmentr.  r4  r<  rF  rP  r^   r'   r%   r  r  N  s    !*!1!1   $ $6 &. &.P __SYY11EGDG D(
4
>/r'   r  c           	          U R                  [        R                  [        R                  [        R
                  " SSS5      5        g )NiirU   r   )
setsockoptr   
SOL_SOCKET	SO_LINGERstructpackr   s    r%   )set_socket_so_linger_on_with_zero_timeoutrS    s+    OOF%%v'7'7T1a9PQr'   c                   V    \ rS rSr " S S\R
                  5      rS rS rS r	S r
Srg	)
TestPreHandshakeClosei  c                   N   ^  \ rS rSrSS.U 4S jjrS rS rU 4S jrS rS	r	U =r
$ )
6TestPreHandshakeClose.SingleConnectionTestServerThreadi  N)r  c                   > X l         SU l        S U l        S U l        S U l        Uc  [
        R                  U l        OX0l        [        TU ]%  US9  g )Nr'   r#   )
call_after_acceptreceived_data
wrap_errorrv  r=  r   r+  r  superrh  )r   r$   rY  r  r  s       r%   rh  ?TestPreHandshakeClose.SingleConnectionTestServerThread.__init__  sM    %6"!$D"DO DMDI&44&G$'r'   c                 &    U R                  5         U $ r]   )r  r   s    r%   r  @TestPreHandshakeClose.SingleConnectionTestServerThread.__enter__  s    JJLKr'   c                      U R                   (       a  U R                   R                  5         U R                  5         S U l        g ! [         a     N$f = fr]   )rv  r  ru  r    r[  r  s     r%   r  ?TestPreHandshakeClose.SingleConnectionTestServerThread.__exit__  sD    ==MM'') IIK"DO  s   +A 
AAc                 @  > [         R                  [         R                  R                  5      U l        [         R
                  U R                  l        U R                  R                  [        S9  U R                  R                  [        [        S9  [        R                  " 5       U l        [        R                  " U R                  5      U l        U R                  R!                  U R"                  5        U R                  R%                  S5        [&        TU ]Q  5         g )Nr  r  rU   )r   r  r   r
  ssl_ctxr   r   r   r  r   r  r   rv  r   r4  r=  r  r  r  r\  r  )r   r  s    r%   r  <TestPreHandshakeClose.SingleConnectionTestServerThread.start  s    55ckk6M6MNDL'*'8'8DLL$LL..h.?LL(((G(L"MMODM%//>DIMM$$T\\2MM  #GMOr'   c                 <    U R                   R                  5       u  p U R                   R                  5         U   U R	                  U5      (       a
   S S S 5        g  U R
                  R                  USS9n UR                  S5      U l        S S S 5        g ! [         a     U R                   R                  5         g f = f! U R                   R                  5         f = f! [         a     N^f = f! [         a  nX@l
         S nANwS nAff = f! , (       d  f       g = f)NTrp    )rv  r  r  r  rY  rc  r   rv  rZ  ru  r[  )r   r  address
tls_socketr  s        r%   r  :TestPreHandshakeClose.SingleConnectionTestServerThread.run   s    & $ 4 4 6g
 ##%))$// !%!9!9$D!9!QJ-7__S-A*    ##%	 ##% #   *&)OO* sp   B DC08C 
B>!C =B>>C C 
C-*D,C--D0
D
:D DD

D
D)rY  rv  r=  rZ  rc  r  r[  )r  rH  rI  rJ  rh  r  r  r  r  rP  __classcell__)r  s   @r%    SingleConnectionTestServerThreadrW    s)    ?C 
	( 
	(		#			 	r'   rk  c           
         [         R                  S;   a  g [        U[        5      (       dr  [        U[        5      (       a  UR
                  [
        R                  :X  d?  [        R                  " S[        [        USS5      5      [        R                  5      (       a*   U R                  S[         R                   SU< 35        S ng g ! S nf = f)N)linuxandroidzwrong.version.numberr  rh  z!Could not recreate conditions on z: err=)r   rN  ra   rq  ru  r7  EINVALr  searchrb   rc   r  r0  r  s     r%   "non_linux_skip_if_other_okay_error8TestPreHandshakeClose.non_linux_skip_if_other_okay_error6  s    <<//s011W%%#))u||*CII,c'#x2L.MrttTT A#,, P'"%) *  U s   &C Cc                 (  ^^ [         R                  " 5       m[         R                  " 5       mUU4S jnU R                  USS9nU R                  U5        [        R                  " 5        nUR                  UR                  R                  5       5        [        U5        UR                  S5        TR                  5         UR                  S5        UR                  5         S S S 5        TR                  5         UR                  5         UR                  nS Ul         U R!                  SUR"                  5        U R%                  U[&        5        U R)                  U5        U R%                  U[*        R,                  5        U R/                  SUR0                  S   5        U R/                  SUR2                  5        U R5                  S	UR0                  S	   5        U R7                  UR8                  S
S9  S nS ng ! , (       d  f       GN= f! S nS nf = f)Nc                    > TR                  5         TR                  [        R                  5      (       d  [	        S5      eg)Nz+wrap_socket event never set, test may fail.F)r  r  r   r+  r  )unusedready_for_server_wrap_socketserver_accept_calleds    r%   rY  PTestPreHandshakeClose.test_preauth_data_to_tls_server.<locals>.call_after_acceptS  s5     $$&/44W5J5JKK"#PQQr'   preauth_data_to_tls_serverrY  r$   Fs   DELETE /data HTTP/1.0

r'   before TLS handshake with datarU   r   attr must existr  )r  r  rk  r  r   r  rv  r  rS  r  r  rz  r  r  r    r[  r   rZ  rU  ru  rq  r   r   r  ry   r  r   r  r  )r   rY  r<  r  r[  rv  rw  s        @@r%   test_preauth_data_to_tls_server5TestPreHandshakeClose.test_preauth_data_to_tls_serverO  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   *A7G9CH 9
HHc                 t  ^	^
 [         R                  " 5       m
[         R                  " 5       m	U	U
4S jnU R                  USS9nU R                  U5        [	        UR
                  5        [        R                  " 5        nUR                  UR
                  R                  5       5        T
R                  5         T	R                  [        R                  5      (       d  U R                  S5        [        R                  5       n UR!                  USS9nS nUR#                  S5      nUR%                  5         S S S 5        UR)                  5          U R+                  SW5        U R-                  W[&        5        U R/                  U5        U R-                  U[        R0                  5        U R3                  S	UR4                  S
   5        U R3                  S	UR6                  5        U R9                  SUR4                  S   5        U R;                  UR<                  SS9  [>        R@                  " U 5         S nS S S 5        S ng ! [&         a  nUnSn S nAGNS nAff = f! , (       d  f       GN-= f! , (       d  f       N?= f! [>        R@                  " U 5         S nS S S 5        S nf ! , (       d  f       S nf = f= f)Nc                    > TR                  [        R                  5      (       d  [        S5        [	        U 5        U R                  S5        U R                  5         TR                  5         g)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  rS  rz  r  r  )conn_to_client$client_can_continue_with_wrap_socket$server_can_continue_with_wrap_sockets    r%   rY  PTestPreHandshakeClose.test_preauth_data_to_tls_client.<locals>.call_after_accept  s]    7<<W=R=RSS89 6nE   "0446r'   preauth_data_to_tls_clientrz  ztest server took too longr2   r  rf  r'   r{  rU   r   r|  r  )!r  r  rk  r  rS  rv  r   r  r  r  r  r   r+  rB  r   r  r   rv  r  ru  r    r   rU  rq  r   r  ry   r  r   r  r  r
   r]  )r   rY  r<  r  rc  
tls_clientr[  rZ  r  r  r  s            @@r%   test_preauth_data_to_tls_client5TestPreHandshakeClose.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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@!
 AF-  $ 
 #$ _< A@::4@!
 AF A@Fsh   ?BII #ICI? 2I. 
I
IIII
I+.
I<?J7J$J7$
J4.	J7c                   ^ [         R                  " 5       m " U4S jS[        R                  R                  5      nU4S jnSnU R                  USUS9nU R                  U5        [        UR                  5        U" UR                  R                  5       S   UR                  [        R                  5       US9n[        R                  " U 5         U R                  [         5         UR#                  S	S
SS0S9  UR%                  5       nS S S 5        S S S 5        UR'                  5         g ! , (       d  f       N'= f! , (       d  f       N0= f)Nc                   "   > \ rS rSrU 4S jrSrg)eTestPreHandshakeClose.test_https_client_non_tls_response_ignored.<locals>.SynchronizedHTTPSConnectioni  c                 n  > [         R                  R                  R                  U 5        TR	                  [
        R                  5      (       d4  [
        R                  (       a  [        R                  R                  S5        U R                  R                  U R                  U R                  S9U l        g )Nz"server_responding event never set.r  )httpr  HTTPConnectionr  r  r   r+  r   r   r   r   _contextr   r   r  )r   server_respondings    r%   r  mTestPreHandshakeClose.test_https_client_non_tls_response_ignored.<locals>.SynchronizedHTTPSConnection.connect  sw     **2248 )--g.C.CDDJJ$$%IJ MM55		499 6 >	r'   rR  N)r  rH  rI  rJ  r  rP  )r  s   r%   SynchronizedHTTPSConnectionr    s    	> 	>r'   r  c                 ~   > [        U 5        U R                  S5        U R                  5         TR                  5         g)Ns!   HTTP/1.0 402 Payment Required

T)rS  rz  r  r  )r  r  s    r%   rY  [TestPreHandshakeClose.test_https_client_non_tls_response_ignored.<locals>.call_after_accept  s;    5nE   "!!#r'   g       @non_tls_http_RST_responder)rY  r$   r  r   )r=  r   r  HEADz/testHostr2   )headers)r  r  r  r  HTTPSConnectionrk  r  rS  rv  r  r=  r   r  r
   r]  r  ru  r  getresponser    )r   r  rY  r  r<  
connectionresponser  s          @r%   *test_https_client_non_tls_response_ignored@TestPreHandshakeClose.test_https_client_non_tls_response_ignored  s   %OO-
	>$++*E*E 
	>	 66"31 7 ! 	&!1&//B0++-a0[[224	

 66t<!!'*vw8MN!--/H + =
 		 +* =<s$   D>($D-D>-
D;	7D>>
Er^   N)r  rH  rI  rJ  r  r   rk  rq  r}  r  r  rP  r^   r'   r%   rU  rU    s+    :9+;+; :x2*X9v3r'   rU  c                   P    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rSrg)TestEnumerationsi  c                 l     " S S[         R                  5      n[         R                  " U[        5        g )Nc                       \ rS rSr\R
                  r\R                  r\R                  r
\R                  r\R                  r\R                  r\R"                  rSrg);TestEnumerations.test_tlsversion.<locals>.CheckedTLSVersioni  r^   N)r  rH  rI  rJ  r   PROTO_MINIMUM_SUPPORTEDrr   PROTO_SSLv3r   PROTO_TLSv1r   PROTO_TLSv1_1r   PROTO_TLSv1_2rp   PROTO_TLSv1_3r  PROTO_MAXIMUM_SUPPORTEDrs   rP  r^   r'   r%   CheckedTLSVersionr    sQ     $ < <$$E$$E((G((G((G $ < <r'   r  )enumIntEnum_test_simple_enumr   )r   r  s     r%   test_tlsversion TestEnumerations.test_tlsversion  s%    	= 	= 	0*=r'   c                 l     " S S[         R                  5      n[         R                  " U[        5        g )Nc                   ,    \ rS rSrSrSrSrSrSrSr	Sr
g	)
DTestEnumerations.test_tlscontenttype.<locals>.Checked_TLSContentTypei  r  r&        rM    r^   N)r  rH  rI  rJ  r;  r  r9  APPLICATION_DATAHEADERINNER_CONTENT_TYPErP  r^   r'   r%   Checked_TLSContentTyper    s%    
 "$EI!F!&r'   r  )r  r  r  r   )r   r  s     r%   test_tlscontenttype$TestEnumerations.test_tlscontenttype  s%    	'T\\ 	' 	5Gr'   c                 l     " S S[         R                  5      n[         R                  " U[        5        g )Nc                       \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr Sr!S r"S!r#S"r$S#r%S$r&g%)&@TestEnumerations.test_tlsalerttype.<locals>.Checked_TLSAlertTypei	  r   
   r  r&  r     (   )   rT  +   ,   -   .   /   r  1   2   3   <   F   G   P   V   Z   rt  m   n   o   p   q   r   s   t   x   r^   N)'r  rH  rI  rJ  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_PROTOCOLrP  r^   r'   r%   Checked_TLSAlertTyper  	  s    
 L!#N " O$&! "N O&(#"$"$"$ "JMLM!#!$&!N%'"M" #$'!'*$ #.1+),&#& #& &)#r'   r  )r  r  r  r   )r   r  s     r%   test_tlsalerttype"TestEnumerations.test_tlsalerttype  s&    &	*4<< &	*N 	3]Cr'   c                 l     " S S[         R                  5      n[         R                  " U[        5        g )Nc                   l    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSrSrSrSrSrSrSrg)DTestEnumerations.test_tlsmessagetype.<locals>.Checked_TLSMessageTypei3  r   rU   r  r   rL  r*  r  r&  r%  r        rO  r   r  r&  r  r     C      r  r^   N)r  rH  rI  rJ  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;  rP  r^   r'   r%   Checked_TLSMessageTyper  3  s~    
 MLL#$  ! !"##$ K"$"$K!#"$H O!# "JJL!'r'   r  )r  r  r  r   )r   r  s     r%   test_tlsmessagetype$TestEnumerations.test_tlsmessagetype2  s%    	(T\\ 	(6 	5Gr'   c                     [         R                  " [         R                  SSS [        R                  S9nUR
                  Ul        [         R                  " U[        R                  5        g )N
_SSLMethodr   c                 <    U R                  S5      =(       a    U S:g  $ )Nr`   r   r   r#   s    r%   r  1TestEnumerations.test_sslmethod.<locals>.<lambda>S  s    T__[9WdFW>WWr'   source)	r  _old_convert_r  r   r   rd   r   r  r   )r   Checked_SSLMethods     r%   test_sslmethodTestEnumerations.test_sslmethodP  sN     ..lEWxx ->,J,J)0#..Ar'   c                     [         R                  " [         R                  SSS [        R                  S9n[         R
                  " U[        R                  5        g )NOptionsr   c                 $    U R                  S5      $ )Nr   r"  r#   s    r%   r  /TestEnumerations.test_options.<locals>.<lambda>]  s    T__U3r'   r$  )r  r&  IntFlagr   r   r  r+  )r   CheckedOptionss     r%   r   TestEnumerations.test_optionsZ  s=    ++i3xx
 	~s{{;r'   c                     [         R                  " [         R                  SSS [        R                  S9n[         R
                  " U[        R                  5        g )NAlertDescriptionr   c                 $    U R                  S5      $ )NALERT_DESCRIPTION_r"  r#   s    r%   r  8TestEnumerations.test_alertdescription.<locals>.<lambda>e  s    T__-ABr'   r$  )r  r&  r  r   r   r  r2  )r   CheckedAlertDescriptions     r%   test_alertdescription&TestEnumerations.test_alertdescriptionb  sB    "&"4"40%Bxx#
 	68L8LMr'   c                     [         R                  " [         R                  SSS [        R                  S9n[         R
                  " U[        R                  5        g )NSSLErrorNumberr   c                 $    U R                  S5      $ )N
SSL_ERROR_r"  r#   s    r%   r  6TestEnumerations.test_sslerrornumber.<locals>.<lambda>m  s    T__\:r'   r$  )r  r&  r  r   r   r  r:  )r   Checked_SSLErrorNumbers     r%   test_sslerrornumber$TestEnumerations.test_sslerrornumberj  sB    !%!3!3.:xx"
 	5s7I7IJr'   c                     [         R                  " [         R                  SSS [        R                  S9n[         R
                  " U[        R                  5        g )NVerifyFlagsr   c                 $    U R                  S5      $ )NVERIFY_r"  r#   s    r%   r  3TestEnumerations.test_verifyflags.<locals>.<lambda>u  s    T__Y7r'   r$  )r  r&  r.  r   r   r  rB  )r   CheckedVerifyFlagss     r%   test_verifyflags!TestEnumerations.test_verifyflagsr  s?    !//mU7xx
 	13??Cr'   c                     [         R                  " [         R                  SSS [        R                  S9n[         R
                  " U[        R                  5        g )N
VerifyModer   c                 $    U R                  S5      $ )NCERT_r"  r#   s    r%   r  2TestEnumerations.test_verifymode.<locals>.<lambda>}  s    T__W5r'   r$  )r  r&  r  r   r   r  rJ  )r   CheckedVerifyModes     r%   test_verifymode TestEnumerations.test_verifymodez  s?     ..lE5xx
 	0#..Ar'   r^   N)r  rH  rI  rJ  r  r  r  r  r(  r   r7  r?  rG  rO  rP  r^   r'   r%   r  r    s=    	>H(DTH<B<NKDBr'   r  c                     [         R                  (       Ga  [        R                  [        R                  S.n U R                  5        H*  u  pU" 5       nU(       d  M  US   (       d  M!  U< SU< 3n  O    [        [        R                  " 5       5      n[        S[        R                  < S[        R                  < 35        [        SU-  5        [        S[        R                  -  5        [        S[        R                  -  5         [        S[        R                  -  5        [        [         ["        [$        [&        [(        [*        [,        [.        [0        [2        [4        4 H@  n[6        R8                  R;                  U5      (       a  M)  [         R<                  " S	U-  5      e   [>        R@                  " 5       n[B        RD                  " [>        RF                  /UQ76   g ! [         a     Nf = f)
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   rN  mac_ver	win32_veritemsr   r  r   rT  rS  r   r  r   r  r  r  r  r  r  r  r   r   r   r  BADKEYr  r   r   exists
TestFailedr	   threading_setuprw   addModuleCleanupthreading_cleanup)platsr$   r{   platfilenamethread_infos         r%   setUpModulera    sl   ##))
  ++-JD6DtQ"&-	 ( ))+,D  #":":< 	="T)*&45(3::56	3c6G6GGH
 	.'>=):	$
 ww~~h''$$%E%PQQ$ #224K.@@O;O  		s   
G# #
G0/G0__main__r]   )r@  TFNN)Nr   r   )r   rw   unittest.mockastr   r  r   r[  r   test.supportr   r   r   r	   r
   r   r  r  r   r  rP  r   r  r9  http.clientr  r   r7  r  urllib.requestr  r   rj  rN  	sysconfigr~   
contextlibr   r  ImportErrorimport_moduler   r   r   r   r   r   r   r~  r  rz  _PROTOCOL_NAMESrU  r6  rS  ro   get_config_varr   r  r   verrc   r  r&   r  fsencoder  r  r  r  r  r  r  r  r  r  r  r>  r  rB  r   r  r   r  r   r   rQ  rP  rY  rX  rW  r   r9  rc  r   r   rO  r  r  r  rW  r  r.  r  r  r  rF   rG   rH   rI   rJ   rR   r[   rj   	lru_cacherg   r   r   r   ignore_warningsr  r{  r   r   r   r   r   TestCaser   rR  r  r  r  r  rY  rK  r  r  test.ssl_serversr_  rD  r  r  r#  r(  r*  rL  r  rV   rq   
HAS_KEYLOGrH  r  rS  rU  r  ra  r  mainr^   r'   r%   <module>rv     s         & " & ) ( !  	      	  	          "
 !!%(  T T!!=cllg&=3&&'	++y8 "112JK  JE3
U#cnnc* &)E"F ]#X&^$
M
"X&G$34 23 	8	{{6"Hl3(L1/ ++>- ." $
% N+ - &  ;FT0 ++&- . $ ^, *  01 . 
 &&DE %2 " 9:  x.
}%
&k"	*n%	
M
"01	<	 k"	+, 56 	>	"{{6" C!4a8 3 2A6 S"6: %c+H!L $S*FJ  ;;34* ! !H". %44   #}}t!D$/,   / 4 4DJ	1x(( J	1Zp 8$$ p f9DH%% 9Dx@3X&& @3F.X&& .`y<H-- y<x 	9%LX&& L &L4	Z	R /a)) aF	t)) tl ?GEI#.b IJKG\s+H%% s+l7 
_Y/1EFv1H-- v1 Gv1r	 S^^%67
%%BDa/8$$ a/HRsH-- slTBx(( TBn PF zMMO Cl  F2  s$   T *TTTTT