U
    ÓZj  ã                   @   sX   d dl mZmZ d dlmZmZmZmZ d dlm	Z	 G dd„ de
ƒZG dd„ deƒZdS )é    )Úmax_byteÚ	zero_byte)ÚbÚbyte_ordÚbyte_chrÚlongNc                   @   s   e Zd ZdS )ÚBERExceptionN)Ú__name__Ú
__module__Ú__qualname__© r   r   úO/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/paramiko/ber.pyr      s   r   c                   @   sn   e Zd ZdZeƒ fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
edd„ ƒZdd„ Zdd„ Zedd„ ƒZdS )ÚBERz7
    Robey's tiny little attempt at a BER decoder.
    c                 C   s   t |ƒ| _d| _d S )Nr   )r   ÚcontentÚidx)Úselfr   r   r   r   Ú__init__!   s    
zBER.__init__c                 C   s   | j S ©N)r   ©r   r   r   r   Úasbytes%   s    zBER.asbytesc                 C   s   |   ¡ S r   )r   r   r   r   r   Ú__str__(   s    zBER.__str__c                 C   s   dt | jƒ d S )NzBER('z'))Úreprr   r   r   r   r   Ú__repr__+   s    zBER.__repr__c                 C   s   |   ¡ S r   )Údecode_nextr   r   r   r   Údecode.   s    z
BER.decodec                 C   s�  | j t| jƒkrd S t| j| j  ƒ}|  j d7  _ |d@ dkrŒd}| j t| jƒk rŒt| j| j  ƒ}|  j d7  _ |d> |d@ B }|d@ sBqŒqB| j t| jƒkr d S t| j| j  ƒ}|  j d7  _ |d@ �r|d@ }| j | t| jƒkrèd S t | j| j | j | … d¡}|  j |7  _ | j | t| jƒk�r.d S | j| j | j | … }|  j |7  _ |dk�rf|  |¡S |d	k�rzt |¡S d
}t| |¡ƒ‚d S )Né   é   r   é   é   é€   Té0   é   z.Unknown ber encoding type {:d} (robey is lazy))	r   Úlenr   r   ÚutilZinflate_longÚdecode_sequencer   Úformat)r   ÚidentÚtÚsizeÚdataÚmsgr   r   r   r   1   sF    
 ÿ



zBER.decode_nextc                 C   s.   g }t | ƒ}| ¡ }|d krq*| |¡ q|S r   )r   r   Úappend)r)   ÚoutÚberÚxr   r   r   r$   _   s    zBER.decode_sequencec                 C   st   |  j t|ƒ7  _ t|ƒdkrLt t|ƒ¡}|  j tdt|ƒ ƒ| 7  _ n|  j tt|ƒƒ7  _ |  j |7  _ d S )Nr   r   )r   r   r"   r#   Údeflate_long)r   r&   ÚvalZlenstrr   r   r   Ú
encode_tlvj   s     zBER.encode_tlvc                 C   s´   t |ƒtkr,|r|  dt¡ q°|  dt¡ n„t |ƒtksDt |ƒtkrX|  dt |¡¡ nXt |ƒt	krr|  d|¡ n>t |ƒt
ksŠt |ƒtkrž|  d|  |¡¡ ntd t |ƒ¡ƒ‚d S )Nr   r!   é   r    zUnknown type for encoding: {!r})ÚtypeÚboolr1   r   r   Úintr   r#   r/   ÚstrÚlistÚtupleÚencode_sequencer   r%   )r   r.   r   r   r   Úencodet   s    ÿz
BER.encodec                 C   s"   t ƒ }| D ]}| |¡ q
| ¡ S r   )r   r:   r   )r)   r-   Úitemr   r   r   r9   …   s    zBER.encode_sequenceN)r	   r
   r   Ú__doc__Úbytesr   r   r   r   r   r   Ústaticmethodr$   r1   r:   r9   r   r   r   r   r      s   .


r   )Zparamiko.commonr   r   Zparamiko.py3compatr   r   r   r   Zparamiko.utilr#   Ú	Exceptionr   Úobjectr   r   r   r   r   Ú<module>   s   