o
    w+f
                     @   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   betweenNsecret)selfr   r    r   K/var/www/html/venv/lib/python3.10/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)pointr   )	r   r   multiplyGr   r   r   r   r   )r   r   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   integeroctetStringr   r   oidContainerobjectr   oidpublicKeyPointContainer	bitStringr   )r   publicKeyStringhexadecimalr   r   r   toDer   s   
zPrivateKey.toDerc                 C   s   |   }tt|tdS )N)contenttemplate)r1   r   r	   _pemTemplate)r   derr   r   r   toPem(   s   zPrivateKey.toPemc                 C   s   t |td}| t|S )N)pemr3   )r   r4   fromDerr
   )clsstringprivateKeyPemr   r   r   fromPem,   s   zPrivateKey.fromPemc           	      C   sr   t |}t|d \}}}}|dkrtdj|dt|d }| j||d}| jdd|d kr7t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%   )	r9   r:   r0   privateKeyFlag	secretHex	curveDatar/   r   
privateKeyr   r   r   r8   1   s   zPrivateKey.fromDerc                 C   s   t t||dS )N)r   r   )r   r   )r9   r:   r   r   r   r   rA   ?   s   zPrivateKey.fromString)__name__
__module____qualname__r   r   r$   r%   r1   r6   classmethodr<   r8   rA   r   r   r   r   r   
   s    


r   zG
-----BEGIN EC PRIVATE KEY-----
{content}
-----END EC PRIVATE KEY-----
N)mathr   utils.integerr   	utils.pemr   r   utils.binaryr   r   r   r	   r
   	utils.derr   r   r   r   r   r   r   r   r$   r   r   r4   r   r   r   r   <module>   s    :