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rÎd-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º    ý



	





þýüûúù	÷
öõôóòñðïîíìÿþþþÿ