python (3.12.0)

(root)/
lib/
python3.12/
test/
__pycache__/
test_ssl.cpython-312.pyc

ΑeN	ddlZddlZddlZddlmZddlmZddlmZddlmZddlm	Z	ddlm
Z
ddlmZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZ	ddl Z ejDd	Z#ddl$Z$dd
l#m%Z%m&Z&m'Z'm(Z(ejRxrej:dk(Z*e+e#jXZ-ej\Z.e#j^dk\Z0ejbd
Z2iZ3dD]'\Z4Z5	e6e#e4Z4e6e#jJe5Z5e5e3e4<)dZ8e8dZ9ejte9Z;e8dZ<e8dZ=ejte<Z>ejte=Z?e8dZ@e8dZAdZBe8dZCejteCZDe8ddZEe8ddZFddddddddZGe8d ZHe8d!ZId"ZJd#d$d%d&d'd(d)dddd*
ZKe8d+ZLd,ZMe8d-ZNd.ZOe8dd/ZPe8d0ZQe8d1ZRe8d2ZSd"ZTd3ZUe8d4ZVe8d5ZWe8d6ZXe8d7ZYe8d8ZZe8d9Z[e8d:Z\e8d;Z]ejte]Z^e6e#d<dZ_e6e#d=dZ`e6e#d>dZae6e#d?dZbe6e#d@dZcdAZdedrdBZendCZedDZfejdEZhdFZidGZjdHZke
jemIZne#jdddddJdKZpeIfdLdMdNZqGdOdPejZsGdQdRejZtGdSdTejZuGdUdVejZvGdWdXejZwGdYdZejZxejd[Gd\d]ejZzdxd^Z{d_Z|dd`l}m~Z~GdadbejZGdcddejZ			dydeZ	dzdfZGdgdhejZej
ehdidjGdkdlejZee#jdmZej
ednZGdodpejZdqZGdrdsejZGdtduejZdvZedwk(rej"yy#e!$rdZ YAwxYw#e7$rYwxYw){N)support)
import_helper)	os_helper)
socket_helper)threading_helper)warnings_helper)asyncoressl)
TLSVersion_TLSContentType_TLSMessageType
_TLSAlertTypewin32)rrPY_SSL_DEFAULT_CIPHERS))PROTOCOL_SSLv3SSLv3)PROTOCOL_TLSv1TLSv1)PROTOCOL_TLSv1_1TLSv1_1ctjjtjjtg|SN)ospathjoindirname__file__names A/BuggyBox/python/3.12.0/bootstrap/lib/python3.12/test/test_ssl.py	data_filer">s'
77<<19D99zkeycert.pemzssl_cert.pemzssl_key.pemzkeycert.passwd.pemzssl_key.passwd.pemsomepasscapathz
4e1295a3.0z
5ed36f99.0))countryNameXY)localityNamezCastle Anthrax)organizationNamezPython Software Foundation))
commonName	localhostzAug 26 14:23:15 2028 GMTzAug 29 14:23:15 2018 GMT98A7CF88C74A32ED))DNSr.rissuernotAfter	notBeforeserialNumbersubjectsubjectAltNameversionzrevocation.crlzkeycert3.pemr.)z)http://testca.pythontest.net/testca/ocsp/)z0http://testca.pythontest.net/testca/pycacert.cer)z2http://testca.pythontest.net/testca/revocation.crl)r&))r,Python Software Foundation CA))r-z
our-ca-serverzOct 28 14:23:16 2037 GMTzAug 29 14:23:16 2018 GMTCB2D80995A69525C)
OCSP	caIssuerscrlDistributionPointsr2r3r4r5r6r7r8zkeycert4.pemfakehostnamezkeycertecc.pemz
localhost-eccz
ceff1710.0zallsans.pemzidnsans.pemz	nosan.pemzself-signed.pythontest.netnullcert.pembadcert.pemzXXXnonexisting.pem
badkey.pemz	nokia.pemznullbytecert.pemztalos-2019-0758.pemzffdh3072.pemOP_NO_COMPRESSIONOP_SINGLE_DH_USEOP_SINGLE_ECDH_USEOP_CIPHER_SERVER_PREFERENCEOP_ENABLE_MIDDLEBOX_COMPATc	tdd5}d|jvcdddS#1swYyxYw#t$rYywxYw)Nz/etc/os-releasezutf-8)encodingubuntuF)openreadFileNotFoundError)fs r!	is_ubunturNsJ#g
6	(!qvvx'	(	(	(s#
7+	7477	AAc|D]H}t|ds|jtjjks8|jdJy)z@"Lower security level to '1' and allow all ciphers for TLS 1.0/1minimum_versionz@SECLEVEL=1:ALLN)hasattrrPr
rrset_ciphers)ctxsctxs  r!seclevel_workaroundrUsA	3C./##s~~'='== 12	3r#cyr)rSs r!rUrUsr#ct|tr'|jdsJtt|d}|y|tj
tjtjhvry|j}t|tddS)zCheck if a TLS protocol is available and enabled

    :param protocol: enum ssl._SSLMethod member or name
    :return: bool
    	PROTOCOL_NFT)
isinstancestr
startswithgetattrr
PROTOCOL_TLSPROTOCOL_TLS_SERVERPROTOCOL_TLS_CLIENTr has_tls_versionlen)protocolr s  r!has_tls_protocolrds(C "";//3$/#11
==D4K 0 1233r#c4t|trtjj|}ttd|jsytr|tjjkrytjtj}t|dr7|jtjjk7r||jkryt|dr7|jtjjk7r||jkDryy)z{Check if a TLS/SSL version is enabled

    :param version: TLS version name or ssl.TLSVersion member
    :return: bool
    HAS_FrPmaximum_versionT)rZr[r
r__members__r]r IS_OPENSSL_3_0_0TLSv1_2
SSLContextr`rQrPMINIMUM_SUPPORTEDrgMAXIMUM_SUPPORTED)r8rTs  r!raras'3..,,W53$w||n-.Gcnn&<&<<..00
1CC*+3>>#C#CCc)))&'s~~???#%%%r#cfd}|S)zDecorator to skip tests when a required TLS version is not available

    :param version: TLS version name or ssl.TLSVersion member
    :return:
    cFtjfd}|S)NcZtstjd|i|S)Nz is not available.)raunittestSkipTest)argskwfuncr8s  r!wrapperz8requires_tls_version.<locals>.decorator.<locals>.wrappers4"7+''7)3E(FGGT(R((r#)	functoolswraps)rurvr8s` r!	decoratorz'requires_tls_version.<locals>.decorators%			)
	)
r#rW)r8rys` r!requires_tls_versionrzsr#cdjtjtj}t
jr#tjj||zyy)N )	r	tracebackformat_exceptionsys	exceptionrverbosestdoutwrite)prefix
exc_formats  r!handle_errorrsD)44S]]_EFJ

*,-r#ctjr2tjjdkDrtjStj
SNr)timedaylight	localtimetm_isdstaltzonetimezonerWr#r!
utc_offsetrs5}})22Q6}MM>r#)category)	cert_reqsca_certscipherscertfilekeyfilec|jds-t|d<tjtj}n#tjtj
}|!|tjk(rd|_||_||j||||j||||j||j|fi|S)Nserver_sideserver_hostnameF)
getSIGNED_CERTFILE_HOSTNAMEr
rkr`r_	CERT_NONEcheck_hostnameverify_modeload_verify_locationsload_cert_chainrRwrap_socket)sockrrrrrkwargscontexts        r!test_wrap_socketrs::m$$< !..!8!89..!8!89

%%*G"'%%h/w2'2G$7t.v..r#Tserver_chainc|tk(rt}n+|tk(rt}n|tk(rt
}nt
|tjtj}|jttjtj}|j||r|jt|||fS)zUCreate context

    client_context, server_context, hostname = testing_context()
    )SIGNED_CERTFILErSIGNED_CERTFILE2SIGNED_CERTFILE2_HOSTNAME	NOSANFILENOSAN_HOSTNAME
ValueErrorr
rkr`r
SIGNING_CAr_r)server_certrhostnameclient_contextserver_contexts     r!testing_contextr*s
o%+	(	(,			!!%%^^C$;$;<N((4^^C$;$;<N"";/,,Z8>833r#c:eZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZej d
ZdZdZdZdZdZdZdZdZdZej8dej<vddZdZ dZ!ej8e"jFdk(ddZ$ej8e"jFdk(ddZ%d Z&d!Z'd"Z(d#Z)d$Z*ej8e+d%d&Z,d'Z-ej\d(d)d*Z/d+Z0d,Z1y-).BasicSocketTestsctjtjtjtjtj
tjtj|jtjd|jtjd|jtjd|jtjdtjtjtjtj tj"tj$|jtj&tj(y)NT)r
r
CERT_OPTIONAL
CERT_REQUIREDrErCrDrBassertEqualHAS_SNIHAS_ECDHHAS_TLSv1_2HAS_TLSv1_3OP_NO_SSLv2OP_NO_SSLv3OP_NO_TLSv1
OP_NO_TLSv1_3
OP_NO_TLSv1_1
OP_NO_TLSv1_2r^PROTOCOL_SSLv23selfs r!test_constantszBasicSocketTests.test_constantsEs

''d+t,$/$/))3+>+>?r#cttD]U}|jds|j|5t	t|}|j|dd|dddWy#1swYbxYw)NOP_optionrssl.)dirr
r\subTestr]assertGreaterEqual)rr values   r!test_optionszBasicSocketTests.test_optionsYswH	AD??5)T*
AT*''qD-@
A
A	A
A
As'A))A2	ctjtjtjtjtj
tjg}|D]C}|j|5|jtd5d|_
ddddddEtj|tjy#1swY8xYw#1swYxYw)N)ssl_typezimmutable type)
_ssl_SSLContext
_SSLSocket	MemoryBIOCertificate
SSLSessionSSLErrorrassertRaisesRegex	TypeErrorrrcheck_disallow_instantiation)r	ssl_typesrs   r!test_ssl_typeszBasicSocketTests.test_ssl_typesbsOONNOOMM

	"	*Hx0
*++I7GH*%)HN*
*
*	*	,,T43C3CD**
*
*s$4CC
C
CCC	c|jtd5tj5}tj	|ddddddy#1swYxYw#1swYyxYwNzpublic constructor)rrsocketr
	SSLSocketrss  r!test_private_initz"BasicSocketTests.test_private_initqsY

#
#I/C
D	!
!A

a 
!	!	!
!
!	!	!s"AAAA	AA(c2tj}|jt|d|jz|jt|t|jtj
|}|j|j|y)Nz$<_SSLMethod.PROTOCOL_TLS_CLIENT: %r>)	r
r`rreprrr[rkassertIsrcrprotorTs   r!test_str_for_enumsz#BasicSocketTests.test_str_for_enumsvsj''e&Lu{{&Z[US%56nnU#

cllE*r#cHtj}tjr,tj
j
d||xrdxsdfz|r1tjd}|jt|dn/|jtjtjd|jttjdtjddtjddtjtd	dy)
Nz
 RAND_status is %d (%s)
zsufficient randomnesszinsufficient randomnesszthis is a random stringgR@sthis is a random bytes objects!this is a random bytearray object)r
RAND_statusrrrrr
RAND_bytesrrbassertRaisesrrRAND_add	bytearray)rvdatas   r!test_randomzBasicSocketTests.test_randomsOO??JJ: !A$A*A$: 9 ;;
<
>>"%DSY+cllCNNB?	
*cnnb9.55t<YCDdKr#c^|jtjjtt
|jtjjtttjjt}tjr8tjjdtj|zdz|j|dd|j|dd|j|dd|j|dd	y)
N
r7))r0zprojects.developer.nokia.com)r0zprojects.forum.nokia.comr;)zhttp://ocsp.verisign.comr<)z0http://SVRIntl-G3-aia.verisign.com/SVRIntlG3.cerr=)z0http://SVRIntl-G3-crl.verisign.com/SVRIntlG3.crl)rr
r_test_decode_certCERTFILE
CERTFILE_INFOrSIGNED_CERTFILE_INFO	NOKIACERTrrrrrpprintpformatrps  r!test_parse_certz BasicSocketTests.test_parse_certs	
HH&&x0	
	
HH&&7 	

HH&&y1??JJTFNN1$55<=+,?	
	
6$AB;N	P23N	Pr#ctjjt}tj
r8tjjdtj|zdz|j|dddddddd	y)
Nr))r'UK))r-zcody-cazJun 14 18:00:58 2028 GMTzJun 18 18:00:58 2018 GMT02)r))r-#codenomicon-vm-2.test.lal.cisco.com))r0rrr1)r
rrTALOS_INVALID_CRLDPrrrrrrrrrs  r!test_parse_cert_CVE_2019_5010z.BasicSocketTests.test_parse_cert_CVE_2019_5010swHH&&':;??JJTFNN1$55<=
L67 $H#E
	
r#ctjjt}tj
r8tjjdtj|zdzd}|j|d||j|d|tjdk\rd}nd}|j|d|y)	Nr)))r'US))stateOrProvinceNameOregon))r*	Beavertonr+))organizationalUnitNamezPython Core Development))r-znull.python.orgexample.org))emailAddresszpython-dev@python.orgr6r2)r	)r0zaltnull.python.orgexample.comemailz null@python.orguser@example.orgURIz)http://null.python.orghttp://example.org
IP Addressz	192.0.2.1)rz2001:DB8:0:0:0:0:0:1)rrrr)rz	<invalid>r7)
r
rrNULLBYTECERTrrrrrrrr_OPENSSL_API_VERSION)rrr6sans    r!test_parse_cert_CVE_2013_4238z.BasicSocketTests.test_parse_cert_CVE_2013_4238sHH&&|4??JJTFNN1$55<=A	
9w/8g.##y0;C0C	
+,c2r#cttjjt}|j	|ddy)Nr7)
)r0allsans	othernamez
<unsupported>r!)rzuser@example.org)r0zwww.example.org)DirName)r&r)r+))r-zdirname example)rzhttps://www.python.org/)r	127.0.0.1)rz0:0:0:0:0:0:0:1)z
Registered IDz	1.2.3.4.5)r
rr
ALLSANFILErrs  r!test_parse_all_sansz$BasicSocketTests.test_parse_all_sanss1HH&&z2+,
	
r#cttd5}|j}dddtj	}tj|}tj	|}|j
|||jtjdzs|jd|z|jdtjzdzs|jd|zyy#1swYxYw)Nrrz-DER-to-PEM didn't include correct header:
%r
z-DER-to-PEM didn't include correct footer:
%r
)rJ
CAFILE_CACERTrKr
PEM_cert_to_DER_certDER_cert_to_PEM_certrr\
PEM_HEADERfailendswith
PEM_FOOTER)rrMpemd1p2d2s      r!test_DER_to_PEMz BasicSocketTests.test_DER_to_PEMs
-
%	&&(C	

%
%c
*

%
%b
)

%
%b
)R }}S^^d23IIG"LM{{4#..0478IIG"LM9		sC,,C5cVtj}tj}tj}|j	|t
|j	|t|j	|t|j|d|j|d|\}}}}}|j|d|j|d|j|d|j|d|j|d|j|d|j|d|j|d|j|d|j|dd	|d
}	|dk\rd|d
d
|d
d
|d
}
nd|d
d
|d
d
|d
}
|j|j|
|	f||t|fy)Nii@r?z	LibreSSL drzOpenSSL .)r
OPENSSL_VERSION_NUMBEROPENSSL_VERSION_INFOOPENSSL_VERSIONassertIsInstanceinttupler[r
assertLessassertLessEqual
assertTruer\hex)rntrmajorminorfixpatchstatuslibressl_veropenssl_vers           r!test_openssl_versionz%BasicSocketTests.test_openssl_versions&&$$a%a'a%	
:.:&+,(uc5&q)q!q)s#Q'S!q)UB'*VR("5),A:$U1IQuQiqq	BK$U1IQuQiqQ@K
LL+|45
3q6N	
r#ctjtj}t|}tj|}tjdtf5~ddd|j|dy#1swY!xYw)N)	rAF_INETrweakrefrefrcheck_warningsResourceWarningr)rrsswrs    r!
test_refcyclezBasicSocketTests.test_refcycle&sj
MM&..)
a
 
[[_

+
+R,A
B		t$		sBB
c	`tjtj}t|5}|jt|j
d|jt|jtd|jt|jd|jt|jtdd|jt|jd|jt|jdd|jt|j|jt|jdgddd|jt|jd|jt|j tdgdddy#1swYyxYw)Nr6x)z0.0.0.0rrWrd)rrSrrOSErrorrecv	recv_intorrecvfrom
recvfrom_intosendsendtoNotImplementedErrordupsendmsgrecvmsgrecvmsg_intorrrXs   r!test_wrapped_unconnectedz)BasicSocketTests.test_wrapped_unconnected1s6
MM&..)
a
 	0Bgrww2gr||Yt_Egr{{A6gr'7'74!Lgrww5gryy$G1266:12::#fb!^
=12::sC12??(~.
0	0	0	0sE,F$$F-cdD]j}tjtj}|j|t|5}|j	||jdddly#1swYwxYw)N)Ng@)rrS
settimeoutrr
gettimeout)rtimeoutrrXs    r!test_timeoutzBasicSocketTests.test_timeoutCsk(	;G

fnn-A
LL!!!$
;  "--/:
;
;	;
;
;s!A11A:	ctjtjtjtjg}tj
tjtjtjg}tjjtjjtjjg}|D]}|j|5tjtj}|j!t"5}|xj$|zc_ddd|j'dt)j*ddd|D]}t-|s|j|5|j!t"5}tj|ddd|j'd|j.dt)j*ddd|D]}t1|s|j|5tjtj}|j!t"5}||_ddd|j4j6d|j.}	|j'd|	dt)j*dddy#1swYxYw#1swYxYw#1swY&xYw#1swYxYw#1swYxYw#1swY
xYw)Nrz4ssl.OP_NO_SSL*/ssl.OP_NO_TLS* options are deprecated)rcrz is deprecated)r8r<)r
rrrrrrPROTOCOL_TLSv1_2r^rrrrrrkr`assertWarnsDeprecationWarningoptionsrr[warningrdr rarP	__class____name__)
rrv	protocolsversionsrrTcmrcr8version_texts
          r!test_openssl111_deprecationsz-BasicSocketTests.test_openssl111_deprecationsLsOO	

    	
	
NN  NN  NN""
	FV,
nnS%<%<=%%&89*RKK6)K*  J

O	

	"		H#H-x0
%%&89-RNN8,-  8==/8

O

		 	G"7+g.
nnS%<%<=%%&892R*1C'2*1*;*;*D*DgllS  <.7

O

	%**

--

22

sm!9K
K0-K

K' K6;K'9LK4ALK
K

K	K$K''K1	4K=9LL
	ctjjtjjtxstj
|}t
j}|j|j|jtj5t||dddy#1swYyxYw)z;Check that trying to use the given client certificate failsrN)
rrrrrcurdirr
addCleanupcloserr
rrrrrs   r!
bad_cert_testzBasicSocketTests.bad_cert_tests~77<< 9 FRYY#+-}}

#


s||
,	0T&.
0	0	0	0s"B99Cc&|jdy)z Wrapping with an empty cert filer?Nrrs r!test_empty_certz BasicSocketTests.test_empty_certs>*r#c&|jdy)z:Wrapping with a badly formatted certificate (syntax error)r@Nrrs r!test_malformed_certz$BasicSocketTests.test_malformed_certs=)r#c&|jdy)z2Wrapping with a badly formatted key (syntax error)rANrrs r!test_malformed_keyz#BasicSocketTests.test_malformed_keys<(r#ctjtj}tj5}|j	t
|j|dddddy#1swYyxYw)NTz
some.hostnamer)r
rkr_rrrr)rrTrs   r!test_server_sidez!BasicSocketTests.test_server_sidesXnnS445
]]_	?j#//4.=

?	?	?	?s%A&&A/ctjd}tjtj}|j|j	t|d5}|j
t5|jddddddd|jy#1swY"xYw#1swY&xYw)Nr$rFdo_handshake_on_connectzunknown-type)
r
create_serverrSconnectgetsocknamerrrget_channel_bindingr)rrcrXs    r!test_unknown_channel_bindingz-BasicSocketTests.test_unknown_channel_bindings  !12MM&..)			!--/"
a
?	72"":.
7&&~6
7	7	
	
7
7	7	7s$%B:;B.
B:.B7	3B::C
tls-unique*'tls-unique' channel binding not availablectjtj}t|5}|j|j	ddddtjtj}t|dt
5}|j|j	ddddy#1swYhxYw#1swYyxYw)NrT)rr)rrSrassertIsNonerrrjs   r!test_tls_unique_channel_bindingz0BasicSocketTests.test_tls_unique_channel_bindings
MM&..)
a
 	DBb44\BC	D
MM&..)
aTH
E	Db44\BC	D	D		D	D	D	Ds!B7
!C7CCcVttjtj}t|}|j	t
5}d}t
jddd|j|tjjdy#1swY<xYwr)rrrSrrtrWr
gc_collectassertInr[rwrs)rrXr(r|s    r!test_dealloc_warnz"BasicSocketTests.test_dealloc_warnsz
fmmFNN;
<H


o
.	!"B 	!	


aRZZ__Q/01	!	!s
BB(ctj}|jt|d|j	|tj
t
j5}t|d<t|d<tj}|j|jt|j|jtdddy#1swYyxYw)NSSL_CERT_DIR
SSL_CERT_FILE)r
get_default_verify_pathsrrbr@DefaultVerifyPathsrEnvironmentVarGuardCAPATHrcafiler%)rpathsenvs   r!test_get_default_verify_pathsz.BasicSocketTests.test_get_default_verify_pathss,,.UQ'eS%;%;<

*
*
,	3"(C#+C 002EU\\84U\\62	3	3	3s
$A'CCrWindows specificc(|jtjd|jtjd|jttj|jt
tjdt
}dD]}tj|}|j|t|D]}|j|t|jt|d|\}}}|j|t|j|ddh|j|tttft!|ttfs|j#|d}|j||y)	NCAROOTrR)rrrx509_asn
pkcs_7_asn1.3.6.1.5.5.7.3.1)rEr
enum_certificatesrrWindowsErrorsetr@listrBrrbbytesr	frozensetboolrZupdate)	r
trust_oids	storenamestoreelementcertenctrust
serverAuths	         r!test_enum_certificatesz'BasicSocketTests.test_enum_certificatess?--d34--f56)S%:%:;,(=(=rBU
'	-I)))4E!!%. 
-%%gu5  Wq1#* c5%%dE2

cJ#=>%%eid-CDei%56%%e,
-	-)


j*-r#c|jtjd|jttj|jt
tjdtjd}|j
|t|D]c}|j
|t|jt|d|j
|dt|j|dddhey)NrrRrr6rr)
rEr
	enum_crlsrrrr@rrBrrbrr)rcrlsrs   r!test_enum_crlszBasicSocketTests.test_enum_crlss

d+,)S]]3,

r:}}T"dD)	BG!!'51S\1-!!'!*e4MM'!*z<&@A		Br#cd}tjd}|j|||j|jd|j|jd|j|j
d|j|jd|j|tj|jttjdtjjd}|j|||j|tj|jttjjd|jtd5tjjddddtd	D]}	tjj|}|j|jt|j|jt|j|j
t|j|jttdftjj!d}|j|||j|tj|jtjj!d||jtjj!d||jtd
5tjj!ddddy#1swYxYw#t$rYwxYw#1swYyxYw)N)rTLS Web Server Authenticationrrrrrzunknown NID 100000izunknown object 'serverauth'
serverauth)r
_ASN1Objectrnid	shortnamelongnameoidr@rrfromnidrrangerAr[typefromname)rexpectedvaliobjs     r!test_asn1objectz BasicSocketTests.test_asn1objects)oo12h'#&5'FG"56c3??3*coo|Doo%%c*h'c3??3*coo&=&=rB

#
#J0D
E	,OO##F+	,t		BA
Boo--a0%%cggs3%%cmmS9%%cllC8%%cggT$Z/@A		Boo&&'FGh'c3??311,?J112EF!	#

#
#J0M
N	3OO$$\2	3	3'	,	,


	3	3s*5 M,M M#M	M M #M,cPtjd}|jtjjtj|jtjj||jtjjjd|jtjjjd|jtjjjdtjd}|jtjjtj|jtjj||jtjjjd|jtjjjd|jtjjjdy)Nrrrz1.3.6.1.5.5.7.3.2
clientAuth)
r
rr@PurposeSERVER_AUTHrrrrCLIENT_AUTH)rrs  r!test_purpose_enumz"BasicSocketTests.test_purpose_enumsXoo12ckk55sG00#60044c:00::LI00441	3oo12ckk55sG00#60044c:00::LI00441	3r#cxtjtjtj}|j|j|jt5}t|tjddd|jtjdtjtj}|jt5}|j|ddd|jt|jdy#1swYxYw#1swY;xYw)Nrz!only stream sockets are supported)rrS
SOCK_DGRAMrrrrerr
rrr[rrkr`r)rrcxrTs    r!test_unsupported_dtlsz&BasicSocketTests.test_unsupported_dtls(sMM&..&*;*;< 


2
3	9rQ#--8	9R\\*,OPnnS445


2
3	rOOA	R\\*,OP
	9	9		s#D$$D0$D-0D9cN|jtj||yr)rr
cert_time_to_seconds)r
timestring	timestamps   r!cert_time_okzBasicSocketTests.cert_time_ok3s11*=yIr#c|jt5tj|dddy#1swYyxYwr)rrr
r)rrs  r!cert_time_failzBasicSocketTests.cert_time_fail6s3


z
*	1$$Z0	1	1	1s5>z)local time needs to be different from UTCcL|jdd|jddy)NzMay  9 00:00:00 2007 GMTgCAJan  5 09:34:43 2018 GMTѓA)rrs r!"test_cert_time_to_seconds_timezonez3BasicSocketTests.test_cert_time_to_seconds_timezone:s&
	
4lC4lCr#cd}d}|j|||jtj|||jd||jd||j	d|j	d|j	d|j	d	|j	d
|j	d|j	dd
}|jd||jd||jdd|jdd|jdd|j	d|jddy)Nrr)	cert_timezJan 05 09:34:43 2018 GMTzJaN  5 09:34:43 2018 GmTzJan  5 09:34 2018 GMTzJan  5 09:34:43 2018zJan  5 09:34:43 2018 UTCzJan 35 09:34:43 2018 GMTzJon  5 09:34:43 2018 GMTzJan  5 24:00:00 2018 GMTzJan  5 09:60:43 2018 GMTgWAzDec 31 23:59:60 2008 GMTzJan  1 00:00:00 2009 GMTzJan  5 09:34:59 2018 GMTiFOZzJan  5 09:34:60 2018 GMTiFOZzJan  5 09:34:61 2018 GMTiFOZzJan  5 09:34:62 2018 GMTzDec 31 23:59:59 9999 GMTg MB)rrr
rr)rrts
newyear_tss    r!test_cert_time_to_secondsz*BasicSocketTests.test_cert_time_to_secondsBsA/

*b)11J1GL4b94b934236767676767!
4jA4jA4jA4jA4jA67	
4nEr#LC_ALLrRcd}|jdk(r|jd|jdd|j|dzy)Nc.tjddS)Nz%b)	r6rrr7rrrr)rstrftimerWr#r!local_february_namezNBasicSocketTests.test_cert_time_to_seconds_locale.<locals>.local_february_nameis=='BCCr#febz>locale-specific month name needs to be different from C localezFeb  9 00:00:00 2007 GMTg`rAz  9 00:00:00 2007 GMT)lowerskipTestrr)rrs  r! test_cert_time_to_seconds_localez1BasicSocketTests.test_cert_time_to_seconds_localeesZ	D &&(E1MM4
5	
4lC/14KKLr#c&tjtj}|j|jt	j
|}t
tjtjtj}|j|j|jt|f}tjtjtjtjf}|j!||y)Nr)rrSrrr	bind_portrr
r
connect_exHOSTerrnoECONNREFUSEDEHOSTUNREACH	ETIMEDOUTEWOULDBLOCKr)rserverportrrcerrorss      r!test_connect_ex_errorz&BasicSocketTests.test_connect_ex_errortsv~~.%&&v.V]]6>>:&)&7&7
9 
\\4,
'
 2 2EOO
	


b&!r#ct\}}}t|}|5|jtj|5}|j	t
|jf|j|jdd|j|jddddddddy#1swYxYw#1swYyxYw)Nrrrr#)
rThreadedEchoServerrrrr	rrr_rcrrrrrrs      r!test_read_write_zeroz%BasicSocketTests.test_read_write_zeros3B3D0#N;
	1++FMMO<D,F
1IJ		4-.  C0  a0	
1	1	1
1
1	1	1s$&CA$B8'C8C	=CC
N)2ry
__module____qualname__rrrrrrrr
rr&r4rPrcpython_onlyrZrkrqr~rrrrrrrq
skipUnlessr
CHANNEL_BINDING_TYPESrrrrplatformrrrrrrrrrrrun_with_localerrrrWr#r!rrCs@(A
E!
+L(P:
*3:
*
N!
F
%%0$;3j0+*)?X)B)BBEGDGD2
3X02DE.F.0X02DEBFB%3N3"	QJ1XDFDFD!FFWXr*M+M" 	1r#rceZdZdZdZejedk(ddZdZ	dZ
dZd	Ze
d
Zejeej"ddd
ZdZdZdZdZej.eddZdZdZejej8ddZdZdZdZ dZ!dZ"ej.e#jHdk(ddZ%eje#jHdk(d ej.e&jNd!d"Z(d#Z)d$Z*d%Z+d&Z,d'Z-d(Z.d)Z/y*)+ContextTestscHtD]\}t|stj5tj|}ddd|j
j|^tj5tj}ddd|j
jtj|jttj
d|jttj
dy#1swYxYw#1swYxYw)Nr*)	PROTOCOLSrdrrVr
rkrrcr^rr)rrcrTs   r!test_constructorzContextTests.test_constructors!	9H)$3353..2C3  x8		9

+
+
-	#.."C	#s'7'78*cnnb9*cnnb933	#	#sD:DD	D!ctjtj}|jd|jd|j	tj
d5|jddddy#1swYyxYw)NALLDEFAULTNo cipher can be selected^$:,;?*'dorothyx)r
rkr`rRrrrrTs  r!test_cipherszContextTests.test_cipherssennS445	"

#
#CLL2M
N	0OO./	0	0	0s&BB
r6z+Test applies only to Python default ciphersc6tjtj}|j}|D]a}|d}|j	d||j	d||j	d||j	d||j	d|cy)Nr PSKSRPMD5RC43DES)r
rkr`get_ciphersassertNotIn)rrTrsuiter s     r!test_python_ciphersz ContextTests.test_python_cipherssnnS445//#	+E=DUD)UD)UD)UD)VT*
	+r#c
>tjtj}|jdt	d|jD}hd}|j
|}|jt|ddt|dt|y)NAESGCMc3&K|]	}|dyw)r NrW).0r;s  r!	<genexpr>z0ContextTests.test_get_ciphers.<locals>.<genexpr>s9!AfI9s>AES128-GCM-SHA256AES256-GCM-SHA384DHE-RSA-AES128-GCM-SHA256DHE-RSA-AES256-GCM-SHA384ECDHE-RSA-AES128-GCM-SHA256ECDHE-RSA-AES256-GCM-SHA384ECDHE-ECDSA-AES128-GCM-SHA256ECDHE-ECDSA-AES256-GCM-SHA384rz
got: z
expected: )
r
rkr`rRrr3intersectionrrbsorted)rrTnamesrrDs     r!test_get_cipherszContextTests.test_get_cipherssnnS445!9s'899	
))(3qGF5M?,vhGWFX"Y	
r#ctjtj}tjtjztj
z}|ttztztztzz}|j||jtj5|xjtjzc_ddd|j|tjz|jtj5|jtjz|_ddd|j||jd|_|jd|jtj
z|j!t"5d|_ddd|j!t"5ddz|_ddd|j!t$5d|_dddy#1swY;xYw#1swYxYw#1swYpxYw#1swYTxYw#1swYyxYw)Nrrrr]abc)r
rkr`OP_ALLrrrBrErCrDrFrrvrrVrr
OverflowErrorr)rrTdefaults   r!rzContextTests.test_optionssnnS445::/#//A%(CC$%'9:./	0	
#++.
+
+
-	+KK3??*K	+3??2CKK@
+
+
-	;;;#//)99CK	;#++.CKK3??*::;

}
-	CK	


}
-	#s(CK	#


y
)	 CK	 	 '	+	+
	;	;			#	#	 	 s<+$H$H*H!H-7H9HH!H*-H69Ictj5tjtj}ddd|jjtjtj|_|j|jtjtj|_|j|jtjtj|_|j|jtj|jt5d|_ddd|jt5d|_dddtjtj}|j|jtj|j|jtjtj }|j|jtj|j#|jy#1swYxYw#1swY
xYw#1swYxYwNr#)rrVr
rkr^rrrrrrrrr_assertFalserr`rEr+s  r!test_verify_mode_protocolz&ContextTests.test_verify_mode_protocols

+
+
-	3..!1!12C	3	
#--8++#*;*;<++#*;*;<--#--8


y
)	#"CO	#


z
*	! CO	!nnS445#--8++,nnS445#*;*;<**++	3	3	#	#	!	!s#$I=I"II
II&ctjtj}|j|jtj
rgd|_|j|jd|_|j
|jd|_|j|jy|jt5d|_dddy#1swYyxYwNTF)	r
rkr`rEhostname_checks_common_nameHAS_NEVER_CHECK_COMMON_NAMErOrAttributeErrorr+s  r! test_hostname_checks_common_namez-ContextTests.test_hostname_checks_common_namesnnS445778**.2C+OOC;;<.3C+S<<=.2C+OOC;;<"">2
726/
7
7
7sCC%c	tjtj}tjjtjj
tjjh}tjjtjjh}|j|j||j|j|tjj|_
tjj|_|j|jtjj|j|jtjjtjj|_
tjj
|_|j|jtjj|j|jtjj
tjj|_|j|jtjjtjj|_|j|jtjj
tjjtjjhtjj|_
|j|jtjjtjjh|jt 5d|_
dddt#tj$rtjtj$}|j|j||j|jtjj|jt 5tjj|_
ddd|jt 5tjj
|_dddyy#1swYxYw#1swYUxYw#1swYyxYwrN)r
rkr_rrlrrjrmTLSv1_3rrPrgrrrrrrdr)rrT
minimum_range
maximum_ranges    r!test_min_max_versionz!ContextTests.test_min_max_version
sKnnS445

NN,,NN  NN""



NN,,NN""	

	


	
	


	
"nn44!nn44!7!7	
	
!7!7	
"nn>>!nn22!A!A	
	
!5!5	
"nn>>!A!A	
"nn>>


^^
!
!3>>#9#93>>;O;OP	

"nn>>


^^
#
#S^^%;%;<	



z
*	%"$C	%C001..!5!56CMM##]

##S^^%E%E
"":.
G&)nn&F&F#
G"":.
;&)nn&:&:#
;
;2	%	%
G
G
;
;s$R5 R)2 R5R&)R25R>security_levelzrequires OpenSSL >= 1.1.0ctjtj}hd}|j|j|y)N>rr6rrr7r)r
rkr`rr\)rrTsecurity_level_ranges   r!test_security_levelz ContextTests.test_security_level\s7
nnS445 
	


c((*>?r#ctjtj}ttdd}|j	|j
tj|ztj|_|j	|j
tjtj|_|j	|j
tjtj|_|j	|j
tjtj|_|j	|j
tjtjtjz|_|j	|j
tjtjz|jt5d|_dddy#1swYyxYw)NVERIFY_X509_TRUSTED_FIRSTr)
r
rkr_r]rverify_flagsVERIFY_DEFAULTVERIFY_CRL_CHECK_LEAFVERIFY_CRL_CHECK_CHAINVERIFY_ALLOW_PROXY_CERTSVERIFY_X509_STRICTrr)rrTtfs   r!test_verify_flagszContextTests.test_verify_flagsos]nnS445
S5q
9))3+=+=+BC44))3+D+DE55))3+E+EF--))3+=+=>77))3+G+GH44s7M7MM))22S5K5KK	M


y
)	$#C	$	$	$sG%%G.c
tjtj}|jtd|jtt|jt|jt|jt5}|jtddd|jjjtj|jtjd5|jtddd|jtjd5|jt dddtjtj}|jt"t$|jt"t$|jt&t(|jtjd5|jt"ddd|jtjd5|jt$ddd|jtjd5|jt$t"dddtjtj}|jtjd5|jt*t$ddd|jt,t.|jt,t.j1|jt,t3t.j1|jt"t4t.|jt"t4t.j1|jt"t4t3t.j1|jtd5|jt,dddd|jtj5|jt,dddd|jt6d	5|jt,d
dzdddd}d
}d}d}d}d}d}	Gdd}
|jt,||jt,||jt,||jt,|
|jt,|
j8|jtj5|jt,|ddd|jt6d	5|jt,|ddd|jtd5|jt,|ddd|jt:d5|jt,|	ddd|jt|	y#1swYxYw#1swY3xYw#1swYxYw#1swY^xYw#1swY-xYw#1swYxYw#1swYxYw#1swY|xYw#1swYJxYw#1swYxYw#1swYFxYw#1swYxYw#1swYxYw#1swYxYw)N)rPEM librrzkey values mismatch)passwordzshould be a stringTbadpasszcannot be longeraictSrKEY_PASSWORDrWr#r!getpass_unicodez:ContextTests.test_load_cert_chain.<locals>.getpass_unicodesr#c*tjSr)rrencoderWr#r!
getpass_bytesz8ContextTests.test_load_cert_chain.<locals>.getpass_bytess&&((r#c<ttjSr)rrrrurWr#r!getpass_bytearrayz<ContextTests.test_load_cert_chain.<locals>.getpass_bytearrays\00233r#cy)NrnrWrWr#r!getpass_badpassz:ContextTests.test_load_cert_chain.<locals>.getpass_badpasssr#cddzS)NroirWrWr#r!getpass_hugez7ContextTests.test_load_cert_chain.<locals>.getpass_huges
;''r#cy)NrrWrWr#r!getpass_bad_typez;ContextTests.test_load_cert_chain.<locals>.getpass_bad_typesr#ctd)N
getpass error)	ExceptionrWr#r!getpass_exceptionz<ContextTests.test_load_cert_chain.<locals>.getpass_exceptions
O,,r#ceZdZdZdZy):ContextTests.test_load_cert_chain.<locals>.GetPassCallablectSrrqrs r!__call__zCContextTests.test_load_cert_chain.<locals>.GetPassCallable.__call__##r#ctSrrqrs r!getpasszBContextTests.test_load_cert_chain.<locals>.GetPassCallable.getpassrr#N)ryrrrrrWr#r!GetPassCallablers
$
$r#rzmust return a stringr)r
rkr_rrrrr^NONEXISTINGCERTrrr
ENOENTrrBADCERT	EMPTYCERTONLYCERTONLYKEYBYTES_ONLYCERT
BYTES_ONLYKEYr)CERTFILE_PROTECTEDrrrurONLYKEY_PROTECTEDrrr)rrTr|rsrvrxrzr|r~rrs           r!test_load_cert_chainz!ContextTests.test_load_cert_chainsnnS445Hd3Hh7)S%8%8(K


w
'	120	1++U\\:

#
#CLL)
<	)(	)

#
#CLL)
<	+	*	+nnS445Hg.Xw?^]K

#
#CLL)
<	*)	*

#
#CLL)
<	)(	)

#
#CLL)
<	D(C	DnnS445

#
#CLL2G
H	8
w7	8	.F.9L9L9NO.%.|/B/B/D%E		GH&7FH&79L9L9NOH&7%l&9&9&;<	>

#
#I/C
D	C 2TB	C


s||
,	H 2YG	H

#
#J0B
C	L
 2TF]K		L	 	)	4		(		-	$	$
	.I.G.9JK.9JK.%4%6%>%>		@


s||
,	N 2_M	N

#
#J0B
C	K 2\J	K

#
#I/E
F	O 2=MN	O

#
#I
?	P 2=NO	P	H/@AW	1	1	)	)	+	+	*	*	)	)	D	D	8	8	C	C	H	H	L	L>	N	N	K	K	O	O	P	PsX=Y
Y2Y$0Y1.Y>ZZZ%;Z2#Z?[[[%=Y
YY!$Y.1Y;>ZZZ"%Z/2Z<?[	[["%[.ctjtj}|jt|jtd|jt
|jt
d|j
t|j|j
t|jddd|j
t5}|jtddd|jjjtj|jtjd5|jt ddd|jtt"|jtt$|j
t|jddy#1swYxYw#1swYmxYw)N)rr%rkr%T)r
rkr_rrBYTES_CERTFILErrr^rrrr
rrrrrBYTES_CAPATHrrTr|s   r!test_load_verify_locationsz'ContextTests.test_load_verify_locationssQnnS445!!(+!!$!?!!.1!!!E)S%>%>?)S%>%>dDQ


w
'	72%%o6	7++U\\:

#
#CLL)
<	/%%g.	/!!(F3!!(<!@	
)S%>%>dK	7	7	/	/sF<G<GGc	tt5}|j}dddtj	}tt
5}|j}dddtj	}tj
tj}|j|jdd|j||j|jdd|j||j|jdd|j||j|jddtj
tj}dj||f}|j||j|jddtj
tj}d|d|d	|d
g}|jdj||j|jddtj
tj}|j||j||j|jdd|j||j|jddtj
tj}dj||f}|j||j|jddtj
tj}|jt|jt|jtj d5|jd
ddd|jtj d5|jdddd|jtj 5|j|dzdddy#1swY#xYw#1swYxYw#1swYxYw#1swYmxYw#1swYyxYw)Nx509_carcadatar6rrheadotheragaintailr#z4no start line: cadata does not contain a certificatebrokenz6not enough data: cadata does not contain a certificatesbrokenA)rJr)rKr
r*CAFILE_NEURONIOrkr`rcert_store_statsrrrrobjectrr)rrM
cacert_pem
cacert_derneuronio_pemneuronio_derrTcombineds        r!test_load_verify_cadataz$ContextTests.test_load_verify_cadatas
-
 	"AJ	"--j9

/
"	$a668L	$//=nnS445--/	:A>!!!4--/	:A>!!!6--/	:A>!!!6--/	:A>nnS44599j,78!!!2--/	:A>nnS445Jw &*!!8)<!=--/	:A>nnS445!!!4!!!6--/	:A>!!!4--/	:A>nnS44588Z67!!!2--/	:A>nnS445)S%>%>vN

#
#LLB
	7
%%X%6		7

#
#LLD
	8
%%Y%7		8


s||
,	@%%Z$->%?	@	@y	"	"	$	$^	7	7
	8	8
	@	@s;Q
Q.Q)Q(#Q4QQQ%(Q14Q=)Avoid mixing debug/release CRT on Windowsctjtj}|jtt
jdk7r|jt|jt|j|jt|jd|jt5}|jtddd|jjjtj|jtj 5}|jt"dddy#1swY{xYw#1swYyxYw)Nnt)r
rkr_load_dh_paramsDHFILErr BYTES_DHFILErrrLrrrr
rrrrs   r!test_load_dh_paramsz ContextTests.test_load_dh_params*snnS4456"
77d?|,)S%7%78)S%7%7>


0
1	0R/	0++U\\:


s||
,	)x(	)	)	0	0	)	)s7E(EEEctjtjhD]C}tj|}|j	|jddddddddddddEy)Nr)numberrconnect_goodconnect_renegotiateacceptaccept_goodaccept_renegotiatehitsmissestimeouts
cache_full)r
r`r_rkr
session_statsrs   r!test_session_statszContextTests.test_session_stats8so--s/F/FG	E..'CS..0 !'( &'3
	r#cjtjtj}|jyr)r
rkr`set_default_verify_pathsr+s  r!test_set_default_verify_pathsz*ContextTests.test_set_default_verify_pathsIs$nnS445$$&r#z#ECDH disabled on this OpenSSL buildctjtj}|jd|jd|j	t
|j|j	t
|jd|j	t|jd|j	t|jdy)N
prime256v1s
prime256v1foofoo)r
rkr_set_ecdh_curverrrr+s  r!test_set_ecdh_curvez ContextTests.test_set_ecdh_curveOsnnS445<(=))S%7%78)S%7%7>*c&8&8%@*c&8&8&Ar#ctjtj}|jt|j
|jt|j
d|jt|j
d|jt|j
|d}|jd|j|y)Nr7rRcyrrW)r
servernamerTs   r!
dummycallbackz5ContextTests.test_sni_callback.<locals>.dummycallbackbr#)r
rkr_rrset_servername_callback)rrTrs   r!test_sni_callbackzContextTests.test_sni_callbackYsnnS445	
)S%@%@A)S%@%@!D)S%@%@"E)S%@%@#F	##D)##M2r#ctjtj}|fd}|j|t	j
|}~~t
j|j|dy)NcyrrW)rrrTcycles    r!rz>ContextTests.test_sni_callback_refcycle.<locals>.dummycallbackkrr#)	r
rkr_rrTrUgccollectr)rrTrrYs    r!test_sni_callback_refcyclez'ContextTests.test_sni_callback_refcyclegsZnnS4457:	##M2
[[





bdD!r#ctjtj}|j|j	dddd|jt|j|j	dddd|jt|j|j	dddd|jt|j|j	ddddy)Nr)rcrlx509r6r)	r
rkr`rrrrrr)r+s  r!test_cert_store_statsz"ContextTests.test_cert_store_statsssnnS445--/!Q/	1H%--/!Q/	1!!(+--/!Q/	1!!-0--/!Q/	1r#cFtjtj}|j|j	g|jt|j|j	g|jt|j|j	ddddddddgtt5}|j}dddtj}|j|j	d|gy#1swYAxYw)	N)))r,zRoot CA))rzhttp://www.cacert.org))r-zCA Cert Signing Authority))rzsupport@cacert.orgzMar 29 12:29:49 2033 GMTzMar 30 12:29:49 2003 GMT00)z!https://www.cacert.org/revoke.crlr)r2r3r4r5r=r6r8T)r
rkr`rget_ca_certsrrr)rJrKr*)rrTrMr0ders     r!test_get_ca_certszContextTests.test_get_ca_certssnnS445))+R0!!(+))+R0!!-0))+D55"'ME

	-
 	A&&(C	&&s+))$/#7		sDD ctjtj}|jtjtj}|jtjj
|jtjtj}|jtjjtjtj}|jt|jd|jt|jdy)Nr)	r
rkr`load_default_certsrrrrrr+s  r!test_load_default_certsz$ContextTests.test_load_default_certssnnS445 nnS445s{{667 nnS445s{{667nnS445)S%;%;TB)S%;%;]Kr#rznot-Windows specificc(tjtj}tj5}t
|d<t|d<|j|j|jdddddddy#1swYyxYw)Nrrrr6)rrr)
r
rkr`rrrrrrr)rrTrs   r!test_load_default_certs_envz(ContextTests.test_load_default_certs_envs~nnS445

*
*
,	Z"(C#+C ""$S113QVW5XY		Z	Z	ZsABBrz3Debug build does not share environment between CRTsctjtj}|j|j	}tjtj}tj5}t|d<t|d<|j|dxxdz
cc<|j|j	|dddy#1swYyxYw)Nrrrr6)
r
rkr`rrrrrrr)rrTstatsrs    r!#test_load_default_certs_env_windowsz0ContextTests.test_load_default_certs_env_windowssnnS445 $$&nnS445

*
*
,	<"(C#+C ""$&MQMS113U;	<	<	<s
;ACCc|j|jtjztjtdk7r'|j|jtztt
dk7r'|j|jt
zt
tdk7r'|j|jtzttdk7r'|j|jtzt|j|jtjztrdytjyr)
rrvr
rrBrCrDrEOP_LEGACY_SERVER_CONNECTrir+s  r!_assert_context_optionsz$ContextTests._assert_context_optionsss6H!S[[+<<.
0q S[[+;;-
/"S[[+==/
1&!+S[[+FF8
:s'C'CC.	R474P4P	Rr#ctj}|j|jtj|j|j
tj|j|j|j|tt5}|j}dddtjtt}|j|jtj|j|j
tj|j|tjtjj}|j|jtj |j|j
tj"|j|y#1swY"xYw)N)rr%r)r
create_default_contextrrcr`rrrErrrJrrKrrrr_r)rrTrMrs    r!test_create_default_contextz(ContextTests.test_create_default_contextsF((*s'>'>?#*;*;<**+$$S)
*
	VVXF	((
606)8s'>'>?#*;*;<$$S)(()@)@As'>'>?#--8$$S)		s$GGctj}|j|jtj|j|j
tj|j|j|j|ttjrtj5tjtj}ddd|j|jtj|j|j
tj|j|tj5tjtjtjd}ddd|j|jtj|j|j
tj|j!|j|j|tjtj"j$}|j|jtj&|j|j
tj|j|y#1swYxYw#1swY+xYw)NT)rr)purpose)r
_create_stdlib_contextrrcr`rrrOrrrdrrrVrsrrErrr_r+s  r!test__create_stdlib_contextz(ContextTests.test__create_stdlib_contexts((*s'>'>?#--8++,$$S)C../ //1
E001C1CD
ES\\3+=+=>S__cmm<((-

+
+
-	,,$$++#-C		
s';';<#*;*;<**+$$S)((1H1H(Is'>'>?#--8$$S))
E
E		s$J8'5K8KKctj5tjtj}ddd|jj|j|jtjd|_|j|j|j|jtjd|_tj|_|j|j|j|jtjd|_tj|_d|_|j|j|j|jtjd|_|j|j|j|jtjd|_tj|_d|_|j|j|j|jtjd|_|j|j|j|jtj|jt5tj|_dddd|_|j|jtj|_|j|jtjy#1swYxYw#1swYxxYwrR)rrVr
rkr^rOrrrrrErrrrr+s  r!test_check_hostnamez ContextTests.test_check_hostname	sI

+
+
-	3..!1!12C	3++,#--8"**+#*;*;<"++++,#*;*;<#--"++,#--8!**+#*;*;<"++"++,#*;*;<!**+#*;*;<

z
*	,!mmCO	,"++,--#--8S	3	3H	,	,s$L00L=0L:=Mctjtj}|j|j|j|jtjtjtj}|j|j|j|jtjyr)r
rkr`rErrrrr_rOrr+s  r!test_context_client_serverz'ContextTests.test_context_client_server5snnS445**+#*;*;<nnS445++,#--8r#cGddtj}Gddtj}tjtj}||_||_|jtjd5}|j||ddd|jtjtjd}|j||y#1swYTxYw)NceZdZy);ContextTests.test_context_custom_class.<locals>.MySSLSocketNryrrrWr#r!MySSLSocketrAr#rceZdZy);ContextTests.test_context_custom_class.<locals>.MySSLObjectNrrWr#r!MySSLObjectrDrr#rTr)r
r	SSLObjectrkr_sslsocket_classsslobject_classrrr@wrap_bior)rrrrTrrs      r!test_context_custom_classz&ContextTests.test_context_custom_class@s	#--		#--	nnS445))
__V]]_$_
?	54!!$4	5ll3==?CMMOlNc;/	5	5s	C//C8ctjtj}|j|jdd|_|j|jdd|_|j|jd|jt5d|_ddd|jt5d|_dddtjtj}|j|jd|jt5d|_dddy#1swYxYw#1swYzxYw#1swYyxYw)Nrr6rr)	r
rkr_rnum_ticketsrrrr`r+s  r!test_num_tickestzContextTests.test_num_tickestPs
nnS445!,!,!,


z
*	! CO	!


y
)	#"CO	#nnS445!,


z
*	 CO	 	 	!	!	#	#
	 	 s$D5E$E
5D>E

EN)0ryrrr%r,rqrrr6rGrrPrVignore_deprecationr[rQr
rkr_rirrrskipIfPy_DEBUG_WIN32rrrrrrrrrrrrrrPy_DEBUGrrrrrrrr	rWr#r!r!r!s
:0X/14FH	+H	+
&  D,07L;L;\X 01#
@	
@$(QBfL&?@BX__^%PQ)R)"'X'LMBNB3
"188
LX__S\\W,.DEZFZX02DEX__W%%JL<LF<R"***<*9X	90  r#r!cPeZdZdZej
eddZdZdZ	y)
SSLErrorTestsc8tjdd}|jt|d|j|jdtjdd}|jt|d|j|jdy)Nr6r)r
rrr[r
SSLZeroReturnError)res  r!test_strzSSLErrorTests.test_strdstLLE"Q'!$""1e,Q'!$r#rctjtj}|jtj5}|jtddd|jjjd|j|jjdt|j}|j|jd|y#1swYxYw)NPEM
NO_START_LINEz"[PEM: NO_START_LINE] no start line)r
rkr`rrrrrrlibraryreasonr[rEr\)rrTr|rs    r!test_lib_reasonzSSLErrorTests.test_lib_reasonnsnnS445


s||
,	)x(	)--u5,,o>%IJAN	)	)sC$$C-ctjtj}d|_tj|_t
jd5}t
j|j}|jd|j|dd5}|jtj5}|jdddtj }|j#|j%d||j'|j j(tj*ddddddy#1swYxYw#1swYxYw#1swYyxYw)NFrrz%The operation did not complete (read))r
rkr`rrrrrcreate_connectionrsetblockingrrSSLWantReadErrordo_handshaker[rrEr\rr
SSL_ERROR_WANT_READ)rrTrrr|s     r!
test_subclasszSSLErrorTests.test_subclassys&nnS445"--

!
!"2
3		Nq((9A
MM% E5I
NQ&&s';';<%NN$%%-T UWXY  !3!3S5L5LM

N		N		N%%
N
N		N		Ns>A	E* E>EA2EE*EEE'	#E**E3cxtj}|jt5|j	tjtjdddd|jt5|j	tjtjdddd|jt5|j	tjtjddddy#1swYxYw#1swYlxYw#1swYyxYw)NrRrz.example.orgzexample.orgevil.com)r
rrrrrrr+s  r!test_bad_server_hostnamez&SSLErrorTests.test_bad_server_hostnames((*


z
*	-LL#--/)+

-	-

z
*	9LL#--/)7

9	9

y
)	DLL#--/)B

D	D	D
	-	-	9	9	D	Ds#9D9D$9D0D!$D-0D9N)
ryrrrrqrrrr r"rWr#r!rrbs8%X__^%PQORON$
Dr#rc*eZdZdZdZdZdZdZy)MemoryBIOTestscztj}|jd|j|j	d|j|j	d|jd|jd|j|j	d|j|j	d|jd|j|j	dd|j|j	dd	|j|j	ddy)
Nrr#barsfoobarbazrsbar6z)r
rrrrKrbios  r!test_read_writezMemoryBIOTests.test_read_writesmmo		&V,S)		&		&Y/S)		&!e,!d+!c*r#ctj}|j|j|j	|jd|j|j|j
d|j|j|j|j|j|j	|jdd|j|j|j	|jdd|j|j|j	|jd|j|jy)Nr#rrsfor6o)	r
rrOeofrrKr	write_eofrEr)s  r!test_eofzMemoryBIOTests.test_eofsmmo!S)!		&!

!!e,!!d+ S) r#ctj}|j|jd|j	d|j|jdtdD]5}|j
d|j|jd|z
dz
7tdD]2}|j	d|j|j|dz4|j
|j|jdy)Nrrrr6r\)r
rrpendingrrrK)rr*rs   r!test_pendingzMemoryBIOTests.test_pendingsmmoa(		&a(q	1AHHQKS[[!A#a%0	1q	/AIIdOS[[!A#.	/	
a(r#cvtj}|jd|j|j	d|jtd|j|j	d|jt
d|j|j	dy)Nrr&r')r
rrrrKr
memoryviewr)s  r!test_buffer_typesz MemoryBIOTests.test_buffer_typess}mmo		&V,		)F#$V,		*V$%V,r#c4tj}|jt|jd|jt|jd|jt|jd|jt|jdy)NrTr6)r
rrrrr)s  r!test_error_typeszMemoryBIOTests.test_error_typessemmo)SYY6)SYY5)SYY5)SYY2r#N)ryrrr+r0r3r6r8rWr#r!r$r$s+! )-3r#r$ceZdZdZdZy)SSLObjectTestsctj}|jtd5tj	||dddy#1swYyxYwr)r
rrrrr)s  r!rz SSLObjectTests.test_private_initsAmmo

#
#I/C
D	$MM#s#	$	$	$sAAct\}}}tj}tj}tj}tj}|j|||}|j||d}	t	dD]{}
	|j|jr|j|j	|	j|js]|j|j}|j|	j|jtj5|jddd|j|j|	j|j|j|jy#tj$rY7wxYw#tj$rYwxYw#1swYxYw)NrTrr)rr
rrrrrr2rrKrunwrap)r
client_ctx
server_ctxrc_inc_outs_ins_outclientr_s           r!test_unwrapzSSLObjectTests.test_unwraps+:+<(
J}}

}}

$$T5($K$$T5d$Cq	)A
##%}}

5::<(
##%}}

5::<(	)	

s33
4	MMO	
	

5::< 

	

5::< 

7''

''

		s0GG!G;GG!G87G8;HN)ryrrrrFrWr#r!r:r:s$
(r#r:ceZdZdZdZdZdZdZdZdZ	dZ
d	Zd
Ze
jej dk(dd
ZdZdZdZdZdZdZdZdZdZdZdZdZy)SimpleBackgroundTestsz?Tests that connect to a simple server running in the backgroundctjtj|_|jj	t
t
|j}|j|t|jf|_
y)Nr)r
rkr_rrrrenterContextr	rserver_addr)rrs  r!setUpzSimpleBackgroundTests.setUp
s\!nnS-D-DE++O<#D,?,?@&! &++.r#cttjtjtj5}|j|j|ji|j|j|jdddttjtjtjt5}|j|j|j|j|j|jdddy#1swYxYw#1swYyxYw)Nrrr)rrrSr
rrrKrgetpeercertrOrrrrErs  r!test_connectz"SimpleBackgroundTests.test_connects
fmmFNN;&)mm5	,89
IId&&'R1Q]]+		,fmmFNN;&)&7&7%/1	,45
IId&&'OOAMMO,Q]]+	,	,	,	,	,	,sAD<AE<EEcttjtjtj}|j|j|jtjd|j|jy)Nrcertificate verify failed)rrrSr
rrrrrrrKrs  r!test_connect_failz'SimpleBackgroundTests.test_connect_fail s\
V]]6>>:&)&7&7
9 s||-H yy$*:*:	<r#cPttjtjtjt
}|j
|j|jd|j|j|j|jy)NrNr)
rrrSr
rrrrrrrKrErOrs  r!test_connect_exz%SimpleBackgroundTests.test_connect_ex*sjV]]6>>:&)&7&7%/
1	
 ALL)9)9:;

(r#cttjtjtjt
d}|j
|j|jd|j|j}|j|dtjtjftjg|ggd		|j!	|j'|j)y#tj"$rtj|gggdYn1tj$$rtjg|ggdYnwxYw)NF)rrrrrm)rrrSr
rrrrrrrKrr
EINPROGRESSrselectrrSSLWantWriteErrorrErOrrrs   r!test_non_blocking_connect_exz2SimpleBackgroundTests.test_non_blocking_connect_ex3s
V]]6>>:&)&7&7%/49
;	
 	

e
\\$**
+

b1e//1B1BCD

b1#r3'
0 	


(''
0

qc2r3/((
0

b1#r3/
0
sD,E#5+E#"E#ctjtj}d|_tj|_|j
tjtj5}|j|j|ji|jddd|j
tjtjd5}|j|jdddtj|_|jt|j
tjtj5}|j|j|j}|j!|dddy#1swYxYw#1swYxYw#1swYyxYw)NFdummyr)r
rkr`rrrrrrSrrKrrOrrrrErrTrrs    r!test_connect_with_contextz/SimpleBackgroundTests.test_connect_with_contextMsKnnS445"--
__V]]6>>:
;	2q
IId&&'R1	2__V]]6>>:,35	(89
IId&&'	(++!!*-
__V]]6>>:
;	"q
IId&&'==?DOOD!	"	"	2	2	(	(	"	"s$2<F0*F=*=G	0F:=G	Gc\tjtj}|jt	jtj
t}|j|j|jtjd|j|jy)NrrR)
r
rkr`rrrSrrrrrrrK)rrTrs   r!test_connect_with_context_failz4SimpleBackgroundTests.test_connect_with_context_failasvnnS445OOMM&..)4

	
 s||-H !		4+;+;	=r#ctjtj}|jt|jt
jtjt5}|j|j|j}|j|dddtjtj}|jt|jt
jtjt5}|j|j|j}|j|dddy#1swYxYw#1swYyxYw)Nrr)r
rkr`rrrrrSrrrKrOrErr^s    r!test_connect_capathz)SimpleBackgroundTests.test_connect_capathnsnnS445!!!0
__V]]6>>:-EG	"JK
IId&&'==?DOOD!		"nnS445!!!6
__V]]6>>:-EG	"JK
IId&&'==?DOOD!		"	"	"	"	"	"s2=E.(=E:.E7:Fctt5}|j}dddtj	}tjtj}|j||jtjtjt5}|j|j|j}|j|dddtjtj}|j||jtjtjt5}|j|j|j}|j|dddy#1swYxYw#1swYxYw#1swYyxYw)Nrr)rJrrKr
r*rkr`rrrrSrrrKrOrE)rrMr0rrTrrs       r!test_connect_cadataz)SimpleBackgroundTests.test_connect_cadatasW
*
	&&(C	&&s+nnS445!!!-
__V]]6>>:-EG	"JK
IId&&'==?DOOD!		"nnS445!!!-
__V]]6>>:-EG	"JK
IId&&'==?DOOD!		"	"		
	"	"	"	"s#F#+=F0=F<#F-0F9<Grz*Can't use a socket as a file under WindowscNttjtj}|j|j|j}|j
}|jtj|d|jtj|jt5}tj|dddd|jjj t j"y#1swY>xYwr)rrrSrrKfilenomakefilerrrKrrrr^rrr
EBADF)rrXfdrMrs     r!test_makefile_closez)SimpleBackgroundTests.test_makefile_closes
fmmFNN;
<


4##$
YY[KKM		
A







w
'	1GGBN	**EKK8		sDD$cftjtj}|j|j|j	dt|tjd}|j|jd}		|dz
}|j	tjr#t j"j%d|zyy#tj$rtj|gggYn0tj$rtjg|ggYnwxYw)NFrrrr6z9
Needed %d calls to do_handshake() to establish session.
)rrSrrKrrr
rrrrrrXrYrrrrr)rrcounts   r!test_non_blocking_handshakez1SimpleBackgroundTests.test_non_blocking_handshakesMM&..)			$""#	

eQ&)mm49
;	
 
+
 
??JJZ]bbc	''
+

qc2r*((
+

b1#r*
+sC+D/*D/.D/c>t|g|jdtiy)Nr)_test_get_server_certificaterKrrs r!test_get_server_certificatez1SimpleBackgroundTests.test_get_server_certificates$TND,<,<N:Nr#c	|j\}}gfd}|jj|tj	||f}|s|jd|d|dtj	||ft}|s|jd|d|dtjr)tjjd|d|d|d|j||gy)	Nc(j|yr)append)ssl_sockserver_nameinitial_contextserver_namess   r!
servername_cbzLSimpleBackgroundTests.test_get_server_certificate_sni.<locals>.servername_cbs,r#No server certificate on :!r
Verified certificate for  is
r)
rKrrr
get_server_certificater-rrrrrrr)rhostrrzr0rys     @r!test_get_server_certificate_sniz5SimpleBackgroundTests.test_get_server_certificate_snis%%
d	-33MB(($6II4FG(($
(KII4FG??JJDRVX[\]d|4r#c0t|g|jyr)!_test_get_server_certificate_failrKrs r! test_get_server_certificate_failz6SimpleBackgroundTests.test_get_server_certificate_fails	*$B1A1ABr#cd}|jj||jtj5t
j
|jtddddy#1swYyxYw)Nc.tjdy)N皙?)rsleeprvrwrxs   r!rzzPSimpleBackgroundTests.test_get_server_certificate_timeout.<locals>.servername_cbs
JJsOr#皙?)rrp)	rrrrrpr
rrKr)rrzs  r!#test_get_server_certificate_timeoutz9SimpleBackgroundTests.test_get_server_certificate_timeoutsb	33MB


v~~
.	4&&t'7'7*/2
'
4	4	4	4s'A..A7cttjtjtjd5}|j|jdddttjtjtjd5}|j|jddd|jtjd5tjtj5}t|tjd}|j|jddddddy#1swYxYw#1swYxYw#1swY*xYw#1swYyxYw)Nr')rrr(r)r*)	rrrSr
rrrKrr)rrrs   r!r,z"SimpleBackgroundTests.test_cipherss
fmmFNN;'*}}eE	(HI
IId&&'	(fmmFNN;'*}}iI	(LM
IId&&'	(
#
#CLL2M
N	,v~~.
,$$T.1mmEWY		$**+
,	,	,	(	(	(	(

,
,	,	,s;EE#$E48E(?E4EE%(E1	-E44E=ctjtj}|jt|j|j
g|jtjtjd5}|j|j|j}|j|ddd|jt|j
dy#1swY3xYw)Nrr.rr6)r
rkr`rrrrrrrSrrKrOrErbr^s    r!test_get_ca_certs_capathz.SimpleBackgroundTests.test_get_ca_certs_capathsnnS445!!!0))+R0
__V]]6>>:-8:	"=>
IId&&'==?DOOD!		"
	
S--/0!4	"	"s=C==Dctjtj}|jttjtj}|jttj
t
j}|j|d5}|j|j|j|j||j|jj|||_|j|j||j|jj|dddy#1swYyxYw)Nrr.r)
r
rkr`rrrrSrrrKrr_sslobj)rctx1ctx2rrXs     r!test_context_setgetz)SimpleBackgroundTests.test_context_setgets~~c556""&"1~~c556""&"1MM&..)


a

=	4JJt''(MM"**d+MM"**,,d3BJMM"**d+MM"**,,d3
	4	4	4s
)B'EE"c|jdtj}d}tj|D]}}	d}
|dz
}	||}|j}
|j|
|
nK|
tjk(sI|jd}
|
r|j|
n|jtjr.tj jd||j"fzS#tj
$rD}|jtjtjfvr|j}
Yd}~d}~wwxYw)Nrprr6iz"Needed %d calls to complete %s().
)rr
SHORT_TIMEOUT
busy_retryr
rr
rSSL_ERROR_WANT_WRITErKsendallr_rr/rrrry)rrincomingoutgoingrursrrprnrEr
retrbufs              r!ssl_io_loopz!SimpleBackgroundTests.ssl_io_loops'**Y(=(=>##G,	)AEQJE
 Dk--/CLL}#111ii&NN3'&&(/	)0??JJB %t}}56
7
-<<
 773#:#:#&#;#;#==	
 sC88E9E

Ec8tjtj}|j|j|j	|j
tj}tj}tjtj}|j|j|j|jtj|jt |j#||dt$}|j'|j(j*||j-|j/|j-|j1|j-|j3|j5t6|j8dtj:vr |j-|j=d|j?||||j@|j|j/|j-|j3|jC|j1|j|j9dtj:vr |j|j=d	|j?||||jD|j5tjH|jJdy#tjF$rYAwxYw)NFrr)&rrSrrrrKr
rrkr`rErrrrrrrrrrownerrcipherr8shared_ciphersrrrOrrrrassertIsNotNoner=SSLSyscallErrorrr)rrrrrTsslobjs      r!test_bio_handshakez(SimpleBackgroundTests.test_bio_handshake3s-}}V^^,

#T%%&==?==?nnS445**+#*;*;<!!*-h%68

fnn**F3&--/*&..*+&//12*f&8&893444f88FGx63F3FG

(&//12V^^-.**,-3444OOF66|DE	T8Xv}}E
	
#,,f=	""	
	s9LLLctjtj}|j|j|j	|j
tj}tj}tjtj}d|_
tj|_|j||d}|j||||jd}|j||||j ||j||||j"d}|j%|d|j||||j&y)NFFOO
sfoo
)rrSrrrrKr
rrkr`rrrrrrrrKrr=)rrrrrTrreqrs        r!test_bio_read_write_dataz.SimpleBackgroundTests.test_bio_read_write_dataUs}}V^^,

#T%%&==?==?nnS445"--h%8x63F3FGx6<<EtXxdKh'x6==Ar#ct\}}}tjtj5}|j|jt
j
}t
j
}|j|||}|j||||j|j|jt
j|jdddy#1swYyxYw)Nr)rrrSrrKr
rrrrr/rSSLEOFErrorrK)rrrrrrrrs        r!test_transport_eofz(SimpleBackgroundTests.test_transport_eoffs3B3D0
]]6>>
*
	<dLL))*}}H}}H#,,Xx=E-GFT8Xv7J7JK
 coov{{;
	<
	<
	<sB0C++C4N)ryrr__doc__rLrPrSrUr[r_rarcrerqrrr rkrorrrrrr,rrrrrrrWr#r!rHrHsI/
,<))4"(="."*X__RWW_&RS9T9$d*O5*C
4,
5
4 D >DB"<r#rHnetworkceZdZdZej
ejdejddZ
y)NetworkedTestsc6tjt5tt	jtj
tjd}|j|j|jd|jtdf}|dk(r|jdn$|tjk(r|jd|j|tj tj"fdddy#1swYyxYw)NFrmgHz>rz!REMOTE_HOST responded too quicklyzNetwork unreachable.)rtransient_internetREMOTE_HOSTrrrSr
rrrrnrrr
ENETUNREACHrEAGAINrrZs   r!test_timeout_connect_exz&NetworkedTests.test_timeout_connect_exxs
-
-k
:	A v~~!>*-*;*;8=?A
OOAGG$
LL#{C01BQw

ABu(((

45MM"u||U->->?@	A	A	AsC,DDz
Needs IPv6walltimectjd5t|ddt|dddddy#1swYyxYw)Nzipv6.google.comr)rrrqrrs r! test_get_server_certificate_ipv6z/NetworkedTests.test_get_server_certificate_ipv6sF
-
-.?
@	L(/@#F-d4EsK	L	L	Ls	:AN)ryrrrrqrrIPV6_ENABLEDrrequires_resourcerrWr#r!rrusIA X33\BWz*L+CLr#rc	@tj||f}|s|jd|d|dtj||f|}|s|jd|d|dtjr*t
jjd|d|d|dyy)Nr{r|r}r~rrr)r
rr-rrrrr)testrrrr0s     r!rqrqs}

$
$dD\
2C		tTBC

$
$dD\D
$
AC		tTBC

dTWXYr#c	$	tj||ft}|jd|d|d|dy#tj$rA}t
jr'tjjd|zYd}~yYd}~yd}~wwxYw)Nr~zGot server certificate z for r|r}z%s
)
r
rrr-rrrrrr)rrrr0xs     r!rrsqN(($(I	
		CtLM<<)??JJVaZ(()s;B2B

B)make_https_servercneZdZGddejZ					ddZdZdZddZ	dZ
d	Zd
Zy)
rc4eZdZdZdZdZdZdZdZdZ	y)	$ThreadedEchoServer.ConnectionHandlerzA mildly complicated class, because we want it to work both
        with and without the SSL wrapper around the socket connection, so
        that we can test the STARTTLS functionality.c||_d|_||_||_|jj	dd|_tjj|d|_	yNFT)
rrunningraddrrsslconn	threadingThread__init__daemon)rrconnsockrs    r!rz-ThreadedEchoServer.ConnectionHandler.__init__sR DK DL DIDIII!!$'DL%%d+DKr#c	|jjj|jd|_|jj
j
|jj|jjj
|jj|jjjtjk(r|jj}tjrN|jjr8t j"j%dt'j(|zdz|jjd}tjrd|jjrN| t j"j%dn,t j"j%dt+|d|jj-}tjrD|jjr.t j"j%dt/|zdzy#t0t2t4f$r}|jj6j
t/||jjr$t9d	t;|j<zd
zd|_|jAYd}~yd}~wtjBtDf$r}|jj6j
t/||jjr$t9d	t;|j<zd
z|jFtFjHk7rDt jJdk7r1d|_|jjM|jAYd}~yd}~wwxYw)
NTrz client cert is rz client did not provide a cert
z cert binary is zb
z" server: connection cipher is now z'
 server:  bad connection attempt from z:
Fdarwin)'rrrrrselected_alpn_protocolsruselected_alpn_protocolrrr
rrOrrchattyrrrrrrbrr[ConnectionResetErrorBrokenPipeErrorConnectionAbortedErrorconn_errorsrrrrrrr^r

EPROTOTYPErstop)rrcert_binaryrrs     r!	wrap_connz.ThreadedEchoServer.ConnectionHandler.wrap_conns;
#{{22>>II4 ? 133::4<<;^;^;`aT**11$,,2M2M2OP;;&&22c6G6GG<<335D4;;+=+=

(();fnnT>R)RUY)YZ"&,,":":4"@K4;;+=+=&.JJ,,-OPJJ,,/?K@P?QQT-UV,,.??t{{'9'9JJ$$%ICPVK%WZ^%^_o)/;QR
''..s1v6;;%% !KdSWS\S\o!]`e!ef$

LL'*
''..s1v6;;%% !KdSWS\S\o!]`e!ef
77e...3<<83K#(DLKK$$&JJL-
s&A3IO!.A?K22O!C	OO!c|jr|jjS|jjdS)Nr)rrKrr_rs r!rKz)ThreadedEchoServer.ConnectionHandler.reads/||||((**yy~~d++r#c|jr|jj|S|jj|Sr)rrrrc)rrs  r!rz*ThreadedEchoServer.ConnectionHandler.writes1||||))%00yy~~e,,r#c|jr|jjy|jjyr)rrrrs r!rz*ThreadedEchoServer.ConnectionHandler.close	s'||""$		!r#cd|_|jjs|jsy|jr	|j	}|j}|s@d|_	|jj|_d|_|jn|dk(rVtjr5|jjrtjj!d|jy|jjrm|dk(rhtjr5|jjrtjj!d|j!d|jsy|jjr|jr|dk(rtjr5|jjrtjj!d	|j!d|jj|_d|_tjr|jjrtjj!d
n|dk(rtjr5|jjrtjj!d|jj#d
}|j!t%|j'ddznK|dk(rstjr5|jjrtjj!d	|jj)|j!dn|dk(r@|jj/|j!dn|j!dn|dk(rH|jj/}|j!t%|j'ddznA|dk(rR|jj0j3}|j!t5|j7dddzn|dk(rR|jj0j9}|j!t5|j7dddzntjrd|jjrN|jxrdxsd}tjj!d|d|d|j;d|d	|j!|j;|jryy#t$rYwxYw#t*j,$r6}|j!t%|j'ddzYd}~dd}~wwxYw#t$r}|jj<rDtjr4t?|t@rtCd |jDntGd!	|j!d"n#t$rYnwxYw|jd|_|jjIYd}~(d}~wwxYw)#NTFsoverz" server: client closed connection
STARTTLSz2 server: read STARTTLS from client, sending OK...
OK
ENDTLSz0 server: read ENDTLS from client, sending OK...
z* server: connection is now unencrypted...
s
CB tls-uniquez@ server: read CB tls-unique from client, sending our CB data...
rus-ascii
PHAz( server: initiating post handshake auth
HASCERTTRUE
FALSE
GETCERTs
VERIFIEDCHAINr6bigsUNVERIFIEDCHAIN	encryptedunencryptedz server: read z (z), sending back z)...
z Connection reset by peer: zTest server failure:
sERROR
)%rrstarttls_serverrrKstriprr=rr^rrrconnectionchattyrrrrrruverify_client_post_handshaker
rrOrget_verified_chainrbto_bytesget_unverified_chainrrrZConnectionErrorprintrrr)rmsgstrippedrrrcertsctypes        r!runz(ThreadedEchoServer.ConnectionHandler.run
	sDL;;..~~',,]'))+C"yy{H#',0(,(;(;(=DI,0DL

!W,"??t{{/K/KJJ,,-RS

++55"k1"??t{{/K/KJJ,,-bc

7+#~~/"++55$,,&)3"??t{{/K/KJJ,,-`a

7+$(LL$7$7$9	'+"??t{{/K/KJJ,,-Z[!%55"??t{{/K/KJJ,,-pq#||??M

4:#4#4Z#@5#HI!V+"??t{{/K/KJJ,,-XY0 LLEEG!JJw/!Z/<<335A JJy1 JJz2!Z/#||779

4:#4#4Z#@5#HI!%55 $ 4 4 G G I

3u:#6#6q%#@5#HI!%77 $ 4 4 I I K

3u:#6#6q%#@5#HI#OO KK88%)\\%Ak$SmEJJ,,03UCIIK.PQ

399;/Q,, '!!	!N #||K JJtAw~~j'AE'IJJK2'{{))goo%a9""=dii[ I))AB

:."JJL#(DLKK$$&&+'s)V3'UA3V3:BV3=G	V3U'!G&V3	U$ V3#U$$V3'V0:,V+&V3+V00V33	Y4<AY/X)(Y/)	X52Y/4X554Y//Y4N)
ryrrrrrrKrrrrWr#r!ConnectionHandlerrs'	8	<	|	,	-	"c	'r#rNc|
r|
|_ntj||ntj|_||ntj|j_|r|jj
||r|jj||r|jj||	r|jj|	||_
||_||_tj|_tj |j|_d|_d|_g|_g|_g|_t.j0j3|d|_yr)rr
rkr_rrrrset_alpn_protocolsrRrrrrrrrrflagactiverrrrrrr)rcertificatessl_versioncertreqscacertsrrralpn_protocolsrrs           r!rzThreadedEchoServer.__init__o	s
"DL>>-8-D+6/2/F/FHDL5=4H-0]]
LL$227;,,[9//?((1 0.MMO	!++DII6		')$ !!$'r#c|jtj|jj	|SrstartrEventrwaitrs r!	__enter__zThreadedEchoServer.__enter__	(

9??$%		r#cD|j|jyr)rrrrss  r!__exit__zThreadedEchoServer.__exit__	s				r#cP||_tjj|yrrrrr
rrs  r!r
zThreadedEchoServer.start		t$r#c|jjd|jjdd|_|jr|jj|jr	|jj
\}}tjr:|jr.tjjdt|zdz|j|||}|j|j!|jr|j+y#t"$r=}tjr#tjjd|dYd}~_d}~wt$$r|j'Y}t($rT}tjr:|jr.tjjdt|zdzYd}~d}~wwxYw)Ng?rTz server:  new connection from rz connection timeout z connection handling failed: )rrnlistenrrrrrrrrrrrrr
rTimeoutErrorKeyboardInterruptr
BaseExceptionr)rnewconnconnaddrhandlerrs     r!rzThreadedEchoServer.run	sZ		S!		99IIMMOkk
J$(II$4$4$6!??t{{JJ$$%E'+H~&68<&=>00wI

kk&	

 
E??JJ$$';A5%CD$
		 
J??t{{JJ$$7$q'ADHJ
Js,1BD))	G$23E**G$G$A
GG$c`|j"|jjd|_yyr)rrrs r!rzThreadedEchoServer.close	s&99 IIOODI!r#cd|_yNF)rrs r!rzThreadedEchoServer.stop	s	r#)
NNNNTFFNNNr)
ryrrrrrrr
rr
rrrrWr#r!rrsLC'I,,C'J6:(,FK $'+	 D
%8
r#rcbeZdZGddejZdZdZdZdZ	ddZ
d	Zd
Zy)AsyncoreEchoServercHeZdZGddejZdZdZdZy)AsyncoreEchoServer.EchoServerc0eZdZdZdZdZdZdZdZy)/AsyncoreEchoServer.EchoServer.ConnectionHandlerct|d|d|_tjj	||jd|_|j
y)NTF)rrr)rrr	dispatcher_with_sendr_ssl_accepting_do_ssl_handshake)rconnrs   r!rz8AsyncoreEchoServer.EchoServer.ConnectionHandler.__init__	sI.t7?FKM--66tT[[I&*#&&(r#ct|jtjrK|jj	dkDr.|j|jj	dkDr.y)NrT)rZrr
rr2handle_read_eventrs r!readablez8AsyncoreEchoServer.EchoServer.ConnectionHandler.readable	sOdkk3==9++--/!3..0++--/!3r#c	|jjd|_y#tjtj
f$rYytj$r|jcYStj$rt$r?}|jdtjk(r|jcYd}~SYd}~yd}~wwxYw)NFr)
rrr)r
rrYrhandle_closerr^rsr
ECONNABORTEDrerrs  r!r*zAAsyncoreEchoServer.EchoServer.ConnectionHandler._do_ssl_handshake	s0KK,,.+0D',,c.C.CD/,,..||3xx{e&8&88#002293s'$#C	"C-C/C7CCc:|jr|jy|jd}tjr+t
jjdt|z|s|jy|j|jy)Nrz server:  read %s from client
)r)r*r_rrrrrrrrcr)rrs  r!handle_readz;AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_read	sf&&**,99T?D

(()JTRVZ)WX

		$**,/r#c|jtjr-tjjd|jzyy)Nz server:  closed connection %s
)rrrrrrrrs r!r0z<AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_close	s3

??JJ$$%G$++%UV#r#crrWrs r!rz<AsyncoreEchoServer.EchoServer.ConnectionHandler.handle_error	sr#N)	ryrrrr.r*r5r0rrWr#r!rr&	s!
)


0

0
W

r#rc||_tjtjtj}t	j
|d|_tjj|||jdy)NrRr)rrrSSOCK_STREAMrrrr	
dispatcherrrrs   r!rz&AsyncoreEchoServer.EchoServer.__init__	sX$DM==1C1CDD%//b9DI((t4KKNr#ctjr"tjj	d|z|j||jy)Nz$ server:  new connection from %s:%s
)rrrrrrr)rsock_objrs   r!handle_acceptedz-AsyncoreEchoServer.EchoServer.handle_accepted
s5

  !H$!NO""8T]];r#crrWrs r!rz*AsyncoreEchoServer.EchoServer.handle_error
sr#N)	ryrrr	r(rrr=rrWr#r!
EchoServerr$	s$1	 = =1	f		<
	r#r?cd|_d|_|j||_|jj|_t
jj|d|_yr)	rrr?rrrrrr)rrs  r!rzAsyncoreEchoServer.__init__

sL	ooh/KK$$	!!$'r#cPd|jjd|jdS)N<r|>)rxryrrs r!__str__zAsyncoreEchoServer.__str__
s NN33T[[AAr#c|jtj|jj	|Srr	rs r!r
zAsyncoreEchoServer.__enter__
rr#ctjrtjj	d|jtjrtjj	d|j
tjrtjj	dtjdy)Nz cleanup: stopping server.
z! cleanup: joining server thread.
z cleanup: successfully joined.
T)
ignore_all)	rrrrrrrr		close_allrs  r!rzAsyncoreEchoServer.__exit__
sp??JJ;<		??JJAB		??JJ?@d+r#NcP||_tjj|yrrrs  r!r
zAsyncoreEchoServer.start&
rr#cd|_|jr|jj|jr$	tjd|jr#yy#YxYw)NTr6)rrrr	looprs r!rzAsyncoreEchoServer.run*
sH99IIMMOkk


a kk
sAA#cFd|_|jjyr )rrrrs r!rzAsyncoreEchoServer.stop4
sr#r)
ryrrr	r:r?rrDr
rr
rrrWr#r!r"r"	s;Bh))BHB

,%r#r"ci}t||d}|5|jtj||5}	|	jt|j
f|t
|t|fD]}
|r2tjr"tjjd|z|	j|
|	j}|r2tjr"tjjd|z||jk7std|ddt!||ddjt!|fz|	jd	|r/tjrtjjd
|j#|	j%|	j'|	j)|	j+|	j-|	j.|	j0d|	j3ddd|j4|d<|j6|d
<ddd|S#1swY1xYw#1swY|SxYw)zW
    Launch a server, connect a client to it and try various reads
    and writes.
    Frrr)rsession client:  sending %r...
 client:  read %r
4bad data <<%r>> (%d) received; expected <<%r>> (%d)
Nover
 client:  closing connection.
)compressionrpeercertclient_alpn_protocolr8session_reusedrOserver_alpn_protocolsserver_shared_ciphers)rrrrr	rrr5rrrrrrKrAssertionErrorrbrrVrrOrr8rYrOrrr)rrindatarrsni_namerOrrrargoutdatas            r!server_params_testra8
s
E
'-168F
"?

'
'

 ('(;	>?
IItV[[)*	& 1:f3EF
>#

((7&@B&&(#

(()>)HIflln,(O"3B<W!#2;,,.F==>>
>
GGI??JJ$$%FGLL }}((*MMO()(@(@(B99;"#"2"299

GGI?	@*0)G)G%&)/)>)>%&E"?FLE		"?FLs*'I
CIC>I&I
I
	I

Ic|tj}tjdtjdtjdi|}tj
rU|xrdxsd}tjj|tj|tj||fztj5tj|}|xj|zc_
tj|}	|	xj|zc_
dddtj|d}
|
Rt!	drF|tj"k(r3|	j$|
kDr$tj5|
|	_dddj&tj"k(r|j)dt+	|||	fD]3}||_|j/t0|j3t45	t7||	d	d	
}|s8t9dtj|dtj|d
|dur||dk7rt9d|d|dyy#1swYTxYw#1swYxYw#tj:$r|rYyt<$r*}
|s|
j>t>j@k7rYd}
~
yd}
~
wwxYw)a<
    Try to SSL-connect using *client_protocol* to *server_protocol*.
    If *expect_success* is true, assert that the connection succeeds,
    if it's false, assert that the connection fails.
    Also, if *expect_success* is a string, assert that it is the protocol
    version actually used by the connection.
    Nrrrz %s->%s %s
z
 {%s->%s} %s
rPr'F)rrzClient protocol z  succeeded with server protocol r}Tr8zversion mismatch: expected z, got )!r
rrrrrrrrget_protocol_namerrVrkrvPROTOCOL_TO_TLS_VERSIONrrQr^rPrcrRrUrrrrrrar\rr^r

ECONNRESET)server_protocolclient_protocolexpect_success	certsreqsserver_optionsclient_optionscerttype	formatstrrrmin_versionrTrrs              r!try_protocol_comboroh
sMM	

{??	H
#6K;K	

//@//@"$$	%

	'	'	)18.08.01*--otDK
N$56s///**[8
+
+
-	9-8N*	9#"2"22""5)7/.#O,!!*-.G">>*/%I ((9((9;<
<D( E)$44 $2E)4D"FG
G5)c11"	9	9(<<QWW(8(889s7AI(8I5=J(I25I>KK! KKceZdZejddZdZdZdZe	jejddZ
dZd	Zd
ZdZedd
ZdZdZdZeddZeddZeddZeddZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&edd%Z'edede(d&Z)ede(d'Z*edede(d(Z+edd)Z,d*Z-e	jd+ej\vd,d-Z/d.Z0e	je1ed/d0d1Z2d2Z3d3Z4e	jje6d4d5Z7d6Z8d7Z9d8Z:d9Z;d:Z<d;Z=d<Z>d=Z?d>Z@d?ZAd@ZBdAZCdBZDdCZEdDZFdEZGyF)G
ThreadedTestsrc	Dtjrtjj	dt\}}}|j
tjtj5t||dd|dddd|_|j
tjtj5|jtj5}t||dd|ddd|jdtj ddd|j
tjtj5|jtj5}t||ddddd|jdtj ddd|j
tjtj5|jtj5}t||ddddd|jdtj dddy#1swYxYw#1swYmxYw#1swYMxYw#1swYxYw#1swYxYw#1swYvxYw#1swYyxYw)	z2Basic test of an SSL client connecting to a serverr)rDrT)rrrrr^NFz@Cannot create a client socket with a PROTOCOL_TLS_SERVER context)rrrr)rrrrrrrr
r`r_rarrrrr[r)rrrrrs     r!	test_echozThreadedTests.test_echo
s-??JJT"3B3D0
\\!8!8AXAX\
Y	2n.<&*T(0
2	2).%
\\!8!8AXAX\
Y		""3<<0
6A".2@*.,46
6

MMRAKK 

		\\!8!8AXAX\
Y	""3<<0
GA".2@*.G
G
MMRAKK 
	\\!8!8AXAX\
Y	"""3<<0
GA".2@*.G
G
MMRAKK 
"	"	"9	2	2
6
6				
G
G		
G
G	"	"sx-I< I%I--I% I>1I2-I>% JJ
-JII"	I%%I/2I;	7I>>J
J	JJctjrtjj	dt\}}}t
|d}|5|jtjd|5}|jt|jf|jt5|jddd|j|j}|j!|d|j#}tjrctjj	t%j&|dztjj	dt)|zdzd|vr'|j+d	t%j&|zd
|dvr|j+d|j-d||j-d
|t.j1|d}t.j1|d
}	|j3||	ddddddy#1swYyxYw#1swYxYw#1swYyxYw)NrFrr)rrCan't get peer certificate.zConnection cipher is z.
r6z$No subject field in certificate: %s.r+zkMissing or invalid 'organizationName' field in certificate subject; should be 'Python Software Foundation'.r4r3)rrrrrrrrrrr	rrrrOrrErrrr[r-rr
rrC)
rrrrrrrrbeforeafters
          r!test_getpeercertzThreadedTests.test_getpeercert
s??JJT"3B3D0#N5I
	/++FMMODI<D,F
/IJ		4-.&&z2$MMO$ }}&CD??JJ$$V^^D%9D%@AJJ$$%<s6{%JU%RSD(IID$nnT234I	?+IIBC

k40

j$/11${2CD00j1AB.7
/	/	/$$

/
/	/	/s=
'I47I+H3<E&I"I3H=8II		IIcZtjrtjj	dt\}}}t
tdd}|j|jtj|zt|d}|5|jtj|5}|jt|j f|j#}|j%|ddddddd|xjtj&zc_	t|d}|5|jtj|5}|j)tj*d5|jt|j fddddddddd|j-t.t|d}|5|jtj|5}|jt|j f|j#}|j%|dddddddy#1swYdxYw#1swYixYw#1swYxYw#1swYxYw#1swYxYw#1swYPxYw#1swYyxYw)	NrrarTrurrvrR)rrrrrrr]r
rrbrcrrrrr	rrOrErdrrrCRLFILE)rrrrrhrrrs        r!test_crl_checkzThreadedTests.test_crl_check	sL??JJT"3B3D0
S5q
944c6H6H26MN$N4H
	E++FMMO<D,F
EIJ		4-.}}&CD	
E	E	##s'@'@@##N4H
	3++FMMO<D,F
3IJ++CLL,GI3IItV[[123
3	3	,,W5#N4H
	E++FMMO<D,F
EIJ		4-.}}&CD	
E	E	E+
E
E	E	E33
3
3	3	3
E
E	E	Es&I$1AI5I$7&J	!I=>"I1 I=(J	&J!AJJ!I!	I$$I.1I:6I==J	J		JJ	J!!J*c>tjrtjj	dt\}}}t
|d}|5|jtj|5}|jt|jf|j}|j|dddddddt
|d}|5|jtjd5}|jtj d5|jt|jfdddddddddt
|d}|5tj5}|jt"d5|j|dddddddddy#1swYxYw#1swY
xYw#1swYxYw#1swYxYw#1swYxYw#1swYXxYw#1swY\xYw#1swYyxYw)	NrTrurrvinvalidz:Hostname mismatch, certificate is not valid for 'invalid'.z'check_hostname requires server_hostname)rrrrrrrrrrr	rrOrErr
CertificateErrorr)rrrrrrrs       r!rz!ThreadedTests.test_check_hostname1s??JJT"3B3D0$N4H
	E++FMMO<D,F
EIJ		4-.}}&CD	
E	E$N4H
	3++FMMO<E,G
3JK++,,TV3IItV[[123
3	3$N4H
	2
2A++J,UW2"..q12
2	2	2%
E
E	E	E33
3
3	3	322
2
2	2	2s
&G
3AF=7G
&G/<!G#"G?G#G/&H;HG;$H,H=G	G

GG G##G,	(G//G8;HHH	HHz)test requires hostname_checks_common_namect\}}}|jsJd|_t|d}|5|jt	j|5}|jt|jfddddddtt\}}}d|_t|d}|5|jt	j|5}|jtj5|jt|jfdddddddddy#1swYxYw#1swYxYw#1swY2xYw#1swY6xYw#1swYyxYw)NFTrur)rrSrrrrr	rrrr
SSLCertVerificationErrorrs      r!rVz.ThreadedTests.test_hostname_checks_common_nameRsT4C3D09995:2$N4H
	/++FMMO<D,F
/IJ		4-.
/	/
4C93M05:2#N4H
	3++FMMO<D,F
3IJ&&s'C'CD3IItV[[123
3	3	3
/
/	/	/33
3
3	3	3s_&E"D5;E4&E% E:"E
E$E%5D>	:EE

EEE"	E%%E.ctjtj}|jt|jdt}tjtj}|jtt|d}|5|jtj|5}|jt|jf|j!}|j#|d|j%dj'd}|j#|ddd	ddddddy#1swYxYw#1swYyxYw
NzECDHE:ECDSA:!NULL:!aRSATrurrvr-r)ECDHEECDSA)r
rkr`rrrRSIGNED_CERTFILE_ECC_HOSTNAMEr_rSIGNED_CERTFILE_ECCrrrrr	rrOrErsplitrrrrrrrrs        r!
test_ecc_certzThreadedTests.test_ecc_certjs$(?(?@,,Z8""#<=/(?(?@&&':;$N4H
	@++FMMO<D,F
@IJ		4-.}}&CDA,,S1r
,>?

@	@	@
@
@	@	@s%&E=A;E	8E	E	EEc*tjtj}|jttj
j|_|jdt}tjtj}|jt|jtt|d}|5|jt!j |5}|j#t$|j&f|j)}|j+|d|j-dj/d}|j+|ddd	ddddddy#1swYxYw#1swYyxYwr)r
rkr`rrrrjrgrRrr_rrrrrrrr	rrOrErrrs        r!test_dual_rsa_ecczThreadedTests.test_dual_rsa_eccsF(?(?@,,Z8*-)?)?&""#<=/(?(?@&&':;&&7$N4H
	@++FMMO<D,F
@IJ		4-.}}&CDA,,S1r
,>?

@	@	@
@
@	@	@s%&F	1A;E=,F	=F	F		Fctjrtjj	dt
j
t
j}|jtt
j
t
j}t
j|_d|_
|jtgd}|D]\}}t!|d}|5|j#t%j$|5}|j'|j(||j+t,|j.f|j1}|j'|j(||j3|dddddddt!|d}|5|j#t%j$d5}|j5t
j65|j+t,|j.fdddddddddy#1swYxYw#1swYoxYw#1swY3xYw#1swY7xYw#1swYyxYw)NrT))ukönig.idn.pythontest.netxn--knig-5qa.idn.pythontest.net)rr)sxn--knig-5qa.idn.pythontest.netr)u(königsgäßchen.idna2003.pythontest.net.xn--knigsgsschen-lcb0w.idna2003.pythontest.net)rr)s.xn--knigsgsschen-lcb0w.idna2003.pythontest.netr).xn--knigsgchen-b4a3dun.idna2008.pythontest.netr)s.xn--knigsgchen-b4a3dun.idna2008.pythontest.netrrurrvzpython.example.org)rrrrrr
rkr_rIDNSANSFILEr`rrrrrrrrrrrr	rrOrErr)	rrr
idn_hostnamesrexpected_hostnamerrrs	         r!test_check_hostname_idnz%ThreadedTests.test_check_hostname_idns??JJT"(?(?@&&{3..!8!89!//!%%%j1

.3@		I.O.'tLF
I((9H)JIMN$$Q%6%68IJIItV[[12==?D$$Q%6%68IJOOD*GH
I
I
I		I$N4H
	3$$V]]_5I%K
3NO&&s';';<3IItV[[123
3	3	3II
I
I33
3
3	3	3sa&H'=A<H9H'&I I "H4I
IH$ H''H1	4H=9II		IIc<t\}}}|jttj|_tjj|_t|dd}|5|jtj|5}	|jt|jf|jdddddddy#tj $r<}t"j$r"t&j(j+d|zYd}~[d}~wt,$rZ}|j.t.j0k7rt"j$r"t&j(j+d|zYd}~d}~wwxYw#1swYxYw#1swYyxYw)zConnecting when the server rejects the client's certificate

        Launch a server with CERT_REQUIRED, and check that trying to
        connect to it with a wrong client certificate fails.
        TrNrz'Use of invalid cert should have failed!z
SSLError is %r
Nz
socket.error is %r
)rrrr
rrrrjrgrrrrr	rr-rrrrrrr^r
rerrrrrrrs       r!test_wrong_cert_tls12z#ThreadedTests.test_wrong_cert_tls12sT4C3D0&&x0%(%6%6"),)?)?&#"4$
	E**6==?;C+E	EHI
E		4-.		CD#	E	E	E<<
???JJ$$%9A%=>
C77e...??JJ$$%=%AB	
C	E	E	E	Esa(&FF!C1FFF&2DFF)AE>9F>FFF	FFrXct\}}}|jttj|_tjj|_tjj|_t|dd}|5|jtj|d5}|jt|jf|jtj d5|j#d|j%d|j#d|j%ddddddddddy#1swYxYw#1swYxYw#1swYyxYw)	NTrNFrsuppress_ragged_eofszalert unknown ca|EOF occurreddatarsshould have failed already)rrrr
rrrrXrPrrrrr	rrrrrKrs      r!test_wrong_cert_tls13z#ThreadedTests.test_wrong_cert_tls13s23B3D0&&x0%(%6%6"),)?)?&),)?)?&#"4$

	

'
'

8@=B(D
	HI
IItV[[)*''/

 t56t

	
	
	



	
	
	
	s>'E&.AE0AE5E=E&EEE#	E&&E/c~tjtjtjtjt
fd}fd}tj|}|j	||jy#|jwxYw)ztA brutal shutdown of an SSL server should raise an OSError
        in the client when attempting handshake.
        cjjj\}}|jjjyr)rrrr)newsockr
listener_gonelistener_readyrs  r!listenerz2ThreadedTests.test_rude_shutdown.<locals>.listenersE
HHJ HHJMGTMMO
GGIr#cjtj5}|jtfj	t	|}jddddy#t$rYwxYw#1swYyxYw)Nz2connecting to closed SSL socket should have failed)rrrr	rr-r^)rrvrrrrs  r!	connectorz3ThreadedTests.test_rude_shutdown.<locals>.connector's!
TA		4,'""$T/2HIIRS
T
T

T
Ts/(BA4B4	B=B?BBBtargetN)	rrrrrr	rr
r)rrrrHrrrrs`   @@@@r!test_rude_shutdownz ThreadedTests.test_rude_shutdowns}#*!)
MMO&&q$/	 
	T
H-			K
FFHAFFHsB**B<c	tjrtjj	dt
j
t
j}|jtt
j
t
j}t|d}|5|jtjt5}	|jt |j"fddddddy#t
j$$r}d}|j'|t
j(|j+|j,d|j+|j.||j1|t3||j1dt3|Yd}~d}~wwxYw#1swYxYw#1swYyxYw)NrTrurz&unable to get local issuer certificaterSrR)rrrrrr
rkr_rrr`rrrrrr	rrr@rrverify_codeverify_messagerr)rrrrrrrs       r!test_ssl_cert_verify_errorz(ThreadedTests.test_ssl_cert_verify_error:sZ??JJT"(?(?@&&7..!8!89#N4H
	H$$V]]_5M%O

HRSHIItV[[12

H	H	H
||HBC))!S-I-IJ$$Q]]B7$$Q%5%5s;MM#tAw/MM"=tAwGG
H	

H

H	H	HsI*F4F(!C8'F48F%BF F( F%%F((F1	-F44F=c"tjrtjj	dtdr)t
tjtjdt
tjtjdtdr)t
tjtjdtdr8t
tjtjdtjt
tjtjdtjtdr8t
tjtjdtjtdr8t
tjtjdtjt
tjtjdtjtdr8t
tjtjdtjtdr9t
tjtjdtjt
tjtjdtjtjztdr:t
tjtjdtjyy)z:Connecting to an SSLv23 server with various client optionsrrFTr)rjN)rrrrrraror
r^rrrrrrrrs r!test_PROTOCOL_TLSzThreadedTests.test_PROTOCOL_TLSQs??JJT"7#s//1C1CUK3++S-=-=tD7#s//1C1CWM7#s//1C1CUCL]L]^3++S-=-=tSEVEVW7#s//1C1CWcN_N_`7#s//1C1CUCL]L]^3++S-=-=tSEVEVW7#s//1C1CWcN_N_`7#s//1C1CU*-//
;	3++S-=-=t*-//COO*K	M7#s//1C1CU.1oo
?$r#rcXtjrtjj	dttjtjdttjtjdtjttjtjdtjttjtjdtjttjtjdy)z9Connecting to an SSLv3 server with various client optionsrrFrkN)
rrrrrror
rrrr^rrrs r!test_protocol_sslv3z!ThreadedTests.test_protocol_sslv3rs??JJT"3--s/A/A7K3--s/A/A7CL]L]^3--s/A/A7CL]L]^3--s/?/?*-//	;3--s/A/A5Ir#rcntjrtjj	dttjtjdttjtjdtjttjtjdtjtdr)ttjtjdttjtjdtjy)z8Connecting to a TLSv1 server with various client optionsrrrFrN)rrrrrror
rrrrarr^rrs r!test_protocol_tlsv1z!ThreadedTests.test_protocol_tlsv1~s??JJT"3--s/A/A7K3--s/A/A7CL]L]^3--s/A/A7CL]L]^7#s1133E3EuM3--s/?/?*-//	;r#rctjrtjj	dttjtjdtdr)ttjtjdttjtjdtjttjtjdttjtjdttjtjdy)zjConnecting to a TLSv1.1 server with various client options.
           Testing against older TLS versions.rTLSv1.1rFrN)
rrrrrror
rrarr^rrsrs r!test_protocol_tlsv1_1z#ThreadedTests.test_protocol_tlsv1_1s??JJT"3//1E1EyQ7#s33S5G5GO3//1A1A5*-*;*;	=	3++S-A-A9M3//1E1EuM3//1E1EuMr#rjctjrtjj	dttjtjdtjtjztjtjztdr)ttjtjdttjtjdtjttjtjdttjrRttjtjdttjtjdttj rSttjtj dttj tjdyy)zjConnecting to a TLSv1.2 server with various client options.
           Testing against older TLS versions.rTLSv1.2)rjrkrFrN)rrrrrror
rsrrrarr^rrdrrrs r!test_protocol_tlsv1_2z#ThreadedTests.test_protocol_tlsv1_2s8??JJT"3//1E1Ey*-//#//*I*-//#//*I	L7#s33S5G5GO3//1A1A5*-*;*;	=	3++S-A-A9MC../s33S5G5GOs1133G3GOC001s33S5I5I5Qs33S5I5I5Q2r#cBd}ttddd}d}|5tj}|jd|j	t
|jftjrtjjd|D]}tjr"tjjd|z|r"j||j}n"|j||jd}|jj!}|dk(rQ|j#d	r@tjr"tjjd
|zt%|}d}|dk(rW|j#d	rFtjr"tjjd|zj'}d}Ltjs^tjjd
|ztjrtjjd|rjdn|jd|rj)n|j)dddy#1swYyxYw)z6Switching from clear text to encrypted and back again.)smsg 1sMSG 2rsMSG 3smsg 4rsmsg 5smsg 6T)rrrFrrPrrsokz/ client:  read %r from server, starting TLS...
rz- client:  read %r from server, ending TLS...
z client:  read %r from server
rUrTN)rrrrrr	rrrrrrrKrcr_rrr\rr=r)	rmsgsrwrappedrr]r+r`rs	         r!
test_starttlszThreadedTests.test_starttlssc#H48+/59;
.	

A
MM$
IItV[[)*

  &
E??JJ$$3f<>JJv&"iikGFF6NffTlGmmo++-[(S^^E-B

((N!"#,A.D"Gy(S^^E-B

((L!"#
A#G

((=CE;
E>

  !BC

9%y!

	].	.	.	sGJ0BJJcPt|t}tjrtj
j
dttd5}|j}dddd}d|jtjjtdfz}tjt }t"j$j'||	}	|j)j+d
}|ret-|dkDrW|jt-|}tjr-tj
j
dt/||fz|j1|j3|y#1swY&xYw#|j1wxYw)
z8Using socketserver to create and manage SSL connections.rrrbNrRzhttps://localhost:%d/%sr6rrzcontent-lengthrz/ client: read %d bytes from remote server '%s'
)rrrrrrrrJrrKrrrrr
rrurllibrequesturlopeninforrArbrr)rrrMr1r3urlrdlens        r!test_socketserverzThreadedTests.test_socketservers;"4/B??JJT"
(D
!	QB	
'KKx03+55,,J,?NN""3"8		668<< 01DTQVVCI&??JJ$$Jr7F+,-
GGIR %		"
GGIsFBFFF%c
tjrtjj	dd}tt}|5ttj}|jd|jftjr"tjj	d|z|j	||j}tjr"tjj	d|z||jk7r>|jd|ddt||ddjt|fz|j	d	tjrtjj	d
|jtjrtjj	ddddy#1swYyxYw)z'Check the example asyncore integration.rrr$rPrQrRNrSrTrUz client:  connection closed.
)rrrrrr"rrrrrrKrr-rbr)rr]rrr`s     r!test_asyncore_serverz"ThreadedTests.test_asyncore_server
sZ??JJT"#H-
	C 1A
II{FKK01

  /&8:
GGFOffhG

  !6!@A&,,.(		Ks|S\cr{((*CK99:
GGI

  !BC
GGI

  !AB)	C	C	Cs
FGG%c
x
tjrtjj	dtttjtjtdd}|5ttjdtttjjt|jffd}fd}djdgt fd	j"dd
gt fdj$dgdfg}d
j&dgfdj(dd
gfd|dgfd|dgfg}d}|D]\}}}	}
}||zj+d}	||g|
}
dj-|}|j/|
|||j1}||j3k7r=|j5dj-||ddt!||ddt!||D]\}}}	}
||zj+d}	j|||
}||j3k7r=|j5dj-||ddt!||ddt!|d}j|t=t!|}|j/j1d |t!||j/||t>^t>j@t!|z}|jC|}j%||j/j1||jEtFjH|jEtFjJdg|jEtFjLd!|jEtFjNt=d!gj	d"|jEt6j&d |jEt6j0d jQdddy#t6$rj}|	r!|j5dj-|t9|j;|s"|j5dj-||Yd}~kd}~wwxYw#t6$rz}|	r!|j5dj-|t9|j;|s"|j5dj-||j1Yd}~;d}~wwxYw#1swYyxYw)#z Test recv(), send() and friends.rTFrrrrrrrrrcFtd}j|}|d|SNsd)rr`)brnrs  r!
_recv_intoz0ThreadedTests.test_recv_send.<locals>._recv_into4
s&i(A%y r#cLtd}j|\}}|d|Sr)rrb)rrnrrs   r!_recvfrom_intoz4ThreadedTests.test_recv_send.<locals>._recvfrom_into9
s+i(ooa0t%y r#rcrdzsome.addressrcyrrW)rs r!<lambda>z.ThreadedTests.test_recv_send.<locals>.<lambda>B
sr#r_rar`rbPREFIX_asciizsending with {}rzpWhile sending with <<{name:s}>> bad data <<{outdata:r}>> ({nout:d}) received; expected <<{indata:r}>> ({nin:d})
NrS)r r`noutr]ninz>Failed to send with method <<{name:s}>>; expected to succeed.
rzFMethod <<{name:s}>> failed with unexpected exception message: {exp:s}
)r expzrWhile receiving with <<{name:s}>> bad data <<{outdata:r}>> ({nout:d}) received; expected <<{indata:r}>> ({nin:d})
zAFailed to receive with method <<{name:s}>>; expected to succeed.
rrr]rT))rrrrrrrr
rr_rrrr	rrcrbrdrr_raruformatrrKrr-rr[r\rctypesc_ubytefrom_buffer_copyrrerfrgrhrir)rrrrsend_methodsrecv_methodsdata_prefix	meth_name	send_methrhrsret_val_methr]rrr`r	recv_methrbufferubyte	byteslikers                      @r!test_recv_sendzThreadedTests.test_recv_send!
s??JJT"#H-0]]030G0G,4+/5:<{	 ,1)1)1*---	9A

IItV[[)*
!

!r3/188U^,<cBAIItR@Lr*QZZ0@Aj$3 .%<	L$K&2
"I~t %	199'B#F2T2C+229=C$$S,v*>C$HffhG&,,.0		BBH&%.%(\'-cr{FCIC
@?K
:	9nd%	199'BFF6N'.G&,,.0		BBH&%.%(\'-cr{FCIC

@D
FF4Ls4y)FQVVB/T;VT*!T2!2248			)$  40

115591199wiH1199cB1nny~.>
@
GGIj!&&"5j!&&"5
GGIw{	{	f"%		55;VV5Kq6,,Y7		;;A6%.A<B<:"%		55;VV5Kq6,,Y7		;;A6%.A<B<FFHHa{	{	sf(C,T0BP4) T0
A&R*0F;T04	R'=AR"T0"R''T0*	T-3A/T("T0(T--T00T9ctt}|j|tjt
|jf}|j|jt|d}|j|j|jd|j|jdd|j|jdd|j|jd|jd|j|jdd|j|jt!dy)NF)rrrr#)rrrJrrr	rrrrrcrr_rKrr`r)rrrs   r!test_recv_zerozThreadedTests.test_recv_zero
s#H-&!$$dFKK%89 QU; 	
wC(C(7+	


eC(Y[115r#c8tttjtjtdd}|5tt
jdtttjjt|jfjdtdfd}|jtjtjf|jdjdddy#1swYyxYw)NTFrri c*	jr)rc)rrsr!fill_bufferz8ThreadedTests.test_nonblocking_send.<locals>.fill_buffer
sFF3Kr#)rrr
rr_rrrr	rrrrrYrr)rrrrrs   @@r!test_nonblocking_sendz#ThreadedTests.test_nonblocking_send
s#H-0]]030G0G,4+/5:<	 ,1)1)1*---	9A

IItV[[)*
MM% D/C
 
s44"3356A
C
MM$
GGI)			sC
DDctjtjd}tj}t	j
dfd}t	j|}|jj		tjtj}|jd|j||f|jtdt||j	tjtj}t|}|jd|jtd|j||f|j	d|jjy#jwxYw#|jwxYw#d|jjwxYw)Nr$Fcjjg}sFtjgggd\}}}|vr"|jj	dsF|D]}|jy)Nrr)rrrXrurr)connsr(wrrfinishrstarteds     r!servez3ThreadedTests.test_handshake_timeout.<locals>.serve
sxMMOKKME --"b#>1aQ;LL!34



r#rrz	timed outT)rrSrrrrrr
rrnrrrrrr)	rrrrrHrrrrs	      @@@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LLNs8A#F6GA#F3*GF00G3GG$G,cZ

t\}}}tjtj
d}tj
}|j
d
|j

jtj
dd

fd}tj|}|j
j|jtj|}|j||f|jd|j|j!}	|j#|j%j#
j#|j't(j*|j-|	y)Nr$Trcjjj\jj	dy)Nr7)rrrrcr_)evtpeerremotersr!rz/ThreadedTests.test_server_accept.<locals>.serves8MMOGGI!==?LFDKKA'r#rrr)rrrSrrrrErrrrr
rrrcr_rrrr@r
rr)rr>r?rrrrrHrDclient_addrrrrrs          @@@@r!test_server_acceptz ThreadedTests.test_server_accept
s?,;+<(
Jv~~.&&v.''D'A**+oo	(
E*		
''MMOX(
	$'(G
((*	fcmm4{+r#ctjtj}d|_|j	tj
5}|j
t5}|jddd|jjjtjdddy#1swYFxYw#1swYyxYwr )
r
rkr`rrrrr^rOrrr
ENOTCONNrrrr|s    r!test_getpeercert_enotconnz'ThreadedTests.test_getpeercert_enotconn2s..!8!89!&

 
 
1	AT""7+
#r  "
#R\\//@	A	A
#
#	A	A$C$B:5<C:C	?CCctjtj}d|_|j	tj
5}|j
t5}|jddd|jjjtjdddy#1swYFxYw#1swYyxYwr )
r
rkr`rrrrr^rrrr
rrs    r!test_do_handshake_enotconnz(ThreadedTests.test_do_handshake_enotconn:s..!8!89!&

 
 
1	AT""7+
$r!!#
$R\\//@	A	A
$
$	A	Arc,t\}}}tjj|_|jd|jdt
|5}|jtj|5}|jt5|jt|jfddddddddd|jdjdy#1swY9xYw#1swY=xYw#1swYAxYw)NAES128AES256rrzno shared cipherr)rr
rrjrgrRrrrrr^rr	rrrrs      r!test_no_shared_ciphersz$ThreadedTests.test_no_shared_ciphersBs3B3D0),)?)?&""8,""8,

7	36++FMMO<D,F
3IJ&&w/3IItV[[123
3	3
	


(&*<*<Q*?@33
3
3	3	3s<&D
C>"C2:C>D
2C;7C>>D	D

Dctjtj}d|_tj|_t
ttjd5}|jtj5}|j|jd|j|jd|jt|j f|j#|jdddd|jjd|j|jddddy#1swYNxYw#1swYyxYw)zt
        Basic tests for SSLSocket.version().
        More tests are done in the test_protocol_*() methods.
        F)rrNTLSv1.3)r
rkr`rrrrrr_rrrr8rrr	rr)rrrrs    r!test_version_basicz ThreadedTests.test_version_basicPs
..!8!89!&!mm
,/,C,C',.		-17$$V]]_5
9

aiik40

aii.		4-.  i8	
9

MM!))T*MM!))+t,		-		-
9
9		-		-s& $EA>EAEE	EE$ct\}}}tjj|_t|5}|j
tj|5}|jt|jf|j|jdhd|j|jdddddddy#1swYxYw#1swYyxYw)Nrrr>TLS_AES_128_GCM_SHA256TLS_AES_256_GCM_SHA384TLS_CHACHA20_POLY1305_SHA256r)rr
rrXrPrrrrr	rrrrr8rs      r!test_tls1_3zThreadedTests.test_tls1_3cs3B3D0),)?)?&

7		96++FMMO<D,F
9IJ		4-.

ahhjm.
  i8
9		9		9
9
9		9		9s$&C$ A'CC$C!	C$$C-cPt\}}}tjj|_tjj
|_tjj
|_tjj
|_t|5}|jtj|5}|jt|jf|j|jdddddddy#1swYxYw#1swYyxYw)Nrrr)rr
rrrPrjrgrrrrr	rrr8rs      r!test_min_max_version_tlsv1_2z*ThreadedTests.test_min_max_version_tlsv1_2rs4C3D0),)=)=&),)?)?&),)?)?&),)?)?&

7	96++FMMO<D,F
9IJ		4-.  i8
9	9	9
9
9	9	9s%&D=AD?DD	DD%cht\}}}tjj|_tjj
|_tjj|_tjj|_t||t|5}|jtj|5}|jt|jf|j|j!dddddddy#1swYxYw#1swYyxYw)Nrrr)rr
rrrPrjrgrrUrrrrr	rrr8rs      r!test_min_max_version_tlsv1_1z*ThreadedTests.test_min_max_version_tlsv1_1s4C3D0),)=)=&),)?)?&),)=)=&),)?)?&NN;

7	96++FMMO<D,F
9IJ		4-.  i8
9	9	9
9
9	9	9s%#&D(	ADD(D%	!D((D1ct\}}}tjj|_tjj|_tjj|_tjj|_t||t|5}|jtj|5}|jtj5}|jt|jfddd|j!dt#j$ddddddy#1swY?xYw#1swYxYw#1swYyxYw)Nrralert)rr
rrjrgrPrrUrrrrrrr	rrr[rrs       r!test_min_max_version_mismatchz+ThreadedTests.test_min_max_version_mismatchs4C3D0),)?)?&),)?)?&),)=)=&),)=)=&NN;

7	96++FMMO<D,F
9IJ&&s||43IItV[[123

gs1;;'78	
9	9	933
9
9	9	9s<#&E!	 E)"E	-E8E!	EEE	E!!E*c*t\}}}tjj|_tjj|_tjj|_t
||t|5}|jtj|5}|jt|jf|j|jdddddddy#1swYxYw#1swYyxYw)Nrrr)rr
rrrPrgrUrrrrr	rrr8rs      r!test_min_max_version_sslv3z(ThreadedTests.test_min_max_version_sslv3s3B3D0),)=)=&),)=)=&),)=)=&NN;

7	76++FMMO<D,F
7IJ		4-.  g6
7	7	7
7
7	7	7s%&D	*AC=,D	=D	D		Dct\}}}tjj|_t|5}|j
tj|5}|jt|jf|jd|jdddddddy#1swYxYw#1swYyxYw)NrrECDHr)
rr
rrjrgrrrrr	rrrrs      r!test_default_ecdh_curvez%ThreadedTests.test_default_ecdh_curves4C3D0*-)?)?&
 
7	56++FMMO<D,F
5IJ		4-.

fahhjm4
5	5	5
5
5	5	5s$&C AB6%C6B?	;CCrrcftjrtjj	dt\}}}t
|dd}|5|jtj|5}|jt|jf|jd}tjr.tjj	dj||j||jdk(r|j!t#|d	n|j!t#|d
|j	d|j%j'}|j!|t)|j+dd
d
d
|jtj|5}|jt|jf|jd}tjr.tjj	dj||j-||j||jdk(r|j!t#|d	n|j!t#|d
|j	d|j%j'}|j!|t)|j+dd
d
d
d
d
d
y
#1swYwxYw#1swYxYw#1swYy
xYw)z Test tls-unique channel binding.rTFrNrrz! got channel binding data: {0!r}
r0sCB tls-unique
rNz(got another channel binding data: {0!r}
)rrrrrrrrrrr	rrrrr8rrbrKrrruassertNotEqual)	rrrrrrcb_datapeer_data_reprnew_cb_datas	         r!rz-ThreadedTests.test_tls_unique_channel_bindings??JJT"3B3D0#N+/5:<-	G++MMO$,,.
C12		4-.//=??JJ$$<CCGLN$$W-99;)+$$S\26$$S\26*+!"!1  !%g!5!5j!AC)
C0 ++MMO$,,.
G12		4-.33LA??JJ$$CJJ')
##G[9$$W-99;)+$$S\26$$S\26*+!"!1  !%k!2!9!9*!EG'
G3-	G-	G
C
C0
G
G3-	G-	Gs>&L'4D%L-L'D7L=L'L	L'L$	 L''L0ct\}}}t||dd|}tjr1tj
j
dj|d|j|dhdy)NTrrr^z got compression: {!r}
rV>NRLEZLIB)	rrarrrrrrrrrrrrs     r!test_compressionzThreadedTests.test_compressionsg3B3D0">>*.,46??JJ7>>u]?STU

eM*,CDr#rBz*ssl.OP_NO_COMPRESSION needed for this testct\}}}|xjtjzc_|xjtjzc_t	||dd|}|j|ddy)NTr&rV)rrvr
rBrarr)s     r!test_compression_disabledz'ThreadedTests.test_compression_disabledsm4C3D0#"7"77#"7"77">>*.,46	


eM*D1r#ct\}}}|xjtjzc_t	||dd|yNTr&rrvr
rrarrrrs    r!test_legacy_server_connectz(ThreadedTests.test_legacy_server_connects<3B3D0#">">>>>*.,4	6r#ct\}}}|xjtjzc_t	||dd|yr.r/r0s    r!test_no_legacy_server_connectz+ThreadedTests.test_no_legacy_server_connects?3B3D03#?#?"??>>*.,4	6r#rct\}}}tjj|_|jt|jdtjj|_t||dd|}|dd}|jd}d|vr"d|vrd	|vr|jd
|dzyyyy)NkEDHTr&rrrADHEDHDHEzNon-DH cipher: )rr
rrjrgrrrRrarr-)rrrrrrpartss       r!test_dh_paramszThreadedTests.test_dh_params%s4C3D0),)?)?&%%f-""6*),)?)?&">>*.,46x#S!%u"4e9KII'&)34:L"4r#ct\}}}|jd|jdtjj
|_t||dd|}t\}}}|jd|jdtjj
|_t||dd|}t\}}}|jd|jd|jdtjj
|_|jtj5t||dd|dddy#1swYyxYw)N	secp384r1zECDHE:!eNULL:!aNULLTr&r)
rrrRr
rrjrPrarrr)s     r!test_ecdh_curvezThreadedTests.test_ecdh_curve6s73B3D0%%k2""#89),)?)?&">>*.,46
4C3D0%%k2""#89),)?)?&">>*.,46
4C3D0%%l3%%k2""#89),)?)?&


s||
,	2~~&*T(0
2	2	2	2s>EE!cjt\}}}t||dd|}|j|ddy)NTr&rX)rrarr)s     r!test_selected_alpn_protocolz)ThreadedTests.test_selected_alpn_protocolUs=3B3D0">>*.,46	


e23T:r#ct\}}}|jddgt||dd|}|j|ddy)NrbarTr&rX)rrrarr)s     r!/test_selected_alpn_protocol_if_server_uses_alpnz=ThreadedTests.test_selected_alpn_protocol_if_server_uses_alpn]sO3B3D0))5%.9">>*.,46	


e23T:r#c	gd}ddgdfddgdfdgdfddgdfg}|D]\}}t\}}}|j||j|	t||dd|}d	t|d
t|dt|d}
|d
}|j
|||
|dfzt|dr|ddnd}|j
|||
|dfzy#tj$r}	|	}Yd}	~	d}	~	wwxYw)N)rrA	milkshakerrArDzhttp/3.0zhttp/4.0Tr&zfailed trying z	 (s) and z (c).
was expecting z, but got %s from the %srXrDrZrnothingr)rrrar
rr[rrb)
rserver_protocolsprotocol_testsclient_protocolsrrrrrrr
client_result
server_results
             r!test_alpn_protocolsz!ThreadedTests.test_alpn_protocolsfsO6U^U#U^U#]K(*
%t,	
+9	>&h7F7H4NNH--.>?--.>?
*>+926<@4<	>+,c2B.CH
'C""89M]H M8#<<
>u456""9:2><E
]H M8#<<
>/	><<

sCC9-C44C9c(tjrJyr)r
HAS_NPNrs r!test_npn_protocolsz ThreadedTests.test_npn_protocolss;;;r#c\tjtj}|jttjtj}|jt
tjtj}|jt|||fSr)	r
rkr_rrrr`rr)rr
other_contextrs    r!sni_contextszThreadedTests.sni_contextssv(?(?@&&7s'>'>?
%%&67(?(?@,,Z8}n<<r#c>|d}|jd|ff|dy)NrWr-r6)r)rrr rs    r!check_common_namezThreadedTests.check_common_names&Z 

d+-tI?r#cg|j\}}d|_fd}|j|t||dd}|j	d|fg|j|dgt||dd}|j	d|fg|j|tg|jdt||dd}|j|t|j	gy)NFc@j||f||_yyr)rur)rvrwrxcallsrPs   r!rzz6ThreadedTests.test_sni_callback.<locals>.servername_cbs'LL+78&#0 'r#Tsupermessagerr^r>notfunny)rQrrrarrSr)rrrrzrrVrPs     @@r!rzThreadedTests.test_sni_callbacks8<8I8I8K5
~(-%	1	..}=">>*.,:<
	
..!A BCun5">>*.,02	
$!7 89u&>?..t4">>*.,68	
u&>?#r#c&|j\}}}d}|j||jtj5}t||dd}ddd|j
jjdy#1swY0xYw)Nc"tjSr)r
ALERT_DESCRIPTION_ACCESS_DENIEDrs   r!cb_returning_alertzAThreadedTests.test_sni_callback_alert.<locals>.cb_returning_alerts666r#FrWrXTLSV1_ALERT_ACCESS_DENIED)	rQrrr
rrarrr)rrrPrr]r|rs       r!test_sni_callback_alertz%ThreadedTests.test_sni_callback_alerts8<8I8I8K5
~	7../AB


s||
,	@&~~.30>@E	@	
,,.IJ		@	@sBBc|j\}}}d}|j|tj5}|j	t
j5}t||dd}ddd|jjjd|j|jjtdddy#1swYbxYw#1swYyxYw)Ncddzy)Nr6rrWrs   r!
cb_raisingz;ThreadedTests.test_sni_callback_raising.<locals>.cb_raisings	
aCr#FrWrXSSLV3_ALERT_HANDSHAKE_FAILURE)rQrrcatch_unraisable_exceptionrr
rrarrr
unraisableexc_typeZeroDivisionError)rrrPrrbcatchr|rs        r!test_sni_callback_raisingz'ThreadedTests.test_sni_callback_raisings8<8I8I8K5
~	..z:

/
/
1	KU""3<<0
DB*>>274BD
D

R\\00<
>U--668IJ	K	K
D
D	K	K$ CC-ACC	CC#c|j\}}}d}|j|tj5}|j	t
j5}t||dd}ddd|jjjd|j|jjtdddy#1swYbxYw#1swYyxYw)Ncy)NrrWrs   r!cb_wrong_return_typezOThreadedTests.test_sni_callback_wrong_return_type.<locals>.cb_wrong_return_typesr#FrWrXTLSV1_ALERT_INTERNAL_ERROR)rQrrrdrr
rrarrrrerfr)rrrPrrmrhr|rs        r!#test_sni_callback_wrong_return_typez1ThreadedTests.test_sni_callback_wrong_return_types9=8I8I8K5
~	../CD

/
/
1	CU""3<<0
DB*>>274BD
D
R\\002NOU--66	B	C	C
D
D	C	Crjc2	t\}}}|jd|jdgd}t|||}|dd}|jt	|d|D],\	}}t	fd|Dr|j
	.y)Nz
AES128:AES256zAES256:eNULL)rzAES-256TLS_CHACHA20TLS_AESr^r[rc3&K|]}|v
ywrrW)r:algr s  r!r;z4ThreadedTests.test_shared_ciphers.<locals>.<genexpr>s<ssd{<s)rrRra
assertGreaterrbanyr-)
rrrr
expected_algsrrtls_versionbitsr s
         @r!test_shared_ciphersz!ThreadedTests.test_shared_cipherss3B3D0""?3"">2

#>>,46/033w<+'.	 #D+t<m<<		$	 r#ct\}}}t|d}|5|jtj|}|j	t
|jf|j|jt|jd|jt|jddddy#1swYyxYw)NFrurrshello)rrrrrr	rrrrrKrrs      r!,test_read_write_after_close_raises_valuerrorz:ThreadedTests.test_read_write_after_close_raises_valuerrors3B3D0#N5I
	=**6==?;C+EA
IItV[[)*
GGIj!&&$7j!''8<	=	=	=sBCC	cd}ttjd5}|j|ddd|j	tj
tjt
\}}}t|d}|5|jtj|5}|jt|jfttjd5}|j||j|jd|dddddddddy#1swYxYw#1swY'xYw#1swY+xYw#1swYyxYw)NsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwbFrurrr)rJrTESTFNrrunlinkrrrrrr	rsendfilerr_)	r	TEST_DATArMrrrrrfiles	         r!
test_sendfilezThreadedTests.test_sendfiles#	
)""D
)	Q
GGI		(()*:*:;3B3D0#N5I
	>++FMMO<D,F
>IJ		4-.)**D1>TJJt$$$QVVD\9=>
>	>	>		>>
>
>	>	>sGD0&E(<E	$3D=E	E0D:=EE		E	EEc"t\}}}tjj|_t|||}|d}|j
|j|j|jd|j|jd|j
|j|j|jd|j|d|j}|j|dd|j|ddt||||}|j}|j|dd	|j|dd|j
|d|d}|j|j|j|j|||j!|||j#|j|j|j#|j|jt|||}|j|d|d}|j%|j|j|j%|||j}|j|dd
|j|ddt||||}|j
|d|d}	|j|	j|j|j|	||j#|	j|j|j#|	j|j|j}|j|dd|j|dd	y)NrsrOrrYrr6r)rOr^rrr7)rr
rrjrgrarEidrvrrp
has_ticketticket_lifetime_hintrOrrassertIsNotrr!)
rrrrrrO	sess_statsession2session3session4s
          r!test_sessionzThreadedTests.test_session s3B3D0),)?)?&#>>,46	"

#7<<+7??A.**+777;/01"002	8,a06*A.#>>+2XG"002	8,a06*A../0#gjj17+7+

w||< 0 0'//B#>>,46/01#HKK4Hg."002	8,a06*A.#>>+2XG./0#gjj17+

w||< 0 0'//B"002	8,a06*A.r#ctt\}}}t\}}}tjj|_tjj|_t|d}|5|j
tj|5}|j|jd|j|jd|jt|jf|j}|j||jt 5}	t"|_	ddd|jt%	j&dddd|j
tj|5}|jt|jf|jt(5}	|_	ddd|jt%	j&dddd|j
tj|5}|_	|jt|jf|j|jj*|j*|j|j||j|jdddd|j
tj|5}|jt(5}	|_	|jt|jfddd|jt%	j&dddddddy#1swY0xYw#1swYxYw#1swYxYw#1swYxYw#1swYxYw#1swYxYw#1swY^xYw#1swYyxYw)NFrurzValue is not a SSLSession.z#Cannot set session after handshake.Tz)Session refers to a different SSLContext.)rr
rrjrgrrrrrOrYrr	rrErrrr[rrr)
rrrrclient_context2rErrrOrs
          r!test_session_handlingz#ThreadedTests.test_session_handlingYs 3B3D0 / 1A*-)?)?&*-..*@*@'#N5I
'	N++FMMO<D,F

QIJ  D1  !1!148		4-.))(&&y1'Q &AI'  Q[[!13OP

Q ++FMMO<D,F
HIJ		4-.&&z2(a 'AI(  Q[[!1!FH

H ++FMMO<D,F
9IJ$			4-.  wzz:  G4  !1!148
9!,,V]]_=E-G
NJK&&z23a 'AIIItV[[123  Q[[!1!LN

NA'	N'	N''

Q

Q ((	
H
H
9
933
N
NA'	N'	Ns*&N.BM#M(-M#-N.7M=9M0-M=.-N.BN
,-N.N"/)N-N"N.M M##M-	(N.0M:5M==N	N.
N	N.NN""N+	'N..N7N)Hryrrrrrsryr|rrqrr
rTrVrrrrrzrrrrrrrrrrrrrrrrrrr	rrr
rrrrrrrr*rQr,r1r3rrr:r=r?rBrKrNrQrSrr_riror{r}rrrrWr#r!rqrq
sWz**"+*"X"/H&EP2BX'')T33*@*@463p#EJ)$%4'RH.?B'"	J#	J'"
;#
;)$
N%
N)$R%R*7r!4C:FP6&:/b&,PAAA-&)$9%9)$'"
9#%
9)$
9%
9)$'"9#%9 '"7#75"X)B)BBEG8GG8GtEX&9:EG2G266X__^%PQ5R5 2>;; >D=@&$PKK$C& $=
>7/r0Nr#rqrXzTest needs TLS 1.3cNeZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
y)
TestPostHandshakeAuthctjtjg}|D]a}tj|}|j	|j
dd|_|j	|j
dtj|_|j	|jtj|j	|j
dd|_|j	|jtj|j	|j
dtj|_d|_|j	|jtj|j	|j
ddyr)	r
r_r`rkrpost_handshake_authrrr)rrzrcrTs    r!test_pha_setterz%TestPostHandshakeAuth.test_pha_setters'##S%<%<
	"	<H..*CS44e<&*C#S44d;!//COS__c.?.?@S44d;&+C#S__c.?.?@S44e<!//CO&*C#S__c.?.?@S44d;%	<r#ct\}}}d|_tj|_d|_|jtt|d}|5|jtj|5}|jt|jf|jd|j|jdd|jd|j|jdd	|jd|j|jdd
|jd|j|jdd	|jd|jdj!d
}|j#d|ddddddy#1swYxYw#1swYyxYw)NTFrurrrrrrrrirr9)rrr
rrrrrrrrr	rrrr_decoder)rrrrrr	cert_texts       r!test_pha_requiredz'TestPostHandshakeAuth.test_pha_requireds|3B3D0-1*%(%6%6"-1*&&7#N5I
	J++FMMO<D,F
JIJ		4-.
#  z:  w7
#  y9  w7
#FF4L//
;	

=yI
J	J	J
J
J	J	Js%&G<D-F:)G:G	?GGct\}}}d|_tj|_d|_d}||_||_t
|d}|5|jtj|d5}|jt|jf|jd|jtjd5|jd}|j!|d	|jd
|jddddddddddy#1swYxYw#1swYxYw#1swYyxYw)NTctjr@|tjk(r,||||||f}tj
j
d|dyyy)NzTLS: r)rrrALERTrrr)r+	directionr8content_typemsg_typerrs       r!msg_cbz>TestPostHandshakeAuth.test_pha_required_nocert.<locals>.msg_cbsK<?3H3H#Hi,$O

  5!34$Ir#ruFrrz#(certificate required|EOF occurred)rrr)rrr
rr
_msg_callbackrrrrr	rrrrr_r)rrrrrrrrs        r!test_pha_required_nocertz.TestPostHandshakeAuth.test_pha_required_nocerts23B3D0-1*%(%6%6"-1*	5
(.$'-$#N4H
	!++FMMO<DAF,H
!KL		4-.++LL9!
66$<D$$T73GGJ'FF4L!
!	!	!!!
!
!	!	!s>'E9AD7AD+D7E+D40D77E	<EEcBtjrtjj	dt\}}}d|_tj|_	d|_|jttj|_	t|d}|5|jtj|5}|j!t"|j$f|j	d|j'|j)dd|j	d	|j'|j)dd
|j	d|j'|j)ddddddddy#1swYxYw#1swYyxYw)NrTFrurrrrrrr)rrrrrrrr
rrrrrrrrrr	rrr_rs      r!test_pha_optionalz'TestPostHandshakeAuth.test_pha_optionalsF??JJT"3B3D0-1*%(%6%6"-1*&&7&)%6%6"#N5I
		:++FMMO<D,F
:IJ		4-.
#  z:  w7
#  y9
:		:		:
:
:		:		:s%&FB8F	8F	F	FFctjrtjj	dt\}}}d|_tj|_	d|_t|d}|5|jtj|5}|jt|jf|j	d|j!|j#dd|j	d	|j!|j#dd
|j	d|j!|j#ddddddddy#1swYxYw#1swYyxYw)NrTFrurrrrrr)rrrrrrrr
rrrrrrr	rrr_rs      r!test_pha_optional_nocertz.TestPostHandshakeAuth.test_pha_optional_nocerts(??JJT"3B3D0-1*%(%6%6"-1*#N5I

	;++FMMO<D,F	
;IJ		4-.
#  z:  w7
#  z:	
;
	;
	;	
;	
;
	;
	;s%0&E+B8EE+E(	$E++E4cnt\}}}d|_tj|_|jtt|d}|5|jtj|5}|jt|jf|jtjd5|jddd|j!d|j#d|j%dddddddy#1swYLxYw#1swYxYw#1swYyxYw)	NTFrurz
not serverrsextension not receivedr)rrr
rrrrrrrrr	rrrrrrr_rs      r!test_pha_no_pha_clientz,TestPostHandshakeAuth.test_pha_no_pha_clients
3B3D0-1*%(%6%6"&&7#N5I
	G++FMMO<D,F
GIJ		4-.++CLL,G52245

7F

G	G	G55
G
G	G	Gs=&D+5AD7D:DD+DDD(	$D++D4ct\}}}tj|_d|_|jtt|d}|5|jtj|5}|jt|jf|jd|j|jdd|jd|j|jdd	|jd|j|jddddddddy#1swYxYw#1swYyxYw)
NTFrurrrrrr)rr
rrrrrrrrrr	rrrr_rs      r!test_pha_no_pha_serverz,TestPostHandshakeAuth.test_pha_no_pha_server"s3B3D0%(%6%6"-1*&&7#N5I

	:++FMMO<D,F	
:IJ		4-.
#  y9  w7
#  y9	
:
	:
	:	
:	
:
	:
	:s%&E
5B8D>-E
>E	E

Ec"t\}}}tj|_tjj
|_d|_|jtt|d}|5|jtj|5}|jt|jf|j!d|j#d|j%dddddddy#1swYxYw#1swYyxYw)NTFrurrsWRONG_SSL_VERSIONr)rr
rrrrjrgrrrrrrrr	rrrr_rs      r!test_pha_not_tls13z(TestPostHandshakeAuth.test_pha_not_tls136s3B3D0%(%6%6"),)?)?&-1*&&7#N5I
	B++FMMO<D,F
BIJ		4-.

2AFF4LA
B	B	B
B
B	B	Bs%.&DAC9(D9D	>DDct}tjtj}d|_|jtd|_tj|_	tjtj}|jt|jtd|_tj|_	t|d}|5|jt!j |5}|j#t$|j&f|j)d|j+|j-dd|j)d|j+|j-dd	|j)d|j+|j-dd
|j+|j/iddddddy#1swYxYw#1swYyxYw)NTFrurrrrrrr)rr
rkr`rrrrrrr_rrrrrrrr	rrrr_rO)rrrrrrs      r!test_bpo37428_pha_cert_nonez1TestPostHandshakeAuth.test_bpo37428_pha_cert_noneGs,(?(?@-1*&&7(-%%(]]"(?(?@&&7,,Z8-1*%(%6%6"#N5I
	6++FMMO<D,F

6IJ		4-.
#  z:  w7
#  y9  "5

6	6	6

6

6	6	6s%&G5CG)G5)G2	.G55G>c	td\}}}t|d}|5|jtj|5}|j	t
|jf|jj}|jt|d|\}}|jj}	|jt|	d|j||	d|jt|t|	d|jt|t|	d|j|||jt|t||jt|t||j|j|j|j!dt||j!d	t||j#t$j&}
|j#t$j(}|j+|
t,|j!d
|
|j+|t.|jt0j3|
|ddddddy#1swYxYw#1swYyxYw)NFrrurrr6rzCN=localhostzCN=our-ca-serverz-----BEGIN CERTIFICATE-----)rrrrrr	rrrrrbrhashrr!get_inforpublic_bytesrENCODING_PEMENCODING_DERr@r[rr
r*)rrrrrrvceecauvcr0rs            r!test_internal_chain_clientz0TestPostHandshakeAuth.test_internal_chain_clientfs&3B4
0$N5I
	++

 (,
		4-.YY113  R!,Bii446  S1-  SV,  b4A<8  b4A<8##B+##DHd2h7##DHd2h7##BKKM2;;=A

nd2h7

0$r(;ood&7&78ood&7&78%%c3/

;SA%%c51  ,,S137
		

		s$&J6IJ*J6*J3	/J66J?ct\}}}|jttj|_tjj|_t|d}|5|jtj|5}|jt|jf|jd|j!d}|j#|d|jd|j!d}|j#|dddddddy#1swYxYw#1swYyxYw)NFrursVERIFIEDCHAIN
rs
sUNVERIFIEDCHAIN
)rrrr
rrrrjrgrrrrr	rrr_r)rrrrrrress       r!test_internal_chain_serverz0TestPostHandshakeAuth.test_internal_chain_servers
3B3D0&&7%(%6%6"),)?)?&#N5I
	1++

 (,

1		4-.*+ffTl  i0,-ffTl  i0

1	1	1

1

1	1	1s%'&D4
B
D(D4(D1	-D44D=N)ryrrrrrrrrrrrrrrWr#r!rrs><0J2#!J:0;,G :(B"6>#J1r#rkeylog_filenamez0test requires OpenSSL 1.1.1 with keylog callbackcDeZdZejfdZeeje	ddZ
eeje	ddZeejejjdeje	ddZdZdZd	Zy
)TestSSLDebugclt|5}tt|cdddS#1swYyxYwr)rJrbr)rfnamerMs   r!keylog_lineszTestSSLDebug.keylog_liness+
%[	 AtAw<	 	 	 s*3rc2|jtjtjtjtj}|j|jd|jtjjtjtj|_|j|jtj|jtjjtj|j|jdd|_|j|jd|jt t"f5tjj%tjj'tj|_ddd|jt(5d|_dddy#1swY/xYw#1swYyxYw)Nr6)rrrrr
rkr`rrrOrrisfilerErrIsADirectoryErrorPermissionErrorrabspathrr+s  r!test_keylog_defaultsz!TestSSLDebug.test_keylog_defaultsso	
	(()*:*:;nnS445,,d3	(8(89:'..,,i.>.>?y'7'789**,a0",,d3


 1?C
D	3"$''//	 0 01#3C	3


y
)	$"#C	$	$	3	3
	$	$sAH0H
H

Hc|jtjtjt	\}}}tj|_t
|d}|5|jtj|5}|jt|jfdddddd|j|jdd|_tj|_t
|d}|5|jtj|5}|jt|jfdddddd|j|jdtj|_tj|_t
|d}|5|jtj|5}|jt|jfdddddd|j|jdd|_d|_y#1swYxYw#1swYxYw#1swYxYw#1swYxYw#1swYtxYw#1swYxxYw)NFrurr)rrrrrrrrrrr	rrrrrs      r!test_keylog_filenamez!TestSSLDebug.test_keylog_filenames	
	(()*:*:;3B3D0)2)9)9&#N5I
	/++FMMO<D,F
/IJ		4-.
/	/
	
**,a0)-&)2)9)9&#N5I
	/++FMMO<D,F
/IJ		4-.
/	/	
 1 1 3R8)2)9)9&)2)9)9&#N5I
	/++FMMO<D,F
/IJ		4-.
/	/	
 1 1 3R8)-&)-&3
/
/	/	/
/
/	/	/
/
/	/	/sl!&I	"H<)I	&I#*"II#5&I<"I0=I<<I	I		II 	I##I-0I9	5I<<Jz.test is not compatible with ignore_environmentc|jtjtjtj
jjtj5tjtjd<|jtjdtjtjtj}|j|jdtj}|j|jtjtj!}|j|jtjdddy#1swYyxYw)N
SSLKEYLOGFILE)rrrrrqmockrLdictrenvironrr
rkr`rrrr+s  r!test_keylog_envzTestSSLDebug.test_keylog_envs
	
	(()*:*:;
]]
 
 
%
%bjj
1	D*3*:*:BJJ'RZZ8):J:JK..!8!89CS00$7,,.CS00)2B2BC,,.CS00)2B2BC	D	D	Ds
&DE==Fct\}}}d}|j|jd||_|j|j||jt5t|_dddy#1swYyxYw)NcyrrWr+rr8rrrs      r!rz.TestSSLDebug.test_msg_callback.<locals>.msg_cbrr#)rrrrrr)rrrrrs     r!test_msg_callbackzTestSSLDebug.test_msg_callbacksu3B3D0		


n22D9'-$

n22F;


y
)	4+18N(	4	4	4s&A??Bc~t\}}}tjj|_gfd}||_t
|d}|5|jtj|5}|jt|jfddddddjdtjtjtj fjdtjtj"tj"fy#1swYxYw#1swYxYw)Ncj|tjj|tj	|ddhj||||fy)NrKr)r@r
rrrru)r+rr8rrrrrs      r!rz4TestSSLDebug.test_msg_callback_tls12.<locals>.msg_cbsO!!$

6!!$.MM)fg%67JJ	7L(CDr#FrurrKr)rr
rrjrgrrrrrr	rrr	HANDSHAKEr
SERVER_KEY_EXCHANGECHANGE_CIPHER_SPEC)rrrrrrrrs`      @r!test_msg_callback_tls12z$TestSSLDebug.test_msg_callback_tls12s
3B3D0),)?)?&	E(.$#N5I
	/++FMMO<D,F
/IJ		4-.
/	/
	



Z'')B)B

0
0
2	

	



j((/*L*L

/
/
1	

/
/	/	/s$&D34"D'D3'D0	,D33D<ct\}}}tdd}fd}||_||_t|d}|5|j	tj
|5}|j
t|jfddd|j	tj
|5}|j
t|jfddddddy#1swYaxYw#1swYxYw#1swYyxYw)Nr6cyrrWrs      r!rz@TestSSLDebug.test_msg_callback_deadlock_bpo43577.<locals>.msg_cb(rr#c|_yrr)rrrTserver_context2s   r!sni_cbz@TestSSLDebug.test_msg_callback_deadlock_bpo43577.<locals>.sni_cb+s
*DLr#Frur)	rrsni_callbackrrrrr	r)	rrrrrrrrrs	        @r!#test_msg_callback_deadlock_bpo43577z0TestSSLDebug.test_msg_callback_deadlock_bpo43577$s3B3D0)+A.		+(.$&,##N5I
	/++FMMO<D,F
/IJ		4-.
/ ++FMMO<D,F
/IJ		4-.
/		/	/
/
/
/
/		/	/s<&D("C*
-D7"C6D*C3	/D6C?	;DDN)ryrrrrrrequires_keylogrqrrrrrflagsignore_environmentrrrrrWr#r!rrs!*!1!1 X__^%PQ$R$,X__^%PQ .R .DX__SYY11EGX__^%PQ
DRG
D
4
>/r#rc	|jtjtjt	j
dddy)Niir6r)
setsockoptr
SOL_SOCKET	SO_LINGERstructpack)rs r!)set_socket_so_linger_on_with_zero_timeoutr;s+OOF%%v'7'7T1a9PQr#cReZdZdZGddej
ZdZdZdZ	dZ
y)	TestPreHandshakeClosezQVerify behavior of close sockets with received data before to the handshake.
    c@eZdZddfd
ZdZdZfdZdZxZS)6TestPreHandshakeClose.SingleConnectionTestServerThreadN)rpc||_d|_d|_d|_d|_|t
j|_n||_t|%|y)Nr#r)
call_after_accept
received_data
wrap_errorrrrrrpsuperr)rr rrprxs    r!rz?TestPreHandshakeClose.SingleConnectionTestServerThread.__init__EsQ%6D"!$D"DO DMDI&44&G$'r#c&|j|Sr)r
rs r!r
z@TestPreHandshakeClose.SingleConnectionTestServerThread.__enter__QsJJLKr#c	|jr|jj|jd|_y#t$rY#wxYwr)rrr^rrrs  r!rz?TestPreHandshakeClose.SingleConnectionTestServerThread.__exit__UsD
==MM'')
IIK"DO

s&A	AAcHtjtjj|_tj
|j_|jjt|jjtttj|_tj|j|_|jj!|j"|jj%dt&|Qy)Nrrlr6)r
rrrssl_ctxrrrrrrrrrrrrnrprrr
)rrxs r!r
z<TestPreHandshakeClose.SingleConnectionTestServerThread.start^s55ckk6M6MNDL'*'8'8DLL$LL..h.?LL(((G(L"MMODM%//

>DIMM$$T\\2MM  #GMOr#c,	|jj\}}	|jj|5|j	|r
	dddy	|j
j
|d}	|jd|_dddy#t$rY|jjywxYw#|jjwxYw#t$rY\wxYw#t$r}||_
Yd}~ud}~wwxYw#1swYyxYw)NTr)rrrrrrrr_rr^r)rr+address
tls_socketr3s     r!rz:TestPreHandshakeClose.SingleConnectionTestServerThread.runis
& $

 4 4 6
g


##%
))$/

!%!9!9$D!9!QJ-7__S-A*


 


##%	


##%#*&)DOO*

spBD
C-7C	B<B?;B<<B??C	C*'D
)C**D
-	D6D=D
DD

D)	ryrrrr
rr
r
__classcell__)rxs@r! SingleConnectionTestServerThreadrCs?C
	(		#			r#rcftjdk(ryt|ts]t|tr|j
t
jk(s0tjdt|ddtjr)	|jdtjd|d}yy#d}wxYw)Nlinuxzwrong.version.numberrrRz!Could not recreate conditions on z: err=)rrrZrr^r
EINVALresearchr]Irr2s  r!"non_linux_skip_if_other_okay_errorz8TestPreHandshakeClose.non_linux_skip_if_other_okay_errors<<7"s01
W
%#))u||*CII,gc8R.H"$$O


 A#,,P'"%)*
Ps%B,,B0c"tjtjfd}|j|d}|j|t	j5}|j|jjt||jdj|jd|jdddj|j|j}d|_	|j!d|j"|j%|t&|j)||j%|t*j,|j/d|j0d|j/d|j2|j5d	|j0d	|j7|j8d
d}d}y#1swYxYw#d}d}wxYw)Nczjjtjst	dy)Nz+wrap_socket event never set, test may fail.F)rrrrRuntimeError)unusedready_for_server_wrap_socketserver_accept_calleds r!rzPTestPreHandshakeClose.test_preauth_data_to_tls_server.<locals>.call_after_accepts2 $$&/44W5J5JK"#PQQr#preauth_data_to_tls_serverrr FsDELETE /data HTTP/1.0

r#before TLS handshake with datar6rattr must existr)rrrrJrrrrrrrrcrrrrrrr@r^r
r
rrrsrr!rr)rrrrDrrrs     @@r!test_preauth_data_to_tls_serverz5TestPreHandshakeClose.test_preauth_data_to_tls_servers(0'0'8$	66"3173	
&!
]]_	NN6??66895f=u% %%'KK89LLN		%((*
&&
 	S&"6"67!!*g633J?!!*cll;MM:JOOA<NOMM:J<M<MN:??1#56j006GHJF7		4JFs)A7G;CH;HHc	
tj
tj		
fd}|j|d}|j|t	|j
t
j5}|j|j
j
j	jtjs|jdtj}	|j!|d}d}|j#d}|j%ddd|j)	|j+d|j-t&|j/||j-|tj0|j3d	|j4d
|j3d	|j6|j9d|j4d|j;|j<d
d}d}y#t&$r}|}d}Yd}~d}~wwxYw#1swYxYw#d}d}wxYw)Ncjtjstdt	||jd|j
jy)Nz ERROR: test client took too longsWHTTP/1.0 307 Temporary Redirect
Location: https://example.com/someone-elses-server

T)rrrrrrcrr)conn_to_client$client_can_continue_with_wrap_socket$server_can_continue_with_wrap_sockets r!rzPTestPreHandshakeClose.test_preauth_data_to_tls_client.<locals>.call_after_acceptsZ7<<W=R=RS89
6nE

  "0446r#preauth_data_to_tls_clientrztest server took too longr.rrr#rr6rrr)rrrrJrrrrrrrrrr-r
rrr_rr^rrr@r
rrrsrr!rr)rrrrDr
tls_clientrrr3rrs         @@r!test_preauth_data_to_tls_clientz5TestPreHandshakeClose.test_preauth_data_to_tls_clients/8/@,/8/@,	66"3173	
&!1&//B
]]_	#NN6??668904467<<W=R=RS		56002G	
#$001=
"
 * 4
  "!	#$	
	S-0!!*g633J?!!*cll;MM:JOOA<NOMM:J<M<MN:??1#56j006GHJF+
$ 
 #

$	#	#<JFsD>A>H<=H!#H<CI	!	H9*H4.H<4H99H<<I	Ic@tjGfddtjj}fd}d}|j|d|}|j
|t|j||jjd|jtj|}|jt5|jd	d
ddi
|j!}ddd|j#y#1swYxYw)NceZdZfdZy)eTestPreHandshakeClose.test_https_client_non_tls_response_ignored.<locals>.SynchronizedHTTPSConnectionc`tjjj|j	t
js/t
jrtjjd|jj|j|j|_
y)Nz"server_responding event never set.r)httprDHTTPConnectionrrrrrrrr_contextrrr)rserver_respondings r!rzmTestPreHandshakeClose.test_https_client_non_tls_response_ignored.<locals>.SynchronizedHTTPSConnection.connectst**2248)--g.C.CDJJ$$%IJ MM55		4996>	r#N)ryrrr)r%sr!SynchronizedHTTPSConnectionr s	
>r#r&c~t||jd|jjy)Ns!HTTP/1.0 402 Payment Required

T)rrcrr)rr%s r!rz[TestPreHandshakeClose.test_https_client_non_tls_response_ignored.<locals>.call_after_accept
s;5nE

  "!!#r#g@non_tls_http_RST_responder)rr rpr)rrrpHEADz/testHostr.)headers)rrr"rDHTTPSConnectionrrJrrrrr
rrr^rgetresponser)rr&rrpr
connectionresponser%s       @r!*test_https_client_non_tls_response_ignoredz@TestPreHandshakeClose.test_https_client_non_tls_response_ignoreds%OO-
	>$++*E*E
	>	66"317!	
&!1&//B0++-a0[[224	



w
'	0vw8MN!--/H	0	
		0	0s'DDN)ryrrrrrrr
rrr0rWr#r!rr?s0:9+;+;:x2*X8t2r#rcHeZdZdZdZdZdZdZdZdZ	dZ
d	Zd
Zy)TestEnumerationscjGddtj}tj|ty)NceZdZejZejZejZ	ejZejZ
ejZej Zy);TestEnumerations.test_tlsversion.<locals>.CheckedTLSVersionN)ryrrrPROTO_MINIMUM_SUPPORTEDrlPROTO_SSLv3rPROTO_TLSv1r
PROTO_TLSv1_1r
PROTO_TLSv1_2rj
PROTO_TLSv1_3rXPROTO_MAXIMUM_SUPPORTEDrmrWr#r!CheckedTLSVersionr56sQ $ < <$$E$$E((G((G((G $ < <r#r=)enumIntEnum_test_simple_enumr)rr=s  r!test_tlsversionz TestEnumerations.test_tlsversion5s%	=	=	
0*=r#cjGddtj}tj|ty)Nc(eZdZdZdZdZdZdZdZdZ	y)	DTestEnumerations.test_tlscontenttype.<locals>.Checked_TLSContentTypezPContent types (record layer)

            See RFC 8446, section B.1
            rSrr8N)
ryrrrrrrAPPLICATION_DATAHEADERINNER_CONTENT_TYPErWr#r!Checked_TLSContentTyperDAs*
"$EI!F!&r#rK)r>r?r@r)rrKs  r!test_tlscontenttypez$TestEnumerations.test_tlscontenttype@s%	'T\\	'	
5Gr#cjGddtj}tj|ty)NceZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%y$)%@TestEnumerations.test_tlsalerttype.<locals>.Checked_TLSAlertTypezaAlert types for TLSContentType.ALERT messages

            See RFC 8466, section B.2
            r
rSrrE()r#+,-./r123<FGPVZr]mnopqrstxN)&ryrrrCLOSE_NOTIFYUNEXPECTED_MESSAGEBAD_RECORD_MACDECRYPTION_FAILEDRECORD_OVERFLOWDECOMPRESSION_FAILUREHANDSHAKE_FAILURENO_CERTIFICATEBAD_CERTIFICATEUNSUPPORTED_CERTIFICATECERTIFICATE_REVOKEDCERTIFICATE_EXPIREDCERTIFICATE_UNKNOWNILLEGAL_PARAMETER
UNKNOWN_CA
ACCESS_DENIEDDECODE_ERROR
DECRYPT_ERROREXPORT_RESTRICTIONPROTOCOL_VERSIONINSUFFICIENT_SECURITYINTERNAL_ERRORINAPPROPRIATE_FALLBACK
USER_CANCELEDNO_RENEGOTIATIONMISSING_EXTENSIONUNSUPPORTED_EXTENSIONCERTIFICATE_UNOBTAINABLEUNRECOGNIZED_NAMEBAD_CERTIFICATE_STATUS_RESPONSEBAD_CERTIFICATE_HASH_VALUEUNKNOWN_PSK_IDENTITYCERTIFICATE_REQUIREDNO_APPLICATION_PROTOCOLrWr#r!Checked_TLSAlertTyperOPs
L!#N " O$&! "N O&(#"$"$"$ "JMLM!#!$&!N%'"M" #$'!'*$ #.1+),&#& #& &)#r#r)r>r?r@r)rrs  r!test_tlsalerttypez"TestEnumerations.test_tlsalerttypeOs&&	*4<<&	*N	
3]Cr#cjGddtj}tj|ty)NcheZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdZdZdZdZdZdZdZdZdZy)DTestEnumerations.test_tlsmessagetype.<locals>.Checked_TLSMessageTypezVMessage types (handshake protocol)

            See RFC 8446, section B.3
            rr6rrr7rrrrr 
r:rrSrrErFCrGN)ryrrr
HELLO_REQUESTCLIENT_HELLOSERVER_HELLOHELLO_VERIFY_REQUESTNEWSESSION_TICKETEND_OF_EARLY_DATAHELLO_RETRY_REQUESTENCRYPTED_EXTENSIONSCERTIFICATErCERTIFICATE_REQUESTSERVER_DONECERTIFICATE_VERIFYCLIENT_KEY_EXCHANGEFINISHEDCERTIFICATE_URLCERTIFICATE_STATUSSUPPLEMENTAL_DATA
KEY_UPDATE
NEXT_PROTOMESSAGE_HASHrrWr#r!Checked_TLSMessageTyperzs
MLL#$  ! !"##$ K"$"$K!#"$H O!# "JJL!'r#r)r>r?r@r
)rrs  r!test_tlsmessagetypez$TestEnumerations.test_tlsmessagetypeys%	(T\\	(6	
5Gr#ctjtjdddtj}|j
|_tj|tjy)N
_SSLMethodr
c2|jdxr|dk7S)NrYrr\rs r!rz1TestEnumerations.test_sslmethod.<locals>.<lambda>sT__[9WdFW>Wr#source)	r>
_old_convert_r?r
rr^rr@r)rChecked_SSLMethods  r!test_sslmethodzTestEnumerations.test_sslmethodsN ..lEWxx->,J,J)0#..Ar#ctjtjdddtj}tj
|tjy)NOptionsr
c$|jdS)Nrrrs r!rz/TestEnumerations.test_options.<locals>.<lambda>sT__U3r#r)r>rIntFlagr
rr@r)rCheckedOptionss  r!rzTestEnumerations.test_optionss=++i3xx
	
~s{{;r#ctjtjdddtj}tj
|tjy)NAlertDescriptionr
c$|jdS)NALERT_DESCRIPTION_rrs r!rz8TestEnumerations.test_alertdescription.<locals>.<lambda>sT__-ABr#r)r>rr?r
rr@r)rCheckedAlertDescriptions  r!test_alertdescriptionz&TestEnumerations.test_alertdescriptionsB"&"4"40%Bxx#
	
68L8LMr#ctjtjdddtj}tj
|tjy)NSSLErrorNumberr
c$|jdS)N
SSL_ERROR_rrs r!rz6TestEnumerations.test_sslerrornumber.<locals>.<lambda>sT__\:r#r)r>rr?r
rr@r)rChecked_SSLErrorNumbers  r!test_sslerrornumberz$TestEnumerations.test_sslerrornumbersB!%!3!3.:xx"
	
5s7I7IJr#ctjtjdddtj}tj
|tjy)NVerifyFlagsr
c$|jdS)NVERIFY_rrs r!rz3TestEnumerations.test_verifyflags.<locals>.<lambda>sT__Y7r#r)r>rrr
rr@r)rCheckedVerifyFlagss  r!test_verifyflagsz!TestEnumerations.test_verifyflagss?!//mU7xx
	
13??Cr#ctjtjdddtj}tj
|tjy)N
VerifyModer
c$|jdS)NCERT_rrs r!rz2TestEnumerations.test_verifymode.<locals>.<lambda>sT__W5r#r)r>rr?r
rr@r)rCheckedVerifyModes  r!test_verifymodez TestEnumerations.test_verifymodes? ..lE5xx
	
0#..Ar#N)
ryrrrArLrrrrrrrrrWr#r!r2r23s=	>
H(DTH<B<NKDBr#r2ctjrtjtjd}|jD]\}}|}|s|ds|d|}nt
tj}tdtjdtjtd|ztdtjztdtjz	tdtjztt t"t$t&t(t*t,t.t0t2t4fD]9}t6j8j;|r#tj<d	|zt?j@}tCjDt>jFg|y#t$rYwxYw)
N)MacWindowsrr|ztest_ssl: testing with z          under %sz          HAS_SNI = %rz          OP_ALL = 0x%8xz          OP_NO_TLSv1_1 = 0x%8xzCan't read certificate file %r)$rrrmac_ver	win32_veritemsrrr
r?r>rrJrrUrrrrrrrrrrBADKEYrrrexists
TestFailedrthreading_setuprqaddModuleCleanupthreading_cleanup)platsr ruplatfilenamethread_infos      r!setUpModulersq##))
 ++-	-JD$6DQ"&-		-))+,D


 
 #":":<	=
"T)*
&45
(3::56	3c6G6GGH
	.'>=):	$R
ww~~h'$$%E%PQQ
R#224K.@@O;O		s3G	G
G__main__r)rTFNN)Nrr)rrq
unittest.mockrrtest.supportrrrrrr	rrrXrrr>rhttp.clientr"rr
rurllib.requestrrr}rTr	sysconfigrwrImportError
import_moduler
rrrr
rr
rrE_PROTOCOL_NAMESr$r	r>riget_config_varrrdrverr]rUr"rfsencoderrrrrrrrrrrrr)rr{rrrrrrrrr%rrrrrrrrrrr	rrrBrCrDrErFrNrUrd	lru_cacherarzrrignore_warningsrur
rrrTestCaserr!rr$r:rHrrrqrtest.ssl_serversrrrr"rarorqrrrQrk
HAS_KEYLOGrrrrr2rrymainrWr#r!<module>rs&"&)(!	


		

"m!!%(KK!!=cllg&=3&&'	++y81112JK
)JE3
U#cnnc*&)E"
):]#X&^$
M
"X&G$
3423	8	r{{6"Hl3(L1
/++&-.
"$
%N+&
;FT0++&-.$^,* 01.x
.

}
%

&k"	*n%	
M
"01	<	 k"	+, 56	>	"r{{6"C!4a83 2A6S"6:%c+H!L$S*FJ
;3
4*!!H".5_44
 #}}t!D$/,!0442J	1x((J	1ZO 8$$O d3DH%%3Dl<3X&&<3~.X&&.`k<H--k<\9%LX&&L&L4	ZN/X))Xtt))tl?GEI#.bIJKG\SNH%%SNl._Y/1EFP1H--P1GP1fS^^%6
7
%(%%BDT/8$$T/nRqH--qhTBx((TBn PFzHMMOY^
F2s$R;
S	;SS	SS