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ddddddddd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)   	   )   l   N:sre5FG;*!c(}6~Fj! )   l   <vP C'Adt7GlUd|uU^)   l    *t0"+w_b6R}^x[Ly)   l   1E/OB)	McvOWgrf&&)r   l   dMfqF_9XtV76 #eHI+)   l   j9a:H3j?(w:qE 2s)   l   )G@+,c\Pvy*~A|QYeE9p,4)   l   PMv+YSYC0k}CBNmM  C)i  l   %1!Z]EoCv:pfAo4!oj	rAl)i l   grc4)OtY\]	lwwu< )iU l   XR>#sZ60>|Ik|0,)l   g x^rP)l   f~(D494H5}$\dz59EP)l   S9i@eM^w|o                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_Curve25519l   4!'MI.>.< OoffY<	l   $+'UfbCxDm1,\qt<K?:!c                 C   s$   t dd t dd d d d d S )Nr   
curve25519r   r         )r   self r   U/tmp/pip-unpacked-wheel-_q8s9isk/Cryptodome/SelfTest/PublicKey/test_ECC_Curve25519.py	test_initD   s    
z!TestEccPoint_Curve25519.test_initc                 C   s   t dd}| |jd d S )Nr   r   
Curve25519)r   assertEqualcurver   pointr   r   r   test_curve_attributeH   s    
z,TestEccPoint_Curve25519.test_curve_attributec                 C   s0   |  ttddd d  d |  ttdd d S )Nr   r   r   r   r   r   Z
curve25518)assertRaises
ValueErrorr   r   r   r   r   test_init_failL   s    z&TestEccPoint_Curve25519.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_setP   s    
z&TestEccPoint_Curve25519.test_equal_setc                 C   s(   t | jd}| }| |j|j d S r%   )r   r&   copyr   r*   r+   r   r   r   	test_copyZ   s    z!TestEccPoint_Curve25519.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_pai_   s
    
z TestEccPoint_Curve25519.test_paic                 C   st   t dd}d| }| |  d| }| |  |d }| |jd tD ]\}}|| }| |j| qPd S )Nr   r   r   l   S9i@eM^w|o                r
   )r   r2   r1   r   r*   scalar_base9_test)r   baseZpointHdresultr   r   r   test_scalar_multiplyg   s    
z,TestEccPoint_Curve25519.test_scalar_multiplyc                 C   s.   t dd}| | d | | d d S )Nr   r   r       )r   r   Zsize_in_bitsZsize_in_bytesr   r   r   r   
test_sizesw   s    
z"TestEccPoint_Curve25519.test_sizesN)__name__
__module____qualname__r&   r'   r   r!   r$   r.   r0   r3   r8   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_Curve25519c                 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 )N@77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a@8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6alittle	byteorderr   r   seedZ@5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0ebZ@de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4fr   r
   r   r6   )r   r   
from_bytesr   r   rE   r2   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_key   s     z&TestEccKey_Curve25519.test_private_keyc                 C   s>   t td jdd}td|d}| |  | |j| d S )Nr   r   )r   r    )r   r	   Gxr   assertFalserH   r   rI   )r   r    rJ   r   r   r   test_public_key   s    
z%TestEccKey_Curve25519.test_public_keyc                 C   s6   t ddd}| }| |  | |j|j d S )Nr       HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHrD   )r   
public_keyrN   rH   r   rI   )r   Zpriv_keyZpub_keyr   r   r   test_public_key_derived   s    z-TestEccKey_Curve25519.test_public_key_derivedc                 C   s   |  tdd  d S )Nc                   S   s   t dddS )Nr      HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHrD   )r   r   r   r   r   <lambda>       z9TestEccKey_Curve25519.test_invalid_seed.<locals>.<lambda>)r"   r#   r   r   r   r   test_invalid_seed   s    z'TestEccKey_Curve25519.test_invalid_seedc                 C   s   t jddd}t jddd}t jddd}| }| }| }| || | || | || | || | || d S )NrP   r   )rE   r   r   s    CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC)r   	constructrQ   r   r(   )r   Zprivate_keyZprivate_key2Zprivate_key3rQ   Zpublic_key2Zpublic_key3r   r   r   test_equality   s    z#TestEccKey_Curve25519.test_equalityc                 C   s@   t jdd}| dt| | |jd | | jd d S )Nr   rL   zcurve='Curve25519'r   )r   generateZassertInreprr   r   rQ   )r   rJ   r   r   r   test_name_consistency   s    z+TestEccKey_Curve25519.test_name_consistencyN)	r;   r<   r=   rK   rO   rR   rV   rX   r[   r   r   r   r   r>   }   s   r>   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestEccModule_Curve25519c                 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   rL   r   )r   Zrandfunc)r   rY   r2   rH   r   r	   rM   r6   r   rI   r(   r   newread)r   rJ   r    key2key1r   r   r   test_generate   s    z&TestEccModule_Curve25519.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 )Nr?   r@   rA   rB   r   rL   rD   r   point_x)r   rE   rc   r   )r   r   rG   r   r   rW   r   rI   r2   rH   rN   )r   rE   Z	point_hexZPxr    rJ   r   r   r   test_construct   s    z'TestEccModule_Curve25519.test_constructc                 C   sd  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	 | jttjddd	 | jttj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	 | jttjd|d d	 | jttjd|d d	 | jttjd|d d
 d	 | jttjd|d d	 | jttjd|d d
 d	 d S )Nr   )rc   r   r   rF   rS   rD   r   rb   r
   l   kxujaj\~|ObjZs	oP,E$ l   _+yBb$:6gw[8cph[DS7OWr   r   )dictr	   rM   r"   r#   r   rW   )r   ZcoordGpr   r   r   test_negative_construct   sP    

z0TestEccModule_Curve25519.test_negative_constructN)r;   r<   r=   ra   rd   rg   r   r   r   r   r\      s   r\   c                 C   s,   g }|t t7 }|t t7 }|t t7 }|S N)r   r   r>   r\   )configtestsr   r   r   	get_tests  s
    rk   __main__c                   C   s   t t S rh   )unittestZ	TestSuiterk   r   r   r   r   suite  s    rn   )ZdefaultTest)rm   binasciir   ZCryptodome.SelfTest.st_commonr   ZCryptodome.Math.Numbersr   ZCryptodome.Hashr   ZCryptodome.PublicKeyr   ZCryptodome.PublicKey.ECCr   r   r	   r4   ZTestCaser   r>   r\   rk   r;   rn   mainr   r   r   r   <module>   s8   >EN