
    7bhb                    	   d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d dlmZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl Z 	 d dl!Z! ejF                  d	      Z$d dl%Z%d d
l$m&Z&m'Z'm(Z(m)Z) ejT                  xr e j<                  dk(  Z+ e,e$jZ                        Z.ej^                  Z/e$j`                  dk\  Z1 ejd                  d      Z3i Z4dD ]'  \  Z5Z6	  e7e$e5      Z5 e7e$jL                  e6      Z6e6e4e5<   ) d Z9 e9d      Z: ejv                  e:      Z< e9d      Z= e9d      Z> ejv                  e=      Z? ejv                  e>      Z@ e9d      ZA e9d      ZBdZC e9d      ZD ejv                  eD      ZE e9dd      ZF e9dd      ZGddddddddZH e9d       ZI e9d!      ZJd"ZKd#d$d%d&d'd(d)dddd*
ZL e9d+      ZMd,ZN e9d-      ZOd.ZP e9dd/      ZQ e9d0      ZR e9d1      ZS e9d2      ZTd"ZUd3ZV e9d4      ZW e9d5      ZX e9d6      ZY e9d7      ZZ e9d8      Z[ e9d9      Z\ e9d:      Z] e9d;      Z^ ejv                  e^      Z_ e7e$d<d       Z` e7e$d=d       Za e7e$d>d       Zb e7e$d?d       Zc e7e$d@d       ZddA Ze ee       rdB ZfndC ZfdD Zge j                  dE        ZidF ZjdG ZkdH Zl e
j                  enI      Zoe$j                  dddddJdKZqeJfdLdMdNZr G dO dPej                        Zt G dQ dRej                        Zu G dS dTej                        Zv G dU dVej                        Zw G dW dXej                        Zx G dY dZej                        Zy ej                  d[       G d\ d]ej                               Z{dyd^Z|d_ Z}d d`l~mZ  G da dbej                         Z G dc ddej                         Z	 	 	 dzdeZ	 d{dfZdg Z G dh diej                        Z ej                   eidj      dk       G dl dmej                               Z ee$j                  dn      Z ej                  edo      Z G dp dqej                        Zdr Z G ds dtej                        Z G du dvej                        Zdw Zedxk(  r ej&                          yy# e"$ r dZ!Y Fw xY w# e8$ r Y w xY w)|    N)support)import_helper)	os_helper)socket_helper)threading_helper)warnings_helper)asyncoressl)
TLSVersion_TLSContentType_TLSMessageType_TLSAlertTypewin32)   r   r   PY_SSL_DEFAULT_CIPHERS))PROTOCOL_SSLv3SSLv3)PROTOCOL_TLSv1TLSv1)PROTOCOL_TLSv1_1TLSv1_1c                      t        j                  j                  t         j                  j                  t              dg|  S )Ncertdata)ospathjoindirname__file__names    7/opt/python-3.12.12/usr/lib/python3.12/test/test_ssl.py	data_filer"   ?   s)    77<<1:EEE    zkeycert.pemzssl_cert.pemzssl_key.pemzkeycert.passwd.pemzssl_key.passwd.pemsomepasscapathz
4e1295a3.0z
5ed36f99.0))countryNameXY)localityNamezCastle Anthrax)organizationNamezPython Software Foundation))
commonName	localhostzAug 26 14:23:15 2028 GMTzAug 29 14:23:15 2018 GMT98A7CF88C74A32ED))DNSr.   r   issuernotAfter	notBeforeserialNumbersubjectsubjectAltNameversionzrevocation.crlzkeycert3.pemr.   )z)http://testca.pythontest.net/testca/ocsp/)z0http://testca.pythontest.net/testca/pycacert.cer)z2http://testca.pythontest.net/testca/revocation.crl)r&   ))r,   Python Software Foundation CA))r-   zour-ca-serverzOct 28 14:23:16 2037 GMTzAug 29 14:23:16 2018 GMTCB2D80995A69525C)
OCSP	caIssuerscrlDistributionPointsr2   r3   r4   r5   r6   r7   r8   zkeycert4.pemfakehostnamezkeycertecc.pemzlocalhost-eccz
ceff1710.0zallsans.pemzidnsans.pemz	nosan.pemzself-signed.pythontest.netnullcert.pembadcert.pemzXXXnonexisting.pem
badkey.pemz	nokia.pemznullbytecert.pemztalos-2019-0758.pemzffdh3072.pemOP_NO_COMPRESSIONOP_SINGLE_DH_USEOP_SINGLE_ECDH_USEOP_CIPHER_SERVER_PREFERENCEOP_ENABLE_MIDDLEBOX_COMPATc                      	 t        dd      5 } d| j                         v cd d d        S # 1 sw Y   y xY w# t        $ r Y yw xY w)Nz/etc/os-releasezutf-8)encodingubuntuF)openreadFileNotFoundError)fs    r!   	is_ubunturN      sA     #g6!qvvx' 766 s#   7 +	7 47 7 	AAc                      	 | D ]X  }t        |d      s|j                  t        j                  j                  k  s8|j
                  dkD  sH|j                  d       Z y )Nminimum_version   z@SECLEVEL=1:ALL)hasattrrP   r
   r   r   security_levelset_ciphers)ctxsctxs     r!   seclevel_workaroundrW      sM    NC./##s~~'='==""Q& 12 r#   c                       y N )rU   s    r!   rW   rW      s    r#   c                     	 t        | t              rt        t        | d       } | y| t        j                  t        j
                  t        j                  hv ry| j                  }t        |t        d      d        S )NFT	PROTOCOL_)

isinstancestrgetattrr
   PROTOCOL_TLSPROTOCOL_TLS_SERVERPROTOCOL_TLS_CLIENTr    has_tls_versionlen)protocolr    s     r!   has_tls_protocolrf      sw    
 (C 3$/#11 
 ==D4K 0 1233r#   c                 6   	 t        | t              rt        j                  j                  |    } t        t        d| j                         syt        r| t        j                  j                  k  ryt        j                  t        j                        }t        |d      r7|j                  t        j                  j                  k7  r| |j                  k  ryt        |d      r7|j                  t        j                  j                  k7  r| |j                  kD  ryy)NHAS_FrP   maximum_versionT)r]   r^   r
   r   __members__r_   r    IS_OPENSSL_3_0_0TLSv1_2
SSLContextrb   rR   rP   MINIMUM_SUPPORTEDri   MAXIMUM_SUPPORTED)r8   rV   s     r!   rc   rc      s    
 '3..,,W5 3$w||n-.Gcnn&<&<< ..00
1CC*+3>>#C#CCc)))&'s~~???#%%%r#   c                      	  fd}|S )Nc                 F     t        j                          fd       }|S )Nc                  Z    t              st        j                   d       | i |S )Nz is not available.)rc   unittestSkipTest)argskwfuncr8   s     r!   wrapperz8requires_tls_version.<locals>.decorator.<locals>.wrapper   s4    "7+''7)3E(FGGT(R((r#   )	functoolswraps)rw   rx   r8   s   ` r!   	decoratorz'requires_tls_version.<locals>.decorator   s%    			) 
	)
 r#   rZ   )r8   r{   s   ` r!   requires_tls_versionr|      s    
 r#   c                     dj                  t        j                  t        j                                     }t
        j                  r#t        j                  j                  | |z          y y )N )	r   	tracebackformat_exceptionsys	exceptionr   verbosestdoutwrite)prefix
exc_formats     r!   handle_errorr     sD    )44S]]_EFJ

*,- r#   c                      t         j                  r2t        j                         j                  dkD  rt         j                   S t         j
                   S Nr   )timedaylight	localtimetm_isdstaltzonetimezonerZ   r#   r!   
utc_offsetr   
  s5    }})22Q6}MM>r#   )category)	cert_reqsca_certscipherscertfilekeyfilec                   |j                  d      s-t        |d<   t        j                  t        j                        }n#t        j                  t        j
                        }|!|t        j                  k(  rd|_        ||_        ||j                  |       |||j                  ||       ||j                  |        |j                  | fi |S )Nserver_sideserver_hostnameF)getSIGNED_CERTFILE_HOSTNAMEr
   rm   rb   ra   	CERT_NONEcheck_hostnameverify_modeload_verify_locationsload_cert_chainrT   wrap_socket)sockr   r   r   r   r   kwargscontexts           r!   test_wrap_socketr     s     ::m$$< !..!8!89..!8!89%%*G"'%%h/w2'2G$7t.v..r#   Tserver_chainc                   	 | t         k(  rt        }n+| t        k(  rt        }n| t        k(  rt
        }nt        |       t        j                  t        j                        }|j                  t               t        j                  t        j                        }|j                  |        |r|j                  t               |||fS rY   )SIGNED_CERTFILEr   SIGNED_CERTFILE2SIGNED_CERTFILE2_HOSTNAME	NOSANFILENOSAN_HOSTNAME
ValueErrorr
   rm   rb   r   
SIGNING_CAra   r   )server_certr   hostnameclient_contextserver_contexts        r!   testing_contextr   ,  s     o%+	(	(,			!!%%^^C$;$;<N((4^^C$;$;<N"";/,,Z8>833r#   c                   :   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zej                   d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Z ej8                  dej<                  v d      d        Zd Z d Z! ej8                  e"jF                  dk(  d      d        Z$ ej8                  e"jF                  dk(  d      d        Z%d  Z&d! Z'd" Z(d# Z)d$ Z* ej8                   e+       d%      d&        Z,d' Z- ej\                  d(d)      d*        Z/d+ Z0d, Z1y-).BasicSocketTestsc                     t         j                   t         j                   t         j                   t         j                   t         j
                   t         j                   t         j                   | j                  t         j                  d       | j                  t         j                  d       | j                  t         j                  d       | j                  t         j                  d       t         j                   t         j                   t         j                   t         j                    t         j"                   t         j$                   | j                  t         j&                  t         j(                         y )NT)r
   r   CERT_OPTIONALCERT_REQUIREDrE   rC   rD   rB   assertEqualHAS_SNIHAS_ECDHHAS_TLSv1_2HAS_TLSv1_3OP_NO_SSLv2OP_NO_SSLv3OP_NO_TLSv1OP_NO_TLSv1_3OP_NO_TLSv1_1OP_NO_TLSv1_2r`   PROTOCOL_SSLv23selfs    r!   test_constantszBasicSocketTests.test_constantsG  s    ''d+t,$/$/))3+>+>?r#   c                     t        t              D ]U  }|j                  d      s| j                  |      5  t	        t        |      }| j                  |dd|        d d d        W y # 1 sw Y   bxY w)NOP_optionr   ssl.)dirr
   
startswithsubTestr_   assertGreaterEqual)r   r    values      r!   test_optionszBasicSocketTests.test_options[  sb    HD??5)T*T*''qD-@ +*  +*s   'A))A2	c                    t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  g}|D ]C  }| j                  |      5  | j                  t        d      5  d |_
        d d d        d d d        E t        j                  | t         j                         y # 1 sw Y   8xY w# 1 sw Y   xY w)N)ssl_typezimmutable type)_ssl_SSLContext
_SSLSocket	MemoryBIOCertificate
SSLSessionSSLErrorr   assertRaisesRegex	TypeErrorr   r   check_disallow_instantiation)r   	ssl_typesr   s      r!   test_ssl_typeszBasicSocketTests.test_ssl_typesd  s    OONNOOMM
	 "Hx0++I7GH%)HN I 10 " 	,,T43C3CD IH 10s$   4CC
C
CCC	c                     | j                  t        d      5  t        j                         5 }t        j	                  |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wNzpublic constructor)r   r   socketr
   	SSLSocketr   ss     r!   test_private_initz"BasicSocketTests.test_private_inits  sH    ##I/CDAa  ! ED  EDs"   AAAA	AA(c                 2   t         j                  }| j                  t        |      d|j                  z         | j                  t        |      t        |j                               t         j                  |      }| j                  |j                  |       y )Nz$<_SSLMethod.PROTOCOL_TLS_CLIENT: %r>)	r
   rb   r   reprr   r^   rm   assertIsre   r   protorV   s      r!   test_str_for_enumsz#BasicSocketTests.test_str_for_enumsx  sj     ''e&Lu{{&Z[US%56nnU#cllE*r#   c                 H   t         j                         }t        j                  r,t        j
                  j                  d||xr dxs dfz         |r1t         j                  d      }| j                  t        |      d       n/| j                  t         j                  t         j                  d       | j                  t        t         j                  d       t         j                  dd       t         j                  dd       t         j                  t        d	      d       y )
Nz
 RAND_status is %d (%s)
zsufficient randomnesszinsufficient randomness   zthis is a random stringg     R@s   this is a random bytes objects!   this is a random bytearray object)r
   RAND_statusr   r   r   r   r   
RAND_bytesr   rd   assertRaisesr   r   RAND_add	bytearray)r   vdatas      r!   test_randomzBasicSocketTests.test_random  s    OO??JJ: !A$A*A $: 9 ;; < >>"%DSY+cllCNNB? 	*cnnb9.55t<YCDdKr#   c                 ^   | j                  t        j                  j                  t              t
               | j                  t        j                  j                  t              t               t        j                  j                  t              }t        j                  r8t        j                  j                  dt        j                  |      z   dz          | j                  |d   d       | j                  |d   d       | j                  |d   d       | j                  |d   d	       y )
N
r7   ))r0   zprojects.developer.nokia.com)r0   zprojects.forum.nokia.comr;   )zhttp://ocsp.verisign.comr<   )z0http://SVRIntl-G3-aia.verisign.com/SVRIntlG3.cerr=   )z0http://SVRIntl-G3-crl.verisign.com/SVRIntlG3.crl)r   r
   r   _test_decode_certCERTFILECERTFILE_INFOr   SIGNED_CERTFILE_INFO	NOKIACERTr   r   r   r   r   pprintpformatr   ps     r!   test_parse_certz BasicSocketTests.test_parse_cert  s     	HH&&x0	
 	HH&&7 	
 HH&&y1??JJTFNN1$55<=+,?	
 	6$AB;N	P23N	Pr#   c                    t         j                  j                  t              }t        j
                  r8t        j                  j                  dt        j                  |      z   dz          | j                  |dddddddd	       y )
Nr   ))r'   UK))r-   zcody-cazJun 14 18:00:58 2028 GMTzJun 18 18:00:58 2018 GMT02)r  ))r-   #codenomicon-vm-2.test.lal.cisco.com))r0   r  r   r1   )r
   r   r   TALOS_INVALID_CRLDPr   r   r   r   r   r  r  r   r  s     r!   test_parse_cert_CVE_2019_5010z.BasicSocketTests.test_parse_cert_CVE_2019_5010  sw    HH&&':;??JJTFNN1$55<=L67 $H#E	
r#   c                    t         j                  j                  t              }t        j
                  r8t        j                  j                  dt        j                  |      z   dz          d}| j                  |d   |       | j                  |d   |       t         j                  dk\  rd}nd}| j                  |d   |       y )	Nr   )))r'   US))stateOrProvinceNameOregon))r*   	Beavertonr+   ))organizationalUnitNamezPython Core Development))r-   znull.python.org example.org))emailAddresszpython-dev@python.orgr6   r2   )r   	      )r0   zaltnull.python.org example.comemailz null@python.org user@example.orgURIz)http://null.python.org http://example.org
IP Addressz	192.0.2.1)r  z2001:DB8:0:0:0:0:0:1)r  r  r  r  )r  z	<invalid>r7   )r
   r   r   NULLBYTECERTr   r   r   r   r   r  r  r   _OPENSSL_API_VERSION)r   r  r6   sans       r!   test_parse_cert_CVE_2013_4238z.BasicSocketTests.test_parse_cert_CVE_2013_4238  s    HH&&|4??JJTFNN1$55<=A 	9w/8g.##y0;C0C 	+,c2r#   c                 t    t         j                  j                  t              }| j	                  |d   d       y )Nr7   )
)r0   allsans	othernamez<unsupported>r$  )r  zuser@example.org)r0   zwww.example.org)DirName)r&   r)   r+   ))r-   zdirname example)r  zhttps://www.python.org/)r  	127.0.0.1)r  z0:0:0:0:0:0:0:1)zRegistered IDz	1.2.3.4.5)r
   r   r   
ALLSANFILEr   r  s     r!   test_parse_all_sansz$BasicSocketTests.test_parse_all_sans  s1    HH&&z2+,	
r#   c                    t        t        d      5 }|j                         }d d d        t        j	                        }t        j                  |      }t        j	                  |      }| j                  ||       |j                  t        j                  dz         s| j                  d|z         |j                  dt        j                  z   dz         s| j                  d|z         y y # 1 sw Y   xY w)Nrr   z-DER-to-PEM didn't include correct header:
%r
z-DER-to-PEM didn't include correct footer:
%r
)rJ   CAFILE_CACERTrK   r
   PEM_cert_to_DER_certDER_cert_to_PEM_certr   r   
PEM_HEADERfailendswith
PEM_FOOTER)r   rM   pemd1p2d2s         r!   test_DER_to_PEMz BasicSocketTests.test_DER_to_PEM  s    -%&&(C &%%c*%%b)%%b)R }}S^^d23IIG"LM{{4#..0478IIG"LM 9 &%s   C,,C5c                 X   t         j                  }t         j                  }t         j                  }| j	                  |t
               | j	                  |t               | j	                  |t               | j                  |d       | j                  |d       |\  }}}}}| j                  |d       | j                  |d       | j                  |d       | j                  |d       | j                  |d       | j                  |d       | j                  |d       | j                  |d       | j                  |d       | j                  |d       d	|d
}	|dk\  rd|d
d|d
d|d
}
nd|d
d|d
d|d
}
| j                  |j                  |
|	df      ||t        |      f       y )Ni i   @rQ      r      ?      z	LibreSSL dr   zOpenSSL .zAWS-LC)r
   OPENSSL_VERSION_NUMBEROPENSSL_VERSION_INFOOPENSSL_VERSIONassertIsInstanceinttupler^   r   
assertLessassertLessEqual
assertTruer   hex)r   ntr   majorminorfixpatchstatuslibressl_veropenssl_vers              r!   test_openssl_versionz%BasicSocketTests.test_openssl_version  s   &&$$a%a'a% 	:.:&+,(uc5&q)q!q)s#Q'S!q)UB'*VR("5),A:$U1IQuQiqq	BK$U1IQuQiqQ@KLL+|X>?3q6N	
r#   c                    t        j                   t         j                        }t        |      }t        j                  |      }t        j                  dt        f      5  ~d d d        | j                   |       d        y # 1 sw Y   !xY w)N )	r   AF_INETr   weakrefrefr   check_warningsResourceWarningr   )r   r   sswrs       r!   test_refcyclezBasicSocketTests.test_refcycle(  se     MM&..)a [[_++R,AB Ct$ CBs   BB
c           	      `   t        j                   t         j                        }t        |      5 }| j                  t        |j
                  d       | j                  t        |j                  t        d             | j                  t        |j                  d       | j                  t        |j                  t        d      d       | j                  t        |j                  d       | j                  t        |j                  dd       | j                  t        |j                         | j                  t        |j                  dgddd       | j                  t        |j                  d       | j                  t        |j                   t        d      g       d d d        y # 1 sw Y   y xY w)NrQ      x)z0.0.0.0r   rZ   r   d   )r   rU  r   r   OSErrorrecv	recv_intor   recvfromrecvfrom_intosendsendtoNotImplementedErrordupsendmsgrecvmsgrecvmsg_intor   r   rZ  s      r!   test_wrapped_unconnectedz)BasicSocketTests.test_wrapped_unconnected3  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$$F-c                     dD ]j  }t        j                   t         j                        }|j                  |       t        |      5 }| j	                  ||j                                d d d        l y # 1 sw Y   wxY w)N)Ng              @)r   rU  
settimeoutr   r   
gettimeout)r   timeoutr   rZ  s       r!   test_timeoutzBasicSocketTests.test_timeoutE  s]     (Gfnn-ALL!!!$  "--/: %$ ( %$s   !A11A:	c                    t         j                  t         j                  t         j                  t         j                  g}t         j
                  t         j                  t         j                  t         j                  g}t         j                  j                  t         j                  j                  t         j                  j                  g}|D ]  }| j                  |      5  t         j                  t         j                        }| j!                  t"              5 }|xj$                  |z  c_        d d d        | j'                  dt)        j*                               d d d         |D ]  }t-        |      s| j                  |      5  | j!                  t"              5 }t         j                  |       d d d        | j'                  d|j.                   dt)        j*                               d d d         |D ]  }t1        |      s| j                  |      5  t         j                  t         j                        }| j!                  t"              5 }||_        d d d        |j4                  j6                  d|j.                  }	| j'                  d|	 dt)        j*                               d d d         y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   &xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nr   z4ssl.OP_NO_SSL*/ssl.OP_NO_TLS* options are deprecated)re   r   z is deprecated)r8   r>  )r
   r   r   r   r   r   r   PROTOCOL_TLSv1_2r`   r   r   r   r   r   rm   rb   assertWarnsDeprecationWarningoptionsr   r^   warningrf   r    rc   rP   	__class____name__)
r   rx  	protocolsversionsr   rV   cmre   r8   version_texts
             r!   test_openssl111_deprecationsz-BasicSocketTests.test_openssl111_deprecationsN  sJ   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*1C' :*1*;*;*D*DgllS  <.7

O /.  % :9 -, :9 10 :9 /.sm   !9KK 0-K
K' K6;K'9L K4AL  K
KK	K$K''K1	4K=9L  L
	c                    	 t         j                  j                  t         j                  j                  t              xs t         j
                  d|      }t        j                         }| j                  |j                         | j                  t        j                        5  t        ||       d d d        y # 1 sw Y   y xY w)Nr   r   )r   r   r   r   r   curdirr   
addCleanupcloser   r
   r   r   r   r   r   s      r!   bad_cert_testzBasicSocketTests.bad_cert_test  sz    I77<< 9 FRYY *H6}}

#s||,T&.0 -,,s   $B;;Cc                 (    	 | j                  d       y )Nr?   r  r   s    r!   test_empty_certz BasicSocketTests.test_empty_cert  s    .>*r#   c                 (    	 | j                  d       y )Nr@   r  r   s    r!   test_malformed_certz$BasicSocketTests.test_malformed_cert  s    H=)r#   c                 (    	 | j                  d       y )NrA   r  r   s    r!   test_malformed_keyz#BasicSocketTests.test_malformed_key  s    @<(r#   c                     t         j                  t         j                        }t        j                         5 }| j	                  t
        |j                  |dd       d d d        y # 1 sw Y   y xY w)NTzsome.hostnamer   )r
   rm   ra   r   r   r   r   )r   rV   r   s      r!   test_server_sidez!BasicSocketTests.test_server_side  sM    nnS445]]_j#//4.=  ? __s   %A&&A/c                    t        j                  d      }t        j                   t         j                        }|j                  |j	                                t        |d      5 }| j                  t              5  |j                  d       d d d        d d d        |j                          y # 1 sw Y   "xY w# 1 sw Y   &xY w)Nr'  r   Fdo_handshake_on_connectzunknown-type)
r   create_serverrU  connectgetsocknamer   r   r   get_channel_bindingr  )r   r   crZ  s       r!   test_unknown_channel_bindingz-BasicSocketTests.test_unknown_channel_binding  s      !12MM&..)			!--/"a?2"":.&&~6 / @ 	
	 /. @?s$   %B:;B.B:.B7	3B::C
tls-unique*'tls-unique' channel binding not availablec                    t        j                   t         j                        }t        |      5 }| j                  |j	                  d             d d d        t        j                   t         j                        }t        |dt
              5 }| j                  |j	                  d             d d d        y # 1 sw Y   hxY w# 1 sw Y   y xY w)Nr  T)r   r   )r   rU  r   assertIsNoner  r   rl  s      r!   test_tls_unique_channel_bindingz0BasicSocketTests.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   !B7!C7C Cc                 V   t        t        j                  t        j                              }t        |      }| j	                  t
              5 }d }t        j                          d d d        | j                  |t        j                  j                  d                y # 1 sw Y   <xY wr   )r   r   rU  r   rv  rY  r   
gc_collectassertInr^   ry  ru   )r   rZ  r+  r~  s       r!   test_dealloc_warnz"BasicSocketTests.test_dealloc_warn  ss    fmmFNN;<Ho."B  / 	aRZZ__Q/01 /.s   BB(c                    t         j                         }| j                  t        |      d       | j	                  |t         j
                         t        j                         5 }t        |d<   t        |d<   t         j                         }| j                  |j                  t               | j                  |j                  t               d d d        y # 1 sw Y   y xY w)N   SSL_CERT_DIRSSL_CERT_FILE)r
   get_default_verify_pathsr   rd   rB  DefaultVerifyPathsr   EnvironmentVarGuardCAPATHr   cafiler%   )r   pathsenvs      r!   test_get_default_verify_pathsz.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                 (   | j                  t        j                  d             | j                  t        j                  d             | j                  t        t        j                         | j                  t
        t        j                  d       t               }dD ]  }t        j                  |      }| j                  |t               |D ]  }| j                  |t               | j                  t        |      d       |\  }}}| j                  |t               | j                  |ddh       | j                  |t        t        t        f       t!        |t        t        f      s|j#                  |         d}| j                  ||       y )	NCAROOTrT  )r  r  r   x509_asn
pkcs_7_asn1.3.6.1.5.5.7.3.1)rG  r
   enum_certificatesr   r   WindowsErrorsetrB  listrD  r   rd   bytesr  	frozensetboolr]   update)	r   
trust_oids	storenamestoreelementcertenctrust
serverAuths	            r!   test_enum_certificatesz'BasicSocketTests.test_enum_certificates  s5   --d34--f56)S%:%:;,(=(=rBU
'I)))4E!!%. %%gu5  Wq1#* c5%%dE2cJ#=>%%eid-CDei%56%%e, ! ( )
j*-r#   c                    | j                  t        j                  d             | j                  t        t        j                         | j                  t
        t        j                  d       t        j                  d      }| j                  |t               |D ]c  }| j                  |t               | j                  t        |      d       | j                  |d   t               | j                  |d   ddh       e y )Nr  rT     r   rQ   r  r  )rG  r
   	enum_crlsr   r   r  rB  r  rD  r   rd   r  r  )r   crlsr  s      r!   test_enum_crlszBasicSocketTests.test_enum_crls  s    d+,)S]]3,r:}}T"dD)G!!'51S\1-!!'!*e4MM'!*z<&@A	 r#   c                    d}t         j                  d      }| j                  ||       | j                  |j                  d       | j                  |j                  d       | j                  |j
                  d       | j                  |j                  d       | j                  |t         j                         | j                  t        t         j                  d       t         j                  j                  d      }| j                  ||       | j                  |t         j                         | j                  t        t         j                  j                  d       | j                  t        d      5  t         j                  j                  d       d d d        t        d	      D ]  }	 t         j                  j                  |      }| j                  |j                  t               | j                  |j                  t               | j                  |j
                  t               | j                  |j                  t        t        d       f        t         j                  j!                  d      }| j                  ||       | j                  |t         j                         | j                  t         j                  j!                  d      |       | j                  t         j                  j!                  d      |       | j                  t        d
      5  t         j                  j!                  d       d d d        y # 1 sw Y   xY w# t        $ r Y w xY w# 1 sw Y   y xY w)N)   r  TLS Web Server Authenticationr  r  r  r  r  zunknown NID 100000i   zunknown object 'serverauth'
serverauth)r
   _ASN1Objectr   nid	shortnamelongnameoidrB  r   r   fromnidr   rangerC  r^   typefromname)r   expectedvaliobjs        r!   test_asn1objectz BasicSocketTests.test_asn1object  sv   ) oo12h'#&5'FG"56c3??3*coo|Doo%%c*h'c3??3*coo&=&=rB##J0DEOO##F+ FtABoo--a0 %%cggs3%%cmmS9%%cllC8%%cggT$Z/@A  oo&&'FGh'c3??311,?J112EF!	###J0MNOO$$\2 ON' FE
   ONs*   5 M,M M#M	M M #M,c                 P   t         j                  d      }| j                  t         j                  j                  t         j                         | j                  t         j                  j                  |       | j                  t         j                  j                  j                  d       | j                  t         j                  j                  j                  d       | j                  t         j                  j                  j                  d       t         j                  d      }| j                  t         j                  j                  t         j                         | j                  t         j                  j                  |       | j                  t         j                  j                  j                  d       | j                  t         j                  j                  j                  d       | j                  t         j                  j                  j                  d       y )Nr  r  r  z1.3.6.1.5.5.7.3.2   
clientAuth)
r
   r  rB  PurposeSERVER_AUTHr   r  r  r  CLIENT_AUTH)r   r  s     r!   test_purpose_enumz"BasicSocketTests.test_purpose_enum  sX   oo12ckk55sG00#60044c:00::LI00441	3 oo12ckk55sG00#60044c:00::LI00441	3r#   c                 x   t        j                   t         j                  t         j                        }| j                  |j                         | j                  t              5 }t        |t        j                         d d d        | j                  t        j                        d       t        j                  t        j                        }| j                  t              5 }|j                  |       d d d        | j                  t        |j                        d       y # 1 sw Y   xY w# 1 sw Y   ;xY w)Nr   z!only stream sockets are supported)r   rU  
SOCK_DGRAMr  r  r   rg  r   r
   r   r   r^   r   rm   rb   r   )r   r   cxrV   s       r!   test_unsupported_dtlsz&BasicSocketTests.test_unsupported_dtls*  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$$D0$D-0D9c                 N    | j                  t        j                  |      |       y rY   )r   r
   cert_time_to_seconds)r   
timestring	timestamps      r!   cert_time_okzBasicSocketTests.cert_time_ok5  s    11*=yIr#   c                     | j                  t              5  t        j                  |       d d d        y # 1 sw Y   y xY wrY   )r   r   r
   r  )r   r  s     r!   cert_time_failzBasicSocketTests.cert_time_fail8  s*    z*$$Z0 +**s   5>z)local time needs to be different from UTCc                 L    | j                  dd       | j                  dd       y )NzMay  9 00:00:00 2007 GMTg   CAJan  5 09:34:43 2018 GMT  ѓA)r  r   s    r!   "test_cert_time_to_seconds_timezonez3BasicSocketTests.test_cert_time_to_seconds_timezone<  s&    
 	4lC4lCr#   c                    d}d}| j                  ||       | j                  t        j                  |      |       | j                  d|       | j                  d|       | j	                  d       | j	                  d       | j	                  d       | j	                  d	       | j	                  d
       | j	                  d       | j	                  d       d}| j                  d|       | j                  d|       | j                  dd       | j                  dd       | j                  dd       | j	                  d       | j                  dd       y )Nr  r  )	cert_timezJan 05 09:34:43 2018 GMTzJaN  5 09:34:43 2018 GmTzJan  5 09:34 2018 GMTzJan  5 09:34:43 2018zJan  5 09:34:43 2018 UTCzJan 35 09:34:43 2018 GMTzJon  5 09:34:43 2018 GMTzJan  5 24:00:00 2018 GMTzJan  5 09:60:43 2018 GMTg   WAzDec 31 23:59:60 2008 GMTzJan  1 00:00:00 2009 GMTzJan  5 09:34:59 2018 GMTiFOZzJan  5 09:34:60 2018 GMTiFOZzJan  5 09:34:61 2018 GMTiFOZzJan  5 09:34:62 2018 GMTzDec 31 23:59:59 9999 GMTg  MB)r  r   r
   r  r  )r   r  ts
newyear_tss       r!   test_cert_time_to_secondsz*BasicSocketTests.test_cert_time_to_secondsD  sA   /
*b)11J1GL4b94b934236767676767!
4jA4jA4jA4jA4jA67 	4nEr#   LC_ALLrT  c                     d } |       j                         dk(  r| j                  d       | j                  dd       | j                   |       dz          y )Nc                  .    t        j                  dd      S )Nz%b)	rQ   r  r   r9     r  r   r   r   )r   strftimerZ   r#   r!   local_february_namezNBasicSocketTests.test_cert_time_to_seconds_locale.<locals>.local_february_namek  s    =='BCCr#   febz>locale-specific month name needs to be different from C localezFeb  9 00:00:00 2007 GMTg   `rAz  9 00:00:00 2007 GMT)lowerskipTestr  r  )r   r  s     r!    test_cert_time_to_seconds_localez1BasicSocketTests.test_cert_time_to_seconds_localeg  sZ    	D  &&(E1MM 4 5 	4lC/14KKLr#   c                 &   t        j                   t         j                        }| j                  |j                         t	        j
                  |      }t        t        j                   t         j                        t        j                        }| j                  |j                         |j                  t        |f      }t        j                  t        j                  t        j                  t        j                  f}| j!                  ||       y )Nr  )r   rU  r  r  r   	bind_portr   r
   r   
connect_exHOSTerrnoECONNREFUSEDEHOSTUNREACH	ETIMEDOUTEWOULDBLOCKr  )r   serverportr   rcerrorss         r!   test_connect_ex_errorz&BasicSocketTests.test_connect_ex_errorv  s    v~~.%&&v.V]]6>>:&)&7&79 \\4,'  2 2EOO
 	b&!r#   c                    t               \  }}}t        |      }|5  |j                  t        j                         |      5 }|j	                  t
        |j                  f       | j                  |j                  d      d       | j                  |j                  d      d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r  r   r#   )
r   ThreadedEchoServerr   r   r  r  r  r   ra  re  r   r   r   r   r  r   s         r!   test_read_write_zeroz%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$B8'C8C	=CCN)2r{  
__module____qualname__r   r   r   r   r   r   r  r  r!  r)  r7  rR  r   cpython_onlyr\  rm  rs  r  r  r  r  r  r  r  rs   
skipUnlessr
   CHANNEL_BINDING_TYPESr  r  r  r   platformr  r  r  r  r  r  r  r   r  r  run_with_localer  r  r  rZ   r#   r!   r   r   E  s   @(AE!
+L(P:
*3:
*
N!
F % %0$;3j0+*)? X)B)BBEGDGD2
3 X02DE. F.0 X02DEB FB%3N3"	QJ1 XDFDFD!FF WXr*M +M" 	1r#   r   c                   \   e Zd Zd Zd Z ej                  edk(  d      d        Zd Z	d Z
d Zd	 Zed
        Z ej                   eej"                  d      d      d        Zd Zd Zd Zd Zd Zd Zd Z ej                  ej4                  d      d        Zd Zd Zd Zd Zd Z  ejB                  e"jF                  dk(  d      d        Z$ ej                  e"jF                  dk(  d       ejB                  e%jL                  d       d!               Z'd" Z(d# Z)d$ Z*d% Z+d& Z,d' Z-d( Z.y))*ContextTestsc                 H   t         D ]\  }t        |      st        j                         5  t        j                  |      }d d d        | j                  j                  |       ^ t        j                         5  t        j                         }d d d        | j                  j                  t        j                         | j                  t        t        j
                  d       | j                  t        t        j
                  d       y # 1 sw Y   xY w# 1 sw Y   xY w)Nr  *   )	PROTOCOLSrf   r   rX  r
   rm   r   re   r`   r   r   )r   re   rV   s      r!   test_constructorz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	D!c                    t         j                  t         j                        }|j                  d       |j                  d       | j	                  t         j
                  d      5  |j                  d       d d d        y # 1 sw Y   y xY w)NALLDEFAULTNo cipher can be selected^$:,;?*'dorothyx)r
   rm   rb   rT   r   r   r   rV   s     r!   test_cipherszContextTests.test_ciphers  s]    nnS445	"##CLL2MNOO./ ONNs   &BB
rQ   z+Test applies only to Python default ciphersc                 6   t         j                  t         j                        }|j                         }|D ]a  }|d   }| j	                  d|       | j	                  d|       | j	                  d|       | j	                  d|       | j	                  d|       c y )Nr    PSKSRPMD5RC43DES)r
   rm   rb   get_ciphersassertNotIn)r   rV   r   suiter    s        r!   test_python_ciphersz ContextTests.test_python_ciphers  s     nnS445//#E=DUD)UD)UD)UD)VT* r#   c           
      >   t         j                  t         j                        }|j                  d       t	        d |j                         D              }h d}|j                  |      }| j                  t        |      ddt        |       dt        |              y )NAESGCMc              3   &   K   | ]	  }|d      yw)r    NrZ   ).0r=  s     r!   	<genexpr>z0ContextTests.test_get_ciphers.<locals>.<genexpr>  s     9'8!AfI'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
   rm   rb   rT   r  r5  intersectionr   rd   sorted)r   rV   namesr  rF  s        r!   test_get_cipherszContextTests.test_get_ciphers  s    nnS445!9s'899	
 ))(3qGF5M?,vhGWFX"Y	
r#   c                    t         j                  t         j                        }t         j                  t         j                  z  t         j
                  z  }|t        t        z  t        z  t        z  t        z  z  }| j                  ||j                         t        j                         5  |xj                  t         j                  z  c_        d d d        | j                  |t         j                  z  |j                         t        j                         5  |j                  t         j                   z  |_        d d d        | j                  ||j                         d|_        | j                  d|j                  t         j
                   z         | j!                  t"              5  d|_        d d d        | j!                  t"              5  ddz  |_        d d d        | j!                  t$              5  d|_        d d d        y # 1 sw Y   ;xY w# 1 sw Y   xY w# 1 sw Y   pxY w# 1 sw Y   TxY w# 1 sw Y   y xY w)Nr   r  r  r_  abc)r
   rm   rb   OP_ALLr   r   rB   rE   rC   rD   rF   r   rx  r   rX  r   r   OverflowErrorr   )r   rV   defaults      r!   r   zContextTests.test_options  s   nnS445::/#//A%(CC$%'9:./ 	0 	#++. ++-KK3??*K .3??2CKK@ ++-;;#//)99CK .#++. CKK3??*::; }-CK .}-s(CK .y)CK *)' .-
 .- .---))s<   +$H$H*H!H-7H9HH!H*-H69Ic                    t        j                         5  t        j                  t        j                        }d d d        | j                  j                  t        j                         t        j                  |_        | j                  |j                  t        j                         t        j                  |_        | j                  |j                  t        j                         t        j                  |_        | j                  |j                  t        j                         | j                  t              5  d |_        d d d        | j                  t              5  d|_        d d d        t        j                  t        j                        }| j                  |j                  t        j                         | j                  |j                         t        j                  t        j                         }| j                  |j                  t        j                         | j#                  |j                         y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY wNr%  )r   rX  r
   rm   r`   r   r   r   r   r   r   r   r   ra   assertFalser   rb   rG  r-  s     r!   test_verify_mode_protocolz&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I&c                    t         j                  t         j                        }| j                  |j                         t         j
                  rgd|_        | j                  |j                         d|_        | j                  |j                         d|_        | j                  |j                         y | j                  t              5  d|_        d d d        y # 1 sw Y   y xY wNTF)	r
   rm   rb   rG  hostname_checks_common_nameHAS_NEVER_CHECK_COMMON_NAMErQ  r   AttributeErrorr-  s     r!    test_hostname_checks_common_namez-ContextTests.test_hostname_checks_common_name  s    nnS445778**.2C+OOC;;<.3C+S<<=.2C+OOC;;<"">226/ 322s   CC%c                 	   t         j                  t         j                        }t         j                  j                  t         j                  j
                  t         j                  j                  h}t         j                  j                  t         j                  j                  h}| j                  |j                  |       | j                  |j                  |       t         j                  j                  |_
        t         j                  j                  |_        | j                  |j                  t         j                  j                         | j                  |j                  t         j                  j                         t         j                  j                  |_
        t         j                  j
                  |_        | j                  |j                  t         j                  j                         | j                  |j                  t         j                  j
                         t         j                  j                  |_        | j                  |j                  t         j                  j                         t         j                  j                  |_        | j                  |j                  t         j                  j
                  t         j                  j                  t         j                  j                  h       t         j                  j                  |_
        | j                  |j                  t         j                  j                  t         j                  j                  h       | j                  t               5  d|_
        d d d        t#        t         j$                        rt         j                  t         j$                        }| j                  |j                  |       | j                  |j                  t         j                  j                         | j                  t               5  t         j                  j                  |_
        d d d        | j                  t               5  t         j                  j
                  |_        d d d        y y # 1 sw Y   xY w# 1 sw Y   UxY w# 1 sw Y   y xY wrP  )r
   rm   ra   r   rn   r   rl   ro   TLSv1_3r  rP   ri   r   r   r   r   r   rf   r   )r   rV   minimum_rangemaximum_ranges       r!   test_min_max_versionz!ContextTests.test_min_max_version  s.   nnS445
 NN,,NN  NN""
 NN,,NN""	
 		
 		
 "nn44!nn44!7!7	
 	!7!7	
 "nn>>!nn22!A!A	
 	!5!5	
 "nn>>!A!A	
 "nn>>^^!!3>>#9#93>>;O;OP	

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

 z*"$C + C001..!5!56CMM##] ##S^^%E%E "":.&)nn&F&F# /"":.&)nn&:&:# /. 2 +* /...s$   R5 R)2 R5R&)R25R>rS   zrequires OpenSSL >= 1.1.0c                     t         j                  t         j                        }h d}| j                  |j                  |       y )N>   r   rQ   r  r   r9  r  )r
   rm   rb   r  rS   )r   rV   security_level_ranges      r!   test_security_levelz ContextTests.test_security_level^  s7    
 nnS445 
 	c((*>?r#   c                    t         j                  t         j                        }t        t         dd      }| j	                  |j
                  t         j                  |z         t         j                  |_        | j	                  |j
                  t         j                         t         j                  |_        | j	                  |j
                  t         j                         t         j                  |_        | j	                  |j
                  t         j                         t         j                  |_        | j	                  |j
                  t         j                         t         j                  t         j                  z  |_        | j	                  |j
                  t         j                  t         j                  z         | j                  t              5  d |_        d d d        y # 1 sw Y   y xY w)NVERIFY_X509_TRUSTED_FIRSTr   )r
   rm   ra   r_   r   verify_flagsVERIFY_DEFAULTVERIFY_CRL_CHECK_LEAFVERIFY_CRL_CHECK_CHAINVERIFY_ALLOW_PROXY_CERTSVERIFY_X509_STRICTr   r   )r   rV   tfs      r!   test_verify_flagszContextTests.test_verify_flagsq  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%%G.c                 *   t         j                  t         j                        }|j                  t        d        |j                  t        t               | j                  t        |j                  t               | j                  t              5 }|j                  t               d d d        | j                  j                  j                  t        j                         | j                  t         j                  d      5  |j                  t               d d d        | j                  t         j                  d      5  |j                  t                d d d        t         j                  t         j                        }|j                  t"        t$               |j                  t"        t$               |j                  t&        t(               | j                  t         j                  d      5  |j                  t"               d d d        | j                  t         j                  d      5  |j                  t$               d d d        | j                  t         j                  d      5  |j                  t$        t"               d d d        t         j                  t         j                        }t+        j,                  dt*        j.                        }| j                  t         j                  |      5  |j                  t0        t$               d d d        |j                  t2        t4               |j                  t2        t4        j7                                |j                  t2        t9        t4        j7                                      |j                  t"        t:        t4               |j                  t"        t:        t4        j7                                |j                  t"        t:        t9        t4        j7                                      | j                  t        d      5  |j                  t2        d       d d d        | j                  t         j                        5  |j                  t2        d       d d d        | j                  t<        d	      5  |j                  t2        d
dz         d d d        d }d }d }d }d }d }	d }
 G d d      }|j                  t2        |       |j                  t2        |       |j                  t2        |       |j                  t2         |              |j                  t2         |       j>                         | j                  t         j                        5  |j                  t2        |       d d d        | j                  t<        d	      5  |j                  t2        |       d d d        | j                  t        d      5  |j                  t2        |	       d d d        | j                  t@        d      5  |j                  t2        |
       d d d        |j                  t        |
       y # 1 sw Y   xY w# 1 sw Y   WxY w# 1 sw Y   &xY w# 1 sw Y   xY w# 1 sw Y   QxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   |xY w# 1 sw Y   JxY w# 1 sw Y   xY w# 1 sw Y   FxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)N)r   PEM (lib|routines)r   r   z|(
            key values mismatch         # OpenSSL
            |
            KEY_VALUES_MISMATCH         # AWS-LC
        ))passwordzshould be a stringTbadpasszcannot be longer   ai  c                      t         S rY   KEY_PASSWORDrZ   r#   r!   getpass_unicodez:ContextTests.test_load_cert_chain.<locals>.getpass_unicode  s    r#   c                  *    t         j                         S rY   )rs  encoderZ   r#   r!   getpass_bytesz8ContextTests.test_load_cert_chain.<locals>.getpass_bytes  s    &&((r#   c                  <    t        t        j                               S rY   )r   rs  rv  rZ   r#   r!   getpass_bytearrayz<ContextTests.test_load_cert_chain.<locals>.getpass_bytearray  s    \00233r#   c                       y)Nro  rZ   rZ   r#   r!   getpass_badpassz:ContextTests.test_load_cert_chain.<locals>.getpass_badpass  s    r#   c                      ddz  S )Nrp  i   rZ   rZ   r#   r!   getpass_hugez7ContextTests.test_load_cert_chain.<locals>.getpass_huge  s    ;''r#   c                       y)Nr  rZ   rZ   r#   r!   getpass_bad_typez;ContextTests.test_load_cert_chain.<locals>.getpass_bad_type  s    r#   c                      t        d      )Ngetpass error)	ExceptionrZ   r#   r!   getpass_exceptionz<ContextTests.test_load_cert_chain.<locals>.getpass_exception  s    O,,r#   c                       e Zd Zd Zd Zy):ContextTests.test_load_cert_chain.<locals>.GetPassCallablec                     t         S rY   rr  r   s    r!   __call__zCContextTests.test_load_cert_chain.<locals>.GetPassCallable.__call__      ##r#   c                     t         S rY   rr  r   s    r!   getpasszBContextTests.test_load_cert_chain.<locals>.GetPassCallable.getpass  r  r#   N)r{  r  r  r  r  rZ   r#   r!   GetPassCallabler    s    $$r#   r  zmust return a stringr  )!r
   rm   ra   r   r   r   r   r`  NONEXISTINGCERTr   r   r  ENOENTr   r   BADCERT	EMPTYCERTONLYCERTONLYKEYBYTES_ONLYCERTBYTES_ONLYKEYrecompileXr,  CERTFILE_PROTECTEDrs  rv  r   ONLYKEY_PROTECTEDr   r  r  )r   rV   r~  regexrt  rw  ry  r{  r}  r  r  r  s               r!   test_load_cert_chainz!ContextTests.test_load_cert_chain  s#   nnS445Hd3Hh7)S%8%8(Kw'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   Y!Y.Y;2Z0Z.Z"9Z/*Z<)[	[[#=[03[=)\	!Y+.Y8;ZZZ"Z,/Z9<[	[[ #[-0[:=\	\c                    t         j                  t         j                        }|j                  t               |j                  t        d        |j                  t
               |j                  t
        d        | j                  t        |j                         | j                  t        |j                  d d d        | j                  t              5 }|j                  t               d d d        | j                  j                  j                  t        j                         | j                  t         j                  d      5  |j                  t                d d d        |j                  t        t"               |j                  t        t$               | j                  t        |j                  d d       y # 1 sw Y   xY w# 1 sw Y   mxY w)N)r  r%   rl  r%   T)r
   rm   ra   r   r   BYTES_CERTFILEr   r   r`  r  r   r   r  r  r   r   r  r  BYTES_CAPATHr   rV   r~  s      r!   test_load_verify_locationsz'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   F<G<GGc                  	   t        t              5 }|j                         }d d d        t        j	                        }t        t
              5 }|j                         }d d d        t        j	                        }t        j                  t        j                        }| j                  |j                         d   d       |j                  |       | j                  |j                         d   d       |j                  |       | j                  |j                         d   d       |j                  |       | j                  |j                         d   d       t        j                  t        j                        }dj                  ||f      }|j                  |       | j                  |j                         d   d       t        j                  t        j                        }d|d|d	|d
g}|j                  dj                  |             | j                  |j                         d   d       t        j                  t        j                        }|j                  |       |j                  |       | j                  |j                         d   d       |j                  |       | j                  |j                         d   d       t        j                  t        j                        }dj                  ||f      }|j                  |       | j                  |j                         d   d       t        j                  t        j                        }| j                  t        |j                  t               | j                  t        j                   d      5  |j                  d       d d d        | j                  t        j                   d      5  |j                  d       d d d        | j                  t        j                         5  |j                  |dz          d d d        y # 1 sw Y   #xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   mxY w# 1 sw Y   y xY w)Nx509_car   cadatarQ   r  r   headotheragaintailr#   z4no start line: cadata does not contain a certificatebrokenz6not enough data: cadata does not contain a certificates   broken   A)rJ   r,  rK   r
   r-  CAFILE_NEURONIOrm   rb   r   cert_store_statsr   r   r   r   objectr   r   )r   rM   
cacert_pem
cacert_derneuronio_pemneuronio_derrV   combineds           r!   test_load_verify_cadataz$ContextTests.test_load_verify_cadata  s   - AJ !--j9
/"a668L #//= nnS445--/	:A>!!!4--/	:A>!!!6--/	:A>!!!6--/	:A> nnS44599j,78!!!2--/	:A> nnS445Jw &*!!8)<!=--/	:A> nnS445!!!4!!!6--/	:A>!!!4--/	:A> nnS44588Z67!!!2--/	:A> nnS445)S%>%>vN##LLB
 %%X%6	

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

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


 

 -,s;   QQ.Q)Q(#Q4QQQ%(Q14Q=c                 
   t         j                  t         j                        }	 |j                  t               t        j                  dk7  r|j                  t               | j                  t        |j                         | j                  t        |j                  d        | j                  t              5 }|j                  t               d d d        | j                  j                   j"                  t"        j$                         | j                  t         j&                        5 }|j                  t(               d d d        y # t
        $ r t        r| j                  d        w xY w# 1 sw Y   xY w# 1 sw Y   y xY w)N"not supported on Win32 debug buildnt)r
   rm   ra   load_dh_paramsDHFILERuntimeErrorPy_DEBUG_WIN32r  r   r    BYTES_DHFILEr   r   rL   r  r   r   r  r  r   r   r  s      r!   test_load_dh_paramsz ContextTests.test_load_dh_params2  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 8E-)E9"E*-E69Fc                     t         j                  t         j                  hD ]C  }t         j                  |      }| j	                  |j                         dddddddddddd       E y )Nr   )numberr  connect_goodconnect_renegotiateacceptaccept_goodaccept_renegotiatehitsmissestimeouts
cache_full)r
   rb   ra   rm   r   session_statsr   s      r!   test_session_statszContextTests.test_session_statsD  sk    --s/F/FGE..'CS..0 !'( &'3  Hr#   c                 j    t         j                  t         j                        }|j                          y rY   )r
   rm   rb   set_default_verify_pathsr-  s     r!   test_set_default_verify_pathsz*ContextTests.test_set_default_verify_pathsU  s$     nnS445$$&r#   z#ECDH disabled on this OpenSSL buildc                    t         j                  t         j                        }|j                  d       |j                  d       | j	                  t
        |j                         | j	                  t
        |j                  d        | j	                  t        |j                  d       | j	                  t        |j                  d       y )N
prime256v1s
   prime256v1foo   foo)r
   rm   ra   set_ecdh_curver   r   r   r-  s     r!   test_set_ecdh_curvez 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                    t         j                  t         j                        }| j                  t        |j
                         | j                  t        |j
                  d       | j                  t        |j
                  d       | j                  t        |j
                  |       d }|j                  d        |j                  |       y )Nr9  rT  c                      y rY   rZ   )r   
servernamerV   s      r!   dummycallbackz5ContextTests.test_sni_callback.<locals>.dummycallbackn      r#   )r
   rm   ra   r   r   set_servername_callback)r   rV   r  s      r!   test_sni_callbackzContextTests.test_sni_callbacke  s    nnS445 	)S%@%@A)S%@%@!D)S%@%@"E)S%@%@#F	##D)##M2r#   c                     t         j                  t         j                        }|fd}|j                  |       t	        j
                  |      }~~t        j                          | j                   |       d        y )Nc                      y rY   rZ   )r   r  rV   cycles       r!   r  z>ContextTests.test_sni_callback_refcycle.<locals>.dummycallbackw  r  r#   )	r
   rm   ra   r  rV  rW  gccollectr   )r   rV   r  r[  s       r!   test_sni_callback_refcyclez'ContextTests.test_sni_callback_refcycles  sZ     nnS4457: 	##M2[[


bdD!r#   c                    t         j                  t         j                        }| j                  |j	                         dddd       |j                  t               | j                  |j	                         dddd       |j                  t               | j                  |j	                         dddd       |j                  t               | j                  |j	                         dddd       y )Nr   )r  crlx509rQ   r  )	r
   rm   rb   r   r  r   r   r   r,  r-  s     r!   test_cert_store_statsz"ContextTests.test_cert_store_stats  s    nnS445--/!Q/	1H%--/!Q/	1!!(+--/!Q/	1!!-0--/!Q/	1r#   c                 F   t         j                  t         j                        }| j                  |j	                         g        |j                  t               | j                  |j	                         g        |j                  t               | j                  |j	                         ddddddddg       t        t              5 }|j                         }d d d        t         j                        }| j                  |j	                  d      |g       y # 1 sw Y   AxY w)	N)))r,   zRoot CA))r  zhttp://www.cacert.org))r-   zCA Cert Signing Authority))r  zsupport@cacert.orgzMar 29 12:29:49 2033 GMTzMar 30 12:29:49 2003 GMT00)z!https://www.cacert.org/revoke.crlr   )r2   r3   r4   r5   r=   r6   r8   T)r
   rm   rb   r   get_ca_certsr   r   r,  rJ   rK   r-  )r   rV   rM   r3  ders        r!   test_get_ca_certszContextTests.test_get_ca_certs  s    nnS445))+R0!!(+))+R0!!-0))+D 55"'ME  	 - A&&(C !&&s+))$/#7 ! s   DD c                    t         j                  t         j                        }|j                          t         j                  t         j                        }|j                  t         j                  j
                         |j                          t         j                  t         j                        }|j                  t         j                  j                         t         j                  t         j                        }| j                  t        |j                  d        | j                  t        |j                  d       y )Nr  )	r
   rm   rb   load_default_certsr  r  r  r   r   r-  s     r!   test_load_default_certsz$ContextTests.test_load_default_certs  s    nnS445 nnS445s{{667 nnS445s{{667nnS445)S%;%;TB)S%;%;]Kr#   r   znot-Windows specificc                 (   t         j                  t         j                        }t        j                         5 }t
        |d<   t        |d<   |j                          | j                  |j                         dddd       d d d        y # 1 sw Y   y xY w)Nr  r  r   rQ   )r  r  r  )
r
   rm   rb   r   r  r  r   r  r   r  )r   rV   r  s      r!   test_load_default_certs_envz(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                    t         j                  t         j                        }|j                          |j	                         }t         j                  t         j                        }t        j                         5 }t        |d<   t        |d<   |j                          |dxx   dz  cc<   | j                  |j	                         |       d d d        y # 1 sw Y   y xY w)Nr  r  r  rQ   )
r
   rm   rb   r  r  r   r  r  r   r   )r   rV   statsr  s       r!   #test_load_default_certs_env_windowsz0ContextTests.test_load_default_certs_env_windows  s     nnS445 $$&nnS445**,"(C#+C ""$&MQMS113U; -,,s   ;ACCc                    | j                  |j                  t        j                  z  t        j                         t        dk7  r'| j                  |j                  t        z  t               t
        dk7  r'| j                  |j                  t
        z  t
               t        dk7  r'| j                  |j                  t        z  t               t        dk7  r'| j                  |j                  t        z  t               | j                  |j                  t        j                  z  t        rd       y t        j                         y r   )
r   rx  r
   r   rB   rC   rD   rE   OP_LEGACY_SERVER_CONNECTrk   r-  s     r!   _assert_context_optionsz$ContextTests._assert_context_options  s    s6H!S[[+<<.0q S[[+;;-/"S[[+==/1&!+S[[+FF8:s'C'CC.	R474P4P	Rr#   c                    t         j                         }| j                  |j                  t         j                         | j                  |j
                  t         j                         | j                  |j                         | j                  |       t        t              5 }|j                         }d d d        t         j                  t        t              }| j                  |j                  t         j                         | j                  |j
                  t         j                         | j                  |       t         j                  t         j                  j                        }| j                  |j                  t         j                          | j                  |j
                  t         j"                         | j                  |       y # 1 sw Y   "xY w)N)r  r%   r  )r
   create_default_contextr   re   rb   r   r   rG  r   r  rJ   r   rK   r  r  r  ra   r   )r   rV   rM   r  s       r!   test_create_default_contextz(ContextTests.test_create_default_context  s?   ((*s'>'>?#*;*;<**+$$S)*VVXF ((
606 ) 8s'>'>?#*;*;<$$S)(()@)@As'>'>?#--8$$S) s   $GGc                    t         j                         }| j                  |j                  t         j                         | j                  |j
                  t         j                         | j                  |j                         | j                  |       t        t         j                        rt        j                         5  t         j                  t         j                        }d d d        | j                  |j                  t         j                         | j                  |j
                  t         j                         | j                  |       t        j                         5  t         j                  t         j                  t         j                  d      }d d d        | j                  |j                  t         j                         | j                  |j
                  t         j                         | j!                  |j                         | j                  |       t         j                  t         j"                  j$                        }| j                  |j                  t         j&                         | j                  |j
                  t         j                         | j                  |       y # 1 sw Y   xY w# 1 sw Y   +xY w)NT)r   r   )purpose)r
   _create_stdlib_contextr   re   rb   r   r   rQ  r   r  rf   r   r   rX  ru  r   rG  r  r  ra   r-  s     r!   test__create_stdlib_contextz(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   $J8'5K8KKc                    t        j                         5  t        j                  t        j                        }d d d        | j                  j                         | j                  |j                  t        j                         d|_        | j                  |j                         | j                  |j                  t        j                         d|_        t        j                  |_        | j                  |j                         | j                  |j                  t        j                         d|_        t        j                  |_        d|_        | j                  |j                         | j                  |j                  t        j                         d|_        | j                  |j                         | j                  |j                  t        j                         d|_        t        j                  |_        d|_        | j                  |j                         | j                  |j                  t        j                         d|_        | j                  |j                         | j                  |j                  t        j                         | j                  t              5  t        j                  |_        d d d        d|_        | j                  |j                         t        j                  |_        | j                  |j                  t        j                         y # 1 sw Y   xY w# 1 sw Y   xxY wrT  )r   rX  r
   rm   r`   rQ  r   r   r   r   rG  r   r   r   r   r-  s     r!   test_check_hostnamez ContextTests.test_check_hostname  s;   ++-..!1!12C .++,#--8 "**+#*;*;<"++++,#*;*;< #--"++,#--8!**+#*;*;<"++"++,#*;*;<!**+#*;*;< z*!mmCO +"++,--#--8S .-H +*s   $L00L=0L:=Mc                    t         j                  t         j                        }| j                  |j                         | j                  |j                  t         j                         t         j                  t         j                        }| j                  |j                         | j                  |j                  t         j                         y rY   )r
   rm   rb   rG  r   r   r   r   ra   rQ  r   r-  s     r!   test_context_client_serverz'ContextTests.test_context_client_serverA  s    nnS445**+#*;*;< nnS445++,#--8r#   c                     G d dt         j                        } G d dt         j                        }t         j                  t         j                        }||_        ||_        |j                  t        j                         d      5 }| j                  ||       d d d        |j                  t         j                         t         j                         d      }| j                  ||       y # 1 sw Y   TxY w)Nc                       e Zd Zy);ContextTests.test_context_custom_class.<locals>.MySSLSocketNr{  r  r  rZ   r#   r!   MySSLSocketr  M      r#   r  c                       e Zd Zy);ContextTests.test_context_custom_class.<locals>.MySSLObjectNr  rZ   r#   r!   MySSLObjectr  P  r  r#   r  Tr   )r
   r   	SSLObjectrm   ra   sslsocket_classsslobject_classr   r   rB  wrap_bior   )r   r  r  rV   r   r  s         r!   test_context_custom_classz&ContextTests.test_context_custom_classL  s    	#-- 		#-- 	 nnS445))__V]]_$_?4!!$4 @ll3==?CMMOlNc;/ @?s   	C//C8c                    t         j                  t         j                        }| j                  |j                  d       d|_        | j                  |j                  d       d|_        | j                  |j                  d       | j                  t              5  d|_        d d d        | j                  t              5  d |_        d d d        t         j                  t         j                        }| j                  |j                  d       | j                  t              5  d|_        d d d        y # 1 sw Y   xY w# 1 sw Y   zxY w# 1 sw Y   y xY w)Nr  rQ   r   r  )	r
   rm   ra   r   num_ticketsr   r   r   rb   r-  s     r!   test_num_tickestzContextTests.test_num_tickest\  s    nnS445!,!,!,z* CO +y)"CO * nnS445!,z*CO +* +*))
 +*s$   D5 E$E5D>E
EN)/r{  r  r  r'  r.  rs   r  r   r8  rI  r   rR  rX  ignore_deprecationr]  rR   r
   rm   r`  rj  r  r  r  r  r  r  r   r  r  r  r  r  r  skipIfr   r   r  r   Py_DEBUGr  r  r  r  r  r  r  r  rZ   r#   r!   r#  r#    s   
:0 X/14FH	+H	+
&  D,07 L; L;\ X 01#@	@$(WBrL&?@B)$"' X'LMB NB3
"188L X__S\\W,.DEZ FZ X02DEX__W%%JL<L F<R"***<*9X	90  r#   r#  c                   $    e Zd Zd Zd Zd Zd Zy)SSLErrorTestsc                 8   t         j                  dd      }| j                  t        |      d       | j                  |j                  d       t         j                  dd      }| j                  t        |      d       | j                  |j                  d       y )NrQ   r  )r
   r   r   r^   r  SSLZeroReturnError)r   es     r!   test_strzSSLErrorTests.test_strp  st    LLE"Q'!$""1e,Q'!$r#   c                    t         j                  t         j                        }	 | j                  t         j                        5 }|j                  t               d d d        | j                  j                  j                  d       d}| j                  |j                  j                  |       t        |j                        }| j!                  d|v |       y # 1 sw Y   xY w# t        $ r t        r| j                  d        w xY w)Nr  PEMz+(NO_START_LINE|UNSUPPORTED_PUBLIC_KEY_TYPE)NO_START_LINE)r
   rm   rb   r   r   r  r   r  r  r  r   r   libraryassertRegexreasonr^   rG  )r   rV   r~  r  r   s        r!   test_lib_reasonzSSLErrorTests.test_lib_reasonz  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& &"Dc                    t         j                  t         j                        }d|_        t         j                  |_        t        j                  d      5 }t        j                  |j                               }|j                  d       |j                  |dd      5 }| j                  t         j                        5 }|j                          d d d        t        j                         }| j#                  |j%                  d      |       | j'                  |j                   j(                  t         j*                         d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)NFr  r  z%The operation did not complete (read))r
   rm   rb   r   r   r   r   r  create_connectionr  setblockingr   r   SSLWantReadErrordo_handshaker^   r   rG  r   r   r  SSL_ERROR_WANT_READ)r   rV   r   r  r~  s        r!   test_subclassz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	E* E>EA2EE*EEE'	#E**E3c                 x   t         j                         }| j                  t              5  |j	                  t         j                         t         j                         d       d d d        | j                  t              5  |j	                  t         j                         t         j                         d       d d d        | j                  t              5  |j	                  t         j                         t         j                         d       d d d        y # 1 sw Y   xY w# 1 sw Y   lxY w# 1 sw Y   y xY w)NrT  r  z.example.orgzexample.org evil.com)r
   r  r   r   r  r   r   r-  s     r!   test_bad_server_hostnamez&SSLErrorTests.test_bad_server_hostname  s    ((*z*LL#--/)+  - + z*LL#--/)7  9 + y)LL#--/)B  D *) +* +* *)s#   9D 9D$9D0D!$D-0D9N)r{  r  r  r  r   r'  r)  rZ   r#   r!   r  r  n  s    %1"N$
Dr#   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)MemoryBIOTestsc                 z   t         j                         }|j                  d       | j                  |j	                         d       | j                  |j	                         d       |j                  d       |j                  d       | j                  |j	                         d       | j                  |j	                         d       |j                  d       | j                  |j	                  d      d       | j                  |j	                  d      d	       | j                  |j	                  d      d       y )
Nr  r#      bars   foobar   bazr  s   barQ      z)r
   r   r   r   rK   r   bios     r!   test_read_writezMemoryBIOTests.test_read_write  s    mmo		&V,S)		&		&Y/S)		&!e,!d+!c*r#   c                    t         j                         }| j                  |j                         | j	                  |j                         d       | j                  |j                         |j                  d       | j                  |j                         |j                          | j                  |j                         | j	                  |j                  d      d       | j                  |j                         | j	                  |j                  d      d       | j                  |j                         | j	                  |j                         d       | j                  |j                         y )Nr#   r  r  s   forQ      o)	r
   r   rQ  eofr   rK   r   	write_eofrG  r0  s     r!   test_eofzMemoryBIOTests.test_eof  s    mmo!S)!		&!!!e,!!d+ S) r#   c                    t         j                         }| j                  |j                  d       |j	                  d       | j                  |j                  d       t        d      D ]5  }|j                  d       | j                  |j                  d|z
  dz
         7 t        d      D ]2  }|j	                  d       | j                  |j                  |dz          4 |j                          | j                  |j                  d       y )Nr   r  r   rQ   r^  )r
   r   r   pendingr   r  rK   )r   r1  r  s      r!   test_pendingzMemoryBIOTests.test_pending  s    mmoa(		&a(qAHHQKS[[!A#a%0  qAIIdOS[[!A#.  	
a(r#   c                 6   t         j                         }|j                  d       | j                  |j	                         d       |j                  t        d             | j                  |j	                         d       |j                  t        d             | j                  |j	                         d       t        t        d            }|d d d   }| j                  t              5  |j                  t        |             d d d        y # 1 sw Y   y xY w)Nr  r-  r.  s	   noncontig)	r
   r   r   r   rK   r   
memoryviewr   BufferError)r   r1  mnoncontig_writables       r!   test_buffer_typesz MemoryBIOTests.test_buffer_types  s    mmo		&V,		)F#$V,		*V$%V,y./ttW{+IIj!345 ,++s   +DDc                 4   t         j                         }| j                  t        |j                  d       | j                  t        |j                  d        | j                  t        |j                  d       | j                  t        |j                  d       y )Nr  TrQ   )r
   r   r   r   r   r0  s     r!   test_error_typeszMemoryBIOTests.test_error_types  se    mmo)SYY6)SYY5)SYY5)SYY2r#   N)r{  r  r  r2  r7  r:  rA  rC  rZ   r#   r!   r+  r+    s    +! )63r#   r+  c                       e Zd Zd Zd Zy)SSLObjectTestsc                     t         j                         }| j                  t        d      5  t         j	                  ||       d d d        y # 1 sw Y   y xY wr   )r
   r   r   r   r	  r0  s     r!   r   z SSLObjectTests.test_private_init  s9    mmo##I/CDMM#s# EDDs   AAc                    t               \  }}}t        j                         }t        j                         }t        j                         }t        j                         }|j                  |||      }|j                  ||d      }	t	        d      D ]{  }
	 |j                          |j                  r|j                  |j                                	 |	j                          |j                  s]|j                  |j                                } |j                          |	j                          | j                  t        j                        5  |j                          d d d        |j                  |j                                |	j                          |j                  |j                                |j                          y # t        j                  $ r Y 7w xY w# t        j                  $ r Y w xY w# 1 sw Y   xY w)Nr  Tr  r  )r   r
   r   r  r  r%  r$  r9  r   rK   r   unwrap)r   
client_ctx
server_ctxr   c_inc_outs_ins_outclientr  _s              r!   test_unwrapzSSLObjectTests.test_unwrap  s   +:+<(
J}}}}$$T5($K$$T5d$C qA##% }}

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

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

5::<  	

5::< 7 ''  ''  54s0   GG!G;GG!G87G8;HN)r{  r  r  r   rQ  rZ   r#   r!   rE  rE    s    $
(r#   rE  c                       e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	d Z
d	 Z ej                  ej                  d
k(  d      d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)SimpleBackgroundTestsc                    t         j                  t         j                        | _        | j                  j	                  t
               t        | j                        }| j                  |       t        |j                  f| _
        y )Nr  )r
   rm   ra   r   r   r   r  enterContextr  r  server_addr)r   r  s     r!   setUpzSimpleBackgroundTests.setUp   s\    !nnS-D-DE++O<#D,?,?@&! &++.r#   c                    t        t        j                  t        j                        t        j                        5 }|j                  | j                         | j                  i |j                                | j                  |j                         d d d        t        t        j                  t        j                        t        j                  t              5 }|j                  | j                         | j                  |j                                | j                  |j                         d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r   r   )r   r   rU  r
   r   r  rV  r   getpeercertrQ  r   r   r   rG  r   s     r!   test_connectz"SimpleBackgroundTests.test_connect'  s    fmmFNN;&)mm589IId&&'R1Q]]+	5 fmmFNN;&)&7&7%/145IId&&'OOAMMO,Q]]+1 15 51 1s   AD<AE<EEc                 f   t        t        j                  t        j                        t        j                        }| j                  |j                         t        j                  dt        j                        }| j                  t        j                  ||j                  | j                         y )Nr  |(
            certificate verify failed   # OpenSSL
            |
            CERTIFICATE_VERIFY_FAILED   # AWS-LC
        ))r   r   rU  r
   r   r  r  r  r  r  r   r   r  rV  )r   r   r  s      r!   test_connect_failz'SimpleBackgroundTests.test_connect_fail6  sy     V]]6>>:&)&7&79 

  dd	
 	s||U yy$*:*:	<r#   c                 P   t        t        j                  t        j                        t        j                  t
              }| j                  |j                         | j                  d|j                  | j                               | j                  |j                                y )NrY  r   )r   r   rU  r
   r   r   r  r  r   r
  rV  rG  rZ  r   s     r!   test_connect_exz%SimpleBackgroundTests.test_connect_exF  sj    V]]6>>:&)&7&7%/1 	 ALL)9)9:;(r#   c                    t        t        j                  t        j                        t        j                  t
        d      }| j                  |j                         |j                  d       |j                  | j                        }| j                  |dt        j                  t        j                  f       t        j                  g |gg d       	 	 |j!                          	 | j'                  |j)                                y # t        j"                  $ r t        j                  |gg g d       Y n1t        j$                  $ r t        j                  g |gg d       Y nw xY w)NF)r   r   r  r   ro  )r   r   rU  r
   r   r   r  r  r#  r
  rV  r  r  EINPROGRESSr  selectr%  r$  SSLWantWriteErrorrG  rZ  r   r   r  s      r!   test_non_blocking_connect_exz2SimpleBackgroundTests.test_non_blocking_connect_exO  s    V]]6>>:&)&7&7%/49; 	 	e\\$**+b1e//1B1BCDb1#r3'0  	( '' 0qc2r3/(( 0b1#r3/0 s   D ,E#5+E#"E#c                    t         j                  t         j                        }d|_        t         j                  |_        |j                  t        j                  t        j                              5 }|j                  | j                         | j                  i |j                                d d d        |j                  t        j                  t        j                        d      5 }|j                  | j                         d d d        t         j                  |_        |j                  t               |j                  t        j                  t        j                              5 }|j                  | j                         |j                         }| j!                  |       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)NFdummyr  )r
   rm   rb   r   r   r   r   r   rU  r  rV  r   rZ  r   r   r   rG  r   rV   r   r  s       r!   test_connect_with_contextz/SimpleBackgroundTests.test_connect_with_contexti  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$   2<F0*F=*=G	0F:=G	Gc                    t         j                  t         j                        }|j                  t	        j                  t        j
                        t              }| j                  |j                         t        j                  dt        j                        }| j                  t         j                  ||j                  | j                         y )Nr  r]  )r
   rm   rb   r   r   rU  r   r  r  r  r  r  r   r   r  rV  )r   rV   r   r  s       r!   test_connect_with_context_failz4SimpleBackgroundTests.test_connect_with_context_fail}  s     nnS445OOMM&..)4  
 	 

  dd	
 	s||U !		4+;+;	=r#   c                    t         j                  t         j                        }|j                  t               |j                  t        j                  t        j                        t              5 }|j                  | j                         |j                         }| j                  |       d d d        t         j                  t         j                        }|j                  t               |j                  t        j                  t        j                        t              5 }|j                  | j                         |j                         }| j                  |       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r  )r
   rm   rb   r   r  r   r   rU  r   r  rV  rZ  rG  r  ri  s       r!   test_connect_capathz)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   2=E.(=E:.E7:Fc                    t        t              5 }|j                         }d d d        t        j	                        }t        j                  t        j                        }|j                  |       |j                  t        j                  t        j                        t              5 }|j                  | j                         |j                         }| j                  |       d d d        t        j                  t        j                        }|j                  |       |j                  t        j                  t        j                        t              5 }|j                  | j                         |j                         }| j                  |       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r  )rJ   r   rK   r
   r-  rm   rb   r   r   r   rU  r   r  rV  rZ  rG  )r   rM   r3  r  rV   r   r  s          r!   test_connect_cadataz)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#+=F0=F<#F-0F9<Gr  z*Can't use a socket as a file under Windowsc                 N   t        t        j                  t        j                              }|j                  | j                         |j                         }|j                         }|j                          t        j                  |d       |j                          t        j                          | j                  t              5 }t        j                  |d       d d d        | j                  j                  j                   t         j"                         y # 1 sw Y   >xY wr   )r   r   rU  r  rV  filenomakefiler  r   rK   r  r  r   r`  r   r   r  EBADF)r   rZ  fdrM   r  s        r!   test_makefile_closez)SimpleBackgroundTests.test_makefile_close  s    
 fmmFNN;<


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


w'1GGBN (**EKK8 ('s   DD$c                 f   t        j                   t         j                        }|j                  | j                         |j	                  d       t        |t        j                  d      }| j                  |j                         d}	 	 |dz  }|j                          	 t        j                  r#t         j"                  j%                  d|z         y y # t        j                  $ r t        j                  |gg g        Y n0t        j                  $ r t        j                  g |gg        Y nw xY w)NFr   r  r   rQ   z9
Needed %d calls to do_handshake() to establish session.
)r   rU  r  rV  r#  r   r
   r   r  r  r%  r$  rc  rd  r   r   r   r   r   )r   r   counts      r!   test_non_blocking_handshakez1SimpleBackgroundTests.test_non_blocking_handshake  s    MM&..)			$""#	eQ&)mm49; 	 +
 
 ??JJZ]bbc 	 '' +qc2r*(( +b1#r*+ s   C +D/*D/.D/c                 >    t        | g| j                  dt        i y )Nr  )_test_get_server_certificaterV  r   r   s    r!   test_get_server_certificatez1SimpleBackgroundTests.test_get_server_certificate  s    $TND,<,<N:Nr#   c           	         | j                   \  }}g fd}| j                  j                  |       t        j	                  ||f      }|s| j                  d|d|d       t        j	                  ||ft              }|s| j                  d|d|d       t        j                  r)t        j                  j                  d|d|d|d       | j                  ||g       y )	Nc                 (    j                  |       y rY   )append)ssl_sockserver_nameinitial_contextserver_namess      r!   servername_cbzLSimpleBackgroundTests.test_get_server_certificate_sni.<locals>.servername_cb  s    ,r#   No server certificate on :!r   
Verified certificate for  is
r   )rV  r   r  r
   get_server_certificater0  r   r   r   r   r   r   r   )r   hostr  r  r3  r  s        @r!   test_get_server_certificate_sniz5SimpleBackgroundTests.test_get_server_certificate_sni  s    %%
d	-33MB(($6II4FG(($
(KII4FG??JJDRVX[\]d|4r#   c                 0    t        | g| j                    y rY   )!_test_get_server_certificate_failrV  r   s    r!    test_get_server_certificate_failz6SimpleBackgroundTests.test_get_server_certificate_fail  s     	*$B1A1ABr#   c                     d }| j                   j                  |       | j                  t        j                        5  t
        j                  | j                  t        d       d d d        y # 1 sw Y   y xY w)Nc                 .    t        j                  d       y )N皙?)r   sleepr  r  r  s      r!   r  zPSimpleBackgroundTests.test_get_server_certificate_timeout.<locals>.servername_cb  s    JJsOr#   皙?)r   rr  )	r   r  r   r   rr  r
   r  rV  r   )r   r  s     r!   #test_get_server_certificate_timeoutz9SimpleBackgroundTests.test_get_server_certificate_timeout  sY    	33MBv~~.&&t'7'7*/2 ' 4 /..s   'A..A7c                     t        t        j                  t        j                        t        j                  d      5 }|j                  | j                         d d d        t        t        j                  t        j                        t        j                  d      5 }|j                  | j                         d d d        | j                  t        j                  d      5  t        j                  t        j                        5 }t        |t        j                  d      }|j                  | j                         d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   *xY w# 1 sw Y   y xY w)Nr)  )r   r   r*  r+  r,  )	r   r   rU  r
   r   r  rV  r   r   )r   r   r   s      r!   r.  z"SimpleBackgroundTests.test_ciphers
  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#$E48E(?E4EE%(E1	-E44E=c                    t         j                  t         j                        }|j                  t               | j                  |j                         g        |j                  t        j                  t        j                        d      5 }|j                  | j                         |j                         }| j                  |       d d d        | j                  t        |j                               d       y # 1 sw Y   3xY w)Nr  r.   r  rQ   )r
   rm   rb   r   r  r   r  r   r   rU  r  rV  rZ  rG  rd   ri  s       r!   test_get_ca_certs_capathz.SimpleBackgroundTests.test_get_ca_certs_capath  s    nnS445!!!0))+R0__V]]6>>:-8  :=>IId&&'==?DOOD!	:
 	S--/0!4: :s   =C==Dc                    t         j                  t         j                        }|j                  t               t         j                  t         j                        }|j                  t               t        j
                  t
        j                        }|j                  |d      5 }|j                  | j                         | j                  |j                  |       | j                  |j                  j                  |       ||_        | j                  |j                  |       | j                  |j                  j                  |       d d d        y # 1 sw Y   y xY w)Nr  r.   r  )r
   rm   rb   r   r  r   rU  r   r  rV  r   r   _sslobj)r   ctx1ctx2r   rZ  s        r!   test_context_setgetz)SimpleBackgroundTests.test_context_setget$  s    ~~c556""&"1~~c556""&"1MM&..)a=JJt''(MM"**d+MM"**,,d3BJMM"**d+MM"**,,d3 >==s   )B'EE"c                    |j                  dt        j                        }d}t        j                  |      D ]}  }	d }
|dz  }	  || }|j                         }|j                  |       |
 nK|
t        j                  k(  sI|j                  d      }|r|j                  |       n|j                           t        j                  r.t        j                   j                  d||j"                  fz         S # t        j
                  $ rD}|j                  t        j                  t        j                  fvr |j                  }
Y d }~d }~ww xY w)Nrr  r   rQ   i   z"Needed %d calls to complete %s().
)r   r   SHORT_TIMEOUT
busy_retryr
   r   r  r&  SSL_ERROR_WANT_WRITErK   sendallra  r   r6  r   r   r   r{  )r   r   incomingoutgoingrw   ru   r   rr  ry  rP  r  retr  bufs                 r!   ssl_io_loopz!SimpleBackgroundTests.ssl_io_loop3  s"    **Y(=(=>##G,AEQJE Dk --/CLL }#111ii&NN3'&&(/ -0 ??JJB %t}}56 7
- <<  773#:#:#&#;#;#= =	 s   C88E9E

Ec                    t        j                   t         j                        }| j                  |j                         |j	                  | j
                         t        j                         }t        j                         }t        j                  t        j                        }| j                  |j                         | j                  |j                  t        j                         |j                  t                |j#                  ||dt$              }| j'                  |j(                  j*                  |       | j-                  |j/                                | j-                  |j1                                | j-                  |j3                                | j5                  t6        |j8                         dt        j:                  v r3|j1                         dk7  r | j-                  |j=                  d             | j?                  ||||j@                         | j                  |j/                                | j-                  |j3                                | jC                  |j1                                | j                  |j9                                dt        j:                  v r3|j1                         dk7  r | j                  |j=                  d             	 | j?                  ||||jD                         | j5                  t        jH                  |jJ                  d       y # t        jF                  $ r Y Aw xY w)NFr  TLSv1.3r  )&r   rU  r  r  r  rV  r
   r   rm   rb   rG  r   r   r   r   r   r   r  r   r   r  ownerr  cipherr8   shared_ciphersr   r   rZ  r  r  r  r%  assertIsNotNonerH  SSLSyscallErrorr   r   )r   r   r  r  rV   sslobjs         r!   test_bio_handshakez(SimpleBackgroundTests.test_bio_handshakeU  sK   }}V^^,

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

#T%%&==?==?nnS445"--h%8x63F3FGx6<<EtXxdKh'x6==Ar#   c                    t               \  }}}t        j                  t        j                        5 }|j                  | j                         t
        j                         }t
        j                         }|j                  |||      }| j                  ||||j                         |j                          | j                  t
        j                  |j                         d d d        y # 1 sw Y   y xY w)Nr  )r   r   rU  r  rV  r
   r   r  r  r%  r6  r   SSLEOFErrorrK   )r   r   r   r   r   r  r  r  s           r!   test_transport_eofz(SimpleBackgroundTests.test_transport_eof  s    3B3D0]]6>>*dLL))*}}H}}H#,,Xx=E - GFT8Xv7J7JK  coov{{; +**s   B0C++C4N)r{  r  r  rW  r[  r^  r`  rf  rj  rl  rn  rp  rs   r  r   r    rv  rz  r}  r  r  r  r.  r  r  r  r  r  r  rZ   r#   r!   rS  rS    s    I/,< ))4"(=&"."* X__RWW_&RS9 T9$d*O5*C
4,
54 D">HB"<r#   rS  networkc                       e Zd Zd Z ej
                  ej                  d       ej                  d      d               Z
y)NetworkedTestsc                 6   t        j                  t              5  t        t	        j                  t        j
                        t        j                  d      }| j                  |j                         |j                  d       |j                  t        df      }|dk(  r| j                  d       n$|t        j                  k(  r| j                  d       | j                  |t        j                   t        j"                  f       d d d        y # 1 sw Y   y xY w)NFrx  gHz>  r   z!REMOTE_HOST responded too quicklyzNetwork unreachable.)r   transient_internetREMOTE_HOSTr   r   rU  r
   r   r  r  rp  r
  r  r  ENETUNREACHr  EAGAINr  re  s      r!   test_timeout_connect_exz&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                     t        j                  d      5  t        | dd       t        | dd       d d d        y # 1 sw Y   y xY w)Nzipv6.google.comr  )r   r  r|  r  r   s    r!    test_get_server_certificate_ipv6z/NetworkedTests.test_get_server_certificate_ipv6  s:     --.?@(/@#F-d4EsK A@@s	   :AN)r{  r  r  r  rs   r  r   IPV6_ENABLEDr   requires_resourcer  rZ   r#   r!   r  r    sI    A  X33\BWz*L + CLr#   r  c           	      @   t         j                  ||f      }|s| j                  d|d|d       t         j                  ||f|      }|s| j                  d|d|d       t        j                  r*t
        j                  j                  d|d|d|d       y y )Nr  r  r  r  r  r  r   )r
   r  r0  r   r   r   r   r   )testr  r  r  r3  s        r!   r|  r|    s}    

$
$dD\
2C		tTBC

$
$dD\D
$
AC		tTBC

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

  !,	- 
9	8s3   B+AB+B(,2B#B+#B((B++B4)make_https_serverc                   n    e Zd Z G d dej                        Z	 	 	 	 	 ddZd Zd ZddZ	d Z
d	 Zd
 Zy)r  c                   2    e Zd Z	 d Zd Zd Zd Zd Zd Zy)$ThreadedEchoServer.ConnectionHandlerc                     || _         d| _        || _        || _        | j                  j	                  d       d | _        t        j                  j                  |        d| _	        y NFT)
r  runningr   addrr#  sslconn	threadingThread__init__daemon)r   r  connsockr  s       r!   r  z-ThreadedEchoServer.ConnectionHandler.__init__  sR     DK DL DIDIII!!$'DL%%d+DKr#   c                    	 | j                   j                  j                  | j                  d      | _        | j                   j
                  j                  | j                  j                                | j                   j                  j                  | j                  j                                | j                   j                  j                  t        j                  k(  r| j                  j                         }t        j                  rN| j                   j                  r8t         j"                  j%                  dt'        j(                  |      z   dz          | j                  j                  d      }t        j                  rd| j                   j                  rN| t         j"                  j%                  d       n,t         j"                  j%                  dt+        |       d       | j                  j-                         }t        j                  rD| j                   j                  r.t         j"                  j%                  dt/        |      z   dz          y# t0        t2        t4        f$ r}| j                   j6                  j                  t/        |             | j                   j                  r$t9        d	t;        | j<                        z   d
z          d| _        | jA                          Y d }~yd }~wt        jB                  tD        f$ r}| j                   j6                  j                  t/        |             | j                   j                  r$t9        d	t;        | j<                        z   d
z          |jF                  tF        jH                  k7  r*t         jJ                  dk7  rd| _        | jA                          Y d }~yd }~ww xY w)NTr  z client cert is r   z client did not provide a cert
z cert binary is zb
z" server: connection cipher is now z'
 server:  bad connection attempt from z:
Fdarwin)&r  r   r   r   r  selected_alpn_protocolsr  selected_alpn_protocolr  r   r
   r   rZ  r   r   chattyr   r   r   r  r  rd   r  r^   ConnectionResetErrorBrokenPipeErrorConnectionAbortedErrorconn_errorsr   r   r  r  r  r   r`  r  
EPROTOTYPEr   )r   r  cert_binaryr  r  s        r!   	wrap_connz.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&   A3I O.A?K22OB/OOc                     | j                   r| j                   j                         S | j                  j                  d      S )Nr  )r  rK   r   ra  r   s    r!   rK   z)ThreadedEchoServer.ConnectionHandler.read	  s/    ||||((**yy~~d++r#   c                     | j                   r| j                   j                  |      S | j                  j                  |      S rY   )r  r   r   re  )r   r  s     r!   r   z*ThreadedEchoServer.ConnectionHandler.write"	  s1    ||||))%00yy~~e,,r#   c                     | j                   r| j                   j                          y | j                  j                          y rY   )r  r  r   r   s    r!   r  z*ThreadedEchoServer.ConnectionHandler.close(	  s'    ||""$		!r#   c                    d| _         | j                  j                  s| j                         sy | j                   r	 | j	                         }|j                         }|s@d| _         	 | j                  j                         | _        d | _        | j                          n|dk(  rVt        j                  r5| j                  j                  rt        j                  j!                  d       | j                          y | j                  j                  rm|dk(  rht        j                  r5| j                  j                  rt        j                  j!                  d       | j!                  d       | j                         sy | j                  j                  r| j                  r|dk(  rt        j                  r5| j                  j                  rt        j                  j!                  d	       | j!                  d       | j                  j                         | _        d | _        t        j                  r| j                  j                  rt        j                  j!                  d
       n|dk(  rt        j                  r5| j                  j                  rt        j                  j!                  d       | j                  j#                  d      }| j!                  t%        |      j'                  d      dz          nK|dk(  rst        j                  r5| j                  j                  rt        j                  j!                  d       	 | j                  j)                          | j!                  d       n|dk(  r@| j                  j/                         | j!                  d       n| j!                  d       n|dk(  rH| j                  j/                         }| j!                  t%        |      j'                  d      dz          nA|dk(  rR| j                  j0                  j3                         }| j!                  t5        |      j7                  dd      dz          n|dk(  rR| j                  j0                  j9                         }| j!                  t5        |      j7                  dd      dz          nt        j                  rd| j                  j                  rN| j                  xr dxs d}t        j                  j!                  d|d|d|j;                         d|d	       | j!                  |j;                                | j                   ry y # t        $ r Y w xY w# t*        j,                  $ r6}| j!                  t%        |      j'                  d      dz          Y d }~dd }~ww xY w# t        $ r}| j                  j<                  rDt        j                  r4t?        |t@              rtC        d | jD                          ntG        d!       	 | j!                  d"       n# t        $ r Y nw xY w| j                          d| _         Y d }~d }~ww xY w)#NTFs   overz" server: client closed connection
   STARTTLSz2 server: read STARTTLS from client, sending OK...
   OK
   ENDTLSz0 server: read ENDTLS from client, sending OK...
z* server: connection is now unencrypted...
s   CB tls-uniquez@ server: read CB tls-unique from client, sending our CB data...
r  us-ascii   
   PHAz( server: initiating post handshake auth
   HASCERT   TRUE
   FALSE
   GETCERTs   VERIFIEDCHAINrQ   bigs   UNVERIFIEDCHAIN	encryptedunencryptedz server: read z (z), sending back z)...
z Connection reset by peer: zTest server failure:
s   ERROR
)$r  r  starttls_serverr  rK   stripr  rH  r   r`  r  r   r   connectionchattyr   r   r   r  r   rv  verify_client_post_handshaker
   r   rZ  r  get_verified_chainrd   to_bytesget_unverified_chainr  r  r]   ConnectionErrorprintr  r   )r   msgstrippedr   r  r  certsctypes           r!   runz(ThreadedEchoServer.ConnectionHandler.run.	  s~   DL;;..~~',,Y)))+C"yy{H#',0(,(;(;(=DI ,0DL

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

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

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

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

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

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

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

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

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

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

9??$%		r#   c                 R    d| _         | j                          | j                          y NF)r  stopr   r   ru   s     r!   __exit__zThreadedEchoServer.__exit__	  s     				r#   c                 ~    | j                   st        d      || _        t        j                  j                  |        y )N4ThreadedEchoServer must be used as a context manager)r  r   r  r  r  r  r   r  s     r!   r  zThreadedEchoServer.start	  s8    FH H	t$r#   c                    | j                   st        d      | j                  j                  d       | j                  j	                  d       d| _        | j                  r| j                  j                          | j
                  r	 | j                  j                         \  }}t        j                  r:| j                  r.t        j                  j                  dt        |      z   dz          | j!                  | ||      }|j#                          |j%                          | j
                  r| j/                          y # t&        $ r=}t        j                  r#t        j                  j                  d|d       Y d }~_d }~wt(        $ r | j+                          Y }t,        $ rT}t        j                  r:| j                  r.t        j                  j                  dt        |      z   dz          Y d }~d }~ww xY w)	Nr  g      ?r  Tz server:  new connection from r   z connection timeout z connection handling failed: )r  r   r   rp  listenr  r  r  r  r   r   r  r   r   r   r   r	  r  r   TimeoutErrorKeyboardInterruptr  BaseExceptionr  )r   newconnconnaddrhandlerr  s        r!   r  zThreadedEchoServer.run	  su   FH H		S!		99IIMMOkkJ$(II$4$4$6!??t{{JJ$$%E'+H~&68<&= >00wI kk& 	

   E??JJ$$';A5%CD$ 		  J??t{{JJ$$7$q'ADHJJs,   BE   	G;	3FG;G;'A
G66G;c                 `    | j                   "| j                   j                          d | _         y y rY   )r   r  r   s    r!   r  zThreadedEchoServer.close	  s&    99 IIOODI !r#   c                     d| _         y r  )r  r   s    r!   r  zThreadedEchoServer.stop	  s	    r#   )
NNNNTFFNNNrY   )r{  r  r  r  r  r	  r  r  r  r  r  r  r  rZ   r#   r!   r  r    sL    ~)I,, ~)@ 6:(,FK $'+	!!F%>
r#   r  c                   b    e Zd Z G d dej                        Zd Zd Zd Zd Z	ddZ
d	 Zd
 Zy)AsyncoreEchoServerc                   H    e Zd Z G d dej                        Zd Zd Zd Zy)AsyncoreEchoServer.EchoServerc                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)/AsyncoreEchoServer.EchoServer.ConnectionHandlerc                     t        |d|d      | _        t        j                  j	                  | | j                         d| _        | j                          y )NTF)r   r   r  )r   r   r	   dispatcher_with_sendr  _ssl_accepting_do_ssl_handshake)r   connr   s      r!   r  z8AsyncoreEchoServer.EchoServer.ConnectionHandler.__init__	  sI    .t7?FKM --66tT[[I&*#&&(r#   c                     t        | j                  t        j                        rK| j                  j	                         dkD  r.| j                          | j                  j	                         dkD  r.y)Nr   T)r]   r   r
   r   r9  handle_read_eventr   s    r!   readablez8AsyncoreEchoServer.EchoServer.ConnectionHandler.readable	  sO    dkk3==9++--/!3..0 ++--/!3r#   c                    	 | j                   j                          d| _        y # t        j                  t        j
                  f$ r Y y t        j                  $ r | j                         cY S t        j                  $ r  t        $ r?}|j                  d   t        j                  k(  r| j                         cY d }~S Y d }~y d }~ww xY w)NFr   )r   r%  r3  r
   r$  rd  r  handle_closer   r`  ru   r  ECONNABORTEDr   errs     r!   r4  zAAsyncoreEchoServer.EchoServer.ConnectionHandler._do_ssl_handshake
  s    0KK,,. +0D' ,,c.C.CD  /,,..||  3xx{e&8&88#0022 93s'   $ #C	"C-C/C7CCc                 :   | j                   r| j                          y | j                  d      }t        j                  r+t
        j                  j                  dt        |      z         |s| j                          y | j                  |j                                y )Nr  z server:  read %s from client
)r3  r4  ra  r   r   r   r   r   r   r  re  r  )r   r   s     r!   handle_readz;AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_read
  sf    &&**,99T?D

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

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

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

  !H$!NO""8T]];r#   c                       rY   rZ   r   s    r!   r   z*AsyncoreEchoServer.EchoServer.handle_error3
  s    r#   N)	r{  r  r  r	   r2  r	  r  rG  r   rZ   r#   r!   
EchoServerr.  	  s$    1	 = = 1	f		<
	r#   rI  c                     d | _         d| _        | j                  |      | _        | j                  j                  | _        t
        j                  j                  |        d| _        y r  )	r  r  rI  r  r  r  r  r  r  )r   r   s     r!   r  zAsyncoreEchoServer.__init__6
  sL    	ooh/KK$$	!!$'r#   c                 P    d| j                   j                  d| j                  dS )N<r~   >)rz  r{  r  r   s    r!   __str__zAsyncoreEchoServer.__str__>
  s     NN33T[[AAr#   c                     | j                  t        j                                | j                  j	                          | S rY   )r  r  r  r  r  r   s    r!   r  zAsyncoreEchoServer.__enter__A
  s(    

9??$%		r#   c                    t         j                  rt        j                  j	                  d       | j                          t         j                  rt        j                  j	                  d       | j                          t         j                  rt        j                  j	                  d       t        j                  d       y )Nz cleanup: stopping server.
z! cleanup: joining server thread.
z cleanup: successfully joined.
T)
ignore_all)	r   r   r   r   r   r  r   r	   	close_allr  s     r!   r  zAsyncoreEchoServer.__exit__F
  sp    ??JJ;<		??JJAB		??JJ?@d+r#   Nc                 P    || _         t        j                  j                  |        y rY   )r  r  r  r  r   s     r!   r  zAsyncoreEchoServer.startR
  s    	t$r#   c                     d| _         | j                  r| j                  j                          | j                   r$	 t        j                  d       | j                   r#y y #  Y xY w)NTrQ   )r  r  r  r	   loopr   s    r!   r  zAsyncoreEchoServer.runV
  sH    99IIMMOkka  kks   A A#c                 F    d| _         | j                  j                          y r  )r  r  r  r   s    r!   r  zAsyncoreEchoServer.stop`
  s    r#   rY   )r{  r  r  r	   rD  rI  r  rN  r  r  r  r  r  rZ   r#   r!   r,  r,  	  s;    Bh)) BHB

,%r#   r,  c                    	 i }t        ||d      }|5  | j                  t        j                         ||      5 }	|	j                  t        |j
                  f       |t        |      t        |      fD ]  }
|r2t        j                  r"t        j                  j                  d|z         |	j                  |
       |	j                         }|r2t        j                  r"t        j                  j                  d|z         ||j                         k7  st        d|d d t!        |      |d d j                         t!        |      fz         |	j                  d       |r/t        j                  rt        j                  j                  d	       |j#                  |	j%                         |	j'                         |	j)                         |	j+                         |	j-                         |	j.                  |	j0                  d
       |	j3                          d d d        |j4                  |d<   |j6                  |d<   d d d        |S # 1 sw Y   1xY w# 1 sw Y   |S xY w)NFr   r  r  )r   session client:  sending %r...
 client:  read %r
4bad data <<%r>> (%d) received; expected <<%r>> (%d)
      over
 client:  closing connection.
)compressionr  peercertclient_alpn_protocolr8   session_reusedrY  server_alpn_protocolsserver_shared_ciphers)r  r   r   r  r  r  r   r=  r   r   r   r   r   rK   r  AssertionErrorrd   r  r`  r  rZ  r  r8   rc  rY  r  r  r  )r   r   indatar  r  sni_namerY  r  r  r   argoutdatas               r!   server_params_testrk  d
  s    E'-168F 
'' (' ( ;>?IItV[[)*	& 1:f3EF#

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

(()>)HIflln,(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C>I&II	IIc                    	 |t         j                  }t         j                  dt         j                  dt         j                  di|   }t        j
                  rU|xr dxs d}t        j                  j                  |t         j                  |      t         j                  |       |fz         t        j                         5  t         j                  |      }|xj                  |z  c_        t         j                  |       }	|	xj                  |z  c_        d d d        t        j                  |d       }
|
Rt!        	d      rF| t         j"                  k(  r3|	j$                  |
kD  r$t        j                         5  |
|	_        d d d        j&                  t         j"                  k(  r|j)                  d       t+        	|       ||	fD ]3  }||_        |j/                  t0               |j3                  t4               5 	 t7        ||	dd	      }|s8t9        d
t         j                  |      dt         j                  |       d      |dur||d   k7  rt9        d|d|d         y y # 1 sw Y   TxY w# 1 sw Y   xY w# t         j:                  $ r |r Y y t<        $ r*}|s|j>                  t>        j@                  k7  r Y d }~y d }~ww xY w)Nr   r   r   z %s->%s %s
z {%s->%s} %s
rP   r)  F)r  r  zClient protocol z  succeeded with server protocol r  Tr8   zversion mismatch: expected z, got )!r
   r   r   r   r   r   r   r   r   get_protocol_namer   rX  rm   rx  PROTOCOL_TO_TLS_VERSIONr   rR   r`   rP   re   rT   rW   r   r   r   r   r   rk  rf  r   r`  r  
ECONNRESET)server_protocolclient_protocolexpect_success	certsreqsserver_optionsclient_optionscerttype	formatstrr   r   min_versionrV   r  r  s                 r!   try_protocol_combory  
  s    MM	{?? 	H
 #6K;K	

//@//@"$$ 	%
 
	'	'	)8.08.0 
* *--otDK N$56s///**[8 ++--8N* . #"2"22""5)7/#O,!!*- 0G">>*/%I  ((9((9;< < D( E)$44 $2E)4D"F G G 5 )c 
*	)" .-( <<   QWW(8(88 9s7   AI)9I6>J )I36I?KK" KKc                 V    | j                         D ]  }|D ]  }d| |d   v s  y  y)NzKx=descriptionTF)r5  )rV   aliasesr  aliass       r!   supports_kx_aliasr~  
  s8    //#EUG}} 55  $ r#   c                   v   e Zd Z ej                  d      d        Zd Zd Zd Z e	j                  ej                  d      d        Zd Zd	 Zd
 Zd Z ed      d        Zd Zd Zd Z ed      d        Z ed      d        Z ed      d        Z ed      d        Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z' ed      d&        Z( ed       ed      e)d'                      Z* ed      e)d(               Z+ ed       ed      e)d)                      Z, ed      d*        Z-d+ Z. e	j                  d,ej^                  v d-      d.        Z0d/ Z1 e	j                   e2ed0      d1      d2        Z3d3 Z4d4 Z5d5 Z6d6 Z7d7 Z8d8 Z9d9 Z:d: Z;d; Z<d< Z=d= Z>d> Z?d? Z@d@ ZAdA ZBdB ZCdC ZDdD ZEdE ZFyF)GThreadedTestsr  c           	      F   	 t         j                  rt        j                  j	                  d       t               \  }}}| j                  t        j                  t        j                        5  t        ||dd|       d d d        d|_        | j                  t        j                  t        j                        5  | j                  t        j                        5 }t        ||dd|       d d d        | j                  dt        j                                d d d        | j                  t        j                  t        j                        5  | j                  t        j                        5 }t        ||dd       d d d        | j                  dt        j                                d d d        | j                  t        j                  t        j                        5  | j                  t        j                        5 }t        ||dd       d d d        | j                  dt        j                                d d d        y # 1 sw Y   xY w# 1 sw Y   mxY w# 1 sw Y   MxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   vxY w# 1 sw Y   y xY w)Nr   )rO  r  T)r   r   r  r  rh  Fz@Cannot create a client socket with a PROTOCOL_TLS_SERVER context)r   r   r  r  )r   r   r   r   r   r   r   r
   rb   ra   rk  r   r   r   r  r^   r   )r   r   r   r   r  s        r!   	test_echozThreadedTests.test_echo
  s   @??JJT"3B3D0\\!8!8AXAX\Y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   .I= I&I.-I& I?2I3-I?& JJ-JII#	I&&I03I<	8I??JJ	JJ c                    t         j                  rt        j                  j	                  d       t               \  }}}t        |d      }|5  |j                  t        j                         d|      5 }|j                  t        |j                  f       | j                  t              5  |j                          d d d        |j                          |j                         }| j!                  |d       |j#                         }t         j                  rct        j                  j	                  t%        j&                  |      dz          t        j                  j	                  dt)        |      z   dz          d|vr'| j+                  d	t%        j&                  |      z         d
|d   vr| j+                  d       | j-                  d|       | j-                  d|       t.        j1                  |d         }t.        j1                  |d         }	| j3                  ||	       d d d        d d d        y # 1 sw Y   yxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   Fr   r  )r  r   Can't get peer certificate.zConnection cipher is z.
r6   z$No subject field in certificate: %s.r+   zkMissing or invalid 'organizationName' field in certificate subject; should be 'Python Software Foundation'.r4   r3   )r   r   r   r   r   r   r  r   r   r  r  r  r   r   rZ  r%  rG  r  r  r  r^   r0  r  r
   r  rE  )
r   r   r   r   r  r   r  r  beforeafters
             r!   test_getpeercertzThreadedTests.test_getpeercert  s   ??JJT"3B3D0#N5I++FMMODI<D , FIJ		4-. &&z2MMO 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47I +H3<E&I "I3H=8I  I		IIc                    t         j                  rt        j                  j	                  d       t               \  }}}t        t        dd      }| j                  |j                  t        j                  |z         t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                   f       |j#                         }| j%                  |d       d d d        d d d        |xj                  t        j&                  z  c_	        t        |d      }t)        j*                  dt(        j,                        }|5  |j                  t        j                         |      5 }| j/                  t        j0                  |      5  |j                  t        |j                   f       d d d        d d d        d d d        |j3                  t4               t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                   f       |j#                         }| j%                  |d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   PxY w# 1 sw Y   y xY w)	Nr   rb  r   Tr  r  r  r]  )r   r   r   r   r   r   r_   r
   r   rc  rd  r  r   r   r  r  r  rZ  rG  re  r  r  r  r   r   r   CRLFILE)	r   r   r   r   ri  r  r   r  r  s	            r!   test_crl_checkzThreadedTests.test_crl_check=  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1AI;5J&J-!J!""JJ!J- &K&AJ9*K;J	 JJJJ!!J*	&J--J69K	>KKc                    t         j                  rt        j                  j	                  d       t               \  }}}t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       |j                         }| j                  |d       d d d        d d d        t        |d      }t        j                  dt        j                         }|5  |j                  t        j                         d      5 }| j#                  t$        j&                  |      5  |j                  t        |j                  f       d d d        d d d        d d d        t        |d      }|5  t        j                         5 }| j#                  t(        d      5  |j                  |       d d d        d d d        d d d        y # 1 sw Y   ,xY w# 1 sw Y   1xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   XxY w# 1 sw Y   \xY w# 1 sw Y   y xY w)	Nr   Tr  r  r  r]  invalidz'check_hostname requires server_hostname)r   r   r   r   r   r   r  r   r   r  r  r  rZ  rG  r  r  r  r   r
   CertificateErrorr   )r   r   r   r   r  r   r  r  s           r!   r  z!ThreadedTests.test_check_hostnamej  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.3AG!7G.:&H !H"G;#H+H
H7H+6HH+H7!G+	&G..G8;H HH	HHH($H++H4	0H77I z)test requires hostname_checks_common_namec                    t               \  }}}d|_        t        |d      }|5  |j                  t	        j                         |      5 }|j                  t        |j                  f       d d d        d d d        t        t              \  }}}d|_        t        |d      }|5  |j                  t	        j                         |      5 }| j                  t        j                        5  |j                  t        |j                  f       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   2xY w# 1 sw Y   6xY w# 1 sw Y   y xY w)NFTr  r  )r   rU  r  r   r   r  r  r  r   r   r
   SSLCertVerificationErrorr  s         r!   rX  z.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_   &D3"D'-D3&&E E,"D?EE'D0	,D33D<?EEE	EE c                    t         j                  t         j                        }|j                  t               |j                  d       t        }t         j                  t         j                        }|j                  t               t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       |j!                         }| j#                  |d       |j%                         d   j'                  d      }| j#                  |d d d	       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w
NzECDHE:ECDSA:!NULL:!aRSATr  r  r  r   -r  )ECDHEECDSA)r
   rm   rb   r   r   rT   SIGNED_CERTFILE_ECC_HOSTNAMEra   r   SIGNED_CERTFILE_ECCr  r   r   r  r  r  rZ  rG  r  splitr   r   r   r   r  r   r  r  s           r!   test_ecc_certzThreadedTests.test_ecc_cert  s   (?(?@,,Z8""#<=/(?(?@&&':; $N4H++FMMO<D , FIJ		4-.}}&CDA,,S1r
,>?F VF F Vs%   &E=A;E	8E	E	EEc                 *   t         j                  t         j                        }|j                  t               t         j
                  j                  |_        |j                  d       t        }t         j                  t         j                        }|j                  t               |j                  t               t        |d      }|5  |j                  t!        j                          |      5 }|j#                  t$        |j&                  f       |j)                         }| j+                  |d       |j-                         d   j/                  d      }| j+                  |d d d	       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wr  )r
   rm   rb   r   r   r   rl   ri   rT   r  ra   r   r  r   r  r   r   r  r  r  rZ  rG  r  r  r  s           r!   test_dual_rsa_ecczThreadedTests.test_dual_rsa_ecc  s0   (?(?@,,Z8 *-)?)?&""#<=/(?(?@&&':;&&7 $N4H++FMMO<D , FIJ		4-.}}&CDA,,S1r
,>?F VF F Vs%   &F	1A;E=,F	=F	F		Fc                 $   t         j                  rt        j                  j	                  d       t
        j                  t
        j                        }|j                  t               t
        j                  t
        j                        }t
        j                  |_        d|_        |j                  t               g d}|D ]  \  }}t!        |d      }|5  |j#                  t%        j$                         |      5 }| j'                  |j(                  |       |j+                  t,        |j.                  f       |j1                         }| j'                  |j(                  |       | j3                  |d       d d d        d d d         t!        |d      }|5  |j#                  t%        j$                         d      5 }| j5                  t
        j6                        5  |j+                  t,        |j.                  f       d d d        d d d        d d d        t!        |d      5 }t9        j:                  |       5  | j5                  t<              5  |j#                  t%        j$                         d       d d d        d d d        d d d        t!        |d      5 }t9        j:                  |       5  | j5                  t>              5  |j#                  t%        j$                         d	       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   ^xY w# 1 sw Y   #xY w# 1 sw Y   (xY w# 1 sw Y   -xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)
Nr   T))u   könig.idn.pythontest.netxn--knig-5qa.idn.pythontest.net)r  r  )s   xn--knig-5qa.idn.pythontest.netr  )u(   königsgäßchen.idna2003.pythontest.net.xn--knigsgsschen-lcb0w.idna2003.pythontest.net)r  r  )s.   xn--knigsgsschen-lcb0w.idna2003.pythontest.netr  ).xn--knigsgchen-b4a3dun.idna2008.pythontest.netr  )s.   xn--knigsgchen-b4a3dun.idna2008.pythontest.netr  r  r  r  zpython.example.orgz.pythontest.nets   knig.idn.pythontest.net) r   r   r   r   r   r
   rm   ra   r   IDNSANSFILErb   r   r   r   r   r   r  r   r   r   r   r  r  r  rZ  rG  r   r  r   r  UnicodeErrorUnicodeDecodeError)	r   r   r   idn_hostnamesr   expected_hostnamer  r   r  s	            r!   test_check_hostname_idnz%ThreadedTests.test_check_hostname_idn  s   ??JJT"(?(?@&&{3..!8!89!//!%%%j1
. 3@.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 
  tD ::4@&&|4'',= ( ? 5 A E
  tD ::4@&&'9:'',J ( L ; A ED)J J  =<K K V 54 A@ ED ;: A@ EDs   &L=A<L	9L&L=  L0 "L#L0
L='M"=M&M
9MM"N4M:
&M.0M:8N	LLL 	#L-(L00L:	5L==M
MMM	M""M+.M73M::N	?NNc                 >   	 t               \  }}}|j                  t               t        j                  |_        t        j                  j                  |_        t        |dd      }|5  |j                  t        j                         |      5 }	 |j                  t        |j                  f       | j                  d       d d d        d d d        y # t        j                   $ r<}t"        j$                  r"t&        j(                  j+                  d|z         Y d }~[d }~wt,        $ rZ}|j.                  t.        j0                  k7  r t"        j$                  r"t&        j(                  j+                  d|z         Y d }~d }~ww xY w# 1 sw Y   xY w# 1 sw Y   y xY w)NTrX  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   rl   ri   r  r   r   r  r  r  r0  r   r   r   r   r   r   r`  r  ro  r   r   r   r   r  r   r  s          r!   test_wrong_cert_tls12z#ThreadedTests.test_wrong_cert_tls12  sC   	
 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2FFF'2DFF*AE?:F?FFF	FFrZ  c                    t               \  }}}|j                  t               t        j                  |_        t        j                  j                  |_        t        j                  j                  |_        t        |dd      }|5  |j                  t        j                         |d      5 }|j                  t        |j                  f       | j                  t        j                   d      5  |j#                  d       |j%                  d       |j#                  d       |j%                  d       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)	NTrX  Fr   suppress_ragged_eofsz4alert unknown ca|EOF occurred|TLSV1_ALERT_UNKNOWN_CA   datar  s   should have failed already)r   r   r   r
   r   r   r   rZ  rP   r  r   r   r  r  r  r   r   r   rK   r  s         r!   test_wrong_cert_tls13z#ThreadedTests.test_wrong_cert_tls13=  s   3B3D0&&x0%(%6%6"),)?)?&),)?)?&#"4$
 ''8@=B ( DGHIItV[[)*''F
  t56t	D V
 	D D Vs>   'E&.AE0AE5E=E&EEE#	E&&E/c                     	 t        j                         t        j                         t        j                         t        j                  t
              fd} fd}t        j                  |      }|j                          	  |        |j                          y # |j                          w xY w)Nc                      j                          j                          j                         \  } }| j                          j                          j                          y rY   )r"  r  r  r  )newsockr  listener_gonelistener_readyr   s     r!   listenerz2ThreadedTests.test_rude_shutdown.<locals>.listenerf  sE    HHJ HHJMGTMMOGGIr#   c                     j                          t        j                         5 } | j                  t        f       j                          	 t	        |       }j                  d       d d d        y # t        $ r Y w xY w# 1 sw Y   y xY w)Nz2connecting to closed SSL socket should have failed)r  r   r  r  r   r0  r`  )r  r  r  r  r  r   s     r!   	connectorz3ThreadedTests.test_rude_shutdown.<locals>.connectorn  sx    !A		4,'""$T/2H IIRS !
   !s/   (BA4B4	B =B?B  BBtarget)	r  r  r   r   r	  r  r  r  r   )r   r  r  rJ  r  r  r  r   s   `   @@@@r!   test_rude_shutdownz ThreadedTests.test_rude_shutdownX  s    	 #*!)MMO&&q$/	 
	T H-			KFFHAFFHs   B+ +B=c                    t         j                  rt        j                  j	                  d       t
        j                  t
        j                        }|j                  t               t
        j                  t
        j                        }t        |d      }|5  |j                  t        j                         t              5 }	 |j                  t         |j"                  f       | j%                  d       d d d        d d d        y # t
        j&                  $ r}d}| j)                  |t
        j*                         | j-                  |j.                  d       | j-                  |j0                  |       d| d	}| j3                  t5        |      |       t7        j8                  d
t6        j:                        }| j3                  t5        |      |       Y d }~d }~ww xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   Tr  r  zExpected connection failurez&unable to get local issuer certificater]  (z|CERTIFICATE_VERIFY_FAILED)z(
                        certificate verify failed   # OpenSSL
                        |
                        CERTIFICATE_VERIFY_FAILED   # AWS-LC
                    ))r   r   r   r   r   r
   rm   ra   r   r   rb   r  r   r   r   r  r  r  r0  r   rB  r  r   verify_codeverify_messager  r   r  r  r  )r   r   r   r  r   r  r  r  s           r!   test_ssl_cert_verify_errorz(ThreadedTests.test_ssl_cert_verify_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   *G/G#2D	8G/	G B:GG#G  G##G,	(G//G8c                 $   	 t         j                  rt        j                  j	                  d       t        d      r)t        t        j                  t        j                  d       t        t        j                  t        j                  d       t        d      r)t        t        j                  t        j                  d       t        d      r8t        t        j                  t        j                  dt        j                         t        t        j                  t        j                  dt        j                         t        d      r8t        t        j                  t        j                  dt        j                         t        d      r8t        t        j                  t        j                  dt        j                         t        t        j                  t        j                  dt        j                         t        d      r8t        t        j                  t        j                  dt        j                         t        d      r9t        t        j                  t        j                  dt        j                         t        t        j                  t        j                  dt        j                  t        j                  z         t        d      r:t        t        j                  t        j                  dt        j                         y y )Nr   r   FTr   )rt  )r   r   r   r   r   rc   ry  r
   r`   r   r   r   r   r   r   r   r   s    r!   test_PROTOCOL_TLSzThreadedTests.test_PROTOCOL_TLS  s   H??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                 Z   	 t         j                  rt        j                  j	                  d       t        t        j                  t        j                  d       t        t        j                  t        j                  dt        j                         t        t        j                  t        j                  dt        j                         t        t        j                  t        j                  dt        j                         t        t        j                  t        j                  d       y )Nr   r   Fru  )r   r   r   r   r   ry  r
   r   r   r   r`   r   r   r   s    r!   test_protocol_sslv3z!ThreadedTests.test_protocol_sslv3  s    G??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                 p   	 t         j                  rt        j                  j	                  d       t        t        j                  t        j                  d       t        t        j                  t        j                  dt        j                         t        t        j                  t        j                  dt        j                         t        d      r)t        t        j                  t        j                  d       t        t        j                  t        j                  dt        j                         y )Nr   r   r   Fr  )r   r   r   r   r   ry  r
   r   r   r   rc   r   r`   r   r   s    r!   test_protocol_tlsv1z!ThreadedTests.test_protocol_tlsv1  s    F??JJT"3--s/A/A7K3--s/A/A7CL]L]^3--s/A/A7CL]L]^7#s1133E3EuM3--s/?/?*-//	;r#   r   c                    	 t         j                  rt        j                  j	                  d       t        t        j                  t        j                  d       t        d      r)t        t        j                  t        j                  d       t        t        j                  t        j                  dt        j                         t        t        j                  t        j                  d       t        t        j                  t        j                  d       t        t        j                  t        j                  d       y )Nr   TLSv1.1r   Fr  )r   r   r   r   r   ry  r
   r   rc   r   r`   r   ru  r   s    r!   test_protocol_tlsv1_1z#ThreadedTests.test_protocol_tlsv1_1  s    	2??JJT"3//1E1EyQ7#s33S5G5GO3//1A1A5*-*;*;	= 	3++S-A-A9M3//1E1EuM3//1E1EuMr#   rl   c                    	 t         j                  rt        j                  j	                  d       t        t        j                  t        j                  dt        j                  t        j                  z  t        j                  t        j                  z         t        d      r)t        t        j                  t        j                  d       t        t        j                  t        j                  dt        j                         t        t        j                  t        j                  d       t        t        j                        rRt        t        j                  t        j                  d       t        t        j                  t        j                  d       t        t        j                         rSt        t        j                  t        j                   d       t        t        j                   t        j                  d       y y )Nr   TLSv1.2)rt  ru  r   Fr  )r   r   r   r   r   ry  r
   ru  r   r   rc   r   r`   r   rf   r   r   r   s    r!   test_protocol_tlsv1_2z#ThreadedTests.test_protocol_tlsv1_2  s;   	2??JJT"3//1E1Ey*-//#//*I*-//#//*I	L 7#s33S5G5GO3//1A1A5*-*;*;	= 	3++S-A-A9MC../s33S5G5GOs1133G3GOC001s33S5I5I5Qs33S5I5I5Q 2r#   c                 D   	 d}t        t        ddd      }d}|5  t        j                         }|j                  d       |j	                  t
        |j                  f       t        j                  rt        j                  j                  d       |D ]  }t        j                  r"t        j                  j                  d|z         |r"j                  |       |j                         }n"|j                  |       |j                  d      }|j                         j!                         }|dk(  rQ|j#                  d	      r@t        j                  r"t        j                  j                  d
|z         t%        |      }d}|dk(  rW|j#                  d	      rFt        j                  r"t        j                  j                  d|z         j'                         }d}Lt        j                  s^t        j                  j                  d|z          t        j                  rt        j                  j                  d       |rj                  d       n|j                  d       |rj)                          n|j)                          d d d        y # 1 sw Y   y xY w)N)s   msg 1s   MSG 2r  s   MSG 3s   msg 4r  s   msg 5s   msg 6T)r  r  r  Fr   rZ  r  r  s   okz/ client:  read %r from server, starting TLS...
r  z- client:  read %r from server, ending TLS...
z client:  read %r from server
r_  r^  )r  r   r   r#  r  r  r  r   r   r   r   r   rK   re  ra  r  r  r   r   rH  r  )	r   msgsr  wrappedr   rg  r5  rj  r  s	            r!   test_starttlszThreadedTests.test_starttls   s   Dc#H48+/59; AMM$IItV[[)*

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

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

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

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

  !BC

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

	] VVs   GJ1BJJc                    	 t        | t              }t        j                  rt        j
                  j                  d       t        t        d      5 }|j                         }d d d        d}d|j                   d}t        j                  t              }t        j                  j!                  ||      }	 |j#                         j%                  d	      }|ret'        |      d
kD  rW|j                  t'        |            }t        j                  r-t        j
                  j                  dt)        |      |fz         |j+                          | j-                  |       y # 1 sw Y   xY w# |j+                          w xY w)Nr  r   rbrT  zhttps://localhost:z/test_ssl.pyr  r  zcontent-lengthr   z/ client: read %d bytes from remote server '%s'
)r  r   r   r   r   r   r   rJ   r   rK   r  r
   r  r   urllibrequesturlopeninfor   rC  rd   r  r   )r   r  rM   r4  r6  urlr   dlens           r!   test_socketserverzThreadedTests.test_socketserver9  s   F"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"9BE/ "E,/Fc           
         	 t         j                  rt        j                  j	                  d       d}t        t              }|5  t        t        j                               }|j                  d|j                  f       t         j                  r"t        j                  j	                  d|z         |j	                  |       |j                         }t         j                  r"t        j                  j	                  d|z         ||j                         k7  r>| j                  d|d d t        |      |d d j                         t        |      fz         |j	                  d       t         j                  rt        j                  j	                  d	       |j                          t         j                  rt        j                  j	                  d
       d d d        y # 1 sw Y   y xY w)Nr   r  r'  rZ  r[  r\  r]  r^  r_  z client:  connection closed.
)r   r   r   r   r   r,  r   r   r   r  r  rK   r  r0  rd   r  )r   rg  r  r   rj  s        r!   test_asyncore_serverz"ThreadedTests.test_asyncore_serverS  sN   5??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GG&c                 z
   	 t         j                  rt        j                  j	                  d       t        t        t        j                  t        j                  t        dd      }|5  t        t        j                         dt        t        t        j                        j                  t        |j                  f       fd}fd}dj                  dg t         fd	j"                  dd
gt         fdj$                  dg d fg}dj&                  dg fdj(                  dd
gfd|dg fd|dg fg}d}|D ]  \  }}}	}
}||z   j+                  d      }	  ||g|
 }dj-                  |      }| j/                  | ||      |       j1                         }||j3                         k7  r=| j5                  dj-                  ||d d t!        |      |d d t!        |                    |D ]  \  }}}	}
||z   j+                  d      }	 j                  |        ||
 }||j3                         k7  r=| j5                  dj-                  ||d d t!        |      |d d t!        |                    d}j                  |       t=        t!        |            }| j/                  j1                  d|      t!        |             | j/                  ||       t>        ^t>        j@                  t!        |      z  }|jC                  |      }j%                  |       | j/                  j1                         |       | jE                  tF        jH                         | jE                  tF        jJ                  dg       | jE                  tF        jL                  d        | jE                  tF        jN                  t=        d       g       j	                  d!       | jE                  t6        j&                  d       | jE                  t6        j0                  d       jQ                          d d d        y # t6        $ rj}|	r!| j5                  dj-                  |             t9        |      j;                  |      s"| j5                  dj-                  ||             Y d }~kd }~ww xY w# t6        $ rz}|	r!| j5                  dj-                  |             t9        |      j;                  |      s"| j5                  dj-                  ||             j1                          Y d }~;d }~ww xY w# 1 sw Y   y xY w)"Nr   TFr  r  r  r  r  r   r   r   r   c                  F    t        d      } j                  |       }| d | S Nsd                                                                                                       )r   rb  )bry  r   s     r!   
_recv_intoz0ThreadedTests.test_recv_send.<locals>._recv_into  s&    i(A%y r#   c                  L    t        d      } j                  |       \  }}| d | S r  )r   rd  )r  ry  r  r   s      r!   _recvfrom_intoz4ThreadedTests.test_recv_send.<locals>._recvfrom_into  s+    i(ooa0t%y r#   re  rf  zsome.addressr  c                      y rY   rZ   )r  s    r!   <lambda>z.ThreadedTests.test_recv_send.<locals>.<lambda>  s    4r#   ra  rc  rb  rd  PREFIX_asciizsending with {}r  zpWhile sending with <<{name:s}>> bad data <<{outdata:r}>> ({nout:d}) received; expected <<{indata:r}>> ({nin:d})
r]  )r    rj  noutrg  ninz>Failed to send with method <<{name:s}>>; expected to succeed.
r   zFMethod <<{name:s}>> failed with unexpected exception message: {exp:s}
)r    expzrWhile receiving with <<{name:s}>> bad data <<{outdata:r}>> ({nout:d}) received; expected <<{indata:r}>> ({nin:d})
zAFailed to receive with method <<{name:s}>>; expected to succeed.
r  r  r_  r^  ))r   r   r   r   r   r  r   r
   r   ra   r   r   r  r  r  re  rd   rf  r  ra  rc  rv  formatr   rK   r  r0  r   r^   r   r   ctypesc_ubytefrom_buffer_copyr   rg  rh  ri  rj  rk  r  )r   r  r  r  send_methodsrecv_methodsdata_prefix	meth_name	send_methrr  ru   ret_val_methrg  r  r  rj  r  	recv_methr   bufferubyte	bytesliker   s                         @r!   test_recv_sendzThreadedTests.test_recv_sendp  s   .??JJT"#H-0]]030G0G,4+/5:<  ,1)1)1*---	9A
 IItV[[)*!
! r3/188U^,<cBAIItR@L r*QZZ0@Aj$3 .%<	L $K &2"I~t %	199'B#F2T2C+229=C$$S,v*>C$HffhG&,,.0		BBH&%.%(\'-cr{F CI C &2> ?K:	9nd%	199'BFF6N'.G&,,.0		BBH&%.%(\'-cr{F CI C ?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		;;A6%.A <B <: " %		55;VV5K q6,,Y7		;;A6%.A <B < FFHHa Vsf   )C,T1BP5* T1A&R+1F;T15	R(>AR#T1#R((T1+	T.4A/T)#T1)T..T11T:c                    t        t              }| j                  |       t        j                  t
        |j                  f      }| j                  |j                         t        |d      }| j                  |j                         |j                  d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                         d       |j                  d       | j                  |j                  d      d       | j                  |j                  t!                     d       y )NFr  r  r   r#   )r  r   rU  r   r"  r  r  r  r  r   re  r   ra  rK   r#  rb  r   )r   r  r   s      r!   test_recv_zerozThreadedTests.test_recv_zero  s    #H-&!$$dFKK%89 QU;  	
wC(C(7+ 	
eC(Y[115r#   c                    t        t              }| j                  |       t        j                  t
        |j                  f      }| j                  |j                         t        |d      }| j                  |j                         |j                  d       t        j                  dddg      }| j                  |j                  |      d       | j                  t        |      d d d        G d dt              }|j                  d        |d	      }| j                  |j                  |      d       | j                  t        |      d
       y )NFr  r  Ir   r9  c                       e Zd Zd Zy);ThreadedTests.test_recv_into_buffer_protocol_len.<locals>.Bc                     ddz   y NrQ   r   rZ   r   s    r!   __len__zCThreadedTests.test_recv_into_buffer_protocol_len.<locals>.B.__len__  s	    !r#   N)r{  r  r  r  rZ   r#   r!   Br    s    r#   r  r  s   data  )r  r   rU  r   r"  r  r  r  r  r   re  arrayr   rb  r  r   )r   r  r   r  r  s        r!   "test_recv_into_buffer_protocol_lenz0ThreadedTests.test_recv_into_buffer_protocol_len  s    #H-&!$$dFKK%89 QU; 	wkk#1v&S)1-sBQ1		 	 	
wdS)1-s[1r#   c                 8   t        t        t        j                  t        j                  t        dd      }|5  t        t        j                         dt        t        t        j                        j                  t        |j                  f       j                  d       t        d      fd}| j                  t        j                  t        j                  f|       j                  d       j                          d d d        y # 1 sw Y   y xY w)NTFr  r  i    c                  *    	 j                          rY   )re  )r  r   s   r!   fill_bufferz8ThreadedTests.test_nonblocking_send.<locals>.fill_buffer3  s    FF3K r#   )r  r   r
   r   ra   r   r   r  r  r  r#  r   r   rd  r$  r  )r   r  r  r  r   s      @@r!   test_nonblocking_sendz#ThreadedTests.test_nonblocking_send   s    #H-0]]030G0G,4+/5:<  ,1)1)1*---	9A
 IItV[[)*MM%  D/C  s44"3356AC MM$GGI) VVs   CDDc                    t        j                   t         j                        d}t        j                        }t	        j
                         dfd}t	        j                  |      }|j                          j                          	 	 t        j                   t         j                        }|j                  d       |j                  ||f       | j                  t        dt        |       |j                          	 t        j                   t         j                        }t        |      }|j                  d       | j                  t        d|j                  ||f       |j                          	 d|j                          j                          y # j                          w xY w# |j                          w xY w# d|j                          j                          w xY w)Nr'  Fc                     j                          j                          g } sFt        j                  gg g d      \  }}}|v r"| j                  j	                         d          sF| D ]  }|j                           y )Nr  r   )r"  r  rc  r  r  r  )connsr+  wr  r   finishr  starteds        r!   servez3ThreadedTests.test_handshake_timeout.<locals>.serveE  ss    MMOKKME --"b#>1aQ; LL!34  

 r#   r  r  z	timed outT)r   rU  r   r	  r  r  r  r  r  rp  r  r   r#  r   r  r   )	r   r  r  r  rJ  r  r  r  r  s	         @@@r!   test_handshake_timeoutz$ThreadedTests.test_handshake_timeout=  s^   v~~.&&v.//#	 E*			MM&..1S!		4,'&&|['7< 	MM&..1$Q'S!&&|['(yy4,@ 	FFFHLLN 	 	FFFHLLNs8   A#F 6G A#F3 *G F00G 3GG $G,c                 Z  
 t               \  }}}t        j                  t        j                        d}t        j                        }|j                  d      | j                  j                         t        j                         
d d 
fd}t        j                  |      }|j                          
j                          |j                  t        j                         |      }|j                  ||f       |j                  d       |j                          |j!                         }	|j#                          |j%                          j#                          j#                          | j'                  t(        j*                         | j-                  |	       y )Nr'  Tr  c                      j                           j                          j                         \  j                  j	                  d             y )Nr9  )r"  r  r  re  ra  )evtpeerremoter  s   r!   r  z/ThreadedTests.test_server_accept.<locals>.serve{  s8    MMOGGI!==?LFDKKA'r#   r  r  r  )r   r   rU  r   r	  r   rG  r   r  r  r  r  r  r  re  ra  r  r  r   rB  r
   r   r   )r   rI  rJ  r   r  r  r  rJ  rO  client_addrr  r  r  r  s             @@@@r!   test_server_acceptz ThreadedTests.test_server_acceptn  s?    ,;+<(
Jv~~.&&v.''D'A**+oo	( E*		
''MMOX ( 
 	$'(G((*	fcmm4{+r#   c                    t         j                  t         j                        }d|_        |j	                  t        j
                               5 }| j                  t              5 }|j                          d d d        | j                  j                  j                  t        j                         d d d        y # 1 sw Y   FxY w# 1 sw Y   y xY wr  )r
   rm   rb   r   r   r   r   r`  rZ  r   r   r  ENOTCONNr   r   r   r~  s       r!   test_getpeercert_enotconnz'ThreadedTests.test_getpeercert_enotconn  s    ..!8!89!&  1T""7+r  " ,R\\//@ 21++ 21$   C$B:5<C:C	?CCc                    t         j                  t         j                        }d|_        |j	                  t        j
                               5 }| j                  t              5 }|j                          d d d        | j                  j                  j                  t        j                         d d d        y # 1 sw Y   FxY w# 1 sw Y   y xY wr  )r
   rm   rb   r   r   r   r   r`  r%  r   r   r  r  r  s       r!   test_do_handshake_enotconnz(ThreadedTests.test_do_handshake_enotconn  s    ..!8!89!&  1T""7+r!!# ,R\\//@ 21++ 21r   c                 ,   t               \  }}}t        j                  j                  |_        |j                  d       |j                  d       t        |      5 }|j                  t        j                         |      5 }| j                  t              5  |j                  t        |j                  f       d d d        d d d        d d d        | j                  dj                  d          y # 1 sw Y   9xY w# 1 sw Y   =xY w# 1 sw Y   AxY w)NAES128AES256r  r  NO_SHARED_CIPHERr   )r   r
   r   rl   ri   rT   r  r   r   r   r`  r  r  r  r  r  r  s         r!   test_no_shared_ciphersz$ThreadedTests.test_no_shared_ciphers  s    3B3D0),)?)?&""8,""8,76++FMMO<D , FIJ&&w/IItV[[12 0F 8
 	(&*<*<Q*?@ 0/F F 87s<   &D
C>"C2:C>D
2C;7C>>D	D

Dc                    	 t         j                  t         j                        }d|_        t         j                  |_        t        t        t         j                  d      5 }|j                  t        j                               5 }| j                  |j                         d        | j                  |j                  d        |j                  t        |j                   f       | j#                  |j                         d       d d d        | j                  j                  d        | j                  |j                         d        d d d        y # 1 sw Y   NxY w# 1 sw Y   y xY w)NF)r  r  r  )r
   rm   rb   r   r   r   r  r   ra   r   r   r   r8   r  r  r  r  r   )r   r   r  r   s       r!   test_version_basicz ThreadedTests.test_version_basic  s    	 ..!8!89!&!mm,/,C,C',.17$$V]]_5aiik40aii.		4-.  i8	 6
 MM!))T*MM!))+t,. . 65. .s&   !$EA>EAEE	EE%c                    t               \  }}}t        j                  j                  |_        t        |      5 }|j                  t        j                         |      5 }|j                  t        |j                  f       | j                  |j                         d   h d       | j                  |j                         d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r  r   >   TLS_AES_128_GCM_SHA256TLS_AES_256_GCM_SHA384TLS_CHACHA20_POLY1305_SHA256r  )r   r
   r   rZ  rP   r  r   r   r  r  r  r  r  r   r8   r  s         r!   test_tls1_3zThreadedTests.test_tls1_3  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$$C-c                 P   t               \  }}}t        j                  j                  |_        t        j                  j
                  |_        t        j                  j
                  |_        t        j                  j
                  |_        t        |      5 }|j                  t        j                         |      5 }|j                  t        |j                  f       | j                  |j                         d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r  r  )r   r
   r   r   rP   rl   ri   r  r   r   r  r  r  r   r8   r  s         r!   test_min_max_version_tlsv1_2z*ThreadedTests.test_min_max_version_tlsv1_2  s     4C3D0),)=)=&),)?)?&),)?)?&),)?)?&76++FMMO<D , FIJ		4-.  i8F 87F F 87s%   &D=AD?DD	DD%c                 h   t               \  }}}t        j                  j                  |_        t        j                  j
                  |_        t        j                  j                  |_        t        j                  j                  |_        t        ||       t        |      5 }|j                  t        j                         |      5 }|j                  t        |j                  f       | j                  |j!                         d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r  r  )r   r
   r   r   rP   rl   ri   r   rW   r  r   r   r  r  r  r   r8   r  s         r!   test_min_max_version_tlsv1_1z*ThreadedTests.test_min_max_version_tlsv1_1  s     4C3D0),)=)=&),)?)?&),)=)=&),)?)?&NN;76++FMMO<D , FIJ		4-.  i8F 87F F 87s%   #&D(	ADD(D%	!D((D1c                    t               \  }}}t        j                  j                  |_        t        j                  j                  |_        t        j                  j                  |_        t        j                  j                  |_        t        ||       t        |      5 }|j                  t        j                         |      5 }| j                  t        j                        5 }|j                  t        |j                  f       d d d        | j!                  t#        j$                        d       d d d        d d d        y # 1 sw Y   ?xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r  z(alert|ALERT))r   r
   r   rl   ri   rP   r   rW   r  r   r   r   r   r  r  r  r  r^   r   r  s          r!   test_min_max_version_mismatchz+ThreadedTests.test_min_max_version_mismatch  s    4C3D0),)?)?&),)?)?&),)=)=&),)=)=&NN;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8E!	EEE	E!!E*c                 *   t               \  }}}t        j                  j                  |_        t        j                  j                  |_        t        j                  j                  |_        t        ||       t        |      5 }|j                  t        j                         |      5 }|j                  t        |j                  f       | j                  |j                         d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r  r   )r   r
   r   r   rP   ri   rW   r  r   r   r  r  r  r   r8   r  s         r!   test_min_max_version_sslv3z(ThreadedTests.test_min_max_version_sslv3  s    3B3D0),)=)=&),)=)=&),)=)=&NN;76++FMMO<D , FIJ		4-.  g6F 87F F 87s%   &D	*AC=,D	=D	D		Dc                    t               \  }}}t        j                  j                  |_        t        |      5 }|j                  t        j                         |      5 }|j                  t        |j                  f       | j                  d|j                         d          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  r  ECDHr   )r   r
   r   rl   ri   r  r   r   r  r  r  r  r  r  s         r!   test_default_ecdh_curvez%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B6%C6B?	;CCr  r  c                    	 t         j                  rt        j                  j	                  d       t               \  }}}t        j                  j                  |_	        t        |dd      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       |j!                  d      }t         j                  r.t        j                  j	                  dj#                  |             | j%                  |       |j'                         dk(  r| j)                  t+        |      d	       n| j)                  t+        |      d
       |j	                  d       |j-                         j/                         }| j)                  |t1        |      j3                  d             d d d        |j                  t        j                         |      5 }|j                  t        |j                  f       |j!                  d      }t         j                  r.t        j                  j	                  dj#                  |             | j5                  |       | j%                  |       |j'                         dk(  r| j)                  t+        |      d	       n| j)                  t+        |      d
       |j	                  d       |j-                         j/                         }| j)                  |t1        |      j3                  d             d d d        d d d        y # 1 sw Y   wxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   TFrX  r  r  z! got channel binding data: {0!r}
r  0      s   CB tls-unique
r  z(got another channel binding data: {0!r}
)r   r   r   r   r   r   r
   r   rl   ri   r  r   r   r  r  r  r  r  r  r8   r   rd   rK   r  r   rv  assertNotEqual)	r   r   r   r   r  r   cb_datapeer_data_reprnew_cb_datas	            r!   r  z-ThreadedTests.test_tls_unique_channel_binding+  s    	/??JJT"3B3D0 *-)?)?&#N+/5:< ++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%L.9-M&D7L;M.L8	3M;M	 MMc                     t               \  }}}t        ||dd|      }t        j                  r1t        j
                  j                  dj                  |d                | j                  |d   h d       y )NTr  r  rh  z got compression: {!r}
r`  >   NRLEZLIB)	r   rk  r   r   r   r   r   r  r  r   r   r   r   r  s        r!   test_compressionzThreadedTests.test_compressionk  sg    3B3D0">>*.,46 ??JJ7>>u]?STUeM*,CDr#   rB   z*ssl.OP_NO_COMPRESSION needed for this testc                     t               \  }}}|xj                  t        j                  z  c_        |xj                  t        j                  z  c_        t	        ||dd|      }| j                  |d   d        y )NTrB  r`  )r   rx  r
   rB   rk  r   rE  s        r!   test_compression_disabledz'ThreadedTests.test_compression_disabledt  sm     4C3D0#"7"77#"7"77">>*.,46 	eM*D1r#   c                     t               \  }}}|xj                  t        j                  z  c_        t	        ||dd|       y NTrB  r   rx  r
   r  rk  r   r   r   r   s       r!   test_legacy_server_connectz(ThreadedTests.test_legacy_server_connect  s<    3B3D0#">">>>>*.,4	6r#   c                     t               \  }}}|xj                  t        j                   z  c_        t	        ||dd|       y rJ  rK  rL  s       r!   test_no_legacy_server_connectz+ThreadedTests.test_no_legacy_server_connect  s?    3B3D03#?#?"??>>*.,4	6r#   c                 2   t               \  }}}h d}t        ||      rt        ||      s| j                  d       t        j                  j
                  |_        	 |j                  t               |j                  d       t        j                  j
                  |_        t        ||dd|      }|d   d   }|j                  d	      }|j                  |      s| j                  d
|d   z          y y # t        $ r t        r| j                  d        w xY w)N>   ADHDHEEDHz#libssl doesn't support ephemeral DHr  kEDHTrB  r  r   r  zNon-DH key exchange: )r   r~  r  r
   r   rl   ri   r  r  r  r  rT   rk  r  rF  r0  )r   r   r   r   dhe_aliasesr  r  partss           r!   test_dh_paramszThreadedTests.test_dh_params  s    4C3D0+!.+>%nkBMM?@),)?)?&	))&1
 	""6*),)?)?&">>*.,46 x#S!''.II-q	9: /  	BC	s   C4 4"Dc                    t               \  }}}|j                  d       |j                  d       t        j                  j
                  |_        t        ||dd|      }t               \  }}}|j                  d       |j                  d       t        j                  j
                  |_        t        ||dd|      }t               \  }}}|j                  d       |j                  d       |j                  d       t        j                  j
                  |_        | j                  t        j                        5  t        ||dd|       d d d        y # 1 sw Y   y xY w)N	secp384r1zECDHE:!eNULL:!aNULLTrB  r  )
r   r  rT   r
   r   rl   rP   rk  r   r   rE  s        r!   test_ecdh_curvezThreadedTests.test_ecdh_curve  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   >EE!c                 j    t               \  }}}t        ||dd|      }| j                  |d   d        y )NTrB  rb  )r   rk  r   rE  s        r!   test_selected_alpn_protocolz)ThreadedTests.test_selected_alpn_protocol  s=    3B3D0">>*.,46 	e23T:r#   c                     t               \  }}}|j                  ddg       t        ||dd|      }| j                  |d   d        y )Nr  barTrB  rb  )r   r  rk  r   rE  s        r!   /test_selected_alpn_protocol_if_server_uses_alpnz=ThreadedTests.test_selected_alpn_protocol_if_server_uses_alpn  sO    3B3D0))5%.9">>*.,46 	e23T:r#   c           	         g d}ddgdfddgdfdgdfddgd fg}|D ]  \  }}t               \  }}}|j                  |       |j                  |       	 t        ||dd|      }d	t        |      d
t        |      dt        |      d}
|d   }| j                  |||
|dfz         t        |d         r|d   d   nd}| j                  |||
|dfz          y # t        j                  $ r}	|	}Y d }	~	d }	~	ww xY w)N)r  r^  	milkshaker  r^  ra  zhttp/3.0zhttp/4.0TrB  zfailed trying z	 (s) and z (c).
was expecting z, but got %s from the %srb  rO  rd  r  nothingr  )r   r  rk  r
   r   r^   r   rd   )r   server_protocolsprotocol_testsclient_protocolsr  r   r   r   r  r  r  client_resultserver_results                r!   test_alpn_protocolsz!ThreadedTests.test_alpn_protocols  sJ   6U^U#U^U#]K(*%t,	
 +9&h7F7H4NNH--.>?--.>?*>+926<@4<	> +,c2B.CH'C ""89M]H M8#<<> u456 ""9:2><E ]H M8#<<>/ +9 << s   CC9-C44C9c                      y rY   rZ   r   s    r!   test_npn_protocolsz ThreadedTests.test_npn_protocols  s    r#   c                 \   t         j                  t         j                        }|j                  t               t         j                  t         j                        }|j                  t
               t         j                  t         j                        }|j                  t               |||fS rY   )	r
   rm   ra   r   r   r   rb   r   r   )r   r   other_contextr   s       r!   sni_contextszThreadedTests.sni_contexts  sv    (?(?@&&7s'>'>?%%&67(?(?@,,Z8}n<<r#   c                 >    |d   }| j                  d|ff|d          y )Nra  r-   r6   )r  )r   r  r    r  s       r!   check_common_namezThreadedTests.check_common_name  s&    Z d+-tI?r#   c                    g | j                         \  }}d|_        fd}|j                  |       t        ||dd      }| j	                  d|fg       | j                  |d       g t        ||dd       }| j	                  d |fg       | j                  |t               g |j                  d        t        ||dd      }| j                  |t               | j	                  g        y )NFc                 @    j                  ||f       || _        y y rY   )r  r   )r  r  r  callsrl  s      r!   r  z6ThreadedTests.test_sni_callback.<locals>.servername_cb  s'    LL+78&#0  'r#   Tsupermessager  rh  r>   notfunny)rm  r   r  rk  r   ro  r   )r   r   r   r  r  rr  rl  s        @@r!   r  zThreadedTests.test_sni_callback	  s   8<8I8I8K5~(-%	1 	..}=">>*.,:<
 	..!A BCun5">>*.,02 	$!7 89u&>? ..t4">>*.,68 	u&>?#r#   c                 &   | j                         \  }}}d }|j                  |       | j                  t        j                        5 }t        ||dd      }d d d        | j                  j                  j                  d       y # 1 sw Y   0xY w)Nc                 "    t         j                  S rY   )r
   ALERT_DESCRIPTION_ACCESS_DENIEDr  s      r!   cb_returning_alertzAThreadedTests.test_sni_callback_alert.<locals>.cb_returning_alert5  s    666r#   Frs  rt  TLSV1_ALERT_ACCESS_DENIED)	rm  r  r   r
   r   rk  r   r   r  )r   r   rl  r   ry  r~  r  s          r!   test_sni_callback_alertz%ThreadedTests.test_sni_callback_alert1  s    8<8I8I8K5~	7../ABs||,&~~.30>@E - 	,,.IJ	 -,s   BBc                    | j                         \  }}}d }|j                  |       t        j                         5 }| j	                  t
        j                        5 }t        ||dd      }d d d        d}| j                  j                  j                  |       | j                  |j                  j                  t               d d d        y # 1 sw Y   dxY w# 1 sw Y   y xY w)Nc                     ddz   y r  rZ   r  s      r!   
cb_raisingz;ThreadedTests.test_sni_callback_raising.<locals>.cb_raisingB  s	    aCr#   Frs  rt  z0(SSLV3_ALERT_HANDSHAKE_FAILURE|NO_PRIVATE_VALUE))rm  r  r   catch_unraisable_exceptionr   r
   r   rk  r  r   r  r   
unraisableexc_typeZeroDivisionError)	r   r   rl  r   r~  catchr~  r  r  s	            r!   test_sni_callback_raisingz'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                    | j                         \  }}}d }|j                  |       t        j                         5 }| j	                  t
        j                        5 }t        ||dd      }d d d        | j                  j                  j                  d       | j                  |j                  j                  t               d d d        y # 1 sw Y   bxY w# 1 sw Y   y xY w)Nc                      y)Nr  rZ   r  s      r!   cb_wrong_return_typezOThreadedTests.test_sni_callback_wrong_return_type.<locals>.cb_wrong_return_typeV  s    r#   Frs  rt  TLSV1_ALERT_INTERNAL_ERROR)rm  r  r   r  r   r
   r   rk  r   r   r  r  r  r   )r   r   rl  r   r  r  r~  r  s           r!   #test_sni_callback_wrong_return_typez1ThreadedTests.test_sni_callback_wrong_return_typeQ  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                 2  	 t               \  }}}|j                  d       |j                  d       g d}t        |||      }|d   d   }| j                  t	        |      d       |D ],  \  	}}t        	fd|D              r| j                  	       . y )NzAES128:AES256zAES256:eNULL)r%  zAES-256TLS_CHACHA20TLS_AESrh  re  r   c              3   &   K   | ]  }|v  
 y wrY   rZ   )r<  algr    s     r!   r=  z4ThreadedTests.test_shared_ciphers.<locals>.<genexpr>s  s     <mssd{ms   )r   rT   rk  assertGreaterrd   anyr0  )
r   r   r   r   expected_algsr  r   tls_versionbitsr    s
            @r!   test_shared_ciphersz!ThreadedTests.test_shared_ciphersd  s    3B3D0""?3"">2
 #>>,46/033w<+'.#D+t<m<<		$ (/r#   c                    t               \  }}}t        |d      }|5  |j                  t        j                         |      }|j	                  t
        |j                  f       |j                          | j                  t        |j                  d       | j                  t        |j                  d       d d d        y # 1 sw Y   y xY w)NFr  r  r  s   hello)r   r  r   r   r  r  r  r  r   r   rK   r   r  s         r!   ,test_read_write_after_close_raises_valuerrorz:ThreadedTests.test_read_write_after_close_raises_valuerrorv  s    3B3D0#N5I**6==?;C + EAIItV[[)*GGIj!&&$7j!''8< VVs   BC  C	c                    d}t        t        j                  d      5 }|j                  |       d d d        | j	                  t        j
                  t        j                         t               \  }}}t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       t        t        j                  d      5 }|j                  |       | j                  |j                  d      |       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   'xY w# 1 sw Y   +xY w# 1 sw Y   y xY w)Ns   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwbFr  r  r  r  )rJ   r   TESTFNr   r  unlinkr   r  r   r   r  r  r  sendfiler   ra  )	r   	TEST_DATArM   r   r   r   r  r   files	            r!   test_sendfilez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   D0&E(<E	$3D=E	E0D:=EE		E	EEc                 "   t               \  }}}t        j                  j                  |_        t        |||      }|d   }| j                  |j                         | j                  |j                  d       | j                  |j                  d       | j                  |j                         | j                  |j                  d       | j                  |d          |j                         }| j                  |d   d       | j                  |d   d       t        ||||      }|j                         }| j                  |d   d	       | j                  |d   d       | j                  |d          |d   }| j                  |j                  |j                         | j                  ||       | j!                  ||       | j#                  |j                  |j                         | j#                  |j                  |j                         t        |||      }| j                  |d          |d   }| j%                  |j                  |j                         | j%                  ||       |j                         }| j                  |d   d
       | j                  |d   d       t        ||||      }| j                  |d          |d   }	| j                  |	j                  |j                         | j                  |	|       | j#                  |	j                  |j                         | j#                  |	j                  |j                         |j                         }| j                  |d   d       | j                  |d   d	       y )Nr  rY  r   rc  r  rQ   r  )rY  rh  r  r   r9  )r   r
   r   rl   ri   rk  rG  idr  r   rr  
has_ticketticket_lifetime_hintrQ  r  r   assertIsNotr   r=  )
r   r   r   r   r  rY  	sess_statsession2session3session4s
             r!   test_sessionzThreadedTests.test_session  s   3B3D0),)?)?& #>>,46	"

#7<<+7??A.**+777;/01"002	8,a06*A. #>>+2XG"002	8,a06*A../0#gjj17+7+w||< 0 0'//B #>>,46/01#HKK4Hg."002	8,a06*A. #>>+2XG./0#gjj17+w||< 0 0'//B"002	8,a06*A.r#   c                 t   t               \  }}}t               \  }}}t        j                  j                  |_        t        j                  j                  |_        t        |d      }|5  |j                  t        j                         |      5 }| j                  |j                  d        | j                  |j                  d        |j                  t        |j                  f       |j                  }| j                  |       | j                  t               5 }	t"        |_	        d d d        | j                  t%        	j&                        d       d d d        |j                  t        j                         |      5 }|j                  t        |j                  f       | j                  t(              5 }	|_	        d d d        | j                  t%        	j&                        d       d d d        |j                  t        j                         |      5 }|_	        |j                  t        |j                  f       | j                  |j                  j*                  |j*                         | j                  |j                  |       | j                  |j                  d       d d d        |j                  t        j                         |      5 }| j                  t(              5 }	|_	        |j                  t        |j                  f       d d d        | j                  t%        	j&                        d       d d d        d d d        y # 1 sw Y   0xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ^xY w# 1 sw Y   y xY w)NFr  r  zValue is not a SSLSession.z#Cannot set session after handshake.Tz)Session refers to a different SSLContext.)r   r
   r   rl   ri   r  r   r   r   rY  rc  r  r  r  rG  r   r   r  r^   r   r   r  )
r   r   r   r   client_context2rP  r  r   rY  r  s
             r!   test_session_handlingz#ThreadedTests.test_session_handling  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   *&N.BM#M(-M#-N.7M=9M0-M=.-N.BN
,-N.N"/)N-N"N.M M##M-	(N.0M:5M==N	N.
N	N.NN""N+	'N..N7N)Gr{  r  r  r   r  r  r  r  r  rs   r  r
   rV  rX  r  r  r  r  r|   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r'  r)  r.  r  r0  r2  r4  r6  r9  r  r  rF  rR   rH  rM  rO  rW  rZ  r\  r_  rh  rj  rm  ro  r  r{  r  r  r  r  r  r  r  rZ   r#   r!   r  r  
  s   Wz**" +*"X"/H+EZ#2J X'')T33*@*@4@LD#EJ )$ %4'R5>?B '"	J #	J '"
; #
; )$N %N )$R %R*7r!4C:FP6&2*:/b&,PAAA-& )$9 %9 )$'"9  # %9 )$9  %9 )$'"D  # %D  '"7 #75" X)B)BBEG<GG<G|E X&9:EG2G266;42>;; >D=@&$PKK&C& $=>7/r0Nr#   r  rZ  zTest needs TLS 1.3c                   N    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)TestPostHandshakeAuthc                    t         j                  t         j                  g}|D ]a  }t         j                  |      }| j	                  |j
                  d       d|_        | j	                  |j
                  d       t         j                  |_        | j	                  |j                  t         j                         | j	                  |j
                  d       d|_        | j	                  |j                  t         j                         | j	                  |j
                  d       t         j                  |_        d|_        | j	                  |j                  t         j                         | j	                  |j
                  d       d y r  )	r
   ra   rb   rm   r   post_handshake_authr   r   r   )r   r|  re   rV   s       r!   test_pha_setterz%TestPostHandshakeAuth.test_pha_setter   s"   ##S%<%<
	 "H..*CS44e<&*C#S44d;!//COS__c.?.?@S44d;&+C#S__c.?.?@S44e<!//CO&*C#S__c.?.?@S44d;% "r#   c                    t               \  }}}d|_        t        j                  |_        d|_        |j                  t               t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       |j                  d       | j                  |j                  d      d       |j                  d       | j                  |j                  d      d	       |j                  d       | j                  |j                  d      d
       |j                  d       | j                  |j                  d      d	       |j                  d       |j                  d      j!                  d      }| j#                  d|       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NTFr  r  r  r  r  r  r  r  r  i   r  r9   )r   r  r
   r   r   r   r   r  r   r   r  r  r  r   r   ra  decoder  )r   r   r   r   r  r   	cert_texts          r!   test_pha_requiredz'TestPostHandshakeAuth.test_pha_required  sf   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<D-F:)G:G	?GGc                    t               \  }}}d|_        t        j                  |_        d|_        d }||_        ||_        t        |d      }|5  |j                  t        j                         |d      5 }|j                  t        |j                  f       |j                  d       | j                  t        j                  d      5  |j                  d      }| j!                  |d	       |j                  d
       |j                  d       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)NTc                     t         j                  r@|t        j                  k(  r,| |||||f}t        j
                  j                  d|d       y y y )NzTLS: r   )r   r   r   ALERTr   r   r   )r5  	directionr8   content_typemsg_typer   r  s          r!   msg_cbz>TestPostHandshakeAuth.test_pha_required_nocert.<locals>.msg_cb7  sK    <?3H3H#Hi,$O

  5!34 $Ir#   r  Fr  r  z#(certificate required|EOF occurred)r  r  r  )r   r  r
   r   r   _msg_callbackr  r   r   r  r  r  r   r   r   ra  r   )r   r   r   r   r  r  r   r   s           r!   test_pha_required_nocertz.TestPostHandshakeAuth.test_pha_required_nocert1  s    3B3D0-1*%(%6%6"-1*	5
 (.$'-$#N4H++FMMO<DAF , HKL		4-. ++LL9
 66$<D$$T73 GGJ' FF4LH V H H Vs>   'E9AD7AD+D7E+D40D77E 	<EEc                 B   t         j                  rt        j                  j	                  d       t               \  }}}d|_        t        j                  |_	        d|_        |j                  t               t        j                  |_	        t        |d      }|5  |j                  t        j                         |      5 }|j!                  t"        |j$                  f       |j	                  d       | j'                  |j)                  d      d       |j	                  d	       | j'                  |j)                  d      d
       |j	                  d       | j'                  |j)                  d      d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   TFr  r  r  r  r  r  r  r  )r   r   r   r   r   r   r  r
   r   r   r   r   r   r  r   r   r  r  r  r   ra  r  s         r!   test_pha_optionalz'TestPostHandshakeAuth.test_pha_optionalV  s9   ??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	8F	F	FFc                    t         j                  rt        j                  j	                  d       t               \  }}}d|_        t        j                  |_	        d|_        t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       |j	                  d       | j!                  |j#                  d      d       |j	                  d	       | j!                  |j#                  d      d
       |j	                  d       | j!                  |j#                  d      d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   TFr  r  r  r  r  r  r  )r   r   r   r   r   r   r  r
   r   r   r  r   r   r  r  r  r   ra  r  s         r!   test_pha_optional_nocertz.TestPostHandshakeAuth.test_pha_optional_nocertn  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%   0&E+B8EE+E(	$E++E4c                 n   t               \  }}}d|_        t        j                  |_        |j                  t               t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       | j                  t        j                  d      5  |j                          d d d        |j!                  d       | j#                  d|j%                  d             d d d        d d d        y # 1 sw Y   LxY w# 1 sw Y   xY w# 1 sw Y   y xY w)	NTFr  r  z
not serverr  s   extension not receivedr  )r   r  r
   r   r   r   r   r  r   r   r  r  r  r   r   r  r   r  ra  r  s         r!   test_pha_no_pha_clientz,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+5AD7D:DD+DDD(	$D++D4c                    t               \  }}}t        j                  |_        d|_        |j                  t               t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       |j                  d       | j                  |j                  d      d       |j                  d       | j                  |j                  d      d	       |j                  d       | j                  |j                  d      d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)
NTFr  r  r  r  r  r  r  )r   r
   r   r   r  r   r   r  r   r   r  r  r  r   r   ra  r  s         r!   test_pha_no_pha_serverz,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
5B8D>-E
>E	E

Ec                 "   t               \  }}}t        j                  |_        t        j                  j
                  |_        d|_        |j                  t               t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       |j!                  d       | j#                  d|j%                  d             d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NTFr  r  r  s   WRONG_SSL_VERSIONr  )r   r
   r   r   r   rl   ri   r  r   r   r  r   r   r  r  r  r   r  ra  r  s         r!   test_pha_not_tls13z(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C9(D9D	>DDc                    t         }t        j                  t        j                        }d|_        |j                  t               d|_        t        j                  |_	        t        j                  t        j                        }|j                  t               |j                  t               d|_        t        j                  |_	        t        |d      }|5  |j                  t!        j                          |      5 }|j#                  t$        |j&                  f       |j)                  d       | j+                  |j-                  d      d       |j)                  d       | j+                  |j-                  d      d	       |j)                  d       | j+                  |j-                  d      d
       | j+                  |j/                         i        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NTFr  r  r  r  r  r  r  r  )r   r
   rm   rb   r  r   r   r   r   r   ra   r   r   r   r  r   r   r  r  r  r   r   ra  rZ  )r   r   r   r   r  r   s         r!   test_bpo37428_pha_cert_nonez1TestPostHandshakeAuth.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G>c           	         t        d      \  }}}t        |d      }|5  |j                  t        j                         |      5 }|j	                  t
        |j                  f       |j                  j                         }| j                  t        |      d       |\  }}|j                  j                         }	| j                  t        |	      d       | j                  ||	d          | j                  t        |      t        |	d                | j                  t        |      t        |	d                | j                  ||       | j                  t        |      t        |             | j                  t        |      t        |             | j                  |j                         |j                                | j!                  dt        |             | j!                  d	t        |             |j#                  t$        j&                        }
|j#                  t$        j(                        }| j+                  |
t,               | j!                  d
|
       | j+                  |t.               | j                  t0        j3                  |
      |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NFr   r  r  r  rQ   r   zCN=localhostzCN=our-ca-serverz-----BEGIN CERTIFICATE-----)r   r  r   r   r  r  r  r  r  r   rd   r  hashr   r=  get_infor  public_bytesr   ENCODING_PEMENCODING_DERrB  r^   r  r
   r-  )r   r   r   r   r  r   vceecauvcr3  r  s               r!   test_internal_chain_clientz0TestPostHandshakeAuth.test_internal_chain_client  s   3B4
0 $N5I++ ( ,  		4-.YY113  R!,Bii446  S1-  SV,  b4A<8  b4A<8##B+##DHd2h7##DHd2h7##BKKM2;;=And2h70$r(;ood&7&78ood&7&78%%c3/;SA%%c51  ,,S137 V  Vs$   &J6IJ*J6*J3	/J66J?c                    t               \  }}}|j                  t               t        j                  |_        t        j                  j                  |_        t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       |j                  d       |j!                  d      }| j#                  |d       |j                  d       |j!                  d      }| j#                  |d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NFr  r  s   VERIFIEDCHAIN
r  s   
s   UNVERIFIEDCHAIN
)r   r   r   r
   r   r   r   rl   ri   r  r   r   r  r  r  r   ra  r   )r   r   r   r   r  r   ress          r!   test_internal_chain_serverz0TestPostHandshakeAuth.test_internal_chain_server  s    3B3D0&&7%(%6%6"),)?)?&#N5I++ ( ,  		4-.*+ffTl  i0,-ffTl  i0 V  Vs%   '&D4B
D(D4(D1	-D44D=N)r{  r  r  r  r  r  r  r  r  r  r  r  r  r  rZ   r#   r!   r  r    s>    <0J2#!J:0;,G :(B"6>#J1r#   r  keylog_filenamez0test requires OpenSSL 1.1.1 with keylog callbackc                       e Zd Zej                  fdZed        Zed        Ze e	j                  ej                  j                  d      d               Zd Zd Zd Zy	)
TestSSLDebugc                 l    t        |      5 }t        t        |            cd d d        S # 1 sw Y   y xY wrY   )rJ   rd   r  )r   fnamerM   s      r!   keylog_lineszTestSSLDebug.keylog_lines  s     %[AtAw< [[s   *3c                 ~   | j                  t        j                  t        j                         t        j                  t        j                        }| j                  |j                  d        | j                  t        j                  j                  t        j                               	 t        j                  |_        | j                  |j                  t        j                         | j!                  t        j                  j                  t        j                               | j                  | j#                         d       d |_        | j                  |j                  d        | j%                  t&        t(        f      5  t        j                  j+                  t        j                  j-                  t        j                              |_        d d d        | j%                  t.              5  d|_        d d d        y # t        $ r t        r| j                  d        w xY w# 1 sw Y   TxY w# 1 sw Y   y xY w)Nr  rQ   )r  r   r  r  r
   rm   rb   r   r  rQ  r   r   isfiler  r  r  rG  r  r   IsADirectoryErrorPermissionErrorr   abspathr   r-  s     r!   test_keylog_defaultsz!TestSSLDebug.test_keylog_defaults  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H3"H$'H03H<c                 \   | j                  t        j                  t        j                         t	               \  }}}	 t        j                  |_        t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       d d d        d d d        | j                  | j!                         d       d |_        t        j                  |_        t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       d d d        d d d        | j#                  | j!                         d       t        j                  |_        t        j                  |_        t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       d d d        d d d        | j#                  | j!                         d       d |_        d |_        y # t        $ r t        r| j                  d        w xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   1xY w# 1 sw Y   6xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nr  Fr  r  r        )r  r   r  r  r   r  r  r  r  r  r   r   r  r  r  r   r  r   r  s         r!   test_keylog_filenamez!TestSSLDebug.test_keylog_filename8  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	6&J""J>J"="I"I,	'I//I9<J	J		JJ	J""J+z.test is not compatible with ignore_environmentc                 ^   | j                  t        j                  t        j                         t        j
                  j                  j                  t        j                        5  t        j                  t        j                  d<   | j                  t        j                  d   t        j                         t        j                  t        j                        }| j                  |j                  d        	 t        j                         }| j                  |j                  t        j                         t        j'                         }| j                  |j                  t        j                         d d d        y # t         $ r t"        r| j%                  d        w xY w# 1 sw Y   y xY w)NSSLKEYLOGFILEr  )r  r   r  r  rs   mockrN  dictr   environr   r
   rm   rb   r  r  r  r  r  r  r-  s     r!   test_keylog_envzTestSSLDebug.test_keylog_enva  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##F,c                    t               \  }}}d }| j                  |j                  d        ||_        | j                  |j                  |       | j                  t              5  t               |_        d d d        y # 1 sw Y   y xY w)Nc                      y rY   rZ   r5  r  r8   r  r  r   s         r!   r  z.TestSSLDebug.test_msg_callback.<locals>.msg_cb{  r  r#   )r   r   r  r   r   r  )r   r   r   r   r  s        r!   test_msg_callbackzTestSSLDebug.test_msg_callbackx  sl    3B3D0	 	n22D9'-$n22F;y)+18N( *))s   &A??Bc                 ~    t               \  }}}t        j                  j                  |_        g  fd}||_        t        |d      }|5  |j                  t        j                         |      5 }|j                  t        |j                  f       d d d        d d d         j                  dt        j                  t        j                  t        j                   f        j                  dt        j                  t        j"                  t        j"                  f       y # 1 sw Y   xY w# 1 sw Y   xY w)Nc                     j                  | t        j                         j                  |t               j	                  |ddh       j                  ||||f       y )NrK   r   )rB  r
   r   r  r  r  )r5  r  r8   r  r  r   r  r   s         r!   r  z4TestSSLDebug.test_msg_callback_tls12.<locals>.msg_cb  sO    !!$6!!$.MM)fg%67JJ	7L(CDr#   Fr  r  rK   r   )r   r
   r   rl   ri   r  r  r   r   r  r  r  r  r   	HANDSHAKEr   SERVER_KEY_EXCHANGECHANGE_CIPHER_SPEC)r   r   r   r   r  r  r   r  s   `      @r!   test_msg_callback_tls12z$TestSSLDebug.test_msg_callback_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$   &D34"D'D3'D0	,D33D<c                    t               \  }}}t               d   d }fd}||_        ||_        t        |d      }|5  |j	                  t        j
                         |      5 }|j                  t        |j                  f       d d d        |j	                  t        j
                         |      5 }|j                  t        |j                  f       d d d        d d d        y # 1 sw Y   axY w# 1 sw Y   xY w# 1 sw Y   y xY w)NrQ   c                      y rY   rZ   r  s         r!   r  z@TestSSLDebug.test_msg_callback_deadlock_bpo43577.<locals>.msg_cb  r  r#   c                     | _         y rY   r  )r   r  rV   server_context2s      r!   sni_cbz@TestSSLDebug.test_msg_callback_deadlock_bpo43577.<locals>.sni_cb  s
    *DLr#   Fr  r  )	r   r  sni_callbackr  r   r   r  r  r  )	r   r   r   r   r  r  r  r   r  s	           @r!   #test_msg_callback_deadlock_bpo43577z0TestSSLDebug.test_msg_callback_deadlock_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7"C6D*C3	/D6C?	;DDN)r{  r  r  r   r  r  requires_keylogr  r  rs   r  r   flagsignore_environmentr  r  r  r  rZ   r#   r!   r  r    s    !*!1!1   $ $6 &. &.P X__SYY11EGDG D(
4
>/r#   r  c           	          | j                  t        j                  t        j                  t	        j
                  ddd             y )NiirQ   r   )
setsockoptr   
SOL_SOCKET	SO_LINGERstructpack)r   s    r!   )set_socket_so_linger_on_with_zero_timeoutr
    s+    OOF%%v'7'7T1a9PQr#   c                   P    e Zd Z	  G d dej                        Zd Zd Zd Zd Z	y)TestPreHandshakeClosec                   @     e Zd Zdd fd
Zd Zd Z fdZd Z xZS )6TestPreHandshakeClose.SingleConnectionTestServerThreadN)rr  c                    || _         d| _        d | _        d | _        d | _        |t
        j                  | _        n|| _        t        | %  |       y )Nr#   r   )
call_after_acceptreceived_data
wrap_errorr  r  r   r  rr  superr  )r   r    r  rr  rz  s       r!   r  z?TestPreHandshakeClose.SingleConnectionTestServerThread.__init__  sQ    %6D"!$D"DO DMDI&44&G$'r#   c                 &    | j                          | S rY   )r  r   s    r!   r  z@TestPreHandshakeClose.SingleConnectionTestServerThread.__enter__  s    JJLKr#   c                     	 | j                   r| j                   j                          | j                          d | _        y # t        $ r Y #w xY wrY   )r  r  r`  r   r  r  s     r!   r  z?TestPreHandshakeClose.SingleConnectionTestServerThread.__exit__  sD    ==MM'') IIK"DO  s   &A   	AAc                 H   t         j                  t         j                  j                        | _        t         j
                  | j                  _        | j                  j                  t               | j                  j                  t        t               t        j                         | _        t        j                  | j                        | _        | j                  j!                  | j"                         | j                  j%                  d       t&        | Q          y )Nr  rm  rQ   )r
   r  r  r  ssl_ctxr   r   r   r  r   r  r   r  r   r	  r  rp  rr  r"  r  r  )r   rz  s    r!   r  z<TestPreHandshakeClose.SingleConnectionTestServerThread.start  s    55ckk6M6MNDL'*'8'8DLL$LL..h.?LL(((G(L"MMODM%//>DIMM$$T\\2MM  #GMOr#   c                 ,   	 | j                   j                         \  }}	 | j                   j                          |5  | j	                  |      r
	 d d d        y 	 | j
                  j                  |d      }	 |j                  d      | _        d d d        y # t        $ r Y | j                   j                          y w xY w# | j                   j                          w xY w# t        $ r Y \w xY w# t        $ r}|| _
        Y d }~ud }~ww xY w# 1 sw Y   y xY w)NTr    )r  r  r#  r  r  r  r   ra  r  r`  r  )r   r5  address
tls_socketr=  s        r!   r  z:TestPreHandshakeClose.SingleConnectionTestServerThread.run  s    & $ 4 4 6g
 ##%))$/ !%!9!9$D!9!QJ-7__S-A*    ##%	 ##% #   *&)DOO* sp   B D
C-7C	B<B? ;B<<B? ?C	C*'D
)C**D
-	D6D=D
DD

D)	r{  r  r  r  r  r  r  r  __classcell__)rz  s   @r!    SingleConnectionTestServerThreadr    s    ?C 
	(		#			r#   r  c           
      x   t         j                  dk(  ry t        |t              sft        |t              r|j
                  t
        j                  k(  s9t        j                  dt        t        |dd            t        j                        r)	 | j                  dt         j                   d|       d }y y # d }w xY w)Nlinuxzwrong.version.numberr  rT  z!Could not recreate conditions on z: err=)r   r   r]   r  r`  r  EINVALr  searchr^   r_   r   r  r<  s     r!   "non_linux_skip_if_other_okay_errorz8TestPreHandshakeClose.non_linux_skip_if_other_okay_error  s    <<7"s01W%#))u||*CII,c'#x2L.MrttT A#,, P'"%) *  U s   %B5 5B9c                 "   t        j                         t        j                         fd}| j                  |d      }| j                  |       t	        j                         5 }|j                  |j                  j                                t        |       |j                  d       j                          |j                  d       |j                          d d d        j                          |j                          |j                  }d |_        	 | j!                  d|j"                         | j%                  |t&               | j)                  |       | j%                  |t*        j,                         | j/                  d|j0                  d          | j/                  d|j2                         | j5                  d	|j0                  d	          | j7                  |j8                  d
       d }d }y # 1 sw Y   xY w# d }d }w xY w)Nc                 z    j                          j                  t        j                        st	        d      y)Nz+wrap_socket event never set, test may fail.F)r  r  r   r  r  )unusedready_for_server_wrap_socketserver_accept_calleds    r!   r  zPTestPreHandshakeClose.test_preauth_data_to_tls_server.<locals>.call_after_accept  s2     $$&/44W5J5JK"#PQQr#   preauth_data_to_tls_serverr  r    Fs   DELETE /data HTTP/1.0

r#   before TLS handshake with datarQ   r   attr must existr  )r  r  r  rU  r   r  r  r  r
  r#  r  re  r  r  r   r  r   r  rB  r`  r"  r
   r   r  ru   r  r=  r  r  )r   r  r  rO  r  r&  r'  s        @@r!   test_preauth_data_to_tls_serverz5TestPreHandshakeClose.test_preauth_data_to_tls_server  s   (0'0'8$	 66"31 7 3 	&!]]_NN6??66895f=u% %%'KK89LLN  	%((*&&
 	S&"6"67!!*g633J?!!*cll;MM:JOOA<NOMM:J<M<MN:??1#56j006GH JF7 _4 JFs   )A7G;CH ;HHc                 T  	
 t        j                         
t        j                         		
fd}| j                  |d      }| j                  |       t	        |j
                         t        j                         5 }|j                  |j
                  j                                
j                          	j                  t        j                        s| j                  d       t        j                         }	 |j!                  |d      }d }|j#                  d      }|j%                          d d d        |j)                          	 | j+                  d       | j-                  t&               | j/                  |       | j-                  |t        j0                         | j3                  d	|j4                  d
          | j3                  d	|j6                         | j9                  d|j4                  d          | j;                  |j<                  d       t?        j@                  |       5  d }d d d        d }y # t&        $ r}|}d}Y d }~d }~ww xY w# 1 sw Y   )xY w# 1 sw Y   d }y xY w# t?        j@                  |       5  d }d d d        d }w # 1 sw Y   d }w xY wxY w)Nc                     j                  t        j                        st        d       t	        |        | j                  d       | j                          j                          y)Nz ERROR: test client took too longsW   HTTP/1.0 307 Temporary Redirect
Location: https://example.com/someone-elses-server

T)r  r   r  r  r
  re  r  r  )conn_to_client$client_can_continue_with_wrap_socket$server_can_continue_with_wrap_sockets    r!   r  zPTestPreHandshakeClose.test_preauth_data_to_tls_client.<locals>.call_after_acceptG  sZ    7<<W=R=RS89 6nE   "0446r#   preauth_data_to_tls_clientr)  ztest server took too longr.   r  r  r#   r*  rQ   r   r+  r  )!r  r  r  rU  r
  r  r   r  r  r  r  r   r  r0  r
   r  r   ra  r  r`  r   r   rB  r"  r   r  ru   r  r=  r  r  r   r  )r   r  r  rO  r  
tls_clientr  r  r=  r0  r1  s            @@r!   test_preauth_data_to_tls_clientz5TestPreHandshakeClose.test_preauth_data_to_tls_clientC  s-   /8/@,/8/@,	 66"31 7 3 	&!1&//B]]_NN6??668904467<<W=R=RS		56002G	#$00 1 =
 "
 * 4  "! $ 		S-0!!*g633J?!!*cll;MM:JOOA<NOMM:J<M<MN:??1#56j006GH !::4@!
 AF-  $ 
 #$ _< AF !::4@!
 AF AFsh   >A>I=H?#ICI5 1I'?	IIIIII$'I25J'JJ'J$	J'c                    t        j                          G fddt        j                  j                        }fd}d}| j                  |d|      }| j                  |       t        |j                          ||j                  j                         d   |j                  t        j                         |      }t        j                  |       5  | j                  t               5  |j#                  d	d
ddi       |j%                         }d d d        d d d        |j'                          y # 1 sw Y   "xY w# 1 sw Y   &xY w)Nc                       e Zd Z fdZy)eTestPreHandshakeClose.test_https_client_non_tls_response_ignored.<locals>.SynchronizedHTTPSConnectionc                 `   t         j                  j                  j                  |        j	                  t
        j                        s/t
        j                  rt        j                  j                  d       | j                  j                  | j                  | j                        | _        y )Nz"server_responding event never set.r  )httprO  HTTPConnectionr  r  r   r  r   r   r   r   _contextr   r   r  )r   server_respondings    r!   r  zmTestPreHandshakeClose.test_https_client_non_tls_response_ignored.<locals>.SynchronizedHTTPSConnection.connect  st     **2248 )--g.C.CDJJ$$%IJ MM55		499 6 >	r#   N)r{  r  r  r  )r<  s   r!   SynchronizedHTTPSConnectionr7    s    	>r#   r=  c                 ~    t        |        | j                  d       | j                          j                          y)Ns!   HTTP/1.0 402 Payment Required

T)r
  re  r  r  )r/  r<  s    r!   r  z[TestPreHandshakeClose.test_https_client_non_tls_response_ignored.<locals>.call_after_accept  s;    5nE   "!!#r#   g       @non_tls_http_RST_responder)r  r    rr  r   )r  r   rr  HEADz/testHostr.   )headers)r  r  r9  rO  HTTPSConnectionr  rU  r
  r  r  r  r
   r  r   r  r   r`  r  getresponser   )r   r=  r  rr  r  
connectionresponser<  s          @r!   *test_https_client_non_tls_response_ignoredz@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>*'D2D>2D;	7D>>EN)
r{  r  r  r  r  r  r"  r,  r4  rG  rZ   r#   r!   r  r    s0    :9+;+; :x2*X9v3r#   r  c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)TestEnumerationsc                 j     G d dt         j                        }t        j                  |t               y )Nc                       e Zd Zej                  Zej                  Zej                  Z	ej                  Zej                  Zej                  Zej                   Zy);TestEnumerations.test_tlsversion.<locals>.CheckedTLSVersionN)r{  r  r  r   PROTO_MINIMUM_SUPPORTEDrn   PROTO_SSLv3r   PROTO_TLSv1r   PROTO_TLSv1_1r   PROTO_TLSv1_2rl   PROTO_TLSv1_3rZ  PROTO_MAXIMUM_SUPPORTEDro   rZ   r#   r!   CheckedTLSVersionrL    sQ     $ < <$$E$$E((G((G((G $ < <r#   rT  )enumIntEnum_test_simple_enumr   )r   rT  s     r!   test_tlsversionz TestEnumerations.test_tlsversion  s%    	= 	= 	0*=r#   c                 j     G d dt         j                        }t        j                  |t               y )Nc                   &    e Zd Z	 dZdZdZdZdZdZy)DTestEnumerations.test_tlscontenttype.<locals>.Checked_TLSContentTyper]  r        r:    N)	r{  r  r  r  r  r  APPLICATION_DATAHEADERINNER_CONTENT_TYPErZ   r#   r!   Checked_TLSContentTyper[    s*     "$EI!F!&r#   rb  )rU  rV  rW  r   )r   rb  s     r!   test_tlscontenttypez$TestEnumerations.test_tlscontenttype  s%    	'T\\ 	' 	5Gr#   c                 j     G d dt         j                        }t        j                  |t               y )Nc                       e Zd Z	 dZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$y#)$@TestEnumerations.test_tlsalerttype.<locals>.Checked_TLSAlertTyper   
   r]  r  r\     (   )   r%  +   ,   -   .   /   r;  1   2   3   <   F   G   P   V   Z   r_  m   n   o   p   q   r   s   t   x   N)%r{  r  r  CLOSE_NOTIFYUNEXPECTED_MESSAGEBAD_RECORD_MACDECRYPTION_FAILEDRECORD_OVERFLOWDECOMPRESSION_FAILUREHANDSHAKE_FAILURENO_CERTIFICATEBAD_CERTIFICATEUNSUPPORTED_CERTIFICATECERTIFICATE_REVOKEDCERTIFICATE_EXPIREDCERTIFICATE_UNKNOWNILLEGAL_PARAMETER
UNKNOWN_CAACCESS_DENIEDDECODE_ERRORDECRYPT_ERROREXPORT_RESTRICTIONPROTOCOL_VERSIONINSUFFICIENT_SECURITYINTERNAL_ERRORINAPPROPRIATE_FALLBACKUSER_CANCELEDNO_RENEGOTIATIONMISSING_EXTENSIONUNSUPPORTED_EXTENSIONCERTIFICATE_UNOBTAINABLEUNRECOGNIZED_NAMEBAD_CERTIFICATE_STATUS_RESPONSEBAD_CERTIFICATE_HASH_VALUEUNKNOWN_PSK_IDENTITYCERTIFICATE_REQUIREDNO_APPLICATION_PROTOCOLrZ   r#   r!   Checked_TLSAlertTyperf    s     L!#N " O$&! "N O&(#"$"$"$ "JMLM!#!$&!N%'"M" #$'!'*$ #.1+),&#& #& &)#r#   r  )rU  rV  rW  r   )r   r  s     r!   test_tlsalerttypez"TestEnumerations.test_tlsalerttype  s&    &	*4<< &	*N 	3]Cr#   c                 j     G d dt         j                        }t        j                  |t               y )Nc                   f    e Zd Z	 dZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZy)DTestEnumerations.test_tlsmessagetype.<locals>.Checked_TLSMessageTyper   rQ   r  r   r9  r  r  r  r  r<        r<  r   r]  r  r\  r]     C      r^  N)r{  r  r  HELLO_REQUESTCLIENT_HELLOSERVER_HELLOHELLO_VERIFY_REQUESTNEWSESSION_TICKETEND_OF_EARLY_DATAHELLO_RETRY_REQUESTENCRYPTED_EXTENSIONSCERTIFICATEr  CERTIFICATE_REQUESTSERVER_DONECERTIFICATE_VERIFYCLIENT_KEY_EXCHANGEFINISHEDCERTIFICATE_URLCERTIFICATE_STATUSSUPPLEMENTAL_DATA
KEY_UPDATE
NEXT_PROTOMESSAGE_HASHr  rZ   r#   r!   Checked_TLSMessageTyper    s     MLL#$  ! !"##$ K"$"$K!#"$H O!# "JJL!'r#   r  )rU  rV  rW  r   )r   r  s     r!   test_tlsmessagetypez$TestEnumerations.test_tlsmessagetype  s%    	(T\\ 	(6 	5Gr#   c                     t        j                  t         j                  ddd t        j                        }|j
                  |_        t        j                  |t        j                         y )N
_SSLMethodr
   c                 2    | j                  d      xr | dk7  S )Nr\   r   r   r   s    r!   r  z1TestEnumerations.test_sslmethod.<locals>.<lambda>  s    T__[9WdFW>WWr#   source)	rU  _old_convert_rV  r
   r   r`   r   rW  r  )r   Checked_SSLMethods     r!   test_sslmethodzTestEnumerations.test_sslmethod  sN     ..lEWxx ->,J,J)0#..Ar#   c                     t        j                  t         j                  ddd t        j                        }t        j
                  |t        j                         y )NOptionsr
   c                 $    | j                  d      S )Nr   r  r   s    r!   r  z/TestEnumerations.test_options.<locals>.<lambda>%  s    T__U3r#   r  )rU  r  IntFlagr
   r   rW  r  )r   CheckedOptionss     r!   r   zTestEnumerations.test_options"  s=    ++i3xx
 	~s{{;r#   c                     t        j                  t         j                  ddd t        j                        }t        j
                  |t        j                         y )NAlertDescriptionr
   c                 $    | j                  d      S )NALERT_DESCRIPTION_r  r   s    r!   r  z8TestEnumerations.test_alertdescription.<locals>.<lambda>-  s    T__-ABr#   r  )rU  r  rV  r
   r   rW  r  )r   CheckedAlertDescriptions     r!   test_alertdescriptionz&TestEnumerations.test_alertdescription*  sB    "&"4"40%Bxx#
 	68L8LMr#   c                     t        j                  t         j                  ddd t        j                        }t        j
                  |t        j                         y )NSSLErrorNumberr
   c                 $    | j                  d      S )N
SSL_ERROR_r  r   s    r!   r  z6TestEnumerations.test_sslerrornumber.<locals>.<lambda>5  s    T__\:r#   r  )rU  r  rV  r
   r   rW  r  )r   Checked_SSLErrorNumbers     r!   test_sslerrornumberz$TestEnumerations.test_sslerrornumber2  sB    !%!3!3.:xx"
 	5s7I7IJr#   c                     t        j                  t         j                  ddd t        j                        }t        j
                  |t        j                         y )NVerifyFlagsr
   c                 $    | j                  d      S )NVERIFY_r  r   s    r!   r  z3TestEnumerations.test_verifyflags.<locals>.<lambda>=  s    T__Y7r#   r  )rU  r  r  r
   r   rW  r  )r   CheckedVerifyFlagss     r!   test_verifyflagsz!TestEnumerations.test_verifyflags:  s?    !//mU7xx
 	13??Cr#   c                     t        j                  t         j                  ddd t        j                        }t        j
                  |t        j                         y )N
VerifyModer
   c                 $    | j                  d      S )NCERT_r  r   s    r!   r  z2TestEnumerations.test_verifymode.<locals>.<lambda>E  s    T__W5r#   r  )rU  r  rV  r
   r   rW  r  )r   CheckedVerifyModes     r!   test_verifymodez TestEnumerations.test_verifymodeB  s?     ..lE5xx
 	0#..Ar#   N)r{  r  r  rX  rc  r  r  r  r   r  r  r  r  rZ   r#   r!   rI  rI    s=    	>H(DTH<B<NKDBr#   rI  c                     t         j                  rt        j                  t        j                  d} | j                         D ]  \  }} |       }|s|d   s|d|} n t        t        j                               }t        dt        j                  dt        j                         t        d|z         t        dt        j                  z         t        dt        j                  z         	 t        dt        j                  z         t        t         t"        t$        t&        t(        t*        t,        t.        t0        t2        t4        fD ]9  }t6        j8                  j;                  |      r#t        j<                  d	|z         t?        j@                         }tC        jD                  t>        jF                  g|  y # t        $ r Y w xY w)
N)MacWindowsr   r~   ztest_ssl: testing with z          under %sz          HAS_SNI = %rz          OP_ALL = 0x%8xz          OP_NO_TLSv1_1 = 0x%8xzCan't read certificate file %r)$r   r   r   mac_ver	win32_veritemsr   r  r
   rA  r@  r   rL  r   rW  r   r  r  r  r  r  r   r   r   r  BADKEYr  r   r   exists
TestFailedr   threading_setuprs   addModuleCleanupthreading_cleanup)platsr    rw   platfilenamethread_infos         r!   setUpModuler  K  se   ##))
  ++-JD$6DQ"&-	 ( ))+,D  #":":< 	="T)*&45(3::56	3c6G6GGH
 	.'>=):	$
 ww~~h'$$%E%PQQ$ #224K.@@O;O  		s   3G 	GG__main__rY   )r  TFNN)Nr   r   )r   rs   unittest.mockr  r   test.supportr   r   r   r   r   r	   r  r  r   rc  r  r   rU  r  http.clientr9  r   r  r  urllib.requestr  r  r   rV  r   	sysconfigry   r  ImportErrorimport_moduler
   r   r   r   r   r   r  r  rG  _PROTOCOL_NAMESr&  r  r@  rk   get_config_varr   rn  r   verr_   rW  r"   r   fsencoder  r  r  r  r  r  r  rs  r  r  r  r,  r   r  r   r   r   r   r   r  r  r   r(  r  r   r   r  r  r  r  r  r  r  r  r  r  rB   rC   rD   rE   rF   rN   rW   rf   	lru_cacherc   r|   r   r   ignore_warningsrw  r  r   r   r   TestCaser   r#  r  r+  rE  rS  r  r  r|  r  test.ssl_serversr  r  r  r,  rk  ry  r~  r  r  r  rR   rm   
HAS_KEYLOGr   r  r
  r  rI  r  r{  mainrZ   r#   r!   <module>r     s       & " & ) ( !  	      	  	         
 "m!!%(  K K!!=cllg&=3&&'	++y8 1112JK  JE3
U#cnnc* &)E"F ]#X&^$
M
"X&G$34 23 	8	r{{6"Hl3(L1/ ++&- ." $
% N+&  ;FT0 ++&- . $ ^, *  01 .  x.
}%
&k"	*n%	
M
"01	<	 k"	+, 56 	>	"r{{6" C!4a8 3 2A6 S"6: %c+H!L $S*FJ  ;34* ! !H". 5_44   #}}t!D$/, !0 4 42J	1x(( J	1ZY 8$$ Y x9DH%% 9Dx@3X&& @3F.X&& .`y<H-- y<x 9%LX&& L &L4	Z	R /_)) _B	t)) tl ?GEI#.b IJKG\QNH%% QNh0 _Y/1EFP1H-- P1 GP1f S^^%67
%(%%BDa/8$$ a/HRsH-- slTBx(( TBn PF zHMMO Yb  F2  s$   S SSSSS