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 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r�d%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\cžIÞo’SDY%	»c‚;Í )r   é   )r
   l   ¶<è8ð•i‡ ABV	xt%qÚhG?:óøM‰3;<_®zDÚw«I•W/ì2Fo5)�+¾"r)é   l   Ls§
4EQGCôD>MÎR¬rou1&ýé ,’ñdý0›BDqa’IKAáBá*&,³d÷)é   l   ±b�"yu/màX¦ó~ud¬d#z¢
¡NÿkÄ`{dÙt>'iÚŸEëEuš¼=J4')é   l   ŒX5VÍ'w,P9F•szL¶™,Ç	 †$X1¼i=U& rgk‹1ËSÏ|"åeãPXo)zeQ')é	   l   ®-h_xaJ=?{O d®G¬;
]:ÈXÎaûuXáNIÕƒwrà"YwÛ\|?û©f>7W.)é�   l   Û ¿#ž~ÁmÖp³N"d *[½b@>ÚÍj)©e		ídtiájwP‘JìUªVÌA¢PP[÷)éÿ   l   ž+?'Ð]Á-¨w
qÞD+C‚#z;>XIÃ#±D‚	„ºXà79ÊQmF"Ãz08’8$\D.éC7)é   l   A§À&Ð1úA©VÉ9ª&bu)ó%s*¶ Q·.srñu%ô&F3iZ"(r£ \!ÈKË!s\æ )i  l   °h[˜~=IÂH”Žs']TeV}S”TeIV·"ë tœX”\µ}V˜Iµ.� ·!	p¸)i l   ²AÃ`8QÂKùA°ÖQó„%ÃzY0) �X$™nø2ÙxP>ËB;c‰ZG]ì.f=‹VJqN;')iÌUª l   ˜lIwoÏ¦ÖQáZ×mjØ=Ëk¬î†/�joÇx"lñg‰W}&½Fä Ö?�y,pi…%è)l   g x^rP)l   0SõKŒè>e*a`ÉD˜§V/!?an8a_p.]Û«d¶d·a§¢‚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!'ÅM¤Ië.ó>æ.<™ OoÀfåÀfY<ú	l   “$+'UfbïCxDóm1,\qt¬<K?:‰!c                 C   s   t ddƒ t td dƒ d S )Nr   Úcurve448)r   Ú
CURVE448_P©Úself© r   ú¢/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/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 )NÚp9a8f4925d1519f5775cf46b04b5800d4ee9ee8bae8bc5565d498c28dd9c9baf574a9419744897391006382a6f127ab1d9ac2d8c0a598726bÚp9b08f7cc31b7e3e67d22d5aea121074a273bd2b83de09c63faa73d2c22c5d9bbc836647241d953d40c5b12da88120d53177f80e532c41fa0Úlittle©Ú	byteorderr   ©r!   ÚseedÚp1c306a7ac2a0e2e0990b294470cba339e6453772b075811d8fad0d1d6927c120bb5ee8972b0d3e21374c9c921b09d1b0366f10b65173992dÚp3eb7a829b0cd20f5bcfc0b599b6feccf6da4627107bdb0d4f345b43027d8b972fc3e34fb4232a13ca706dcb57aec3dae07bdc1c67bf33609r   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ý