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sd}d
| _d| d }|d| d 7 }||rd| 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