
    ZdZ8                     b   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n# e$ r dZY nw xY w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j                            d           G d d                      Z G d de          Zej                            ej        dk    o
ej        dk     d           G d de                      Z d Z!dS )    N)contextmanager)SkipTest	skip_pypyc                 $    t           j        j        S N)zmqasyncioContext)
event_loops    3lib/python3.11/site-packages/zmq/tests/test_auth.pyr
   r
      s    ;    c                 *   t          |                     d                                                    }t          j                            |d          }t          j                            |d          }t          j                            |d          }t          j        |           t          j        |           t          j        |           t
          j                            |d          \  }}t
          j                            |d          \  }}t          j        |          D ]h}	|		                    d          rQt          j        t          j                            ||	          t          j                            |d                     it          j        |          D ]h}	|		                    d	          rQt          j        t          j                            ||	          t          j                            |d                     i||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''--//00Hw||Hn55Hgll8];;Ogll8^<<OHXH_H_-0X-I-I(. .** .1X-I-I(. .** Jx((  V$$ 	KXx00"',,PS2T2T   Jx((  ]++ 	KXx00"',,PS2T2T   _--r   c                    t           j                            | d          }t           j                            | d          }t          j                            |          \  }}t          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   su    o7JKKo7JKK#&8#<#<=O#P#P M=#&8#<#<=O#P#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         }|                                 d{V  dW V  |                                 dS )z+pytest doesn't support async setup/teardownN)instanceasync_setupasync_teardown)requestr   r:   s      r   _async_setupr>   _   sW       H



 
        	EEEEr   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                            dg d          d             Zej                            dd	ej        j        dfdddg          d             Zej                            dd	dg          ej                            dddg          d                         Zed             ZdS )AuthTestNc                   K   t           j                                        | _        t          j                    dk     rt          d          	 t          j                     n"# t           j        $ r t          d          w xY wt          j	        d          
                    t          j                   |                                 | _        |                                  d {V  d S )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| 	M 	M 	MKLLL	M 	*%%..w}===NN$$	oos   A! !B c                     | j         r | j                                          d | _         | j                                         d S r   )r   stoprC   termrM   s    r   r<   zAuthTest.async_teardownz   s?    9 	INNDIr   c                     t                      r   )NotImplementedErrorrM   s    r   rK   zAuthTest.make_auth   s    !###r   c                 <   K   | j                                          d S r   )r   startrM   s    r   rL   zAuthTest.start_auth   s      	r     c                   K   d}d}|                     |          }|                    d||fz             dg}|                    dt          j                   d{V  |                    |t          j                   d{V rX	 |                    |t          j                   d{V  n2# t          j        $ r t          j	        dt                     Y dS w xY wdS |                    |           d{V r`	 |                    t          j                   d{V }||k    sJ d}n/# t          j        $ r t          j	        d	t                     Y nw xY w|S )
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   s     !))%00w%./// kk#s{+++++++++Wck22222222 	++C==========9   C^TTTuu 5W%%%%%%%% 	!'!6!6s{!C!CCCCCCC  3	 9 T T TBNSSSSST
 s$   &B- -)CC;%D+ +)EEc              #   @  K   | j                             t          j                  5 }| j                             t          j                  5 }d|_        d|_        d|_        d|_        ||fV  d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   i  )rC   socketr   PUSHPULLlingersndtimeorcvtimeorN   r   r   s      r   	push_pullzAuthTest.push_pull   s     \  ** 	!fdl6I6IH7
 7
 	!FM"FOFM"FO&.   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s5   %B#A;/B;A?	?BA?	BBBokc              #   $  K   |\  }}}}|                                  5 \  }}||_        ||_        d|_        |9||_        ||_        |dk    r||_        nt          j                    \  }	}
|
|_        ||fV  d d d            d S # 1 swxY w Y   d S )NTrt   )rs   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&9&9OGV-3F*6""""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s   ABB	B	c                 
  K   | j                                          d| _         | j                                         t          j                                        | _        |                                 5 \  }}|                     ||           d{V sJ 	 ddd           n# 1 swxY w Y   |                                 5 \  }}d|_	        |                     ||           d{V sJ 	 ddd           dS # 1 swxY w Y   dS )zthreaded auth - NULLN   global)
r   rP   rC   rQ   r   r	   r
   rs   rj   
zap_domainrr   s      r   	test_nullzAuthTest.test_null   s      			 	{**,,^^ 	:!1&&))&&999999999999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: ^^ 	:!1&& )F))&&999999999999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s$   3"B""B&)B&)C88C<?C<c                   K   | j                             d           t          j        t                    5  | j                             d           d d d            n# 1 swxY w Y   |                                 5 \  }}d|_        |                     ||d           d {V rJ 	 d d d            d S # 1 swxY w Y   d S )N	127.0.0.1	127.0.0.2r   rX   rd   )	r   denypytestraises
ValueErrorallowrs   r   rj   rr   s      r   	test_denyzAuthTest.test_deny   s\     	{###]:&& 	) 	)IOOK(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)^^ 	K!1&& !*F!--ffc-JJJJJJJJJJJJ		K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	Ks#   AA!$A!<+B55B9<B9c                   K   | j                             d           t          j        t                    5  | j                             d           d d d            n# 1 swxY w Y   |                                 5 \  }}d|_        |                     ||           d {V sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   r   r   )	r   r   r   r   r   r   rs   r   rj   rr   s      r   
test_allowzAuthTest.test_allow   sD     	$$$]:&& 	( 	(INN;'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(^^ 	:!1&& !*F))&&999999999999		: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s#   AA!$A!<)B33B7:B7zenabled, password, success))TcorrectT)Fr   F)T	incorrectFc                 \  K   |                                  5 \  }}d|_        |r!d|_        |                    d          |_        |r| j                            dddi           |r|                     ||           d{V sJ n |                     ||d	
           d{V rJ ddd           n# 1 swxY w Y   | j                                         d| _        |                                  5 \  }}|                     ||           d{V sJ 	 ddd           dS # 1 swxY w Y   dS )zthreaded auth - PLAINTs   adminascii*adminr   )domain	passwordsNrX   r   )	rs   plain_serverplain_usernameencodeplain_passwordr   configure_plainrj   rP   )rN   enabledpasswordsuccessr   r   s         r   
test_plainzAuthTest.test_plain   s      ^^ 
	O!1&&"&F A(0%(0(@(@% V	)))@T)UUU O!--ff============!%!1!1&&#!1!N!NNNNNNNNNN
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 
	O 			^^ 	:!1&&))&&999999999999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s$   BB22B69B61"D!!D%(D%zclient_key, location, successT)rt   r   T)badr   F)Nr   Fc                 R  K   | j                             d           |                     ||          5 \  }}|r$|dk    r|}| j                             d|           |r!|                     ||d           d{V sJ n |                     ||d           d{V rJ ddd           n# 1 swxY w Y   | j                                          d| _         |                                 5 \  }}|                     ||           d{V sJ 	 ddd           dS # 1 swxY w Y   dS )	threaded auth - CURVEr   rz   r   r   r   locationrX   r   N)r   r   r}   configure_curverj   rP   rs   )rN   r   r$   rz   r   r   r   r   s           r   
test_curvezAuthTest.test_curve	  s      		$$$ !!%J!?? 	OCSFF I},,.H	))x)HHH O!--ffc-JJJJJJJJJJJJ!%!1!1&&#!1!N!NNNNNNNNNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 			 ^^ 	:!1&&))&&999999999999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s$   A-B--B14B1,"DD #D keywrongasync_Fc                   
K   | j                             d           |\  }
} G 
fdd          }|r|j        |_         |            }| j                             |           |                     |          5 \  }}	dk    r|                     ||	           d{V sJ n |                     ||	d           d{V rJ ddd           dS # 1 swxY w Y   dS )	z2threaded auth - CURVE with callback authenticationr   c                   *    e Zd Z fdZd Zd ZdS )9AuthTest.test_curve_callback.<locals>.CredentialsProviderc                 4    dk    r	| _         d S | _         d S )Nrt   r   )rN   r0   r   r.   s    r   __init__zBAuthTest.test_curve_callback.<locals>.CredentialsProvider.__init__1  s"    $;;"/DKKK"/DKKKr   c                      || j         k    rdS dS )NTFr   rN   r   r   s      r   callbackzBAuthTest.test_curve_callback.<locals>.CredentialsProvider.callback7  s    $+%%4 5r   c                 X   K   t          j        d           d {V  || j        k    rdS dS )Ng?TF)r	   sleepr   r   s      r   async_callbackzHAuthTest.test_curve_callback.<locals>.CredentialsProvider.async_callback=  s?      mC((((((((($+%%4 5r   N)__name__
__module____qualname__r   r   r   )r0   r   r.   s   r   CredentialsProviderr   0  sV        0 0 0 0 0 0 0! ! !! ! ! ! !r   r   )credentials_providerrt   N   r   )r   r   r   r   configure_curve_callbackr}   rj   )rN   r   r   r   r/   r1   r   providerr   r   r0   r.   s     `       @@r   test_curve_callbackzAuthTest.test_curve_callback)  s      		$$$EJB}m]	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!(  	N+>+M(&&((	***III!!%(( 	O,<VVd{{!--ff============!%!1!1&&#!1!N!NNNNNNNNNN		O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	Os    A	CCCc                 r  K   | j                             d           |\  }}}}| j                             d|           |                                 5 \  }}||_        ||_        d|_        ||_        ||_        ||_        |                     ||           d{V sJ |	                    d           d{V  |
                    d           d{V }	|	j        dk    sJ 	 |	                    d	          }
|
|                    d
          k    sJ n# t          j        $ r Y nw xY wd | j         _        | j                            t          j                  5 }||_        ||_        ||_        |                     ||           d{V sJ |	                    d           d{V  |
                    d           d{V }	|	j        dk    sJ 	 |	                    d	          }
|
dk    sJ n# t          j        $ r Y nw xY wddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )r   r   r   r   TNs   testF)copyzUser-Idutf8c                     dS )Ncustomr4   r   s    r   <lambda>z-AuthTest.test_curve_user_id.<locals>.<lambda>l  s     r   s   test2r   )r   r   r   rs   rv   rw   rx   ry   rj   sendrecvbytesgetdecoder   ZMQVersionErrorcurve_user_idrC   rl   rm   )rN   r   r$   r.   r/   r0   r1   r   r   rh   user_idclient2s               r   test_curve_user_idzAuthTest.test_curve_user_idN  sC      		$$$EJB}m]	!!!GGG^^ '	/!1&&%2F"%2F""&F%2F"%2F"%2F"))&&99999999999 ++g&&&&&&&&&////////C9''''?''),, -"6"6v">">>>>>> &    'B&ADI#$$SX.. /'*7'*7'*7'!--gv>>>>>>>>>>>ll8,,,,,,,,,"KKUK33333333yH,,,,/!ggi00G #h..... *   D/ / / / / / / / / / / / / / /3'	/ '	/ '	/ '	/ '	/ '	/ '	/ '	/ '	/ '	/ '	/ '	/ '	/ '	/ '	/ '	/ '	/ '	/s   BH,%D:H,D(%H,'D((4H,A8HG3*	H3HHHHH,H	H,H	H,,H03H0)rV   )rt   )r   r   r   r   r;   r<   rK   rL   rj   r   rs   r}   r   r   r   r   markparametrizer   r   CURVE_ALLOW_ANYr   r   r   r   r4   r   r   r@   r@   i   s       D       $ $ $     < ! ! ^! # # # ^# : : :*	K 	K 	K	: 	: 	: [$	
 	
 	
 : : :, ['38+T2')(		
 : : :. [UT7O44[Xe}55!O !O 65 54!OF -/ -/ Y-/ -/ -/r   r@   c                       e Zd ZdZd ZdS )TestThreadAuthentication'Test authentication running in a threadc                 .    ddl m}  || j                  S )Nr   )ThreadAuthenticator)zmq.auth.threadr   rC   )rN   r   s     r   rK   z"TestThreadAuthentication.make_auth  s'    777777""4<000r   Nr   r   r   __doc__rK   r4   r   r   r   r     s)        111 1 1 1 1r   r   win32)      z(flaky event loop cleanup on windows+py36)reasonc                       e Zd ZdZd ZdS )TestAsyncioAuthenticationr   c                 .    ddl m}  || j                  S )Nr   )AsyncioAuthenticator)zmq.auth.asyncior   rC   )rN   r   s     r   rK   z#TestAsyncioAuthentication.make_auth  s'    999999##DL111r   Nr   r4   r   r   r   r     s+        
 212 2 2 2 2r   r   c                 8  K   ddl m} t          j                    5  ddlm} d d d            n# 1 swxY w Y    ||           }|j        | u sJ  |d          }t          j        t                    5   ||          }d d d            d S # 1 swxY w Y   d S )Nr   )IOLoop)IOLoopAuthenticatorF)make_current)io_loop)
tornado.ioloopr   r`   catch_warningszmq.auth.ioloopr   rC   r   warnsDeprecationWarning)rC   r   r   r   r   r   loops          r   test_ioloop_authenticatorr     sM     %%%%%%		 	"	" 8 87777778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 w''D<7""""6u%%%D	(	)	) 1 1""40001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1s   /335BBB)"r	   rG   r   r   sysr`   
contextlibr   r   r   zmq.asynciozmq.auth	zmq.testsr   r   tornadoImportErrorfixturer
   r+   r2   r$   r%   r   r>   r   usefixturesr@   r   skipifplatformversion_infor   r   r4   r   r   <module>r      s~     				  



  % % % % % %  



      ) ) ) ) ) ) ) )NNNN   GGG    !. !. !.HF F F   
   
 ' ' '    ((R/ R/ R/ R/ R/ R/ R/ )(R/j1 1 1 1 1x 1 1 1 LG9 06 95   2 2 2 2 2 2 2	 21 1 1 1 1s   = AA