U
    [ee                     @   s   d dl Z d dl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eedddZeeedddZdS )    N)int_to_bytes                                     c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZedddZ	e
dddZejed f dddZed dddZed dddZeejd  dddZedddZdS )	DERReaderc                 C   s   t || _d S N)
memoryviewdata)selfr    r   Z/var/www/html/services/stratfitenv/lib/python3.8/site-packages/cryptography/hazmat/_der.py__init__"   s    zDERReader.__init__c                 C   s   | S r   r   r   r   r   r   	__enter__%   s    zDERReader.__enter__c                 C   s   |d kr|    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,   s    zDERReader.is_emptyc                 C   s   |   stdd S )Nz Invalid DER input: trailing data)r    
ValueErrorr   r   r   r   r   /   s    zDERReader.check_empty)returnc                 C   s4   t | jdk rtd| jd }| jdd  | _|S )N   $Invalid DER input: insufficient datar   r   r   r!   )r   retr   r   r   	read_byte3   s
    
zDERReader.read_bytec                 C   s8   t | j|k rtd| jd | }| j|d  | _|S )Nr$   r%   )r   nr&   r   r   r   
read_bytes:   s
    zDERReader.read_bytesc                 C   s   |   }|d@ dkrtd|   }|d@ dkr6|}n^|dM }|dkrNtdd}t|D ](}|dK }||   O }|dkrZtdqZ|dk rt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_elementA   s2    
zDERReader.read_any_element)expected_tagr"   c                 C   s    |   \}}||krtd|S )Nz!Invalid DER input: unexpected tag)r2   r!   )r   r3   r.   r1   r   r   r   read_elemente   s    zDERReader.read_elementc              
   C   s&   |  |  |W  5 Q R  S Q R X d S r   )r4   r   r3   r   r   r   read_single_elementk   s    zDERReader.read_single_elementc                 C   s*   t | jdkr&| jd |kr&| |S d S r   )r   r   r4   r5   r   r   r   read_optional_elemento   s    
zDERReader.read_optional_elementc                 C   sv   t | jdkrtd| jd }|d@ dkr4tdt | jdkrh| jd }|dkrh|d@ dkrht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!   int
from_bytes)r   firstsecondr   r   r   
as_integerv   s    

zDERReader.as_integerN)__name__
__module____qualname__r   r   r   r    r   r9   r'   r   r)   typingTupler2   r4   r6   Optionalr7   r=   r   r   r   r   r   !   s   $r   )xr"   c                 C   s<   t | tstd| dk r"td|  d d }t| |S )NzValue must be an integerr   z#Negative integers are not supportedr,   r#   )
isinstancer9   r!   
bit_lengthr   )rD   r(   r   r   r   encode_der_integer   s    
rG   )r.   childrenr"   c                 G   s~   d}|D ]}|t |7 }qt| gg}|dk r@|t|g n*t|}|tdt |B g || || d|S )Nr   r       )r   bytesappendr   extendjoin)r.   rH   r/   childchunksZlength_bytesr   r   r   
encode_der   s    

rP   )rA   Zcryptography.utilsr   ZCONSTRUCTEDZCONTEXT_SPECIFICZINTEGERZ
BIT_STRINGZOCTET_STRINGZNULLZOBJECT_IDENTIFIERZSEQUENCEZSETZPRINTABLE_STRINGZUTC_TIMEZGENERALIZED_TIMEobjectr   r9   rJ   rG   rP   r   r   r   r   <module>   s    f	