a
    _mg                  	   @   sd  d Z ddlZddlmZ ddlmZ ddlmZmZm	Z	m
Z
mZ dd d	 Zd
ZeedZdZeedZeedZdd d Zdd ZeeeeeeZejeeedee e eddZdd dd  d ZdZde ZdZeedZeedZdd d Zdd ZeeeeeeZejeeedee e eddZG dd  d eZG d!d" d"eZdS )#z6Implementation of Edwards Digital Signature Algorithm.    N   	shake_256)ellipticcurve)remove_whitespace
bit_lengthbytes_to_intint_to_bytescompat26_str         ZM37095705934669439343138083508754565189542113879843219016388785533085940283555   ZM15112221349535400772501151409588531511454012693041857206046113283949847762202ZM46316835694926478169428394003475163141307993866256225615783033603165251855960   l	   S9i@eM^w|o c                 C   s   t dt|  S )Nsha512)hashlibnewr
   digestdata r   B/var/www/html/idle/venv/lib/python3.9/site-packages/ecdsa/eddsa.py_sha512(   s    r   T)	generatori     iWg   Z224580040295924300187604334099896036246789641632564134246125461686950415467406032909029192869357953282578032075146446173674602635247710Z298819210078481492676017930443930673437544040154080242095928241372331506189835876003536878655418784733982303233503462500531545062832660i  l   ;O)u9d
NG\cIoSDY%	c; c                 C   s
   t | dS )Nr   r   r   r   r   r   	_shake256I   s    r   c                   @   s\   e Zd ZdZdddZdd Zdd Zed	d
 Zej	dd
 Zdd Z
dd Zdd ZdS )	PublicKeyz7Public key for the Edwards Digital Signature Algorithm.Nc                 C   sr   || _ | | _|| _t| j d d d | _t|| jkrPtd| j|r\|| _	nt
j| j|| _	d S )Nr      r   z5Incorrect size of the public key, expected: {0} bytes)r   curve_PublicKey__encodedr   pbaselenlen
ValueErrorformat_PublicKey__pointr   PointEdwards
from_bytes)selfr   
public_keypublic_pointr   r   r   __init__V   s    
zPublicKey.__init__c                 C   s&   t |tr"| j|jko | j|jkS tS N)
isinstancer   r!   r"   NotImplementedr+   otherr   r   r   __eq__i   s    
zPublicKey.__eq__c                 C   s
   | |k S r/   r   r2   r   r   r   __ne__p   s    zPublicKey.__ne__c                 C   s   | j S r/   r(   r+   r   r   r   points   s    zPublicKey.pointc                 C   s   | j |krtd|| _ d S )Nz)Can't change the coordinates of the point)r(   r&   r2   r   r   r   r8   w   s    
c                 C   s   | j S r/   r6   r7   r   r   r   r-   }   s    zPublicKey.public_pointc                 C   s   | j S r/   )r"   r7   r   r   r   r,      s    zPublicKey.public_keyc                 C   s   t |}t|d| j kr.tdd| j tj| j|d| j }t	|| jd d}|| j
 krrtdt }| jtkrtd}t	| j||  | j | d}| j
| | j| | krtddS )z(Verify a Pure EdDSA signature over data.r   z-Invalid signature length, expected: {0} bytesNlittlezInvalid signature
   SigEd448  T)r
   r%   r$   r&   r'   r   r)   r*   r!   r   r   order	bytearraycurve_ed448	hash_functo_bytesr"   r(   )r+   r   	signatureRSdomkr   r   r   verify   s.    
zPublicKey.verify)N)__name__
__module____qualname____doc__r.   r4   r5   propertyr8   setterr-   r,   rE   r   r   r   r   r   S   s   


r   c                   @   sL   e Zd ZdZdd Zedd Zdd Zdd	 Zd
d Z	dd Z
dd ZdS )
PrivateKeyz8Private key for the Edwards Digital Signature Algorithm.c                 C   s   || _ | | _t| j d d d | _t|| jkrJtd| jt|| _	t
| j|| _d | _| jd | j }| |}t|d}|| _d S )Nr   r    r   z2Incorrect size of private key, expected: {0} bytesr9   )r   r!   r   r#   r$   r%   r&   r'   bytes_PrivateKey__private_keyr<   r>   _PrivateKey__h_PrivateKey__public_key
_key_pruner   _PrivateKey__s)r+   r   private_keyaZscalarr   r   r   r.      s     



zPrivateKey.__init__c                 C   s   | j S r/   )rN   r7   r   r   r   rS      s    zPrivateKey.private_keyc                 C   s&   t |tr"| j|jko | j|jkS tS r/   )r0   rL   r!   rN   r1   r2   r   r   r   r4      s
    

zPrivateKey.__eq__c                 C   s
   | |k S r/   r   r2   r   r   r   r5      s    zPrivateKey.__ne__c                 C   s   | j  }|dkrd}n|dkr&d}ntd|d  d|> d  M  < t| j  }|d dkr|d|d< |d	  d
O  < n,|d d|d > d @ d|d d > B |d< |S )Nr   r   r      z&Only cofactor 4 and 8 curves supportedr   r   r      )r!   Zcofactorr&   r   r#   )r+   keyhZh_loglr   r   r   rQ      s    
,zPrivateKey._key_prunec                 C   s2   | j r| j S | j| j }t| j| || _ | j S )z9Generate the public key based on the included private key)rP   r   rR   r   r?   )r+   r-   r   r   r   r,      s    zPrivateKey.public_keyc           	      C   s   t |}|   }| j| jd }t }| jtkr<td}t| j|| | d}| j	| 
 }t| j|| | | d}|| j	 ; }||| j  | j	  }|t|| jd S )z)Perform a Pure EdDSA signature over data.Nr:   r9   )r
   r,   rO   r$   r<   r!   r=   r   r>   r   r?   r;   rR   r	   )	r+   r   AprefixrC   rrA   rD   rB   r   r   r   sign   s    
zPrivateKey.signN)rF   rG   rH   rI   r.   rJ   rS   r4   r5   rQ   r,   r^   r   r   r   r   rL      s   
rL   )rI   r   _sha3r    r   Z_compatr   r   r   r	   r
   _pZ_aintZ_dZ_hZ_GxZ_Gy_rr   Z	CurveEdTwZcurve_ed25519r)   Zgenerator_ed25519r   r=   Zgenerator_ed448objectr   rL   r   r   r   r   <module>   sd   	O