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 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reÅ5¡FG;®�â*ô!c(—}6~Fj!Ó )é   l   <âv¿P œ�CØ'Aødt7GlUd|uU^)é   l   ï *‘t0"¥+ówþ_b6…Rƒ}^¯x[LÎy)é   l   1Eòê/ðO�B)	�Mc…všï�OæWgrf&•&)r   l   ºdMf›qðF_¸9áX™tV7�6 #´éôeHI+)é�   l   ·j9a:H3j¼?(w:q—Eóˆç âµ2s)éÿ   l   ³)G@+,c\ÅPvy*ª~¤A|QY»eèEÔ9¬p,4)é   l   èP½Mv+YSYC0ÈkšÔ}£CìBNm¥Mº  C)i  l   %1!Z¿½]Eo¨C²v:p‚fAo4!Üoj’	ÒrAl)i l   Ïgèr c¢4í)O„t«Y\]	›lwwøuô<¦ )iÌUª l   ‡XR>„#¤»ÊsZ60>|šIÁôk|0ÂÀ,)l   g x^rP)l   f~¸(Dš4­94H5}$è„\Èdðzï59EÃP)l   îSë9i“@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!'ÅM¤Ië.ó>æ.<™ OoÀfåÀfY<ú	l   “$+'UfbïCxDóm1,\qt¬<K?:‰!c                 C   s$   t ddƒ t dd d d dƒ d S )Nr   Ú
curve25519r   r   é   é   )r   ©Úself© r   ú¤/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/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   Ú
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   íSë9i“@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   àkõxíÂujaj\~|ObjZ®s”	ÛoP,�E¯$¸ l   _+yŽBb$:6gÁw[ˆ8câph[DS7èO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   ÚCryptodome.SelfTest.st_commonr   ÚCryptodome.Math.Numbersr   ÚCryptodome.Hashr   ÚCryptodome.PublicKeyr   ÚCryptodome.PublicKey.ECCr   r   r	   r6   ÚTestCaser   rC   rp   rƒ   r@   r‡   Úmainr   r   r   r   Ú<module>   s    >ENý