o
    ßý°jÅ  ã                   @   s|   d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	m
Z
 dZdZdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú
é    )ÚhexlifyNé   )ÚSEQUENCE_TYPES)Úabort_sasl_negotiationÚsend_sasl_negotiationÚrandom_hex_stringé   c                 C   s    t | tƒs	|  ¡ } t | ¡ ¡ S ©N)Ú
isinstanceÚbytesÚencodeÚhashlibÚmd5Údigest©Úvalue© r   ú�/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/ldap3/protocol/sasl/digestMd5.pyÚmd5_h&   s   
r   c                 C   s4   t | tƒs	|  ¡ } t |tƒs| ¡ }t| d | ƒS )Nó   :)r   r   r   r   ©ÚkÚsr   r   r   Úmd5_kd-   s
   

r   c                 C   s   t | tƒs	|  ¡ } t| ƒS r
   )r   r   r   r   r   r   r   r   Úmd5_hex7   s   
r   c                 C   s:   t | tƒs	|  ¡ } t |tƒs| ¡ }tj| |tjd� ¡ S )N)Ú	digestmod)r   r   r   ÚhmacÚnewr   r   Ú	hexdigestr   r   r   r   Úmd5_hmac>   s
   

r    c                 C   sÀ  t | jtƒrt| jƒdvrd S t| |d ƒ}d|v r&|d d ur&t|d ƒ}nd S d|vs4d|vs4d|vr;t| |ƒ d S d|v rK|d  ¡ dkrK|d nd}| jd	  |¡}| jd
 r_| jd
 n	d|v rg|d nd |¡}| jd  |¡}| jd r�| jd  |¡nd}|d  |¡}	t	dƒ |¡}
d| j
j |¡ }d}t| jƒdkr³| jd dkr³| j
js³d}d
| _d| d }|d| d 7 }||rÊd| d nd7 }|d|	 d 7 }|d|
 d 7 }|d| d 7 }|d| d 7 }|d7 }|dkrù|d 7 }td! |||g¡ƒ}|�rd! ||	|
|g¡nd! ||	|
g¡}d"| |d#v �r!d$nd }|dk�r;tt|ƒd% ƒ| _tt|ƒd& ƒ| _|d'tttt|ƒƒd! |	d(|
|tt|ƒƒg¡ƒƒ d) 7 }t| ||ƒ}|S )*N)é   é   Ú	saslCredsÚrealmÚnonceÚ	algorithmÚcharsetúutf-8z	iso8859-1r	   r   Ú é   r   ó    é   s   ldap/s   authr"   r!   Úsignó   auth-ints
   username="s   ",s   realm="s	   authzid="s   nonce="s   cnonce="s   digest-uri="s   qop=ó   ,s   nc=00000001,s   charset="utf-8",r   s   AUTHENTICATE:)r.   s	   auth-confs!   :00000000000000000000000000000000sA   Digest session key to server-to-client signing key magic constantsA   Digest session key to client-to-server signing key magic constants
   response="s   00000001ó   ")r   Úsasl_credentialsr   Úlenr   Údecode_directivesr   Úlowerr   r   ÚserverÚhostÚsslÚ_digest_md5_sec_numr   ÚjoinÚ_digest_md5_kisÚ_digest_md5_kicr   r   )Ú
connectionÚcontrolsÚresultÚserver_directivesr'   Úuserr$   ÚpasswordÚauthz_idr%   ÚcnonceÚuriÚqopÚdigest_responseÚa0Úa1Úa2r   r   r   Úsasl_digest_md5H   sP   
$.$(
:rJ   c                 C   sÂ   t }d}d}d}tƒ }|  d¡D ]F}|t kr!|dkr!|}d}t}q|tkr0|dkr0|s0|s0d}q|tkr=|dkr=|r=d}q|tkrR|dkrR|sR|||< d}d}t }q||7 }q|r_|r_|||< |S )z5
    converts directives to dict, unquote values
    r)   Fr(   ú=ú"Tú,)Ú	STATE_KEYÚdictÚdecodeÚSTATE_VALUE)Údirectives_stringÚstateÚ
tmp_bufferÚquotingÚkeyÚ
directivesÚcr   r   r   r3   €   s.   
r3   )Ú__doc__Úbinasciir   r   r   r)   r   Úprotocol.sasl.saslr   r   r   rN   rQ   r   r   r   r    rJ   r3   r   r   r   r   Ú<module>   s    

8