File: //opt/alt/python37/lib/python3.7/site-packages/asn1crypto/__pycache__/parser.cpython-37.opt-1.pyc
B
�<�X�# � @ s� d Z ddlmZmZmZmZ ddlZddlmZm Z m
Z
ddlmZm
Z
ejdkZdZd d
� Zddd
�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 availablec C s� t | t�stdt| � ��| dk s*| dkr6td| ��t |t�sPtdt|� ��|dk s`|dkrltd| ��t |t�s�tdt|� ��|dk r�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 %sr r z*class_ must be one of 0, 1, 2 or 3, not %sz!method must be an integer, not %sr zmethod must be 0 or 1, not %sztag must be an integer, not %sz%tag must be greater than zero, not %sz&contents must be a byte string, not %s)�
isinstance�int� TypeErrorr �
ValueErrorr �_dump_header)�class_�method�tag�contents� r �B/opt/alt/python37/lib/python3.7/site-packages/asn1crypto/parser.py�emit s
r Fc C sP t | 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
z&contents must be a byte string, not %sz4Extra data - %d bytes of trailing data were provided)r
r r r �len�_parser )r �strictZcontents_len�info�consumedr r r �parseJ s
r c C s0 t | 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
z&contents must be a byte string, not %s)r
r r r r r )r r r r r r �peekq s
r c C s4 ||d k r t td|| f ��|}tr4t| | �n| | }|d7 }|d@ }|dkr�d}xFtrjt| | �n| | }|d7 }|d9 }||d@ 7 }|d? dkrZP qZW tr�t| | �n| | }|d7 }|d? dkr�|r�|||d@ fS ||d@ } n�|d@ }
|
�r0||
7 }|t| ||
|� dd � } |�r�|| fS n�|} |d
k�rF| d7 } xF| |k �r�t| || dd�\}} | |k�rH| | d | � d
k�rHP �qHW |�r�|| fS | |k�r�t t| |f ��|d? |d? d@ || ||� | || d � d
f| fS | |k�rt t| |f ��|d? |d? d@ || ||� | || � df| 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.
:return:
A 2-element tuple:
- 0: A tuple of (class_, method, tag, header, content, trailer)
- 1: An integer indicating how many bytes were consumed
� r � r � � � F)�signedr T)�lengths_onlys � � � )r �_INSUFFICIENT_DATA_MESSAGE�_PY2�ordr
r )Zencoded_dataZdata_lenZpointerr&