o
     `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   nhome/ych/rk3568/buildroot/output/rockchip_rk3568/host/lib/python3.10/site-packages/cryptography/hazmat/_der.py__init__$      zDERReader.__init__c                 C   s   | S r   r   r   r   r   r   	__enter__'   s   zDERReader.__enter__c                 C   s   |d u r
|    d S d S r   )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.   r   zDERReader.is_emptyc                 C   s   |   stdd S )Nz Invalid DER input: trailing data)r%   
ValueErrorr   r   r   r   r   1   s   zDERReader.check_emptyc                 C   s8   t | jdk rtdt| jd}| jdd  | _|S )N   $Invalid DER input: insufficient datar   )r$   r   r&   six
indexbytes)r   retr   r   r   	read_byte5   
   zDERReader.read_bytec                 C   s8   t | j|k rtd| jd | }| j|d  | _|S )Nr(   )r$   r   r&   )r   nr+   r   r   r   
read_bytes<   r-   zDERReader.read_bytesc                 C   s   |   }|d@ dkrtd|   }|d@ dkr|}n/|dM }|dkr'tdd}t|D ]}|dK }||   O }|dkrAtdq-|dk rJtd| |}|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   s4   
zDERReader.read_any_elementc                 C   s    |   \}}||krtd|S )Nz!Invalid DER input: unexpected tag)r8   r&   )r   expected_tagr4   r7   r   r   r   read_elementg   s   zDERReader.read_elementc                 C   s2   |  |  |W  d    S 1 sw   Y  d S r   )r:   r   r9   r   r   r   read_single_elementm   s   $zDERReader.read_single_elementc                 C   s.   t | jdkrt| jd|kr| |S d S r#   )r$   r   r)   r*   r:   r;   r   r   r   read_optional_elementq   s    
zDERReader.read_optional_elementc                 C   s|   t | jdkrtdt| jd}|d@ dkrtdt | jdkr8t| jd}|dkr8|d@ dkr8t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-encoded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/   r8   r:   r<   r=   rA   r   r   r   r   r   #   s    $r   c                 C   s>   t | tjs
td| dk rtd|  d d }t| |S )NzValue must be an integerr   z#Negative integers are not supportedr2   r'   )
isinstancer)   Zinteger_typesr&   
bit_lengthr   )xr.   r   r   r   encode_der_integer   s   
rH   c                 G   s~   d}|D ]}|t |7 }qt| g}|dk r |t| nt|}|tdt |B  || || d|S )Nr   r       )r$   r)   Zint2byteappendr   extendjoin)r4   childrenr5   childchunksZlength_bytesr   r   r   
encode_der   s   


rP   )
__future__r   r   r   r)   Zcryptography.utilsr   r   ZCONSTRUCTEDZCONTEXT_SPECIFICZINTEGERZ
BIT_STRINGZOCTET_STRINGNULLZOBJECT_IDENTIFIERZSEQUENCEZSETZPRINTABLE_STRINGZUTC_TIMEZGENERALIZED_TIMEobjectr   rH   rP   r   r   r   r   <module>   s$   d	