
    xh                     h   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          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 e                                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 Z#d Z$dS )    )datetime   )oidToHex
oidFromHex)
hexFromInt
intFromHexbyteStringFromHexbitsFromHexc                   :    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        J/var/www/html/what/lib/python3.11/site-packages/ellipticcurve/utils/der.pyr   r      sH        GIKDF'OGH
C!L7r   r   )020304050613173031a0a1c                     i | ]\  }}||	S r   r   ).0kvs      r   
<dictcomp>r-   "   s    888$!QA888r   c                  \    t          t          j        d                    |                     S )N )encodePrimitiver   r   join)encodedValuess    r   encodeConstructedr3   %   s!    <0"''-2H2HIIIr   c                     | t           j        k    rt          |          }| t           j        k    rt	          |          }d                    t          |          t          |          |          S )Nz{tag}{size}{value})tagsizevalue)r   r   _encodeIntegerr   r   format_typeToHexTag_generateLengthBytes)tagTyper7   s     r   r0   r0   )   sa    ,&&&u%%,%%%&&=+AH\]bHcHckp&qqqr   c           
      >   | sg S | d d         | dd          } }t          |           \  }}| |||z            | ||z   d          } }t          |          |k     rt          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	          |           z   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valueParsers          r   rE   rE   1   s    	'O[_kH*;77FK&{K&4H'HI;WbekWkWlWlKm[G
7||f4555(##G !.. 	:Yjm$l 
c'&/9%%  K  !E+$6$666r   c                     | S Nr   rM   s    r   rL   rL   H   s    r   c                 :    t          t          |                     S rU   )tupler   rV   s    r   rG   rG   L   s    K(()))r   c                 J    t          |           }t          j        |d          S )Nz%y%m%d%H%M%SZ)rJ   r   strptime)rM   strings     r   rH   rH   P   s"    +&&FV_555r   c                 D    t          |                                           S rU   )r	   decoderV   s    r   rJ   rJ   U   s    [))00222r   c                     d S rU   r   )_contents    r   rF   rF   Y   s    4r   c                     t          |           }t          | d                   }|d         dk    r|S dt          |           z  }|d|z  z
  S )Nr   0   r>   )r   r
   rB   )rM   r   bitsbitCounts       r   rI   rI   ]   sS    %%G{1~&&DAw#~~3{###Ha8m$$r   c                     t          t          |                     }| dk     r)dt          |          z  }d|z  | z   }t          |          S t          |d                   }|d         dk    rd|z   }|S )Nr   rb   r>   100)r   absrB   r
   )numberrM   rd   twosComplementrc   s        r   r8   r8   f   sz    S[[))Kzzs;'''x-61.))){1~&&DAw#~~[(r   c                     d}t          | d|                   }|dk     }|r	|dz  }||fS |dz
  }|dk    rt          d          |d|z  z  }t          | d|                   dz  }||fS )Nr>   r      z)indefinite length encoding located in DER)r   rC   )rM   rP   lengthIndicatorisShortFormrO   lengthLengths         r   rA   rA   r   s    K Q{]!;<<O!C'K # 1${"""S(LqCDDD1|##KAkM233a7F;r   c                     t          |           dz  }t          |          }|dk     r|                    d          S dt          |          dz  z   }t          |          |z   S )Nr>   rl   )rB   r   zfill)rM   r6   rO   ro   s       r   r;   r;      sb    {q DFczz||AV))Ll##f,,r   c                     t          |           }|d d         \  }}}ddddddd|         |         }|dk    }||t                              |           dS )	N   	universalapplication)ra   rf   zcontext-specificprivaterf   )classr?   r@   )r
   _hexTagToTyperK   )r5   rc   bit8bit7bit6tagClassr?   s          r   rD   rD      s    sDBQBxD$ 
 

 $
 
	 	 	 	H CKM &!!#&&  r   N)%r   oidr   r   binaryr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   rx   itemsr:   r3   r0   rE   rL   rG   rH   rJ   rF   rI   r8   rA   r;   rD   r   r   r   <module>r      s         % % % % % % % % J J J J J J J J J J J J8 8 8 8 8 8 8 8  


 

"





&







#

.  98-"5"5"7"7888J J Jr r r7 7 7.  * * *6 6 6
3 3 3  % % %	 	 	   - - -    r   