<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
l_U                 @   s   d dl mZmZmZ d dlZd dlmZmZ dZdZ	dZ
dZdZd	Zd
ZdeB ZdeB ZdZdZdZG dd deZdd Zdd ZdS )    )absolute_importdivisionprint_functionN)int_from_bytesint_to_bytes                                     c               @   sl   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )	DERReaderc             C   s   t || _d S )N)
memoryviewdata)selfr    r   /usr/lib64/python3.6/_der.py__init__$   s    zDERReader.__init__c             C   s   | S )Nr   )r   r   r   r   	__enter__'   s    zDERReader.__enter__c             C   s   |d kr| j   d S )N)check_empty)r   exc_type	exc_valuetbr   r   r   __exit__*   s    zDERReader.__exit__c             C   s   t | jdkS )Nr   )lenr   )r   r   r   r   is_empty.   s    zDERReader.is_emptyc             C   s   | j  stdd S )Nz Invalid DER input: trailing data)r!   
ValueError)r   r   r   r   r   1   s    zDERReader.check_emptyc             C   s8   t | jdk rtdtj| jd}| jdd  | _|S )N   z$Invalid DER input: insufficient datar   )r    r   r"   six
indexbytes)r   retr   r   r   	read_byte5   s
    zDERReader.read_bytec             C   s8   t | j|k rtd| jd | }| j|d  | _|S )Nz$Invalid DER input: insufficient data)r    r   r"   )r   nr&   r   r   r   
read_bytes<   s
    zDERReader.read_bytesc             C   s   | j  }|d@ dkrtd| j  }|d@ dkr6|}nb|dM }|dkrNtdd}x4t|D ](}|dK }|| j  O }|dkr\tdq\W |dk rtd| j|}|t|fS )	N   z-Invalid DER input: unexpected high tag numberr   r      z?Invalid DER input: indefinite length form is not allowed in DER   z3Invalid DER input: length was not minimally-encoded)r'   r"   ranger)   r   )r   tagZlength_bytelengthibodyr   r   r   read_any_elementC   s,    

zDERReader.read_any_elementc             C   s    | j  \}}||krtd|S )Nz!Invalid DER input: unexpected tag)r2   r"   )r   expected_tagr.   r1   r   r   r   read_elementg   s    zDERReader.read_elementc          	   C   s   |  | j |S Q R X d S )N)r4   )r   r3   r   r   r   read_single_elementm   s    zDERReader.read_single_elementc             C   s.   t | jdkr*tj| jd|kr*| j|S d S )Nr   )r    r   r$   r%   r4   )r   r3   r   r   r   read_optional_elementq   s     
zDERReader.read_optional_elementc             C   s|   t | jdkrtdtj| jd}|d@ dkr8tdt | jdkrptj| jd}|dkrp|d@ dkrptdt| jdS )Nr   z)Invalid DER input: empty integer contentsr   z'Negative DER integers are not supportedr#   z0Invalid DER input: integer not minimally-encodedZbig)r    r   r"   r$   r%   r   )r   firstsecondr   r   r   
as_integerv   s    zDERReader.as_integerN)__name__
__module____qualname__r   r   r   r!   r   r'   r)   r2   r4   r5   r6   r9   r   r   r   r   r   #   s   $r   c             C   s>   t | tjstd| dk r$td| j d d }t| |S )NzValue must be an integerr   z#Negative integers are not supportedr,   r#   )
isinstancer$   Zinteger_typesr"   
bit_lengthr   )xr(   r   r   r   encode_der_integer   s    r@   c             G   s   d}x|D ]}|t |7 }q
W tj| g}|dk rD|jtj| n*t|}|jtjdt |B  |j| |j| dj|S )Nr   r       )r    r$   Zint2byteappendr   extendjoin)r.   Zchildrenr/   ZchildZchunksZlength_bytesr   r   r   
encode_der   s    


rE   )Z
__future__r   r   r   r$   Zcryptography.utilsr   r   ZCONSTRUCTEDZCONTEXT_SPECIFICZINTEGERZ
BIT_STRINGZOCTET_STRINGZNULLZOBJECT_IDENTIFIERZSEQUENCEZSETZPRINTABLE_STRINGZUTC_TIMEZGENERALIZED_TIMEobjectr   r@   rE   r   r   r   r   <module>   s"   d	