U
    b                     @   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   w/var/www/html/staging.mfahmagazine.net/magazine_api/magazine_env/lib/python3.8/site-packages/ellipticcurve/utils/der.pyr
      s   r
   )Z02Z03Z04Z05Z06Z13Z17Z30Z31Za0Z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)Z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)ZtagTyper%   r   r   r   r    )   s
    

r    c              
   C   s   | sg S | d d | dd   }} t | \}}| |||  | || d   }} t||k rdt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)hexadecimalZtypeBytelengthlengthBytescontentZtagDataZvalueParserr   r   r   r1   1   s2    "      r1   c                 C   s   | S Nr   r9   r   r   r   r8   H   s    r8   c                 C   s   t t| S r=   )tupler   r>   r   r   r   r3   L   s    r3   c                 C   s   t | }t|dS )Nz%y%m%d%H%M%SZ)r6   r   strptime)r9   stringr   r   r   r4   P   s    r4   c                 C   s   t |  S r=   )r   decoder>   r   r   r   r6   U   s    r6   c                 C   s   d S r=   r   )Z_contentr   r   r   r2   Y   s    r2   c                 C   s<   t | }t| d }|d dkr$|S dt|  }|d|  S )Nr   0   r*   )r   r	   r.   )r9   r   bitsbitCountr   r   r   r5   ]   s    r5   c                 C   sX   t t| }| dk r4dt| }d| |  }t |S t|d }|d dkrTd| }|S )Nr   rD   r*   1Z00)r   absr.   r	   )numberr9   rF   ZtwosComplementrE   r   r   r   r&   f   s    r&   c                 C   sp   d}t | d| }|dk }|r0|d }||fS |d }|dkrHtd|d| 7 }t | d| d }||fS )Nr*   r      z)indefinite length encoding located in DER)r   r/   )r9   r;   ZlengthIndicatorZisShortFormr:   lengthLengthr   r   r   r-   r   s    r-   c                 C   sB   t | d }t|}|dk r&|dS dt |d  }t|| S )Nr*   rJ   )r.   r   zfill)r9   r$   r:   rK   r   r   r   r)      s    
r)   c                 C   sR   t | }|d d \}}}ddddddd| | }|dk}||t| dS )	N   	universalZapplication)rC   rG   zcontext-specificZprivaterG   )classr+   r,   )r	   _hexTagToTyper7   )r#   rE   Zbit8Zbit7Zbit6ZtagClassr+   r   r   r   r0      s$    		
r0   N)%r   Zoidr   r   binaryr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   rP   itemsr(   r"   r    r1   r8   r3   r4   r6   r2   r5   r&   r-   r)   r0   r   r   r   r   <module>   s:   		