o
    ç÷¡g  ã                   @   s^   d dl mZmZmZmZ d dlmZ d dlmZ d dlm	Z	 G dd„ de
ƒZG dd„ dƒZdS )	é    )Úmax_byteÚ	zero_byteÚbyte_ordÚbyte_chrN)Úb)Úint64c                   @   s   e Zd ZdS )ÚBERExceptionN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú7/usr/local/lib/python3.10/dist-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 r   )r   r   r   r   r   Ú__str__)   ó   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   r   r   )Údecode_nextr   r   r   r   Údecode/   r   z
BER.decodec                 C   s’  | j t| jƒkr
d S t| j| j  ƒ}|  j d7  _ |d@ dkrMd}| j t| jƒk rMt| j| j  ƒ}|  j d7  _ |d> |d@ B }|d@ sEn| j t| jƒk s)| j t| jƒkrWd S t| j| j  ƒ}|  j d7  _ |d@ r�|d@ }| j | t| jƒkrzd S t | j| j | j | … d¡}|  j |7  _ | j | t| jƒkrœd S | j| j | j | … }|  j |7  _ |dkr·|  |¡S |d	krÀt |¡S d
}t| |¡ƒ‚)Né   é   r   é   é   é€   Té0   é   z.Unknown ber encoding type {:d} (robey is lazy))	r   Úlenr   r   ÚutilÚinflate_longÚdecode_sequencer   Úformat)r   ÚidentÚtÚsizeÚdataÚmsgr   r   r   r   2   sF   ûÿ

zBER.decode_nextc                 C   s0   g }t | ƒ}	 | ¡ }|d u r	 |S | |¡ qr   )r   r   Úappend)r,   ÚoutÚberÚxr   r   r   r'   `   s   
ÿüzBER.decode_sequencec                 C   st   |  j t|ƒ7  _ t|ƒdkr&t 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)   ÚvalÚlenstrr   r   r   Ú
encode_tlvk   s    zBER.encode_tlvc                 C   sº   t |ƒtu r|r|  dt¡ d S |  dt¡ d S t |ƒtu s$t |ƒtu r/|  dt |¡¡ d S t |ƒt	u r=|  d|¡ d S t |ƒt
u sIt |ƒtu rT|  d|  |¡¡ d S td t |ƒ¡ƒ‚)Nr   r#   é   r"   zUnknown type for encoding: {!r})ÚtypeÚboolr5   r   r   Úintr   r%   r2   ÚstrÚlistÚtupleÚencode_sequencer   r(   )r   r1   r   r   r   Úencodeu   s   ÿz
BER.encodec                 C   s"   t ƒ }| D ]}| |¡ q| ¡ S r   )r   r>   r   )r,   r0   Úitemr   r   r   r=   †   s   zBER.encode_sequenceN)r	   r
   r   Ú__doc__Úbytesr   r   r   r   r   r   Ústaticmethodr'   r5   r>   r=   r   r   r   r   r      s    .


r   )Úparamiko.commonr   r   r   r   Úparamiko.utilr%   r   Úparamiko.sftpr   Ú	Exceptionr   r   r   r   r   r   Ú<module>   s   