U
    _)c
                     @   s   d dl mZ d dlmZ d dlmZmZ d dlmZm	Z	m
Z
mZmZ d dlmZmZmZmZmZ d dlmZmZ d dlmZ G dd	 d	Zd
ZdS )   )Math)RandomInteger)getPemContent	createPem)hexFromByteStringbyteStringFromHex
intFromHexbase64FromByteStringbyteStringFromBase64)
hexFromIntparseencodeConstructedDerFieldTypeencodePrimitive)	secp256k1getByOid)	PublicKeyc                   @   sb   e Zd ZedfddZdd Zdd Zdd	 Zd
d Ze	dd Z
e	dd Ze	efddZdS )
PrivateKeyNc                 C   s"   || _ |ptd|jd | _d S )Nr   )curver   ZbetweenNsecret)selfr   r    r   x/var/www/html/staging.mfahmagazine.net/magazine_api/magazine_env/lib/python3.8/site-packages/ellipticcurve/privateKey.py__init__   s    zPrivateKey.__init__c                 C   s0   | j }tj|j| j|j|j|jd}t||dS )N)pnr   AP)Zpointr   )	r   r   ZmultiplyGr   r   r   r   r   )r   r   ZpublicPointr   r   r   	publicKey   s    zPrivateKey.publicKeyc                 C   s
   t | jS )N)r   r   )r   r   r   r   toString   s    zPrivateKey.toStringc              	   C   s`   |   jdd}tttjdttjt| jttj	ttj
| jjttjttj|}t|S )NTencodedr   )r    r!   r   r   r   integerZoctetStringr   r   ZoidContainerobjectr   ZoidZpublicKeyPointContainerZ	bitStringr   )r   publicKeyStringhexadecimalr   r   r   toDer   s    
zPrivateKey.toDerc                 C   s   |   }tt|tdS )N)contenttemplate)r(   r   r	   _pemTemplate)r   Zderr   r   r   toPem(   s    zPrivateKey.toPemc                 C   s   t |td}| t|S )N)Zpemr*   )r   r+   fromDerr
   )clsstringZprivateKeyPemr   r   r   fromPem,   s    zPrivateKey.fromPemc           	      C   sr   t |}t|d \}}}}|dkr4tdj|dt|d }| j||d}| jdd|d krntd|S )	N    r   zKPrivate keys should start with a '1' flag, but a '{flag}' was found instead)flag)r/   r   Tr"   zdThe public key described inside the private key file doesn't match the actual public key of the pair)r   r   	Exceptionformatr   
fromStringr    r!   )	r.   r/   r'   ZprivateKeyFlagZ	secretHexZ	curveDatar&   r   Z
privateKeyr   r   r   r-   1   s    zPrivateKey.fromDerc                 C   s   t t||dS )N)r   r   )r   r   )r.   r/   r   r   r   r   r5   ?   s    zPrivateKey.fromString)__name__
__module____qualname__r   r   r    r!   r(   r,   classmethodr0   r-   r5   r   r   r   r   r   
   s   


r   zG
-----BEGIN EC PRIVATE KEY-----
{content}
-----END EC PRIVATE KEY-----
N)mathr   Zutils.integerr   Z	utils.pemr   r   Zutils.binaryr   r   r   r	   r
   Z	utils.derr   r   r   r   r   r   r   r   r    r   r   r+   r   r   r   r   <module>   s   :