
    tZh              	       B   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y)!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                 \    t        j                  dt        |             j                         S )Nsha512)hashlibnewr   digestdatas    g/var/www/html/wine-match-dev/backend/winematch-backend/venv/lib/python3.12/site-packages/ecdsa/eddsa.py_sha512r   (   s!    ;;xd!3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                   j    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y)	PublicKeyz7Public key for the Edwards Digital Signature Algorithm.Nc                    || _         |j                         | _        || _        t        | j                  j	                               dz   dz   dz  | _        t        |      | j
                  k7  r$t        dj                  | j
                              |r|| _	        y t        j                  j                  | j                  |      | _	        y )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::<<>2Q6:q@z?dll*GNNLL 
 'DL(55@@

JDLr   c                     t        |t              r4| j                  |j                  k(  xr | j                  |j                  k(  S t        S N)
isinstancer(   r+   r,   NotImplementedr5   others     r   __eq__zPublicKey.__eq__i   s;    eY'

ekk)Odnn.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                 F    | j                   |k7  rt        d      || _         y )Nz)Can't change the coordinates of the point)r2   r0   r=   s     r   rG   zPublicKey.pointw   s!    <<5 H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  k7  r't        dj	                  d| j                  z              t
        j                  j                  | j                  |d| j                         }t        || j                  d d      }|| j                  j                         k\  rt        d      t               }| j                  t        k(  rt        d      }t        | j                  j                  ||j                         z   | j                   z   |z         d      }| j                  |z  | j"                  |z  |z   k7  rt        d      y)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   s4   D!y>Q--?FF$ 
 &&11JJ	.DLL1
 4<<>2H=$$&&011k::$56CJJ  qzz|!3dnn!Dt!KL

 >>A!1A!55011r   r:   )__name__
__module____qualname____doc__r8   r?   rB   propertyrG   setterr7   r6   rX   rA   r   r   r(   r(   S   sO    A&!   \\ 
r   r(   c                   D    e Zd ZdZd Zed        Zd Zd Zd Z	d Z
d Zy	)

PrivateKeyz8Private key for the Edwards Digital Signature Algorithm.c                    || _         |j                         | _        t        | j                  j                               dz   dz   dz  | _        t        |      | j                  k7  r$t        dj                  | j                              t        |      | _	        t        | j                  j                  |            | _        d | _        | j                  d | j                   }| j                  |      }t        |d      }|| _        y )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::<<>2Q6:q@{t||+DKKLL 
 #;/TZZ11+>? HH^t||$OOAa*r   c                     | j                   S r:   )rc   rF   s    r   rh   zPrivateKey.private_key   s    !!!r   c                     t        |t              r4| j                  |j                  k(  xr | j                  |j                  k(  S t        S r:   )r;   r`   r+   rc   r<   r=   s     r   r?   zPrivateKey.__eq__   sB    eZ(

ekk) >&&%*=*== r   c                     | |k(   S r:   rA   r=   s     r   rB   zPrivateKey.__ne__   rC   r   c                 V   | j                   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                   j	                               }|dz  dk(  rd|d<   |d	xx   d
z  cc<   |S |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    JJ!6E!VEEFFAQ%Z1$%% tzz||~&q5A:CGGtOG 
 "gq1u 22Q1q5A+5EECG
r   c                     | j                   r| j                   S | j                  | j                  z  }t        | j                  |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   sX    $$$~~0%NNL113\
    r   c                    t        |      }| j                         j                         }| j                  | j                  d }t	               }| j
                  t        k(  rt	        d      }t        | j
                  j                  ||z   |z         d      }| j                  |z  j                         }t        | j
                  j                  ||z   |z   |z         d      }|| j                  j                         z  }||| j                  z  z   | j                  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((*$,,.)k::$56C--cFlT.ABHM^^a))+--cAgkD.@A8L	T^^!!##TXX!5!5!77<4<<:::r   N)rY   rZ   r[   r\   r8   r]   rh   r?   rB   rf   r6   r|   rA   r   r   r`   r`      s7    B( " "!(!;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[	 		 
	 V00> (''BB@.M..3Qc	Bd  Vaf_qb[		 
	 VHH  &m%%b"b"i@,-,,c1cCi"nbD
L L^Z; Z;r   