U
    ςd                     @   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   I/var/www/html/myproject/myenv/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rd}| j t| jk rt| j| j  }|  j d7  _ |d> |d@ B }|d@ sBqqB| j t| jkrd S t| j| j  }|  j d7  _ |d@ r|d@ }| j | t| jkrd 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            T0      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   2   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_tlvk   s     zBER.encode_tlvc                 C   s   t |tkr,|r| dt q| dt nt |tksDt |tkrX| dt| nXt |t	krr| d| n>t |t
kst |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   encodeu   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   r   r   Zparamiko.utilr#   r   Zparamiko.sftpr   	Exceptionr   r   r   r   r   r   <module>   s
   