
    hb                         S r SSKrSSKrSSKJr  SSKJr   " S S5      r " S S\5      r " S	 S
\5      r	S r
\
" 5       r " S S\5      r " S S\5      rg)z(SASL mechanisms for AMQP authentication.    N)BytesIO)_write_tablec                   .    \ rS rSrSr\S 5       rS rSrg)SASL
   zThe base class for all amqp SASL authentication mechanisms.

You should sub-class this if you're implementing your own authentication.
c                     [         e)z2Return a bytes containing the SASL mechanism name.NotImplementedErrorselfs    1D:\TimeStamps\venv\Lib\site-packages\amqp/sasl.py	mechanismSASL.mechanism   s
     "!    c                     [         e)z@Return the first response to a SASL challenge as a bytes object.r	   r   
connections     r   start
SASL.start   s    !!r    N)	__name__
__module____qualname____firstlineno____doc__propertyr   r   __static_attributes__r   r   r   r   r   
   s     
 " ""r   r   c                   ,    \ rS rSrSrSrS rSrS rSr	g)	PLAIN   zZPLAIN SASL authentication mechanism.

See https://tools.ietf.org/html/rfc4616 for details
s   PLAINc                      XsU l         U l        g Nusernamepasswordr   r$   r%   s      r   __init__PLAIN.__init__"       '/$t}r   r#   c                 b   U R                   b  U R                  c  [        $ [        5       nUR	                  S5        UR	                  U R                   R                  S5      5        UR	                  S5        UR	                  U R                  R                  S5      5        UR                  5       $ )N    zutf-8)r$   r%   NotImplementedr   writeencodegetvaluer   r   login_responses      r   r   PLAIN.start*   s    == DMM$9!! U#T]]11':;U#T]]11':;&&((r   r%   r$   N
r   r   r   r   r   r   r'   	__slots__r   r   r   r   r   r   r      s    
 I:
I
)r   r   c                   ,    \ rS rSrSrSrS rSrS rSr	g)	AMQPLAIN5   z`AMQPLAIN SASL authentication mechanism.

This is a non-standard mechanism used by AMQP servers.
s   AMQPLAINc                      XsU l         U l        g r"   r#   r&   s      r   r'   AMQPLAIN.__init__=   r)   r   r#   c                     U R                   b  U R                  c  [        $ [        5       n[	        U R                   U R                  S.UR
                  / 5        UR                  5       SS  $ )N)s   LOGINs   PASSWORD   )r$   r%   r,   r   r   r-   r/   r0   s      r   r   AMQPLAIN.startE   s\    == DMM$9!! DMMJ#))2	/ &&(,,r   r3   Nr4   r   r   r   r7   r7   5   s    
 I:
I
-r   r7   c                     ^  SS K mSS Km " U4S jS[        5      n U $ ! [         a     " S S[        5      nUs $ f = f)Nr   c                   B   > \ rS rSrSrSr  S
S jrSrS rU 4S jr	S	r
g)%_get_gssapi_mechanism.<locals>.GSSAPId   z[GSSAPI SASL authentication mechanism.

See https://tools.ietf.org/html/rfc4752 for details
s   GSSAPINc                     U(       a&  [        U[        5      (       d  UR                  S5      nXl        X@l        X l        X0l        g )Nascii)
isinstancebytesr.   client_name	fail_softservicerdnsr   rF   rH   rI   rG   s        r   r'   ._get_gssapi_mechanism.<locals>.GSSAPI.__init__l   s6    z+u'E'E"-"4"4W"=K#. !*& 	r   )rF   rG   rH   rI   c                    UR                   R                  nU R                  (       a\  UR                  [        R
                  [        R                  4;   a.  UR                  5       n[        R                  " US   5      u  n  nOUR                   R                  n[        U[        5      (       d  UR                  S5      nU$ )Nr   rC   )	transportsockrI   familysocketAF_INETAF_INET6getpeernamegethostbyaddrhostrD   rE   r.   )r   r   rN   peerhostname_s         r   get_hostname2_get_gssapi_mechanism.<locals>.GSSAPI.get_hostname|   s    !++0099171B "B++-D%+%9%9$q'%BNHa)3388H!(E22'w7Hr   c                   >  U R                   (       a)  TR                  TR                  U R                   5      S9nOS nU R                  U5      nTR                  SR	                  U R
                  U/5      TR                  R                  5      nTR                  XBS9nUR                  S 5      $ ! TR                  R                  R                   a    U R                  (       a  [        s $ e f = f)N)name   @)r\   creds)rF   CredentialsNamerY   joinrH   NameTypehostbased_serviceSecurityContextsteprawmiscGSSErrorrG   r,   )r   r   r^   rW   r\   contextgssapis         r   r   +_get_gssapi_mechanism.<locals>.GSSAPI.start   s    '' & 2 2!'T-=-=!> !3 !@ !%#00<H!;;tyy$,,1I'J'-'H'HJD$44$4LG"<<--zz// ~~--	s   B-B1 1;C0.C0)rF   rG   rI   rH   Ns   amqpFF)r   r   r   r   r   r   r'   r5   rY   r   r   )rj   s   r   GSSAPIr@   d   s0    
 "I9@/4!I
  r   rm   c                   0    \ rS rSrSrSr  SS jrS rSrg))_get_gssapi_mechanism.<locals>.FakeGSSAPIT   z7A no-op SASL mechanism for when gssapi isn't available.Nc                 (    U(       d  [        S5      eg )Nz?You need to install the `gssapi` module for GSSAPI SASL supportr	   rJ   s        r   r'   2_get_gssapi_mechanism.<locals>.FakeGSSAPI.__init__Y   s     -'( ( !r   c                     [         $ r"   )r,   r   s    r   r   /_get_gssapi_mechanism.<locals>.FakeGSSAPI.start`   s    %%r   r   rl   	r   r   r   r   r   r   r'   r   r   r   r   r   
FakeGSSAPIro   T   s    II9@/4(&r   rv   )rj   gssapi.raw.miscr   ImportError)rm   rv   rj   s     @r   _get_gssapi_mechanismry   O   sI    I$4	T 4	j M  	& 	& s    ==c                   "    \ rS rSrSrSrS rSrg)EXTERNAL   zEXTERNAL SASL mechanism.

Enables external authentication, i.e. not handled through this protocol.
Only passes 'EXTERNAL' as authentication mechanism, but no further
authentication data.
s   EXTERNALc                     g)Nr   r   r   s     r   r   EXTERNAL.start   s    r   r   N)r   r   r   r   r   r   r   r   r   r   r   r{   r{      s     Ir   r{   c                   (    \ rS rSrSrSrS rS rSrg)RAW   zA generic custom SASL mechanism.

This mechanism takes a mechanism name and response to send to the server,
so can be used for simple custom authentication schemes.
Nc                     [        U[        5      (       d   e[        U[        5      (       d   eXsU l        U l        [        R
                  " S[        5        g )NznPassing login_method and login_response to Connection is deprecated. Please implement a SASL subclass instead.)rD   rE   r   responsewarningswarnDeprecationWarning)r   r   r   s      r   r'   RAW.__init__   sJ    )U++++(E****(1% !"4	6r   c                     U R                   $ r"   )r   r   s     r   r   	RAW.start   s    }}r   )r   r   ru   r   r   r   r   r      s     I6r   r   )r   rP   r   ior   amqp.serializationr   r   r   r7   ry   rm   r{   r   r   r   r   <module>r      s_    .    +" " )D )6-t -4JZ 
	 t $ r   