
    Eg                       U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZmZmZmZmZmZmZ d dlZd dlmZ d dlmZ d d	lmZmZ d d
lm Z m!Z! 	 d dl"Z"d dl#m$Z$ n# e%$ rZ& ee&           Y dZ&[&ndZ&[&ww xY wd dlZddl'm(Z(mZ) ddl*m+Z+ ddl(m,Z,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8m9Z9m:Z:m;Z; ddl<m=Z= ddl>m?Z?m@Z@mAZAmBZBmCZC erd dlDmEZE d dlFmGZG d dlHmIZI ddlJmKZK  e"jL                    ZMeMN                    d          ZO ejP        ejQ        jR                  ZS eTed          reSxjU        ejV         z  c_U        eOW                    eS            ejX        dddg           dtd%            ZYd&d'dud-ZZe	dvd1            Z[e	dwd5            Z\ G d6 d7e+          Z]dxd8Z^e
dyd:            Z_ddd;dzdCZ`ee!e f         ZadDebdE<   d{dGZceeef         ZddDebdH<   d|dJZed}dKZfd}dLZgd}dMZhd}dNZid}dOZje/d~dR            Zkd}dSZldxdTZmejn        o                    ejp        dUk    o
ejq        dVk    dWX          d}dY            Zrd}dZZsejn        t                    d[d&d\g          dd]            Zud}d^Zvd}d_Zwd}d`Zxd}daZyd}dbZzd}dcZ{dxddZ|d}deZ}d}dfZ~d}dgZd}dhZd}diZd}djZd}dkZd}dlZejn                            dmdn          d}do            Zd}dpZd}dqZd}drZd}dsZdS )    )annotationsN)asynccontextmanagercontextmanagersuppress)partial)
SSLContext)TYPE_CHECKINGAnyAsyncIterator	AwaitableCallableIteratorNoReturn)StapledStream)skip_if_optional_else_raise)ReceiveStream
SendStream)MemoryReceiveStreamMemorySendStream)SSL   )_coresocket)Stream)BrokenResourceErrorClosedResourceError)slow)aclose_forcefully)open_tcp_stream)SocketListenerSocketStream)NeedHandshakeErrorSSLListener	SSLStream_is_eof)ConflictDetector)	Sequencerassert_checkpointscheck_two_way_streamlockstep_stream_pairmemory_stream_pair)	TypeAlias)	MockClock)T_Stream)CancelScopetrio-test-1.example.orgOP_IGNORE_UNEXPECTED_EOFmoduletls13tls12)scopeparamsrequestpytest.FixtureRequestreturnssl.SSLContextc                4   t          j                    }t          t           d          r|xj        t           j         z  c_        t
                              |           | j        dv r|S | j        dk    rt           j        j	        |_
        |S t                      )Nr1   )defaultr3   r4   )sslcreate_default_contexthasattroptionsr1   TRIO_TEST_CAconfigure_trustparam
TLSVersionTLSv1_2maximum_versionAssertionError)r7   ctxs     I/var/www/sysmax/venv/lib/python3.11/site-packages/trio/_tests/test_ssl.py
client_ctxrJ   _   s    

$
&
&Cs.// 5444  %%%},,,
	'	!	!!n4
    Fexpect_failsockstdlib_socket.socketrM   boolNonec                   	 t                               | dd          }|5  |                                 	 |                    d          }|smt	          t
          t          j                  5  |                                 d d d            n# 1 swxY w Y   	 d d d            | 	                                 d S |
                    |           # 1 swxY w Y   	 |rt          d          nb# t          t          f$ r Y | 	                                 d S t          $ r.}|rt          d|           nt          d|            Y d }~nd }~ww xY w| 	                                 d S # | 	                                 w xY w)NTF)server_sidesuppress_ragged_eofsi   zfailed to fail?z*ssl_echo_serve_sync got error as expected:z)ssl_echo_serve_sync got unexpected error:)
SERVER_CTXwrap_socketdo_handshakerecvr   BrokenPipeErrorr=   SSLZeroReturnErrorunwrapclosesendallRuntimeErrorConnectionResetErrorConnectionAbortedError	Exceptionprint)rN   rM   wrappeddataexcs        rI   ssl_echo_serve_syncrf   q   s6   *((d ) 
 
  	& 	&  """	&||D))  "/33IJJ ) )((() ) ) ) ) ) ) ) ) ) ) ) ) ) )	& 	& 	& 	& 	& 	&L 	

7 %%%	&	& 	& 	& 	& 	& 	& 	& 	& 	&F  	20111	2 !"89    	

     	>DDDD=sCCC EDDDD 	



s   C/ AC-BCB	CB	CC/ ;CCC/ CC/ E' /E E' 	E $E	E' 	EE' 'E=kwargsr
   AsyncIterator[SocketStream]c                  K   t          j                    \  }}t          j                    4 d {V }|5  |5  |                    t          j        j        t          t          |fi |            t          t          j        |                    W V  d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d           d {V  d S # 1 d {V swxY w Y   d S N)stdlib_socket
socketpairtrioopen_nursery
start_soon	to_threadrun_syncr   rf   r!   tsocketfrom_stdlib_socket)rg   abnurserys       rI   ssl_echo_server_rawrw      s     #%%DAq "" 	> 	> 	> 	> 	> 	> 	>g  	> 	> 	> 	>'1Da)R)R6)R)R   w9!<<======	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>		> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>sX   CB6ABB6B##B6&B#'B6*C6B:	:C=B:	>C
C!CrJ   r    AsyncIterator[SSLStream[Stream]]c                  K   t          di |4 d {V }t          || d          W V  d d d           d {V  d S # 1 d {V swxY w Y   d S Nr0   server_hostname )rw   r$   )rJ   rg   rN   s      rI   ssl_echo_serverr~      s      #,,V,, U U U U U U Uj:STTTTTTTU U U U U U U U U U U U U U U U U U U U U U U U U U U U U Us   >
AAc                  J    e Zd ZdddZddZddZdd	Zdd
ZddZdddZ	dS )PyOpenSSLEchoStreamNsleeperrQ   r9   c                d   t          j        t           j                  }ddlm}  |            }t          |j        d          r|                    |j        j                   t          t           d          rJ t          
                    |           t          j        |d           | _        | j                                         t          j                    | _        t#                      | _        t'          d          | _        t'          d          | _        |dd}|| _        d S || _        d S )Nr   )BindingSSL_OP_NO_TLSv1_3OP_NO_TLSv1_4z2simultaneous calls to PyOpenSSLEchoStream.send_allz6simultaneous calls to PyOpenSSLEchoStream.receive_some_objectr9   rQ   c                
   K   d S rj   r}   )r   s    rI   no_op_sleeperz3PyOpenSSLEchoStream.__init__.<locals>.no_op_sleeper   s      rK   r   r   r9   rQ   )r   ContextSSLv23_METHOD,cryptography.hazmat.bindings.openssl.bindingr   r?   libset_optionsr   TRIO_TEST_1_CERTconfigure_cert
Connection_connset_accept_stater   
ParkingLot_lot	bytearray_pending_cleartextr&   _send_all_conflict_detector_receive_some_conflict_detectorr   )selfr   rH   r   ru   r   s         rI   __init__zPyOpenSSLEchoStream.__init__   s/   k#+,,* 	IHHHHHGII15-.. 	5OOAE3444 300000'',,,^C..

##%%%$&&	"++++;@,
 ,
( 0@D0
 0
, ?    )DLLL"DLLLrK   c                <   K   | j                                          d S rj   )r   bio_shutdownr   s    rI   aclosezPyOpenSSLEchoStream.aclose   s       
!!!!!rK   rP   c                4    | j                                         S rj   )r   renegotiate_pendingr   s    rI   r   z'PyOpenSSLEchoStream.renegotiate_pending   s    z--///rK   c                <    | j                                         sJ d S rj   )r   renegotiater   s    rI   r   zPyOpenSSLEchoStream.renegotiate  s$     z%%'''''''rK   c                   K   | j         5  t          j                     d {V  t          j                     d {V  |                     d           d {V  d d d            d S # 1 swxY w Y   d S )Nwait_send_all_might_not_block)r   r   
checkpointr   r   s    rI   r   z1PyOpenSSLEchoStream.wait_send_all_might_not_block  s      - 	@ 	@"$$$$$$$$$"$$$$$$$$$,,>?????????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   AA%%A),A)rd   bytesc                  K   t          d           | j        5  t          j                     d {V  t          j                     d {V  |                     d           d {V  | j                            |           	 |                     d           d {V  	 | j                            d          }| xj        |z  c_        ne# t          j
        $ rC | j                                         t          d| j                                                   Y nt          j        $ r Y nw xY w| j                                         |                     d           d {V  t          d           d d d            d S # 1 swxY w Y   d S )Nz  --> transport_stream.send_allsend_allT   zrenegotiations:z(  <-- transport_stream.send_all finished)rb   r   r   r   r   r   	bio_writerX   r   r   ZeroReturnErrorshutdowntotal_renegotiationsWantReadErrorr   
unpark_allr   rd   s     rI   r   zPyOpenSSLEchoStream.send_all  s     /000- 	> 	>"$$$$$$$$$"$$$$$$$$$,,z*********J  &&&4ll:.........	4:??1--D ++t3+++ *   J'')))+TZ-L-L-N-NOOOE(   E4 I  """,,z*********<==='	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>sD   BE?C	8E?	AD+E?D+(E?*D++AE??FFnbytes
int | Nonec                  K   t          d           |d}| j        5  	 t          j                     d {V  t          j                     d {V  	 |                     d           d {V  	 | j                            |          |                     d           d {V  t          d           cd d d            S # t          j        $ r= | j	        rt          d| j	                   	 | j	        dd         }| j        
                    t          |                     | j	        dd= n# t          j        $ r 	 | j                            |          cY cY |                     d           d {V  t          d           cd d d            S # t          j        $ r1 t          d	           | j                                         d {V  Y nw xY wY n2w xY wt          d
           | j                                         d {V  Y nw xY w# |                     d           d {V  t          d           w xY w# 1 swxY w Y   d S )Nz#  --> transport_stream.receive_somei   Treceive_somez,  <-- transport_stream.receive_some finishedz
    tryingr   r   zparking (a)zparking (b))rb   r   r   r   r   r   bio_readr   r   r   sendr   r   park)r   r   	next_bytes      rI   r   z PyOpenSSLEchoStream.receive_some$  sr     3444>F1 1	F 1	F0F&(((((((((&(((((((((*3,,~666666666(3#z226::R ll>222222222DEEEc1	F 1	F 1	F 1	F 1	F 1	F 1	F 1	F , &3 &3 &3  2 #3 ",0GHHHA -1,CAaC,H	 $
i0@0@ A A A, %)$;AaC$@$@% $'#4 ; ; ;!;+/:+>+>v+F+F$F$F$F$F" ll>222222222DEEEc1	F 1	F 1	F 1	F 1	F 1	F 1	F 1	F@ (+'8 !; !; !; %*-$8$8$8*.)..*:*:$:$:$:$:$:$:$:$:$:!;
 %;$:;, "-000"&).."2"22222222M&3	*3X ll>222222222DEEEEc1	F 1	F 1	F 1	F 1	F 1	F 1	F 1	F 1	F 1	Fs   H?AH.B>*H?>-H,6D-"H-G=FGHH*H?=G	GG	GHG1HH
HH,H<<H??IIrj   )r   rQ   r9   rQ   r9   rQ   )r9   rP   )rd   r   r9   rQ   )r   r   r9   r   )
__name__
__module____qualname__r   r   r   r   r   r   r   r}   rK   rI   r   r      s        7# 7# 7# 7# 7#r" " " "0 0 0 0( ( ( (
@ @ @ @> > > >.5F 5F 5F 5F 5F 5F 5FrK   r   c                    K   dd	}  | d
dd
d           d {V   | d
ddd           d {V   | dddd           d {V   | dddd           d {V  d S )Nfunc1strargs1tuple[object, ...]func2args2r9   rQ   c                  K   t                      }t          j        t          j        d          5  t          j                    4 d {V } |j        t          ||           g|R    |j        t          ||          g|R   d d d           d {V  n# 1 d {V swxY w Y   d d d            d S # 1 swxY w Y   d S )Nsimultaneousmatch)r   pytestraisesr   BusyResourceErrorrn   ro   getattr)r   r   r   r   srv   s         rI   do_testzDtest_PyOpenSSLEchoStream_gives_resource_busy_errors.<locals>.do_testc  s       !!]#>
 
 
 	> 	> )++ > > > > > > >w""71e#4#4=u====""71e#4#4=u====> > > > > > > > > > > > > > > > > > > > > > > > > > >	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s5   B49BB4
B 	 B4#B 	$B44B8;B8r   )   xr   r}   r   )r   )
r   r   r   r   r   r   r   r   r9   rQ   r}   )r   s    rI   3test_PyOpenSSLEchoStream_gives_resource_busy_errorsr   \  s      	> 	> 	> 	> '*gz7
;
;;;;;;;;
'*g'F
K
KKKKKKKK
''-Lb         '.$
=
==========rK   (Iterator[SSLStream[PyOpenSSLEchoStream]]c              +  J   K   t          di |}t          || d          V  d S rz   )r   r$   )rJ   rg   fakesocks      rI   virtual_ssl_echo_serverr   v  s=       #,,V,,H
Hj:S
T
T
TTTTTTrK   client_kwargsserver_kwargsclient_transportr.   server_transportr   dict[str, Any] | Noner   /tuple[SSLStream[T_Stream], SSLStream[T_Stream]]c               d    |i }|i }t          || fddi|}t          |t          fddi|}||fS )Nr|   r0   rS   T)r$   rU   )rJ   r   r   r   r   
client_ssl
server_ssls          rI   ssl_wrap_pairr   ~  s       2 	 J * 26:G J z!!rK   r,   MemoryStapledStreamEtuple[SSLStream[MemoryStapledStream], SSLStream[MemoryStapledStream]]c                B    t                      \  }}t          | ||fi |S rj   )r+   r   rJ   rg   r   r   s       rI   ssl_memory_stream_pairr     s2     *<)=)=&&%57GRR6RRRrK   MyStapledStream=tuple[SSLStream[MyStapledStream], SSLStream[MyStapledStream]]c                B    t                      \  }}t          | ||fi |S rj   )r*   r   r   s       rI   ssl_lockstep_stream_pairr     s2     *>)?)?&&%57GRR6RRRrK   c                  K   t          |           4 d {V }|j        rJ |                    d           d {V  |                    d           d {V dk    sJ |                                 d {V  d d d           d {V  n# 1 d {V swxY w Y   t          d          4 d {V }t          j                    }t          ||d          }|j        rJ t          j
        t                    5 }|                    d           d {V  d d d            n# 1 swxY w Y   t          |j        j        t          j                  sJ 	 d d d           d {V  n# 1 d {V swxY w Y   t          d          4 d {V }t          || d          }|j        rJ t          j
        t                    5 }|                    d           d {V  d d d            n# 1 swxY w Y   t          |j        j        t          j                  sJ 	 d d d           d {V  d S # 1 d {V swxY w Y   d S )Nr   r   TrL   r0   r{   ztrio-test-2.example.org)r~   rS   r   r   r   rw   r=   r>   r$   r   r   r   
isinstancevalue	__cause__SSLErrorCertificateError)rJ   r   rN   bad_client_ctxexcinfos        rI   test_ssl_client_basicsr     s     z**       a=   jj^^A&&&&&&&&$....hhjj	                           #t444 A A A A A A A355dN<UVVV=   ].// 	#7**T"""""""""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#'-13<@@@@@@A A A A A A A A A A A A A A A A A A A A A A A A A A A #t444 I I I I I I IdJ8QRRR=   ].// 	#7**T"""""""""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#'-133GHHHHHHI I I I I I I I I I I I I I I I I I I I I I I I I I I I I Is   A B


BB1AE%9D!E%!D%	%E%(D%	))E%%
E/2E/5H.G)H.)G-	-H.0G-	1)H..
H8;H8c                   K   t          j                    \  }5  |5  t          j        |          }t	          t          |          t          d          }|j        sJ d fd}t          j	        |          }|
                                 |                    d           d {V dk    sJ |                    d	           d {V  |                    d           d {V d
k    sJ |                    d           d {V dk    sJ |                                 d {V  |                                 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NTrS   r9   rQ   c                                         d          5 } |                     d           |                     d          dk    sJ |                     d           |                                  d d d            d S # 1 swxY w Y   d S )Nr0   r{   r   r      y   z)rV   r]   rX   r[   )client_sockrt   rJ   s    rI   clientz&test_ssl_server_basics.<locals>.client  s    ''#< (   %##D)))"''**d2222##D)))""$$$% % % % % % % % % % % % % % % % % %s   AB  BB)targetr   r   r   r   rK   r   )rk   rl   rr   rs   r$   r!   rU   rS   	threadingThreadstartr   r   r   join)rJ   ru   server_sockr   r   trt   s   `     @rI   test_ssl_server_basicsr    sR     #%%DAq	
  A  033$%%zt
 
 
  ++++	% 	% 	% 	% 	% 	% 	% F+++				%22155555555====''---------%22155555555====%22155555555<<<<%%'''''''''	3                                s5   E"DE
>E"
E	E"E	E""E&)E&c                  K   t          d          4 d {V }| }t          j                    }t          ||d          }|j        |u sJ |j        |u sJ |j        dk    sJ |j        dk    sJ t          j	        t                    5  |j         d d d            n# 1 swxY w Y   dt          |          v sJ dt          |          v sJ t          j	        t                    5  d|_        d d d            n# 1 swxY w Y   t          j	        t                    5  d|_        d d d            n# 1 swxY w Y   ||_        |j        |u sJ t          j	        t                    5 }|                                 d {V  d d d            n# 1 swxY w Y   t          |j        j        t          j                  sJ 	 d d d           d {V  d S # 1 d {V swxY w Y   d S )	NTrL   r0   r{   Ftransport_streamcontextasdf)rw   r=   r>   r$   r  r  rS   r|   r   r   AttributeError
asfdasdfsadirr   rW   r   r   r   r   )rJ   rN   good_ctxbad_ctxr   r   s         rI   test_attributesr    s     "t444 !A !A !A !A !A !A !A,..dH6OPPP!T)))) yH$$$$}%%%% $=====]>** 	 	LL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 "SVV++++CFF""""
 ]>** 	! 	! AM	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!]>** 	' 	' &A	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	yG####].// 	#7.."""""""""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#'-13<@@@@@@C!A !A !A !A !A !A !A !A !A !A !A !A !A !A !A !A !A !A !A !A !A !A !A !A !A !A !A !A !A !As   A1G
BGB"	"G%B"	&AG(C<0G<D 	 GD 	G D4(G4D8	8G;D8	<.G*FGF	GF	)G
G #G c                  	K   ddz  t                      	t                      d		fd}d	fd}t          |           4 d {V }t          j                    4 d {V }|                    ||           |                    ||           |                    |j                   |                    |j                   d d d           d {V  n# 1 d {V swxY w Y   |                                 d {V  d d d           d {V  n# 1 d {V swxY w Y   t          	          t                    cxk    rk    sn J 	k    sJ d S )
N   i   r   r   r9   rQ   c                   K   t                    D ]D}t          |           t          |gz            }|z  |                     |           d {V  Ed S rj   )rangerb   r   r   )r   ichunkCHUNKS
CHUNK_SIZEsents      rI   senderz'test_full_duplex_basics.<locals>.sender2  su      v 	$ 	$A!HHH1#
*++EEMD**U##########		$ 	$rK   c                   K   t                    k     r8|                     dz             d {V }|z  t                    k     6d S d S )Nr   )lenr   )r   r  r  EXPECTEDreceiveds     rI   receiverz)test_full_duplex_basics.<locals>.receiver:  sh      (mmh&&..q99999999EH (mmh&&&&&&rK   )r   r   r9   rQ   )r   r~   r   rn   ro   rW   r   r  )
rJ   r  r  r   rv   r  r  r  r  r  s
        @@@@@rI   test_full_duplex_basicsr  *  s     FJ
"H;;D{{H$ $ $ $ $ $ $ $        z** 	 	 	 	 	 	 	a%'' 	/ 	/ 	/ 	/ 	/ 	/ 	/7vq)))x+++ q~...q~...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ hhjj	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 t99H11111111118s7   D,A!CD
C)	)D,C)	-D
D&)D&c                  K   t          |           5 }|                                 d {V  |j                                         |                    d           d {V  |                    d           d {V dk    sJ |                    d           d {V  |                    d           d {V dk    sJ |                                 d {V  d d d            d S # 1 swxY w Y   d S )N   ar      b)r   rW   r  r   r   r   r   rJ   r   s     rI   test_renegotiation_simpler   O  st     	 	,	, nn	&&(((jj^^A&&&&&&&&$.... jj^^A&&&&&&&&$....hhjj                 s   CC%%C),C)
mock_clockr-   c                	  K   d| _         dd l}|                    d          dfd}dfd}dfd
dfdt          ||          5                                  d {V   d           d {V  j                                          d           d {V   |             d {V  t          d          D ]'}t          |dz  g          }t          d|z  dz  g          }j                                         t          j
                    4 d {V }|                    |           |                    |           d d d           d {V  n# 1 d {V swxY w Y   t          j
                    4 d {V }|                    |           |                    |           d d d           d {V  n# 1 d {V swxY w Y    |             d {V  )t          d          D ]}t          |dz  g          }t          d|z  dz  g          } |           d {V  j                                          |           d {V  t          j
                    4 d {V }|                    |           |                    |           d d d           d {V  n# 1 d {V swxY w Y    |             d {V  	 d d d            n# 1 swxY w Y   dd}	dfd}
t          ||	          5  d           d {V  j                                         t          j
                    4 d {V }|                    d           |                    |
           d d d           d {V  n# 1 d {V swxY w Y    |             d {V                                   d {V  d d d            n# 1 swxY w Y   dd}t          ||          5  d           d {V  j                                         t          j
                    4 d {V }|                    d           |                    j                   d d d           d {V  n# 1 d {V swxY w Y    |             d {V                                   d {V  d d d            d S # 1 swxY w Y   d S )Nr   r   r   r9   rQ   c                h   K   t          j                            dd                     d {V  d S )Nr   
   )rm   sleepuniform)r   rs    rI   r   z.test_renegotiation_randomized.<locals>.sleeperl  s=      j1b))***********rK   c                 j  K   j                                         rt                      5   d           d {V  d d d            n# 1 swxY w Y   t                      5    d           d {V  d d d            n# 1 swxY w Y   j                                         t          d           d S )N   -z-- clear --)r  r   r(   rb   )expectr   r   s   rI   clearz,test_renegotiation_randomized.<locals>.clearo  sO      4466 	##%% ! !d4jj       ! ! ! ! ! ! ! ! ! ! ! ! ! ! !#%% # #fTll"""""""# # # # # # # # # # # # # # #  4466 	#
 	ms#   A		AA"B  BBbyter   c                   K   j                             d           d {V  t          d|            t                      5                      |            d {V  d d d            d S # 1 swxY w Y   d S )Nz
outer sendzcalling SSLStream.send_all)r  r   rb   r(   r   )r,  r   s    rI   r   z+test_renegotiation_randomized.<locals>.sendw  s       ((666666666*D111!! 	# 	#**T"""""""""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s   A++A/2A/expectedc                (  K   j                             d           d {V  t          d|            t          |           dk    sJ t	                      5                      d           d {V | k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr*  z)calling SSLStream.receive_some, expectingr   )r  r   rb   r  r(   r   )r.  r   s    rI   r*  z-test_renegotiation_randomized.<locals>.expect}  s       ((22222222298DDD8}}!!!!!! 	7 	7********h66666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   "BBB)r   r  d      r   methodr   c                N   K   | dk    rt          j        d           d {V  d S d S )Nr   順 rm   r%  r2  s    rI   sleeper_with_slow_send_allzAtest_renegotiation_randomized.<locals>.sleeper_with_slow_send_all  sA      Z*V$$$$$$$$$$$  rK   c                 t   K   t          j        d           d {V                                    d {V  d S )N  )rm   r%  r   r   s   rI   sleep_then_wait_writablez?test_renegotiation_randomized.<locals>.sleep_then_wait_writable  sS      j--///////////rK   r   c                   K   | dk    rt          j        d           d {V  d S | dk    rt          j        d           d {V  d S d S )Nr   r4  r*  r9  r5  r6  s    rI   *sleeper_with_slow_wait_writable_and_expectzQtest_renegotiation_randomized.<locals>.sleeper_with_slow_wait_writable_and_expect  su      444*V$$$$$$$$$$$x*T"""""""""""  rK   r   r   )r,  r   r9   rQ   )r.  r   r9   rQ   )r2  r   r9   rQ   )autojump_thresholdrandomRandomr   rW   r  r   r  r   r   rn   ro   r   r   )r!  rJ   r?  r   r+  r  b1b2rv   r7  r;  r=  r*  r'  r   r   s               @@@@rI   test_renegotiation_randomizedrC  `  su	      %&J!MMMaA+ + + + + +       # # # # # #7 7 7 7 7 7 
!W	=	=	= nnd4jj	&&(((fTlleggs 
	 
	ADz""BQ$'((B**,,,)++ / / / / / / /w""4,,,""62.../ / / / / / / / / / / / / / / / / / / / / / / / / / / )++ - - - - - - -w""62...""4,,,- - - - - - - - - - - - - - - - - - - - - - - - - - - %''MMMMMMMMs 		 		ADz""BQ$'((B$r((NNNNNNN**,,,&**)++ - - - - - - -w""62...""4,,,- - - - - - - - - - - - - - - - - - - - - - - - - - - %''MMMMMMMM		+              N% % % %0 0 0 0 0 0 
!5O	P	P	P 	TUd4jj	&&(((%'' 	9 	9 	9 	9 	9 	9 	97vt,,,7888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 egghhjj	 	 	 	 	 	 	 	 	 	 	 	 	 	 	# # # # 
!F
 
 
 	
d4jj	&&(((%'' 	@ 	@ 	@ 	@ 	@ 	@ 	@7vt,,,q>???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ egghhjj                 s   CK,%-E$K,$
E..K,1E.2K,-G;K,
GK,GB#K,>-J=+K,=
KK,
KK,,K03K0AO,NO
N	O!N	"-OO"O;AS
?1R0S

R	S
R	-S

SSc                D   K   t           j        t           j        t           j        j        t           j        j        f                  }dd}dd}dd}d fd} |||           d {V   |||           d {V   |||           d {V   |||           d {V  d S )Nr   Sr9   rQ   c                   K   t                      5  |                     d           d {V  d d d            d S # 1 swxY w Y   d S )Nr   )r(   r   r:  s    rI   do_send_allz.test_resource_busy_errors.<locals>.do_send_all  s      !! 	# 	#**T"""""""""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#   :>>c                   K   t                      5  |                     d           d {V  d d d            d S # 1 swxY w Y   d S Nr   )r(   r   r:  s    rI   do_receive_somez2test_resource_busy_errors.<locals>.do_receive_some  s      !! 	$ 	$..#########	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$rH  c                   K   t                      5  |                                  d {V  d d d            d S # 1 swxY w Y   d S rj   )r(   r   r:  s    rI    do_wait_send_all_might_not_blockzCtest_resource_busy_errors.<locals>.do_wait_send_all_might_not_block  s      !! 	4 	411333333333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   9= =r   Callable[[S], Awaitable[None]]r   c                t  K   t                    \  }}t          j        t          j        d          5  t          j                    4 d {V }|                    | |           |                    ||           d d d           d {V  n# 1 d {V swxY w Y   d d d            d S # 1 swxY w Y   d S )Nzanother taskr   )r   r   r   r   r   rn   ro   )r   r   r   r   rv   rJ   s        rI   r   z*test_resource_busy_errors.<locals>.do_test  s      (
331]#>
 
 
 	- 	- )++ - - - - - - -w""5!,,,""5!,,,- - - - - - - - - - - - - - - - - - - - - - - - - - -	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s5   B--B=B-
B	B-B	B--B14B1)r   rE  r9   rQ   )r   rN  r   rN  r9   rQ   )rm   r$   r   abcr   r   )rJ   rE  rG  rK  rM  r   s   `     rI   test_resource_busy_errorsrQ    s"     >48.0FFGA# # # #$ $ $ $4 4 4 4	- 	- 	- 	- 	- 	- '+{
+
++++++++
'/?
3
33333333
'+?
@
@@@@@@@@
'24T
U
UUUUUUUUUUrK   c                    K   g  G fddt                     } t          j                    }t           |             |d          }|                                 d {V  dgk    sJ d S )Nc                  6    e Zd Zd fdZddZddd	ZddZdS )Etest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStreamr9   rQ   c                6   K                        d           d S )Nok)append)r   records    rI   r   zctest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStream.wait_send_all_might_not_block  s      MM$rK   c                $   K   t          d          NzShould not get calledrG   r   s    rI   r   zLtest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStream.aclose         !8999rK   N	max_bytesr   bytes | bytearrayc                $   K   t          d          rZ  r[  )r   r]  s     rI   r   zRtest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStream.receive_some  r\  rK   rd   bytes | bytearray | memoryviewc                $   K   t          d          rZ  r[  r   s     rI   r   zNtest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStream.send_all  r\  rK   r   rj   )r]  r   r9   r^  )rd   r`  r9   rQ   )r   r   r   r   r   r   r   )rX  s   rI   
NotAStreamrT    st        	  	  	  	  	  	 	: 	: 	: 	:	: 	: 	: 	: 	:	: 	: 	: 	: 	: 	:rK   rb  xr{   rV  )r   r=   r>   r$   r   )rb  rH   r   rX  s      @rI   1test_wait_writable_calls_underlying_wait_writablerd    s      F: : : : : : :V : : : 
$
&
&C**,,S999A

)
)
+
++++++++dVrK   nt)   r$  z)frequently fails on Windows + Python 3.10)reasonc                  K   t          |           4 d {V }t                      5  |                                 d {V  d d d            n# 1 swxY w Y   t                      5  |                                 d {V  d d d            n# 1 swxY w Y   t                      5  |                                 d {V  d d d            n# 1 swxY w Y   t                      5  |                    d           d {V  d d d            n# 1 swxY w Y   t                      5  |                    d           d {V  d d d            n# 1 swxY w Y   t                      5  |                    d           d {V  d d d            n# 1 swxY w Y   t                      5  |                    d           d {V  d d d            n# 1 swxY w Y   t                      5  |                                 d {V  d d d            n# 1 swxY w Y   d d d           d {V  n# 1 d {V swxY w Y   t          |           4 d {V }|                                 d {V  t                      5  |                                 d {V  d d d            n# 1 swxY w Y   d d d           d {V  d S # 1 d {V swxY w Y   d S )Ns   xxxr   )r~   r(   rW   r   r   r   r[   r   r  s     rI   test_checkpointsri    sR     
 z**       a!! 	# 	#.."""""""""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#!! 	# 	#.."""""""""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#!! 	4 	411333333333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4!! 	% 	%**V$$$$$$$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%!! 	$ 	$..#########	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$  !! 	$ 	$..#########	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$!! 	$ 	$..#########	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$!! 	 	((**	 	 	 	 	 	 	 	 	 	 	 	 	 	 	'                          , z**       ann!! 	 	((**	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                             sf  H/AH/A	H/A	H/'BH/B	H/B	H/'CH/C	H/C	H/'DH/D	H/D	H/(EH/E	H/E	H/)FH/F	H/F	H/*GH/G	H/G	H/+HH/H	H/H	H//
H9<H9)K>J%K%J)	)K,J)	-K
KKc                b  K   t          |           4 d {V }|                                 d {V  t                      5  |                    d           d {V  d d d            n# 1 swxY w Y   t                      5  |                    d           d {V  d d d            n# 1 swxY w Y   |                    d           d {V  |                    d           d {V dk    sJ |                                 d {V  d d d           d {V  d S # 1 d {V swxY w Y   d S )NrK   r   r   )r~   rW   r(   r   r   r   r  s     rI   test_send_all_empty_stringrk  1  sl     z**       ann  !! 	" 	"**S//!!!!!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"!! 	" 	"**S//!!!!!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"jj^^A&&&&&&&&$....hhjj                             sZ   )DA)D)A-	-D0A-	1DB*D*B.	.D1B.	2AD
D(+D(https_compatibleTc                T    K   d fd}d fd}t          ||           d {V  d S )Nr9   r   c                 4   K   t           didi          S )Nrl  r   )r   )rJ   rl  s   rI   stream_makerz,test_SSLStream_generic.<locals>.stream_makerE  s5       &-/?@-/?@
 
 
 	
rK   r   c                   K   t                    \  } }t          j                    4 d {V }|                    | j                   |                    |j                   d d d           d {V  n# 1 d {V swxY w Y   | |fS rj   )r   r   rn   ro   rW   )r   serverrv   rJ   s      rI   clogged_stream_makerz4test_SSLStream_generic.<locals>.clogged_stream_makerO  s      2*== %'' 	4 	4 	4 	4 	4 	4 	47v2333v2333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 v~s   5A66
B B )r9   r   )r9   r   )r)   )rJ   rl  ro  rr  s   ``  rI   test_SSLStream_genericrs  A  st      
 
 
 
 
 
 
       |-A
B
BBBBBBBBBBrK   c                `  K   t          |           \  j        j        t                      dfd}dfd}t          j                    4 d {V }|                    |           |                    |           d d d           d {V  d S # 1 d {V swxY w Y   d S )Nr9   rQ   c                   K                                     d {V                      d           d {V                      d           d {V dk    sJ                     d           d {V   d          4 d {V  j        j        } d j        _        d d d           d {V  n# 1 d {V swxY w Y                       d           d {V dk    sJ j        u sJ                                  d {V \  }}|u sJ |dk    sJ j        J |                    d           d {V  | j        _        j                                         d {V  d S )Nr   r   r   r   r   rK      trailing)rW   r   r   send_streamsend_all_hookr  r[   )rx  rawtrailingr   r   seqs      rI   r   ztest_unwrap.<locals>.clienti  s{     %%'''''''''!!$''''''''',,Q////////47777!!$'''''''''
 3q66 	> 	> 	> 	> 	> 	> 	> 	>,8FM9=(6	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>  ,,Q////////36666*.>>>>>(//11111111X&&&&&3*222ll;''''''''' 6C$2*88:::::::::::s   B11
B;>B;c                   K                                     d {V                      d           d {V dk    sJ                     d           d {V                      d           d {V dk    sJ  d          4 d {V                                   d {V \  } }d d d           d {V  n# 1 d {V swxY w Y   | u sJ |dk    sJ j        J d S )Nr   r   r   r   rv  )rW   r   r   r[   r  )ry  rz  r{  r   r   s     rI   rq  ztest_unwrap.<locals>.server  s     %%''''''''',,Q////////47777!!$''''''''',,Q////////47777
 3q66 	6 	6 	6 	6 	6 	6 	6 	6","3"3"5"5555555MC	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6&&&&&;&&&&*22222s   B<<
C	Cr   )r   r  r'   r   rn   ro   )	rJ   r   rq  rv   r   r   r{  r   r   s	       @@@@@rI   test_unwrapr}  b  s|     3J??J
!2!2
++C; ; ; ; ; ; ; ;63 3 3 3 3 3 3 3 !## # # # # # # #w6"""6"""# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #s   +B
B'*B'c                2  K   t          |           \  j        }d	fd}d	fd}t          j                    4 d {V }|                    |           |                    |           d d d           d {V  n# 1 d {V swxY w Y   t          j        t                    5  |                    d           d {V  d d d            n# 1 swxY w Y   t                      5  
                                 d {V  d d d            n# 1 swxY w Y   t                      5  
                                 d {V  d d d            n# 1 swxY w Y   t          j        t                    5                      d           d {V  d d d            n# 1 swxY w Y   t          j        t                    5                      d           d {V dk    sJ 	 d d d            n# 1 swxY w Y   t          j        t                    5                                   d {V  d d d            n# 1 swxY w Y   t          j        t                    5                                   d {V  d d d            n# 1 swxY w Y   t          |           \  d	fd}t          j                    4 d {V }|                    j
                   |                    |           d d d           d {V  d S # 1 d {V swxY w Y   d S )
Nr9   rQ   c                    K   t                      5                                    d {V  d d d            d S # 1 swxY w Y   d S rj   )r(   r   )r   s   rI   client_closerz-test_closing_nice_case.<locals>.client_closer  s      !! 	& 	&##%%%%%%%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   :>>c                   K                         d           d {V dk    sJ                       d           d {V dk    sJ t                      5                                    d {V  d d d            d S # 1 swxY w Y   d S Nr$  rK   )r   r(   r   r   s   rI   server_closerz-test_closing_nice_case.<locals>.server_closer  s      ,,R00000000C7777,,R00000000C7777!! 	& 	&##%%%%%%%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   A<<B B s   123r$  rK   c                   K   t                      5                       d           d {V dk    sJ 	 d d d            n# 1 swxY w Y   t                      5                                    d {V  d d d            d S # 1 swxY w Y   d S r  )r(   r   r   r  s   rI   expect_eof_serverz1test_closing_nice_case.<locals>.expect_eof_server  s0     !! 	< 	<#0044444444;;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<!! 	& 	&##%%%%%%%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s#   "AAABB	Br   )r   r  r   rn   ro   r   r   r   r   r(   r   r   r[   rW   )rJ   r   r  r  rv   r  r   r   s         @@rI   test_closing_nice_caser    sL      4J??J
!2& & & & & && & & & & & !## * * * * * * *w=)))=)))* * * * * * * * * * * * * * * * * * * * * * * * * * *
 
*	+	+ 0 0''/////////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
		 " "!!!!!!!!!" " " " " " " " " " " " " " "			 " "!!!!!!!!!" " " " " " " " " " " " " " " 
*	+	+ * *!!&)))))))))* * * * * * * * * * * * * * *
 
*	+	+ 8 8,,R00000000C777778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 
*	+	+ " "!!!!!!!!!" " " " " " " " " " " " " " " 
*	+	+ ( (%%'''''''''( ( ( ( ( ( ( ( ( ( ( ( ( ( (
 4J??J
& & & & & & !## . . . . . . .w:,---,---. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .s   +B  
B
B
*CCC+DDD+EEE6FF"%F""G11G58G5H<<I I  JJJ0L
LLc                  K   t          |           \  }}t          j                    4 d {V }|                    |j                   |                    |j                   d d d           d {V  n# 1 d {V swxY w Y   d	d}||j        j        _        t          j	        t                    5  |                    d           d {V  d d d            n# 1 swxY w Y   t          j	        t                    5  |                                 d {V  d d d            n# 1 swxY w Y   dd
fd}||j        j        _        ||j        j        _        |                                 d {V  dk    sJ d S )Nr9   r   c                    K   t           rj   KeyErrorr}   rK   rI   bad_hookz3test_send_all_fails_in_the_middle.<locals>.bad_hook        rK   r   r   rQ   c                      dz   d S rJ  r}   )closeds   rI   
close_hookz5test_send_all_fails_in_the_middle.<locals>.close_hook  s    !rK   r   r9   r   r   )r   r   rn   ro   rW   r  rw  rx  r   r   r  r   r   r   r  receive_streamr   )rJ   r   rq  rv   r  r  r  s         @rI   !test_send_all_fails_in_the_middler    s     +J77NFF!## 0 0 0 0 0 0 0w6.///6.///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    9AF'5	x	 	  $ $ood#########$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 
*	+	+ 5 5224444444445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 F      6@F'28BF*5
--//Q;;;;;;s5   5A66
B B 5CC!$C!D((D,/D,c                  	K   t                      \  }}t          || d          }t          |t          d          }t          || d          t          |t          d          	d	fd}d		fd}t          j                    4 d {V }|                    |           |                    |           d d d           d {V  d S # 1 d {V swxY w Y   d S )
Nr0   r{   Tr   r9   rQ   c                    K                         d           d {V                       d           d {V dk    sJ d S )N   hir$     bye)r   r   )client_2s   rI   r   z!test_ssl_over_ssl.<locals>.client  sd      &&&&&&&&&**2........&888888rK   c                    K                         d           d {V dk    sJ                      d           d {V  d S )Nr$  r  r  )r   r   )server_2s   rI   rq  z!test_ssl_over_ssl.<locals>.server  sd      **2........%7777'''''''''''rK   r   )r+   r$   rU   r   rn   ro   )
rJ   client_0server_0client_1server_1r   rq  rv   r  r  s
           @@rI   test_ssl_over_sslr    s     +--Hh*.G  H :4@@@H*.G  H :4@@@H9 9 9 9 9 9( ( ( ( ( ( !## # # # # # # #w6"""6"""# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #s   +C
CCc                  K   t          |           \  }}t          j                    4 d {V }|                    |j                   |                    |j                   d d d           d {V  n# 1 d {V swxY w Y   t          j        |           d {V  t          j        t                    5  |
                    d           d {V  d d d            n# 1 swxY w Y   t          j        t                    5  |                    d           d {V  d d d            n# 1 swxY w Y   |                                 d {V  d S )Nr$  
   xxxxxxxxxx)r   r   rn   ro   rW   rm   r   r   r   r   r   r   r   rJ   r   rq  rv   s       rI   test_ssl_bad_shutdownr    sc     +J77NFF!## 0 0 0 0 0 0 0w6.///6.///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
 
(
((((((((	*	+	+ & &!!"%%%%%%%%%& & & & & & & & & & & & & & &	*	+	+ ) )ooi((((((((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) --//s5   5A55
A?A?9C!!C%(C%D--D14D1c                `  K   t          | ddiddi          \  }}t          j                    4 d {V }|                    |j                   |                    |j                   d d d           d {V  n# 1 d {V swxY w Y   t          j        |           d {V  |                    d           d {V dk    sJ t          j	        t                    5  |                    d           d {V  d d d            n# 1 swxY w Y   |                                 d {V  d S )Nrl  Tr   r   r$  rK   r  )r   r   rn   ro   rW   rm   r   r   r   r   r   r   r   r  s       rI    test_ssl_bad_shutdown_but_its_okr     s$     +)40)40  NFF !## 0 0 0 0 0 0 0w6.///6.///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
 
(
(((((((($$R((((((((C////	*	+	+ ) )ooi((((((((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) --//s#   5A<<
B	B!D		DDc                 `  K   t          d          4 d {V } t          j                    }t          | |d          }t	          j        t                    5  |                                 d {V  d d d            n# 1 swxY w Y   d d d           d {V  d S # 1 d {V swxY w Y   d S )NTrL   r0   r{   )rw   r=   r>   r$   r   r   r   r   )rN   rJ   r   s      rI   (test_ssl_handshake_failure_during_acloser  4  s     
 #t444       /11
dJ8QRRR ].// 	 	((**	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                             s5   ?BA?3B?B	BB	B
B'*B'c                  K   t          |           \  }}t          j                    4 d {V }|                    |j                   |                    |j                   d d d           d {V  n# 1 d {V swxY w Y   |j        j        j        ddfd}||j        j        _        t          j	        t                    5  |                                 d {V  d d d            n# 1 swxY w Y   dk    sJ d S )Nr   r9   r   c                 8     J                dz  t           rJ  r  )client_orig_close_hooktransport_close_counts   rI   r  z4test_ssl_only_closes_stream_once.<locals>.close_hookS  s.    %111   "rK   r   r  )r   r   rn   ro   rW   r  rw  r  r   r   r  r   )rJ   r   rq  rv   r  r  r  s        @@rI    test_ssl_only_closes_stream_oncer  G  s      ,J77NFF!## 0 0 0 0 0 0 0w6.///6.///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 $4@K       6@F'2	x	 	   mmoo               A%%%%%%s#   5A77
BBC33C7:C7c                  K   t          | ddiddi          \  }t          j                    4 d {V }|                    |j                   |                    j                   d d d           d {V  n# 1 d {V swxY w Y   dfd}t          j                    4 d {V }|                    |j                   |                    |           d d d           d {V  d S # 1 d {V swxY w Y   d S )	Nrl  FTr  r9   rQ   c                    K   t          j        t                    5 }                     d           d {V  d d d            n# 1 swxY w Y   t	          | j        j                  sJ d S )Nr$  )r   r   r   r   r%   r   r   )r   rq  s    rI   receive_and_expect_errorzKtest_ssl_https_compatibility_disagreement.<locals>.receive_and_expect_errorn  s      ].// 	*7%%b)))))))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* w}.///////s   AA	A	r   )r   r   rn   ro   rW   r   )rJ   r   rv   r  rq  s       @rI   )test_ssl_https_compatibility_disagreementr  a  s2     +)51)40  NFF !## 0 0 0 0 0 0 0w6.///6.///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 !## 5 5 5 5 5 5 5w6=)))34445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5s#   5A==
B
B-0C00
C:=C:c                $  K   t          | ddiddi          \  }dfd}t          j                    4 d {V }|                    |j                   |                    |           d d d           d {V  d S # 1 d {V swxY w Y   d S )Nrl  Tr  r9   rQ   c                 N   K                         d           d {V dk    sJ d S r  )r   )rq  s   rI   server_expect_clean_eofzEtest_https_mode_eof_before_handshake.<locals>.server_expect_clean_eof  s>      ((,,,,,,,,333333rK   r   )r   r   rn   ro   r   )rJ   r   r  rv   rq  s       @rI   $test_https_mode_eof_before_handshaker  y  sG     +)40)40  NFF4 4 4 4 4 4 !## 4 4 4 4 4 4 4w6=)))23334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4s   0A??
B	B	c                  K   t          |           \  }}dd}||j        j        _        t	          j        t                    5  t                      5  |                                 d {V  d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t	          j        t                    5  t                      5  |                                 d {V  d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr9   r   c                    K   t           rj   r  r}   rK   rI   r  z2test_send_error_during_handshake.<locals>.bad_hook  r  rK   r  )
r   r  rw  rx  r   r   r  r(   rW   r   )rJ   r   rq  r  s       rI    test_send_error_during_handshaker    s"     +J77NFF    9AF'5	x	 	  ( (!! 	( 	(%%'''''''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 
*	+	+ ( (!! 	( 	(%%'''''''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (sl   BA9-B9A=	=B A=	BBB4DC*D*C.	.D1C.	2DD	Dc                .  K   t          |           \  }dd}|j        j        _        d	fd}t	          j                    4 d {V }|                    ||j                   |                    |j                   d d d           d {V  n# 1 d {V swxY w Y   t          j
        t                    5  t                      5                                   d {V  d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )
Nr9   r   c                    K   t           rj   r  r}   rK   rI   r  z5test_receive_error_during_handshake.<locals>.bad_hook  r  rK   cancel_scoper/   rQ   c                  K   t          j        t                    5  t                      5                                   d {V  d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                                  d S rj   )r   r   r  r(   rW   cancel)r  r   s    rI   client_sidez8test_receive_error_during_handshake.<locals>.client_side  s     ]8$$ 	, 	,#%% , ,))+++++++++, , , , , , , , , , , , , , ,	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	s4   A*AA*A	A*A	A**A.1A.r  )r  r/   r9   rQ   )r   r  r  receive_some_hookr   rn   ro   r  rW   r   r   r   r(   )rJ   rq  r  r  rv   r   s        @rI   #test_receive_error_during_handshaker    sE     +J77NFF    @HF*<      !## 0 0 0 0 0 0 0w;(<===6.///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
*	+	+ ( (!! 	( 	(%%'''''''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (sH   
6B
BB<D
C2&D
2C6	6D
9C6	:D

DDc                D  K   t          |           \  }}t          j        t                    5  |                                 d d d            n# 1 swxY w Y   t          j        t                    5  |                                 d d d            d S # 1 swxY w Y   d S rj   )r   r   r   r"   selected_alpn_protocolrJ   r   rq  s      rI   ,test_selected_alpn_protocol_before_handshaker    s     +J77NFF	)	*	* ( (%%'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 
)	*	* ( (%%'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (#   AAA3BBBc                  K   t          |           \  }}t          j                    4 d {V }|                    |j                   |                    |j                   d d d           d {V  n# 1 d {V swxY w Y   |                                J |                                J |                                |                                k    sJ d S rj   )r   r   rn   ro   rW   r  r  s       rI   (test_selected_alpn_protocol_when_not_setr    sc      ,J77NFF!## 0 0 0 0 0 0 0w6.///6.///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ((**222((**222((**f.K.K.M.MMMMMMM   5A55
A?A?c                D  K   t          |           \  }}t          j        t                    5  |                                 d d d            n# 1 swxY w Y   t          j        t                    5  |                                 d d d            d S # 1 swxY w Y   d S rj   )r   r   r   r"   selected_npn_protocolr  s      rI   +test_selected_npn_protocol_before_handshaker    s     +J77NFF	)	*	* ' '$$&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 
)	*	* ' '$$&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'r  zCignore: ssl module. NPN is deprecated, use ALPN instead:UserWarningzAignore:ssl NPN is deprecated, use ALPN instead:DeprecationWarningc                  K   t          |           \  }}t          j                    4 d {V }|                    |j                   |                    |j                   d d d           d {V  n# 1 d {V swxY w Y   |                                J |                                J |                                |                                k    sJ d S rj   )r   r   rn   ro   rW   r  r  s       rI   'test_selected_npn_protocol_when_not_setr    sc      ,J77NFF!## 0 0 0 0 0 0 0w6.///6.///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ''))111''))111''))V-I-I-K-KKKKKKKr  c                D  K   t          |           \  }}t          j        t                    5  |                                 d d d            n# 1 swxY w Y   t          j        t                    5  |                                 d d d            d S # 1 swxY w Y   d S rj   )r   r   r   r"   get_channel_bindingr  s      rI   )test_get_channel_binding_before_handshaker    s     +J77NFF	)	*	* % %""$$$% % % % % % % % % % % % % % % 
)	*	* % %""$$$% % % % % % % % % % % % % % % % % %r  c                  K   t          |           \  }}t          j                    4 d {V }|                    |j                   |                    |j                   d d d           d {V  n# 1 d {V swxY w Y   |                                J |                                J |                                |                                k    sJ d S rj   )r   r   rn   ro   rW   r  r  s       rI   (test_get_channel_binding_after_handshaker    sa     +J77NFF!## 0 0 0 0 0 0 0w6.///6.///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 %%''333%%''333%%''6+E+E+G+GGGGGGGr  c                  K   t          |           \  }}t          j                    4 d {V }|                    |j                   |                    |j                   d d d           d {V  n# 1 d {V swxY w Y   |                                J t          |                                           d|                                d         v sJ d S )N)DNSr0   subjectAltName)r   r   rn   ro   rW   getpeercertrb   r  s       rI   test_getpeercertr    s]     +J77NFF!## 0 0 0 0 0 0 0w6.///6.///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 '''	&



-1C1C1E1EFV1WWWWWWWr  c                r   K   d	 fd} |             d {V \  }}}|4 d {V  |                                  d {V }|4 d {V  |j        rJ t          j                    4 d {V }|                    |j                   |                    |j                   d d d           d {V  n# 1 d {V swxY w Y   d d d           d {V  n# 1 d {V swxY w Y   |                                 d {V  |                                dk    sJ 	 d d d           d {V  n# 1 d {V swxY w Y    |d           d {V \  }}}|                                  d {V }|j        sJ t          |           d {V  t          |           d {V  t          |           d {V  d S )
Nrg   r
   r9   Mtuple[tsocket.SocketType, SSLListener[SocketStream], SSLStream[SocketStream]]c                 B  K   t          j                    }|                    d           d {V  |                    d           t	          |          }t          |t          fi | }t          |                                  d {V }t          |d          }|||fS )N)z	127.0.0.1r   r   r0   r{   )
rr   r   bindlistenr    r#   rU   r   getsocknamer$   )rg   listen_socksocket_listenerssl_listenertransport_client
ssl_clientrJ   s         rI   setupztest_SSLListener.<locals>.setup  s       n&&/0000000001(55"?JII&II!0+2I2I2K2K!LLLLLLLj:S
 
 

 L*44rK   T)rl  )rg   r
   r9   r  )	accept_https_compatibler   rn   ro   rW   r   filenor   )rJ   r  r  r  r  
ssl_serverrv   r   s   `       rI   test_SSLListenerr  
  s     5 5 5 5 5 5 38%''MMMMMM)Kz * * * * * * * *'..00000000
 	< 	< 	< 	< 	< 	< 	< 	<!3333 )++ < < < < < < <w"":#:;;;"":#:;;;< < < < < < < < < < < < < < < < < < < < < < < < < < <		< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< !!#########!!##r)))))* * * * * * * * * * * * * * * * * * * * * * * * * * *$ ).t(D(D(D"D"D"D"D"D"DA|Z#**,,,,,,,,J''''
L
)
))))))))
J
'
''''''''
J
'
''''''''''sY   #D.	#C,5B3!C3
B==C B=CD.
C 	 D.#C 	$7D..
D8;D8)r7   r8   r9   r:   )rN   rO   rM   rP   r9   rQ   )rg   r
   r9   rh   )rJ   r   rg   r
   r9   rx   r   )rJ   r   rg   r
   r9   r   )rJ   r   r   r.   r   r.   r   r   r   r   r9   r   )rJ   r   rg   r
   r9   r   )rJ   r   rg   r
   r9   r   )rJ   r   r9   rQ   )r!  r-   rJ   r   r9   rQ   )rJ   r   rl  rP   r9   rQ   )
__future__r   osr   rk   r=   sysr   
contextlibr   r   r   	functoolsr   r   typingr	   r
   r   r   r   r   r   r   rm   r   trio._tests.pytest_pluginr   trio.abcr   r   trio.testingr   r   trustmeOpenSSLr   ImportErrorerror r   rr   _abcr   r   r   _core._tests.tutilr   _highlevel_genericr   _highlevel_open_tcp_streamr   _highlevel_socketr    r!   _sslr"   r#   r$   r%   _utilr&   testingr'   r(   r)   r*   r+   typing_extensionsr,   
trio._corer-   	trio._sslr.   
_core._runr/   CArA   issue_server_certr   r>   PurposeCLIENT_AUTHrU   r?   r@   r1   r   fixturerJ   rf   rw   r~   r   r   r   r   r   __annotations__r   r   r   r   r  r  r  r   rC  rQ  rd  markskipifnameversion_infori  rk  parametrizers  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  filterwarningsr  r  r  r  r  r}   rK   rI   <module>r     so   " " " " " " " 				     



 



     D D D D D D D D D D                                     A A A A A A . . . . . . . . > > > > > > > >'NNN ' ' '&&&&&&&&'  ' ' ' ' ' ' ' '       < < < < < < < < % % % % % % 2 2 2 2 2 2 8 8 8 8 8 8 < < < < < < < < F F F F F F F F F F F F $ $ $ $ $ $               )++++++$$$$$$""""""((((((( wz||112KLL 'S'(?@@

73*++ 83777   
 + + + h'9:::   ;:$ 8=- - - - - -f > > > >  U U U UWF WF WF WF WF& WF WF WFt> > > >4 U U U U ,0+/" " " " " "0 "//?AT/T!U  U U U US S S S +:}+DE E E E ES S S SI I I I4   <"A "A "A "AJ" " " "J   " s s s slV V V VD   . GtO3(G36     	 :     +eT];;C C C <;C@3# 3# 3# 3#l;. ;. ;. ;.|   ># # # #4   "   (   && & & &45 5 5 504 4 4 4( ( ( ("( ( ( (.( ( ( (N N N N' ' ' ' JH L L L	 L% % % %
H 
H 
H 
H
X 
X 
X 
X,( ,( ,( ,( ,( ,(s   %
A0 0B
5BB
