
    ytfp                     r    d 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mZm	Z	m
Z
 ddlmZ dZdZ G d d	e	      Zy)
z&Test libzmq security (libzmq >= 3.3.0)    N)Thread)PYPYBaseZMQTestCaseSkipTest)z85s   admins   passwordc                        e Zd Z fdZd Zej                  d        Zd Zd Z	ddZ
d Zd Zd	 Zd
 Zd Zd Z xZS )TestSecurityc                     t        j                         dk  rt        d      	 t        j                          t
        |           y # t         j                  $ r t        d      w xY w)N)   r   zsecurity is new in libzmq 4.0z7security requires libzmq to be built with CURVE support)zmqzmq_version_infor   curve_keypairZMQErrorsupersetUp)self	__class__s    a/var/www/html/software/conda/envs/higlass/lib/python3.12/site-packages/zmq/tests/test_security.pyr   zTestSecurity.setUp   s`    !F*:;;	V 	 || 	VTUU	Vs   A A'c                    | j                   j                  t        j                        }|j	                  d       	 | j                  |      }|d d \  }}}}}}|dk(  r	|dd  \  }	}
n
|dk(  r|d    |dk(  sJ |dk(  sJ ||g}|dk(  s|dk(  r	t        k(  r	
t        k(  s|dk(  r|j                  g d       n|j                  g d	       |j                  |       |j                          y # |j                          w xY w)
Nzinproc://zeromq.zap.01   s   PLAINs   CURVEs   1.0   IDENTs   NULL)s   200s   OKs	   anonymouss   Hello   World)s   400s   Invalid username or password    r   )contextsocketr   REPbindrecv_multipartUSERPASSextendsend_multipartclose)r   r   msgversionsequencedomainaddressidentity	mechanismusernamepasswordreplys               r   zap_handlerzTestSecurity.zap_handler   s   $$SWW-,-$	%%f-CFI"1gCGXvw)H$%(W"(h&Af$$$x'''h'EX%)h$.>8tCS(  !!%(LLNFLLNs   B C- -C?c              #      K   | j                          t        j                  d       	 d  | j                          y # | j                          w xY ww)Ng      ?)	start_zaptimesleepstop_zapr   s    r   zapzTestSecurity.zapF   s5     

3	MMODMMOs   &A> AAAc                 n    t        | j                        | _        | j                  j                          y )N)target)r   r-   
zap_threadstartr3   s    r   r/   zTestSecurity.start_zapO   s$     (8(89r   c                 8    | j                   j                          y N)r7   joinr3   s    r   r2   zTestSecurity.stop_zapS   s    r   c                    t        j                  d      t        j                  d      g}|j                  |       | j                  |d      }t	        t        d |            }	 |rCt        s=|D ]8  }|j                  d      dk(  sJ |j                  d      dk(  sJ |d	   d
k(  r8J  ||k(  sJ |j                  |       | j                  |      }||k(  sJ y # t        j                  $ r Y Fw xY w)N@   F)copyc                     | j                   S r:   )bytes)xs    r   <lambda>z%TestSecurity.bounce.<locals>.<lambda>Z   s
    177 r   zUser-Id	anonymousHelloWorldzSocket-TypeDEALER)
osurandomr!   r   listmapr   getr   ZMQVersionError)	r   serverclienttest_metadatar#   framesrecvdframemsg2s	            r   bouncezTestSecurity.bounceV   s    zz"~rzz"~.c"$$V%$8S*F34	T# <E 99Y/;>>> 99W-888 /8;;;< ||e$""6*s{{ "" 		s   &AC (C C21C2c                    | j                  t        j                        }| j                  t        j                        }|j                  t        j                  k(  sJ |j
                  t        j                  k(  sJ |j                  dk(  sJ |j                  dk(  sJ d}|j                  |      }|j                  d||fz         | j                  ||d       y)ztest NULL (default) securityr   tcp://127.0.0.1%s:%iFN)
r   r   rF   	MECHANISMNULLr)   plain_serverbind_to_random_portconnectrT   r   rM   rN   ifaceports        r   	test_nullzTestSecurity.test_nullj   s    SZZ(SZZ(388+++388+++""a'''""a'''!))%0w%./FFE*r   c                 d   | j                  t        j                        }d|_        | j                  t        j                        }|j                  dk(  sJ |j
                  dk(  sJ t        |_        t        |_        |j                  t        j                        t        k(  sJ |j                  t        j                        t        k(  sJ |j                  dk(  sJ |j                  dk(  sJ d|_        |j                  t        j                  k(  sJ |j                  t        j                  k(  sJ |j                  rJ |j                  sJ | j                         5  d}|j                  |      }|j!                  d||fz         | j#                  ||       ddd       y# 1 sw Y   yxY w)ztest PLAIN authenticationr   r   r   TrV   rW   N)r   r   rF   r(   plain_usernameplain_passwordr   r   
getsockoptPLAIN_USERNAMEPLAIN_PASSWORDrZ   r)   PLAINr4   r[   r\   rT   r]   s        r   
test_plainzTestSecurity.test_plainw   sw   SZZ("SZZ($$+++$$+++ $ $  !3!34<<<  !3!34<<<""a'''""a'''"399,,,399,,,&&&&""""XXZ 	(%E--e4DNN7eT]23KK'		( 	( 	(s   !<F&&F/c                    | j                  t        j                        }d|_        | j                  t        j                        }| j                  j                  ||g       t        |_        d|_        d|_	        |j                  t        j                  k(  sJ |j                  t        j                  k(  sJ | j                         5  d}|j                  |      }|j                  d||fz         |j                  d       d|_        | j#                  t        j$                  |j&                         ddd       y# 1 sw Y   yxY w)	z test PLAIN failed authenticationr   s	   incorrectTrV   rW   s   ping   N)r   r   rF   r(   socketsr    r   rb   rc   rZ   r)   rg   r4   r[   r\   sendrcvtimeoassertRaisesErrnoEAGAINrecvr]   s        r   skip_plain_inauthzTestSecurity.skip_plain_inauth   s    SZZ("SZZ(VV,- $ ,"399,,,399,,,XXZ 	<%E--e4DNN7eT]23KK !FO""3::v{{;	< 	< 	<s   
A,D??Ec                    	 t        j                         \  }}t	        |      t
        k(  sJ t	        |      t
        k(  sJ t        |      dk(  sJ t        |      dk(  sJ d ||fD        \  }}t	        |      t
        k(  sJ t	        |      t
        k(  sJ t        |      dk(  sJ t        |      dk(  sJ y# t         j                  $ r t        d      w xY w)ztest curve_keypairCURVE unsupported(   c              3   F   K   | ]  }t        j                  |        y wr:   )r   decode).0keys     r   	<genexpr>z,TestSecurity.test_keypair.<locals>.<genexpr>   s     HCJJsOHs   !    N)r   r   r   r   typer@   len)r   publicsecretbsecretbpublics        r   test_keypairzTestSecurity.test_keypair   s    	0 ..0NFF F|u$$$F|u$$$6{b   6{b    I7GHG}%%%G}%%%7|r!!!7|r!!! || 	0.//	0s   B8 8Cc                    	 t        j                         \  }}t        j                         dk  rt        d      t        j
                  |      }t        |      t        k(  sJ t        |      dk(  sJ t        j                  |      }t        |      t        k(  sJ t        |      dk(  sJ ||k(  sJ y# t         j                  $ r t        d      w xY w)ztest curve_publicrs   )r      z!curve_public is new in libzmq 4.2rt   rz   N)r   r   r   r   r   curve_publicr{   r@   r|   r   rv   )r   r}   r~   derived_publicr   s        r   test_curve_publiczTestSecurity.test_curve_public   s    	0 ..0NFF !F*>??))&1N#u,,,>"b((( **^,G}%%%7|r!!! '''! || 	0.//	0s   B5 5Cc                    | j                  t        j                        }d|_        | j                  t        j                        }| j                  j                  ||g       	 d|_        t        j                         \  }}t        j                         \  }}||_        ||_        ||_        ||_        ||_        |j                  t        j                   k(  sJ |j                  t        j                   k(  sJ |j#                  t        j$                        sJ |j#                  t        j$                        rJ | j'                         5  d}|j)                  |      }	|j+                  d||	fz         | j-                  ||       ddd       y# t        j                  $ r3}|j                  t        j                  k(  rt        d      Y d}~gd}~ww xY w# 1 sw Y   yxY w)ztest CURVE encryptionr   Trs   NrV   rW   )r   r   rF   r(   rk   r    curve_serverr   errnoEINVALr   r   curve_secretkeycurve_publickeycurve_serverkeyr)   CURVErK   CURVE_SERVERr4   r[   r\   rT   )
r   rM   rN   eserver_publicserver_secretclient_publicclient_secretr^   r_   s
             r   
test_curvezTestSecurity.test_curve   s   SZZ("SZZ(VV,-	4"&F (+'8'8':$}'*'8'8':$}!.!.!.!.!.399,,,399,,,zz#**+++::c..///XXZ 	(%E--e4DNN7eT]23KK'		( 	() || 	4ww#**$233 %	4(	( 	(s$   $F <GG$(GGG#)T)__name__
__module____qualname__r   r-   
contextlibcontextmanagerr4   r/   r2   rT   r`   rh   rq   r   r   r   __classcell__)r   s   @r   r	   r	      sU    'R   (+(4<("&(, (r   r	   )__doc__r   rG   r0   	threadingr   r   	zmq.testsr   r   r   	zmq.utilsr   r   r   r	    r   r   <module>r      s:    ,
  	   
 5 5 [(? [(r   