
    gP                       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 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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l.m/Z/ ddl0m1Z1 ddl2m3Z3m4Z4 ddl5m6Z6m7Z7m8Z8m9Z9 ddl:m;Z; ddl<m=Z=m>Z>m?Z?m@Z@mAZA er$d dlBmCZCmDZDmEZEmFZF d dlGmHZH d dlImJZJ d dlKmLZL ddlMmNZN  e jO                    ZPePQ                    d          ZR ejS        ejT        jU                  ZV eWed          reVxjX        ejY         z  c_X        eRZ                    eV            ej[        ddd g!          dvd&            Z\d'd(dwd.Z]e	dxdyd0            Z^e		 dxdzd4            Z_ G d5 d6e)          Z`d{d7Zae
	 d|d}d;            Zbddd<d~dDZceeef         ZddEeedF<   	 	 dddIZfeeef         ZgdEeedJ<   	 	 dddLZhddMZiddNZjddOZkddPZlddQZme-ddT            ZnddUZod{dVZpejq        r                    ejs        dWk    o
ejt        dXk    dYZ          dd[            Zudd\Zvejq        w                    d]d'd^g          dd_            Zxdd`ZyddaZzddbZ{ddcZ|dddZ}ddeZ~d{dfZddgZddhZddiZddjZddkZddlZddmZddnZejq                            dodp          ddq            ZddrZddsZddtZdduZdS )    )annotationsN)asynccontextmanagercontextmanagersuppress)partial)
SSLContext)TYPE_CHECKINGAnyNoReturn)StapledStream)skip_if_optional_else_raise)ReceiveStream
SendStream)MatcherMemoryReceiveStreamMemorySendStreamRaisesGroup)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)AsyncIterator	AwaitableCallableIterator)	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                      )Nr3   )defaultr5   r6   )sslcreate_default_contexthasattroptionsr3   TRIO_TEST_CAconfigure_trustparam
TLSVersionTLSv1_2maximum_versionAssertionError)r9   ctxs     `/var/www/html/nodeJS/PythonScripts/venv3.11/lib/python3.11/site-packages/trio/_tests/test_ssl.py
client_ctxrL   b   s    

$
&
&Cs.// 5444  %%%},,,
	'	!	!!n4
    Fexpect_failsockstdlib_socket.socketrO   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)rP   rO   wrappeddataexcs        rK   ssl_echo_serve_syncrh   t   s8   
,((!& ) 
 

  	& 	&  """	&||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=AsyncIterator[SocketStream]c                 K   t          j                    \  }}t          j                    4 d {V }|5  |5  |                    t          j        j        t          t          ||                      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 )NrN   )stdlib_socket
socketpairtrioopen_nursery
start_soon	to_threadrun_syncr   rh   r   tsocketfrom_stdlib_socket)rO   abnurserys       rK   ssl_echo_server_rawrw      s     #%%DAq "" 
> 
> 
> 
> 
> 
> 
>g  	> 	> 	> 	>'+QKHHH  
 w9!<<======	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>	
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
>sX   CB:AB#B:#B''B:*B'+B:.C:B>	>CB>	C
C"%C"rL   r    AsyncIterator[SSLStream[Stream]]c                  K   t          |          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 )NrN   r2   server_hostname)rw   r"   )rL   rO   rP   s      rK   ssl_echo_serverr|      s     
 #{;;; U U U U U U Ut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Ac                  L    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sleeper'Callable[[str], Awaitable[None]] | Noner;   rS   c                >   t          j        t           j                  }ddlm}  |            }|                    |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OP_NO_TLSv1_4z2simultaneous calls to PyOpenSSLEchoStream.send_allz6simultaneous calls to PyOpenSSLEchoStream.receive_some_objectr;   rS   c                
   K   d S N )r   s    rK   no_op_sleeperz3PyOpenSSLEchoStream.__init__.<locals>.no_op_sleeper   s      rM   r   r   r;   rS   )r   ContextSSLv23_METHOD,cryptography.hazmat.bindings.openssl.bindingr   set_optionslibSSL_OP_NO_TLSv1_3rA   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   rJ   r   ru   r   s         rK   __init__zPyOpenSSLEchoStream.__init__   s"    k#+,, 	IHHHHHGII/000 300000'',,,^C..

##%%%$&&	"++++;@,
 ,
( 0@D0
 0
, 	6?    )DLLL"DLLLrM   c                <   K   | j                                          d S r   )r   bio_shutdownr   s    rK   aclosezPyOpenSSLEchoStream.aclose   s       
!!!!!rM   rR   c                4    | j                                         S r   )r   renegotiate_pendingr   s    rK   r   z'PyOpenSSLEchoStream.renegotiate_pending   s    z--///rM   c                <    | j                                         sJ d S r   )r   renegotiater   s    rK   r   zPyOpenSSLEchoStream.renegotiate   s$     z%%'''''''rM   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    rK   r   z1PyOpenSSLEchoStream.wait_send_all_might_not_block  s      - 	@ 	@"$$$$$$$$$"$$$$$$$$$,,>?????????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   AA%%A),A)rf   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)rd   r   r   r   r   r   	bio_writerZ   r   r   ZeroReturnErrorshutdowntotal_renegotiationsWantReadErrorr   
unpark_allr   rf   s     rK   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))rd   r   r   r   r   r   bio_readr   r   r   sendr   r   park)r   r   	next_bytes      rK   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r   )r   r   r;   rS   r;   rS   )r;   rR   )rf   r   r;   rS   )r   r   r;   r   )
__name__
__module____qualname__r   r   r   r   r   r   r   r   rM   rK   r~   r~      s         <@+# +# +# +# +#Z" " " "0 0 0 0( ( ( (
@ @ @ @> > > >.5F 5F 5F 5F 5F 5F 5FrM   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args2r;   rS   c                  K   t                      }t          t          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)r~   r   r   r   BusyResourceErrorrn   ro   getattr)r   r   r   r   srv   s         rK   do_testzDtest_PyOpenSSLEchoStream_gives_resource_busy_errors.<locals>.do_test`  s       !!!8.IIJJ 	> 	>)++ > > > > > > >w""71e#4#4=u====""71e#4#4=u====> > > > > > > > > > > > > > > > > > > > > > > > > > >	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s5   B;9BB;
B'	'B;*B'	+B;;B?B?r   )   xr   r   r   )r   )
r   r   r   r   r   r   r   r   r;   rS   r   )r   s    rK   3test_PyOpenSSLEchoStream_gives_resource_busy_errorsr   Y  s      
> 
> 
> 
> '*gz7
;
;;;;;;;;
'*g'F
K
KKKKKKKK
''
'
	         '.$
=
==========rM   r   r   (Iterator[SSLStream[PyOpenSSLEchoStream]]c              #  R   K   t          |          }t          || d          V  d S )Nr   r2   rz   )r~   r"   )rL   r   fakesocks      rK   virtual_ssl_echo_serverr   w  s:      
 #7333H
Hj:S
T
T
TTTTTTrM   client_kwargsserver_kwargsclient_transportr0   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{   r2   rU   T)r"   rW   )rL   r   r   r   r   
client_ssl
server_ssls          rK   ssl_wrap_pairr     s       2 	 J    	 J z!!rM   r.   MemoryStapledStream+dict[str, str | bytes | bool | None] | NoneEtuple[SSLStream[MemoryStapledStream], SSLStream[MemoryStapledStream]]c                L    t                      \  }}t          | ||||          S Nr   )r)   r   rL   r   r   r   r   s        rK   ssl_memory_stream_pairr     s<     *<)=)=&&##   rM   MyStapledStream=tuple[SSLStream[MyStapledStream], SSLStream[MyStapledStream]]c                L    t                      \  }}t          | ||||          S r   )r(   r   r   s        rK   ssl_lockstep_stream_pairr     s<     *>)?)?&&##   rM   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   TrN   r2   rz   ztrio-test-2.example.org)r|   rU   r   r   r   rw   r?   r@   r"   pytestraisesr   
isinstancevalue	__cause__SSLErrorCertificateError)rL   r   rP   bad_client_ctxexcinfos        rK   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rU   r;   rS   c                                         d          5 } |                     d           |                     d          dk    sJ |                     d           |                                  d d d            d S # 1 swxY w Y   d S )Nr2   rz   r   r      y   z)rX   r_   rZ   r]   )client_sockrt   rL   s    rK   clientz&test_ssl_server_basics.<locals>.client  s    '' 9 (   % ##D)))"''**d2222##D)))""$$$% % % % % % % % % % % % % % % % % %s   AB  BB)targetr   r   r   r   rM   r   )rk   rl   rr   rs   r"   r   rW   rU   	threadingThreadstartr   r   r   join)rL   ru   server_sockr   r   trt   s   `     @rK   test_ssl_server_basicsr    sT     #%%DAq	
  A  033$%%
 
 

  ++++	% 	% 	% 	% 	% 	% 	% 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<<<<%%'''''''''	9                                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 )	NTrN   r2   rz   Ftransport_streamcontextasdf)rw   r?   r@   r"   r  r  rU   r{   r   r   AttributeError
asfdasdfsadirr   rY   r   r   r   r   )rL   rP   good_ctxbad_ctxr   r   s         rK   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   r;   rS   c                   K   t                    D ]D}t          |           t          |gz            }|z  |                     |           d {V  Ed S r   )rangerd   r   r   )r   ichunkCHUNKS
CHUNK_SIZEsents      rK   senderz'test_full_duplex_basics.<locals>.senderP  su      v 	$ 	$A!HHH1#
*++EEMD**U##########		$ 	$rM   c                   K   t                    k     r8|                     dz             d {V }|z  t                    k     6d S d S )Nr   )lenr   )r   r  r  EXPECTEDreceiveds     rK   receiverz)test_full_duplex_basics.<locals>.receiverX  sh      (mmh&&..q99999999EH (mmh&&&&&&rM   )r   r   r;   rS   )r   r|   r   rn   ro   rY   r   r  )
rL   r  r  r   rv   r  r  r  r  r  s
        @@@@@rK   test_full_duplex_basicsr  H  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   rY   r  r   r   r   r   rL   r   s     rK   test_renegotiation_simpler"  m  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   r;   rS   c                h   K   t          j                            dd                     d {V  d S )Nr   
   )rm   sleepuniform)r   rs    rK   r   z.test_renegotiation_randomized.<locals>.sleeper  s=      j1b))***********rM   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&   rd   )expectr   r   s   rK   clearz,test_renegotiation_randomized.<locals>.clear  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   rd   r&   r   )r.  r   s    rK   r   z+test_renegotiation_randomized.<locals>.send  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   rd   r  r&   r   )r0  r   s    rK   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'  r4  s    rK   sleeper_with_slow_send_allzAtest_renegotiation_randomized.<locals>.sleeper_with_slow_send_all  sA      Z*V$$$$$$$$$$$  rM   c                 t   K   t          j        d           d {V                                    d {V  d S )N  )rm   r'  r   r   s   rK   sleep_then_wait_writablez?test_renegotiation_randomized.<locals>.sleep_then_wait_writable  sS      j--///////////rM   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   r6  r,  r;  r7  r8  s    rK   *sleeper_with_slow_wait_writable_and_expectzQtest_renegotiation_randomized.<locals>.sleeper_with_slow_wait_writable_and_expect  su      444*V$$$$$$$$$$$x*T"""""""""""  rM   r   r   )r.  r   r;   rS   )r0  r   r;   rS   )r4  r   r;   rS   )autojump_thresholdrandomRandomr   rY   r  r   r  r   r   rn   ro   r   r   )r#  rL   rA  r   r-  r  b1b2rv   r9  r=  r?  r,  r)  r   r   s               @@@@rK   test_renegotiation_randomizedrE  ~  sw	      %&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	 	 	 	 	 	 	 	 	 	 	 	 	 	 	# # # # 
!:
 
 
  
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   Sr;   rS   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    rK   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    rK   do_receive_somez2test_resource_busy_errors.<locals>.do_receive_some  s      !! 	$ 	$..#########	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$rJ  c                   K   t                      5  |                                  d {V  d d d            d S # 1 swxY w Y   d S r   )r&   r   r<  s    rK    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                  K   t                    \  }}t          t          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 task)r   r   r   r   r   rn   ro   )r   r   r   r   rv   rL   s        rK   r   z*test_resource_busy_errors.<locals>.do_test
  s      (
331!8.IIJJ 	- 	-)++ - - - - - - -w""5!,,,""5!,,,- - - - - - - - - - - - - - - - - - - - - - - - - - -	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s5   B4-BB4
B 	 B4#B 	$B44B8;B8)r   rG  r;   rS   )r   rP  r   rP  r;   rS   )rm   r"   r   abcr   r   )rL   rG  rI  rM  rO  r   s   `     rK   test_resource_busy_errorsrS    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UrM   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>.NotAStreamr;   rS   c                6   K                        d           d S )Nok)append)r   records    rK   r   zctest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStream.wait_send_all_might_not_block  s      MM$rM   c                $   K   t          d          NzShould not get calledrI   r   s    rK   r   zLtest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStream.aclose"         !8999rM   N	max_bytesr   bytes | bytearrayc                $   K   t          d          r\  r]  )r   r_  s     rK   r   zRtest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStream.receive_some%  r^  rM   rf   bytes | bytearray | memoryviewc                $   K   t          d          r\  r]  r   s     rK   r   zNtest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStream.send_all(  r^  rM   r   r   )r_  r   r;   r`  )rf   rb  r;   rS   )r   r   r   r   r   r   r   )rZ  s   rK   
NotAStreamrV    st        	  	  	  	  	  	 	: 	: 	: 	:	: 	: 	: 	: 	:	: 	: 	: 	: 	: 	:rM   rd  xrz   rX  )r   r?   r@   r"   r   )rd  rJ   r   rZ  s      @rK   1test_wait_writable_calls_underlying_wait_writablerf    s      F: : : : : : :V : : : 
$
&
&C**,,S999A

)
)
+
++++++++dVrM   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&   rY   r   r   r   r]   r   r!  s     rK   test_checkpointsrk  1  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 )NrM   r   r   )r|   rY   r&   r   r   r   r!  s     rK   test_send_all_empty_stringrm  R  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 )Nr;   r   c                 4   K   t           didi          S )Nrn  r   )r   )rL   rn  s   rK   stream_makerz,test_SSLStream_generic.<locals>.stream_makerg  s5       &-/?@-/?@
 
 
 	
rM   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 r   )r   r   rn   ro   rY   )r   serverrv   rL   s      rK   clogged_stream_makerz4test_SSLStream_generic.<locals>.clogged_stream_makerq  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 )r;   r   )r;   r   )r'   )rL   rn  rq  rt  s   ``  rK   test_SSLStream_genericru  b  st      

 
 
 
 
 
 
       |-A
B
BBBBBBBBBBrM   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 )Nr;   rS   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   rM      trailing)rY   r   r   send_streamsend_all_hookr  r]   )rz  rawtrailingr   r   seqs      rK   r   ztest_unwrap.<locals>.client  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   rx  )rY   r   r   r]   r  )r{  r|  r}  r   r   s     rK   rs  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   )	rL   r   rs  rv   r   r   r}  r   r   s	       @@@@@rK   test_unwrapr    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 )
Nr;   rS   c                    K   t                      5                                    d {V  d d d            d S # 1 swxY w Y   d S r   )r&   r   )r   s   rK   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&  rM   )r   r&   r   r   s   rK   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&  rM   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   rK   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]   rY   )rL   r   r  r  rv   r  r   r   s         @@rK   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 )Nr;   r   c                    K   t           r   KeyErrorr   rM   rK   bad_hookz3test_send_all_fails_in_the_middle.<locals>.bad_hook        rM   r   r   rS   c                      dz   d S rL  r   )closeds   rK   
close_hookz5test_send_all_fails_in_the_middle.<locals>.close_hook  s    !rM   r   r;   r   r   )r   r   rn   ro   rY   r  ry  rz  r   r   r  r   r   r   r  receive_streamr   )rL   r   rs  rv   r  r  r  s         @rK   !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 )
Nr2   rz   Tr   r;   rS   c                    K                         d           d {V                       d           d {V dk    sJ d S )N   hir&     bye)r   r   )client_2s   rK   r   z!test_ssl_over_ssl.<locals>.client(  sd      &&&&&&&&&**2........&888888rM   c                    K                         d           d {V dk    sJ                      d           d {V  d S )Nr&  r  r  )r   r   )server_2s   rK   rs  z!test_ssl_over_ssl.<locals>.server,  sd      **2........%7777'''''''''''rM   r   )r)   r"   rW   r   rn   ro   )
rL   client_0server_0client_1server_1r   rs  rv   r  r  s
           @@rK   test_ssl_over_sslr    s     +--Hh1  H
 :4@@@H1  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   rY   rm   r   r   r   r   r   r   r   rL   r   rs  rv   s       rK   test_ssl_bad_shutdownr  5  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 )Nrn  Tr   r   r&  rM   r  )r   r   rn   ro   rY   rm   r   r   r   r   r   r   r   r  s       rK    test_ssl_bad_shutdown_but_its_okr  F  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 )NTrN   r2   rz   )rw   r?   r@   r"   r   r   r   r   )rP   rL   r   s      rK   (test_ssl_handshake_failure_during_acloser  Z  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   r;   r   c                 8     J                dz  t           rL  r  )client_orig_close_hooktransport_close_counts   rK   r  z4test_ssl_only_closes_stream_once.<locals>.close_hooky  s.    %111   "rM   r   r  )r   r   rn   ro   rY   r  ry  r  r   r   r  r   )rL   r   rs  rv   r  r  r  s        @@rK    test_ssl_only_closes_stream_oncer  m  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 )	Nrn  FTr  r;   rS   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   rs  s    rK   receive_and_expect_errorzKtest_ssl_https_compatibility_disagreement.<locals>.receive_and_expect_error  s      ].// 	*7%%b)))))))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* w}.///////s   AA	A	r   )r   r   rn   ro   rY   r   )rL   r   rv   r  rs  s       @rK   )test_ssl_https_compatibility_disagreementr    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 )Nrn  Tr  r;   rS   c                 N   K                         d           d {V dk    sJ d S r  )r   )rs  s   rK   server_expect_clean_eofzEtest_https_mode_eof_before_handshake.<locals>.server_expect_clean_eof  s>      ((,,,,,,,,333333rM   r   )r   r   rn   ro   r   )rL   r   r  rv   rs  s       @rK   $test_https_mode_eof_before_handshaker    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 )Nr;   r   c                    K   t           r   r  r   rM   rK   r  z2test_send_error_during_handshake.<locals>.bad_hook  r  rM   r  )
r   r  ry  rz  r   r   r  r&   rY   r   )rL   r   _serverr  s       rK    test_send_error_during_handshaker    s"     ,Z88OFG    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 )
Nr;   r   c                    K   t           r   r  r   rM   rK   r  z5test_receive_error_during_handshake.<locals>.bad_hook  r  rM   cancel_scoper1   rS   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 r   )r   r   r  r&   rY   cancel)r  r   s    rK   client_sidez8test_receive_error_during_handshake.<locals>.client_side  s     ]8$$ 	, 	,#%% , ,))+++++++++, , , , , , , , , , , , , , ,	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	s4   A*AA*A	A*A	A**A.1A.r  )r  r1   r;   rS   )r   r  r  receive_some_hookr   rn   ro   r  rY   r   r   r   r&   )rL   rs  r  r  rv   r   s        @rK   #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                @   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 r   )r   r   r   r    selected_alpn_protocolrL   r   rs  s      rK   ,test_selected_alpn_protocol_before_handshaker    s   +J77NFF	)	*	* ( (%%'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 
)	*	* ( (%%'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (#   AAA1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 r   )r   r   rn   ro   rY   r  r  s       rK   (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                @   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 r   )r   r   r   r    selected_npn_protocolr  s      rK   +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 r   )r   r   rn   ro   rY   r  r  s       rK   '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                @   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 r   )r   r   r   r    get_channel_bindingr  s      rK   )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 r   )r   r   rn   ro   rY   r  r  s       rK   (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)DNSr2   subjectAltName)r   r   rn   ro   rY   getpeercertrd   r  s       rK   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                v   K   	 d
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 )NFrn  rR   r;   Mtuple[tsocket.SocketType, SSLListener[SocketStream], SSLStream[SocketStream]]c                J  K   t          j                    }|                    d           d {V  |                    d           t	          |          }t          |t          |           }t          |                                  d {V }t          |d          }|||fS )N)z	127.0.0.1r   r   rn  r2   rz   )
rr   r   bindlistenr   r!   rW   r   getsocknamer"   )rn  listen_socksocket_listenerssl_listenertransport_client
ssl_clientrL   s         rK   setupztest_SSLListener.<locals>.setup1  s       n&&/0000000001(55"-
 
 
 "1+2I2I2K2K!LLLLLLL5
 
 


 L*44rM   Tr  F)rn  rR   r;   r  )	accept_https_compatibler   rn   ro   rY   r   filenor   )rL   r  r  r  r  
ssl_serverrv   r   s   `       rK   test_SSLListenerr  0  s     !&5 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   #D0#C.5B5#C5
B??CB?CD0
C"	"D0%C"	&7D00
D:=D:)r9   r:   r;   r<   )rP   rQ   rO   rR   r;   rS   r  )rO   rR   r;   ri   )rL   r   rO   rR   r;   rx   r   r   )rL   r   r   r   r;   r   )rL   r   r   r0   r   r0   r   r   r   r   r;   r   )NN)rL   r   r   r   r   r   r;   r   )rL   r   r   r   r   r   r;   r   )rL   r   r;   rS   )r#  r/   rL   r   r;   rS   )rL   r   rn  rR   r;   rS   )
__future__r   osr   rk   r?   sysr   
contextlibr   r   r   	functoolsr   r   typingr	   r
   r   r   rm   r   trio._tests.pytest_pluginr   trio.abcr   r   trio.testingr   r   r   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)   collections.abcr*   r+   r,   r-   typing_extensionsr.   
trio._corer/   	trio._sslr0   
_core._runr1   CArC   issue_server_certr   r@   PurposeCLIENT_AUTHrW   rA   rB   r3   r   fixturerL   rh   rw   r|   r~   r   r   r   r   __annotations__r   r   r   r   r  r  r  r"  rE  rS  rf  markskipifnameversion_infork  rm  parametrizeru  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  filterwarningsr  r  r  r  r  r   rM   rK   <module>r     s   " " " " " " " 				     



 



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