
    xh
                         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	          Zd
ZdS )   )Math)RandomInteger)getPemContent	createPem)hexFromByteStringbyteStringFromHex
intFromHexbase64FromByteStringbyteStringFromBase64)
hexFromIntparseencodeConstructedDerFieldTypeencodePrimitive)	secp256k1getByOid)	PublicKeyc                   x    e Zd ZedfdZd Zd Zd Zd Ze	d             Z
e	d             Ze	efd	            ZdS )

PrivateKeyNc                 \    || _         |pt          j        d|j        dz
            | _        d S )Nr   )curver   betweenNsecret)selfr   r   s      K/var/www/html/what/lib/python3.11/site-packages/ellipticcurve/privateKey.py__init__zPrivateKey.__init__   s,    
E 5a1 E E    c                     | j         }t          j        |j        | j        |j        |j        |j                  }t          ||          S )N)pnr   AP)pointr   )	r   r   multiplyGr   r   r"   r#   r   )r   r   publicPoints      r   	publicKeyzPrivateKey.publicKey   sM    
mgkggg
 
 
 {%8888r   c                 *    t          | j                  S )N)r   r   )r   s    r   toStringzPrivateKey.toString   s    $+&&&r   c                    |                                                      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hexadecimals      r   toDerzPrivateKey.toDer   s    ..**33D3AA'L0!44L4j6M6MNNL5|GZ\`\f\j7k7kllL@/R^RhjyBzBz{{	
 
 !---r   c                 p    |                                  }t          t          |          t                    S )N)contenttemplate)r7   r   r
   _pemTemplate)r   ders     r   toPemzPrivateKey.toPem(   s+    jjll!5c!:!:\RRRRr   c                 r    t          |t                    }|                     t          |                    S )N)pemr:   )r   r;   fromDerr   )clsstringprivateKeyPems      r   fromPemzPrivateKey.fromPem,   s/    %&<HHH{{/>>???r   c                    t          |          }t          |          d         \  }}}}|dk    r#t          d                    |                    t	          |d                   }|                     ||          }|                                                    d          |d         k    rt          d          |S )	N    r   zKPrivate keys should start with a '1' flag, but a '{flag}' was found instead)flag)rB   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*   )	rA   rB   r6   privateKeyFlag	secretHex	curveDatar5   r   
privateKeys	            r   r@   zPrivateKey.fromDer1   s    '//@Ek@R@RST@U=	9oQipp# q      1&&^^9E^BB
!!**4*88OA<NNN  C  D  D  Dr   c                 >    t          t          |          |          S )N)r   r   )r   r	   )rA   rB   r   s      r   rJ   zPrivateKey.fromString?   s    F!3!35AAAAr   )__name__
__module____qualname__r   r   r(   r*   r7   r=   classmethodrD   r@   rJ    r   r   r   r   
   s        &t F F F F	9 	9 	9' ' '. . .S S S @ @ [@   [ &/ B B B [B B Br   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   r;   rT   r   r   <module>rZ      s          ( ( ( ( ( ( / / / / / / / / v v v v v v v v v v v v v v Z Z Z Z Z Z Z Z Z Z Z Z Z Z & & & & & & & &            7B 7B 7B 7B 7B 7B 7B 7Btr   