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
mZmZ d dlmZ d dlm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rcdd„ Ze jdd� dS dS )é    N)Ú	unhexlify)Úlist_test_cases)Úload_test_vectors)ÚECC)ÚEccPointÚ_curvesÚEccKey)ÚInteger)ÚSHAKE128c                   @   sÌ   e Zd ZdddœZdddœZdddœZeed ed	 d
d�Zeed ed	 d
d�Zeed ed	 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d„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$S )%ÚTestEccPoint_Ed448ì   ^@¯ 51â8`b8ÀCÊlª\×p*AŒtô(’qmjÏ.<‚+FaS[Í/SDZ74_3ã	ì   zadoeC@Ù
ùZK‰^ýDsx™sø­sZhNx�0Ž2›§>Ilq2« vIðZugt')ÚxÚyì   UUª*UUª*UUª*UUª*UUª*UUª*UUª*UUTUª*UUª*UUª*UUª*UUª*UUª*UUª*Uì   í'U7oWW½´9´/Y^»aTè,+Ö —¶"¹6ã7¯!V=í6 V°!(ÖYf\V–^Àl   �/þÊ\@9uµKQZ[1èV?NØ__Nªýy�½ºb�j3\\A"f¥-¶d=«H½"ˆ\†Xl   üV1M0AûZZ?M}¿pÏNmo˜Q³«C;Aä|s[©l¨$“H©j=ÚKnsI¨^�Z r   r   Úed448©Úcurvec                 C   s   |   | jjd¡ d S )NÚEd448)ÚassertEqualÚpointGr   ©Úself© r   úŸ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/Cryptodome/SelfTest/PublicKey/test_ECC_Ed448.pyÚtest_curve_attribute<   ó   z'TestEccPoint_Ed448.test_curve_attributec                 C   sð   t | jd | jd dd� t dddd�}|  |jd¡ |  |jd¡ |  |jd¡ | j ¡ }|  |jd¡ |  |jd	¡ |  |j|j|jf¡ | j ¡ }|  |jd
¡ |  |jd¡ |  |j|j|jf¡ t dddd� | j	t
t dddd� d S )Nr   r   r   r   r   é   )r   r   r   r   r   r   ì   4 $BtLßx;c–=ðyHj«¼Pb%ô0×VN[Š”{¼ð=Cmv`'W,7$-3ySì   ë5èeQL£D%ä¢D* X<f%g9'=}. ¦mû(eX�ÆjÊ`Ä[V~rœr'·_(QQW¿)r   r   r   é"   é#   )r   ÚGxyr   r   r   Úxyr   ÚcopyÚpointG2ÚassertRaisesÚ
ValueError)r   ÚpaiÚbpÚbp2r   r   r   Útest_init_xy?   s$   

þzTestEccPoint_Ed448.test_init_xyc                 C   sB   t dddd�}| | j¡ |  |j| jj¡ |  |j| jj¡ d S ©Nr   r   r   r   )r   Úsetr   r   r   r   ©r   ÚpointWr   r   r   Útest_set\   s   zTestEccPoint_Ed448.test_setc                 C   s2   | j  ¡ }|  |j| j j¡ |  |j| j j¡ d S ©N)r   r%   r   r   r   r/   r   r   r   Ú	test_copyb   s   
zTestEccPoint_Ed448.test_copyc                 C   s4   | j  ¡ }| j ¡ }|  | j |¡ |  | j |¡ d S r2   )r   r%   r&   r   ÚassertNotEqual)r   ÚpointHÚpointIr   r   r   Ú
test_equalg   s   

zTestEccPoint_Ed448.test_equalc                 C   s0   t dddd�}|  | ¡ ¡ |  || ¡ ¡ d S r-   )r   Ú
assertTrueÚis_point_at_infinityr   Úpoint_at_infinity)r   r)   r   r   r   Útest_paim   s   zTestEccPoint_Ed448.test_paic                 C   s$   | j  }| j | }|  | ¡ ¡ d S r2   )r   r8   r9   )r   ÚnegGÚsumr   r   r   Útest_negater   s   
zTestEccPoint_Ed448.test_negatec                 C   sŒ   |   | j| j | j¡ |   | j| j | j¡ |   | j| j ¡  | j¡ |   | j ¡ | j | j¡ | j| j }|   |jd¡ |   |jd¡ d S )Nr   r    )r   r   r&   ÚpointG3r:   r   r   )r   ÚG5r   r   r   Útest_additionw   s   z TestEccPoint_Ed448.test_additionc                 C   sZ   | j  ¡ }|| j 7 }|  || j¡ || j 7 }|  || j¡ || j  ¡ 7 }|  || j¡ d S r2   )r   r%   r   r&   r?   r:   )r   r5   r   r   r   Útest_inplace_addition�   s   


z(TestEccPoint_Ed448.test_inplace_additionc                 C   s`   | j  ¡ }| ¡  |  |j| jj¡ |  |j| jj¡ | j  ¡ }| ¡ }| ¡  |  ||¡ d S r2   )r   r%   Údoubler   r   r&   r   r:   )r   r5   r)   ÚpointRr   r   r   Útest_doublingŠ   s   

z TestEccPoint_Ed448.test_doublingc                 C   sÀ  d}|| j  }|  |jd¡ |  |jd¡ d}|| j  }|  |j| j j¡ |  |j| j j¡ d}|| j  }|  |j| jj¡ |  |j| jj¡ d}|| j  }|  |j| jj¡ |  |j| jj¡ d}|| j  }|  |jd¡ |  |jd¡ d}|| j  }|  |jd	¡ |  |jd
¡ d}|| j  }|  |jd¡ |  |jd¡ d}|| j  }|  |jd¡ |  |jd¡ d}|| j  }|  |jd¡ |  |jd¡ d}|| j  }|  |jd¡ |  |jd¡ d S )Nr   r   é   é   é   l   0t±
r<)b^pW!:±;EEï=0˜i1_Rý�#"8zN UD=J>9¡(X83`cÅK;	l   9Ê[á[³u©!
"jµr(‡zËGxKâ‘aI‹0_x|Kór† ïR3K,N”7f%~’é   r   r    é
   l   =0Ú!—EZs-$@bD²U=NÃ.r1aJOÈôi4A8ùac)dã>�ŽÓ5º9YÏhùél   g_›I'*ªk[°QP`1?\W5p_Ì`“?¡k?�îw7:hkÀ9Á
C9%?ðqI „/X ~¥	é   l   8Î`}\‹&0<
FYr ´ðp¹cßJÊ)åA}<COØNüfT`~ÞcÎ|ªB6„l   á‡6†,81$Lg}»HH>"ãHoûs¬2‚'„@`C#*ö4x¤'Ó1ò6F|3û—[ªéÿ   l   èkM`7C¯5SWh+k3 ú	óe6\úD=C:ç§D˜`°IecjEÇ<n`ã"586XDƒÖl   S-ãKô»j€d5|X1¡�O¶Ø|S¶_CzŽ:~R,QGñ¹sÆC¥SnYsÆé   l   ,Kl?rQ¼sëUæ5xf·¤aZ×–3}-Ú8¬U¥5ø3€v;IV¨(`v>ÅGÃ«uOC3l   $`:i	z=nU‡YzzÉ*ZGb9íLhQuÂt’.êq97URMT»|›s±ia\[yÿFˆdœ6})r   r   r   r   r&   r?   )r   Údr5   r   r   r   Útest_scalar_multiply–   sP   









z'TestEccPoint_Ed448.test_scalar_multiplyc                 C   s(   |   | j ¡ d¡ |   | j ¡ d¡ d S )NiÀ  é8   )r   r   Úsize_in_bitsÚsize_in_bytesr   r   r   r   Ú
test_sizesÉ   s   zTestEccPoint_Ed448.test_sizesN)Ú__name__Ú
__module__Ú__qualname__r#   ÚG2xyÚG3xyr   r   r&   r?   r   r,   r1   r3   r7   r;   r>   rA   rB   rE   rO   rS   r   r   r   r   r   -   s2    ÿÿÿ
	3r   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_Ed448c                 C   sÌ   t dƒ}d}d}td|d�}|  |j|¡ |  |jd¡ |  | ¡ ¡ |  |jj|¡ |  |jj	|¡ t
||dƒ}td||d�}|  |jd¡ |  | ¡ ¡ |  |j|¡ td|d�}| jttdd	d
� d S )NÚr4adf5d37ac6785e83e99a924f92676d366a78690af59c92b6bdf14f9cdbcf26fdad478109607583d633b60078d61d51d81b7509c5433b0d4c9ì   &`</·?•xx#‚psSac9,v#˜_+*gs{*[JÌ/À5/pT¸*â#DXs×hPîTì   Á.äpˆv"„h÷5TwÛe¸0ø~ûK›}Y+¡VÀAÙ+EcÇ4«w£qcp&AZ¬lß]¦,B�PÁr   ©r   Úseedì   €_Rh+#‰öSb,n@wÚ8)èíYÜJC7äM_ýSr/8k1XÃåc>KOr   )r   r^   Úpointr   ©r   rN   )r   r   r   r^   rN   r8   Úhas_privateÚpointQr   r   r   r'   r(   )r   r^   ÚPxÚPyÚkeyr`   r   r   r   Útest_private_keyÐ   s    z!TestEccKey_Ed448.test_private_keyc                 C   sF   t td jtd jdd�}td|d�}|  | ¡ ¡ |  |j|¡ d S )Nr   r   )r   r`   )	r   r   ÚGxÚGyr   ÚassertFalserb   r   rc   )r   r`   rf   r   r   r   Útest_public_keyè   s   z TestEccKey_Ed448.test_public_keyc                 C   s6   t ddd�}| ¡ }|  | ¡ ¡ |  |j|j¡ d S )Nr   ó9   HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHr]   )r   Ú
public_keyrj   rb   r   rc   )r   Úpriv_keyÚpub_keyr   r   r   Útest_public_key_derivedî   s   z(TestEccKey_Ed448.test_public_key_derivedc                 C   s   |   tdd„ ¡ d S )Nc                   S   s   t ddd�S )Nr   s8   HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHr]   )r   r   r   r   r   Ú<lambda>õ   s    z4TestEccKey_Ed448.test_invalid_seed.<locals>.<lambda>)r'   r(   r   r   r   r   Útest_invalid_seedô   r   z"TestEccKey_Ed448.test_invalid_seedc                 C   s‚   t jddd�}t jddd�}t jddd�}| ¡ }| ¡ }| ¡ }|  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ d S )Nrl   r   )r^   r   r   s9   CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC)r   Ú	constructrm   r   r4   )r   Úprivate_keyÚprivate_key2Úprivate_key3rm   Úpublic_key2Úpublic_key3r   r   r   Útest_equality÷   s   zTestEccKey_Ed448.test_equalityc                 C   s@   t jdd�}|  dt|ƒ¡ |  |jd¡ |  | ¡ jd¡ d S )Nr   r   zcurve='Ed448'r   )r   ÚgenerateÚassertInÚreprr   r   rm   )r   rf   r   r   r   Útest_name_consistency  s   z&TestEccKey_Ed448.test_name_consistencyN)	rT   rU   rV   rg   rk   rp   rr   ry   r}   r   r   r   r   rY   Î   s    rY   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestEccModule_Ed448c                 C   s¤   t jdd�}|  | ¡ ¡ ttd j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   Úrandfunc)r   rz   r8   rb   r   r   rh   ri   rN   r   rc   r4   r
   ÚnewÚread)r   rf   r`   Úkey2Úkey1r   r   r   Útest_generate  s    z!TestEccModule_Ed448.test_generatec                 C   s¸   t dƒ}d}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 )NrZ   r[   r\   r_   r   r   r]   )r   Úpoint_xÚpoint_y)r   r^   r…   r†   r   )	r   r   r   rs   r   rc   r8   rb   rj   )r   r^   rd   re   rN   r`   rf   r   r   r   Útest_construct#  s   z"TestEccModule_Ed448.test_constructc                 C   sr   t ddd�}t td jtd jd�}| jttjfddi|¤Ž | jttjfdddœ|¤Ž | jttjdd	d
� d S )NrJ   rH   )r…   r†   r   r   r   rF   ra   s:   HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHr]   )Údictr   rh   ri   r'   r(   r   rs   )r   ÚcoordÚcoordGr   r   r   Útest_negative_construct<  s
   z+TestEccModule_Ed448.test_negative_constructN)rT   rU   rV   r„   r‡   r‹   r   r   r   r   r~     s    r~   c                 C   s,   g }|t tƒ7 }|t tƒ7 }|t tƒ7 }|S r2   )r   r   rY   r~   )ÚconfigÚtestsr   r   r   Ú	get_testsE  s
   rŽ   Ú__main__c                   C   s   t  tƒ ¡S r2   )ÚunittestÚ	TestSuiterŽ   r   r   r   r   ÚsuiteN  s   r’   )ÚdefaultTest)r�   Úbinasciir   ÚCryptodome.SelfTest.st_commonr   ÚCryptodome.SelfTest.loaderr   ÚCryptodome.PublicKeyr   ÚCryptodome.PublicKey.ECCr   r   r   ÚCryptodome.Math.Numbersr	   ÚCryptodome.Hashr
   ÚTestCaser   rY   r~   rŽ   rT   r’   Úmainr   r   r   r   Ú<module>   s"    "A6ý