
    ytf9                     p   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Zd dl	Z	d dl
Z	d dlZ	d dlmZmZ 	 d dlZej"                  d        Zej"                  d        Zd Zej"                  d        Zej"                  d        Zej"                  d	        Zej"                  d
        Zej2                  j5                  d       G d d             Z G d de      Zej2                  j;                  ej<                  dk(  xr ej>                  dk  d       G d de             Z d Z!y# e$ r dZY w xY w)    N)contextmanager)SkipTest	skip_pypyc                 6    t         j                  j                  S N)zmqasyncioContext)
event_loops    ]/var/www/html/software/conda/envs/higlass/lib/python3.12/site-packages/zmq/tests/test_auth.pyr
   r
      s    ;;    c                    t        | j                  d      j                               }t        j                  j                  |d      }t        j                  j                  |d      }t        j                  j                  |d      }t        j                  |       t        j                  |       t        j                  |       t
        j                  j                  |d      \  }}t
        j                  j                  |d      \  }}t        j                  |      D ]f  }	|	j                  d      st        j                  t        j                  j                  ||	      t        j                  j                  |d             h t        j                  |      D ]f  }	|	j                  d	      st        j                  t        j                  j                  ||	      t        j                  j                  |d             h ||fS )
z$Create CURVE certificates for a testcertscertificatespublic_keysprivate_keysserverclientz.key.z.key_secret)strjoinmkdirospathr   authcreate_certificateslistdirendswithshutilmove)
tmpdirbase_dirkeys_dirpublic_keys_dirsecret_keys_dirserver_public_fileserver_secret_fileclient_public_fileclient_secret_filekey_files
             r   create_certsr+      s    6;;w'--/0Hww||Hn5Hggll8];Oggll8^<OHHXHH_HH_-0XX-I-I(.** .1XX-I-I(.** JJx( V$KKXx0"'',,PS2T JJx( ]+KKXx0"'',,PS2T _--r   c                    t         j                  j                  | d      }t         j                  j                  | d      }t        j                  j                  |      \  }}t        j                  j                  |      \  }}||||fS )z)Return server and client certificate keyszserver.key_secretzclient.key_secret)r   r   r   r   r   load_certificate)r%   r'   r)   server_publicserver_secretclient_publicclient_secrets          r   
load_certsr2   C   sq    o7JKo7JK#&88#<#<=O#P M=#&88#<#<=O#P M=-EEr   c                     | \  }}|S r    r+   r$   r%   s      r   r$   r$   N       '3$O_r   c                     | \  }}|S r   r4   r5   s      r   r%   r%   T   r6   r   c                     t        |       S r   )r2   )r%   s    r   r   r   Z   s    o&&r   c                   K   | j                   }|j                          d{    d |j                          d{    y7 "7 w)z+pytest doesn't support async setup/teardownN)instanceasync_setupasync_teardown)requestr   r:   s      r   _async_setupr>   _   sE      H



   	

!
!
### ! $s     A	AA	A A	A	r>   c                      e Zd ZdZd Zd Zd Zd ZddZe	d        Z
e	dd	       Zd
 Zd Zd Zej                   j#                  dg d      d        Zej                   j#                  ddej                  j(                  dfdddg      d        Zej                   j#                  dddg      ej                   j#                  dddg      d               Zed        Zy)AuthTestNc                   K   t         j                  j                         | _        t        j                         dk  rt        d      	 t        j                          t        j                  d      j                  t        j                         | j                         | _        | j                          d {    y # t         j                  $ r t        d      w xY w7 'w)N)   r   zsecurity is new in libzmq 4.0z.security requires libzmq to have curve supportzzmq.auth)r   r	   r
   contextzmq_version_infor   curve_keypairZMQErrorlogging	getLoggersetLevelDEBUG	make_authr   
start_authselfs    r   r;   zAuthTest.async_setupm   s     {{**,!F*:;;	M 	*%..w}}=NN$	oo || 	MKLL	M
 	 s+   AC!	B= AC!7C8C!=CC!c                   K   t         j                  j                  d      rt        j                  d       d {    | j
                  r!| j
                  j                          d | _        t         j                  j                  d      rt        j                  d       d {    | j                  j                          y 7 7 !w)Nwing?)	sysplatform
startswithr	   sleepr   stoprC   termrM   s    r   r<   zAuthTest.async_teardownz   s      <<""5)--$$$99IINNDI<<""5)--$$$ % %s"   8CCA(C#C$ CCc                     t               r   )NotImplementedErrorrM   s    r   rK   zAuthTest.make_auth   s    !##r   c                 @   K   | j                   j                          y wr   )r   startrM   s    r   rL   zAuthTest.start_auth   s     		s   c                   K   d}d}|j                  |      }|j                  d||fz         dg}|j                  dt        j                         d{    |j                  |t        j                         d{   r*	 |j                  |t        j                         d{    ny|j                  |       d{   r3	 |j                  t        j                         d{   }||k(  sJ d}|S |S 7 7 7 X# t        j                  $ r t        j                  dt               Y yw xY w7 r7 L# t        j                  $ r t        j                  d	t               Y |S w xY ww)
z9Check if client can connect to server using tcp transportFztcp://127.0.0.1z%s:%is   Hello Worldd   Nz#server set POLLOUT, but cannot sendTz"client set POLLIN, but cannot recv)bind_to_random_portconnectpollr   POLLOUTsend_multipartNOBLOCKAgainwarningswarnRuntimeWarningrecv_multipart)	rN   r   r   timeoutresultifaceportmsgrcvd_msgs	            r   can_connectzAuthTest.can_connect   sB    !))%0w%./ kk#s{{+++Wckk222++C===
 W%%%!'!6!6s{{!CC  3&v' 	,2=99 C^T &C99 TBNS Ts   AE+C:'E+<C<=E+#D  %C>&D  *E+ D3E+"D7 (D5)D7 -E+<E+>D   -D0-E+/D00E+5D7 7-E($E+'E((E+c              #   H  K   | j                   j                  t        j                        5 }| j                   j                  t        j                        5 }d|_        d|_        d|_        d|_        ||f d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY ww)Nr   i  )rC   socketr   PUSHPULLlingersndtimeorcvtimeorN   r   r   s      r   	push_pullzAuthTest.push_pull   s     \\  * 	!fdll6I6IHH7
 	!FM"FOFM"FO&. 	! 	! 	! 	! 	! 	!s4   *B"*B#B
9B	B"
B	BBB"okc              #     K   |\  }}}}| j                         5 \  }}||_        ||_        d|_        |9||_        ||_        |dk(  r||_        nt        j                         \  }	}
|
|_        ||f d d d        y # 1 sw Y   y xY ww)NTrx   )rw   curve_publickeycurve_secretkeycurve_servercurve_serverkeyr   rE   )rN   r   
client_keyr.   r/   r0   r1   r   r   privatepublics              r   curve_push_pullzAuthTest.curve_push_pull   s     EJB}m]^^ 	#!1&&%2F"%2F""&F%)6&)6&%-:F*&)&7&7&9OGV-3F*6""	# 	# 	#s   B	AA=4	B	=BB	c                   K   | j                   j                          d| _         | j                  j                          t        j
                  j                         | _        | j                         5 \  }}| j                  ||       d{   sJ 	 ddd       | j                         5 \  }}d|_	        | j                  ||       d{   sJ 	 ddd       y7 P# 1 sw Y   LxY w7 # 1 sw Y   yxY ww)zthreaded auth - NULLN   global)
r   rU   rC   rV   r   r	   r
   rw   rn   
zap_domainrv   s      r   	test_nullzAuthTest.test_null   s      				 	{{**,^^ 	:!1&&))&&99999	: ^^ 	:!1&& )F))&&99999	: 	: :	: 	: :	: 	:sZ   A/C71C
CCC7* C+
C)C+	C7CC&"C7)C++C40C7c                 t  K   | j                   j                  d       t        j                  t              5  | j                   j                  d       d d d        | j                         5 \  }}d|_        | j                  ||d       d {   rJ 	 d d d        y # 1 sw Y   LxY w7 # 1 sw Y   y xY ww)N	127.0.0.1	127.0.0.2r   r\   rh   )	r   denypytestraises
ValueErrorallowrw   r   rn   rv   s      r   	test_denyzAuthTest.test_deny   s     		{#]]:& 	)IIOOK(	)^^ 	K!1&& !*F!--ffc-JJJJJJ		K 	K	) 	) K		K 	KsF   5B8BB8+"B,B*B,	B8B'#B8*B,,B51B8c                 p  K   | j                   j                  d       t        j                  t              5  | j                   j                  d       d d d        | j                         5 \  }}d|_        | j                  ||       d {   sJ 	 d d d        y # 1 sw Y   JxY w7 # 1 sw Y   y xY ww)Nr   r   r   )	r   r   r   r   r   r   rw   r   rn   rv   s      r   
test_allowzAuthTest.test_allow   s     		$]]:& 	(IINN;'	(^^ 	:!1&& !*F))&&99999		: 	:	( 	( :		: 	:sF   5B6BB6+ B*B(B*	B6B%!B6(B**B3/B6zenabled, password, success))TcorrectT)Fr   F)T	incorrectFc                 :  K   | j                         5 \  }}d|_        |rd|_        |j                  d      |_        |r| j
                  j                  dddi       |r| j                  ||       d{   s J | j                  ||d	
       d{   rJ ddd       | j
                  j                          d| _        | j                         5 \  }}| j                  ||       d{   sJ 	 ddd       y7 7 k# 1 sw Y   hxY w7  # 1 sw Y   yxY ww)zthreaded auth - PLAINTs   adminascii*adminr   )domain	passwordsNr\   r   )	rw   plain_serverplain_usernameencodeplain_passwordr   configure_plainrn   rU   )rN   enabledpasswordsuccessr   r   s         r   
test_plainzAuthTest.test_plain   s"     ^^ 
	O!1&&"&F(0%(0(@%		)))@T)U!--ff=====!%!1!1&&#!1!NNNNN
	O 				^^ 	:!1&&))&&99999	: 	: >N
	O 
	O  :	: 	:sk   DA"D5C=6DC?D9DD,D-D4	D=D?DD
DDDDzclient_key, location, successT)rx   r   T)badr   F)Nr   Fc                 8  K   | j                   j                  d       | j                  ||      5 \  }}|r$|dk(  r|}| j                   j                  d|       |r| j	                  ||d       d{   s J | j	                  ||d       d{   rJ ddd       | j                   j                          d| _         | j                         5 \  }}| j	                  ||       d{   sJ 	 ddd       y7 7 k# 1 sw Y   hxY w7  # 1 sw Y   yxY ww)	threaded auth - CURVEr   r~   r   r   r   locationr\   r   N)r   r   r   configure_curvern   rU   rw   )rN   r   r$   r~   r   r   r   r   s           r   
test_curvezAuthTest.test_curve  s)     			$ !!%J!? 	OCSFF},.H		))x)H!--ffc-JJJJJ!%!1!1&&#!1!NNNNN	O 				 ^^ 	:!1&&))&&99999	: 	: KN	O 	O  :	: 	:sk   /DAD 4C<5D C>D 9DD+D,D3	D<D >D  D	DDDDkeywrongasync_Fc                   
K   | j                   j                  d       |\  }
} G 
fdd      }|r|j                  |_         |       }| j                   j	                  |       | j                  |      5 \  }}	dk(  r| j                  ||	       d{   s J | j                  ||	d       d{   rJ ddd       y7 -7 # 1 sw Y   yxY ww)	z2threaded auth - CURVE with callback authenticationr   c                   (    e Zd Z fdZd Zd Zy)9AuthTest.test_curve_callback.<locals>.CredentialsProviderc                 .    dk(  r| _         y | _         y )Nrx   r   )rN   r0   r   r.   s    r   __init__zBAuthTest.test_curve_callback.<locals>.CredentialsProvider.__init__:  s    $;"/DK"/DKr   c                 $    || j                   k(  ryy)NTFr   rN   r   r   s      r   callbackzBAuthTest.test_curve_callback.<locals>.CredentialsProvider.callback@  s    $++% r   c                 j   K   t        j                  d       d {    || j                  k(  ryy7 w)Ng?TF)r	   rT   r   r   s      r   async_callbackzHAuthTest.test_curve_callback.<locals>.CredentialsProvider.async_callbackF  s/     mmC((($++% 	 )s   313N)__name__
__module____qualname__r   r   r   )r0   r   r.   s   r   CredentialsProviderr   9  s    0!!r   r   )credentials_providerrx   N   r   )r   r   r   r   configure_curve_callbackr   rn   )rN   r   r   r   r/   r1   r   providerr   r   r0   r.   s     `       @@r   test_curve_callbackzAuthTest.test_curve_callback2  s      			$EJB}m]	! 	!( +>+M+M(&(		***I!!%( 	O,<VVd{!--ff=====!%!1!1&&#!1!NNNNN		O 	O=N		O 	OsB   A8C=CC	C9C:C 	C	CCCCc                 |  K   | j                   j                  d       |\  }}}}| j                   j                  d|       | j                         5 \  }}||_        ||_        d|_        ||_        ||_        ||_        | j                  ||       d{   sJ |j                  d       d{    |j                  d       d{   }	|	j                  dk(  sJ 	 |	j                  d	      }
|
|j                  d
      k(  sJ d | j                   _        | j"                  j%                  t        j&                        5 }||_        ||_        ||_        | j                  ||       d{   sJ |j                  d       d{    |j                  d       d{   }	|	j                  dk(  sJ 	 |	j                  d	      }
|
dk(  sJ ddd       ddd       y7 N7 67 # t        j                  $ r Y w xY w7 7 }7 e# t        j                  $ r Y Nw xY w# 1 sw Y   SxY w# 1 sw Y   yxY ww)r   r   r   r   TNs   testF)copyzUser-Idutf8c                      y)Ncustomr4   r   s    r   <lambda>z-AuthTest.test_curve_user_id.<locals>.<lambda>u  s    r   s   test2r   )r   r   r   rw   rz   r{   r|   r}   rn   sendrecvbytesgetdecoder   ZMQVersionErrorcurve_user_idrC   rp   rq   )rN   r   r$   r.   r/   r0   r1   r   r   rl   user_idclient2s               r   test_curve_user_idzAuthTest.test_curve_user_idW  s4     			$EJB}m]		!!!G^^ '	/!1&&%2F"%2F""&F%2F"%2F"%2F"))&&99999 ++g&&&//C99'''?''), -"6"6v">>>> 'BDII#$$SXX. /'*7'*7'*7'!--gv>>>>>ll8,,,"KKUK33yyH,,,/!ggi0G #h.../3'	/ '	/ : '/ &&  ?,3 ** / /3'	/ '	/s   AH<AH0G#H00G&1H0
G)H0!G,2AH0+H$.H/H$	H
H$#H	$H$:HH$H0	H<#H0&H0)H0,H?H0HH0H$H$	H$H!H$ H!!H$$H-	)H00H95H<)i  )rx   )r   r   r   r   r;   r<   rK   rL   rn   r   rw   r   r   r   r   r   markparametrizer   r   CURVE_ALLOW_ANYr   r   r   r   r4   r   r   r@   r@   i   s(   D $< ! ! # # :*	K	: [[$	
::, [['388++T2')(		
::. [[UT7O4[[Xe}5!O 6 5!OF -/ -/r   r@   c                       e Zd ZdZd Zy)TestThreadAuthentication'Test authentication running in a threadc                 2    ddl m}  || j                        S )Nr   )ThreadAuthenticator)zmq.auth.threadr   rC   )rN   r   s     r   rK   z"TestThreadAuthentication.make_auth  s    7"4<<00r   Nr   r   r   __doc__rK   r4   r   r   r   r     s
    11r   r   win32)      z)flaky event loop cleanup on windows+py<38)reasonc                       e Zd ZdZd Zy)TestAsyncioAuthenticationr   c                 2    ddl m}  || j                        S )Nr   )AsyncioAuthenticator)zmq.auth.asyncior   rC   )rN   r   s     r   rK   z#TestAsyncioAuthentication.make_auth  s    9#DLL11r   Nr   r4   r   r   r   r     s    
 22r   r   c                 &  K   ddl m} t        j                         5  ddlm} d d d         |       }|j                  | u sJ  |d      }t        j                  t              5   ||      }d d d        y # 1 sw Y   VxY w# 1 sw Y   y xY ww)Nr   )IOLoop)IOLoopAuthenticatorF)make_current)io_loop)
tornado.ioloopr   rd   catch_warningszmq.auth.ioloopr   rC   r   warnsDeprecationWarning)rC   r   r   r   r   r   loops          r   test_ioloop_authenticatorr     s     %		 	 	" 878 w'D<<7"""u%D	(	) 1"401 18 81 1s4   BA9AB&
B0	B9B>BB
B)"r	   rG   r   r   rQ   rd   
contextlibr   r   r   zmq.asynciozmq.auth	zmq.testsr   r   tornadoImportErrorfixturer
   r+   r2   r$   r%   r   r>   r   usefixturesr@   r   skipifrR   version_infor   r   r4   r   r   <module>r      sl     	  
  %  
   )
   !. !.HF  
  
 ' ' $ $ ([/ [/ )[/|1x 1 LLG9 0 06 96  2 2	21S  Gs   D+ +D54D5