HEX
Server: Apache
System: Linux 185.122.168.184.host.secureserver.net 5.14.0-570.60.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Nov 5 05:00:59 EST 2025 x86_64
User: barbeatleanalyti (1024)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //var/opt/nydus/ops/asn1crypto/__pycache__/parser.cpython-39.pyc
a

�,�h�#�@s�dZddlmZmZmZmZddlZddlmZm	Z	m
Z
ddlmZm
Z
ejdkZdZd	Zd
d�Zdd
d�Zdd�Zddd�Zdd�ZdS)z�
Functions for parsing and dumping using the ASN.1 DER encoding. Exports the
following items:

 - emit()
 - parse()
 - peek()

Other type classes are defined that help compose the types listed above.
�)�unicode_literals�division�absolute_import�print_functionN�)�byte_cls�chr_cls�	type_name)�int_from_bytes�int_to_bytes)�z<Insufficient data - %s bytes requested but only %s available�
cCs�t|t�stdt|���|dks*|dkr6td|��t|t�sPtdt|���|dks`|dkrltd|��t|t�s�tdt|���|dkr�td	|��t|t�s�td
t|���t||||�|S)a�
    Constructs a byte string of an ASN.1 DER-encoded value

    This is typically not useful. Instead, use one of the standard classes from
    asn1crypto.core, or construct a new class with specific fields, and call the
    .dump() method.

    :param class_:
        An integer ASN.1 class value: 0 (universal), 1 (application),
        2 (context), 3 (private)

    :param method:
        An integer ASN.1 method value: 0 (primitive), 1 (constructed)

    :param tag:
        An integer ASN.1 tag value

    :param contents:
        A byte string of the encoded byte contents

    :return:
        A byte string of the ASN.1 DER value (header and contents)
    z!class_ must be an integer, not %srrz*class_ must be one of 0, 1, 2 or 3, not %sz!method must be an integer, not %srzmethod must be 0 or 1, not %sztag must be an integer, not %sz%tag must be greater than zero, not %s�&contents must be a byte string, not %s)�
isinstance�int�	TypeErrorr	�
ValueErrorr�_dump_header)�class_�method�tag�contents�r�B/opt/nydus/tmp/pip-target-wkfpz8uv/lib/python/asn1crypto/parser.py�emits



rFcCsPt|t�stdt|���t|�}t||�\}}|rL||krLtd||��|S)al
    Parses a byte string of ASN.1 BER/DER-encoded data.

    This is typically not useful. Instead, use one of the standard classes from
    asn1crypto.core, or construct a new class with specific fields, and call the
    .load() class method.

    :param contents:
        A byte string of BER/DER-encoded data

    :param strict:
        A boolean indicating if trailing data should be forbidden - if so, a
        ValueError will be raised when trailing data exists

    :raises:
        ValueError - when the contents do not contain an ASN.1 header or are truncated in some way
        TypeError - when contents is not a byte string

    :return:
        A 6-element tuple:
         - 0: integer class (0 to 3)
         - 1: integer method
         - 2: integer tag
         - 3: byte string header
         - 4: byte string content
         - 5: byte string trailer
    rz4Extra data - %d bytes of trailing data were provided)rrrr	�len�_parser)r�strictZcontents_len�info�consumedrrr�parseKs
r cCs0t|t�stdt|���t|t|��\}}|S)aW
    Parses a byte string of ASN.1 BER/DER-encoded data to find the length

    This is typically used to look into an encoded value to see how long the
    next chunk of ASN.1-encoded data is. Primarily it is useful when a
    value is a concatenation of multiple values.

    :param contents:
        A byte string of BER/DER-encoded data

    :raises:
        ValueError - when the contents do not contain an ASN.1 header or are truncated in some way
        TypeError - when contents is not a byte string

    :return:
        An integer with the number of bytes occupied by the ASN.1 value
    r)rrrr	rr)rrrrrr�peekrs
r!c	Cs~|tkrtd��|}||dkr4ttd||f��trDt||�n||}|d7}|d@}|d?d@}|dk�rd}||dkr�ttd||f��tr�t||�n||}	|d7}|	dkr�|dkr�td��|d9}||	d@7}|	d	?dkrvq�qv|dk�rtd��||dk�r&ttd||f��t�r8t||�n||}
|d7}d
}|
d	?dk�rh||
d@}n�|
d@}
|
�r�|||
k�r�tt|
||f��||
7}|t|||
|�dd�}n`|�s�td
��|}||dk�s�|||d�dk�rt|||d|dd�\}}�q�|d7}d}||k�r@tt||||f��|�rN||fS|d?|||||�|||t|��|f|fS)a�
    Parses a byte string into component parts

    :param encoded_data:
        A byte string that contains BER-encoded data

    :param data_len:
        The integer length of the encoded data

    :param pointer:
        The index in the byte string to parse from

    :param lengths_only:
        A boolean to cause the call to return a 2-element tuple of the integer
        number of bytes in the header and the integer number of bytes in the
        contents. Internal use only.

    :param depth:
        The recursion depth when evaluating indefinite-length encoding.

    :return:
        A 2-element tuple:
         - 0: A tuple of (class_, method, tag, header, content, trailer)
         - 1: An integer indicating how many bytes were consumed
    z*Indefinite-length recursion limit exceededr��r�zNon-minimal tag encoding���F)�signedz-Indefinite-length element must be constructed�sT)�lengths_only�depth�)�
_MAX_DEPTHr�_INSUFFICIENT_DATA_MESSAGE�_PY2�ordr
rr)Zencoded_data�data_len�pointerr*r+�startZfirst_octetrZconstructed�numZlength_octet�trailerZcontents_endZ
length_octets�_rrrr�sp

$

��rc	Cs�d}d}||d>O}||d>O}|dkrld}|dkrZt||d@B�|}|sPd}|d?}q,t|dB�|}n|t||B�7}t|�}|dkr�|t|�7}n$t|�}|tdt|�B�7}||7}|S)	a�
    Constructs the header bytes for an ASN.1 object

    :param class_:
        An integer ASN.1 class value: 0 (universal), 1 (application),
        2 (context), 3 (private)

    :param method:
        An integer ASN.1 method value: 0 (primitive), 1 (constructed)

    :param tag:
        An integer ASN.1 tag value

    :param contents:
        A byte string of the encoded byte contents

    :return:
        A byte string of the ASN.1 DER header
    r'rr,r#r"r%r$r&)rrr)	rrrr�headerZid_numZcont_bit�lengthZlength_bytesrrrr�s(
r)F)rFr)�__doc__�
__future__rrrr�sys�_typesrrr	�utilr
r�version_infor/r.r-rr r!rrrrrr�<module>s
1
'
j