o
    w+f                     @   s   d dl m Z  ddlmZmZ ddlmZmZmZmZ G dd dZ	e	j
e	je	je	je	je	je	je	je	je	je	jdZdd	 e 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"d# Z$d$S )%    )datetime   )oidToHex
oidFromHex)
hexFromInt
intFromHexbyteStringFromHexbitsFromHexc                   @   s8   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdS )DerFieldTypeinteger	bitStringoctetStringnullobjectprintableStringutcTimesequencesetoidContainerpublicKeyPointContainerN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r    r   r   J/var/www/html/venv/lib/python3.10/site-packages/ellipticcurve/utils/der.pyr
      s    r
   )020304050613173031a0a1c                 C   s   i | ]\}}||qS r   r   ).0kvr   r   r   
<dictcomp>"   s    r)   c                  G   s   t tjd| S )N )encodePrimitiver
   r   join)encodedValuesr   r   r   encodeConstructed%   s   r.   c                 C   s<   | t jkr	t|}| t jkrt|}djt|  t||dS )Nz{tag}{size}{value})tagsizevalue)r
   r   _encodeIntegerr   r   format_typeToHexTag_generateLengthBytes)tagTyper1   r   r   r   r+   )   s
   

r+   c              
   C   s   | sg S | d d | dd  }} t | \}}| |||  | || d  }} t||k r2tdt|}|d r>t|}tjttjt	tj
ttjttjti|d t}||gt|  S )N   zmissing bytes in DER parseisConstructedtype)_readLengthByteslen	Exception_getTagDataparser
   r   
_parseNullr   	_parseOidr   
_parseTimer   _parseIntegerr   _parseStringget	_parseAny)hexadecimaltypeBytelengthlengthBytescontenttagDatavalueParserr   r   r   r>   1   s&   "r>   c                 C   s   | S Nr   rF   r   r   r   rE   H      rE   c                 C   s   t t| S rM   )tupler   rN   r   r   r   r@   L      r@   c                 C   s   t | }t|dS )Nz%y%m%d%H%M%SZ)rC   r   strptime)rF   stringr   r   r   rA   P   s   rA   c                 C   s   t |  S rM   )r   decoderN   r   r   r   rC   U   rQ   rC   c                 C   s   d S rM   r   )_contentr   r   r   r?   Y   rO   r?   c                 C   s<   t | }t| d }|d dkr|S dt|  }|d|  S )Nr   0   r7   )r   r	   r;   )rF   r   bitsbitCountr   r   r   rB   ]   s   rB   c                 C   sX   t t| }| dk rdt| }d| |  }t |S t|d }|d dkr*d| }|S )Nr   rW   r7   100)r   absr;   r	   )numberrF   rY   twosComplementrX   r   r   r   r2   f   s   r2   c                 C   sp   d}t | d| }|dk }|r|d }||fS |d }|dkr$td|d| 7 }t | d| d }||fS )Nr7   r      z)indefinite length encoding located in DER)r   r<   )rF   rI   lengthIndicatorisShortFormrH   lengthLengthr   r   r   r:   r   s   r:   c                 C   sB   t | d }t|}|dk r|dS dt |d  }t|| S )Nr7   r_   )r;   r   zfill)rF   r0   rH   rb   r   r   r   r5      s   
r5   c                 C   sR   t | }|d d \}}}ddddddd| | }|dk}||t| dS )	N   	universalapplication)rV   rZ   zcontext-specificprivaterZ   )classr8   r9   )r	   _hexTagToTyperD   )r/   rX   bit8bit7bit6tagClassr8   r   r   r   r=      s$   		
r=   N)%r   oidr   r   binaryr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   ri   itemsr4   r.   r+   r>   rE   r@   rA   rC   r?   rB   r2   r:   r5   r=   r   r   r   r   <module>   s<    		