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 g d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radd Ze jdd dS 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   a/home/ubuntu/.local/lib/python3.10/site-packages/Crypto/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   
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-   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| q(d S )Nr   r   r   l   S9i@eM^w|o                r
   )r   r3   r2   r   r+   scalar_base9_test)r   base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   size_in_bitssize_in_bytesr   r   r   r   
test_sizesw   s   
z"TestEccPoint_Curve25519.test_sizesN)__name__
__module____qualname__r'   r(   r   r!   r%   r/   r1   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_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   seed@5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0eb@de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4fr   r
   r   r9   )r   r   
from_bytesr   r   rJ   r3   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_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   assertFalserO   r   rP   )r   r    rT   r   r   r   test_public_key   s   
z%TestEccKey_Curve25519.test_public_keyc                 C   s6   t ddd}| }| |  | |j|j d S )Nr       HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHrI   )r   
public_keyr[   rO   r   rP   )r   priv_key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      HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHrI   )r   r   r   r   r   <lambda>   s    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 )Nr]   r   )rJ   r   r   s    CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC)r   	constructr^   r   r)   )r   private_keyprivate_key2private_key3r^   public_key2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   rY   zcurve='Curve25519'r   )r   generateassertInreprr   r   r^   )r   rT   r   r   r   test_name_consistency   s   z+TestEccKey_Curve25519.test_name_consistencyN)	r@   rA   rB   rX   r\   ra   rd   rk   ro   r   r   r   r   rC   }   s    rC   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   rY   r   )r   randfunc)r   rl   r3   rO   r   r	   rZ   r9   r   rP   r)   r   newread)r   rT   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 )NrD   rE   rF   rG   r   rY   rI   r   point_x)r   rJ   rx   r   )r   r   rN   r   r   re   r   rP   r3   rO   r[   )r   rJ   	point_hexPxr    rT   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   )rx   r   r   rM   rb   rI   r   rw   r
   l   kxujaj\~|ObjZs	oP,E$ l   _+yBb$:6gw[8cph[DS7OWr   r   )dictr	   rZ   r#   r$   r   re   )r   coordGpr   r   r   test_negative_construct   sP   


z0TestEccModule_Curve25519.test_negative_constructN)r@   rA   rB   rv   r{   r   r   r   r   r   rp      s    rp   c                 C   s,   g }|t t7 }|t t7 }|t t7 }|S N)r   r   rC   rp   )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   Crypto.SelfTest.st_commonr   Crypto.Math.Numbersr   Crypto.Hashr   Crypto.PublicKeyr   Crypto.PublicKey.ECCr   r   r	   r6   TestCaser   rC   rp   r   r@   r   mainr   r   r   r   <module>   s    >EN