a
    xd                     @   s   d dl Z d dl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	 d dl
mZ d dlmZ d dlZd dlmZ d dlZddlm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lmZ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, e- Z.e./dZ0e1ej2j3Z4e5edrRe4 j6ej7 M  _6e08e4 ej9dddgddd Z:ddddZ;edd Z<edd  Z=G d!d" d"Z>d#d$ Z?e	d%d& Z@i i d'd(d)ZAd*d+ ZBd,d- ZCd.d/ ZDd0d1 ZEd2d3 ZFd4d5 ZGd6d7 ZHe&d8d9 ZId:d; ZJd<d= ZKejLjMe jNd>ko<ejOd?kd@dAdBdC ZPdDdE ZQejLRdFddGgdHdI ZSdJdK ZTdLdM ZUdNdO ZVdPdQ ZWdRdS ZXdTdU ZYdVdW ZZdXdY Z[dZd[ Z\d\d] Z]d^d_ Z^d`da Z_dbdc Z`ddde Zadfdg ZbejLcdhdidjdk Zddldm Zedndo Zfdpdq Zgdrds ZhdS )t    N)contextmanager)partial)SSL)asynccontextmanager   )_core)SocketStreamSocketListener)aclose_forcefully)ClosedResourceErrorBrokenResourceError)open_tcp_stream)socket)	SSLStreamSSLListenerNeedHandshakeError_is_eof)ConflictDetector)slow)assert_checkpoints	Sequencermemory_stream_pairlockstep_stream_paircheck_two_way_streamtrio-test-1.example.orgOP_IGNORE_UNEXPECTED_EOFmoduletls13tls12)Zscopeparamsc                 C   s`   t  }tt dr$| jt j M  _t| | jdv r<|S | jdkrTt jj	|_
|S ds\J d S )Nr   )defaultr   r   F)sslcreate_default_contexthasattroptionsr   TRIO_TEST_CAZconfigure_trustparam
TLSVersionTLSv1_2maximum_version)requestctx r,   K/var/www/html/Ranjet/env/lib/python3.9/site-packages/trio/tests/test_ssl.py
client_ctxG   s    




r.   Fexpect_failc             
   C   sd  zRzt j| ddd}| |  |d}|sttjf}z|  W nD |yZ   Y n4 tjy   t	j
jdks~t	jdkrtd Y n0 W d    W W |   d S || q$W d    n1 s0    Y  W nd ttfy   Y W |   d S  ty: } z*|rtd| ntd	|  W Y d }~nd }~0 0 |rJtd
W |   n
|   0 d S )NTF)server_sidesuppress_ragged_eofsi   cpython)      z\still an issue on recent python versions add a comment to https://bugs.python.org/issue32219z*ssl_echo_serve_sync got error as expected:z)ssl_echo_serve_sync got unexpected error:zfailed to fail?)
SERVER_CTXwrap_socketdo_handshakerecvBrokenPipeErrorr!   SSLZeroReturnErrorunwrapSSLWantWriteErrorsysimplementationnameversion_infopytestZfailclosesendallConnectionResetErrorConnectionAbortedError	ExceptionprintRuntimeError)sockr0   wrappeddata
exceptionsexcr,   r,   r-   ssl_echo_serve_syncY   sJ    



.

rO   c               
   K  s   t  \}}t 4 I d H }|b |> |tjjtt|fi |  t	t
|V  W d    n1 sl0    Y  W d    n1 s0    Y  W d   I d H  q1 I d H s0    Y  d S N)stdlib_socket
socketpairtrioopen_nursery
start_soonZ	to_threadZrun_syncr   rO   r   tsocketfrom_stdlib_socket)kwargsabnurseryr,   r,   r-   ssl_echo_server_raw   s    r\   c              	   K  sV   t f i |4 I d H &}t|| ddV  W d   I d H  qR1 I d H sH0    Y  d S Nr   server_hostname)r\   r   )r.   rX   rJ   r,   r,   r-   ssl_echo_server   s    r`   c                   @   sH   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 )PyOpenSSLEchoStreamNc                 C   s   t t j}ddlm} | }t|jdr8||jj tt drFJ t	
| t |d | _| j  t | _t | _td| _td| _|d u rdd }|| _n|| _d S )	Nr   )BindingSSL_OP_NO_TLSv1_3ZOP_NO_TLSv1_4z2simultaneous calls to PyOpenSSLEchoStream.send_allz6simultaneous calls to PyOpenSSLEchoStream.receive_somec                    s   d S rP   r,   _r,   r,   r-   no_op_sleeper   s    z3PyOpenSSLEchoStream.__init__.<locals>.no_op_sleeper)r   ContextZSSLv23_METHODZ,cryptography.hazmat.bindings.openssl.bindingrb   r#   libZset_optionsrc   TRIO_TEST_1_CERTconfigure_cert
Connection_connZset_accept_stater   Z
ParkingLot_lot	bytearray_pending_cleartextr   _send_all_conflict_detector_receive_some_conflict_detectorsleeper)selfrr   r+   rb   rZ   rf   r,   r,   r-   __init__   s*    


zPyOpenSSLEchoStream.__init__c                    s   | j   d S rP   )rl   Zbio_shutdownrs   r,   r,   r-   aclose   s    zPyOpenSSLEchoStream.aclosec                 C   s
   | j  S rP   )rl   renegotiate_pendingru   r,   r,   r-   rw      s    z'PyOpenSSLEchoStream.renegotiate_pendingc                 C   s   | j  sJ d S rP   )rl   renegotiateru   r,   r,   r-   rx      s    zPyOpenSSLEchoStream.renegotiatec                    sV   | j < t I d H  t I d H  | dI d H  W d    n1 sH0    Y  d S )Nwait_send_all_might_not_block)rp   r   
checkpointrr   ru   r,   r,   r-   ry      s    z1PyOpenSSLEchoStream.wait_send_all_might_not_blockc              	      s  t d | j t I d H  t I d H  | dI d H  | j| | dI d H  z| jd}W nH tj	y   | j
  t d| j  Y qY qH tjy   Y qY qH0 |  j|7  _qH| j  | dI d H  t d W d    n1 s0    Y  d S )Nz  --> transport_stream.send_allsend_all   zrenegotiations:z(  <-- transport_stream.send_all finished)rH   rp   r   rz   rr   rl   Z	bio_writer9   r   ZZeroReturnErrorshutdownZtotal_renegotiationsWantReadErrorro   rm   Z
unpark_all)rs   rL   r,   r,   r-   r{     s&    


zPyOpenSSLEchoStream.send_allc                    s  t d |d u rd}| j zzt I d H  t I d H  | dI d H  z6| j|W W | dI d H  t d W  d    S  tjy|   | j	r`t d| j	 z"| j	dd }| j
t| W n tjyP   z>| j|W  Y  Y W | dI d H  t d W  d    S  tjyJ   t d | j I d H  Y n0 Y n0 | j	dd= nt d	 | j I d H  Y q>0 q>W | dI d H  t d n| dI d H  t d 0 W d    n1 s0    Y  d S )
Nz#  --> transport_stream.receive_somei   receive_somez,  <-- transport_stream.receive_some finishedz
    tryingr   r|   zparking (a)zparking (b))rH   rq   r   rz   rr   rl   Zbio_readr   r~   ro   sendbytesrm   Zpark)rs   nbytesZ	next_byter,   r,   r-   r     sF    
)
z PyOpenSSLEchoStream.receive_some)N)N)
__name__
__module____qualname__rt   rv   rw   rx   ry   r{   r   r,   r,   r,   r-   ra      s   
9ra   c               
      s  t  } ttjh}t 4 I d H 2}|| jd || jd W d   I d H  ql1 I d H sb0    Y  W d    n1 s0    Y  dt|j	v sJ t  } ttjh}t 4 I d H 2}|| jd || j
 W d   I d H  q1 I d H s0    Y  W d    n1 s0    Y  dt|j	v s<J t  } ttjh}t 4 I d H 0}|| j
 || j
 W d   I d H  q1 I d H s0    Y  W d    n1 s0    Y  dt|j	v sJ t  } ttjl}t 4 I d H 4}|| jd || jd W d   I d H  qL1 I d H sB0    Y  W d    n1 sb0    Y  dt|j	v sJ d S )N   xZsimultaneousr|   )ra   rB   raisesr   BusyResourceErrorrT   rU   r{   strvaluery   r   )sexcinfor[   r,   r,   r-   3test_PyOpenSSLEchoStream_gives_resource_busy_errorsQ  s0    VXZ\r   c                 k   s"   t f i |}t|| ddV  d S r]   )ra   r   )r.   rX   Zfakesockr,   r,   r-   virtual_ssl_echo_serveru  s    r   client_kwargsserver_kwargsc                C   s4   t || fddi|}t |tfddi|}||fS )Nr_   r   r1   T)r   r6   )r.   client_transportserver_transportr   r   
client_ssl
server_sslr,   r,   r-   ssl_wrap_pair{  s     r   c                 K   s   t  \}}t| ||fi |S rP   )r   r   r.   rX   r   r   r,   r,   r-   ssl_memory_stream_pair  s    
r   c                 K   s   t  \}}t| ||fi |S rP   )r   r   r   r,   r,   r-   ssl_lockstep_stream_pair  s    
r   c              	      s  t | 4 I d H V}|jrJ |dI d H  |dI d H dksDJ | I d H  W d   I d H  q|1 I d H sr0    Y  tdd4 I d H }t }t||dd}|jrJ t	
t }|dI d H  W d    n1 s0    Y  t|jjtjsJ W d   I d H  q,1 I d H s"0    Y  tdd4 I d H }t|| dd}|jrZJ t	
t }|dI d H  W d    n1 s0    Y  t|jjtjsJ W d   I d H  q1 I d H s0    Y  d S )Nr   r|   Tr/   r   r^   ztrio-test-2.example.org)r`   r1   r{   r   rv   r\   r!   r"   r   rB   r   r   
isinstancer   	__cause__SSLErrorCertificateError)r.   r   rJ   Zbad_client_ctxr   r,   r,   r-   test_ssl_client_basics  s$    
8
.B0r   c              	      s  t  \ }  | t|}tt|tdd}|js>J  fdd}tj	|d}|
  |dI d H dksxJ |dI d H  |dI d H d	ksJ |dI d H d
ksJ | I d H  |  W d    n1 s0    Y  W d    n1 s0    Y  d S )NTr1   c                     s`   j  dd>} | d | ddks,J | d |   W d    n1 sR0    Y  d S )Nr   r^   r   r|      y   z)r7   rD   r9   r<   )Zclient_sockrY   r.   r,   r-   client  s    

z&test_ssl_server_basics.<locals>.client)targetr|   r   r   r       )rQ   rR   rV   rW   r   r   r6   r1   	threadingThreadstartr   r{   rv   join)r.   rZ   Zserver_sockr   r   tr,   r   r-   test_ssl_server_basics  s     


	r   c              	      s  t dd4 I d H }| }t }t||dd}|j|u s>J |j|u sLJ |jdksZJ |jdkshJ t	t
 |j W d    n1 s0    Y  dt|v sJ dt|v sJ t	t
 d|_W d    n1 s0    Y  t	t
 d|_W d    n1 s0    Y  ||_|j|u s0J t	t}| I d H  W d    n1 s`0    Y  t|jjtjsJ W d   I d H  q1 I d H s0    Y  d S )	NTr/   r   r^   Ftransport_streamcontextZasdf)r\   r!   r"   r   r   r   r1   r_   rB   r   AttributeErrorZ
asfdasdfsadirr   r8   r   r   r   r   )r.   rJ   Zgood_ctxZbad_ctxr   r   r,   r,   r-   test_attributes  s*    $$&.r   c              
      s*  d d  t  t   fdd}fdd}t| 4 I d H }t 4 I d H F}||| ||| ||j ||j W d   I d H  q1 I d H s0    Y  | I d H  W d   I d H  q1 I d H s0    Y  tt  krksn J ks&J d S )N   i   c                    s@   t  D ]2}t| t|g }|7 | |I d H  qd S rP   )rangerH   r   r{   )r   ichunk)CHUNKS
CHUNK_SIZEsentr,   r-   sender!  s
    z'test_full_duplex_basics.<locals>.senderc                    s.   t k r*|  d I d H }|7 q d S )Nr   )lenr   )r   r   )r   EXPECTEDreceivedr,   r-   receiver)  s    z)test_full_duplex_basics.<locals>.receiver)rn   r`   r   rT   rU   r8   rv   r   )r.   r   r   r   r[   r,   )r   r   r   r   r   r-   test_full_duplex_basics  s     68&r   c                    s   t | }| I d H  |j  |dI d H  |dI d H dksJJ |dI d H  |dI d H dksrJ | I d H  W d    n1 s0    Y  d S )N   ar|      b)r   r8   r   rx   r{   r   rv   r.   r   r,   r,   r-   test_renegotiation_simple>  s    

r   c                    s  d| _ dd l}|dfdd} fdd}fddfdd	 t||d
 I d H  dI d H  j   dI d H  | I d H  tdD ]}t|d g}td| d g}j  t	
 4 I d H 0}|| | | W d   I d H  q*1 I d H s 0    Y  t	
 4 I d H 0}| | || W d   I d H  q1 I d H sx0    Y  | I d H  qtdD ]}t|d g}td| d g}|I d H  j   |I d H  t	
 4 I d H 0}| | || W d   I d H  q:1 I d H s00    Y  | I d H  qW d    n1 s`0    Y  dd }	fdd}
t||	d
dI d H  j  t	
 4 I d H .}| d ||
 W d   I d H  q1 I d H s0    Y  | I d H   I d H  W d    n1 s*0    Y  dd }t||d
dI d H  j  t	
 4 I d H 0}| d |j W d   I d H  q1 I d H s0    Y  | I d H   I d H  W d    n1 s0    Y  d S )Nr   c                    s   t  ddI d H  d S )Nr   
   )rS   sleepuniformrd   )rr,   r-   rr   Z  s    z.test_renegotiation_randomized.<locals>.sleeperc                      s   j  rtt  dI d H  W d    n1 s40    Y  t   dI d H  W d    q 1 sh0    Y  q td d S )N   -z-- clear --)r   rw   r   rH   r,   )expectr   r   r,   r-   clear]  s    
,.z,test_renegotiation_randomized.<locals>.clearc                    sV    j dI d H  td|  t    | I d H  W d    n1 sH0    Y  d S )Nz
outer sendzcalling SSLStream.send_all)r   rr   rH   r   r{   )byter   r,   r-   r   e  s    
z+test_renegotiation_randomized.<locals>.sendc                    sn    j dI d H  td|  t| dks,J t (  dI d H | ksLJ W d    n1 s`0    Y  d S )Nr   z)calling SSLStream.receive_some, expectingr|   )r   rr   rH   r   r   r   )expectedr   r,   r-   r   k  s
    
z-test_renegotiation_randomized.<locals>.expect)rr   r   d      r   c                    s   | dkrt dI d H  d S )Nr{   順 rS   r   methodr,   r,   r-   sleeper_with_slow_send_all  s    zAtest_renegotiation_randomized.<locals>.sleeper_with_slow_send_allc                      s"   t dI d H    I d H  d S )N  )rS   r   ry   r,   r   r,   r-   sleep_then_wait_writable  s    z?test_renegotiation_randomized.<locals>.sleep_then_wait_writabler   c                    s6   | dkrt dI d H  n| dkr2t dI d H  d S )Nry   r   r   r   r   r   r,   r,   r-   *sleeper_with_slow_wait_writable_and_expect  s    zQtest_renegotiation_randomized.<locals>.sleeper_with_slow_wait_writable_and_expect)Zautojump_thresholdrandomRandomr   r8   r   rx   r   r   r   rT   rU   rv   ry   )Z
mock_clockr.   r   rr   r   r   b1b2r[   r   r   r   r,   )r   r   r   r   r-   test_renegotiation_randomizedP  sp    


::
:0	
8.
:r   c              
      s   fdd} fdd} fdd}t | \ }ttj`}t 4 I d H *}|| || W d   I d H  q1 I d H s0    Y  W d    n1 s0    Y  dt|jv sJ t | \ }ttjd}t 4 I d H ,}|| || W d   I d H  q,1 I d H s"0    Y  W d    n1 sB0    Y  dt|jv s`J t | \ }ttjd}t 4 I d H ,}|| || W d   I d H  q1 I d H s0    Y  W d    n1 s0    Y  dt|jv sJ t | \ }ttjd}t 4 I d H ,}|| || W d   I d H  qp1 I d H sf0    Y  W d    n1 s0    Y  dt|jv sJ d S )Nc                      s:   t     dI d H  W d    n1 s,0    Y  d S )Nr   )r   r{   r,   r   r,   r-   do_send_all  s    z.test_resource_busy_errors.<locals>.do_send_allc                      s:   t     dI d H  W d    n1 s,0    Y  d S Nr|   )r   r   r,   r   r,   r-   do_receive_some  s    z2test_resource_busy_errors.<locals>.do_receive_somec                      s8   t     I d H  W d    n1 s*0    Y  d S rP   )r   ry   r,   r   r,   r-    do_wait_send_all_might_not_block  s    zCtest_resource_busy_errors.<locals>.do_wait_send_all_might_not_blockzanother task)	r   rB   r   r   r   rT   rU   r   r   )r.   r   r   r   re   r   r[   r,   r   r-   test_resource_busy_errors  s6    
R
X
X
Xr   c                     sN   g  G  fddd} t  }t|  |dd}| I d H   dgksJJ d S )Nc                       s   e Zd Z fddZdS )zEtest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStreamc                    s     d d S )Nok)appendru   recordr,   r-   ry     s    zctest_wait_writable_calls_underlying_wait_writable.<locals>.NotAStream.wait_send_all_might_not_blockN)r   r   r   ry   r,   r   r,   r-   
NotAStream  s   r   xr^   r   )r!   r"   r   ry   )r   r+   r   r,   r   r-   1test_wait_writable_calls_underlying_wait_writable  s    r   nt)r4   r   z)frequently fails on Windows + Python 3.10)reasonc              	      sz  t | 4 I d H }t  | I d H  W d    n1 s>0    Y  t  | I d H  W d    n1 sr0    Y  t  | I d H  W d    n1 s0    Y  t   |dI d H  W d    n1 s0    Y  t   |dI d H  W d    n1 s0    Y  t   |dI d H  W d    n1 sL0    Y  t   |dI d H  W d    n1 s0    Y  t  | I d H  W d    n1 s0    Y  W d   I d H  q1 I d H s0    Y  t | 4 I d H \}| I d H  t  | I d H  W d    n1 s>0    Y  W d   I d H  qv1 I d H sl0    Y  d S )Ns   xxxr|   )r`   r   r8   ry   r{   r   r<   rv   r   r,   r,   r-   test_checkpoints  s*    ,,,.000\r   c              	      s   t | 4 I d H }| I d H  t   |dI d H  W d    n1 sL0    Y  t   |dI d H  W d    n1 s0    Y  |dI d H  |dI d H dksJ | I d H  W d   I d H  q1 I d H s0    Y  d S )Nr   r   r|   )r`   r8   r   r{   r   rv   r   r,   r,   r-   test_send_all_empty_string  s    ..r   https_compatibleTc                    s.    fdd} fdd}t ||I d H  d S )Nc                      s   t  dididS )Nr   r   )r   r,   r.   r   r,   r-   stream_maker/  s
    z,test_SSLStream_generic.<locals>.stream_makerc               	      sh   t  \} }t 4 I d H .}|| j ||j W d   I d H  q`1 I d H sV0    Y  | |fS rP   )r   r   rT   rU   r8   )r   serverr[   r.   r,   r-   clogged_stream_maker6  s
    6z4test_SSLStream_generic.<locals>.clogged_stream_maker)r   )r.   r   r   r   r,   r   r-   test_SSLStream_generic-  s    r   c              	      s   t | \  jjt  fdd}fdd}t 4 I d H *}|| || W d   I d H  q1 I d H s0    Y  d S )Nc               	      s     I d H   dI d H   dI d H dks6J  dI d H  d4 I d H & jj} d j_W d   I d H  q1 I d H s0    Y   dI d H dksJ  ju sJ   I d H \}}|u sJ |dksJ  jd u sJ |dI d H  | j_j I d H  d S )Nr   r|   r   r   r   r      trailing)r8   r{   r   send_streamsend_all_hookr   r<   )r   rawtrailing)r   r   seqr,   r-   r   M  s     2ztest_unwrap.<locals>.clientc               	      s     I d H  dI d H dks&J dI d H  dI d H dksNJ  d4 I d H (  I d H \} }W d   I d H  q1 I d H s0    Y  | u sJ |dksJ jd u sJ d S )Nr|   r   r   r   r   )r8   r   r{   r<   r   )r   r   )r   r   r   r,   r-   r   h  s    <ztest_unwrap.<locals>.server)r   r   r   r   rT   rU   r.   r   r   r[   r,   )r   r   r   r   r   r-   test_unwrapF  s    
r   c              	      s  t | \  j} fdd}fdd}t 4 I d H *}|| || W d   I d H  qz1 I d H sp0    Y  tt  |dI d H  W d    n1 s0    Y  t	   
 I d H  W d    n1 s0    Y  t	   
 I d H  W d    n1 s0    Y  tt  dI d H  W d    n1 sP0    Y  tt$  dI d H dk W d    n1 s0    Y  tt   I d H  W d    n1 s0    Y  tt   I d H  W d    n1 s0    Y  t | \ fdd	}t 4 I d H .}| j
 || W d   I d H  q|1 I d H sr0    Y  d S )
Nc                      s8   t     I d H  W d    n1 s*0    Y  d S rP   )r   rv   r,   )r   r,   r-   client_closer  s    z-test_closing_nice_case.<locals>.client_closerc                      sh     dI d H dksJ   dI d H dks0J t    I d H  W d    n1 sZ0    Y  d S Nr   r   )r   r   rv   r,   r   r,   r-   server_closer  s    z-test_closing_nice_case.<locals>.server_closers   123r   r   c                      sv   t  (  dI d H dks J W d    n1 s40    Y  t     I d H  W d    n1 sh0    Y  d S r   )r   r   rv   r,   r   r,   r-   expect_eof_server  s    6z1test_closing_nice_case.<locals>.expect_eof_server)r   r   r   rT   rU   rB   r   r   r{   r   rv   r   r<   r8   )r.   r   r   r   r[   r   r,   )r   r   r-   test_closing_nice_case|  s4    
4.,.04..r   c              	      s(  t | \}}t 4 I d H .}||j ||j W d   I d H  q`1 I d H sV0    Y  dd }||jj_t	t
  |dI d H  W d    n1 s0    Y  t	t | I d H  W d    n1 s0    Y  d  fdd}||jj_||jj_| I d H   dks$J d S )Nc                      s   t d S rP   KeyErrorr,   r,   r,   r-   bad_hook  s    z3test_send_all_fails_in_the_middle.<locals>.bad_hookr   r   c                      s    d7  d S r   r,   r,   closedr,   r-   
close_hook  s    z5test_send_all_fails_in_the_middle.<locals>.close_hookr   )r   r   rT   rU   r8   r   r   r   rB   r   r  r{   r   ry   r  receive_streamrv   )r.   r   r   r[   r  r  r,   r  r-   !test_send_all_fails_in_the_middle  s     6
.,

r  c              	      s   t  \}}t|| dd}t|tdd}t|| dd t|tdd fdd}fdd}t 4 I d H *}|| || W d   I d H  q1 I d H s0    Y  d S )	Nr   r^   Tr   c                      s,     dI d H   dI d H dks(J d S )N   hir      bye)r{   r   r,   )client_2r,   r-   r     s    z!test_ssl_over_ssl.<locals>.clientc                      s,     dI d H dksJ  dI d H  d S )Nr   r  r	  )r   r{   r,   )server_2r,   r-   r     s    z!test_ssl_over_ssl.<locals>.server)r   r   r6   r   rT   rU   )r.   Zclient_0Zserver_0Zclient_1Zserver_1r   r   r[   r,   )r
  r  r-   test_ssl_over_ssl  s    

r  c              	      s   t | \}}t 4 I d H .}||j ||j W d   I d H  q`1 I d H sV0    Y  t|I d H  tt	  |
dI d H  W d    n1 s0    Y  tt	  |dI d H  W d    n1 s0    Y  | I d H  d S )Nr   
   xxxxxxxxxx)r   r   rT   rU   r8   rS   r
   rB   r   r   r   r{   rv   r   r,   r,   r-   test_ssl_bad_shutdown  s    6..r  c              	      s   t | ddiddid\}}t 4 I d H .}||j ||j W d   I d H  qn1 I d H sd0    Y  t|I d H  |dI d H dksJ t	t
  |dI d H  W d    n1 s0    Y  | I d H  d S )Nr   Tr   r   r   r   r  )r   r   rT   rU   r8   rS   r
   r   rB   r   r   r{   rv   r   r,   r,   r-    test_ssl_bad_shutdown_but_its_ok  s    
6.r  c               	      s   t dd4 I d H d} t }t| |dd}tt | I d H  W d    n1 sX0    Y  W d   I d H  q1 I d H s0    Y  d S )NTr/   r   r^   )r\   r!   r"   r   rB   r   r   rv   )rJ   r.   r   r,   r,   r-   (test_ssl_handshake_failure_during_aclose  s
    r  c              	      s   t | \}}t 4 I d H .}||j ||j W d   I d H  q`1 I d H sV0    Y  |jjj d fdd}||jj_t	t
 | I d H  W d    n1 s0    Y  dksJ d S )Nr   c                      s      d7 t d S r   r   r,   Zclient_orig_close_hookZtransport_close_countr,   r-   r  7  s    z4test_ssl_only_closes_stream_once.<locals>.close_hookr|   )r   r   rT   rU   r8   r   r   r  rB   r   r  rv   )r.   r   r   r[   r  r,   r  r-    test_ssl_only_closes_stream_once+  s    6

,r  c              	      s   t | ddiddid\} t 4 I d H .}||j | j W d   I d H  qn1 I d H sd0    Y   fdd}t 4 I d H ,}||j || W d   I d H  q1 I d H s0    Y  d S )Nr   FTr  c                     sN   t t }  dI d H  W d    n1 s00    Y  t| jjsJJ d S )Nr   )rB   r   r   r   r   r   r   )r   r   r,   r-   receive_and_expect_errorQ  s    .zKtest_ssl_https_compatibility_disagreement.<locals>.receive_and_expect_error)r   r   rT   rU   r8   rv   )r.   r   r[   r  r,   r  r-   )test_ssl_https_compatibility_disagreementD  s    
6r  c              	      s|   t | ddiddid\}  fdd}t 4 I d H ,}||j || W d   I d H  qx1 I d H sn0    Y  d S )Nr   Tr  c                      s     dI d H dksJ d S r   )r   r,   r  r,   r-   server_expect_clean_eofc  s    zEtest_https_mode_eof_before_handshake.<locals>.server_expect_clean_eof)r   r   rT   rU   rv   )r.   r   r  r[   r,   r  r-   $test_https_mode_eof_before_handshake\  s    
r  c              	      s   t | \}}dd }||jj_ttD t  | I d H  W d    n1 sT0    Y  W d    n1 sr0    Y  tt	D t  | I d H  W d    n1 s0    Y  W d    n1 s0    Y  d S )Nc                      s   t d S rP   r   r,   r,   r,   r-   r  n  s    z2test_send_error_during_handshake.<locals>.bad_hook)
r   r   r   r   rB   r   r  r   r8   r   )r.   r   r   r  r,   r,   r-    test_send_error_during_handshakek  s    
Jr  c              	      s   t | \ }dd }| jj_ fdd}t 4 I d H 0}|||j ||j W d   I d H  q1 I d H sv0    Y  t	
tD t    I d H  W d    n1 s0    Y  W d    n1 s0    Y  d S )Nc                      s   t d S rP   r   r,   r,   r,   r-   r    s    z5test_receive_error_during_handshake.<locals>.bad_hookc              	      sj   t tD t    I d H  W d    n1 s60    Y  W d    n1 sT0    Y  |   d S rP   )rB   r   r  r   r8   cancel)cancel_scoper   r,   r-   client_side  s    Jz8test_receive_error_during_handshake.<locals>.client_side)r   r   r  Zreceive_some_hookr   rT   rU   r  r8   rB   r   r   r   )r.   r   r  r  r[   r,   r  r-   #test_receive_error_during_handshake|  s    
6r  c                    st   t | \}}tt |  W d    n1 s40    Y  tt |  W d    n1 sf0    Y  d S rP   )r   rB   r   r   selected_alpn_protocolr.   r   r   r,   r,   r-   ,test_selected_alpn_protocol_before_handshake  s
    &r!  c              	      s   t | \}}t 4 I d H .}||j ||j W d   I d H  q`1 I d H sV0    Y  | d u spJ | d u sJ | | ksJ d S rP   )r   r   rT   rU   r8   r  r   r,   r,   r-   (test_selected_alpn_protocol_when_not_set  s    6r"  c                    st   t | \}}tt |  W d    n1 s40    Y  tt |  W d    n1 sf0    Y  d S rP   )r   rB   r   r   selected_npn_protocolr   r,   r,   r-   +test_selected_npn_protocol_before_handshake  s
    &r$  zCignore: ssl module. NPN is deprecated, use ALPN instead:UserWarningzAignore:ssl NPN is deprecated, use ALPN instead:DeprecationWarningc              	      s   t | \}}t 4 I d H .}||j ||j W d   I d H  q`1 I d H sV0    Y  | d u spJ | d u sJ | | ksJ d S rP   )r   r   rT   rU   r8   r#  r   r,   r,   r-   'test_selected_npn_protocol_when_not_set  s    6r%  c                    st   t | \}}tt |  W d    n1 s40    Y  tt |  W d    n1 sf0    Y  d S rP   )r   rB   r   r   get_channel_bindingr   r,   r,   r-   )test_get_channel_binding_before_handshake  s
    &r'  c              	      s   t | \}}t 4 I d H .}||j ||j W d   I d H  q`1 I d H sV0    Y  | d uspJ | d usJ | | ksJ d S rP   )r   r   rT   rU   r8   r&  r   r,   r,   r-   (test_get_channel_binding_after_handshake  s    6r(  c              	      s   t | \}}t 4 I d H .}||j ||j W d   I d H  q`1 I d H sV0    Y  | d u spJ t|  d| d v sJ d S )N)DNSr   subjectAltName)r   r   rT   rU   r8   getpeercertrH   r   r,   r,   r-   test_getpeercert  s    6r,  c                    sz   fdd}| I d H \}}}|4 I d H  |  I d H }|4 I d H t |jrRJ t 4 I d H .}||j ||j W d   I d H  q1 I d H s0    Y  W d   I d H  q1 I d H s0    Y  | I d H  | dksJ W d   I d H  q1 I d H s0    Y  |ddI d H \}}}|  I d H }|jsLJ t|I d H  t|I d H  t|I d H  d S )Nc                     sf   t  }|dI d H  |d t|}t|tfi | }t|  I d H }t	| dd}|||fS )N)z	127.0.0.1r   r|   r   r^   )
rV   r   bindlistenr	   r   r6   r   getsocknamer   )rX   listen_sockZsocket_listenerssl_listenerZtransport_client
ssl_clientr   r,   r-   setup  s    
ztest_SSLListener.<locals>.setupT)r   )	acceptZ_https_compatibler   rT   rU   r8   rv   filenor
   )r.   r3  r0  r1  r2  Z
ssl_serverr[   re   r,   r   r-   test_SSLListener  s"    
`>r7  )iosrer>   rB   r   r   rQ   r!   
contextlibr   	functoolsr   ZOpenSSLr   Ztrustmeasync_generatorr   rS    r   Z_highlevel_socketr   r	   Z_highlevel_genericr
   r   r   Z_highlevel_open_tcp_streamr   rV   _sslr   r   r   r   Z_utilr   Z_core.tests.tutilr   Ztestingr   r   r   r   r   CAr%   Zissue_server_certri   r"   PurposeCLIENT_AUTHr6   r#   r$   r   rj   Zfixturer.   rO   r\   r`   ra   r   r   r   r   r   r   r   r   r   r   r   r   r   markZskipifr@   rA   r   r   Zparametrizer   r   r   r  r  r  r  r  r  r  r  r  r  r!  r"  r$  filterwarningsr%  r'  r(  r,  r7  r,   r,   r,   r-   <module>   s   

	
D

 $

E%
t*

6>



