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   F/var/www/html/api-tag/env/lib/python3.10/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 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rd S | j| j | j |  }|  j |7  _ |dkr| |S |d	krt|S d
}t||)N      r            T0      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   