o
     j'                     @   s  d dl Z 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mZmZmZ dd	 dd
  d Zdd d Zddddddddddddded dfgZG dd de jZG dd de jZG d d! d!e jZi fd"d#Zed$krd%d& Ze jd&d' dS dS )(    N)	unhexlify)list_test_cases)Integer)SHAKE128)ECC)EccKey	EccXPoint_curves           i  l   ;O)u9d
NG\cIoSDY%	c; )r      )r
   l   <8i ABV	xt%qhG?:M3;<_zDwIW/2Fo5)+"r)   l   Ls
4EQGCD>MRrou1& ,d0BDqaIKAB*&,d)   l   b"yu/mX~udd#z
Nk`{dt>'iEEu=J4')   l   X5V'w,P9FszL,	 $X1i=U& rgk1S|"ePXo)zeQ')	   l   -h_xaJ=?{OdG;
]:XauXNIwr"Yw\|?f>7W.)   l    #~mpN"d *[b@>j)e		dtijwPJUVAPP[)   l   +?']-w
qD+C#z;>XI#D	X79QmF"z088$\D.C7)   l   A&1AV9&bu)%s* Q.sru%&F3iZ"(r \!K!s\ )i  l   h[~=IHs']TeV}STeIV"tX\}VI. !	p)i l   A`8QKAQ%zY0) X$n2xP>B;cZG].f=VJqN;')iU l   lIwoQZmj=k/jox"lgW}&F ?y,pi%)l   g x^rP)l   0SK>e*a`DV/!?an8a_p.]dday`i;{r   c                   @   sT   e Zd ZdZdZdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd ZdS )TestEccPoint_Curve448l   4!'MI.>.< OoffY<	l   $+'UfbCxDm1,\qt<K?:!c                 C   s   t dd t td d d S )Nr   curve448)r   
CURVE448_Pself r   l/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/Crypto/SelfTest/PublicKey/test_ECC_Curve448.py	test_init*      
zTestEccPoint_Curve448.test_initc                 C   s   t dd}| |jd d S )Nr   r   Curve448)r   assertEqualcurver   pointr   r   r   test_curve_attribute.   r   z*TestEccPoint_Curve448.test_curve_attributec                 C   s(   |  ttdt d |  ttdd d S )Nr   r   Zcurve449)assertRaises
ValueErrorr   r   r   r   r   r   test_init_fail2   s   z$TestEccPoint_Curve448.test_init_failc                 C   sN   t | jd}t | jd}| || | || || | |j|j d S Nr   )r   v1v2r    assertNotEqualsetxr   point1point2r   r   r   test_equal_set6   s   
z$TestEccPoint_Curve448.test_equal_setc                 C   s(   t | jd}| }| |j|j d S r(   )r   r)   copyr    r-   r.   r   r   r   	test_copy@   s   zTestEccPoint_Curve448.test_copyc                 C   s>   t | jd}| }| |  t d d}| |  d S r(   )r   r)   point_at_infinity
assertTrue)r   r/   Zpair0   r   r   r   test_paiE   s
   
zTestEccPoint_Curve448.test_paic                 C   st   t dd}d| }| |  t| }| |  |d }| |jd tD ]\}}|| }| |j| q(d S )Nr   r   r   r   )r   r5   r4   CURVE448_ORDERr    r-   scalar_base5_test)r   baseZpointHdresultr   r   r   test_scalar_multiplyM   s   
z*TestEccPoint_Curve448.test_scalar_multiplyc                 C   s.   t dd}| | d | | d d S )Nr   r   r   8   )r   r    Zsize_in_bitsZsize_in_bytesr"   r   r   r   
test_sizes]   s   
z TestEccPoint_Curve448.test_sizesN)__name__
__module____qualname__r)   r*   r   r$   r'   r1   r3   r6   r<   r>   r   r   r   r   r   %   s    
r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestEccKey_Curve448c                 C   s   t d}t d}tj|dd}td|d}| |j| | |  | |jj	| t d}t d}tj|dd}td|d}| |j| | |  | |jj	| td	|d}| j
ttd	d
d d S )Np9a8f4925d1519f5775cf46b04b5800d4ee9ee8bae8bc5565d498c28dd9c9baf574a9419744897391006382a6f127ab1d9ac2d8c0a598726bp9b08f7cc31b7e3e67d22d5aea121074a273bd2b83de09c63faa73d2c22c5d9bbc836647241d953d40c5b12da88120d53177f80e532c41fa0little	byteorderr   r!   seedZp1c306a7ac2a0e2e0990b294470cba339e6453772b075811d8fad0d1d6927c120bb5ee8972b0d3e21374c9c921b09d1b0366f10b65173992dZp3eb7a829b0cd20f5bcfc0b599b6feccf6da4627107bdb0d4f345b43027d8b972fc3e34fb4232a13ca706dcb57aec3dae07bdc1c67bf33609r   r   r!   r:   )r   r   
from_bytesr   r    rI   r5   has_privatepointQr-   r%   r&   )r   Z
alice_privZ	alice_pubZalice_pub_xkeyZbob_privZbob_pubZ	bob_pub_xr   r   r   test_private_keye   s    z$TestEccKey_Curve448.test_private_keyc                 C   s>   t td jdd}td|d}| |  | |j| d S )Nr   r!   )r!   r#   )r   r	   Gxr   assertFalserL   r    rM   )r   r#   rN   r   r   r   test_public_key   s   
z#TestEccKey_Curve448.test_public_keyc                 C   s6   t ddd}| }| |  | |j|j d S )Nr   8   HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHrH   )r   
public_keyrR   rL   r    rM   )r   Zpriv_keyZpub_keyr   r   r   test_public_key_derived   s   z+TestEccKey_Curve448.test_public_key_derivedc                 C   s   |  tdd  d S )Nc                   S   s   t dddS )Nr   7   HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHrH   )r   r   r   r   r   <lambda>   s    z7TestEccKey_Curve448.test_invalid_seed.<locals>.<lambda>)r%   r&   r   r   r   r   test_invalid_seed   s   z%TestEccKey_Curve448.test_invalid_seedc                 C   s   t jddd}t jddd}t jddd}| }| }| }| || | || | || | || | || d S )NrT   r   )rI   r!   r   s8   CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC)r   	constructrU   r    r+   )r   Zprivate_keyZprivate_key2Zprivate_key3rU   Zpublic_key2Zpublic_key3r   r   r   test_equality   s   z!TestEccKey_Curve448.test_equalityc                 C   s@   t jdd}| dt| | |jd | | jd d S )Nr   rP   zcurve='Curve448'r   )r   generateZassertInreprr    r!   rU   )r   rN   r   r   r   test_name_consistency   s   z)TestEccKey_Curve448.test_name_consistencyN)	r?   r@   rA   rO   rS   rV   rY   r[   r^   r   r   r   r   rB   c   s    rB   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestEccModule_Curve448c                 C   s   t jdd}| |  ttd jdd|j }| |j	| t jdd}| 
|| t jdd t jdt jd}t jdt jd}| || d S )Nr   rP   r   )r!   Zrandfunc)r   r\   r5   rL   r   r	   rQ   r:   r    rM   r+   r   newread)r   rN   r#   key2key1r   r   r   test_generate   s   z$TestEccModule_Curve448.test_generatec                 C   s   t d}t d}tj|dd}t|dd}tjd|d}| |j| | |	  tjd|d}| |j| | 
|	  tjd||d	}| |j| | |	  tjd
|d}d S )NrC   rD   rE   rF   r   rP   rH   r!   point_x)r!   rI   rf   r   )r   r   rK   r   r   rZ   r    rM   r5   rL   rR   )r   rI   Z	point_hexZPxr#   rN   r   r   r   test_construct   s   z%TestEccModule_Curve448.test_constructc                 C   s   t td jd}| jttjfddd| | jttjddd | jttjddd	 | jttjdd
d	 dd dd  d
 }| jttjd|d
 d	 | jttjd|d	 | jttjd|d
 d	 d S )Nr   )rf   r   r
   rJ   rW   rH   r   re   r   r   r   )dictr	   rQ   r%   r&   r   rZ   )r   ZcoordGpr   r   r   test_negative_construct   s2   
z.TestEccModule_Curve448.test_negative_constructN)r?   r@   rA   rd   rg   rj   r   r   r   r   r_      s    r_   c                 C   s,   g }|t t7 }|t t7 }|t t7 }|S N)r   r   rB   r_   )configZtestsr   r   r   	get_tests   s
   rm   __main__c                   C   s   t t S rk   )unittestZ	TestSuiterm   r   r   r   r   suite   s   rp   )ZdefaultTest)ro   binasciir   ZCrypto.SelfTest.st_commonr   ZCrypto.Math.Numbersr   ZCrypto.Hashr   ZCrypto.PublicKeyr   ZCrypto.PublicKey.ECCr   r   r	   r   r7   r8   ZTestCaser   rB   r_   rm   r?   rp   mainr   r   r   r   <module>   s@   
>FB