
     f                       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!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l0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z:m;Z;m<Z<m=Z= ddl>m?Z? ddl@mAZAmBZBmCZCmDZDmEZE erd dlFmGZG d dlHmIZI d dlJmKZK ddlLmMZM  e$jN                    ZOeOP                    d          ZQ ejR        ejS        jT                  ZU eVed          reUxjW        ejX         z  c_W        eQY                    eU            ejZ        dddg           dtd%            Z[d&d'dud-Z\e	dvd1            Z]e	dwd5            Z^ G d6 d7e-          Z_dxd8Z`e
dyd:            Zaddd;dzdCZbee"e!f         ZcdDeddE<   d{dGZeeeef         ZfdDeddH<   d|dJZgd}dKZhd}dLZid}dMZjd}dNZkd}dOZle1d~dR            Zmd}dSZndxdTZoejp        q                    ejr        dUk    o
ejs        dVk    dWX          d}dY            Ztd}dZZuejp        v                    d[d&d\g          dd]            Zwd}d^Zxd}d_Zyd}d`Zzd}daZ{d}dbZ|d}dcZ}dxddZ~d}deZd}dfZd}dgZd}dhZd}diZd}djZd}dkZd}dlZejp                            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)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)	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     W/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/trio/_tests/test_ssl.py
client_ctxrL   d   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   v   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   rh   r#   tsocketfrom_stdlib_socket)ri   abnurserys       rK   ssl_echo_server_rawry      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rL   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 Nr2   server_hostname )ry   r&   )rL   ri   rP   s      rK   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sleeperrS   r;   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_objectr;   rS   c                
   K   d S rl   r   )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   rA   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   rJ   r   rw   r   s         rK   __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"DLLLrM   c                <   K   | j                                          d S rl   )r   bio_shutdownr   s    rK   aclosezPyOpenSSLEchoStream.aclose  s       
!!!!!rM   rR   c                4    | j                                         S rl   )r   renegotiate_pendingr   s    rK   r   z'PyOpenSSLEchoStream.renegotiate_pending  s    z--///rM   c                <    | j                                         sJ d S rl   )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rl   )r   rS   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        7# 7# 7# 7# 7#r" " " "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   BusyResourceErrorrp   rq   getattr)r   r   r   r   srx   s         rK   do_testzDtest_PyOpenSSLEchoStream_gives_resource_busy_errors.<locals>.do_testh  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   a  s      > > > > '*gz7
;
;;;;;;;;
'*g'F
K
KKKKKKKK
''-Lb         '.$
=
==========rM   (Iterator[SSLStream[PyOpenSSLEchoStream]]c              +  J   K   t          di |}t          || d          V  d S r|   )r   r&   )rL   ri   fakesocks      rK   virtual_ssl_echo_serverr   y  s=       #,,V,,H
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 * 26:G J z!!rM   r.   MemoryStapledStreamEtuple[SSLStream[MemoryStapledStream], SSLStream[MemoryStapledStream]]c                B    t                      \  }}t          | ||fi |S rl   )r-   r   rL   ri   r   r   s       rK   ssl_memory_stream_pairr     s2     *<)=)=&&%57GRR6RRRrM   MyStapledStream=tuple[SSLStream[MyStapledStream], SSLStream[MyStapledStream]]c                B    t                      \  }}t          | ||fi |S rl   )r,   r   r   s       rK   ssl_lockstep_stream_pairr     s2     *>)?)?&&%57GRR6RRRrM   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   r}   ztrio-test-2.example.org)r   rU   r   r   r   ry   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   r}   r   r      y   z)rX   r_   rZ   r]   )client_sockrv   rL   s    rK   clientz&test_ssl_server_basics.<locals>.client  s    ''#< (   %##D)))"''**d2222##D)))""$$$% % % % % % % % % % % % % % % % % %s   AB  BB)targetr   r   r   r   rM   r   )rm   rn   rt   ru   r&   r#   rW   rU   	threadingThreadstartr   r   r   join)rL   rw   server_sockr   r   trv   s   `     @rK   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 )	NTrN   r2   r}   Ftransport_streamcontextasdf)ry   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 rl   )rangerd   r   r   )r   ichunkCHUNKS
CHUNK_SIZEsents      rK   senderz'test_full_duplex_basics.<locals>.sender7  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>.receiver?  sh      (mmh&&..q99999999EH (mmh&&&&&&rM   )r   r   r;   rS   )r   r   r   rp   rq   rY   r   r  )
rL   r  r  r   rx   r  r  r  r  r  s
        @@@@@rK   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   rY   r  r   r   r   r   rL   r   s     rK   test_renegotiation_simpler   T  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   
   )ro   sleepuniform)r   rs    rK   r   z.test_renegotiation_randomized.<locals>.sleeperq  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>.cleart  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   )r.  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   順 ro   r%  r2  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  )ro   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   r4  r*  r9  r5  r6  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   )r.  r   r;   rS   )r2  r   r;   rS   )autojump_thresholdrandomRandomr   rY   r  r   r  r   r   rp   rq   r   r   )r!  rL   r?  r   r+  r  b1b2rx   r7  r;  r=  r*  r'  r   r   s               @@@@rK   test_renegotiation_randomizedrC  e  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   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      !! 	$ 	$..#########	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$rH  c                   K   t                      5  |                                  d {V  d d d            d S # 1 swxY w Y   d S rl   )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   rp   rq   )r   r   r   r   rx   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   rE  r;   rS   )r   rN  r   rN  r;   rS   )ro   r&   r   abcr   r   )rL   rE  rG  rK  rM  r   s   `     rK   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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          rZ  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          rZ  r[  r   s     rK   r   zNtest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStream.send_all
  r\  rM   r   rl   )r]  r   r;   r^  )rf   r`  r;   rS   )r   r   r   r   r   r   r   )rX  s   rK   
NotAStreamrT    st        	  	  	  	  	  	 	: 	: 	: 	:	: 	: 	: 	: 	:	: 	: 	: 	: 	: 	:rM   rb  xr}   rV  )r   r?   r@   r&   r   )rb  rJ   r   rX  s      @rK   1test_wait_writable_calls_underlying_wait_writablerd    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_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 )NrM   r   r   )r   rY   r*   r   r   r   r  s     rK   test_send_all_empty_stringrk  4  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 )Nrl  r   )r   )rL   rl  s   rK   stream_makerz,test_SSLStream_generic.<locals>.stream_makerH  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 rl   )r   r   rp   rq   rY   )r   serverrx   rL   s      rK   clogged_stream_makerz4test_SSLStream_generic.<locals>.clogged_stream_makerR  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   rl  ro  rr  s   ``  rK   test_SSLStream_genericrs  D  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]   )rx  rawtrailingr   r   seqs      rK   r   ztest_unwrap.<locals>.clientl  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  )rY   r   r   r]   r  )ry  rz  r{  r   r   s     rK   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   rp   rq   )	rL   r   rq  rx   r   r   r{  r   r   s	       @@@@@rK   test_unwrapr}  e  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 rl   )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   rp   rq   r   r   r   r   r*   r   r   r]   rY   )rL   r   r  r  rx   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           rl   KeyErrorr   rM   rK   bad_hookz3test_send_all_fails_in_the_middle.<locals>.bad_hook        rM   r   r   rS   c                      dz   d S rJ  r   )closeds   rK   
close_hookz5test_send_all_fails_in_the_middle.<locals>.close_hook  s    !rM   r   r;   r   r   )r   r   rp   rq   rY   r  rw  rx  r   r   r  r   r   r   r  receive_streamr   )rL   r   rq  rx   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   r}   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   rq  z!test_ssl_over_ssl.<locals>.server	  sd      **2........%7777'''''''''''rM   r   )r-   r&   rW   r   rp   rq   )
rL   client_0server_0client_1server_1r   rq  rx   r  r  s
           @@rK   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   rp   rq   rY   ro   r    r   r   r   r   r   r   rL   r   rq  rx   s       rK   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$  rM   r  )r   r   rp   rq   rY   ro   r    r   r   r   r   r   r   r  s       rK    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 )NTrN   r2   r}   )ry   r?   r@   r&   r   r   r   r   )rP   rL   r   s      rK   (test_ssl_handshake_failure_during_acloser  7  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           rJ  r  )client_orig_close_hooktransport_close_counts   rK   r  z4test_ssl_only_closes_stream_once.<locals>.close_hookV  s.    %111   "rM   r   r  )r   r   rp   rq   rY   r  rw  r  r   r   r  r   )rL   r   rq  rx   r  r  r  s        @@rK    test_ssl_only_closes_stream_oncer  J  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  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   rq  s    rK   receive_and_expect_errorzKtest_ssl_https_compatibility_disagreement.<locals>.receive_and_expect_errorq  s      ].// 	*7%%b)))))))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* w}.///////s   AA	A	r   )r   r   rp   rq   rY   r   )rL   r   rx   r  rq  s       @rK   )test_ssl_https_compatibility_disagreementr  d  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  r;   rS   c                 N   K                         d           d {V dk    sJ d S r  )r   )rq  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   rp   rq   r   )rL   r   r  rx   rq  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           rl   r  r   rM   rK   r  z2test_send_error_during_handshake.<locals>.bad_hook  r  rM   r  )
r   r  rw  rx  r   r   r  r*   rY   r   )rL   r   rq  r  s       rK    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 )
Nr;   r   c                    K   t           rl   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 rl   )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   rp   rq   r  rY   r   r   r   r*   )rL   rq  r  r  rx   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                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 rl   )r   r   r   r$   selected_alpn_protocolrL   r   rq  s      rK   ,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 rl   )r   r   rp   rq   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                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 rl   )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 rl   )r   r   rp   rq   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                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 rl   )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 rl   )r   r   rp   rq   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   rp   rq   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                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 )
Nri   r
   r;   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   r2   r}   )
rt   r   bindlistenr"   r%   rW   r!   getsocknamer&   )ri   listen_socksocket_listenerssl_listenertransport_client
ssl_clientrL   s         rK   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4rM   T)rl  )ri   r
   r;   r  )	accept_https_compatibler   rp   rq   rY   r   filenor    )rL   r  r  r  r  
ssl_serverrx   r   s   `       rK   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)r9   r:   r;   r<   )rP   rQ   rO   rR   r;   rS   )ri   r
   r;   rj   )rL   r   ri   r
   r;   rz   r   )rL   r   ri   r
   r;   r   )rL   r   r   r0   r   r0   r   r   r   r   r;   r   )rL   r   ri   r
   r;   r   )rL   r   ri   r
   r;   r   )rL   r   r;   rS   )r!  r/   rL   r   r;   rS   )rL   r   rl  rR   r;   rS   )
__future__r   osr   rm   r?   sysr   
contextlibr   r   r   	functoolsr   r   typingr	   r
   r   r   r   r   r   r   ro   r   trio._tests.pytest_pluginr   trio.abcr   r   trio.testingr   r   r   r   trustmeOpenSSLr   ImportErrorerror r   rt   _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._sslr0   
_core._runr1   CArC   issue_server_certr   r@   PurposeCLIENT_AUTHrW   rA   rB   r3   r   fixturerL   rh   ry   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   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 $ $ $ $ $ $               )++++++$$$$$$""""""((((((( 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> > > >0 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@   . 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   )
A4 4B9B		B