a
    _Émg¶P  ã                   @   s"  d dl Z d dlZzd dlZW n ey6   d dlZY n0 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rêd	e"d
< i Z$dej%v rd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   Z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f i e¤Žeejd/ee  !¡ d0 ƒd1ƒd2d3„ ƒƒZ"ef i e¤Žeejd/ee  !¡ d0 ƒd1ƒe#d/ƒe#ee  !¡ ƒƒd4d5„ ƒƒƒƒZ$ef i e¤Žeejd0ee  !¡ d0 ƒd1ejd0ee  !¡ d0 ƒd1ƒe#d6d6ƒd7d8„ ƒƒƒZ%ef 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f 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f 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f i eG¤Že)j*jHeI J¡ drkdsdteejd0dud1ƒdvdw„ ƒƒƒƒZKe)j*j+e)j*jHeI L¡ dxkp¬eI 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$   úH/var/www/html/idle/venv/lib/python3.9/site-packages/ecdsa/test_jacobi.pyÚtest___init__,   s    zTestJacobi.test___init__c                 C   sJ   t  t¡}t  t¡}|  t¡ ||  W d   ƒ n1 s<0    Y  d S ©N)r   Úfrom_affiner
   r   ÚassertRaisesÚ
ValueError©r!   Zp_aZ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   s   t  t¡}|  |d¡ d S )NÚvalue©r   r(   r
   r-   ©r!   r#   r$   r$   r%   Útest_equality_with_non_pointC   s    
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    r5   r$   r$   r%   Útest_single_doubleN   s
    
zTestJacobi.test_single_doublec                 C   s&   t tdddƒ}| ¡ }|  |t¡ d S ©Nr   r   )r   r   r8   r   r	   r1   r$   r$   r%   Útest_double_with_zero_pointW   s    z&TestJacobi.test_double_with_zero_pointc                 C   s*   t tdt ¡ dƒ}| ¡ }|  |t¡ d S r:   ©r   r   Úpr8   r   r	   r1   r$   r$   r%   Ú&test_double_with_zero_equivalent_point^   s    z1TestJacobi.test_double_with_zero_equivalent_pointc                 C   s*   t tdt ¡ dƒ}| ¡ }|  |t¡ d S )Nr   r   r<   r1   r$   r$   r%   Ú.test_double_with_zero_equivalent_point_non_1_ze   s    z9TestJacobi.test_double_with_zero_equivalent_point_non_1_zc                 C   s.   t  t¡}| ¡ }|  ||¡ |  ||¡ d S r'   r3   ©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   r4   r   r	   r@   r$   r$   r%   Útest_to_affine_with_zero_points   s    z)TestJacobi.test_to_affine_with_zero_pointc                 C   s.   t  t¡}| ¡ }|| }|  || ¡ ¡ d S r'   ©r   r(   r
   r4   r   r8   ©r!   r#   rA   Úsr$   r$   r%   Útest_add_with_affine_pointz   s    
z%TestJacobi.test_add_with_affine_pointc                 C   s.   t  t¡}| ¡ }|| }|  || ¡ ¡ d S r'   rD   rE   r$   r$   r%   Útest_radd_with_affine_point‚   s    
z&TestJacobi.test_radd_with_affine_pointc                 C   s"   t  t¡}|t }|  ||¡ d S r'   )r   r(   r
   r	   r   )r!   r#   rF   r$   r$   r%   Útest_add_with_infinityŠ   s    
z!TestJacobi.test_add_with_infinityc                 C   s4   t  t¡ ¡ }t tdddƒ}|| }|  ||¡ d S r:   )r   r(   r
   r4   r   r   )r!   rA   r#   rF   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	   r1   r$   r$   r%   Útest_multiply_by_zero™   s    
z TestJacobi.test_multiply_by_zeroc                 C   s&   t tdddƒ}|d }|  |t¡ d S r:   )r   r   r   r	   r1   r$   r$   r%   Útest_zero_point_multiply_by_one    s    z*TestJacobi.test_zero_point_multiply_by_onec                 C   sF   t  t¡}td }|d }|  | ¡ | ¡ ¡ |  | ¡ | ¡ ¡ d S ©Nr   ©r   r(   r
   r   r   r    r5   r$   r$   r%   Útest_multiply_by_one§   s
    
zTestJacobi.test_multiply_by_onec                 C   sF   t  t¡}td }|d }|  | ¡ | ¡ ¡ |  | ¡ | ¡ ¡ d S ©Nr   rN   r5   r$   r$   r%   Útest_multiply_by_two°   s
    
zTestJacobi.test_multiply_by_twoc                 C   s*   t  t¡}td }d| }|  ||¡ d S rP   ©r   r(   r
   r   r5   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
   r-   r	   r1   r$   r$   r%   Ú#test_compare_non_zero_with_infinityÁ   s    
z.TestJacobi.test_compare_non_zero_with_infinityc                 C   s   t tdddƒ}|  |t¡ d S r:   )r   r   r   r	   r1   r$   r$   r%   Ú%test_compare_zero_point_with_infinityÆ   s    z0TestJacobi.test_compare_zero_point_with_infinityc                 C   s*   t  t¡}| ¡ }|d }|  ||¡ d S rP   )r   r(   r
   r8   r   )r!   r#   ZdblZmlplr$   r$   r%   Ú!test_compare_double_with_multiplyË   s    
z,TestJacobi.test_compare_double_with_multiplyr   r   )Z	min_valueZ	max_valuec                 C   sR   t  t¡}| ¡ | }|| }|  | ¡ | ¡ f| ¡ | ¡ f¡ |  ||¡ d S r'   )r   r(   r   r4   r   r   r    )r!   Úmulr#   r6   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!   rW   Z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_gr[   r\   Ú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   r=   r   r   r   r    r   ©
r!   r^   r_   Únew_zr`   r[   r\   r=   Znew_zzra   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'   rc   rd   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   r=   Úscaler   r   r    r   )r!   r`   r=   r[   Úz1r   r    ra   r$   r$   r%   Ú!test_add_same_scale_points_staticQ  s&    üüz,TestJacobi.test_add_same_scale_points_staticT)Z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:   rc   )r!   r^   r_   re   r`   r[   r\   r=   Znew_zz0Znew_zz1ra   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 )Nrh   ri   r   r   é   rj   )	r!   r`   r=   r[   rl   r   Zz2r    ra   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 )Nrh   é   ri   r   r   rj   )	r!   r`   r=   r[   r\   r"   r   r    ra   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 )Nrh   r   r   r   )r   r   r=   rk   r   r   r    r   )r!   r`   r=   r"   r[   r   r    ra   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 )Nrh   r   )r   rk   r   r   r   r    r   r	   )r!   r`   r"   r[   r\   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   rR   ©r!   r`   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 rM   )r   r   r
   r   r    r   r   r	   rw   r$   r$   r%   Útest_mul_without_order  s    z!TestJacobi.test_mul_without_orderc                 C   s$   t  t¡}|  || dtd¡¡ d S rM   ©r   r(   r
   r   Úmul_addr	   rw   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{   rw   r$   r$   r%   Útest_mul_add_same  s    
zTestJacobi.test_mul_add_samec                 C   sj   t  td¡}t  |d d¡}|  |d || ¡ |  |d |d |d  ¡ |  |d | d|d¡¡ d S )NTéÿ   é   iþ  é   r   ©r   r(   r   r   r{   ©r!   r`   r\   r$   r$   r%   Útest_mul_add_precompute  s
    z"TestJacobi.test_mul_add_precomputec                 C   sj   t  td¡}t  |d d¡}|  |d || ¡ |  |d |d |d  ¡ |  |d | d|d¡¡ d S )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!   r`   r[   r\   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!   r`   Ú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!   r`   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   r4   )r!   r`   rŠ   rŒ   Z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!   r`   r   r\   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   rk   r   r{   r	   )r!   r`   r   rŒ   r\   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   rz   )r!   r`   Z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!   Úpj1Zpj2r$   r$   r%   Útest_equalityn  s    zTestJacobi.test_equalityc                 C   s   t  t¡}|  |d¡ d S )Nrs   r0   rw   r$   r$   r%   Ú!test_equality_with_invalid_objects  s    
z,TestJacobi.test_equality_with_invalid_objectc                 C   s$   t  t¡}t  t¡}|  ||¡ d S r'   )r   r(   r
   r   r-   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   Z_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Údumpsr1   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¡ qP|D ]}| ¡  qp||ƒ |D ]}| ¡  qŠ|  |jt j¡ d S )Nr   r   Tc                 S   s&   |   ¡ }tdƒD ]}| t|ƒ  qd S )Nr   ©r   Úranger   ©Ú	generatorr   Ú_r$   r$   r%   Úrunner™  s    z.TestJacobi.test_multithreading.<locals>.runner©ÚtargetÚargs)r   r   r   r   r    r   r   rZ   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   sH  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 ]}
|
 ¡  qÆ|  t¡0 | ¡  | ¡  ||ƒ |	 ¡  W d   ƒ n1 s0    Y  |D ]}
|
 ¡  q$|  |jt j¡ d S )
Nr   r   r   Tc                 S   s&   |   ¡ }tdƒD ]}| t|ƒ  qd S )Né2   r¦   r¨   r$   r$   r%   r«   Á  s    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   rZ   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¯  sF    "þÿ
(þz.TestJacobi.test_multithreading_with_interruptsN)NÚ__name__Ú
__module__Ú__qualname__r&   r,   r.   r2   r7   r9   r;   r>   r?   rB   rC   rG   rH   rI   rJ   rK   rL   rO   rQ   rS   rT   rU   rV   r   ÚSLOW_SETTINGSr   ÚstZintegersÚintr   r   rX   r   r]   rb   r   r=   rf   ÚpytestÚmarkZslowrg   rm   Úlistsrp   rr   rt   ru   rv   rx   ry   r|   r~   r„   rˆ   r‰   r‹   r   r‘   r’   r“   r•   r—   rœ   r   rž   rŸ   r£   ÚNO_OLD_SETTINGSZskipifÚplatformÚpython_implementationr¸   ÚsystemrÈ   r$   r$   r$   r%   r   +   s  			ÿÿ	ÿÿ
ÿÿü	ÿÿù	ÿÿù	

ÿÿÿúù	
þ 
ýr   )(r    ÚsysZ	unittest2ZunittestÚImportErrorr½   rÀ   rÏ   r°   rÓ   Zhypothesis.strategiesÚ
strategiesrÍ   Z
hypothesisr   r   r   r   Zellipticcurver   r   r	   Zecdsar
   r   r   r   r   r   r   Znumbertheoryr   Úutilr   rÒ   Úversion_inforÌ   ÚargvZTestCaser   r$   r$   r$   r%   Ú<module>   s0   $	

