Ë
    (üàgnÊ  ã            	       óŠ  — 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	e j                  «      Z G d
„ de j                  «      Z G d„ de j                  «      Z G d„ de j                  «      Z G d„ de j                  «      Z G d„ de j                  «      Z G d„ de j                  «      Z edddd„ d„ d„ dœ«      xs g ZeD ]>  Zej2                  ej4                  ej6                  fd„Z eedej<                  z  e«       Œ@  G d„ d e j                  «      Z edd!d"d#„ d$„ d%„ dœ«      xs g ZeD ]>  Zej2                  ej4                  ej6                  fd&„Z eedej<                  z  e«       Œ@  G d'„ d(e j                  «      Z  edd)d*d+„ d,„ d-„ dœ«      xs g ZeD ]>  Zej2                  ej4                  ej6                  fd.„Z ee dej<                  z  e«       Œ@  G d/„ d0e j                  «      Z! edd1d2d3„ d4„ d5„ dœ«      xs g ZeD ]>  Zej2                  ej4                  ej6                  fd6„Z ee!dej<                  z  e«       Œ@  G d7„ d8e j                  «      Z" edd9d:d;„ d<„ d=„ dœ«      xs g ZeD ]>  Zej2                  ej4                  ej6                  fd>„Z ee"dej<                  z  e«       Œ@  G d?„ d@e j                  «      Z# G dA„ dBe j                  «      Z$ G dC„ dDe j                  «      Z% G dE„ dFe j                  «      Z& G dG„ dHe j                  «      Z' G dI„ dJe j                  «      Z( G dK„ dLe j                  «      Z) G dM„ dNe j                  «      Z* G dO„ dPe j                  «      Z+ G dQ„ dRe j                  «      Z,i fdS„Z-e.dTk(  rdU„ Z/ e j`                  dV¬W«       yy)Xé    N)Ú	unhexlify)Úlist_test_cases)Úload_test_vectors)ÚECC)ÚEccPointÚ_curvesÚEccKey)ÚIntegerc                   ó   — e Zd Zd„ Zd„ Zy)ÚTestEccPointc                 ó°  — t        j                  d¬«      j                  }t        j                  d¬«      j                  }	 ||z    J ‚# t        $ r}dt	        |«      v sJ ‚Y d }~nd }~ww xY w	 ||z  }J ‚# t        $ r}dt	        |«      v sJ ‚Y d }~nd }~ww xY w G d„ d«      }| j                  | |«       k(  «       | j                  | |«       k7  «       y )NúP-256©ÚcurveúP-384znot on the same curvec                   ó   — e Zd Zy)ú+TestEccPoint.test_mix.<locals>.OtherKeyTypeN)Ú__name__Ú
__module__Ú__qualname__© ó    úe/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/Crypto/SelfTest/PublicKey/test_ECC_NIST.pyÚOtherKeyTyper   >   s   „ Ør   r   )r   ÚgenerateÚpointQÚ
ValueErrorÚstrÚassertFalseÚ
assertTrue)ÚselfÚp1Úp2Úer   s        r   Útest_mixzTestEccPoint.test_mix-   sÆ   € ä�\‰\ Ô(×/Ñ/ˆÜ�\‰\ Ô(×/Ñ/ˆð	5Ø�ŠGØ�5øÜò 	5Ø*¬c°!«fÑ4Ð4Õ4ûð	5úð	5Ø�"‰HˆBØ�5øÜò 	5Ø*¬c°!«fÑ4Ð4Õ4ûð	5ú÷	ñ 	ð 	×Ñ˜™|›~Ñ-Ô.Ø�‰˜™l›nÑ,Õ-s0   ÁA	 Á		A+ÁA&Á&A+Á/A6 Á6	BÁ?BÂBc                 ól   — t        j                  dddd¬«      }| j                  t        |«      d«       y )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"   s     r   Ú	test_reprzTestEccPoint.test_reprD   s9   € Ü�]‰] ØjØ#pØ#qôsˆð 	×Ñœ˜b›ð  $@õ  	Ar   N)r   r   r   r%   r-   r   r   r   r   r   +   s   „ ò.ó.Ar   r   c                   óx   — e Zd ZdZ eddd¬«      Z eddd¬«      Zd„ Zd	„ Zd
„ Z	d„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)Ú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                 óP   — | j                  | j                  j                  d«       y )Nú
NIST P-192©r+   ÚpointSr   ©r!   s    r   Útest_curve_attributez+TestEccPoint_NIST_P192.test_curve_attributeY   ó   € Ø×Ñ˜Ÿ™×*Ñ*¨LÕ9r   c                 óŠ   — t        dd«      }|j                  | j                  «       | j                  || j                  «       y ©Nr   ©r   Úsetr4   r+   ©r!   ÚpointWs     r   Útest_setzTestEccPoint_NIST_P192.test_set\   ó1   € Ü˜!˜Q“ˆØ�
‰
�4—;‘;ÔØ×Ñ˜ §¡Õ-r   c                 ó*  — | j                   j                  «       }| j                  || j                   «       |j                  | j                  «       | j                  || j                  «       | j                  | j                   | j                  «       y ©N©r4   Úcopyr+   r;   ÚpointTÚassertNotEqualr<   s     r   Ú	test_copyz TestEccPoint_NIST_P192.test_copya   ód   € Ø—‘×!Ñ!Ó#ˆØ×Ñ˜ §¡Ô-Ø�
‰
�4—;‘;ÔØ×Ñ˜ §¡Ô-Ø×Ñ˜DŸK™K¨¯©Õ5r   c                 ó�   — | j                    }| j                   |z   }| j                  || j                   j                  «       «       y rA   ©r4   r+   Úpoint_at_infinity©r!   ÚnegSÚsums      r   Útest_negatez"TestEccPoint_NIST_P192.test_negateh   ó8   € Ø—‘ˆ|ˆØ�k‰k˜DÑ ˆØ×Ñ˜˜dŸk™k×;Ñ;Ó=Õ>r   c                 ó¨  — d}d}| j                   | j                  z   }| j                  |j                  |«       | j                  |j                  |«       |j                  «       }| j                   |z   }| j                  || j                   «       || j                   z   }| j                  || j                   «       ||z   }| j                  ||«       y ©Nl   �š<Sb!tX?w|xh©\7®% Žl   K*m/_JÖS‘l(Uû[¯yåq;}©r4   rD   r+   ÚxÚyrJ   ©r!   ÚpointRxÚpointRyÚpointRÚpais        r   Útest_additionz$TestEccPoint_NIST_P192.test_additionm   s·   € ØDˆØDˆà—‘˜tŸ{™{Ñ*ˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Ô+à×&Ñ&Ó(ˆð —‘˜sÑ"ˆØ×Ñ˜ §¡Ô-ð �t—{‘{Ñ"ˆØ×Ñ˜ §¡Ô-ð �s‘ˆØ×Ñ˜ Õ%r   c                 ó(  — d}d}| j                   j                  «       }|| j                  z  }| j                  |j                  |«       | j                  |j
                  |«       |j                  «       }| j                   j                  «       }||z  }| j                  || j                   «       |j                  «       }|| j                   z  }| j                  || j                   «       |j                  «       }||z  }| j                  ||«       y rQ   ©r4   rC   rD   r+   rS   rT   rJ   rU   s        r   Útest_inplace_additionz,TestEccPoint_NIST_P192.test_inplace_additionƒ   sè   € ØDˆØDˆà—‘×!Ñ!Ó#ˆØ�$—+‘+ÑˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Ô+à×&Ñ&Ó(ˆð —‘×!Ñ!Ó#ˆØ�#‰ˆØ×Ñ˜ §¡Ô-ð —‘“ˆØ�$—+‘+ÑˆØ×Ñ˜ §¡Ô-ð —‘“ˆØ�#‰ˆØ×Ñ˜ Õ%r   c                 ó  — d}d}| j                   j                  «       }|j                  «        | j                  |j                  |«       | j                  |j
                  |«       | j                   j                  «       }|j                  «       }|j                  «        | j                  ||«       | j                   j                  «       }||z  }| j                  |j                  |«       | j                  |j
                  |«       y )Nl   biÜ~hIRë ±w¹YTSD{1.ã-l   Ï	±£%Y^Û-<ü6×Ä!N	q¥pÝ ©r4   rC   Údoubler+   rS   rT   rJ   rU   s        r   Útest_doublingz$TestEccPoint_NIST_P192.test_doubling�   sÍ   € ØDˆØDˆà—‘×!Ñ!Ó#ˆØ�‰ŒØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Ô+ð �k‰k×+Ñ+Ó-ˆØ—‘“ˆØ�‰ŒØ×Ñ˜ Ô%ð —‘×!Ñ!Ó#ˆØ�&ÑˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Õ+r   c                 óv  ‡ — d}d}d}‰ j                   |z  }‰ j                  |j                  |«       ‰ j                  |j                  |«       ‰ j                   j	                  «       }‰ j                   dz  }‰ j                  ||«       ‰ j                  t        ˆ fd„«       |‰ j                   z  }‰ j                  |j                  |«       ‰ j                  |j                  |«       t        |«      ‰ j                   z  }‰ j                  |j                  |«       ‰ j                  |j                  |«       y )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z  S ©Néÿÿÿÿ©r4   r5   s   €r   ú<lambda>z=TestEccPoint_NIST_P192.test_scalar_multiply.<locals>.<lambda>Á   ó   ø€ ¨d¯k©k¸BÑ.>€ r   ©r4   r+   rS   rT   rJ   ÚassertRaisesr   r
   ©r!   r'   rV   rW   rX   rY   s   `     r   Útest_scalar_multiplyz+TestEccPoint_NIST_P192.test_scalar_multiply²   sü   ø€ Ø>ˆØDˆØDˆà—‘˜q‘ˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Ô+ð �k‰k×+Ñ+Ó-ˆØ—‘˜q‘ˆØ×Ñ˜ Ô%ð 	×Ñœ*Ó&>Ô?ð �T—[‘[‘ˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Ô+ä˜“˜dŸk™kÑ)ˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Õ+r   c                 óÂ   — d}d}d}d}| j                   |z  | j                  |z  z   }| j                  |j                  |«       | j                  |j                  |«       y )Nrc   l   ¼rr6O^‰h™oª3ô&ga°OêqKl   Þ[o…ge¦?“/° õo·r6uc;'{ l   D6 vMcã'Åà~™vLz«6bHe©r4   rD   r+   rS   rT   ©r!   r'   r$   rV   rW   rX   s         r   Útest_joint_scalar_multiplyz1TestEccPoint_NIST_P192.test_joint_scalar_multiplyÌ   sX   € Ø>ˆØ>ˆØDˆØDˆà—‘˜q‘ 4§;¡;°¡?Ñ2ˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Õ+r   c                 ó¬   — | j                  | j                  j                  «       d«       | j                  | j                  j                  «       d«       y )NéÀ   é   ©r+   r4   Úsize_in_bitsÚsize_in_bytesr5   s    r   Ú
test_sizesz!TestEccPoint_NIST_P192.test_sizesÖ   ó<   € Ø×Ñ˜Ÿ™×1Ñ1Ó3°SÔ9Ø×Ñ˜Ÿ™×2Ñ2Ó4°bÕ9r   N)r   r   r   Ú__doc__r   r4   rD   r6   r>   rF   rN   rZ   r]   ra   rm   rq   rx   r   r   r   r/   r/   L   s_   „ Ù~áØBØBØô€Fñ
 ØBØBØô€Fò
:ò.ò
6ò?ò
&ò,&ò4,ò*,ò4,ó:r   r/   c                   óx   — e Zd ZdZ eddd¬«      Z eddd¬«      Zd„ Zd	„ Zd
„ Z	d„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)Ú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                 óP   — | j                  | j                  j                  d«       y )Nú
NIST P-224r3   r5   s    r   r6   z+TestEccPoint_NIST_P224.test_curve_attributeè   r7   r   c                 óŠ   — t        dd«      }|j                  | j                  «       | j                  || j                  «       y r9   r:   r<   s     r   r>   zTestEccPoint_NIST_P224.test_setë   r?   r   c                 ó*  — | j                   j                  «       }| j                  || j                   «       |j                  | j                  «       | j                  || j                  «       | j                  | j                   | j                  «       y rA   rB   r<   s     r   rF   z TestEccPoint_NIST_P224.test_copyð   rG   r   c                 ó�   — | j                    }| j                   |z   }| j                  || j                   j                  «       «       y rA   rI   rK   s      r   rN   z"TestEccPoint_NIST_P224.test_negate÷   rO   r   c                 ó¨  — d}d}| j                   | j                  z   }| j                  |j                  |«       | j                  |j                  |«       |j                  «       }| j                   |z   }| j                  || j                   «       || j                   z   }| j                  || j                   «       ||z   }| j                  ||«       y ©Nl   }¥Që+±ª|y%›w<Ô{ VÝu{a„ÛdÛl   pZv–8µ)�_¹z-hK	GÕ^Ñ6gyO9rR   rU   s        r   rZ   z$TestEccPoint_NIST_P224.test_additionü   s·   € ØLˆØLˆà—‘˜tŸ{™{Ñ*ˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Ô+à×&Ñ&Ó(ˆð —‘˜sÑ"ˆØ×Ñ˜ §¡Ô-ð �t—{‘{Ñ"ˆØ×Ñ˜ §¡Ô-ð �s‘ˆØ×Ñ˜ Õ%r   c                 ó(  — d}d}| j                   j                  «       }|| j                  z  }| j                  |j                  |«       | j                  |j
                  |«       |j                  «       }| j                   j                  «       }||z  }| j                  || j                   «       |j                  «       }|| j                   z  }| j                  || j                   «       |j                  «       }||z  }| j                  ||«       y r„   r\   rU   s        r   r]   z,TestEccPoint_NIST_P224.test_inplace_addition  sè   € ØLˆØLˆà—‘×!Ñ!Ó#ˆØ�$—+‘+ÑˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Ô+à×&Ñ&Ó(ˆð —‘×!Ñ!Ó#ˆØ�#‰ˆØ×Ñ˜ §¡Ô-ð —‘“ˆØ�$—+‘+ÑˆØ×Ñ˜ §¡Ô-ð —‘“ˆØ�#‰ˆØ×Ñ˜ Õ%r   c                 ó  — d}d}| j                   j                  «       }|j                  «        | j                  |j                  |«       | j                  |j
                  |«       | j                   j                  «       }|j                  «       }|j                  «        | j                  ||«       | j                   j                  «       }||z  }| j                  |j                  |«       | j                  |j
                  |«       y )Nl   Ç_¹§x²xRhÄ¶>7ZëPÐJòIw}ä-r*l   }]¿o`}ýMôH^Ê>A0’Z]Sv>÷L�1|+r_   rU   s        r   ra   z$TestEccPoint_NIST_P224.test_doubling,  sÍ   € ØLˆØLˆà—‘×!Ñ!Ó#ˆØ�‰ŒØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Ô+ð �k‰k×+Ñ+Ó-ˆØ—‘“ˆØ�‰ŒØ×Ñ˜ Ô%ð —‘×!Ñ!Ó#ˆØ�&ÑˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Õ+r   c                 óv  ‡ — d}d}d}‰ j                   |z  }‰ j                  |j                  |«       ‰ j                  |j                  |«       ‰ j                   j	                  «       }‰ j                   dz  }‰ j                  ||«       ‰ j                  t        ˆ fd„«       |‰ j                   z  }‰ j                  |j                  |«       ‰ j                  |j                  |«       t        |«      ‰ j                   z  }‰ j                  |j                  |«       ‰ j                  |j                  |«       y )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                  ó"   •— ‰ j                   dz  S re   rg   r5   s   €r   rh   z=TestEccPoint_NIST_P224.test_scalar_multiply.<locals>.<lambda>P  ri   r   rj   rl   s   `     r   rm   z+TestEccPoint_NIST_P224.test_scalar_multiplyA  sü   ø€ ØFˆØLˆØLˆà—‘˜q‘ˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Ô+ð �k‰k×+Ñ+Ó-ˆØ—‘˜q‘ˆØ×Ñ˜ Ô%ð 	×Ñœ*Ó&>Ô?ð �T—[‘[‘ˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Ô+ä˜“˜dŸk™kÑ)ˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Õ+r   c                 óÂ   — d}d}d}d}| j                   |z  | j                  |z  z   }| j                  |j                  |«       | j                  |j                  |«       y )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Ôro   rp   s         r   Útest_joing_scalar_multiplyz1TestEccPoint_NIST_P224.test_joing_scalar_multiply[  sX   € ØFˆØFˆØLˆØLˆà—‘˜q‘ 4§;¡;°¡?Ñ2ˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Õ+r   c                 ó¬   — | j                  | j                  j                  «       d«       | j                  | j                  j                  «       d«       y )Néà   é   ru   r5   s    r   rx   z!TestEccPoint_NIST_P224.test_sizese  ry   r   N©r   r   r   rz   r   r4   rD   r6   r>   rF   rN   rZ   r]   ra   rm   r‹   rx   r   r   r   r|   r|   Û   s_   „ Ù~áØJØJØô€Fñ
 ØJØJØô€Fò
:ò.ò
6ò?ò
&ò,&ò4,ò*,ò4,ó:r   r|   c                   óp   — e Zd ZdZ edd«      Z edd«      Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)Ú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                 óP   — | j                  | j                  j                  d«       y )Nú
NIST P-256r3   r5   s    r   r6   z+TestEccPoint_NIST_P256.test_curve_attributeu  r7   r   c                 óŠ   — t        dd«      }|j                  | j                  «       | j                  || j                  «       y r9   r:   r<   s     r   r>   zTestEccPoint_NIST_P256.test_setx  r?   r   c                 ó*  — | j                   j                  «       }| j                  || j                   «       |j                  | j                  «       | j                  || j                  «       | j                  | j                   | j                  «       y rA   rB   r<   s     r   rF   z TestEccPoint_NIST_P256.test_copy}  rG   r   c                 ó�   — | j                    }| j                   |z   }| j                  || j                   j                  «       «       y rA   rI   rK   s      r   rN   z"TestEccPoint_NIST_P256.test_negate„  rO   r   c                 ó¨  — d}d}| j                   | j                  z   }| j                  |j                  |«       | j                  |j                  |«       |j                  «       }| j                   |z   }| j                  || j                   «       || j                   z   }| j                  || j                   «       ||z   }| j                  ||«       y ©Nl   ~´(iMç)E=íkdHpit3&¯EpmRê±rl   dB•hE@	hF¹TVL‰ÃÄ.‹E$uúd„K].X rR   rU   s        r   rZ   z$TestEccPoint_NIST_P256.test_addition‰  s·   € ØTˆØTˆà—‘˜tŸ{™{Ñ*ˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Ô+à×&Ñ&Ó(ˆð —‘˜sÑ"ˆØ×Ñ˜ §¡Ô-ð �t—{‘{Ñ"ˆØ×Ñ˜ §¡Ô-ð �s‘ˆØ×Ñ˜ Õ%r   c                 ó(  — d}d}| j                   j                  «       }|| j                  z  }| j                  |j                  |«       | j                  |j
                  |«       |j                  «       }| j                   j                  «       }||z  }| j                  || j                   «       |j                  «       }|| j                   z  }| j                  || j                   «       |j                  «       }||z  }| j                  ||«       y r˜   r\   rU   s        r   r]   z,TestEccPoint_NIST_P256.test_inplace_additionŸ  óè   € ØTˆØTˆà—‘×!Ñ!Ó#ˆØ�$—+‘+ÑˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Ô+à×&Ñ&Ó(ˆð —‘×!Ñ!Ó#ˆØ�#‰ˆØ×Ñ˜ §¡Ô-ð —‘“ˆØ�$—+‘+ÑˆØ×Ñ˜ §¡Ô-ð —‘“ˆØ�#‰ˆØ×Ñ˜ Õ%r   c                 ó  — d}d}| j                   j                  «       }|j                  «        | j                  |j                  |«       | j                  |j
                  |«       | j                   j                  «       }|j                  «       }|j                  «        | j                  ||«       | j                   j                  «       }||z  }| j                  |j                  |«       | j                  |j
                  |«       y )Nl   °'Â6ó?0T‚�.ì<6ß3˜€GwG:Ç]�Hsivl   ÇPÃ6eÞ#` ³{yO8^g^ w{9lžJ±@‡z r_   rU   s        r   ra   z$TestEccPoint_NIST_P256.test_doubling¹  sÍ   € ØTˆØTˆà—‘×!Ñ!Ó#ˆØ�‰ŒØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Ô+ð �k‰k×+Ñ+Ó-ˆØ—‘“ˆØ�‰ŒØ×Ñ˜ Ô%ð —‘×!Ñ!Ó#ˆØ�&ÑˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Õ+r   c                 óv  ‡ — d}d}d}‰ j                   |z  }‰ j                  |j                  |«       ‰ j                  |j                  |«       ‰ j                   j	                  «       }‰ j                   dz  }‰ j                  ||«       ‰ j                  t        ˆ fd„«       |‰ j                   z  }‰ j                  |j                  |«       ‰ j                  |j                  |«       t        |«      ‰ j                   z  }‰ j                  |j                  |«       ‰ j                  |j                  |«       y )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                  ó"   •— ‰ j                   dz  S re   rg   r5   s   €r   rh   z=TestEccPoint_NIST_P256.test_scalar_multiply.<locals>.<lambda>Ý  ri   r   rj   rl   s   `     r   rm   z+TestEccPoint_NIST_P256.test_scalar_multiplyÎ  sü   ø€ ØNˆØTˆØTˆà—‘˜q‘ˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Ô+ð �k‰k×+Ñ+Ó-ˆØ—‘˜q‘ˆØ×Ñ˜ Ô%ð 	×Ñœ*Ó&>Ô?ð �T—[‘[‘ˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Ô+ä˜“˜dŸk™kÑ)ˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Õ+r   c                 óÂ   — d}d}d}d}| j                   |z  | j                  |z  z   }| j                  |j                  |«       | j                  |j                  |«       y )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 ro   rp   s         r   r‹   z1TestEccPoint_NIST_P256.test_joing_scalar_multiplyè  sX   € ØNˆØNˆØTˆØTˆà—‘˜q‘ 4§;¡;°¡?Ñ2ˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Õ+r   c                 ó¬   — | j                  | j                  j                  «       d«       | j                  | j                  j                  «       d«       y )Né   é    ru   r5   s    r   rx   z!TestEccPoint_NIST_P256.test_sizesò  ry   r   Nr�   r   r   r   r‘   r‘   j  s[   „ Ù~áØRØRóT€Fñ ØRØRóT€Fò:ò.ò
6ò?ò
&ò,&ò4,ò*,ò4,ó:r   r‘   c                   ót   — e Zd ZdZ eddd«      Z eddd«      Zd„ Zd„ Zd	„ Z	d
„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)Ú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                 óP   — | j                  | j                  j                  d«       y )Nú
NIST P-384r3   r5   s    r   r6   z+TestEccPoint_NIST_P384.test_curve_attribute  r7   r   c                 óŒ   — t        ddd«      }|j                  | j                  «       | j                  || j                  «       y )Nr   r¥   r:   r<   s     r   r>   zTestEccPoint_NIST_P384.test_set  s4   € Ü˜!˜Q Ó'ˆØ�
‰
�4—;‘;ÔØ×Ñ˜ §¡Õ-r   c                 ó*  — | j                   j                  «       }| j                  || j                   «       |j                  | j                  «       | j                  || j                  «       | j                  | j                   | j                  «       y rA   rB   r<   s     r   rF   z TestEccPoint_NIST_P384.test_copy  rG   r   c                 ó�   — | j                    }| j                   |z   }| j                  || j                   j                  «       «       y rA   rI   rK   s      r   rN   z"TestEccPoint_NIST_P384.test_negate  rO   r   c                 ó¨  — d}d}| j                   | j                  z   }| j                  |j                  |«       | j                  |j                  |«       |j                  «       }| j                   |z   }| j                  || j                   «       || j                   z   }| j                  || j                   «       ||z   }| j                  ||«       y )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, rR   rU   s        r   rZ   z$TestEccPoint_NIST_P384.test_addition  s·   € ØtˆØtˆà—‘˜tŸ{™{Ñ*ˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Ô+à×&Ñ&Ó(ˆð —‘˜sÑ"ˆØ×Ñ˜ §¡Ô-ð �t—{‘{Ñ"ˆØ×Ñ˜ §¡Ô-ð �s‘ˆØ×Ñ˜ Õ%r   c                 ó(  — d}d}| j                   j                  «       }|| j                  z  }| j                  |j                  |«       | j                  |j
                  |«       |j                  «       }| j                   j                  «       }||z  }| j                  || j                   «       |j                  «       }|| j                   z  }| j                  || j                   «       |j                  «       }||z  }| j                  ||«       y r˜   r\   rU   s        r   Ú_test_inplace_additionz-TestEccPoint_NIST_P384._test_inplace_addition.  rš   r   c                 ó  — d}d}| j                   j                  «       }|j                  «        | j                  |j                  |«       | j                  |j
                  |«       | j                   j                  «       }|j                  «       }|j                  «        | j                  ||«       | j                   j                  «       }||z  }| j                  |j                  |«       | j                  |j
                  |«       y )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=.ôr_   rU   s        r   ra   z$TestEccPoint_NIST_P384.test_doublingH  sÍ   € ØtˆØtˆà—‘×!Ñ!Ó#ˆØ�‰ŒØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Ô+ð �k‰k×+Ñ+Ó-ˆØ—‘“ˆØ�‰ŒØ×Ñ˜ Ô%ð —‘×!Ñ!Ó#ˆØ�&ÑˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Õ+r   c                 óH  ‡ — d}d}d}‰ j                   |z  }‰ j                  |j                  |«       ‰ j                  |j                  |«       ‰ j                   j	                  «       }‰ j                   dz  }‰ j                  ||«       ‰ j                  t        ˆ fd„«       y )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                  ó"   •— ‰ j                   dz  S re   rg   r5   s   €r   rh   z=TestEccPoint_NIST_P384.test_scalar_multiply.<locals>.<lambda>l  ri   r   ©r4   r+   rS   rT   rJ   rk   r   rl   s   `     r   rm   z+TestEccPoint_NIST_P384.test_scalar_multiply]  s‹   ø€ ØnˆØtˆØtˆà—‘˜q‘ˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Ô+ð �k‰k×+Ñ+Ó-ˆØ—‘˜q‘ˆØ×Ñ˜ Ô%ð 	×Ñœ*Ó&>Õ?r   c                 óÂ   — d}d}d}d}| j                   |z  | j                  |z  z   }| j                  |j                  |«       | j                  |j                  |«       y )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 ro   rp   s         r   r‹   z1TestEccPoint_NIST_P384.test_joing_scalar_multiplyn  sX   € ØnˆØnˆØtˆØtˆà—‘˜q‘ 4§;¡;°¡?Ñ2ˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Õ+r   c                 ó¬   — | j                  | j                  j                  «       d«       | j                  | j                  j                  «       d«       y )Ni€  é0   ru   r5   s    r   rx   z!TestEccPoint_NIST_P384.test_sizesx  ry   r   N)r   r   r   rz   r   r4   rD   r6   r>   rF   rN   rZ   r­   ra   rm   r‹   rx   r   r   r   r¤   r¤   ÷  s`   „ Ù~áØrØrØó€Fñ
 ØrØrØó€Fò
:ò.ò
6ò?ò
&ò,&ò4,ò*@ò",ó:r   r¤   c                   ót   — e Zd ZdZ eddd«      Z eddd«      Zd„ Zd„ Zd	„ Z	d
„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)Ú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                 óP   — | j                  | j                  j                  d«       y )Nú
NIST P-521r3   r5   s    r   r6   z+TestEccPoint_NIST_P521.test_curve_attributeŠ  r7   r   c                 óŠ   — t        dd«      }|j                  | j                  «       | j                  || j                  «       y r9   r:   r<   s     r   r>   zTestEccPoint_NIST_P521.test_set�  r?   r   c                 ó*  — | j                   j                  «       }| j                  || j                   «       |j                  | j                  «       | j                  || j                  «       | j                  | j                   | j                  «       y rA   rB   r<   s     r   rF   z TestEccPoint_NIST_P521.test_copy’  rG   r   c                 ó�   — | j                    }| j                   |z   }| j                  || j                   j                  «       «       y rA   rI   rK   s      r   rN   z"TestEccPoint_NIST_P521.test_negate™  rO   r   c                 ó¨  — d}d}| j                   | j                  z   }| j                  |j                  |«       | j                  |j                  |«       |j                  «       }| j                   |z   }| j                  || j                   «       || j                   z   }| j                  || j                   «       ||z   }| j                  ||«       y ©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ŠrR   rU   s        r   rZ   z$TestEccPoint_NIST_P521.test_additionž  s½   € ð ]ˆð ]ˆà—‘˜tŸ{™{Ñ*ˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Ô+à×&Ñ&Ó(ˆð —‘˜sÑ"ˆØ×Ñ˜ §¡Ô-ð �t—{‘{Ñ"ˆØ×Ñ˜ §¡Ô-ð �s‘ˆØ×Ñ˜ Õ%r   c                 ó(  — d}d}| j                   j                  «       }|| j                  z  }| j                  |j                  |«       | j                  |j
                  |«       |j                  «       }| j                   j                  «       }||z  }| j                  || j                   «       |j                  «       }|| j                   z  }| j                  || j                   «       |j                  «       }||z  }| j                  ||«       y r¿   r\   rU   s        r   r]   z,TestEccPoint_NIST_P521.test_inplace_addition´  sî   € ð ]ˆð ]ˆà—‘×!Ñ!Ó#ˆØ�$—+‘+ÑˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Ô+à×&Ñ&Ó(ˆð —‘×!Ñ!Ó#ˆØ�#‰ˆØ×Ñ˜ §¡Ô-ð —‘“ˆØ�$—+‘+ÑˆØ×Ñ˜ §¡Ô-ð —‘“ˆØ�#‰ˆØ×Ñ˜ Õ%r   c                 ó  — d}d}| j                   j                  «       }|j                  «        | j                  |j                  |«       | j                  |j
                  |«       | j                   j                  «       }|j                  «       }|j                  «        | j                  ||«       | j                   j                  «       }||z  }| j                  |j                  |«       | j                  |j
                  |«       y )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r_   rU   s        r   ra   z$TestEccPoint_NIST_P521.test_doublingÎ  sÓ   € ð ]ˆð ]ˆà—‘×!Ñ!Ó#ˆØ�‰ŒØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Ô+ð �k‰k×+Ñ+Ó-ˆØ—‘“ˆØ�‰ŒØ×Ñ˜ Ô%ð —‘×!Ñ!Ó#ˆØ�&ÑˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Õ+r   c                 óH  ‡ — d}d}d}‰ j                   |z  }‰ j                  |j                  |«       ‰ j                  |j                  |«       ‰ j                   j	                  «       }‰ j                   dz  }‰ j                  ||«       ‰ j                  t        ˆ fd„«       y )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                  ó"   •— ‰ j                   dz  S re   rg   r5   s   €r   rh   z=TestEccPoint_NIST_P521.test_scalar_multiply.<locals>.<lambda>ò  ri   r   r²   rl   s   `     r   rm   z+TestEccPoint_NIST_P521.test_scalar_multiplyã  s”   ø€ ð Wˆð ]ˆð ]ˆà—‘˜q‘ˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Ô+ð �k‰k×+Ñ+Ó-ˆØ—‘˜q‘ˆØ×Ñ˜ Ô%ð 	×Ñœ*Ó&>Õ?r   c                 óÆ   — d}d}d}d}| j                   |z  }|| j                  |z  z  }| j                  |j                  |«       | j                  |j                  |«       y )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? ro   rp   s         r   r‹   z1TestEccPoint_NIST_P521.test_joing_scalar_multiplyô  si   € ð Wˆð Wˆð ]ˆð ]ˆà—‘˜q‘ˆØ�$—+‘+ ‘/Ñ!ˆØ×Ñ˜Ÿ™ 7Ô+Ø×Ñ˜Ÿ™ 7Õ+r   c                 ó¬   — | j                  | j                  j                  «       d«       | j                  | j                  j                  «       d«       y )Ni	  éB   ru   r5   s    r   rx   z!TestEccPoint_NIST_P521.test_sizesÿ  ry   r   Nr�   r   r   r   r·   r·   }  sl   „ Ù~áð [ð [Øó€Fñ
 ð [ð [Øó€Fò
:ò.ò
6ò?ò
&ò,&ò4,ò*@ò"	,ó:r   r·   c                   óV   — e Zd ZdZed   Z eej                  ej                  d«      Z	y)ÚTestEccPoint_PAI_P192ú9Test vectors from http://point-at-infinity.org/ecc/nisttvr0   N©
r   r   r   rz   r   r   r   ÚGxÚGyÚpointGr   r   r   rÉ   rÉ     ó$   „ ÙCà�F‰O€EÙ�e—h‘h §¡¨&Ó1�Fr   rÉ   )Ú	PublicKeyr   zpoint-at-infinity.org-P192.txtz&P-192 tests from point-at-infinity.orgc                 ó   — t        | «      S rA   ©Úint©Úks    r   rh   rh     ó
   € ¤C¨£F€ r   c                 ó   — t        | d«      S ©Né   rÒ   ©rS   s    r   rh   rh     ó   € ¤C¨¨2£J€ r   c                 ó   — t        | d«      S rØ   rÒ   ©rT   s    r   rh   rh     rÛ   r   )rÕ   rS   rT   c                 ó’   — | j                   |z  }| j                  |j                  |«       | j                  |j                  |«       y rA   ©rÎ   r+   rS   rT   ©r!   ÚscalarrS   rT   Úresults        r   Únew_testrã     ó8   € Ø—‘˜vÑ%ˆØ×Ñ˜Ÿ™ 1Ô%Ø×Ñ˜Ÿ™ 1Õ%r   ztest_%dc                   óV   — e Zd ZdZed   Z eej                  ej                  d«      Z	y)ÚTestEccPoint_PAI_P224rÊ   r}   NrË   r   r   r   ræ   ræ     rÏ   r   ræ   zpoint-at-infinity.org-P224.txtz&P-224 tests from point-at-infinity.orgc                 ó   — t        | «      S rA   rÒ   rÔ   s    r   rh   rh   #  rÖ   r   c                 ó   — t        | d«      S rØ   rÒ   rÚ   s    r   rh   rh   $  rÛ   r   c                 ó   — t        | d«      S rØ   rÒ   rÝ   s    r   rh   rh   %  rÛ   r   c                 ó’   — | j                   |z  }| j                  |j                  |«       | j                  |j                  |«       y rA   rß   rà   s        r   rã   rã   '  rä   r   c                   óV   — e Zd ZdZed   Z eej                  ej                  d«      Z	y)ÚTestEccPoint_PAI_P256rÊ   Úp256NrË   r   r   r   rì   rì   .  rÏ   r   rì   zpoint-at-infinity.org-P256.txtz&P-256 tests from point-at-infinity.orgc                 ó   — t        | «      S rA   rÒ   rÔ   s    r   rh   rh   8  rÖ   r   c                 ó   — t        | d«      S rØ   rÒ   rÚ   s    r   rh   rh   9  rÛ   r   c                 ó   — t        | d«      S rØ   rÒ   rÝ   s    r   rh   rh   :  rÛ   r   c                 ó’   — | j                   |z  }| j                  |j                  |«       | j                  |j                  |«       y rA   rß   rà   s        r   rã   rã   <  rä   r   c                   óV   — e Zd ZdZed   Z eej                  ej                  d«      Z	y)ÚTestEccPoint_PAI_P384rÊ   r¥   NrË   r   r   r   ró   ró   C  rÏ   r   ró   zpoint-at-infinity.org-P384.txtz&P-384 tests from point-at-infinity.orgc                 ó   — t        | «      S rA   rÒ   rÔ   s    r   rh   rh   M  rÖ   r   c                 ó   — t        | d«      S rØ   rÒ   rÚ   s    r   rh   rh   N  rÛ   r   c                 ó   — t        | d«      S rØ   rÒ   rÝ   s    r   rh   rh   O  rÛ   r   c                 ó’   — | j                   |z  }| j                  |j                  |«       | j                  |j                  |«       y rA   rß   rà   s        r   rã   rã   Q  rä   r   c                   óV   — e Zd ZdZed   Z eej                  ej                  d«      Z	y)ÚTestEccPoint_PAI_P521rÊ   r¸   NrË   r   r   r   rù   rù   X  rÏ   r   rù   zpoint-at-infinity.org-P521.txtz&P-521 tests from point-at-infinity.orgc                 ó   — t        | «      S rA   rÒ   rÔ   s    r   rh   rh   b  rÖ   r   c                 ó   — t        | d«      S rØ   rÒ   rÚ   s    r   rh   rh   c  rÛ   r   c                 ó   — t        | d«      S rØ   rÒ   rÝ   s    r   rh   rh   d  rÛ   r   c                 ó’   — | j                   |z  }| j                  |j                  |«       | j                  |j                  |«       y rA   rß   rà   s        r   rã   rã   f  rä   r   c                   ó6   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	ÚTestEccKey_P192c                 óÎ  — t        dd¬«      }| j                  |j                  d«       | j                  |j	                  «       «       | j                  |j
                  j                  t        d   j                  «       | j                  |j
                  j                  t        d   j                  «       t        t        d   j                  t        d   j                  d¬«      }t        dd|¬«      }| j                  |j                  d«       | j                  |j	                  «       «       | j                  |j
                  |«       t        dd¬«      }t        dd¬«      }y )	NúP-192é   ©r   r'   r0   r   ©r   r'   ÚpointÚ	secp192r1Ú
prime192v1©r	   r+   r'   r    Úhas_privater   rS   r   rÌ   rT   rÍ   r   ©r!   Úkeyr  s      r   Útest_private_keyz TestEccKey_P192.test_private_keyo  óþ   € ä˜7 aÔ(ˆØ×Ñ˜Ÿ™ Ô"Ø�‰˜Ÿ™Ó)Ô*Ø×Ñ˜Ÿ™Ÿ™¤w¨v¡×'9Ñ'9Ô:Ø×Ñ˜Ÿ™Ÿ™¤w¨v¡×'9Ñ'9Ô:äœ ™×+Ñ+¬W°V©_×-?Ñ-?ÀwÔOˆÜ˜7 a¨uÔ5ˆØ×Ñ˜Ÿ™ Ô"Ø�‰˜Ÿ™Ó)Ô*Ø×Ñ˜Ÿ™ UÔ+ô ˜;¨!Ô,ˆÜ˜<¨1Ô-‰r   c                 óô   — t        t        d   j                  t        d   j                  d¬«      }t	        d|¬«      }| j                  |j                  «       «       | j                  |j                  |«       y )Nr0   r  r   ©r   r  ©	r   r   rÌ   rÍ   r	   r   r	  r+   r   ©r!   r  r  s      r   Útest_public_keyzTestEccKey_P192.test_public_key�  óY   € äœ ™×+Ñ+¬W°V©_×-?Ñ-?ÀwÔOˆÜ˜7¨%Ô0ˆØ×Ñ˜Ÿ™Ó*Ô+Ø×Ñ˜Ÿ™ UÕ+r   c                 óÈ   — t        dd¬«      }|j                  «       }| j                  |j                  «       «       | j	                  |j
                  |j
                  «       y )Nr  é   r  ©r	   Ú
public_keyr   r	  r+   r   ©r!   Úpriv_keyÚpub_keys      r   Útest_public_key_derivedz'TestEccKey_P192.test_public_key_derivedˆ  óK   € ä ¨1Ô-ˆØ×%Ñ%Ó'ˆØ×Ñ˜×,Ñ,Ó.Ô/Ø×Ñ˜Ÿ™¨'¯.©.Õ9r   c                 ó2   — | j                  t        d„ «       y )Nc                  ó   — t        dd¬«      S )NzP-193r  r  ©r	   r   r   r   rh   z4TestEccKey_P192.test_invalid_curve.<locals>.<lambda>�  ó   € ¬f¸7ÀaÔ.H€ r   ©rk   r   r5   s    r   Útest_invalid_curvez"TestEccKey_P192.test_invalid_curve�  ó   € Ø×Ñœ*Ñ&HÕIr   c                 ó`   — | j                  t        d„ «       | j                  t        d„ «       y )Nc                  ó   — t        dd¬«      S )Nr  r   r  r  r   r   r   rh   z0TestEccKey_P192.test_invalid_d.<locals>.<lambda>“  r   r   c                  ó>   — t        dt        d   j                  ¬«      S )Nr  r0   r  ©r	   r   Úorderr   r   r   rh   z0TestEccKey_P192.test_invalid_d.<locals>.<lambda>”  ó   € ¬f¸7Ü7>¸v±×7LÑ7Lô/N€ r   r!  r5   s    r   Útest_invalid_dzTestEccKey_P192.test_invalid_d’  ó*   € Ø×Ñœ*Ñ&HÔIØ×Ñœ*ñ 'Nõ 	Or   c                 ó¢  — t        j                  dd¬«      }t        j                  dd¬«      }t        j                  dd¬«      }|j                  «       }|j                  «       }|j                  «       }| j                  ||«       | j	                  ||«       | j                  ||«       | j	                  ||«       | j	                  ||«       y )Nr  r  ©r'   r   é   ©r   r*   r  r+   rE   ©r!   Úprivate_keyÚprivate_key2Úprivate_key3r  Úpublic_key2Úpublic_key3s          r   Útest_equalityzTestEccKey_P192.test_equality—  ó¬   € ä—m‘m a¨wÔ7ˆÜ—}‘} q°Ô8ˆÜ—}‘} q°Ô8ˆà ×+Ñ+Ó-ˆ
Ø"×-Ñ-Ó/ˆØ"×-Ñ-Ó/ˆà×Ñ˜ lÔ3Ø×Ñ˜K¨Ô6à×Ñ˜ [Ô1Ø×Ñ˜J¨Ô4à×Ñ˜J¨Õ4r   c                 óò   — t        j                  d¬«      }| j                  dt        |«      «       | j	                  |j
                  d«       | j	                  |j                  «       j
                  d«       y )Nr0   r   zcurve='NIST P-192'r2   ©r   r   ÚassertInr,   r+   r   r  ©r!   r  s     r   Útest_name_consistencyz%TestEccKey_P192.test_name_consistency©  óT   € Ü�l‰l Ô(ˆØ�‰Ð*¬D°«IÔ6Ø×Ñ˜Ÿ™ LÔ1Ø×Ñ˜Ÿ™Ó)×/Ñ/°Õ>r   N©
r   r   r   r  r  r  r"  r*  r6  r<  r   r   r   rÿ   rÿ   m  ó'   „ ò.ò$,ò:òJòOò
5ó$?r   rÿ   c                   ó6   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	ÚTestEccKey_P224c                 óÎ  — t        dd¬«      }| j                  |j                  d«       | j                  |j	                  «       «       | j                  |j
                  j                  t        d   j                  «       | j                  |j
                  j                  t        d   j                  «       t        t        d   j                  t        d   j                  d¬«      }t        dd|¬«      }| j                  |j                  d«       | j                  |j	                  «       «       | j                  |j
                  |«       t        dd¬«      }t        dd¬«      }y )	NúP-224r  r  r}   r   r  Ú	secp224r1Ú
prime224v1r  r
  s      r   r  z TestEccKey_P224.test_private_key²  r  r   c                 óô   — t        t        d   j                  t        d   j                  d¬«      }t	        d|¬«      }| j                  |j                  «       «       | j                  |j                  |«       y )Nr}   rC  r   r  r  r  s      r   r  zTestEccKey_P224.test_public_keyÄ  r  r   c                 óÈ   — t        dd¬«      }|j                  «       }| j                  |j                  «       «       | j	                  |j
                  |j
                  «       y )NrC  r  r  r  r  s      r   r  z'TestEccKey_P224.test_public_key_derivedË  r  r   c                 ó2   — | j                  t        d„ «       y )Nc                  ó   — t        dd¬«      S )NzP-225r  r  r  r   r   r   rh   z4TestEccKey_P224.test_invalid_curve.<locals>.<lambda>Ó  r   r   r!  r5   s    r   r"  z"TestEccKey_P224.test_invalid_curveÒ  r#  r   c                 ó`   — | j                  t        d„ «       | j                  t        d„ «       y )Nc                  ó   — t        dd¬«      S )NrC  r   r  r  r   r   r   rh   z0TestEccKey_P224.test_invalid_d.<locals>.<lambda>Ö  r   r   c                  ó>   — t        dt        d   j                  ¬«      S )NrC  r}   r  r'  r   r   r   rh   z0TestEccKey_P224.test_invalid_d.<locals>.<lambda>×  r)  r   r!  r5   s    r   r*  zTestEccKey_P224.test_invalid_dÕ  r+  r   c                 ó¢  — t        j                  dd¬«      }t        j                  dd¬«      }t        j                  dd¬«      }|j                  «       }|j                  «       }|j                  «       }| j                  ||«       | j	                  ||«       | j                  ||«       | j	                  ||«       | j	                  ||«       y )Nr  rC  r-  r.  r/  r0  s          r   r6  zTestEccKey_P224.test_equalityÚ  r7  r   c                 óò   — t        j                  d¬«      }| j                  dt        |«      «       | j	                  |j
                  d«       | j	                  |j                  «       j
                  d«       y )Nr}   r   zcurve='NIST P-224'r   r9  r;  s     r   r<  z%TestEccKey_P224.test_name_consistencyì  r=  r   Nr>  r   r   r   rA  rA  °  r?  r   rA  c                   ó6   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	ÚTestEccKey_P256c                 ó  — t        dd¬«      }| j                  |j                  d«       | j                  |j	                  «       «       | j                  |j
                  j                  t        d   j                  «       | j                  |j
                  j                  t        d   j                  «       t        t        d   j                  t        d   j                  «      }t        dd|¬«      }| j                  |j                  d«       | j                  |j	                  «       «       | j                  |j
                  |«       t        dd¬«      }t        dd¬«      }| j                  t        t         dd¬	«       y )
Nr   r  r  rí   r  Ú	secp256r1Ú
prime256v1s    HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH)r   Úseed)r	   r+   r'   r    r	  r   rS   r   rÌ   rT   rÍ   r   rk   r   r
  s      r   r  z TestEccKey_P256.test_private_keyõ  s  € ä˜7 aÔ(ˆØ×Ñ˜Ÿ™ Ô"Ø�‰˜Ÿ™Ó)Ô*Ø×Ñ˜Ÿ™Ÿ™¤w¨v¡×'9Ñ'9Ô:Ø×Ñ˜Ÿ™Ÿ™¤w¨v¡×'9Ñ'9Ô:äœ ™×+Ñ+¬W°V©_×-?Ñ-?Ó@ˆÜ˜7 a¨uÔ5ˆØ×Ñ˜Ÿ™ Ô"Ø�‰˜Ÿ™Ó)Ô*Ø×Ñ˜Ÿ™ UÔ+ô ˜;¨!Ô,ˆÜ˜<¨1Ô-ˆð 	×Ñœ*¤f°FÀÐÕIr   c                 óð   — t        t        d   j                  t        d   j                  «      }t	        d|¬«      }| j                  |j                  «       «       | j                  |j                  |«       y )Nrí   r   r  r  r  s      r   r  zTestEccKey_P256.test_public_key
  sW   € äœ ™×+Ñ+¬W°V©_×-?Ñ-?Ó@ˆÜ˜7¨%Ô0ˆØ×Ñ˜Ÿ™Ó*Ô+Ø×Ñ˜Ÿ™ UÕ+r   c                 óÈ   — t        dd¬«      }|j                  «       }| j                  |j                  «       «       | j	                  |j
                  |j
                  «       y )Nr   r  r  r  r  s      r   r  z'TestEccKey_P256.test_public_key_derived  r  r   c                 ó2   — | j                  t        d„ «       y )Nc                  ó   — t        dd¬«      S )NzP-257r  r  r  r   r   r   rh   z4TestEccKey_P256.test_invalid_curve.<locals>.<lambda>  r   r   r!  r5   s    r   r"  z"TestEccKey_P256.test_invalid_curve  r#  r   c                 ó`   — | j                  t        d„ «       | j                  t        d„ «       y )Nc                  ó   — t        dd¬«      S )Nr   r   r  r  r   r   r   rh   z0TestEccKey_P256.test_invalid_d.<locals>.<lambda>  r   r   c                  ó>   — t        dt        d   j                  ¬«      S )Nr   rí   r  r'  r   r   r   rh   z0TestEccKey_P256.test_invalid_d.<locals>.<lambda>  s   € ¬f¸7ÄgÈfÁo×F[ÑF[Ô.\€ r   r!  r5   s    r   r*  zTestEccKey_P256.test_invalid_d  s$   € Ø×Ñœ*Ñ&HÔIØ×Ñœ*Ñ&\Õ]r   c                 ó¢  — t        j                  dd¬«      }t        j                  dd¬«      }t        j                  dd¬«      }|j                  «       }|j                  «       }|j                  «       }| j                  ||«       | j	                  ||«       | j                  ||«       | j	                  ||«       | j	                  ||«       y )Nr  r   r-  r.  r/  r0  s          r   r6  zTestEccKey_P256.test_equality  r7  r   c                 óò   — t        j                  d¬«      }| j                  dt        |«      «       | j	                  |j
                  d«       | j	                  |j                  «       j
                  d«       y )Nrí   r   zcurve='NIST P-256'r“   r9  r;  s     r   r<  z%TestEccKey_P256.test_name_consistency1  r=  r   Nr>  r   r   r   rP  rP  ó  s(   „ òJò*,ò:òJò^ò5ó$?r   rP  c                   ó6   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	ÚTestEccKey_P384c                 óÀ  — t         d   }t        dd¬«      }| j                  |j                  d«       | j	                  |j                  «       «       | j                  |j                  j                  |j                  «       | j                  |j                  j                  |j                  «       t        |j                  |j                  d«      }t        dd|¬«      }| j                  |j                  d«       | j	                  |j                  «       «       | j                  |j                  |«       t        dd¬«      }t        dd¬«      }t        dd¬«      }y )Nr¥   r   r  r  r  Ú	secp384r1Ú
prime384v1©r   r	   r+   r'   r    r	  r   rS   rÌ   rT   rÍ   r   )r!   r¥   r  r  s       r   r  z TestEccKey_P384.test_private_key:  óû   € ä�v‰ˆä˜7 aÔ(ˆØ×Ñ˜Ÿ™ Ô"Ø�‰˜Ÿ™Ó)Ô*Ø×Ñ˜Ÿ™Ÿ™ t§w¡wÔ/Ø×Ñ˜Ÿ™Ÿ™ t§w¡wÔ/ä˜Ÿ™ $§'¡'¨6Ó2ˆÜ˜7 a¨uÔ5ˆØ×Ñ˜Ÿ™ Ô"Ø�‰˜Ÿ™Ó)Ô*Ø×Ñ˜Ÿ™ UÔ+ô ˜6 QÔ'ˆÜ˜;¨!Ô,ˆÜ˜<¨1Ô-‰r   c                 óè   — t         d   }t        |j                  |j                  d«      }t	        d|¬«      }| j                  |j                  «       «       | j                  |j                  |«       y )Nr¥   r   r  ©	r   r   rÌ   rÍ   r	   r   r	  r+   r   )r!   r¥   r  r  s       r   r  zTestEccKey_P384.test_public_keyO  óV   € ä�v‰ˆÜ˜Ÿ™ $§'¡'¨6Ó2ˆÜ˜7¨%Ô0ˆØ×Ñ˜Ÿ™Ó*Ô+Ø×Ñ˜Ÿ™ UÕ+r   c                 óÈ   — t        dd¬«      }|j                  «       }| j                  |j                  «       «       | j	                  |j
                  |j
                  «       y )Nr   r  r  r  r  s      r   r  z'TestEccKey_P384.test_public_key_derivedW  r  r   c                 ó2   — | j                  t        d„ «       y )Nc                  ó   — t        dd¬«      S )NzP-385r  r  r  r   r   r   rh   z4TestEccKey_P384.test_invalid_curve.<locals>.<lambda>_  r   r   r!  r5   s    r   r"  z"TestEccKey_P384.test_invalid_curve^  r#  r   c                 ó`   — | j                  t        d„ «       | j                  t        d„ «       y )Nc                  ó   — t        dd¬«      S )Nr   r   r  r  r   r   r   rh   z0TestEccKey_P384.test_invalid_d.<locals>.<lambda>b  r   r   c                  ó>   — t        dt        d   j                  ¬«      S )Nr   r¥   r  r'  r   r   r   rh   z0TestEccKey_P384.test_invalid_d.<locals>.<lambda>c  r)  r   r!  r5   s    r   r*  zTestEccKey_P384.test_invalid_da  r+  r   c                 ó¢  — t        j                  dd¬«      }t        j                  dd¬«      }t        j                  dd¬«      }|j                  «       }|j                  «       }|j                  «       }| j                  ||«       | j	                  ||«       | j                  ||«       | j	                  ||«       | j	                  ||«       y )Nr  r   r-  r.  r/  r0  s          r   r6  zTestEccKey_P384.test_equalityf  r7  r   c                 óò   — t        j                  d¬«      }| j                  dt        |«      «       | j	                  |j
                  d«       | j	                  |j                  «       j
                  d«       y )Nr¥   r   zcurve='NIST P-384'r§   r9  r;  s     r   r<  z%TestEccKey_P384.test_name_consistencyx  r=  r   Nr>  r   r   r   r_  r_  8  ó'   „ ò.ò*,ò:òJòOò
5ó$?r   r_  c                   ó6   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	ÚTestEccKey_P521c                 óÀ  — t         d   }t        dd¬«      }| j                  |j                  d«       | j	                  |j                  «       «       | j                  |j                  j                  |j                  «       | j                  |j                  j                  |j                  «       t        |j                  |j                  d«      }t        dd|¬«      }| j                  |j                  d«       | j	                  |j                  «       «       | j                  |j                  |«       t        dd¬«      }t        dd¬«      }t        dd¬«      }y )Nr¸   úP-521r  r  r  Ú	secp521r1Ú
prime521v1rc  )r!   r¸   r  r  s       r   r  z TestEccKey_P521.test_private_key�  rd  r   c                 óè   — t         d   }t        |j                  |j                  d«      }t	        d|¬«      }| j                  |j                  «       «       | j                  |j                  |«       y )Nr¸   r   r  rf  )r!   r¸   r  r  s       r   r  zTestEccKey_P521.test_public_key–  rg  r   c                 óÈ   — t        dd¬«      }|j                  «       }| j                  |j                  «       «       | j	                  |j
                  |j
                  «       y )Nrt  r  r  r  r  s      r   r  z'TestEccKey_P521.test_public_key_derivedž  r  r   c                 ó2   — | j                  t        d„ «       y )Nc                  ó   — t        dd¬«      S )NzP-522r  r  r  r   r   r   rh   z4TestEccKey_P521.test_invalid_curve.<locals>.<lambda>¦  r   r   r!  r5   s    r   r"  z"TestEccKey_P521.test_invalid_curve¥  r#  r   c                 ó`   — | j                  t        d„ «       | j                  t        d„ «       y )Nc                  ó   — t        dd¬«      S )Nrt  r   r  r  r   r   r   rh   z0TestEccKey_P521.test_invalid_d.<locals>.<lambda>©  r   r   c                  ó>   — t        dt        d   j                  ¬«      S )Nrt  r¸   r  r'  r   r   r   rh   z0TestEccKey_P521.test_invalid_d.<locals>.<lambda>ª  r)  r   r!  r5   s    r   r*  zTestEccKey_P521.test_invalid_d¨  r+  r   c                 ó¢  — t        j                  dd¬«      }t        j                  dd¬«      }t        j                  dd¬«      }|j                  «       }|j                  «       }|j                  «       }| j                  ||«       | j	                  ||«       | j                  ||«       | j	                  ||«       | j	                  ||«       y )Nr  rt  r-  r.  r/  r0  s          r   r6  zTestEccKey_P521.test_equality­  r7  r   c                 óò   — t        j                  d¬«      }| j                  dt        |«      «       | j	                  |j
                  d«       | j	                  |j                  «       j
                  d«       y )Nr¸   r   zcurve='NIST P-521'rº   r9  r;  s     r   r<  z%TestEccKey_P521.test_name_consistency¿  r=  r   Nr>  r   r   r   rr  rr    rp  r   rr  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚTestEccModule_P192c                 ót  — t        j                  d¬«      }| j                  |j                  «       «       | j	                  |j
                  t        t        d   j                  t        d   j                  d«      |j                  z  d«       t        j                  d¬«       t        j                  d¬«       y )Nr  r   r0   r  r  ©r   r   r    r	  r+   r   r   r   rÌ   rÍ   r'   r;  s     r   Útest_generatez TestEccModule_P192.test_generateÈ  ó…   € ä�l‰l Ô)ˆØ�‰˜Ÿ™Ó)Ô*Ø×Ñ˜Ÿ™¤X¬g°f©o×.@Ñ.@Ü.5°f©o×.@Ñ.@Ø.5ó&7à9<¿¹ñ&?ð /5ô	6ô 	�‰˜;Õ'Ü�‰˜<Ö(r   c                 ó`  — t        j                  dd¬«      }| j                  |j                  «       «       | j	                  |j
                  t        d   j                  «       t        j                  dt        d   j                  t        d   j                  ¬«      }| j                  |j                  «       «       | j	                  |j
                  t        d   j                  «       t        j                  dd¬«       t        j                  dd¬«       t        j                  dd¬«       y )Nr  r  r  r0   ©r   r(   r)   r  r  ©r   r*   r    r	  r+   r   r   ÚGrÌ   rÍ   r   r;  s     r   Útest_constructz!TestEccModule_P192.test_constructÕ  óË   € ä�m‰m '¨QÔ/ˆØ�‰˜Ÿ™Ó)Ô*Ø×Ñ˜Ÿ™¤W¨V¡_×%6Ñ%6Ô7ä�m‰m '´7¸6±?×3EÑ3EÜ$+¨F¡O×$6Ñ$6ô8ˆà×Ñ˜Ÿ™Ó*Ô+Ø×Ñ˜Ÿ™¤W¨V¡_×%6Ñ%6Ô7ô 	�‰˜F aÕ(Ü�‰˜K¨1Õ-Ü�‰˜L¨AÖ.r   c                 ó  — t        dd¬«      }t        t        d   j                  t        d   j                  ¬«      } | j                  t
        t        j                  fddi|¤Ž  | j                  t
        t        j                  fdddœ|¤Ž y )	Né
   r.  ©r(   r)   r0   r   r  é   r  ©Údictr   rÌ   rÍ   rk   r   r   r*   ©r!   ÚcoordÚcoordGs      r   Útest_negative_constructz*TestEccModule_P192.test_negative_constructå  óp   € Ü˜R¨Ô+ˆÜœg f™o×0Ñ0¼'À&¹/×:LÑ:LÔMˆàˆ×Ñœ*¤c§m¡mÑL¸7ÐLÀeÒLØˆ×Ñœ*¤c§m¡mÐR¸7ÀaÑRÈ6ÓRr   N©r   r   r   r„  rŠ  r•  r   r   r   r�  r�  Æ  ó   „ ò)ò/ó Sr   r�  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚTestEccModule_P224c                 ót  — t        j                  d¬«      }| j                  |j                  «       «       | j	                  |j
                  t        t        d   j                  t        d   j                  d«      |j                  z  d«       t        j                  d¬«       t        j                  d¬«       y )NrC  r   r}   rD  rE  rƒ  r;  s     r   r„  z TestEccModule_P224.test_generateï  r…  r   c                 ó`  — t        j                  dd¬«      }| j                  |j                  «       «       | j	                  |j
                  t        d   j                  «       t        j                  dt        d   j                  t        d   j                  ¬«      }| j                  |j                  «       «       | j	                  |j
                  t        d   j                  «       t        j                  dd¬«       t        j                  dd¬«       t        j                  dd¬«       y )NrC  r  r  r}   r‡  rD  rE  rˆ  r;  s     r   rŠ  z!TestEccModule_P224.test_constructü  r‹  r   c                 ó  — t        dd¬«      }t        t        d   j                  t        d   j                  ¬«      } | j                  t
        t        j                  fddi|¤Ž  | j                  t
        t        j                  fdddœ|¤Ž y )	Nr�  r.  rŽ  r}   r   rC  r�  r  r�  r’  s      r   r•  z*TestEccModule_P224.test_negative_construct  r–  r   Nr—  r   r   r   rš  rš  í  r˜  r   rš  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚTestEccModule_P256c                 ór  — t        j                  d¬«      }| j                  |j                  «       «       | j	                  |j
                  t        t        d   j                  t        d   j                  «      |j                  z  d«       t        j                  d¬«       t        j                  d¬«       y )Nr   r   rí   rR  rS  rƒ  r;  s     r   r„  z TestEccModule_P256.test_generate  s‚   € ä�l‰l Ô)ˆØ�‰˜Ÿ™Ó)Ô*Ø×Ñ˜Ÿ™¤X¬g°f©o×.@Ñ.@Ü.5°f©o×.@Ñ.@ó&BØDGÇEÁEñ&Jà.4ô	6ô
 	�‰˜;Õ'Ü�‰˜<Ö(r   c                 ó`  — t        j                  dd¬«      }| j                  |j                  «       «       | j	                  |j
                  t        d   j                  «       t        j                  dt        d   j                  t        d   j                  ¬«      }| j                  |j                  «       «       | j	                  |j
                  t        d   j                  «       t        j                  dd¬«       t        j                  dd¬«       t        j                  dd¬«       y )Nr   r  r  rí   r‡  rR  rS  rˆ  r;  s     r   rŠ  z!TestEccModule_P256.test_construct"  r‹  r   c                 ó  — t        dd¬«      }t        t        d   j                  t        d   j                  ¬«      } | j                  t
        t        j                  fddi|¤Ž  | j                  t
        t        j                  fdddœ|¤Ž y )	Nr�  r.  rŽ  rí   r   r   r�  r  r�  r’  s      r   r•  z*TestEccModule_P256.test_negative_construct2  r–  r   Nr—  r   r   r   rŸ  rŸ    s   „ ò
)ò/ó Sr   rŸ  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚTestEccModule_P384c                 óh  — t         d   }t        j                  d¬«      }| j                  |j	                  «       «       | j                  |j                  t        |j                  |j                  d«      |j                  z  «       t        j                  d¬«       t        j                  d¬«       y )Nr¥   r   r   ra  rb  ©r   r   r   r    r	  r+   r   r   rÌ   rÍ   r'   ©r!   r   r  s      r   r„  z TestEccModule_P384.test_generate<  ót   € ä˜‘ˆÜ�l‰l Ô)ˆØ�‰˜Ÿ™Ó)Ô*Ø×Ñ˜Ÿ™¤X¨e¯h©h¸¿¹À&Ó%IÈCÏEÉEÑ%QÔRô 	�‰˜;Õ'Ü�‰˜<Ö(r   c                 óH  — t         d   }t        j                  dd¬«      }| j                  |j	                  «       «       | j                  |j                  t         d   j                  «       t        j                  d|j                  |j                  ¬«      }| j                  |j	                  «       «       | j                  |j                  |j                  «       t        j                  dd¬«       t        j                  dd¬«       t        j                  dd¬«       y )Nr¥   r   r  r  r‡  ra  rb  ©r   r   r*   r    r	  r+   r   r‰  rÌ   rÍ   r   r§  s      r   rŠ  z!TestEccModule_P384.test_constructG  ó¿   € ä˜‘ˆÜ�m‰m '¨QÔ/ˆØ�‰˜Ÿ™Ó)Ô*Ø×Ñ˜Ÿ™¤W¨V¡_×%6Ñ%6Ô7ä�m‰m '°5·8±8ÀUÇXÁXÔNˆØ×Ñ˜Ÿ™Ó*Ô+Ø×Ñ˜Ÿ™ U§W¡WÔ-ô 	�‰˜F aÕ(Ü�‰˜K¨1Õ-Ü�‰˜L¨AÖ.r   c                 ó  — t        dd¬«      }t        t        d   j                  t        d   j                  ¬«      } | j                  t
        t        j                  fddi|¤Ž  | j                  t
        t        j                  fdddœ|¤Ž y )	Nr�  r.  rŽ  r¥   r   r   r�  r  r�  r’  s      r   r•  z*TestEccModule_P384.test_negative_constructW  r–  r   Nr—  r   r   r   r¤  r¤  :  ó   „ ò	)ò/ó Sr   r¤  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚTestEccModule_P521c                 óh  — t         d   }t        j                  d¬«      }| j                  |j	                  «       «       | j                  |j                  t        |j                  |j                  d«      |j                  z  «       t        j                  d¬«       t        j                  d¬«       y )Nr¸   rt  r   ru  rv  r¦  r§  s      r   r„  z TestEccModule_P521.test_generatea  r¨  r   c                 óH  — t         d   }t        j                  dd¬«      }| j                  |j	                  «       «       | j                  |j                  t         d   j                  «       t        j                  d|j                  |j                  ¬«      }| j                  |j	                  «       «       | j                  |j                  |j                  «       t        j                  dd¬«       t        j                  dd¬«       t        j                  dd¬«       y )Nr¸   rt  r  r  r‡  ru  rv  rª  r§  s      r   rŠ  z!TestEccModule_P521.test_constructl  r«  r   c                 ó  — t        dd¬«      }t        t        d   j                  t        d   j                  ¬«      } | j                  t
        t        j                  fddi|¤Ž  | j                  t
        t        j                  fdddœ|¤Ž y )	Nr�  r.  rŽ  r¸   r   rt  r�  r  r�  r’  s      r   r•  z*TestEccModule_P521.test_negative_construct|  r–  r   Nr—  r   r   r   r¯  r¯  _  r­  r   r¯  c                 óþ  — g }|t        t        «      z  }|t        t        «      z  }|t        t        «      z  }|t        t        «      z  }|t        t
        «      z  }|t        t        «      z  }|t        t        «      z  }|t        t        «      z  }|t        t        «      z  }|t        t        «      z  }|t        t        «      z  }|t        t        «      z  }|t        t        «      z  }|t        t        «      z  }|t        t        «      z  }|t        t         «      z  }|t        t"        «      z  }|t        t$        «      z  }|t        t&        «      z  }|t        t(        «      z  }|t        t*        «      z  }|S rA   )r   r   r/   r|   r‘   r¤   r·   rÉ   ræ   rì   ró   rù   rÿ   rA  rP  r_  rr  r�  rš  rŸ  r¤  r¯  )ÚconfigÚtestss     r   Ú	get_testsr¶  „  sV  € Ø€EØ	Œ_œ\Ó*Ñ*€EØ	Œ_Ô3Ó4Ñ4€EØ	Œ_Ô3Ó4Ñ4€EØ	Œ_Ô3Ó4Ñ4€EØ	Œ_Ô3Ó4Ñ4€EØ	Œ_Ô3Ó4Ñ4€EØ	Œ_Ô2Ó3Ñ3€EØ	Œ_Ô2Ó3Ñ3€EØ	Œ_Ô2Ó3Ñ3€EØ	Œ_Ô2Ó3Ñ3€EØ	Œ_Ô2Ó3Ñ3€EØ	Œ_œ_Ó-Ñ-€EØ	Œ_œ_Ó-Ñ-€EØ	Œ_œ_Ó-Ñ-€EØ	Œ_œ_Ó-Ñ-€EØ	Œ_œ_Ó-Ñ-€EØ	Œ_Ô/Ó0Ñ0€EØ	Œ_Ô/Ó0Ñ0€EØ	Œ_Ô/Ó0Ñ0€EØ	Œ_Ô/Ó0Ñ0€EØ	Œ_Ô/Ó0Ñ0€EØ€Lr   Ú__main__c                  ó<   — t        j                  t        «       «      S rA   )ÚunittestÚ	TestSuiter¶  r   r   r   rh   rh   Ÿ  s   € ”H×&Ñ&¤y£{Ó3€ r   Úsuite)ÚdefaultTest)1r¹  Úbinasciir   ÚCrypto.SelfTest.st_commonr   ÚCrypto.SelfTest.loaderr   ÚCrypto.PublicKeyr   ÚCrypto.PublicKey.ECCr   r   r	   ÚCrypto.Math.Numbersr
   ÚTestCaser   r/   r|   r‘   r¤   r·   rÉ   Útv_paiÚtvrÕ   rS   rT   rã   ÚsetattrÚcountræ   rì   ró   rù   rÿ   rA  rP  r_  rr  r�  rš  rŸ  r¤  r¯  r¶  r   r»  Úmainr   r   r   ú<module>rÉ     s4  ðó> Ý å 5Ý 4å  ß :Ñ :å 'ôA�8×$Ñ$ô AôBL:˜X×.Ñ.ô L:ô^L:˜X×.Ñ.ô L:ô^J:˜X×.Ñ.ô J:ôZC:˜X×.Ñ.ô C:ôLD:˜X×.Ñ.ô D:ôN2˜H×-Ñ-ô 2ñ 
Ð/Ø4Ø<Ù*Ù.Ù.ñ0ó
1ò 
7ð
 57ð ð ò C€BØ Ÿd™d b§d¡d¨b¯d©dó &ñ Ð! 9¨r¯x©xÑ#7¸ÕBðCô2˜H×-Ñ-ô 2ñ 
Ð/Ø4Ø<Ù*Ù.Ù.ñ0ó
1ò 
7ð
 57ð ð ò C€BØ Ÿd™d b§d¡d¨b¯d©dó &ñ Ð! 9¨r¯x©xÑ#7¸ÕBðCô2˜H×-Ñ-ô 2ñ 
Ð/Ø4Ø<Ù*Ù.Ù.ñ0ó
1ò 
7ð
 57ð ð ò C€BØ Ÿd™d b§d¡d¨b¯d©dó &ñ Ð! 9¨r¯x©xÑ#7¸ÕBðCô2˜H×-Ñ-ô 2ñ 
Ð/Ø4Ø<Ù*Ù.Ù.ñ0ó
1ò 
7ð
 57ð ð ò C€BØ Ÿd™d b§d¡d¨b¯d©dó &ñ Ð! 9¨r¯x©xÑ#7¸ÕBðCô2˜H×-Ñ-ô 2ñ 
Ð/Ø4Ø<Ù*Ù.Ù.ñ0ó
1ò 
7ð
 57ð ð ò C€BØ Ÿd™d b§d¡d¨b¯d©dó &ñ Ð! 9¨r¯x©xÑ#7¸ÕBðCô@?�h×'Ñ'ô @?ôF@?�h×'Ñ'ô @?ôFB?�h×'Ñ'ô B?ôJD?�h×'Ñ'ô D?ôND?�h×'Ñ'ô D?ôN$S˜×*Ñ*ô $SôN$S˜×*Ñ*ô $SôN#S˜×*Ñ*ô #SôL"S˜×*Ñ*ô "SôJ"S˜×*Ñ*ô "SðJ ó ð4 ˆzÒÙ3€EØ€H‡M�M˜gÖ&ð r   