U
    we                     @   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   k/mounts/lovelace/software/anaconda3/envs/qiime2-amplicon-2024.2/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   util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boolr2   r   r   intr   r#   r0   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   r:      s    zBER.encode_sequenceN)r	   r
   r   __doc__bytesr   r   r   r   r   r   staticmethodr%   r2   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
   