
    Tf              	       |   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z  d	z
  Zd
Z e ed                    ZdZ e ed                    Z e ed                    Zddz  dz   Zd Z ej        eeeee          Z ej        eeedeez  ez  ed          Zddz  ddz  z
  dz
  ZdZdez  ZdZ e ed                    Z e ed                    Zddz  dz
  Zd Z ej        eeeee          Z ej        eeedeez  ez  ed          Z G d de          Z G 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         M37095705934669439343138083508754565189542113879843219016388785533085940283555   M15112221349535400772501151409588531511454012693041857206046113283949847762202M46316835694926478169428394003475163141307993866256225615783033603165251855960   l	   S9i@eM^w|o c                 j    t          j        dt          |                                                     S )Nsha512)hashlibnewr   digestdatas    =/var/www/html/env/lib/python3.11/site-packages/ecdsa/eddsa.py_sha512r   (   s(    ;xd!3!344;;===    T)	generatori     iWg   ڇ224580040295924300187604334099896036246789641632564134246125461686950415467406032909029192869357953282578032075146446173674602635247710ڇ298819210078481492676017930443930673437544040154080242095928241372331506189835876003536878655418784733982303233503462500531545062832660i  l   ;O)u9d
NG\cIoSDY%	c; c                 "    t          | d          S )Nr   r   r   s    r   	_shake256r&   I   s    T3r   c                   n    e Zd ZdZddZd Zd Zed             Zej	        d             Zd Z
d	 Zd
 ZdS )	PublicKeyz7Public key for the Edwards Digital Signature Algorithm.Nc                    || _         |                                | _        || _        t          | j                                                  dz   dz   dz  | _        t          |          | j        k    r't          d                    | j                            |r	|| _	        d S 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_points       r   __init__zPublicKey.__init__V   s    "__&&
#"4:<<>>22Q6:q@z??dl**GNNL   
  	'DLLL(5@@
J DLLLr   c                 z    t          |t                    r | j        |j        k    o| j        |j        k    S t          S N)
isinstancer(   r+   r,   NotImplementedr5   others     r   __eq__zPublicKey.__eq__i   s;    eY'' 	
ek)Odn.O r   c                     | |k     S r:    r=   s     r   __ne__zPublicKey.__ne__p       5=  r   c                     | j         S r:   r2   r5   s    r   pointzPublicKey.points   s
    |r   c                 H    | j         |k    rt          d          || _         d S )Nz)Can't change the coordinates of the point)r2   r0   r=   s     r   rG   zPublicKey.pointw   s)    <5  HIIIr   c                     | j         S r:   rE   rF   s    r   r7   zPublicKey.public_point}   s
    |r   c                     | j         S r:   )r,   rF   s    r   r6   zPublicKey.public_key   s
    ~r   c                    t          |          }t          |          d| j        z  k    r*t          d                    d| j        z                      t
          j                            | j        |d| j                           }t          || j        d         d          }|| j
                                        k    rt          d          t                      }| j        t          k    rt          d          }t          | j                            ||                                z   | j        z   |z             d          }| j
        |z  | j        |z  |z   k    rt          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.   r0   r1   r   r3   r4   r+   r	   r   order	bytearraycurve_ed448	hash_functo_bytesr,   r2   )r5   r   	signatureRSdomks          r   verifyzPublicKey.verify   s\   D!!y>>Q---?FF$   
 &11J	.DL.1
 
 4<>>2H==$$&&&&0111kk:$$566CJ  qzz||!3dn!Dt!KLL
 

 >A!1A!5550111tr   r:   )__name__
__module____qualname____doc__r8   r?   rB   propertyrG   setterr7   r6   rX   rA   r   r   r(   r(   S   s        AA   &  ! ! !   X \  \
        r   r(   c                   L    e Zd ZdZd Zed             Zd Zd Zd Z	d Z
d Zd	S )

PrivateKeyz8Private key for the Edwards Digital Signature Algorithm.c                 :   || _         |                                | _        t          | j                                                  dz   dz   dz  | _        t          |          | j        k    r't          d                    | j                            t          |          | _	        t          | j                            |                    | _        d | _        | j        d | j                 }|                     |          }t          |d          }|| _        d S )Nr   r*   r   z2Incorrect size of private key, expected: {0} bytesrL   )r   r+   r   r-   r.   r/   r0   r1   bytes_PrivateKey__private_keyrO   rQ   _PrivateKey__h_PrivateKey__public_key
_key_pruner	   _PrivateKey__s)r5   r   private_keyascalars        r   r8   zPrivateKey.__init__   s    "__&&
"4:<<>>22Q6:q@{t|++DKKL   
 #;//TZ11+>>?? H^t|^$OOAa**r   c                     | j         S r:   )rc   rF   s    r   rh   zPrivateKey.private_key   s    !!r   c                 z    t          |t                    r | j        |j        k    o| j        |j        k    S t          S r:   )r;   r`   r+   rc   r<   r=   s     r   r?   zPrivateKey.__eq__   s@    eZ(( 	
ek) >&%*== r   c                     | |k     S r:   rA   r=   s     r   rB   zPrivateKey.__ne__   rC   r   c                 x   | j                                         }|dk    rd}n|dk    rd}nt          d          |dxx         d|z  dz
   z  cc<   t          | j                                                   }|dz  dk    rd|d<   |d	xx         d
z  cc<   n#|d         d|dz  z  dz
  z  d|dz  dz
  z  z  |d<   |S )Nr!   r   r      z&Only cofactor 4 and 8 curves supportedr   r   r      )r+   cofactorr0   r   r-   )r5   keyhh_logls        r   rf   zPrivateKey._key_prune   s    J!!66EE!VVEEEFFFAQ%Z1$%% tz||~~&&q5A::CGGGGtOGGGG"gq1u 22Q1q5A+5EECG
r   c                     | j         r| j         S | j        | j        z  }t          | j        |                                |          | _         | j         S )z9Generate the public key based on the included private key)re   r   rg   r(   rR   )r5   r7   s     r   r6   zPrivateKey.public_key   sV     	%$$~0%NL1133\
 
   r   c                    t          |          }|                                                                 }| j        | j        d         }t	                      }| j        t          k    rt	          d          }t          | j                            ||z   |z             d          }| j	        |z  
                                }t          | j                            ||z   |z   |z             d          }|| j	                                        z  }||| j        z  z   | j	                                        z  }|t          || j        d          z   S )z)Perform a Pure EdDSA signature over data.NrM   rL   )r   r6   rd   r.   rO   r+   rP   r	   rQ   r   rR   rN   rg   r
   )	r5   r   AprefixrV   rrT   rW   rU   s	            r   signzPrivateKey.sign   s    D!!OO((**$,..)kk:$$566C--cFlT.ABBHMM^a))++--cAgkD.@AA8LL	T^!!###TX!5!5!7!77<4<::::r   N)rY   rZ   r[   r\   r8   r]   rh   r?   rB   rf   r6   r|   rA   r   r   r`   r`      s        BB  ( " " X"  ! ! !  (! ! !; ; ; ; ;r   r`   )r\   r   _sha3r    r   _compatr   r   r	   r
   r   _p_aint_d_h_Gx_Gy_rr   	CurveEdTwcurve_ed25519r3   generator_ed25519r&   rP   generator_ed448objectr(   r`   rA   r   r   <module>r      s   < <                           Vb[S	   	c	   
c	   V00> > > ('BB@@.M.3Qc	Bd    Vaf_qb[	c	   
c	   VHH      &m%b"b"i@@,-,c1cCi"nbD  
L L L L L L L L^Z; Z; Z; Z; Z; Z; Z; Z; Z; Z;r   