
    Zd}                     z    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dS )
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                     n"# t           j        $ r t          d          w xY wt                                                       d S )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    7lib/python3.11/site-packages/zmq/tests/test_security.pyr   zTestSecurity.setUp   s    !!F**:;;;	V| 	V 	V 	VTUUU	Vs	   = Ac                 d   | j                             t          j                  }|                    d           	 |                     |          }|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|                    g d           n|                    g d	           |	                    |           |
                                 d S # |
                                 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|   $$SW--,---$	%%f--CFI"1"gCGXvw)H$$%(W"((h&&Af$$$$x''''h'EX%%))h$.>.>8tCSCS((           !!%(((LLNNNNNFLLNNNNs   CD D/c              #      K   |                                   t          j        d           	 d V  |                                  d S # |                                  w xY w)Ng      ?)	start_zaptimesleepstop_zapr   s    r   zapzTestSecurity.zapF   sT      
3	EEEMMOOOOODMMOOOOs   A Ac                 l    t          | j                  | _        | j                                         d S )N)target)r   r-   
zap_threadstartr3   s    r   r/   zTestSecurity.start_zapO   s1     (8999r   c                 8    | j                                          d S N)r7   joinr3   s    r   r2   zTestSecurity.stop_zapS   s    r   Tc                 0   t          j        d          t          j        d          g}|                    |           |                     |d          }t	          t          d |                    }	 |rPt          sI|D ]F}|                    d          dk    sJ |                    d          dk    sJ |d	         d
k    sJ Gn# t          j	        $ r Y nw xY w||k    sJ |                    |           |                     |          }||k    sJ d S )N@   F)copyc                     | j         S r:   )bytes)xs    r   <lambda>z%TestSecurity.bounce.<locals>.<lambda>Z   s    17 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   sD   z"~~rz"~~.c"""$$V%$88S**F3344	 <T <# < <E 99Y//;>>>> 99W--8888 /8;;;;;" 	 	 	D	 ||||e$$$""6**s{{{{{{s   4AC CCc                    |                      t          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}|                    |          }|                    d||fz             | 	                    ||d           dS )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    SZ((SZ((38++++38++++"a''''"a''''!))%00w%.///FFE*****r   c                 F   |                      t          j                  }d|_        |                      t          j                  }|j        dk    sJ |j        dk    sJ t          |_        t          |_        |                    t          j	                  t          k    s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 |                                 5  d}|                    |          }|                    d||fz             |                     ||           ddd           dS # 1 swxY w Y   dS )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   s   SZ(("SZ(($++++$++++ $ $  !344<<<<  !344<<<<"a''''"a''''"39,,,,39,,,,&&&&""""XXZZ 	( 	(%E--e44DNN7eT]2333KK'''		( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s   AFFFc                    |                      t          j                  }d|_        |                      t          j                  }| j                            ||g           t          |_        d|_        d|_	        |j
        t          j        k    sJ |j
        t          j        k    sJ |                                 5  d}|                    |          }|                    d||fz             |                    d           d|_        |                     t          j        |j                   ddd           dS # 1 swxY w Y   dS )	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   sf   SZ(("SZ((VV,--- $ ,"39,,,,39,,,,XXZZ 	< 	<%E--e44DNN7eT]2333KK   !FO""3:v{;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   >A3D>>EEc                    	 t          j                    \  }}n"# t           j        $ r t          d          w xY w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 dS )ztest curve_keypairCURVE unsupported(   c              3   >   K   | ]}t          j        |          V  d S r:   )r   decode).0keys     r   	<genexpr>z,TestSecurity.test_keypair.<locals>.<genexpr>   s*      HHCJsOOHHHHHHr       N)r   r   r   r   typer@   len)r   publicsecretbsecretbpublics        r   test_keypairzTestSecurity.test_keypair   s'   	0 .00NFFF| 	0 	0 	0.///	0 F||u$$$$F||u$$$$6{{b    6{{b     IH7GHHHG}}%%%%G}}%%%%7||r!!!!7||r!!!!!!    8c                    	 t          j                    \  }}n"# t           j        $ r t          d          w xY w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 dS )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 .00NFFF| 	0 	0 	0.///	0!!F**>???)&11N##u,,,,>""b(((( *^,,G}}%%%%7||r!!!! ''''''r   c                    |                      t          j                  }d|_        |                      t          j                  }| j                            ||g           	 d|_        n@# t          j        $ r.}|j        t          j	        k    rt          d          Y d}~nd}~ww xY wt          j                    \  }}t          j                    \  }}||_        ||_        ||_        ||_        ||_        |j        t          j        k    sJ |j        t          j        k    sJ |                    t          j                  dk    sJ |                    t          j                  dk    sJ |                                 5  d}|                    |          }	|                    d||	fz             |                     ||           ddd           dS # 1 swxY w Y   dS )ztest CURVE encryptionr   Trs   NFrV   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   SZ(("SZ((VV,---	4"&F| 	4 	4 	4w#*$$2333 %$$$$	4
 (+'8':':$}'*'8':':$}!.!.!.!.!.39,,,,39,,,,zz#*++t3333zz#*++u4444XXZZ 	( 	(%E--e44DNN7eT]2333KK'''		( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s+   #A+ +B(:$B##B(A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	      s            ' ' '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 5 5 5 5 5 5 5 5      [( [( [( [( [(? [( [( [( [( [(r   