
    a                     d    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e
      Z G d de      Zy)    )max_byte	zero_byte)bbyte_ordbyte_chrlongNc                       e Zd Zy)BERExceptionN)__name__
__module____qualname__     ,lib/python3.12/site-packages/paramiko/ber.pyr
   r
      s    r   r
   c                   n    e Zd ZdZ e       fdZd Zd Zd Zd Z	d Z
ed        Zd	 Zd
 Zed        Zy)BERz7
    Robey's tiny little attempt at a BER decoder.
    c                 2    t        |      | _        d| _        y )Nr   )r   contentidx)selfr   s     r   __init__zBER.__init__!   s    zr   c                     | j                   S N)r   r   s    r   asbyteszBER.asbytes%   s    ||r   c                 "    | j                         S r   )r   r   s    r   __str__zBER.__str__(   s    ||~r   c                 8    dt        | j                        z   dz   S )NzBER('z'))reprr   r   s    r   __repr__zBER.__repr__+   s    dll++d22r   c                 "    | j                         S r   )decode_nextr   s    r   decodez
BER.decode.   s    !!r   c                    | j                   t        | j                        k\  ry t        | j                  | j                            }| xj                   dz  c_         |dz  dk(  rd}| j                   t        | j                        k  rkt        | j                  | j                            }| xj                   dz  c_         |dz  |dz  z  }|dz  sn#| j                   t        | j                        k  rk| j                   t        | j                        k\  ry t        | j                  | j                            }| xj                   dz  c_         |dz  rz|dz  }| j                   |z   t        | j                        kD  ry t	        j
                  | j                  | j                   | j                   |z    d      }| xj                   |z  c_         | j                   |z   t        | j                        kD  ry | j                  | j                   | j                   |z    }| xj                   |z  c_         |dk(  r| j                  |      S |d	k(  rt	        j
                  |      S d
}t        |j                  |            )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msgs         r   r"   zBER.decode_next1   s   88s4<<((dhh/0ABJ2E((S..T\\$((34A!D1D ((S.. 88s4<<((TXX./A$; tAxx!|c$,,//$$TXX15tD HHMH88d?S..||DHHtxx$7DD=''--aZ$$T** CCszz%011r   c                 l    g }t        |       }	 |j                         }|	 |S |j                  |       'r   )r   r"   append)r4   outberxs       r   r/   zBER.decode_sequence_   s>    $i!Ay
 JJqM	 r   c                 l   | xj                   t        |      z  c_         t        |      dkD  rLt        j                  t        |            }| xj                   t        dt        |      z         |z   z  c_         n'| xj                   t        t        |            z  c_         | xj                   |z  c_         y )Nr(   r)   )r   r   r,   r-   deflate_long)r   r1   vallenstrs       r   
encode_tlvzBER.encode_tlvj   sy    's8d?&&s3x0FLLHTCK%786AALLLHSX..Lr   c                 *   t        |      t        u r0|r| j                  dt               y | j                  dt               y t        |      t
        u st        |      t        u r&| j                  dt        j                  |             y t        |      t        u r| j                  d|       y t        |      t        u st        |      t        u r"| j                  d| j                  |             y t        dj                  t        |                  )Nr%   r+      r*   zUnknown type for encoding: {!r})typeboolr?   r   r   intr   r-   r<   strlisttupleencode_sequencer
   r0   )r   r:   s     r   encodez
BER.encodet   s    7d?8,9-1gn$q'T/OOAt0034!W^OOAq!1go47e#3OOD$"6"6q"9:188aA r   c                 f    t               }| D ]  }|j                  |        |j                         S r   )r   rI   r   )r4   r9   items      r   rH   zBER.encode_sequence   s0    e 	DJJt	{{}r   N)r   r   r   __doc__bytesr   r   r   r    r#   r"   staticmethodr/   r?   rI   rH   r   r   r   r   r      s_      %w 3",2\  "  r   r   )paramiko.commonr   r   paramiko.py3compatr   r   r   r   paramiko.utilr-   	Exceptionr
   objectr   r   r   r   <module>rT      s-   $ 0 : : 	9 	n& nr   