o
    ƒªRh¶P  ã                   @   s   d dl Z d dlZzd dlZW n ey   d dlZY nw d dlZd dlZd dlZd dlZd dl	Z	d dl
mZ d dlmZmZmZmZ ddlmZmZmZ ddlmZmZmZmZmZmZmZ ddlmZ ddl m!Z! i Z"ej#dkrud	e"d
< i Z$dej%v rde$d< nde$d< G dd„ dej&ƒZ'dS )é    N)ÚgivenÚassumeÚsettingsÚexampleé   )ÚCurveFpÚPointJacobiÚINFINITY)Úgenerator_256Ú	curve_256Úgenerator_224Úgenerator_brainpoolp160r1Úcurve_brainpoolp160r1Úgenerator_112r2Úcurve_112r2)Úinverse_mod)Ú	randrange)é   é   iˆ  Údeadlinez--fastr   Úmax_examplesé
   c                   @   sÂ  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zed}i e¤Žeejd/ee  !¡ d0 ƒd1ƒd2d3„ ƒƒZ"ed}i e¤Žeejd/ee  !¡ d0 ƒd1ƒe#d/ƒe#ee  !¡ ƒƒd4d5„ ƒƒƒƒZ$ed}i e¤Žeejd0ee  !¡ d0 ƒd1ejd0ee  !¡ d0 ƒd1ƒe#d6d6ƒd7d8„ ƒƒƒZ%ed}i e¤Žeejd0ee  !¡ d0 ƒd1ejd0ee  !¡ d0 ƒd1ejd0ee& '¡ d0 ƒd1ƒd9d:„ ƒƒZ(e)j*j+ed}i e¤Žeejd0ee  !¡ d0 ƒd1ejd0ee  !¡ d0 ƒd1ejd0ee& '¡ d0 ƒd1ƒe#d0d0d0ƒe#d6d6d6ƒe#d;ee  !¡ d; ƒd0ƒe#d;ee  !¡ d; ƒd6ƒd<d=„ ƒƒƒƒƒƒƒZ,d>d?„ Z-e)j*j+ed}i e¤Žeejd0ee  !¡ d0 ƒd1ejd0ee  !¡ d0 ƒd1ej.ejd0ee& '¡ d0 ƒd1d;d;d@dAƒe#d;d;d;d0gƒe#d;d;d;d6gƒe#d;ee  !¡ d; ƒd;d6gƒe#d;ee  !¡ d; ƒd;d0gƒdBdC„ ƒƒƒƒƒƒƒZ/dDdE„ Z0dFdG„ Z1dHdI„ Z2dJdK„ Z3dLdM„ Z4dNdO„ Z5dPdQ„ Z6dRdS„ Z7dTdU„ Z8dVdW„ Z9dXdY„ Z:dZd[„ Z;d\d]„ Z<d^d_„ Z=d`da„ Z>dbdc„ Z?ddde„ Z@dfdg„ ZAdhdi„ ZBdjdk„ ZCdldm„ ZDdndo„ ZEdpdq„ ZFe)j*j+ed}i eG¤Že)j*jHeI J¡ drkdsdteejd0dud1ƒdvdw„ ƒƒƒƒZKe)j*j+e)j*jHeI L¡ dxkpVeI J¡ drkdydtdzd{„ ƒƒZMd|S )~Ú
TestJacobic                 C   sj   t ƒ }d}d}d}d}t|||||ƒ}|  | ¡ |¡ |  | ¡ |¡ |  | ¡ |¡ |  | ¡ |¡ d S )Nr   é   r   é   )Úobjectr   ÚassertEqualÚorderÚassertIsÚcurveÚxÚy)Úselfr   r    r!   Úzr   Úpj© r%   úS/home/air/sanwanet/backup_V2/venv/lib/python3.10/site-packages/ecdsa/test_jacobi.pyÚtest___init__,   s   zTestJacobi.test___init__c                 C   sL   t  t¡}t  t¡}|  t¡ ||  W d   ƒ d S 1 sw   Y  d S ©N)r   Úfrom_affiner
   r   ÚassertRaisesÚ
ValueError©r"   Úp_aÚp_br%   r%   r&   Útest_add_with_different_curves9   s
   


"ÿz)TestJacobi.test_add_with_different_curvesc                 C   s   |   tt¡ d S r(   )ÚassertNotEqualr
   r   )r"   r%   r%   r&   Útest_compare_different_curves@   s   z(TestJacobi.test_compare_different_curvesc                 C   ó   t  t¡}|  |d¡ d S )NÚvalue©r   r)   r
   r0   ©r"   r$   r%   r%   r&   Útest_equality_with_non_pointC   ó   
z'TestJacobi.test_equality_with_non_pointc                 C   s"   t  t¡}| ¡ }|  t|¡ d S r(   ©r   r)   r
   Ú	to_affiner   ©r"   r$   Úpwr%   r%   r&   Útest_conversionH   s   
zTestJacobi.test_conversionc                 C   sF   t  t¡}t ¡ }| ¡ }|  | ¡ | ¡ ¡ |  | ¡ | ¡ ¡ d S r(   )r   r)   r
   Údoubler   r    r!   r:   r%   r%   r&   Útest_single_doubleN   ó
   
zTestJacobi.test_single_doublec                 C   s&   t tdddƒ}| ¡ }|  |t¡ d S ©Nr   r   )r   r   r=   r   r	   r5   r%   r%   r&   Útest_double_with_zero_pointW   ó   z&TestJacobi.test_double_with_zero_pointc                 C   ó*   t tdt ¡ dƒ}| ¡ }|  |t¡ d S r@   ©r   r   Úpr=   r   r	   r5   r%   r%   r&   Ú&test_double_with_zero_equivalent_point^   ó   z1TestJacobi.test_double_with_zero_equivalent_pointc                 C   rC   )Nr   r   rD   r5   r%   r%   r&   Ú.test_double_with_zero_equivalent_point_non_1_ze   rG   z9TestJacobi.test_double_with_zero_equivalent_point_non_1_zc                 C   s.   t  t¡}| ¡ }|  ||¡ |  ||¡ d S r(   r8   ©r"   r$   Úpar%   r%   r&   Útest_compare_with_affine_pointl   s   
z)TestJacobi.test_compare_with_affine_pointc                 C   s&   t tdddƒ}| ¡ }|  |t¡ d S r@   )r   r   r9   r   r	   rI   r%   r%   r&   Útest_to_affine_with_zero_points   rB   z)TestJacobi.test_to_affine_with_zero_pointc                 C   s.   t  t¡}| ¡ }|| }|  || ¡ ¡ d S r(   ©r   r)   r
   r9   r   r=   ©r"   r$   rJ   Úsr%   r%   r&   Útest_add_with_affine_pointz   ó   
z%TestJacobi.test_add_with_affine_pointc                 C   s.   t  t¡}| ¡ }|| }|  || ¡ ¡ d S r(   rM   rN   r%   r%   r&   Útest_radd_with_affine_point‚   rQ   z&TestJacobi.test_radd_with_affine_pointc                 C   s"   t  t¡}|t }|  ||¡ d S r(   )r   r)   r
   r	   r   )r"   r$   rO   r%   r%   r&   Útest_add_with_infinityŠ   ó   
z!TestJacobi.test_add_with_infinityc                 C   s4   t  t¡ ¡ }t tdddƒ}|| }|  ||¡ d S r@   )r   r)   r
   r9   r   r   )r"   rJ   r$   rO   r%   r%   r&   Útest_add_zero_point_to_affine‘   s   z(TestJacobi.test_add_zero_point_to_affinec                 C   s"   t  t¡}|d }|  |t¡ d S )Nr   )r   r)   r
   r   r	   r5   r%   r%   r&   Útest_multiply_by_zero™   rT   z TestJacobi.test_multiply_by_zeroc                 C   s&   t tdddƒ}|d }|  |t¡ d S r@   )r   r   r   r	   r5   r%   r%   r&   Útest_zero_point_multiply_by_one    rB   z*TestJacobi.test_zero_point_multiply_by_onec                 C   óF   t  t¡}td }|d }|  | ¡ | ¡ ¡ |  | ¡ | ¡ ¡ d S ©Nr   ©r   r)   r
   r   r    r!   r:   r%   r%   r&   Útest_multiply_by_one§   r?   zTestJacobi.test_multiply_by_onec                 C   rX   ©Nr   rZ   r:   r%   r%   r&   Útest_multiply_by_two°   r?   zTestJacobi.test_multiply_by_twoc                 C   s*   t  t¡}td }d| }|  ||¡ d S r\   ©r   r)   r
   r   r:   r%   r%   r&   Útest_rmul_by_two¹   s   
zTestJacobi.test_rmul_by_twoc                 C   s   t  t¡}|  |t¡ d S r(   )r   r)   r
   r0   r	   r5   r%   r%   r&   Ú#test_compare_non_zero_with_infinityÁ   r7   z.TestJacobi.test_compare_non_zero_with_infinityc                 C   s   t tdddƒ}|  |t¡ d S r@   )r   r   r   r	   r5   r%   r%   r&   Ú%test_compare_zero_point_with_infinityÆ   s   z0TestJacobi.test_compare_zero_point_with_infinityc                 C   s*   t  t¡}| ¡ }|d }|  ||¡ d S r\   )r   r)   r
   r=   r   )r"   r$   ÚdblÚmlplr%   r%   r&   Ú!test_compare_double_with_multiplyË   s   
z,TestJacobi.test_compare_double_with_multiplyr   r   )Ú	min_valueÚ	max_valuec                 C   sR   t  t¡}| ¡ | }|| }|  | ¡ | ¡ f| ¡ | ¡ f¡ |  ||¡ d S r(   )r   r)   r   r9   r   r    r!   )r"   Úmulr$   r;   r%   r%   r&   Útest_multiplicationsÒ   s
   
$zTestJacobi.test_multiplicationsc                 C   s:   t }|  |j¡ t t ¡}|| }|| }|  ||¡ d S r(   )r   Ú
assertTrueÚ_PointJacobi__precomputer   r)   r   )r"   rg   Úprecompr$   ÚaÚbr%   r%   r&   Útest_precomputeá   s   	
zTestJacobi.test_precomputer   c                 C   sF   t  t¡}t  || ¡}t  || ¡}|| }|  ||||  ¡ d S r(   )r   r)   r   r   )r"   Úa_mulÚb_mulÚj_grl   rm   Úcr%   r%   r&   Útest_add_scaled_pointsó   s
   
z!TestJacobi.test_add_scaled_pointsc           
      C   s’   t  t¡}t  || ¡}t  || ¡}t ¡ }tt||ƒƒ || | }t t| ¡ | | | ¡ | | | |ƒ}|| }	|  	|	|||  ¡ d S r(   ©
r   r)   r   r   rE   r   r   r    r!   r   ©
r"   ro   rp   Únew_zrq   rl   rm   rE   Únew_zzrr   r%   r%   r&   Útest_add_one_scaled_point  s   
üz$TestJacobi.test_add_one_scaled_pointr   c           
      C   s¼   t  t¡}t  || ¡}t  || ¡}t ¡ }tt||ƒƒ || | }t t| ¡ | | | ¡ | | | |ƒ}t t| ¡ | | | ¡ | | | |ƒ}|| }	|  	|	|||  ¡ d S r(   rt   ru   r%   r%   r&   Útest_add_same_scale_points&  s(   
üüz%TestJacobi.test_add_same_scale_pointsc                 C   s˜   t }t ¡ }|d }| ¡  d}tt| ¡ |d  | | ¡ |d  | |ƒ}tt| ¡ |d  | | ¡ |d  | |ƒ}|| }|  ||| ¡ d S )Né   é   r   r   ©r   r   rE   Úscaler   r    r!   r   )r"   rq   rE   rl   Úz1r    r!   rr   r%   r%   r&   Ú!test_add_same_scale_points_staticQ  s&   üüz,TestJacobi.test_add_same_scale_points_staticT)Úmin_sizeÚmax_sizeÚuniquec                 C   sþ   t  t¡}t  || ¡}t  || ¡}t ¡ }tt|d |ƒƒ tt|d |ƒƒ |d |d  | }|d |d  | }	t t| ¡ | | | ¡ | |d  | |d ƒ}t t| ¡ |	 | | ¡ |	 |d  | |d ƒ}|| }
|  	|
|||  ¡ d S r@   rt   )r"   ro   rp   rv   rq   rl   rm   rE   Únew_zz0Únew_zz1rr   r%   r%   r&   Útest_add_different_scale_pointsh  s,   
üüz*TestJacobi.test_add_different_scale_pointsc           	      C   sœ   t }t ¡ }|d }| ¡  d}tt| ¡ |d  | | ¡ |d  | |ƒ}d}tt| ¡ |d  | | ¡ |d  | |ƒ}|| }|  ||| ¡ d S )Nrz   r{   r   r   é   r|   )	r"   rq   rE   rl   r~   r    Úz2r!   rr   r%   r%   r&   Ú&test_add_different_scale_points_staticœ  s(   üüz1TestJacobi.test_add_different_scale_points_staticc           	      C   s    t }t ¡ }|d }| ¡  |d }d}tt| ¡ |d  | | ¡ |d  | |ƒ}tt| ¡ |d  | | ¡ |d  | |ƒ}|| }|  ||| ¡ d S )Nrz   é   r{   r   r   r|   )	r"   rq   rE   rl   rm   r#   r    r!   rr   r%   r%   r&   Ú+test_add_different_points_same_scale_static´  s(   üüz6TestJacobi.test_add_different_points_same_scale_staticc                 C   s€   t }t ¡ }d}|| }| ¡  tt| ¡ |d  | | ¡ |d  | |ƒ}tt| ¡ | ¡ dƒ}|| }|  ||| ¡ d S )Nrz   r   r   r   )r   r   rE   r}   r   r    r!   r   )r"   rq   rE   r#   rl   r    r!   rr   r%   r%   r&   Ú5test_add_same_point_different_scale_second_z_1_staticÌ  s&   üüz@TestJacobi.test_add_same_point_different_scale_second_z_1_staticc                 C   s^   t }d}|| }| ¡  | }tt| ¡ | ¡ dƒ}tt| ¡ | ¡ dƒ}|  t|| ¡ d S )Nrz   r   )r   r}   r   r   r    r!   r   r	   )r"   rq   r#   rl   rm   r    r!   r%   r%   r&   Útest_add_to_infinity_staticä  s$   üüz&TestJacobi.test_add_to_infinity_staticc                 C   s&   t  t¡}|  |d || | ¡ d S )Nr   r^   ©r"   rq   r%   r%   r&   Útest_add_point_3_timesü  s   
z!TestJacobi.test_add_point_3_timesc                 C   s.   t tt ¡ t ¡ dƒ}|  |t ¡  t¡ d S rY   )r   r   r
   r    r!   r   r   r	   r   r%   r%   r&   Útest_mul_without_order  s   z!TestJacobi.test_mul_without_orderc                 C   s$   t  t¡}|  || dtd¡¡ d S rY   ©r   r)   r
   r   Úmul_addr	   r   r%   r%   r&   Útest_mul_add_inf  s   
zTestJacobi.test_mul_add_infc                 C   s(   t  t¡}|  |d | d|d¡¡ d S )Nr   r   ©r   r)   r
   r   r‘   r   r%   r%   r&   Útest_mul_add_same  s   
zTestJacobi.test_mul_add_samec                 C   ój   t  td¡}t  |d d¡}|  |d || ¡ |  |d |d |d  ¡ |  |d | d|d¡¡ d S )NTéÿ   é   iþ  é   r   ©r   r)   r   r   r‘   ©r"   rq   rm   r%   r%   r&   Útest_mul_add_precompute  s
   z"TestJacobi.test_mul_add_precomputec                 C   r•   )NTr–   r—   éþð é ÿ  éðð  r™   rš   r%   r%   r&   Útest_mul_add_precompute_large  s   ÿÿz(TestJacobi.test_mul_add_precompute_largec                 C   s0   t  t¡}|d }| d|d¡}|  ||¡ d S )Nr   r   r   )r   r)   r
   r‘   r   )r"   rq   rl   rm   r%   r%   r&   Útest_mul_add_to_mul$  s   
zTestJacobi.test_mul_add_to_mulc                 C   s0   t  t¡}|d }|  | d|d¡|d ¡ d S )Nr   r   r   r“   )r"   rq   Úw_ar%   r%   r&   Útest_mul_add_differnt,  s   
z TestJacobi.test_mul_add_differntc                 C   s@   t  t¡}|d }|d }|  | d|d¡|d |d  ¡ d S )Nr   r   r   r“   )r"   rq   r¡   Úw_br%   r%   r&   Útest_mul_add_slightly_different3  s   
&z*TestJacobi.test_mul_add_slightly_differentc                 C   sH   t  t¡}td }td }|d }| d|d¡}|  | ¡ || ¡ d S )Nr–   i€  é¨   éð   )r   r)   r
   r‘   r   r9   )r"   rq   r¡   r£   Új_bÚretr%   r%   r&   Útest_mul_add;  s   
zTestJacobi.test_mul_addc                 C   sf   t  t¡}t  |d ¡}|  |d || ¡ |  |d |d |d  ¡ |  |d | d|d¡¡ d S )Nr–   r—   rœ   r   rž   r“   rš   r%   r%   r&   Útest_mul_add_largeF  s   
ÿÿzTestJacobi.test_mul_add_largec                 C   sB   t  t¡}t ¡ }t  td ¡}|  | |d ||d ¡t¡ d S )Nr—   )r   r)   r
   r   r   r‘   r	   )r"   rq   r   rm   r%   r%   r&   Ú$test_mul_add_with_infinity_as_resultR  s   
"z/TestJacobi.test_mul_add_with_infinity_as_resultc                 C   sf   t tt ¡ t ¡ dƒ}t ¡ }td }| ¡  t t| ¡ | ¡ dƒ}|  | |d ||d ¡t	¡ d S )Nr   é"   )
r   r   r
   r    r!   r   r}   r   r‘   r	   )r"   rq   r   r£   rm   r%   r%   r&   Útest_mul_add_without_order[  s   "z%TestJacobi.test_mul_add_without_orderc                 C   s2   t  td ¡}d|  }|  | d|d¡t¡ d S )Né   r   r   r   )r"   rq   Údbl_negr%   r%   r&   Ú,test_mul_add_with_doubled_negation_of_itselfg  s   
z7TestJacobi.test_mul_add_with_doubled_negation_of_itselfc                 C   sH   t tddddƒddddd}t tddddƒddddd}|  ||¡ d S ©Né   r   r   r   ©r   r    r!   r#   r   )r   r   r   )r"   Úpj1Úpj2r%   r%   r&   Útest_equalityn  s   zTestJacobi.test_equalityc                 C   r2   )Nr‰   r4   r   r%   r%   r&   Ú!test_equality_with_invalid_objects  r7   z,TestJacobi.test_equality_with_invalid_objectc                 C   s$   t  t¡}t  t¡}|  ||¡ d S r(   )r   r)   r
   r   r0   r,   r%   r%   r&   Útest_equality_with_wrong_curvesx  s   

z*TestJacobi.test_equality_with_wrong_curvesc              	   C   sN   t tddddƒddddd}| ddddddd¡\}}}|  |||fd¡ d S )	Nr²   r   r   r   r³   r˜   r   )r   r   r   )r   r   Ú_addr   )r"   r´   r    r!   r#   r%   r%   r&   Útest_add_with_point_at_infinity~  s   z*TestJacobi.test_add_with_point_at_infinityc                 C   s8   t tddddƒddddd}|  t t |¡¡|¡ d S r±   )r   r   r   ÚpickleÚloadsÚdumpsr5   r%   r%   r&   Útest_pickle„  s   zTestJacobi.test_pickleÚPyPyz!threading on PyPy breaks coverage)Úreasonr   c                 C   s¬   t d  t }t| ¡ | ¡ | ¡ d| ¡ dƒ}|  |jg ¡ dd„ }g }t|ƒD ]}| 	t
j||fd¡ q(|D ]}| ¡  q8||ƒ |D ]}| ¡  qE|  |jt j¡ d S )Nr   r   Tc                 S   ó&   |   ¡ }tdƒD ]}| t|ƒ  qd S )Nr   ©r   Úranger   ©Ú	generatorr   Ú_r%   r%   r&   Úrunner™  ó   ÿz.TestJacobi.test_multithreading.<locals>.runner©ÚtargetÚargs)r   r   r   r    r!   r   r   rj   rÃ   ÚappendÚ	threadingÚThreadÚstartÚjoin)r"   Ú
thread_numÚgenrÇ   ÚthreadsrÆ   Útr%   r%   r&   Útest_multithreadingˆ  s"   	"

þzTestJacobi.test_multithreadingÚWindowszFthere are no signals on Windows, and threading breaks coverage on PyPyc                 C   sD  d}t d  t }t| ¡ | ¡ | ¡ d| ¡ dƒ}|  |jg ¡ dd„ }dd„ }g }t|ƒD ]}| 	t
j||fd	¡ q.t
 ¡ }| ¡  t
 ¡ }| ¡  t
 ¡ }	|	 ¡  | 	t
j||||	fd	¡ |D ]}
|
 ¡  qc|  t¡ | ¡  | ¡  ||ƒ |	 ¡  W d   ƒ n1 sŠw   Y  |D ]}
|
 ¡  q‘|  |jt j¡ d S )
Nr   r   r   Tc                 S   rÁ   )Né2   rÂ   rÄ   r%   r%   r&   rÇ   Á  rÈ   z>TestJacobi.test_multithreading_with_interrupts.<locals>.runnerc                 S   s.   |   ¡  | ¡  t t ¡ tj¡ |  ¡  d S r(   )ÚreleaseÚacquireÚosÚkillÚgetpidÚsignalÚSIGINT)Úbarrier_startÚbarrier_endÚ	lock_exitr%   r%   r&   ÚinterrupterÆ  s   zCTestJacobi.test_multithreading_with_interrupts.<locals>.interrupterrÉ   )r   r   r   r    r!   r   r   rj   rÃ   rÌ   rÍ   rÎ   ÚLockrÙ   rÏ   r*   ÚKeyboardInterruptrØ   rÐ   )r"   rÑ   rÒ   rÇ   râ   rÓ   rÆ   rß   rà   rá   rÔ   r%   r%   r&   Ú#test_multithreading_with_interrupts¯  sH   "þÿ

ù	
þz.TestJacobi.test_multithreading_with_interruptsNr%   )NÚ__name__Ú
__module__Ú__qualname__r'   r/   r1   r6   r<   r>   rA   rF   rH   rK   rL   rP   rR   rS   rU   rV   rW   r[   r]   r_   r`   ra   rd   r   ÚSLOW_SETTINGSr   ÚstÚintegersÚintr   r   rh   r   rn   rs   r   rE   rx   ÚpytestÚmarkÚslowry   r   Úlistsr…   rˆ   rŠ   r‹   rŒ   rŽ   r   r’   r”   r›   rŸ   r    r¢   r¤   r©   rª   r«   r­   r°   r¶   r·   r¸   rº   r¾   ÚNO_OLD_SETTINGSÚskipifÚplatformÚpython_implementationrÕ   Úsystemrå   r%   r%   r%   r&   r   +   s   			ÿÿ	ÿÿ
ÿÿü	ÿÿù	ÿÿù
	
ÿÿÿúù	
þ 
ýr   )(r»   ÚsysÚ	unittest2ÚunittestÚImportErrorrÚ   rÝ   rí   rÍ   ró   Úhypothesis.strategiesÚ
strategiesrê   Ú
hypothesisr   r   r   r   Úellipticcurver   r   r	   Úecdsar
   r   r   r   r   r   r   Únumbertheoryr   Úutilr   rñ   Úversion_inforé   ÚargvÚTestCaser   r%   r%   r%   r&   Ú<module>   s4    ÿ$	


