o
    w+f                     @   sV   d dl mZ ddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
T G dd	 d	Zd
S )    )sha256   )	Signature)Math)RandomInteger)numberFromByteString)*c                   @   s,   e Zd ZeefddZeefddZdS )Ecdsac                 C   s   |t | }t|}|j}d\}}}	|dks|dkrRtd|jd }
tj|j	|
|j
|j|jd}	|	j|j }|||j  t|
|j |j }|dks|dks|	jd@ }|	j|jkra|d7 }t|||dS )N)r   r   Nr   r   )nAPN   )rs
recoveryId)toBytesdigestr   curver   betweenr   r   multiplyGr   r   xsecretinvyr   )clsmessage
privateKeyhashfuncbyteMessagenumberMessager   r   r   randSignPointrandNumr    r$   F/var/www/html/venv/lib/python3.10/site-packages/ellipticcurve/ecdsa.pysign   s   
"
z
Ecdsa.signc                 C   s   |t | }t|}|j}|j}|j}	d|  kr#|jd ks&dS  dS d|	  kr4|jd ks7dS  dS t|	|j}
tj	|j
||
 |j |j|j|jd}tj	|j||
 |j |j|j|jd}tj|||j|jd}| rudS |j|j |kS )Nr   F)r
   r   r   r   )r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   pointaddisAtInfinityr   )r   r   	signature	publicKeyr   r    r!   r   r   r   r   u1u2vr$   r$   r%   verify   s(   &&zEcdsa.verifyN)__name__
__module____qualname__classmethodr   r&   r/   r$   r$   r$   r%   r	   	   s
    r	   N)hashlibr   r*   r   mathr   utils.integerr   utils.binaryr   utils.compatibilityr	   r$   r$   r$   r%   <module>   s    