o
    Þý°j|6  ã                   @   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_Ed25519ì   UK‚5±J,{´$%Xci\¸-÷G'
lJ[sii!ì   XfÌL™33ffÌL™33ffÌL™33ffÌL™33ff)ÚxÚyì   N‡P8-øEô:EÇ,Ïg`tÛ!ÐC�@Ö'&«6ì   É#ñU¹úr`
YT‡—V>D&#÷Ú!8eHBùf`"l   \bñ'!cjI,`Ì!c:�5ûPs%ÿéQ¤%N®gl   Ô4ëq!!@0€dÙvŸw=M€95:5Mû]èXgr   r   Úed25519©Úcurvec                 C   s   |   | jjd¡ d S )NÚEd25519)Ú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_Ed25519.pyÚtest_curve_attribute<   ó   z)TestEccPoint_Ed25519.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   ì   3r]d s
Y|CO~\^K[D_ç{Î?kx+ŸSýIì   íHí,~�Ñ5a(¢21fŒ$&Rpc~ÍU?&ÙH_)r   r   r   é"   é#   )r   ÚGxyr   r   r   Úxyr   ÚcopyÚpointG2ÚassertRaisesÚ
ValueError)r   ÚpaiÚbpÚbp2r   r   r   Útest_init_xy?   s$   

þz!TestEccPoint_Ed25519.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_Ed25519.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_Ed25519.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_Ed25519.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_Ed25519.test_paic                 C   sN   | j  }| j d }||d  }|  | ¡ ¡ || }| j d }|  ||¡ d S )Néd   éc   )r   r8   r9   r   )r   ÚnegGÚG100Úsum_zeroÚsum_99Úexpectedr   r   r   Útest_negater   s   

z TestEccPoint_Ed25519.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_addition|   s   z"TestEccPoint_Ed25519.test_additionc                 C   sZ   | j  ¡ }|| j 7 }|  || j¡ || j 7 }|  || j¡ || j  ¡ 7 }|  || j¡ d S r2   )r   r%   r   r&   rD   r:   )r   r5   r   r   r   Útest_inplace_addition†   s   


z*TestEccPoint_Ed25519.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_Ed25519.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   px“	_ÕItTÂyd0Ï9yAjèa¥.2h(~³UmT= l   /d‡-ÅyáEºyLlâ*Äup¼2ÅrtÐGé   r   r    é
   l   Oyï‰|¨$Dß¶G? wyJ;°GT®M2¿<,`l   ,{ÐUÁRCT;<O!S;%O1"Sj"Ž|Žd†U~cé   l   ¯y™VÎ	ÇZD)³CŠBiun÷Uë]õSu;å2<gl   8Zx^io‹i�,U…oç8¾pk
ÇEñQæUSA‰-Öuléÿ   l   

£+÷p§R'
+ÄªKC0ŸkR„qPQ|ŸqtQl   Ìaj 53ÌTotÈºËKa1ë*lO|=”<�#^S\1é   l   V%…tsÅÒv*,í>¼ZÔI¨ š^Nn~—=‡Sö~^l   ÇvÙ,Å ¡p€û$°fž}L&*]/¿O |®:U)r   r   r   r   r&   rD   )r   Údr5   r   r   r   Útest_scalar_multiply›   sP   









z)TestEccPoint_Ed25519.test_scalar_multiplyc                 C   s(   |   | j ¡ d¡ |   | j ¡ d¡ d S )NrQ   é    )r   r   Úsize_in_bitsÚsize_in_bytesr   r   r   r   Ú
test_sizesÎ   s   zTestEccPoint_Ed25519.test_sizesN)Ú__name__Ú
__module__Ú__qualname__r#   ÚG2xyÚG3xyr   r   r&   rD   r   r,   r1   r3   r7   r;   rC   rF   rG   rJ   rT   rX   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_Ed25519c                 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Ú@9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60ì   ÎEìnõ<	KBc”ê	Å ì!ƒ5?)…&ç
MpÐUì   ×Z0FU8[=Ét2²:ÂeÍk6RrU@ZûQr   ©r   Úseedì   0|>!™Y,$Ï%<0… <}ÿO e<Z¼È&éOr   )r   rc   Úpointr   ©r   rS   )r   r   r   rc   rS   r8   Úhas_privateÚpointQr   r   r   r'   r(   )r   rc   ÚPxÚPyÚkeyre   r   r   r   Útest_private_keyÕ   s    z#TestEccKey_Ed25519.test_private_keyc                 C   sF   t td jtd jdd�}td|d�}|  | ¡ ¡ |  |j|¡ d S )Nr   r   )r   re   )	r   r   ÚGxÚGyr   ÚassertFalserg   r   rh   )r   re   rk   r   r   r   Útest_public_keyí   s   z"TestEccKey_Ed25519.test_public_keyc                 C   s6   t ddd�}| ¡ }|  | ¡ ¡ |  |j|j¡ d S )Nr   ó    HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHrb   )r   Ú
public_keyro   rg   r   rh   )r   Úpriv_keyÚpub_keyr   r   r   Útest_public_key_derivedó   s   z*TestEccKey_Ed25519.test_public_key_derivedc                 C   s   |   tdd„ ¡ d S )Nc                   S   s   t ddd�S )Nr   ó   HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHrb   )r   r   r   r   r   Ú<lambda>ú   s    z6TestEccKey_Ed25519.test_invalid_seed.<locals>.<lambda>)r'   r(   r   r   r   r   Útest_invalid_seedù   r   z$TestEccKey_Ed25519.test_invalid_seedc                 C   s‚   t jddd�}t jddd�}t jddd�}| ¡ }| ¡ }| ¡ }|  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ d S )Nrq   r   )rc   r   r   s    CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC)r   Ú	constructrr   r   r4   )r   Úprivate_keyÚprivate_key2Úprivate_key3rr   Úpublic_key2Úpublic_key3r   r   r   Útest_equalityü   s   z TestEccKey_Ed25519.test_equalityc                 C   s@   t jdd�}|  dt|ƒ¡ |  |jd¡ |  | ¡ jd¡ d S )Nr   r   zcurve='Ed25519'r   )r   ÚgenerateÚassertInÚreprr   r   rr   )r   rk   r   r   r   Útest_name_consistency  s   z(TestEccKey_Ed25519.test_name_consistencyN)	rY   rZ   r[   rl   rp   ru   rx   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S )ÚTestEccModule_Ed25519c                 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   r€   r8   rg   r   r   rm   rn   rS   r   rh   r4   r
   ÚnewÚread)r   rk   re   Úkey2Úkey1r   r   r   Útest_generate  s    z#TestEccModule_Ed25519.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 )Nr_   r`   ra   rd   r   r   rb   )r   Úpoint_xÚpoint_y)r   rc   r‹   rŒ   r   )	r   r   r   ry   r   rh   r8   rg   ro   )r   rc   ri   rj   rS   re   rk   r   r   r   Útest_construct(  s   z$TestEccModule_Ed25519.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 )NrO   rM   )r‹   rŒ   r   r   r   rK   rf   rv   rb   )Údictr   rm   rn   r'   r(   r   ry   )r   ÚcoordÚcoordGr   r   r   Útest_negative_constructA  s
   z-TestEccModule_Ed25519.test_negative_constructN)rY   rZ   r[   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   r^   r„   )ÚconfigÚtestsr   r   r   Ú	get_testsJ  s
   r”   Ú__main__c                   C   s   t  tƒ ¡S r2   )ÚunittestÚ	TestSuiter”   r   r   r   r   ÚsuiteS  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   r^   r„   r”   rY   r˜   Úmainr   r   r   r   Ú<module>   s"    'A6ý