U
    g'                     @   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 )(    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   S/tmp/pip-unpacked-wheel-_q8s9isk/Cryptodome/SelfTest/PublicKey/test_ECC_Curve448.py	test_init*   s    
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.   s    
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pair/   r   r   r   test_paiE   s
    
zTestEccPoint_Curve448.test_paic                 C   st   t dd}d| }| |  t| }| |  |d }| |jd tD ]\}}|| }| |j| qPd S )Nr   r   r   r   )r   r4   r3   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&   r0   r2   r5   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    r9   )r   r   
from_bytesr   r   rH   r4   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   assertFalserK   r   rL   )r   r"   rM   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   HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHrG   )r   
public_keyrQ   rK   r   rL   )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   HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHrG   )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 )NrS   r   )rH   r    r   s8   CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC)r   	constructrT   r   r*   )r   Zprivate_keyZprivate_key2Zprivate_key3rT   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   rO   zcurve='Curve448'r   )r   generateZassertInreprr   r    rT   )r   rM   r   r   r   test_name_consistency   s    z)TestEccKey_Curve448.test_name_consistencyN)	r>   r?   r@   rN   rR   rU   rX   rZ   r]   r   r   r   r   rA   c   s   rA   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   rO   r   )r    Zrandfunc)r   r[   r4   rK   r   r	   rP   r9   r   rL   r*   r   newread)r   rM   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 )NrB   rC   rD   rE   r   rO   rG   r    point_x)r    rH   re   r   )r   r   rJ   r   r   rY   r   rL   r4   rK   rQ   )r   rH   Z	point_hexZPxr"   rM   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   )re   r   r
   rI   rV   rG   r   rd   r   r   r   )dictr	   rP   r$   r%   r   rY   )r   ZcoordGpr   r   r   test_negative_construct   s2    z.TestEccModule_Curve448.test_negative_constructN)r>   r?   r@   rc   rf   ri   r   r   r   r   r^      s   r^   c                 C   s,   g }|t t7 }|t t7 }|t t7 }|S N)r   r   rA   r^   )configtestsr   r   r   	get_tests   s
    rm   __main__c                   C   s   t t S rj   )unittestZ	TestSuiterm   r   r   r   r   suite   s    rp   )ZdefaultTest)ro   binasciir   ZCryptodome.SelfTest.st_commonr   ZCryptodome.Math.Numbersr   ZCryptodome.Hashr   ZCryptodome.PublicKeyr   ZCryptodome.PublicKey.ECCr   r   r	   r   r6   r7   ZTestCaser   rA   r^   rm   r>   rp   mainr   r   r   r   <module>   s<   
>FB