
    ,hP                    p   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" 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 j                         ZPePj                  d      ZR ej                  ej                  j                        ZV eWed      r eVxj                  ej                   z  c_X        eRj                  eV        ej                  ddd g!      dZd"       Z\d#d$	 	 	 	 	 d[d%Z]e	d\d]d&       Z^e		 d\	 	 	 	 	 d^d'       Z_ G d( d)e)      Z`d_d*Zae
	 d`	 	 	 	 	 dad+       Zbddd,	 	 	 	 	 	 	 	 	 	 	 dbd-Zceeef   Zdd.eed/<   	 	 dc	 	 	 	 	 	 	 ddd0Zfeeef   Zgd.eed1<   	 	 dc	 	 	 	 	 	 	 ded2Zhdfd3Zidfd4Zjdfd5Zkdfd6Zldfd7Zme-	 	 	 	 	 	 dgd8       Zndfd9Zod_d:Zpej                  j                  ej                  d;k(  xr ej                  d<k\  d=>      dfd?       Zudfd@Zvej                  j                  dAd#dBg      	 	 	 	 	 	 dhdC       ZxdfdDZydfdEZzdfdFZ{dfdGZ|dfdHZ}dfdIZ~d_dJZdfdKZdfdLZdfdMZdfdNZdfdOZdfdPZdfdQZdfdRZej                  j                  dSdT      dfdU       ZdfdVZdfdWZdfdXZdfdYZy# e#$ rZ$ ee$       Y dZ$[$dZ$[$ww xY w)i    )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paramsc                P   t        j                         }t        t         d      r$|xj                  t         j                   z  c_        t
        j                  |       | 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)requestctxs     V/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/trio/_tests/test_ssl.py
client_ctxrI   b   s~    

$
$
&Cs./4444  %}},,
	'	!!nn44
    Fexpect_failc                  	 t         j                  | dd      }|5  |j                          	 |j                  d      }|sQt	        t
        t        j                        5  |j                          d d d        	 d d d        | j                          y |j                  |       v# 1 sw Y   5xY w# 1 sw Y   nxY w	 |r]t        d      # t        t        f$ r Y | j                          y t        $ r&}|rt        d|       nt        d|        Y d }~nd }~ww xY w| j                          y # | j                          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)sockrL   wrappeddataexcs        rH   ssl_echo_serve_syncrb   t   s0   
,((!& ) 

  	&  "||D) "/33I3IJ )()	&L 	

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

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



sq   C
 AB0B$0	B09C
 B0$B-	)B00B95C
 =D- 
DD- +D3DD- DD- -D?c                 K   t        j                         \  }}t        j                         4 d {   }|5  |5  |j	                  t        j
                  j                  t        t        ||              t        t        j                  |             d d d        d d d        d d d       d {    y 7 # 1 sw Y   $xY w# 1 sw Y   (xY w7 # 1 d {  7  sw Y   y xY ww)NrK   )stdlib_socket
socketpairtrioopen_nursery
start_soon	to_threadrun_syncr   rb   r   tsocketfrom_stdlib_socket)rL   abnurserys       rH   ssl_echo_server_rawrp      s     ##%DAq  " 
> 
>g  	> 	>''+QKH
 w99!<==	> 	>	
> 
> 
>	> 	> 	> 	>	
> 
> 
> 
>ss   0C*B9C*CCAB;C C(C*3C4C*;C CC	CC*C'CC'#C*c                  K   t        |      4 d {   }t        || d       d d d       d {    y 7 &7 # 1 d {  7  sw Y   y xY ww)NrK   r2   server_hostname)rp   r"   )rI   rL   r^   s      rH   ssl_echo_serverrt      sZ     
 #{; U Utj:STTU U U U U U Us<   A:A>A<AAAAAAc                  P    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	y)PyOpenSSLEchoStreamNc                $   t        j                  t         j                        }ddlm}  |       }|j                  |j                  j                         t        t         d      rJ t        j                  |       t        j                  |d       | _        | j                  j                          t        j                         | _        t#               | _        t'        d      | _        t'        d      | _        |  |dd}|| _        y || _        y )Nr   )BindingOP_NO_TLSv1_4z2simultaneous calls to PyOpenSSLEchoStream.send_allz6simultaneous calls to PyOpenSSLEchoStream.receive_somec                   K   y wN )_s    rH   no_op_sleeperz3PyOpenSSLEchoStream.__init__.<locals>.no_op_sleeper   s	     s   r}   objectreturnNone)r   ContextSSLv23_METHOD,cryptography.hazmat.bindings.openssl.bindingrx   set_optionslibSSL_OP_NO_TLSv1_3r=   TRIO_TEST_1_CERTconfigure_cert
Connection_connset_accept_stater   
ParkingLot_lot	bytearray_pending_cleartextr$   _send_all_conflict_detector_receive_some_conflict_detectorsleeper)selfr   rG   rx   rn   r~   s         rH   __init__zPyOpenSSLEchoStream.__init__   s     kk#++, 	II//0 300'',^^C.


##%$$&	"+++;@,
( 0@D0
, 	? )DL"DLrJ   c                @   K   | j                   j                          y wr{   )r   bio_shutdownr   s    rH   aclosezPyOpenSSLEchoStream.aclose   s     

!s   c                6    | j                   j                         S r{   )r   renegotiate_pendingr   s    rH   r   z'PyOpenSSLEchoStream.renegotiate_pending   s    zz--//rJ   c                <    | j                   j                         sJ y r{   )r   renegotiater   s    rH   r   zPyOpenSSLEchoStream.renegotiate   s     zz%%'''rJ   c                   K   | j                   5  t        j                          d {    t        j                          d {    | j                  d       d {    d d d        y 7 B7 (7 # 1 sw Y   y xY ww)Nwait_send_all_might_not_block)r   r   
checkpointr   r   s    rH   r   z1PyOpenSSLEchoStream.wait_send_all_might_not_block  sp     -- 	@""$$$""$$$,,>???	@ 	@$$?	@ 	@sP   A<A0A*A0A,A0A.A0!	A<*A0,A0.A00A95A<c                8  K   t        d       | j                  5  t        j                          d {    t        j                          d {    | j	                  d       d {    | j
                  j                  |       	 | j	                  d       d {    	 | j
                  j                  d      }| xj                  |z  c_        K7 7 7 o7 <# t        j                  $ rA | j
                  j                          t        d| j
                  j                                Y nt        j                  $ r Y nw xY w| j                  j                          | j	                  d       d {  7   t        d       d d d        y # 1 sw Y   y xY ww)Nz  --> transport_stream.send_allsend_all   zrenegotiations:z(  <-- transport_stream.send_all finished)r]   r   r   r   r   r   	bio_writerS   r   r   ZeroReturnErrorshutdowntotal_renegotiationsWantReadErrorr   
unpark_allr   r`   s     rH   r   zPyOpenSSLEchoStream.send_all
  sK    /0-- 	>""$$$""$$$,,z***JJ  &ll:...	4::??1-D ++t3+ 	 %$* / ** JJ'')+TZZ-L-L-NO((  II  ",,z***<='	> 	> 	>s   FFCFCF'C(4FCF"C=FFFFAE,F.E FE1F4E75F	FFFc                  K   t        d       |d}| j                  5  	 t        j                          d {    t        j                          d {    	 | j	                  d       d {    	 | j
                  j                  |      | j	                  d       d {    t        d       cd d d        S 7 7 i7 Q7 # t        j                  $ rF | j                  rt        d| j                         	 | j                  dd }| j
                  j                  t        |             | j                  dd= n# t        j                  $ r 	 | j
                  j                  |      cY cY | j	                  d       d {  7   t        d       cd d d        S # t        j                  $ r1 t        d       | j                  j                          d {  7   Y nw xY wY n2w xY wt        d	       | j                  j                          d {  7   Y nw xY w# | j	                  d       d {  7   t        d       w xY w# 1 sw Y   y xY ww)
Nz#  --> transport_stream.receive_somei   receive_somez,  <-- transport_stream.receive_some finishedz
    tryingr   r   zparking (a)zparking (b))r]   r   r   r   r   r   bio_readr   r   r   sendbytesr   park)r   nbytes	next_bytes      rH   r   z PyOpenSSLEchoStream.receive_some!  s    34>F11 1	F0F&&(((&&(((,,~666(3#zz226:R ll>222DEc1	F 1	F((6V 3Q ,, &3  22 ",0G0GHA -1,C,CAa,H	 $

i0@ A, %)$;$;AaC$@% $'#4#4 ;!;+/::+>+>v+F$F" ll>222DEc1	F 1	F@ (+'8'8 !; %*-$8*.))..*:$:$:!;
 %;;, "-0"&)).."222M&3	 X ll>222DEc1	F 1	Fs'  IIH"B;H"B=H"-B?.H"3CI!C"I1
I;H"=H"?H"I7H;3D>.H>G)F,G)-H/H"0IFI
I;G#	GG#	 G)"G#	#G)&H(G))+HHHH"HH""I	7H:
8I		IIIr{   )r   'Callable[[str], Awaitable[None]] | Noner   r   r   r   )r   bool)r`   r   r   r   )r   
int | Noner   r   )
__name__
__module____qualname__r   r   r   r   r   r   r   r|   rJ   rH   rv   rv      s@     <@+#8+# 
+#Z"0(
@>.5FrJ   rv   c                    K   	 	 	 	 	 	 	 	 	 	 dd}  | dddd       d {     | dddd       d {     | dddd       d {     | dddd       d {    y 7 >7 -7 7 w)	Nc                  K   t               }t        t        t        j                  d            5  t        j
                         4 d {   } |j                  t        ||       g|   |j                  t        ||      g|  d d d       d {    d d d        y 7 W7 # 1 d {  7  sw Y   xY w# 1 sw Y   y xY ww)Nsimultaneous)rv   r   r   r   BusyResourceErrorrg   rh   getattr)func1args1func2args2sro   s         rH   do_testzDtest_PyOpenSSLEchoStream_gives_resource_busy_errors.<locals>.do_test`  s       !!8!8.IJ 	>))+ > >w"""71e#4=u="""71e#4=u=> >	> 	>> > > > >	> 	>sd   .CB:	B!
B:;B%B:B#B:	C!B:#B:%B7	+B.,B7	3B::C?Cr   )   xr   r|   r   )r   )
r   strr   tuple[object, ...]r   r   r   r   r   r   r|   )r   s    rH   3test_PyOpenSSLEchoStream_gives_resource_busy_errorsr   Y  s     
>
>!
> 
> "	
>
 

> *gz7
;;;
*g'F
KKK
'
'
	   .$
=== <K >sC   A&AA&A A&A"A&A$A& A&"A&$A&c              #  D   K   t        |      }t        || d       y w)Nr   r2   rr   )rv   r"   )rI   r   fakesocks      rH   virtual_ssl_echo_serverr   w  s"     
 #73H
Hj:S
TTs    client_kwargsserver_kwargsc               ^    |i }|i }t        || fddi|}t        |t        fddi|}||fS )Nrs   r2   rN   T)r"   rP   )rI   client_transportserver_transportr   r   
client_ssl
server_ssls          rH   ssl_wrap_pairr     sq      2 	J   	J z!!rJ   r.   MemoryStapledStreamc                <    t               \  }}t        | ||||      S Nr   )r)   r   rI   r   r   r   r   s        rH   ssl_memory_stream_pairr     s/     *<)=&&## rJ   MyStapledStreamc                <    t               \  }}t        | ||||      S r   )r(   r   r   s        rH   ssl_lockstep_stream_pairr     s/     *>)?&&## rJ   c                  K   t        |       4 d {   }|j                  rJ |j                  d       d {    |j                  d       d {   dk(  sJ |j	                          d {    d d d       d {    t        d      4 d {   }t        j                         }t        ||d      }|j                  rJ t        j                  t              5 }|j                  d       d {    d d d        t        j                  j                  t        j                        sJ d d d       d {    t        d      4 d {   }t        || d      }|j                  rJ t        j                  t              5 }|j                  d       d {    d d d        t        j                  j                  t        j                         sJ d d d       d {    y 7 7 7 7 7 ~# 1 d {  7  sw Y   xY w7 7 "# 1 sw Y   "xY w7 # 1 d {  7  sw Y   xY w7 7 # 1 sw Y   xY w7 d# 1 d {  7  sw Y   y xY ww)Nr   r   TrK   r2   rr   ztrio-test-2.example.org)rt   rN   r   r   r   rp   r;   r<   r"   pytestraisesr   
isinstancevalue	__cause__SSLErrorCertificateError)rI   r   r^   bad_client_ctxexcinfos        rH   test_ssl_client_basicsr     s    z*  a== jj^^A&&$..hhj	  #t4 A A335dN<UV== ]]./ 	#7**T"""	#'--113<<@@A A #t4 I IdJ8QR== ]]./ 	#7**T"""	#'--1133G3GHHI I I!&	   A
 #	# 	#	A A A AI #	# 	#I I I IsQ  I'G1I'#H G4H G7H /G:0H 4I'?G= I'HI'A
H+"H7H8H<8H+4I'?H) I'I I'6II#I$I(8I I'+I,I'4H 7H :H =I' HH	H	I'HH&	!H+)I'+H=1H42H=9I'II		II'I$II$ I'c                   K   t        j                         \  }5  |5  t        j                  |      }t	        t        |      t        d      }|j                  sJ d
 fd}t        j                  |      }|j                          |j                  d       d {   dk(  sJ |j                  d       d {    |j                  d       d {   dk(  sJ |j                  d       d {   d	k(  sJ |j                          d {    |j                          d d d        d d d        y 7 7 {7 d7 H7 -# 1 sw Y   xY w# 1 sw Y   y xY ww)NTrN   c                     j                  d      5 } | j                  d       | j                  d      dk(  sJ | j                  d       | j                          d d d        y # 1 sw Y   y xY w)Nr2   rr   r   r      y   z)rQ   rX   rS   rV   )client_sockrm   rI   s    rH   clientz&test_ssl_server_basics.<locals>.client  st    '' 9 (  % ##D)"''*d22##D)""$% % %s   A	A''A0)targetr   r   r   r   rJ   r   )rd   re   rk   rl   r"   r   rP   rN   	threadingThreadstartr   r   r   join)rI   rn   server_sockr   r   trm   s   `     @rH   test_ssl_server_basicsr     s3    ##%DAq	
 A 003$%

  +++	% F+		%22155==''---%22155==%22155<<%%'''	9  , 6-55'5   s   EEB E!D9"E?D; ED=E6D?7EEE(E0	E9E;E=E?EEE	EEEc                  K   t        d      4 d {   }| }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        dt        |      v sJ dt        |      v sJ t        j                  t              5  d|_        d d d        t        j                  t              5  d|_        d d d        ||_        |j
                  |u sJ t        j                  t              5 }|j                          d {    d d d        t        j                   j"                  t        j$                        sJ d d d       d {    y 7 # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w7 u# 1 sw Y   txY w7 ;# 1 d {  7  sw Y   y xY ww)	NTrK   r2   rr   Ftransport_streamcontextasdf)rp   r;   r<   r"   r   r   rN   rs   r   r   AttributeError
asfdasdfsadirr   rR   r   r   r   r   )rI   r^   good_ctxbad_ctxr   r   s         rH   test_attributesr    s    "t4 !A !A,,.dH6OP!!T)) yyH$$}}%%  $===]]>* 	LL	 "SV++CF""
 ]]>* 	! AM	!]]>* 	' &A	' 	yyG##]]./ 	#7.."""	#'--113<<@@C!A !A !A	 		! 	!	' 	' #	# 	#?!A !A !A !As   G;F.G;B G&F1$?G&#F>+!G&G
8G&G G!G%8G&G;(G$)G;1F;	6G&>G	G&
G	G&GG!	G&$G;&G8,G/-G84G;c                  	K   ddz  t               	t               d	fd}dfd}t        |       4 d {   }t        j                         4 d {   }|j	                  ||       |j	                  ||       |j	                  |j
                         |j	                  |j
                         d d d       d {    |j                          d {    d d d       d {    t        	      t              cxk(  rk(  sJ  J 	k(  sJ y 7 7 7 Z# 1 d {  7  sw Y   jxY w7 Y7 K# 1 d {  7  sw Y   [xY ww)N   i   c                   K   t              D ]:  }t        |       t        |gz        }|z  | j                  |       d {    < y 7 wr{   )ranger]   r   r   )r   ichunkCHUNKS
CHUNK_SIZEsents      rH   senderz'test_full_duplex_basics.<locals>.senderP  sR     v 	$A!H1#
*+EEMD**U###		$ $s   AAAAc                   K   t              k  r1| j                  dz         d {   }|z  t              k  r0y y 7 w)Nr   )lenr   )r   r  r
  EXPECTEDreceiveds     rH   receiverz)test_full_duplex_basics.<locals>.receiverX  sC     (mh&..q99EH (mh&9s   &AAAA)r   r   r   r   )r   rt   r   rg   rh   rR   r   r  )
rI   r  r  r   ro   r	  r
  r  r  r  s
        @@@@@rH   test_full_duplex_basicsr  H  s7    FJ
"H;D{H$ z* 	 	a%%' 	/ 	/7vq)x+ q~~.q~~.	/ 	/ hhj	 	 t9H111118		/ 	/ 	/ 	/ 	/ 		 	 	 	s   =ED"EE!D$"E%AD( ED&E#D=$E(E3D?4/E$E&E(D:	.D1/D:	6E?EEE
EEc                  K   t        |       5 }|j                          d {    |j                  j                          |j	                  d       d {    |j                  d       d {   dk(  sJ |j	                  d       d {    |j                  d       d {   dk(  sJ |j                          d {    d d d        y 7 7 |7 e7 I7 27 # 1 sw Y   y xY ww)N   ar      b)r   rR   r   r   r   r   r   rI   r   s     rH   test_renegotiation_simpler  m  s     	 	, nn	&&(jj^^A&&$.. jj^^A&&$..hhj & 	& s   C(CC2CCC.C/CCC%C&CCC	C(CCCCCCC%!C(c           	     	  K   d| _         dd l}|j                  d      dfd}dfd}dfddfdt        ||      5 j	                          d {     d       d {    j
                  j                           d       d {     |        d {    t        d      D ]  }t        |d	z  g      }t        d
|z  d	z  g      }j
                  j                          t        j                         4 d {   }|j                  |       |j                  |       d d d       d {    t        j                         4 d {   }|j                  |       |j                  |       d d d       d {     |        d {     t        d      D ]  }t        |d	z  g      }t        d
|z  d	z  g      } |       d {    j
                  j                           |       d {    t        j                         4 d {   }|j                  |       |j                  |       d d d       d {     |        d {     	 d d d        dd}	dfd}
t        ||	      5  d       d {    j
                  j                          t        j                         4 d {   }|j                  d       |j                  |
       d d d       d {     |        d {    j                          d {    d d d        dd}t        ||      5  d       d {    j
                  j                          t        j                         4 d {   }|j                  d       |j                  j                         d d d       d {     |        d {    j                          d {    d d d        y 7 7 7 q7 e7 7 # 1 d {  7  sw Y   xY w7 7 # 1 d {  7  sw Y   xY w7 7 h7 A7 '7 # 1 d {  7  sw Y   xY w7  # 1 sw Y   xY w7 7 7 y# 1 d {  7  sw Y   xY w7 7 n# 1 sw Y   nxY w7 T7  7 # 1 d {  7  sw Y   xY w7 7 # 1 sw Y   y xY ww)Nr   c                l   K   t        j                  j                  dd             d {    y 7 w)Nr   
   )rf   sleepuniform)r}   rs    rH   r   z.test_renegotiation_randomized.<locals>.sleeper  s$     jj1b)***s   )424c                 R  K   j                   j                         rat               5   d       d {    d d d        t               5    d       d {    d d d        j                   j                         rat        d       y 7 V# 1 sw Y   UxY w7 A# 1 sw Y   @xY ww)N   -z-- clear --)r   r   r&   r]   )expectr   r   s   rH   clearz,test_renegotiation_randomized.<locals>.clear  s       446#% !4j  !#% #Tl""#   446
 	m !! ! ## #s[   %B'BBBB'BBB"B'?B'BBB'BB$ B'c                   K   j                   j                  d       d {    t        d|        t               5  j	                  |        d {    d d d        y 7 =7 # 1 sw Y   y xY ww)Nz
outer sendzcalling SSLStream.send_all)r   r   r]   r&   r   )byter   s    rH   r   z+test_renegotiation_randomized.<locals>.send  si       ((666*D1! 	#**T"""	# 	# 	7 #	# 	#s8   A0A A0A$A"A$
A0"A$$A-)A0c                  K   j                   j                  d       d {    t        d|        t        |       dk(  sJ t	               5  j                  d       d {   | k(  sJ 	 d d d        y 7 S7 # 1 sw Y   y xY ww)Nr   z)calling SSLStream.receive_some, expectingr   )r   r   r]   r  r&   r   )expectedr   s    rH   r   z-test_renegotiation_randomized.<locals>.expect  s       ((22298D8}!!! 	7**h666	7 	7 	3 +	7 	7s9   BA6*BA:"A8#	A:-
B8A::B?Br   r  d      r   c                V   K   | dk(  rt        j                  d       d {    y y 7 w)Nr   順 rf   r  methods    rH   sleeper_with_slow_send_allzAtest_renegotiation_randomized.<locals>.sleeper_with_slow_send_all  s(     Z**V$$$  $s   )')c                    K   t        j                  d       d {     j                          d {    y 7 7 w)N  )rf   r  r   r   s   rH   sleep_then_wait_writablez?test_renegotiation_randomized.<locals>.sleep_then_wait_writable  s4     jj--/// 	/s   >:><>>r   c                   K   | dk(  rt        j                  d       d {    y | dk(  rt        j                  d       d {    y y 7 )7 w)Nr   r)  r   r/  r*  r+  s    rH   *sleeper_with_slow_wait_writable_and_expectzQtest_renegotiation_randomized.<locals>.sleeper_with_slow_wait_writable_and_expect  sI     44**V$$$x**T"""   %"s!   AA
"AAAAr   r   )r#  r   r   r   )r%  r   r   r   )r,  r   r   r   )autojump_thresholdrandomRandomr   rR   r   r   r  r   r   rg   rh   r   r   )
mock_clockrI   r5  r   r!  r  b1b2ro   r-  r1  r3  r   r  r   r   s               @@@@rH   test_renegotiation_randomizedr:  ~  se     %&J!aA+#7 
!W	= nn4j	&&(Tlgs 
	ADz"BQ$'(B**,))+ / /w""4,""62./ / ))+ - -w""62.""4,- - 'MM
	 s 		ADz"BQ$'(Br(NN**,*))+ - -w""62.""4,- - 'MM		+N%0 
!5O	P 	TU4j	&&(%%' 	9 	97vt,78	9 	9 ghhj	# 
!:
  
4j	&&(%%' 	@ 	@7vt,q>>?	@ 	@ ghhj M 	/ / / / /- - - - - 
 - - - - - = f 		9 	9 	9 	9 	9 		 	2 		@ 	@ 	@ 	@ 	@ 	 s  AS
Q/PQ/.P/)Q/P	Q/'P(A%Q/P
Q/%P6Q/PQ/P+
Q/"%P1Q/P.Q/!Q"A Q/"Q
#)Q/QQ/)Q
*Q/-%QQ/QQ/,Q,-Q/4SR!Q< 6R!Q?R!$R>R!	R
R!RR!0R1R!5SSR.6SR1S.R6SR4SSS5S6S:	SQ/Q/	Q/Q/Q/Q/P(PP(#	Q/.Q/1Q7P:8Q?	Q/
Q/Q/Q/Q/Q)QQ)$	Q//Q94S<R!?R!R!R	RR		R!R!!R+&S.S1S4S6S	<R?=S	SSSSc                   K   t         j                  t         j                  t         j                  j                  t         j                  j
                  f      }dd}dd}dd}	 	 	 	 	 	 d fd} |||       d {     |||       d {     |||       d {     |||       d {    y 7 87 )7 7 w)Nc                   K   t               5  | j                  d       d {    d d d        y 7 # 1 sw Y   y xY ww)Nr   )r&   r   r0  s    rH   do_send_allz.test_resource_busy_errors.<locals>.do_send_all  s;     ! 	#**T"""	# 	#"	# 	#    >202	>2;>c                   K   t               5  | j                  d       d {    d d d        y 7 # 1 sw Y   y xY wwNr   )r&   r   r0  s    rH   do_receive_somez2test_resource_busy_errors.<locals>.do_receive_some  s;     ! 	$..###	$ 	$#	$ 	$r>  c                ~   K   t               5  | j                          d {    d d d        y 7 # 1 sw Y   y xY wwr{   )r&   r   r0  s    rH    do_wait_send_all_might_not_blockzCtest_resource_busy_errors.<locals>.do_wait_send_all_might_not_block  s;     ! 	411333	4 	43	4 	4s    =1/1	=1:=c                n  K   t              \  }}t        t        t        j                  d            5  t        j
                         4 d {   }|j                  | |       |j                  ||       d d d       d {    d d d        y 7 A7 # 1 d {  7  sw Y   xY w# 1 sw Y   y xY ww)Nzanother task)r   r   r   r   r   rg   rh   )r   r   r   r}   ro   rI   s        rH   r   z*test_resource_busy_errors.<locals>.do_test
  s      (
31!8!8.IJ 	-))+ - -w""5!,""5!,- -	- 	-- - - - -	- 	-sd   2B5B)BB)%B7B)BB)	B5B)B)B&	BB&	"B))B2.B5)r   Sr   r   )r   Callable[[S], Awaitable[None]]r   rF  r   r   )rf   r"   r   abcr   r   )rI   rE  r=  rA  rC  r   s   `     rH   test_resource_busy_errorsrH    s     >>488..0F0FFGA#$4----- 
- +{
+++
/?
333
+?
@@@
24T
UUU ,3@UsH   A;B?>B7?B?B9B? B;!B?1B=2B?9B?;B?=B?c                    K   g  G fddt               } t        j                         }t         |        |d      }|j	                          d {    dgk(  sJ y 7 w)Nc                  4    e Zd Zd fdZddZdddZd	dZy)
Etest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStreamc                0   K   j                  d       y w)Nok)append)r   records    rH   r   zctest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStream.wait_send_all_might_not_block  s     MM$   c                    K   t        d      wNzShould not get calledrE   r   s    rH   r   zLtest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStream.aclose"        !899   Nc                    K   t        d      wrR  rS  )r   	max_bytess     rH   r   zRtest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStream.receive_some%  rT  rU  c                    K   t        d      wrR  rS  r   s     rH   r   zNtest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStream.send_all(  rT  rU  r   r{   )rW  r   r   zbytes | bytearray)r`   zbytes | bytearray | memoryviewr   r   )r   r   r   r   r   r   r   )rO  s   rH   
NotAStreamrK    s    	 	:	:	:rJ   rY  xrr   rM  )r   r;   r<   r"   r   )rY  rG   r   rO  s      @rH   1test_wait_writable_calls_underlying_wait_writabler[    s_     F:V : 
$
$
&C*,S9A

)
)
+++dV ,s   AA!AA!nt)   r  z)frequently fails on Windows + Python 3.10)reasonc                \  K   t        |       4 d {   }t               5  |j                          d {    d d d        t               5  |j                          d {    d d d        t               5  |j                          d {    d d d        t               5  |j	                  d       d {    d d d        t               5  |j                  d       d {    d d d        t               5  |j                  d       d {    d d d        t               5  |j                  d       d {    d d d        t               5  |j                          d {    d d d        d d d       d {    t        |       4 d {   }|j                          d {    t               5  |j                          d {    d d d        d d d       d {    y 7 7 # 1 sw Y   xY w7 # 1 sw Y   xY w7 # 1 sw Y   xY w7 g# 1 sw Y   gxY w7 K# 1 sw Y   KxY w7 /# 1 sw Y   /xY w7 # 1 sw Y   xY w7 # 1 sw Y   xY w7 # 1 d {  7  sw Y   xY w7 7 7 # 1 sw Y   xY w7 # 1 d {  7  sw Y   y xY ww)Ns   xxxr   )rt   r&   rR   r   r   r   rV   r   r  s     rH   test_checkpointsr`  1  sU    
 z*  a! 	#.."""	#! 	#.."""	#! 	411333	4! 	%**V$$$	%! 	$..###	$  ! 	$..###	$! 	$..###	$! 	((*	' , z*  ann! 	((*	  -"	# 	# #	# 	# 4	4 	4 %	% 	% $	$ 	$ $	$ 	$ $	$ 	$ 	 	'   ,	 	   s  J,G+J,I.G1G.G1I.H G>!H%I.7HHHI."H!7H8H!<I.H1#H.$H1(I.:IH>II.&I;I<I I.I &I'I +I.3J,>I,?J,JJ,J*J+J9J	JJ	JJ,%J&J,.G11G;	6I.>HH	I.HH	I.H!!H+	&I..H11H;	6I.>II	I.II	I.I  I)	%I.,J,.J 4I75J <J,JJ		J	JJ,J)J J)%J,c                L  K   t        |       4 d {   }|j                          d {    t               5  |j                  d       d {    d d d        t               5  |j                  d       d {    d d d        |j                  d       d {    |j	                  d       d {   dk(  sJ |j                          d {    d d d       d {    y 7 7 7 # 1 sw Y   xY w7 ~# 1 sw Y   }xY w7 k7 T7 97 +# 1 d {  7  sw Y   y xY ww)NrJ   r   r   )rt   rR   r&   r   r   r   r  s     rH   test_send_all_empty_stringrb  R  s     z*  ann  ! 	"**S/!!	"! 	"**S/!!	"jj^^A&&$..hhj  
 "	" 	" "	" 	"&   s   D$C'D$DC)DC-C+C-D%C;:C9;C;?DDD4D	5DDDD$!D"D$)D+C--C6	2D9C;;D	 D	DDD$D!DD!D$https_compatibleTc                V    K   d fd}d fd}t        ||       d {    y 7 w)Nc                 0   K   t         didi      S w)Nrc  r   )r   )rI   rc  s   rH   stream_makerz,test_SSLStream_generic.<locals>.stream_makerg  s+      &-/?@-/?@
 	
rP  c                 .  K   t              \  } }t        j                         4 d {   }|j                  | j                         |j                  |j                         d d d       d {    | |fS 7 N7 
# 1 d {  7  sw Y   | |fS xY wwr{   )r   r   rg   rh   rR   )r   serverro   rI   s      rH   clogged_stream_makerz4test_SSLStream_generic.<locals>.clogged_stream_makerq  s      2*= %%' 	4 	47v223v223	4 	4 v~	4 	4 	4 	4 	4 v~sD   'BA9B7A=%B0A;1	B;B=BBB
B)r   Etuple[SSLStream[MemoryStapledStream], SSLStream[MemoryStapledStream]])r   =tuple[SSLStream[MyStapledStream], SSLStream[MyStapledStream]])r'   )rI   rc  rf  ri  s   ``  rH   test_SSLStream_genericrl  b  s$     

  |-A
BBBs   )')c                f  K   t        |       \  j                  j                  t               dfd}dfd}t        j                         4 d {   }|j                  |       |j                  |       d d d       d {    y 7 77 # 1 d {  7  sw Y   y xY ww)Nc                 (  K   j                          d {    j                  d       d {    j                  d       d {   dk(  sJ j                  d       d {     d      4 d {    j                  j                  } d j                  _        d d d       d {    j                  d       d {   dk(  sJ j
                  u sJ j                          d {   \  }}|u sJ |dk(  sJ j
                  J |j                  d       d {     j                  _        j                  j	                          d {    y 7 N7 87 "7 7 7 # 1 d {  7  sw Y   xY w7 7 7 a7 0w)Nr   r   r   r   r   rJ      trailing)rR   r   r   send_streamsend_all_hookr   rV   )rq  rawtrailingr   r   seqs      rH   r   ztest_unwrap.<locals>.client  s    %%'''!!$''',,Q//477!!$'''
 q6 	> 	>,88FFM9=((6	> 	>  ,,Q//366**.>>>(//11X&&&3**22ll;''' 6C$$2**88:::1 	('/'
	> 	> 	> 	> 	> 0 2 	(
 	;s   FE%FE(F	E+
F'E.(F8E19F<(E5$F/E30FF
	,F5F66F,F-2FF F(F+F.F1F3F5F;E><FFFFFc                   K   j                          d {    j                  d       d {   dk(  sJ j                  d       d {    j                  d       d {   dk(  sJ  d      4 d {    j                          d {   \  } }d d d       d {     u sJ dk(  sJ j                  J y 7 7 7 ~7 g7 S7 =7 ,# 1 d {  7  sw Y   <xY ww)Nr   r   r   r   ro  )rR   r   r   rV   r   )rr  rs  rt  r   r   s     rH   rh  ztest_unwrap.<locals>.server  s     %%''',,Q//477!!$''',,Q//477
 q6 	6 	6","3"3"55MC	6 	6&&&;&&**222 	(/'/
	65	6 	6 	6 	6s   C,C	C,CC,CC,'C(C,=C>C,CCCC,(C)!C,C,C,C,C,CC,C)C C)%C,r   )r   r   r%   r   rg   rh   )	rI   r   rh  ro   r   r   rt  r   r   s	       @@@@@rH   test_unwraprv    s     3J?J
!22!22
+C;63 !!# # #w6"6"# # # # # # #sH   AB1 B!B1$#BB1BB1B1B."B%#B.*B1c                  K   t        |       \  j                  }dfd}dfd}t        j                         4 d {   }|j	                  |       |j	                  |       d d d       d {    t        j                  t              5  |j                  d       d {    d d d        t               5  j                          d {    d d d        t               5  j                          d {    d d d        t        j                  t              5  j                  d       d {    d d d        t        j                  t              5  j                  d       d {   dk(  sJ 	 d d d        t        j                  t              5  j                          d {    d d d        t        j                  t              5  j                          d {    d d d        t        |       \  dfd}t        j                         4 d {   }|j	                  j                         |j	                  |       d d d       d {    y 7 &7 # 1 d {  7  sw Y   xY w7 # 1 sw Y   xY w7 # 1 sw Y   xY w7 # 1 sw Y   xY w7 |# 1 sw Y   |xY w7 Q# 1 sw Y   KxY w7 !# 1 sw Y   !xY w7 # 1 sw Y   xY w7 7 # 1 d {  7  sw Y   y xY ww)Nc                    K   t               5   j                          d {    d d d        y 7 # 1 sw Y   y xY wwr{   )r&   r   )r   s   rH   client_closerz-test_closing_nice_case.<locals>.client_closer  s<     ! 	&##%%%	& 	&%	& 	&s    >202	>2;>c                    K    j                  d       d {   dk(  sJ  j                  d       d {   dk(  sJ t               5   j                          d {    d d d        y 7 S7 77 # 1 sw Y   y xY wwNr  rJ   )r   r&   r   r   s   rH   server_closerz-test_closing_nice_case.<locals>.server_closer  sx     ,,R00C77,,R00C77! 	&##%%%	& 	& 10%	& 	&sI   A>A,A>A.A>
A2A0A2#
A>.A>0A22A;7A>s   123r  rJ   c                    K   t               5   j                  d       d {   dk(  sJ 	 d d d        t               5   j                          d {    d d d        y 7 ># 1 sw Y   7xY w7 # 1 sw Y   y xY wwr{  )r&   r   r   r|  s   rH   expect_eof_serverz1test_closing_nice_case.<locals>.expect_eof_server  s{     ! 	<#0044;;;	<! 	&##%%%	& 	& 5	< 	< &	& 	&sU   A>A$A"	A$A> A2A0A2	A>"A$$A-)A>0A22A;7A>r   )r   r   r   rg   rh   r   r   r   r   r&   r   r   rV   rR   )rI   r   ry  r}  ro   r  r   r   s         @@rH   test_closing_nice_caser    s     4J?J
!22&& !!# * *w=)=)* *
 
*	+ 0''///0 
	 "!!!"		 "!!!" 
*	+ *!!&)))*
 
*	+ 8,,R00C7778 
*	+ "!!!" 
*	+ (%%'''(
 4J?J
& !!# . .w:,,-,-. . .O* * * * * 	00 0
 	"" " 	"" "
 	** * 18 8 	"" " 	(( (. . . . .s  ?LI)L#I/*L5I,6LJ(J)J-L?JJJL*J(>J%?J(!L$J89J5:J8>!LK4K5	K?!L K4K5K9!LK'.K%/K'34L'K3(L+-K7L#K5$L,L/J5I86J=LJJLJJ"L%J((J2-L5J88K=LKKLKK"L%K''K0,L5L7L	=L >L	Lc                D  K   t        |       \  }}t        j                         4 d {   }|j                  |j                         |j                  |j                         d d d       d {    dd}||j
                  j                  _        t        j                  t              5  |j                  d       d {    d d d        t        j                  t              5  |j                          d {    d d d        ddfd}||j
                  j                  _        ||j
                  j                  _        |j!                          d {    dk(  sJ y 7 =7 # 1 d {  7  sw Y   
xY w7 # 1 sw Y   xY w7 # 1 sw Y   xY w7 Cw)Nc                    K   t         wr{   KeyErrorr|   rJ   rH   bad_hookz3test_send_all_fails_in_the_middle.<locals>.bad_hook          	r   r   c                      dz   y r@  r|   )closeds   rH   
close_hookz5test_send_all_fails_in_the_middle.<locals>.close_hook  s    !rJ   r   r   r   r   )r   r   rg   rh   rR   r   rp  rq  r   r   r  r   r   r   r  receive_streamr   )rI   r   rh  ro   r  r  r  s         @rH   !test_send_all_fails_in_the_middler    sc    +J7NFF!!# 0 0w6../6../0 0 9AF''5	x	  $ood###$ 
*	+ 5224445 F 6@F''28BF**5
--/Q;;30 0 0 0 0 	$$ $ 	55 5 s   'F E'F 7E,%F 0E*1<F -FFF!F (F<F=FAF FF *F ,E?2E53E?:F FF	F FFF c                  	K   t               \  }}t        || d      }t        |t        d      }t        || d      t        |t        d      	dfd}d	fd}t        j                         4 d {   }|j                  |       |j                  |       d d d       d {    y 7 77 # 1 d {  7  sw Y   y xY ww)Nr2   rr   Tr   c                    K    j                  d       d {     j                  d       d {   dk(  sJ y 7 #7 w)N   hir     bye)r   r   )client_2s   rH   r   z!test_ssl_over_ssl.<locals>.client(  s@     &&&**2..&888 	'.s   A <A >A A c                    K    j                  d       d {   dk(  sJ  j                  d       d {    y 7 #7 w)Nr  r  r  )r   r   )server_2s   rH   rh  z!test_ssl_over_ssl.<locals>.server,  s=     **2..%77''' /'s   A <A >A A r   )r)   r"   rP   r   rg   rh   )
rI   client_0server_0client_1server_1r   rh  ro   r  r  s
           @@rH   test_ssl_over_sslr    s     +-Hh1H
 :4@H1H
 :4@H9( !!# # #w6"6"# # # # # # #sH   A2C6B.7C:#B2C(B0)C0C2C8B;9C Cc                  K   t        |       \  }}t        j                         4 d {   }|j                  |j                         |j                  |j                         d d d       d {    t        j                  |       d {    t        j                  t              5  |j                  d       d {    d d d        t        j                  t              5  |j                  d       d {    d d d        |j                          d {    y 7 7 # 1 d {  7  sw Y   xY w7 7 {# 1 sw Y   zxY w7 N# 1 sw Y   MxY w7 <w)Nr  
   xxxxxxxxxx)r   r   rg   rh   rR   rf   r   r   r   r   r   r   r   rI   r   rh  ro   s       rH   test_ssl_bad_shutdownr  5  s"    +J7NFF!!# 0 0w6../6../0 0 
 
 
(((	*	+ &!!"%%%&	*	+ )ooi((() --/0 0 0 0 0 ) 	&& & 	)) ) s   'ED E7D$$E/D"0ED9E*D=?D; D=!E%E:E	;E?EEE"E$D6*D-+D62E;D==EE	EEEc                r  K   t        | ddiddi      \  }}t        j                         4 d {   }|j                  |j                         |j                  |j                         d d d       d {    t        j                  |       d {    |j                  d       d {   dk(  sJ t        j                  t              5  |j                  d       d {    d d d        |j                          d {    y 7 7 # 1 d {  7  sw Y   xY w7 7 x7 B# 1 sw Y   AxY w7 0w)Nrc  Tr   r   r  rJ   r  )r   r   rg   rh   rR   rf   r   r   r   r   r   r   r   r  s       rH    test_ssl_bad_shutdown_but_its_okr  F  s    +)40)40NFF !!# 0 0w6../6../0 0 
 
 
((($$R((C//	*	+ )ooi((() --/0 0 0 0 0 )(() ) s   .D7D
D77D+D76D7D7D#D7,D%-"D7D)$D'%D))D7D5D7D7D DD D7%D7'D))D2.D7c                 \  K   t        d      4 d {   } t        j                         }t        | |d      }t	        j
                  t              5  |j                          d {    d d d        d d d       d {    y 7 q7 # 1 sw Y   xY w7 # 1 d {  7  sw Y   y xY ww)NTrK   r2   rr   )rp   r;   r<   r"   r   r   r   r   )r^   rI   r   s      rH   (test_ssl_handshake_failure_during_acloser  Z  s     
 #t4  //1
dJ8QR ]]./ 	((*	   	 	   sn   B,BB,<BB	'B(B	,B4B,?B B,B		B	BB,B)B B)%B,c                J  K   t        |       \  }}t        j                         4 d {   }|j                  |j                         |j                  |j                         d d d       d {    |j
                  j                  j                  ddfd}||j
                  j                  _        t        j                  t              5  |j                          d {    d d d        dk(  sJ y 7 7 # 1 d {  7  sw Y   xY w7 -# 1 sw Y   ,xY ww)Nr   c                 0     J           dz  t         r@  r  )client_orig_close_hooktransport_close_counts   rH   r  z4test_ssl_only_closes_stream_once.<locals>.close_hooky  s"    %11 "rJ   r   r  )r   r   rg   rh   rR   r   rp  r  r   r   r  r   )rI   r   rh  ro   r  r  r  s        @@rH    test_ssl_only_closes_stream_oncer  m  s      ,J7NFF!!# 0 0w6../6../0 0 $44@@KK 6@F''2	x	  mmo A%%%%0 0 0 0 0" 	 so   'D#C<D#7D &D#1C>2A!D#D'D(D,D#>D# DD	DD#DD D#c                   K   t        | ddiddi      \  }t        j                         4 d {   }|j                  |j                         |j                  j                         d d d       d {    dfd}t        j                         4 d {   }|j                  |j
                         |j                  |       d d d       d {    y 7 7 f# 1 d {  7  sw Y   vxY w7 Z7  # 1 d {  7  sw Y   y xY ww)Nrc  FTr  c                    K   t        j                  t              5 } j                  d       d {    d d d        t	         j
                  j                        sJ y 7 .# 1 sw Y   -xY ww)Nr  )r   r   r   r   r#   r   r   )r   rh  s    rH   receive_and_expect_errorzKtest_ssl_https_compatibility_disagreement.<locals>.receive_and_expect_error  s^     ]]./ 	*7%%b)))	* w}}../// *	* 	*s+   A/A#A!A#*A/!A##A,(A/r   )r   r   rg   rh   rR   r   )rI   r   ro   r  rh  s       @rH   )test_ssl_https_compatibility_disagreementr    s     +)51)40NFF !!# 0 0w6../6../0 00 !!# 5 5w6==)345 5 50 0 0 0 05 5 5 5 5s   .DCD7C ,D7C8"DC5D-C9DC7DD C2&C)'C2.D7D9D?D DDc                (  K   t        | ddiddi      \  }dfd}t        j                         4 d {   }|j                  |j                         |j                  |       d d d       d {    y 7 A7 # 1 d {  7  sw Y   y xY ww)Nrc  Tr  c                 N   K    j                  d       d {   dk(  sJ y 7 
wr{  )r   )rh  s   rH   server_expect_clean_eofzEtest_https_mode_eof_before_handshake.<locals>.server_expect_clean_eof  s&     ((,,333,s   %#%r   )r   r   rg   rh   r   )rI   r   r  ro   rh  s       @rH   $test_https_mode_eof_before_handshaker    s     +)40)40NFF4 !!# 4 4w6==)234 4 4 4 4 4 4sD   4BA9B-A=(B3A;4B;B=BBBBc                  K   t        |       \  }}dd}||j                  j                  _        t	        j
                  t              5  t               5  |j                          d {    d d d        d d d        t	        j
                  t              5  t               5  |j                          d {    d d d        d d d        y 7 b# 1 sw Y   axY w# 1 sw Y   exY w7 /# 1 sw Y   .xY w# 1 sw Y   y xY ww)Nc                    K   t         wr{   r  r|   rJ   rH   r  z2test_send_error_during_handshake.<locals>.bad_hook  r  r  r  )
r   r   rp  rq  r   r   r  r&   rR   r   )rI   r   _serverr  s       rH    test_send_error_during_handshaker    s     ,Z8OFG 9AF''5	x	  (! 	(%%'''	(( 
*	+ (! 	(%%'''	(( ( (	( 	(( ( (	( 	(( (s   AC?	CC(C)C-C5!C?C3!C'5C%6C':C3	C?CC	CC"C?%C''C0	,C33C<8C?c                <  K   t        |       \  }dd}|j                  j                  _        dfd}t	        j
                         4 d {   }|j                  ||j                         |j                  |j                         d d d       d {    t        j                  t              5  t               5  j                          d {    d d d        d d d        y 7 7 T# 1 d {  7  sw Y   dxY w7 .# 1 sw Y   -xY w# 1 sw Y   y xY ww)Nc                    K   t         wr{   r  r|   rJ   rH   r  z5test_receive_error_during_handshake.<locals>.bad_hook  r  r  c                   K   t        j                  t              5  t               5  j	                          d {    d d d        d d d        | j                          y 7 %# 1 sw Y   $xY w# 1 sw Y   (xY wwr{   )r   r   r  r&   rR   cancel)cancel_scoper   s    rH   client_sidez8test_receive_error_during_handshake.<locals>.client_side  sh     ]]8$ 	,#% ,))+++,	, 	 ,, ,	, 	,sC   A<A0A$A"A$A0	A<"A$$A-	)A00A95A<r  )r  r1   r   r   )r   r   r  receive_some_hookr   rg   rh   r  rR   r   r   r   r&   )rI   rh  r  r  ro   r   s        @rH   #test_receive_error_during_handshaker    s     +J7NFF @HF**< !!# 0 0w;(<(<=6../0 0 
*	+ (! 	(%%'''	(( (	0 0 0 0 0 (	( 	(( (s   ADC)D8C-DC+D4D?DDDD 
D+D-C?3C64C?;DDD		DDDc                   t        |       \  }}t        j                  t              5  |j	                          d d d        t        j                  t              5  |j	                          d d d        y # 1 sw Y   <xY w# 1 sw Y   y xY wr{   )r   r   r   r    selected_alpn_protocolrI   r   rh  s      rH   ,test_selected_alpn_protocol_before_handshaker    ss    +J7NFF	)	* (%%'( 
)	* (%%'( (( (( (   A4B 4A= B	c                  K   t        |       \  }}t        j                         4 d {   }|j                  |j                         |j                  |j                         d d d       d {    |j                         J |j                         J |j                         |j                         k(  sJ y 7 7 N# 1 d {  7  sw Y   ^xY wwr{   )r   r   rg   rh   rR   r  r  s       rH   (test_selected_alpn_protocol_when_not_setr    s      ,J7NFF!!# 0 0w6../6../0 0 ((*22((*22((*f.K.K.MMMM0 0 0 0 0E   'CB<C7C $C/B>0AC>C CC	CCc                   t        |       \  }}t        j                  t              5  |j	                          d d d        t        j                  t              5  |j	                          d d d        y # 1 sw Y   <xY w# 1 sw Y   y xY wr{   )r   r   r   r    selected_npn_protocolr  s      rH   +test_selected_npn_protocol_before_handshaker    ss    +J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 {   }|j                  |j                         |j                  |j                         d d d       d {    |j                         J |j                         J |j                         |j                         k(  sJ y 7 7 N# 1 d {  7  sw Y   ^xY wwr{   )r   r   rg   rh   rR   r  r  s       rH   'test_selected_npn_protocol_when_not_setr    s      ,J7NFF!!# 0 0w6../6../0 0 '')11'')11'')V-I-I-KKKK0 0 0 0 0r  c                   t        |       \  }}t        j                  t              5  |j	                          d d d        t        j                  t              5  |j	                          d d d        y # 1 sw Y   <xY w# 1 sw Y   y xY wr{   )r   r   r   r    get_channel_bindingr  s      rH   )test_get_channel_binding_before_handshaker    ss    +J7NFF	)	* %""$% 
)	* %""$% %% %% %r  c                  K   t        |       \  }}t        j                         4 d {   }|j                  |j                         |j                  |j                         d d d       d {    |j                         J |j                         J |j                         |j                         k(  sJ y 7 7 N# 1 d {  7  sw Y   ^xY wwr{   )r   r   rg   rh   rR   r  r  s       rH   (test_get_channel_binding_after_handshaker    s     +J7NFF!!# 0 0w6../6../0 0 %%'33%%'33%%'6+E+E+GGGG0 0 0 0 0r  c                  K   t        |       \  }}t        j                         4 d {   }|j                  |j                         |j                  |j                         d d d       d {    |j                         J t        |j                                d|j                         d   v sJ y 7 7 I# 1 d {  7  sw Y   YxY ww)N)DNSr2   subjectAltName)r   r   rg   rh   rR   getpeercertr]   r  s       rH   test_getpeercertr  #  s     +J7NFF!!# 0 0w6../6../0 0 ''	&


-1C1C1EFV1WWWW0 0 0 0 0sE   'CB7C7B;$C/B90AC9C;CCC	Cc           	        K   	 d	 	 	 d fd} |        d {   \  }}}|4 d {    |j                          d {   }|4 d {    |j                  rJ t        j                         4 d {   }|j	                  |j
                         |j	                  |j
                         d d d       d {    d d d       d {    |j                          d {    |j                         dk(  sJ d d d       d {     |d       d {   \  }}}|j                          d {   }|j                  sJ t        |       d {    t        |       d {    t        |       d {    y 7 j7 ^7 I7 A7 7 # 1 d {  7  sw Y   xY w7 # 1 d {  7  sw Y   xY w7 7 # 1 d {  7  sw Y   xY w7 7 7 7 t7 cw)Nc                ,  K   t        j                         }|j                  d       d {    |j                  d       t	        |      }t        |t        |       }t        |j                           d {   }t        |d      }|||fS 7 c7 w)N)z	127.0.0.1r   r   rc  r2   rr   )
rk   r   bindlistenr   r!   rP   r   getsocknamer"   )rc  listen_socksocket_listenerssl_listenertransport_client
ssl_clientrI   s         rH   setupztest_SSLListener.<locals>.setup1  s      nn&/0001(5"-
 "1+2I2I2K!LL5


 L*44 	1 Ms"   )BBAB8B9BBTr  F)rc  r   r   zMtuple[tsocket.SocketType, SSLListener[SocketStream], SSLStream[SocketStream]])	accept_https_compatibler   rg   rh   rR   r   filenor   )rI   r  r  r  r  
ssl_serverro   r}   s   `       rH   test_SSLListenerr  0  s    !&55	V5* 38'M)Kz * *'..00
 	< 	<!333 ))+ < <w"":#:#:;"":#:#:;< <		< 	< !!###!!#r))* *$ ).t(D"DA|Z#**,,J'''
L
)))
J
'''
J
'''9 -:*0	<< < < < <		< 	< 	< 	< 	$* * * *$ #E, *''sV  G#FG#FG#G F	
GFG'F+6F
7F+:7F1F+<F=F+GF)G$G %G>G#	G
G#GG#6G7 G#GG#*G+G#=G!>G#G#	GGF+F+F&FF&"F+)G+F=	1F42F=	9GG#G
GGG#G#G#G#!G#)rF   zpytest.FixtureRequestr   zssl.SSLContext)r^   zstdlib_socket.socketrL   r   r   r   r  )rL   r   r   zAsyncIterator[SocketStream])rI   r   rL   r   r   z AsyncIterator[SSLStream[Stream]]r   r{   )rI   r   r   r   r   z(Iterator[SSLStream[PyOpenSSLEchoStream]])rI   r   r   r0   r   r0   r   dict[str, Any] | Noner   r  r   z/tuple[SSLStream[T_Stream], SSLStream[T_Stream]])NN)rI   r   r   +dict[str, str | bytes | bool | None] | Noner   r  r   rj  )rI   r   r   r  r   r  r   rk  )rI   r   r   r   )r7  r/   rI   r   r   r   )rI   r   rc  r   r   r   )
__future__r   osr   rd   r;   sysr   
contextlibr   r   r   	functoolsr   r   typingr	   r
   r   r   rf   r   trio._tests.pytest_pluginr   trio.abcr   r   trio.testingr   r   r   r   trustmeOpenSSLr   ImportErrorerror r   rk   _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   CAr?   issue_server_certr   r<   PurposeCLIENT_AUTHrP   r=   r>   r3   r   fixturerI   rb   rp   rt   rv   r   r   r   r   __annotations__r   r   r   r   r   r  r  r  r:  rH  r[  markskipifnameversion_infor`  rb  parametrizerl  rv  r  r  r  r  r  r  r  r  r  r  r  r  r  r  filterwarningsr  r  r  r  r  r|   rJ   rH   <module>r     se   " 	  
 
  D D      A . '  '  < % 2 8 < F F $  LL+$"(( wzz|112KL 'S''(?(?@

3*+37777   
 + h'9: ;( 1
1 1 
	1n > >"  UUU &U UKF& KF\><  8<UU4U .U U ,0+/""" "
 )" )" 5"6 "//?AT/T!U Y U
 BFAE> ?	$ +:}+DE E
 BFAE> ?	*I4B"AJ"J" www 
w wtVB. GGtO3((G36  	:  +eT];CCC 
C <CB3#l;.|>#<"(&&4504("(.(N' JHL	L%
H
X2(a(  '&&'s   !
L L5"L00L5