o
    jX$                     @   sP  d Z ddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ dd	dd
dZedkrVddlmZmZmZ ddlmZ ddlmZ G dd deZe eej< n7ddlmZmZmZ ddlmZ ddlmZ G dd deZeeZeeZe eej< e eej< eeeZdd Z dd Z!dHddZ"dHddZ#dHdd Z$dHd!d"Z%dHd#d$Z&dHd%d&Z'dHd'd(Z(dHd)d*Z)d+d, Z*e+e,urd-d. Z-d/d0 Z.nd1d. Z-d2d0 Z.i d3e%d4e#d5e$d6e#d7e"d8e"d9e&d:e"d;e"d<e"d=e"d>e"d?e"d@e"dAe"dBe'dCe(dDe$iZ/dEe$iZ0e$e$dFZ1e$e$d3Z2e)e"dGZ3de"iZ4dS )I
    )__version__)decoder)Encoder   )RESULT_CODES
to_unicode)referrals_to_list      ))FF)FT)TF)TTzxxx0.2.3)tagMapBooleanEncoderencode)Boolean	ints2octsc                   @   s   e Zd ZedZdS )BooleanCEREncoder   N)__name__
__module____qualname__r   _true r   r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/ldap3/utils/asn1.pyr   -   s    r   )r   typeMapAbstractItemEncoder)deepcopyc                   @   s   e Zd ZdZedkrddlmZ edZedZdd Z	dS ed	kr(d
d Z	dS edkr3dddZ	dS edkr=dd Z	dS dd Z	dS )LDAPBooleanEncoderFz0.2.3r   r   r   r   c                 C   s   |r| j p| jdfS )Nr   )r   _falseself	encodeFunvaluedefModemaxChunkSizer   r   r   encodeValue<   s   zLDAPBooleanEncoder.encodeValuez0.3.1c                 C      |rdpdddfS Nr   r    Fr   r"   r   r   r   r(   ?      z0.3.4c                 C   r)   r*   r   )r#   r$   r%   r&   r'   
ifNotEmptyr   r   r   r(   B   r+   z0.3.7c                 K      |rdpdddfS r*   r   )r#   r%   r$   optionsr   r   r   r(   E   r+   c                 K   r-   r*   r   )r#   r%   asn1Specr$   r.   r   r   r   r(   H   r+   N)F)
r   r   r   supportIndefLenModepyasn1_versionpyasn1.compat.octetsr   r   r!   r(   r   r   r   r   r   6   s    r   c                 C   sf   | d dkr| d dfS | d d }d}|}| dd|  D ]}|d8 }||d|  7 }q||d fS )zh
    Compute size according to BER definite length rules
    Returns size of value and value offset
    r      r      r      r   )databytes_lengthvalue_lengthcontbyter   r   r   compute_ber_sizeT   s   r;   c                 C   sl   t t| d d \}}t| ||| t}|d d |d d |d d t|dkr2|d d dS d dS )N
   r   r   r   r   )	messageID
protocolOppayloadcontrols)r;   	get_bytesdecode_sequenceLDAP_MESSAGE_CONTEXTlen)messageber_lenber_value_offsetdecodedr   r   r   decode_message_fastf   s   


rI   Nc                 C   s   g }||k rkt | | }tt|d@ t|d@ f }t|d@ }|d@ }|dk r0t||d@ f nd }	tt| ||d  \}
}||7 }|	rP|	| |||
 |}n
|| | |||
 }|||||f ||
7 }||k s|S )Nr4   @          r   r<   )get_byteCLASSESboolDECODERSr;   rA   append)rE   startstopcontext_decodersrH   octet	ber_classber_constructedber_typeber_decoderrF   rG   r%   r   r   r   rB   q   s    rB   c                 C   sB   | | }t |d@ rdnd}| || D ]
}|d> t |B }q|S )Nr4   r      )rM   )rE   rR   rS   rT   firstr%   rU   r   r   r   decode_integer   s
   r]   c                 C   s   | || S Nr   rE   rR   rS   rT   r   r   r   decode_octet_string   s   r`   c                 C   s   | || dkr
dS dS )Nr   FTr   r_   r   r   r   decode_boolean   s   ra   c                 C      t | ||tS r^   )rB   BIND_RESPONSE_CONTEXTr_   r   r   r   decode_bind_response      rd   c                 C   rb   r^   )rB   EXTENDED_RESPONSE_CONTEXTr_   r   r   r   decode_extended_response   re   rg   c                 C   rb   r^   )rB   INTERMEDIATE_RESPONSE_CONTEXTr_   r   r   r   decode_intermediate_response   re   ri   c                 C   rb   r^   )rB   CONTROLS_CONTEXTr_   r   r   r   decode_controls   re   rk   c                 C   s   t  }t| d d |d< t|d  |d< t| d d dd|d< t| d	 d dd|d
< t| dkrDtdd | d d D |d< |S d |d< |S )Nr   r   resultdescriptionr   Tfrom_serverdnr   rE      c                 S   s   g | ]
}t |d  ddqS )r   Trn   r   ).0referralr   r   r   
<listcomp>   s    z,ldap_result_to_dict_fast.<locals>.<listcomp>	referrals)dictintr   r	   rD   r
   )responseresponse_dictr   r   r   ldap_result_to_dict_fast   s   rz   c                 C      | S r^   r   xr   r   r   rM         rM   c                 C   r{   r^   r   r|   r   r   r   rA      r~   rA   c                 C      t | S r^   )ordr|   r   r   r   rM         c                 C   r   r^   )	bytearrayr|   r   r   r   rA      r   )r   r   )r   r   )r   rq   )r   r<   )r      )r      )r   r   )r   rq   )r      )r      )r   	   )r      )r      )r      )r      )r      )r      )r   r   r   )r<   r   )r   r   r^   )5__doc__pyasn1r   r1   pyasn1.codec.berr   pyasn1.codec.ber.encoderr   core.resultsr   
utils.convr	   protocol.convertr
   rN   r   r   r   pyasn1.type.univr   r2   r   r   tagSetr   r   copyr   r   customTagMapcustomTypeMaptypeIdr;   rI   rB   r]   r`   ra   rd   rg   ri   rk   rz   strbytesrM   rA   rP   rc   rf   rh   rC   rj   r   r   r   r   <module>   s    



	





	
