o
    ̳i'                     @   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   c/home/ubuntu/.local/lib/python3.10/site-packages/Cryptodome/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   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   r0   pair1   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   r6   r5   CURVE448_ORDERr    r.   scalar_base5_test)r   base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    size_in_bitssize_in_bytesr"   r   r   r   
test_sizes]   s   
z TestEccPoint_Curve448.test_sizesN)__name__
__module____qualname__r*   r+   r   r$   r(   r2   r4   r8   r?   rC   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!   seedp1c306a7ac2a0e2e0990b294470cba339e6453772b075811d8fad0d1d6927c120bb5ee8972b0d3e21374c9c921b09d1b0366f10b65173992dp3eb7a829b0cd20f5bcfc0b599b6feccf6da4627107bdb0d4f345b43027d8b972fc3e34fb4232a13ca706dcb57aec3dae07bdc1c67bf33609r   r   r!   r=   )r   r   
from_bytesr   r    rN   r6   has_privatepointQr.   r&   r'   )r   
alice_priv	alice_pubalice_pub_xkeybob_privbob_pub	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   assertFalserS   r    rT   )r   r#   rX   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   HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHrM   )r   
public_keyr_   rS   r    rT   )r   priv_key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   HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHrM   )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 )Nra   r   )rN   r!   r   s8   CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC)r   	constructrb   r    r,   )r   private_keyprivate_key2private_key3rb   public_key2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   r]   zcurve='Curve448'r   )r   generateassertInreprr    r!   rb   )r   rX   r   r   r   test_name_consistency   s   z)TestEccKey_Curve448.test_name_consistencyN)	rD   rE   rF   r\   r`   re   rh   ro   rs   r   r   r   r   rG   c   s    rG   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   r]   r   )r!   randfunc)r   rp   r6   rS   r   r	   r^   r=   r    rT   r,   r   newread)r   rX   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 )NrH   rI   rJ   rK   r   r]   rM   r!   point_x)r!   rN   r|   r   )r   r   rR   r   r   ri   r    rT   r6   rS   r_   )r   rN   	point_hexPxr#   rX   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   )r|   r   r
   rQ   rf   rM   r   r{   r   r   r   )dictr	   r^   r&   r'   r   ri   )r   coordGpr   r   r   test_negative_construct   s2   
z.TestEccModule_Curve448.test_negative_constructN)rD   rE   rF   rz   r   r   r   r   r   r   rt      s    rt   c                 C   s,   g }|t t7 }|t t7 }|t t7 }|S N)r   r   rG   rt   )configtestsr   r   r   	get_tests   s
   r   __main__c                   C   s   t t S r   )unittest	TestSuiter   r   r   r   r   suite   s   r   )defaultTest)r   binasciir   Cryptodome.SelfTest.st_commonr   Cryptodome.Math.Numbersr   Cryptodome.Hashr   Cryptodome.PublicKeyr   Cryptodome.PublicKey.ECCr   r   r	   r   r9   r:   TestCaser   rG   rt   r   rD   r   mainr   r   r   r   <module>   s@   
>FB