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 G dd	„ d	e jƒZG d
d„ de jƒZG dd„ de jƒZG dd„ de jƒZG dd„ de jƒZG dd„ de jƒZG dd„ de jƒZeddddd„ dd„ dd„ dœƒp}g ZeD ]Zejejejfdd„Zeed ej eƒ q€G d!d"„ d"e jƒZedd#d$d%d„ d&d„ d'd„ dœƒp²g ZeD ]Zejejejfd(d„Zeed ej eƒ qµG d)d*„ d*e jƒZ edd+d,d-d„ d.d„ d/d„ dœƒpçg ZeD ]Zejejejfd0d„Zee d ej eƒ qêG d1d2„ d2e jƒZ!edd3d4d5d„ d6d„ d7d„ dœƒ�pg ZeD ]Zejejejfd8d„Zee!d ej eƒ �q G d9d:„ d:e jƒZ"edd;d<d=d„ d>d„ d?d„ dœƒ�pTg ZeD ]Zejejejfd@d„Zee"d ej eƒ �qWG dAdB„ dBe jƒZ#G dCdD„ dDe jƒZ$G dEdF„ dFe jƒZ%G dGdH„ dHe jƒZ&G dIdJ„ dJe jƒZ'G dKdL„ dLe jƒZ(G dMdN„ dNe jƒZ)G dOdP„ dPe jƒZ*G dQdR„ dRe jƒZ+G dSdT„ dTe jƒZ,i fdUdV„Z-e.dWk�ràdXd„ Z/e j0dYdZ� dS dS )[é    N)Ú	unhexlify)Úlist_test_cases)Úload_test_vectors)ÚECC)ÚEccPointÚ_curvesÚEccKey)ÚIntegerc                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestEccPointc              
   C   sÒ   t jdd�j}t jdd�j}z||  J ‚ ty. } zdt|ƒv s$J ‚W Y d }~nd }~ww z||7 }J ‚ tyO } zdt|ƒv sEJ ‚W Y d }~nd }~ww G dd„ dƒ}|  ||ƒ k¡ |  ||ƒ k¡ d S )NúP-256©ÚcurveúP-384Fznot on the same curvec                   @   s   e Zd ZdS )z+TestEccPoint.test_mix.<locals>.OtherKeyTypeN)Ú__name__Ú
__module__Ú__qualname__© r   r   úž/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/Cryptodome/SelfTest/PublicKey/test_ECC_NIST.pyÚOtherKeyType>   s    r   )r   ÚgenerateÚpointQÚ
ValueErrorÚstrÚassertFalseÚ
assertTrue)ÚselfÚp1Úp2Úer   r   r   r   Útest_mix-   s&   €ÿ€ÿzTestEccPoint.test_mixc                 C   s&   t jddddd�}|  t|ƒd¡ d S )Nr   l   }	&_n i9½ñâ]}!Š5$7­Pµ%^-Ù& l   -
ík%jµÛ&�*/ný;[jÁHÝ**À7 
Ãi/v{-l   ]W]ßÏ[@ið¤MmlQ¤;i?XU�,®p )r   ÚdÚpoint_xÚpoint_ya  EccKey(curve='NIST P-256', point_x=20573031766139722500939782666697015100983491952082159880539639074939225934381, point_y=108863130203210779921520632367477406025152638284581252625277850513266505911389, d=75467964919405407085864614198393977741148485328036093939970922195112333446269))r   Ú	constructÚassertEqualÚrepr)r   r   r   r   r   Ú	test_reprD   s   ýzTestEccPoint.test_reprN)r   r   r   r   r&   r   r   r   r   r
   +   s    r
   c                   @   ó|   e Zd ZdZedddd�Zed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S )ÚTestEccPoint_NIST_P192ztTests defined in section 4.1 of https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.204.9073&rep=rep1&type=pdfl   ø,/}H 5iÎH´�Î\žD>GEl   ;_!‘�3µöo3ànk3>
6@‚I%Úp192r   l   ¤S.7l·pP·a7öng>=}„Tb"l   y5R]2vNúAö>RmKwYfe«% !dc                 C   ó   |   | jjd¡ d S )Nú
NIST P-192©r$   ÚpointSr   ©r   r   r   r   Útest_curve_attributeY   ó   z+TestEccPoint_NIST_P192.test_curve_attributec                 C   ó(   t ddƒ}| | j¡ |  || j¡ d S ©Nr   ©r   Úsetr-   r$   ©r   ÚpointWr   r   r   Útest_set\   ó   
zTestEccPoint_NIST_P192.test_setc                 C   óF   | j  ¡ }|  || j ¡ | | j¡ |  || j¡ |  | j | j¡ d S ©N©r-   Úcopyr$   r4   ÚpointTÚassertNotEqualr5   r   r   r   Ú	test_copya   ó
   
z TestEccPoint_NIST_P192.test_copyc                 C   ó(   | j  }| j | }|  || j  ¡ ¡ d S r:   ©r-   r$   Úpoint_at_infinity©r   ÚnegSÚsumr   r   r   Útest_negateh   ó   
z"TestEccPoint_NIST_P192.test_negatec                 C   ó€   d}d}| j | j }|  |j|¡ |  |j|¡ | ¡ }| j | }|  || j ¡ || j  }|  || j ¡ || }|  ||¡ d S ©Nl   �š<Sb!tX?w|xh©\7®% Žl   K*m/_JÖS‘l(Uû[¯yåq;}©r-   r=   r$   ÚxÚyrC   ©r   ÚpointRxÚpointRyÚpointRÚpair   r   r   Útest_additionm   ó   

z$TestEccPoint_NIST_P192.test_additionc                 C   ó    d}d}| j  ¡ }|| j7 }|  |j|¡ |  |j|¡ | ¡ }| j  ¡ }||7 }|  || j ¡ | ¡ }|| j 7 }|  || j ¡ | ¡ }||7 }|  ||¡ d S rJ   ©r-   r<   r=   r$   rL   rM   rC   rN   r   r   r   Útest_inplace_additionƒ   ó    



z,TestEccPoint_NIST_P192.test_inplace_additionc                 C   óŽ   d}d}| j  ¡ }| ¡  |  |j|¡ |  |j|¡ | j  ¡ }| ¡ }| ¡  |  ||¡ | j  ¡ }||7 }|  |j|¡ |  |j|¡ d S )Nl   biÜ~hIRë ±w¹YTSD{1.ã-l   Ï	±£%Y^Û-<ü6×Ä!N	q¥pÝ ©r-   r<   Údoubler$   rL   rM   rC   rN   r   r   r   Útest_doubling�   ó   


z$TestEccPoint_NIST_P192.test_doublingc                    óº   d}d}d}ˆ j | }ˆ  |j|¡ ˆ  |j|¡ ˆ j  ¡ }ˆ j d }ˆ  ||¡ ˆ  t‡ fdd„¡ |ˆ j  }ˆ  |j|¡ ˆ  |j|¡ t|ƒˆ j  }ˆ  |j|¡ ˆ  |j|¡ d S )Nì   ît˜lkd©¨cH(éLj]Øu‚5Qx
l   1m~K¥T4¦I�wxIG-Íi!wúl   {Áú5Òsyq-B³‰KBioÿr   c                      ó
   ˆ j d S ©Néÿÿÿÿ©r-   r   r.   r   r   Ú<lambda>Á   ó   
 z=TestEccPoint_NIST_P192.test_scalar_multiply.<locals>.<lambda>©r-   r$   rL   rM   rC   ÚassertRaisesr   r	   ©r   r    rO   rP   rQ   rR   r   r.   r   Útest_scalar_multiply²   ó    



z+TestEccPoint_NIST_P192.test_scalar_multiplyc                 C   óD   d}d}d}d}| j | | j|  }|  |j|¡ |  |j|¡ d S )Nr_   l   ¼rr6O^‰h™oª3ô&ga°OêqKl   Þ[o…ge¦?“/° õo·r6uc;'{ l   D6 vMcã'Åà~™vLz«6bHe©r-   r=   r$   rL   rM   ©r   r    r   rO   rP   rQ   r   r   r   Útest_joint_scalar_multiplyÌ   ó   z1TestEccPoint_NIST_P192.test_joint_scalar_multiplyc                 C   ó(   |   | j ¡ d¡ |   | j ¡ d¡ d S )NéÀ   é   ©r$   r-   Úsize_in_bitsÚsize_in_bytesr.   r   r   r   Ú
test_sizesÖ   ó   z!TestEccPoint_NIST_P192.test_sizesN)r   r   r   Ú__doc__r   r-   r=   r/   r7   r?   rG   rS   rW   r\   ri   rn   rv   r   r   r   r   r(   L   ó,    ýý
r(   c                   @   r'   )ÚTestEccPoint_NIST_P224ztTests defined in section 4.2 of https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.204.9073&rep=rep1&type=pdfl   [;!4ºEï7<_1*¥vK6ÝN9!˜TY:)P²l   "?¯I­q.pGA26'Ü,ò X«-ä–p/iÒ;Úp224r   l   m=Mp@2ÍiÅ#ÞM#Y´ BÐ/#nX\jµdÊ-l   4âiÐ"nQÁ)N}Ì:î{	hkÆ-xBISIQ
1c                 C   r*   )Nú
NIST P-224r,   r.   r   r   r   r/   è   r0   z+TestEccPoint_NIST_P224.test_curve_attributec                 C   r1   r2   r3   r5   r   r   r   r7   ë   r8   zTestEccPoint_NIST_P224.test_setc                 C   r9   r:   r;   r5   r   r   r   r?   ð   r@   z TestEccPoint_NIST_P224.test_copyc                 C   rA   r:   rB   rD   r   r   r   rG   ÷   rH   z"TestEccPoint_NIST_P224.test_negatec                 C   rI   ©Nl   }¥Që+±ª|y%›w<Ô{ VÝu{a„ÛdÛl   pZv–8µ)�_¹z-hK	GÕ^Ñ6gyO9rK   rN   r   r   r   rS   ü   rT   z$TestEccPoint_NIST_P224.test_additionc                 C   rU   r}   rV   rN   r   r   r   rW     rX   z,TestEccPoint_NIST_P224.test_inplace_additionc                 C   rY   )Nl   Ç_¹§x²xRhÄ¶>7ZëPÐJòIw}ä-r*l   }]¿o`}ýMôH^Ê>A0’Z]Sv>÷L�1|+rZ   rN   r   r   r   r\   ,  r]   z$TestEccPoint_NIST_P224.test_doublingc                    r^   )Nì   ;WãUŽó'uoZÁw�]o]em82~P¬†ã)l   ¤<Nä0VmoLBmœ_»JÛ+'"ü/¹F*iKl©%l   mG[nWh8Üz{hbIŠ€U_OxâQB)àJãr   c                      r`   ra   rc   r   r.   r   r   rd   P  re   z=TestEccPoint_NIST_P224.test_scalar_multiply.<locals>.<lambda>rf   rh   r   r.   r   ri   A  rj   z+TestEccPoint_NIST_P224.test_scalar_multiplyc                 C   rk   )Nr~   l   6W¦]éUDúwyptq>®3”d²d|?)5l   >HEK5\
5¶F2Ê~?jÏTÀm{+Eÿ6l   ‹1÷(à^V‡KUC¡†?Ì++ý'*XÃ:pCÔrl   rm   r   r   r   Útest_joing_scalar_multiply[  ro   z1TestEccPoint_NIST_P224.test_joing_scalar_multiplyc                 C   rp   )Néà   é   rs   r.   r   r   r   rv   e  rw   z!TestEccPoint_NIST_P224.test_sizesN©r   r   r   rx   r   r-   r=   r/   r7   r?   rG   rS   rW   r\   ri   r   rv   r   r   r   r   rz   Û   ry   rz   c                   @   st   e Zd ZdZeddƒZe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_NIST_P256ztTests defined in section 4.3 of https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.204.9073&rep=rep1&type=pdfl   Éµæ,å;zQCÈlŒ:a*N<x“n.hÜ&#/_"$^ l   V"…`�,¨1kWØyÔôpYÌLG+-ÀpJÛ|?W“@ l   kÁk¸dg\[W9r*9.B,LI�5/f‰:hcX¨Ul   Cdc'·2«gs1–Eö»+Á.ƒŽ-'�a!Tc                 C   r*   )Nú
NIST P-256r,   r.   r   r   r   r/   u  r0   z+TestEccPoint_NIST_P256.test_curve_attributec                 C   r1   r2   r3   r5   r   r   r   r7   x  r8   zTestEccPoint_NIST_P256.test_setc                 C   r9   r:   r;   r5   r   r   r   r?   }  r@   z TestEccPoint_NIST_P256.test_copyc                 C   rA   r:   rB   rD   r   r   r   rG   „  rH   z"TestEccPoint_NIST_P256.test_negatec                 C   rI   ©Nl   ~´(iMç)E=íkdHpit3&¯EpmRê±rl   dB•hE@	hF¹TVL‰ÃÄ.‹E$uúd„K].X rK   rN   r   r   r   rS   ‰  rT   z$TestEccPoint_NIST_P256.test_additionc                 C   rU   r…   rV   rN   r   r   r   rW   Ÿ  rX   z,TestEccPoint_NIST_P256.test_inplace_additionc                 C   rY   )Nl   °'Â6ó?0T‚�.ì<6ß3˜€GwG:Ç]�Hsivl   ÇPÃ6eÞ#` ³{yO8^g^ w{9lžJ±@‡z rZ   rN   r   r   r   r\   ¹  r]   z$TestEccPoint_NIST_P256.test_doublingc                    r^   )Nì   ýö_,)¶NÌ$ÔcÐhKf-5lk<X÷k©#E l   ? Ù�nDfÚ>1xó0öæú6Ä6”OPK¯FÐQl   ÕAöTU*ö-sX)>~|Nè\}TÕ9¶%ÕDýbu4îur   c                      r`   ra   rc   r   r.   r   r   rd   Ý  re   z=TestEccPoint_NIST_P256.test_scalar_multiply.<locals>.<lambda>rf   rh   r   r.   r   ri   Î  rj   z+TestEccPoint_NIST_P256.test_scalar_multiplyc                 C   rk   )Nr†   l   ·T«À:X›uMKt^5~ø{å"/ŒTœ3G1S l   ¸vƒba½Bÿ>Y5O¬gïEÄà‘I# ˆd3ZgX l   uRÂ`/ª.ÓÊû³5EŽSµ6�Ò¼p* Pr rl   rm   r   r   r   r   è  ro   z1TestEccPoint_NIST_P256.test_joing_scalar_multiplyc                 C   rp   )Né   é    rs   r.   r   r   r   rv   ò  rw   z!TestEccPoint_NIST_P256.test_sizesNr‚   r   r   r   r   rƒ   j  s(    þþ
rƒ   c                   @   óx   e Zd ZdZedddƒZ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S )ÚTestEccPoint_NIST_P384ztTests defined in section 4.4 of https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.204.9073&rep=rep1&type=pdfl   Kç<´L‰æµ3ÑY UëH[¢Am]8$_-'óDM.Ã/ææ8é;V~Ho\"÷l   E^Pj’WvMÕ0M7b£KLþ8¢4\mn&J

"[Œ!×66p#y|@éz~WÛ~¿ Úp384l   Q°'è"Ûf4åOcéE-X¾J¼9i×ja>:¿¨}¤@ˆ…ØsøMöLUl   ’P–}Û&zI…ÜyŒ$ÔGYÁ9×Q¯%?p×a(šFÍvÒ|E…Oî{š c                 C   r*   )Nú
NIST P-384r,   r.   r   r   r   r/     r0   z+TestEccPoint_NIST_P384.test_curve_attributec                 C   s*   t dddƒ}| | j¡ |  || j¡ d S )Nr   r‹   r3   r5   r   r   r   r7     s   zTestEccPoint_NIST_P384.test_setc                 C   r9   r:   r;   r5   r   r   r   r?     r@   z TestEccPoint_NIST_P384.test_copyc                 C   rA   r:   rB   rD   r   r   r   rG     rH   z"TestEccPoint_NIST_P384.test_negatec                 C   rI   )Nl   í^\—m¼LH\Ð%sz.	€_èQHp)wB'Ü2øh\|Sz9Y‰0ñ7Ös\\% l   °$	rQ4 ú1ml w{g~ÓOM wrÏ6bLLU–;ó8*�$ô0xÇrs, rK   rN   r   r   r   rS     rT   z$TestEccPoint_NIST_P384.test_additionc                 C   rU   r…   rV   rN   r   r   r   Ú_test_inplace_addition.  rX   z-TestEccPoint_NIST_P384._test_inplace_additionc                 C   rY   )Nl   LP‚íeroB�r§0_nCYw°~êÂs¿7xIµ|°ñZ¨:Zøe¢*ðX!T l   Ý]ìeö§^A|™\‡"Rn0çWÍWCsò(Óšhß}	c5J÷B€N©näN=.ôrZ   rN   r   r   r   r\   H  r]   z$TestEccPoint_NIST_P384.test_doublingc                    ój   d}d}d}ˆ j | }ˆ  |j|¡ ˆ  |j|¡ ˆ j  ¡ }ˆ j d }ˆ  ||¡ ˆ  t‡ fdd„¡ d S )Nì   €4°.vÚ0Z:–z;ODK#ÄGv)ÀZ5mXÓC˜Ds³:’fÓrÊkIl   òR@òdžV]9£"O/´'5r}©]ö~þA…YøwHoY4±ü-ÿ?~wÉl   fò9�;Y?5.þ¿³BieXcXtžqÏMéDb7‚ÏK6Xú}1ì î}Xr   c                      r`   ra   rc   r   r.   r   r   rd   l  re   z=TestEccPoint_NIST_P384.test_scalar_multiply.<locals>.<lambda>©r-   r$   rL   rM   rC   rg   r   rh   r   r.   r   ri   ]  ó   


z+TestEccPoint_NIST_P384.test_scalar_multiplyc                 C   rk   )Nr�   l   ]8ê|$ÞW‚!&%TxF«gqeÏÑY„ÕTKeM80½,Y�ÍˆO_l   ÜtdvéÇO*;q/Ü$L]Š0	È}pn<x�&÷"öFFÑe5hYæE¢~"l   †q!jäB%~²^ÐY7yïKÐ\+5¬{S—WýµxÈFJRÏ1D´wšJÑA6g÷)4 rl   rm   r   r   r   r   n  ro   z1TestEccPoint_NIST_P384.test_joing_scalar_multiplyc                 C   rp   )Ni€  é0   rs   r.   r   r   r   rv   x  rw   z!TestEccPoint_NIST_P384.test_sizesN)r   r   r   rx   r   r-   r=   r/   r7   r?   rG   rS   r�   r\   ri   r   rv   r   r   r   r   rŠ   ÷  s,    ýý
rŠ   c                   @   r‰   )ÚTestEccPoint_NIST_P521ztTests defined in section 4.5 of https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.204.9073&rep=rep1&type=pdfl#   ´A«5Û;˜LKà5N…Ž}W,*nø<�ÿUP%¸hA=�Cb?iOtiLÐÀ¢ù1à!ë@vlv'Wl#   #€5˜kS7¦?ÜI]·*[nùnðªkYŽià[²7 .	 Åd9½‘MT3X=TPƒ5ó_Icc	înÚp521l#   ÕG‘J¦oñ7 $ÆØ=õ?>”Dð^`bXkN¶oå	tG÷å`�xwÀ-dg!;I7‹>S{) w™h¸\.,å#Ðl#   cËae�.ÓtDffI*"Òa%ÂA&4ªhö#W±w5Š%D2Ð>n<!Ë}6Þ@fNÐvFñ$>8œv„p÷c                 C   r*   )Nú
NIST P-521r,   r.   r   r   r   r/   Š  r0   z+TestEccPoint_NIST_P521.test_curve_attributec                 C   r1   r2   r3   r5   r   r   r   r7   �  r8   zTestEccPoint_NIST_P521.test_setc                 C   r9   r:   r;   r5   r   r   r   r?   ’  r@   z TestEccPoint_NIST_P521.test_copyc                 C   rA   r:   rB   rD   r   r   r   rG   ™  rH   z"TestEccPoint_NIST_P521.test_negatec                 C   rI   ©Nl#   éY[V=xÝÜCmu¢OÜFálÜõ*²sg	Nüp¨)±giD>u{9gh0!cK-OpÍ-¹^NºÂ™l#   U,ÏR&Ù9³/@Ýa}#Ð>ï;cdÙ{cl@­E»'98�k•h~a­7›Ó ?!-œ(ÄO�+ŽSŠrK   rN   r   r   r   rS   ž  rT   z$TestEccPoint_NIST_P521.test_additionc                 C   rU   r–   rV   rN   r   r   r   rW   ´  rX   z,TestEccPoint_NIST_P521.test_inplace_additionc                 C   rY   )Nl#   Æk†'¯“¤<˜JÇ €cmòtW9ïT@¯%�T$¬SD!kæ»dlPgc×iSWÇ_÷%3byF`($/ˆr¡l#   C5™APS?( ˜w8OoXxÐ
e¿\ú**Ló3tµX@ŸÖ7ÓN&Žx©rZ7ü}r.…8QIarZ   rN   r   r   r   r\   Î  r]   z$TestEccPoint_NIST_P521.test_doublingc                    rŽ   )Nì#   ±\??7‡gßf@YKj”r¸R)PÔ6_Ér”	[<lSfPL3ZôM¡
�TUæÄU¤3ŒýTM|K\x­l#   »ÝQUx•Á2¡?z=è[nÆWÄq0 6&Ã7ômûænktûztX;Ia^R‰m<9-þTeÐ	ºbFl#   [Ö}¨5]v²3én€L¥IYjzÖQ`:¯½„G•k`O×<Y¡[w‚ `5Q*ö*×e7ÚUá5ñqÃr   c                      r`   ra   rc   r   r.   r   r   rd   ò  re   z=TestEccPoint_NIST_P521.test_scalar_multiply.<locals>.<lambda>r�   rh   r   r.   r   ri   ã  r‘   z+TestEccPoint_NIST_P521.test_scalar_multiplyc                 C   sH   d}d}d}d}| j | }|| j| 7 }|  |j|¡ |  |j|¡ d S )Nr—   l#   ãß|T‘B¼)I%_
#wUV6C9c  ´1z7÷bn“lú<�#qIœ"fuÊ#0	Xaêjép©x8=nMßl#   =et¹EK9ù¶JÙBad•ZYÛx¥
./j…¸Va’@3hŒM–hAÿä]_`s}Jõ+dptl#   �XM`®Wi&ðGÿgwH"Œ!áe+oeÈG$,oQ„ Tk’é9P >Ý¥@5{U':cø0'=ÓNçD†H? rl   rm   r   r   r   r   ô  s   
z1TestEccPoint_NIST_P521.test_joing_scalar_multiplyc                 C   rp   )Ni	  éB   rs   r.   r   r   r   rv   ÿ  rw   z!TestEccPoint_NIST_P521.test_sizesNr‚   r   r   r   r   r“   }  s,    ýýr“   c                   @   ó(   e Zd ZdZed ZeejejdƒZ	dS )ÚTestEccPoint_PAI_P192ú9Test vectors from http://point-at-infinity.org/ecc/nisttvr)   N©
r   r   r   rx   r   r   r   ÚGxÚGyÚpointGr   r   r   r   rš     ó    rš   )Ú	PublicKeyr   zpoint-at-infinity.org-P192.txtz&P-192 tests from point-at-infinity.orgc                 C   ó   t | ƒS r:   ©Úint©Úkr   r   r   rd     ó    rd   c                 C   ó
   t | dƒS ©Né   r£   ©rL   r   r   r   rd     re   c                 C   r¨   r©   r£   ©rM   r   r   r   rd     re   )r¦   rL   rM   c                 C   ó*   | j | }|  |j|¡ |  |j|¡ d S r:   ©rŸ   r$   rL   rM   ©r   ÚscalarrL   rM   Úresultr   r   r   Únew_test  ó   
r²   ztest_%dc                   @   r™   )ÚTestEccPoint_PAI_P224r›   r{   Nrœ   r   r   r   r   r´     r    r´   zpoint-at-infinity.org-P224.txtz&P-224 tests from point-at-infinity.orgc                 C   r¢   r:   r£   r¥   r   r   r   rd   #  r§   c                 C   r¨   r©   r£   r«   r   r   r   rd   $  re   c                 C   r¨   r©   r£   r¬   r   r   r   rd   %  re   c                 C   r­   r:   r®   r¯   r   r   r   r²   '  r³   c                   @   r™   )ÚTestEccPoint_PAI_P256r›   Úp256Nrœ   r   r   r   r   rµ   .  r    rµ   zpoint-at-infinity.org-P256.txtz&P-256 tests from point-at-infinity.orgc                 C   r¢   r:   r£   r¥   r   r   r   rd   8  r§   c                 C   r¨   r©   r£   r«   r   r   r   rd   9  re   c                 C   r¨   r©   r£   r¬   r   r   r   rd   :  re   c                 C   r­   r:   r®   r¯   r   r   r   r²   <  r³   c                   @   r™   )ÚTestEccPoint_PAI_P384r›   r‹   Nrœ   r   r   r   r   r·   C  r    r·   zpoint-at-infinity.org-P384.txtz&P-384 tests from point-at-infinity.orgc                 C   r¢   r:   r£   r¥   r   r   r   rd   M  r§   c                 C   r¨   r©   r£   r«   r   r   r   rd   N  re   c                 C   r¨   r©   r£   r¬   r   r   r   rd   O  re   c                 C   r­   r:   r®   r¯   r   r   r   r²   Q  r³   c                   @   r™   )ÚTestEccPoint_PAI_P521r›   r”   Nrœ   r   r   r   r   r¸   X  r    r¸   zpoint-at-infinity.org-P521.txtz&P-521 tests from point-at-infinity.orgc                 C   r¢   r:   r£   r¥   r   r   r   rd   b  r§   c                 C   r¨   r©   r£   r«   r   r   r   rd   c  re   c                 C   r¨   r©   r£   r¬   r   r   r   rd   d  re   c                 C   r­   r:   r®   r¯   r   r   r   r²   f  r³   c                   @   óD   e 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S )ÚTestEccKey_P192c                 C   óÂ   t ddd�}|  |jd¡ |  | ¡ ¡ |  |jjtd j¡ |  |jj	td j
¡ ttd jtd j
dd�}t dd|d�}|  |jd¡ |  | ¡ ¡ |  |j|¡ t ddd�}t ddd�}d S )	NúP-192é   ©r   r    r)   r   ©r   r    ÚpointÚ	secp192r1Ú
prime192v1©r   r$   r    r   Úhas_privater   rL   r   r�   rM   rž   r   ©r   ÚkeyrÀ   r   r   r   Útest_private_keyo  ó   z TestEccKey_P192.test_private_keyc                 C   óF   t td jtd jdd�}td|d�}|  | ¡ ¡ |  |j|¡ d S )Nr)   r¼   r   ©r   rÀ   ©	r   r   r�   rž   r   r   rÄ   r$   r   ©r   rÀ   rÆ   r   r   r   Útest_public_key�  ó   zTestEccKey_P192.test_public_keyc                 C   ó6   t ddd�}| ¡ }|  | ¡ ¡ |  |j|j¡ d S )Nr¼   é   r¾   ©r   Ú
public_keyr   rÄ   r$   r   ©r   Úpriv_keyÚpub_keyr   r   r   Útest_public_key_derivedˆ  ó   z'TestEccKey_P192.test_public_key_derivedc                 C   ó   |   tdd„ ¡ d S )Nc                   S   ó   t ddd�S )NzP-193r½   r¾   ©r   r   r   r   r   rd   �  ó    z4TestEccKey_P192.test_invalid_curve.<locals>.<lambda>©rg   r   r.   r   r   r   Útest_invalid_curve�  r0   z"TestEccKey_P192.test_invalid_curvec                 C   ó$   |   tdd„ ¡ |   tdd„ ¡ d S )Nc                   S   rÙ   )Nr¼   r   r¾   rÚ   r   r   r   r   rd   “  rÛ   z0TestEccKey_P192.test_invalid_d.<locals>.<lambda>c                   S   ó   t dtd jd�S )Nr¼   r)   r¾   ©r   r   Úorderr   r   r   r   rd   ”  ó    ÿrÜ   r.   r   r   r   Útest_invalid_d’  ó   zTestEccKey_P192.test_invalid_dc                 C   ó‚   t jddd�}t jddd�}t jddd�}| ¡ }| ¡ }| ¡ }|  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ d S )NrÐ   r¼   ©r    r   é   ©r   r#   rÒ   r$   r>   ©r   Úprivate_keyÚprivate_key2Úprivate_key3rÒ   Úpublic_key2Úpublic_key3r   r   r   Útest_equality—  ó   zTestEccKey_P192.test_equalityc                 C   ó@   t jdd�}|  dt|ƒ¡ |  |jd¡ |  | ¡ jd¡ d S )Nr)   r   zcurve='NIST P-192'r+   ©r   r   ÚassertInr%   r$   r   rÒ   ©r   rÆ   r   r   r   Útest_name_consistency©  ó   z%TestEccKey_P192.test_name_consistencyN©
r   r   r   rÇ   rÍ   rÖ   rÝ   rã   rï   rõ   r   r   r   r   rº   m  ó    rº   c                   @   r¹   )ÚTestEccKey_P224c                 C   r»   )	NúP-224r½   r¾   r{   r   r¿   Ú	secp224r1Ú
prime224v1rÃ   rÅ   r   r   r   rÇ   ²  rÈ   z TestEccKey_P224.test_private_keyc                 C   rÉ   )Nr{   rú   r   rÊ   rË   rÌ   r   r   r   rÍ   Ä  rÎ   zTestEccKey_P224.test_public_keyc                 C   rÏ   )Nrú   rÐ   r¾   rÑ   rÓ   r   r   r   rÖ   Ë  r×   z'TestEccKey_P224.test_public_key_derivedc                 C   rØ   )Nc                   S   rÙ   )NzP-225r½   r¾   rÚ   r   r   r   r   rd   Ó  rÛ   z4TestEccKey_P224.test_invalid_curve.<locals>.<lambda>rÜ   r.   r   r   r   rÝ   Ò  r0   z"TestEccKey_P224.test_invalid_curvec                 C   rÞ   )Nc                   S   rÙ   )Nrú   r   r¾   rÚ   r   r   r   r   rd   Ö  rÛ   z0TestEccKey_P224.test_invalid_d.<locals>.<lambda>c                   S   rß   )Nrú   r{   r¾   rà   r   r   r   r   rd   ×  râ   rÜ   r.   r   r   r   rã   Õ  rä   zTestEccKey_P224.test_invalid_dc                 C   rå   )NrÐ   rú   ræ   rç   rè   ré   r   r   r   rï   Ú  rð   zTestEccKey_P224.test_equalityc                 C   rñ   )Nr{   r   zcurve='NIST P-224'r|   rò   rô   r   r   r   rõ   ì  rö   z%TestEccKey_P224.test_name_consistencyNr÷   r   r   r   r   rù   °  rø   rù   c                   @   r¹   )ÚTestEccKey_P256c                 C   sÐ   t ddd�}|  |jd¡ |  | ¡ ¡ |  |jjtd j¡ |  |jj	td j
¡ ttd jtd j
ƒ}t dd|d�}|  |jd¡ |  | ¡ ¡ |  |j|¡ t ddd�}t ddd�}| jtt ddd	� d S )
Nr   r½   r¾   r¶   r¿   Ú	secp256r1Ú
prime256v1s    HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH)r   Úseed)r   r$   r    r   rÄ   r   rL   r   r�   rM   rž   r   rg   r   rÅ   r   r   r   rÇ   õ  s   z TestEccKey_P256.test_private_keyc                 C   sB   t td jtd jƒ}td|d�}|  | ¡ ¡ |  |j|¡ d S )Nr¶   r   rÊ   rË   rÌ   r   r   r   rÍ   
  s   zTestEccKey_P256.test_public_keyc                 C   rÏ   )Nr   rÐ   r¾   rÑ   rÓ   r   r   r   rÖ     r×   z'TestEccKey_P256.test_public_key_derivedc                 C   rØ   )Nc                   S   rÙ   )NzP-257r½   r¾   rÚ   r   r   r   r   rd     rÛ   z4TestEccKey_P256.test_invalid_curve.<locals>.<lambda>rÜ   r.   r   r   r   rÝ     r0   z"TestEccKey_P256.test_invalid_curvec                 C   rÞ   )Nc                   S   rÙ   )Nr   r   r¾   rÚ   r   r   r   r   rd     rÛ   z0TestEccKey_P256.test_invalid_d.<locals>.<lambda>c                   S   rß   )Nr   r¶   r¾   rà   r   r   r   r   rd     s    rÜ   r.   r   r   r   rã     rä   zTestEccKey_P256.test_invalid_dc                 C   rå   )NrÐ   r   ræ   rç   rè   ré   r   r   r   rï     rð   zTestEccKey_P256.test_equalityc                 C   rñ   )Nr¶   r   zcurve='NIST P-256'r„   rò   rô   r   r   r   rõ   1  rö   z%TestEccKey_P256.test_name_consistencyNr÷   r   r   r   r   rý   ó  s    rý   c                   @   r¹   )ÚTestEccKey_P384c                 C   óÄ   t d }tddd�}|  |jd¡ |  | ¡ ¡ |  |jj|j¡ |  |jj	|j
¡ t|j|j
dƒ}tdd|d�}|  |jd¡ |  | ¡ ¡ |  |j|¡ tddd�}tddd�}tddd�}d S )Nr‹   r   r½   r¾   r¿   Ú	secp384r1Ú
prime384v1©r   r   r$   r    r   rÄ   r   rL   r�   rM   rž   r   )r   r‹   rÆ   rÀ   r   r   r   rÇ   :  ó   z TestEccKey_P384.test_private_keyc                 C   óD   t d }t|j|jdƒ}td|d�}|  | ¡ ¡ |  |j|¡ d S )Nr‹   r   rÊ   ©	r   r   r�   rž   r   r   rÄ   r$   r   )r   r‹   rÀ   rÆ   r   r   r   rÍ   O  ó
   zTestEccKey_P384.test_public_keyc                 C   rÏ   )Nr   rÐ   r¾   rÑ   rÓ   r   r   r   rÖ   W  r×   z'TestEccKey_P384.test_public_key_derivedc                 C   rØ   )Nc                   S   rÙ   )NzP-385r½   r¾   rÚ   r   r   r   r   rd   _  rÛ   z4TestEccKey_P384.test_invalid_curve.<locals>.<lambda>rÜ   r.   r   r   r   rÝ   ^  r0   z"TestEccKey_P384.test_invalid_curvec                 C   rÞ   )Nc                   S   rÙ   )Nr   r   r¾   rÚ   r   r   r   r   rd   b  rÛ   z0TestEccKey_P384.test_invalid_d.<locals>.<lambda>c                   S   rß   )Nr   r‹   r¾   rà   r   r   r   r   rd   c  râ   rÜ   r.   r   r   r   rã   a  rä   zTestEccKey_P384.test_invalid_dc                 C   rå   )NrÐ   r   ræ   rç   rè   ré   r   r   r   rï   f  rð   zTestEccKey_P384.test_equalityc                 C   rñ   )Nr‹   r   zcurve='NIST P-384'rŒ   rò   rô   r   r   r   rõ   x  rö   z%TestEccKey_P384.test_name_consistencyNr÷   r   r   r   r   r  8  ó    r  c                   @   r¹   )ÚTestEccKey_P521c                 C   r  )Nr”   úP-521r½   r¾   r¿   Ú	secp521r1Ú
prime521v1r  )r   r”   rÆ   rÀ   r   r   r   rÇ   �  r  z TestEccKey_P521.test_private_keyc                 C   r  )Nr”   r   rÊ   r  )r   r”   rÀ   rÆ   r   r   r   rÍ   –  r	  zTestEccKey_P521.test_public_keyc                 C   rÏ   )Nr  rÐ   r¾   rÑ   rÓ   r   r   r   rÖ   ž  r×   z'TestEccKey_P521.test_public_key_derivedc                 C   rØ   )Nc                   S   rÙ   )NzP-522r½   r¾   rÚ   r   r   r   r   rd   ¦  rÛ   z4TestEccKey_P521.test_invalid_curve.<locals>.<lambda>rÜ   r.   r   r   r   rÝ   ¥  r0   z"TestEccKey_P521.test_invalid_curvec                 C   rÞ   )Nc                   S   rÙ   )Nr  r   r¾   rÚ   r   r   r   r   rd   ©  rÛ   z0TestEccKey_P521.test_invalid_d.<locals>.<lambda>c                   S   rß   )Nr  r”   r¾   rà   r   r   r   r   rd   ª  râ   rÜ   r.   r   r   r   rã   ¨  rä   zTestEccKey_P521.test_invalid_dc                 C   rå   )NrÐ   r  ræ   rç   rè   ré   r   r   r   rï   ­  rð   zTestEccKey_P521.test_equalityc                 C   rñ   )Nr”   r   zcurve='NIST P-521'r•   rò   rô   r   r   r   rõ   ¿  rö   z%TestEccKey_P521.test_name_consistencyNr÷   r   r   r   r   r    r
  r  c                   @   ó$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestEccModule_P192c                 C   ó`   t jdd�}|  | ¡ ¡ |  |jttd jtd j	dƒ|j
 d¡ t jdd� t jdd� d S )Nr¼   r   r)   rÁ   rÂ   ©r   r   r   rÄ   r$   r   r   r   r�   rž   r    rô   r   r   r   Útest_generateÈ  ó   þþýz TestEccModule_P192.test_generatec                 C   óœ   t jddd�}|  | ¡ ¡ |  |jtd j¡ t jdtd jtd j	d�}|  
| ¡ ¡ |  |jtd j¡ t jddd� t jddd� t jddd� d S )Nr¼   r½   r¾   r)   ©r   r!   r"   rÁ   rÂ   ©r   r#   r   rÄ   r$   r   r   ÚGr�   rž   r   rô   r   r   r   Útest_constructÕ  ó   ÿz!TestEccModule_P192.test_constructc                 C   ó^   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œ|¤Ž d S )	Né
   rç   ©r!   r"   r)   r   r¼   é   r¾   ©Údictr   r�   rž   rg   r   r   r#   ©r   ÚcoordÚcoordGr   r   r   Útest_negative_constructå  ó    z*TestEccModule_P192.test_negative_constructN©r   r   r   r  r  r$  r   r   r   r   r  Æ  ó    r  c                   @   r  )ÚTestEccModule_P224c                 C   r  )Nrú   r   r{   rû   rü   r  rô   r   r   r   r  ï  r  z TestEccModule_P224.test_generatec                 C   r  )Nrú   r½   r¾   r{   r  rû   rü   r  rô   r   r   r   r  ü  r  z!TestEccModule_P224.test_constructc                 C   r  )	Nr  rç   r  r{   r   rú   r  r¾   r  r!  r   r   r   r$    r%  z*TestEccModule_P224.test_negative_constructNr&  r   r   r   r   r(  í  r'  r(  c                   @   r  )ÚTestEccModule_P256c                 C   s^   t jdd�}|  | ¡ ¡ |  |jttd jtd j	ƒ|j
 d¡ t jdd� t jdd� d S )Nr   r   r¶   rþ   rÿ   r  rô   r   r   r   r    s   ÿÿþz TestEccModule_P256.test_generatec                 C   r  )Nr   r½   r¾   r¶   r  rþ   rÿ   r  rô   r   r   r   r  "  r  z!TestEccModule_P256.test_constructc                 C   r  )	Nr  rç   r  r¶   r   r   r  r¾   r  r!  r   r   r   r$  2  r%  z*TestEccModule_P256.test_negative_constructNr&  r   r   r   r   r)    s    r)  c                   @   r  )ÚTestEccModule_P384c                 C   ó^   t d }tjdd�}|  | ¡ ¡ |  |jt|j|j	dƒ|j
 ¡ tjdd� tjdd� d S )Nr‹   r   r   r  r  ©r   r   r   r   rÄ   r$   r   r   r�   rž   r    ©r   r   rÆ   r   r   r   r  <  ó    z TestEccModule_P384.test_generatec                 C   ó˜   t d }tjddd�}|  | ¡ ¡ |  |jt d j¡ tjd|j|j	d�}|  
| ¡ ¡ |  |j|j¡ tjddd� tjddd� tjddd� d S )Nr‹   r   r½   r¾   r  r  r  ©r   r   r#   r   rÄ   r$   r   r  r�   rž   r   r-  r   r   r   r  G  ó   z!TestEccModule_P384.test_constructc                 C   r  )	Nr  rç   r  r‹   r   r   r  r¾   r  r!  r   r   r   r$  W  r%  z*TestEccModule_P384.test_negative_constructNr&  r   r   r   r   r*  :  ó    r*  c                   @   r  )ÚTestEccModule_P521c                 C   r+  )Nr”   r  r   r  r  r,  r-  r   r   r   r  a  r.  z TestEccModule_P521.test_generatec                 C   r/  )Nr”   r  r½   r¾   r  r  r  r0  r-  r   r   r   r  l  r1  z!TestEccModule_P521.test_constructc                 C   r  )	Nr  rç   r  r”   r   r  r  r¾   r  r!  r   r   r   r$  |  r%  z*TestEccModule_P521.test_negative_constructNr&  r   r   r   r   r3  _  r2  r3  c                 C   s  g }|t tƒ7 }|t tƒ7 }|t tƒ7 }|t tƒ7 }|t tƒ7 }|t tƒ7 }|t tƒ7 }|t tƒ7 }|t t	ƒ7 }|t t
ƒ7 }|t tƒ7 }|t tƒ7 }|t tƒ7 }|t tƒ7 }|t tƒ7 }|t tƒ7 }|t tƒ7 }|t tƒ7 }|t tƒ7 }|t tƒ7 }|t tƒ7 }|S r:   )r   r
   r(   rz   rƒ   rŠ   r“   rš   r´   rµ   r·   r¸   rº   rù   rý   r  r  r  r(  r)  r*  r3  )ÚconfigÚtestsr   r   r   Ú	get_tests„  s.   r6  Ú__main__c                   C   s   t  tƒ ¡S r:   )ÚunittestÚ	TestSuiter6  r   r   r   r   rd   Ÿ  rÛ   Úsuite)ÚdefaultTest)1r8  Úbinasciir   ÚCryptodome.SelfTest.st_commonr   ÚCryptodome.SelfTest.loaderr   ÚCryptodome.PublicKeyr   ÚCryptodome.PublicKey.ECCr   r   r   ÚCryptodome.Math.Numbersr	   ÚTestCaser
   r(   rz   rƒ   rŠ   r“   rš   Útv_paiÚtvr¦   rL   rM   r²   ÚsetattrÚcountr´   rµ   r·   r¸   rº   rù   rý   r  r  r  r(  r)  r*  r3  r6  r   r:  Úmainr   r   r   r   Ú<module>   sÎ   !     þýûþýûþýûþýûþýûCCEGG''&%%
þ