
    id                     |   d dl Z d dlZ	 d dlZn# e$ r d dlZY nw xY 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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ej'                  Z( G d dej'                  Z)dS )    N)givenassumesettingsexample   )CurveFpPointJacobiINFINITYPoint)generator_256	curve_256generator_224generator_brainpoolp160r1curve_brainpoolp160r1generator_112r2curve_112r2)inverse_mod)	randrange)      i  deadlinez--fastr   max_examples
   c                   F   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z edXi e  e! e"j#        d e$ e%j&                    dz
                                d                          Z' edXi e  e! e"j#        d e$ e%j&                    dz
                                 e(d           e( e$ e%j&                                        d!                                                 Z) edXi e  e! e"j#        d e$ e%j&                    dz
                       e"j#        d e$ e%j&                    dz
                                 e(d"d"          d#                                     Z* edXi e  e! e"j#        d e$ e%j&                    dz
                       e"j#        d e$ e%j&                    dz
                       e"j#        d e$ e+j,                    dz
                                d$                         Z-e.j/        j0         edXi e  e! e"j#        d e$ e%j&                    dz
                       e"j#        d e$ e%j&                    dz
                       e"j#        d e$ e+j,                    dz
                                 e(ddd           e(d"d"d"           e(d% e$ e%j&                    d%z
            d           e(d% e$ e%j&                    d%z
            d"          d&                                                                                     Z1d' Z2e.j/        j0         edXi e  e! e"j#        d e$ e%j&                    dz
                       e"j#        d e$ e%j&                    dz
                       e"j3         e"j#        d e$ e+j,                    dz
                      d%d%d()                     e(d%d%d%dg           e(d%d%d%d"g           e(d% e$ e%j&                    d%z
            d%d"g           e(d% e$ e%j&                    d%z
            d%dg          d*                                                                                     Z4d+ Z5d, Z6d- Z7d. Z8d/ Z9d0 Z:d1 Z;d2 Z<d3 Z=d4 Z>d5 Z?d6 Z@d7 ZAd8 ZBd9 ZCd: ZDd; ZEd< ZFd= ZG e! e"j#        d e$ eHj&                    dz
                       e"j#        d e$ eHj&                    dz
                       e"j#        d e$ eHj&                    dz
                                 e(d>d%d?          d@                         ZIdA ZJdB ZKdC ZLdD ZMdE ZNdF ZOdG ZPdH ZQdI ZRdJ ZSdK ZTdL ZUdM ZVdN ZWe.j/        j0         edXi eXe.j/        Y                     eZj[                    dOk    dPQ           e! e"j#        ddR                    dS                                                 Z\e.j/        j0        e.j/        Y                     eZj]                    dTk    p eZj[                    dOk    dUQ          dV                         Z^dWS )Y
TestJacobic                    t                      }d}d}d}d}t          |||||          }|                     |                                |           |                     |                                |           |                     |                                |           |                     |                                |           d S )Nr      r      )objectr	   assertEqualorderassertIscurvexy)selfr#   r$   r%   zr!   pjs          a/var/www/html/crypto-mining-system/backend/venv/lib/python3.11/site-packages/ecdsa/test_jacobi.pytest___init__zTestJacobi.test___init__,   s    1a//U+++bhhjj%(((########    c                     t          j        t                    }t          j        t                    }|                     t
                    5  ||z    d d d            d S # 1 swxY w Y   d S N)r	   from_affiner   r   assertRaises
ValueErrorr&   p_ap_bs      r)   test_add_with_different_curvesz)TestJacobi.test_add_with_different_curves9   s    %m44%m44z** 	 	#II	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A  A$'A$c                 F    |                      t          t                     d S r-   )assertNotEqualr   r   r&   s    r)   test_compare_different_curvesz(TestJacobi.test_compare_different_curves@   s    M=99999r+   c                 d    t          j        t                    }|                     |d           d S )Nvaluer	   r.   r   r6   r&   r(   s     r)   test_equality_with_non_pointz'TestJacobi.test_equality_with_non_pointC   s.    $]33B(((((r+   c                     t          j        t                    }|                                }|                     t          |           d S r-   r	   r.   r   	to_affiner    r&   r(   pws      r)   test_conversionzTestJacobi.test_conversionH   s;    $]33\\^^+++++r+   c                 n   t          j        t                    }t          j                    }|                                }|                     |                                |                                           |                     |                                |                                           d S r-   )r	   r.   r   doubler    r$   r%   rA   s      r)   test_single_doublezTestJacobi.test_single_doubleN   s    $]33!##YY[[((((((((r+   c                     t          t          ddd          }|                                }|                     |t                     d S Nr   r   r	   r   rE   r"   r
   r<   s     r)   test_double_with_zero_pointz&TestJacobi.test_double_with_zero_pointW   <    Aq!,,YY[[b(#####r+   c                     t          t          ddd          }|                                }|                     |t                     d S Nr   rI   r<   s     r)   &test_double_with_zero_equivalent_pointz1TestJacobi.test_double_with_zero_equivalent_point^   rK   r+   c                     t          t          ddt          j                              }|                                }|                     |t
                     d S rH   r	   r   prE   r"   r
   r<   s     r)   <test_double_with_zero_equivalent_point_non_zero_z_non_zero_yzGTestJacobi.test_double_with_zero_equivalent_point_non_zero_z_non_zero_ye   B    Aq)+--88YY[[b(#####r+   c                     t          t          ddt          j                              }|                                }|                     |t
                     d S rM   rP   r<   s     r)   1test_double_with_zero_equivalent_point_non_zero_zz<TestJacobi.test_double_with_zero_equivalent_point_non_zero_zl   rS   r+   c                     t          j        t                    }|                                }|                     ||           |                     ||           d S r-   r?   r&   r(   pas      r)   test_compare_with_affine_pointz)TestJacobi.test_compare_with_affine_points   sQ    $]33\\^^R   R     r+   c                     t          t          ddd          }|                                }|                     |t                     d S rM   )r	   r   r@   r"   r
   rW   s      r)   test_to_affine_with_zero_pointz)TestJacobi.test_to_affine_with_zero_pointz   s<    Aq!,,\\^^b(#####r+   c                     t          j        t                    }|                                }||z   }|                     ||                                           d S r-   r	   r.   r   r@   r    rE   r&   r(   rX   ss       r)   test_add_with_affine_pointz%TestJacobi.test_add_with_affine_point   L    $]33\\^^GBIIKK(((((r+   c                     t          j        t                    }|                                }||z   }|                     ||                                           d S r-   r]   r^   s       r)   test_radd_with_affine_pointz&TestJacobi.test_radd_with_affine_point   ra   r+   c                 x    t          j        t                    }|t          z   }|                     ||           d S r-   )r	   r.   r   r
   r    )r&   r(   r_   s      r)   test_add_with_infinityz!TestJacobi.test_add_with_infinity   s7    $]33MBr+   c                     t          j        t                                                    }t          t          ddd          }||z   }|                     ||           d S rM   )r	   r.   r   r@   r   r"   )r&   rX   r(   r_   s       r)   test_add_zero_point_to_affinez(TestJacobi.test_add_zero_point_to_affine   sT    $]33==??Aq!,,Gar+   c                 x    t          j        t                    }|dz  }|                     |t                     d S rM   )r	   r.   r   r"   r
   r<   s     r)   test_multiply_by_zeroz TestJacobi.test_multiply_by_zero   s5    $]33!Vb(#####r+   c                 t    t          t          ddd          }|dz  }|                     |t                     d S rH   )r	   r   r"   r
   r<   s     r)   test_zero_point_multiply_by_onez*TestJacobi.test_zero_point_multiply_by_one   s8    Aq!,,!Vb(#####r+   c                 >   t          j        t                    }t          dz  }|dz  }|                     |                                |                                           |                     |                                |                                           d S Nr   r	   r.   r   r    r$   r%   rA   s      r)   test_multiply_by_onezTestJacobi.test_multiply_by_one   w    $]33Q!V((((((((r+   c                 >   t          j        t                    }t          dz  }|dz  }|                     |                                |                                           |                     |                                |                                           d S Nr   rn   rA   s      r)   test_multiply_by_twozTestJacobi.test_multiply_by_two   rp   r+   c                     t          j        t                    }t          dz  }d|z  }|                     ||           d S rr   r	   r.   r   r    rA   s      r)   test_rmul_by_twozTestJacobi.test_rmul_by_two   sA    $]33QVR     r+   c                 n    t          j        t                    }|                     |t                     d S r-   )r	   r.   r   r6   r
   r<   s     r)   #test_compare_non_zero_with_infinityz.TestJacobi.test_compare_non_zero_with_infinity   s.    $]33B)))))r+   c                 j    t          t          ddd          }|                     |t                     d S )Nr   r   r	   r   r    r
   r<   s     r)   -test_compare_non_zero_bad_scale_with_infinityz8TestJacobi.test_compare_non_zero_bad_scale_with_infinity   s1    Aq!,,X&&&&&r+   c                     t          ddd          }t          |ddd          }|                     |                    dd                     |                     |t
                     d S N   r   r   r   r	   
assertTruecontains_pointr6   r
   r&   c_23r(   s      r)   "test_eq_x_0_on_curve_with_infinityz-TestJacobi.test_eq_x_0_on_curve_with_infinity   d    r1a  q!Q''++Aq11222B)))))r+   c                     t          ddd          }t          |ddd          }|                     |                    dd                     |                     |t
                     d S )Nr~   r   r   r   r   r   s      r)   "test_eq_y_0_on_curve_with_infinityz-TestJacobi.test_eq_y_0_on_curve_with_infinity   r   r+   c                     t          ddd          }t          |ddd          }t          |ddd          }|                     ||           d S )Nr~   r   r      )r   r	   r6   )r&   r   r2   r3   s       r)   test_eq_with_same_x_different_yz*TestJacobi.test_eq_with_same_x_different_y   sU    r1a  $2q))$1a((C%%%%%r+   c                 j    t          t          ddd          }|                     |t                     d S rM   rz   r<   s     r)   %test_compare_zero_point_with_infinityz0TestJacobi.test_compare_zero_point_with_infinity   s1    Aq!,,X&&&&&r+   c                     t          j        t                    }|                                }|dz  }|                     ||           d S rr   )r	   r.   r   rE   r    )r&   r(   dblmlpls       r)   !test_compare_double_with_multiplyz,TestJacobi.test_compare_double_with_multiply   sD    $]33iikkAvd#####r+   r   r   )	min_value	max_valuec                 `   t          j        t                    }|                                |z  }||z  }|                     |                                |                                f|                                |                                f           |                     ||           d S r-   )r	   r.   r   r@   r    r$   r%   )r&   mulr(   rB   s       r)   test_multiplicationszTestJacobi.test_multiplications   s     $%>??\\^^c!#X"$$&&"$$&&)BDDFFBDDFF+;<<<R     r+   c                     t           }|                     |j                   t          j        t                     }||z  }||z  }|                     ||           d S r-   )r   r   _PointJacobi__precomputer	   r.   r    )r&   r   precompr(   abs         r)   test_precomputezTestJacobi.test_precompute  s]     ,8999$%>??cMHAr+   r   c                     t          j        t                    }t          j        ||z            }t          j        ||z            }||z   }|                     ||||z   z             d S r-   )r	   r.   r   r    )r&   a_mulb_mulj_gr   r   cs          r)   test_add_scaled_pointsz!TestJacobi.test_add_scaled_points  sk     %&?@@#C%K00#C%K00EC55=122222r+   c                    t          j        t                    }t          j        ||z            }t          j        ||z            }t          j                    }t          t          ||                     ||z  |z  }t          t          |                                |z  |z  |                                |z  |z  |z  |          }||z   }	| 	                    |	|||z   z             d S r-   
r	   r.   r   r   rQ   r   r   r$   r%   r    
r&   r   r   new_zr   r   r   rQ   new_zzr   s
             r)   test_add_one_scaled_pointz$TestJacobi.test_add_one_scaled_point(  s     %&?@@#C%K00#C%K00!#%%{5!$$%%%"!CCEEFNQCCEEFNU"Q&	
 
 EC55=122222r+   r   c                 n   t          j        t                    }t          j        ||z            }t          j        ||z            }t          j                    }t          t          ||                     ||z  |z  }t          t          |                                |z  |z  |                                |z  |z  |z  |          }t          t          |                                |z  |z  |                                |z  |z  |z  |          }||z   }	| 	                    |	|||z   z             d S r-   r   r   s
             r)   test_add_same_scale_pointsz%TestJacobi.test_add_same_scale_pointsH  s'     %&?@@#C%K00#C%K00!#%%{5!$$%%%"!CCEEFNQCCEEFNU"Q&	
 
 !CCEEFNQCCEEFNU"Q&	
 
 EC55=122222r+   c                    t           }t          j                    }|dz  }|                                 d}t	          t          |                                |dz  z  |z  |                                |dz  z  |z  |          }t	          t          |                                |dz  z  |z  |                                |dz  z  |z  |          }||z   }|                     |||z              d S )N      r   r   r   r   rQ   scaler	   r$   r%   r    )r&   r   rQ   r   z1r$   r%   r   s           r)   !test_add_same_scale_points_staticz,TestJacobi.test_add_same_scale_points_statics  s    '!#%%"H				!CCEEBEMACCEEBEMA	
 
 !CCEEBEMACCEEBEMA	
 
 EAE"""""r+   T)min_sizemax_sizeuniquec                 0   t          j        t                    }t          j        ||z            }t          j        ||z            }t          j                    }t          t          |d         |                     t          t          |d         |                     |d         |d         z  |z  }|d         |d         z  |z  }	t          t          |                                |z  |z  |                                |z  |d         z  |z  |d                   }t          t          |                                |	z  |z  |                                |	z  |d         z  |z  |d                   }||z   }
| 	                    |
|||z   z             d S rH   r   )r&   r   r   r   r   r   r   rQ   new_zz0new_zz1r   s              r)   test_add_different_scale_pointsz*TestJacobi.test_add_different_scale_points  sw   . %&?@@#C%K00#C%K00!#%%{58Q''((({58Q''((((U1X%)(U1X%)!CCEEGOaCCEEGOeAh&*!H	
 
 !CCEEGOaCCEEGOeAh&*!H	
 
 EC55=122222r+   c                    t           }t          j                    }|dz  }|                                 d}t	          t          |                                |dz  z  |z  |                                |dz  z  |z  |          }d}t	          t          |                                |dz  z  |z  |                                |dz  z  |z  |          }||z   }|                     |||z              d S )Nr   r   r   r      r   )	r&   r   rQ   r   r   r$   z2r%   r   s	            r)   &test_add_different_scale_points_staticz1TestJacobi.test_add_different_scale_points_static  s    '!#%%"H				!CCEEBEMACCEEBEMA	
 
 !CCEEBEMACCEEBEMA	
 
 EAE"""""r+   c                    t           }t          j                    }|dz  }|                                 |dz  }d}t	          t          |                                |dz  z  |z  |                                |dz  z  |z  |          }t	          t          |                                |dz  z  |z  |                                |dz  z  |z  |          }||z   }|                     |||z              d S )Nr      r   r   r   r   )	r&   r   rQ   r   r   r'   r$   r%   r   s	            r)   +test_add_different_points_same_scale_staticz6TestJacobi.test_add_different_points_same_scale_static  s    '!#%%"H				"H!CCEEAqDL1CCEEAqDL1	
 
 !CCEEAqDL1CCEEAqDL1	
 
 EAE"""""r+   c                    t           }t          j                    }d}||z  }|                                 t	          t          |                                |dz  z  |z  |                                |dz  z  |z  |          }t	          t          |                                |                                d          }||z   }|                     |||z              d S )Nr   r   r   r   )r   r   rQ   r   r	   r$   r%   r    )r&   r   rQ   r'   r   r$   r%   r   s           r)   5test_add_same_point_different_scale_second_z_1_staticz@TestJacobi.test_add_same_point_different_scale_second_z_1_static  s    MOO!G				CCEEAqDL1CCEEAqDL1	
 
 CCEECCEE	
 
 EAE"""""r+   c                 x   t           }d}||z  }|                                 | }t          t          |                                |                                d          }t          t          |                                |                                d          }|                     t          ||z              d S )Nr   r   )r   r   r	   r   r$   r%   r    r
   )r&   r   r'   r   r   r$   r%   s          r)   test_add_to_infinity_staticz&TestJacobi.test_add_to_infinity_static  s    !G				BCCEECCEE	
 
 CCEECCEE	
 
 	1q5)))))r+   c                 v    t          j        t                    }|                     |dz  ||z   |z              d S )Nr   ru   r&   r   s     r)   test_add_point_3_timesz!TestJacobi.test_add_point_3_times  s:    %m44q#)c/22222r+   c                     t          t          t          j                    t          j                    d          }|                     |t          j                    z  t                     d S rm   )r	   r   r   r$   r%   r    r!   r
   r   s     r)   test_mul_without_orderz!TestJacobi.test_mul_without_order#  sO    )]_%6%68I8I1MM}2444h?????r+   c                     t          j        t                    }|                     ||                    dt
          d                     d S rm   r	   r.   r   r    mul_addr
   r   s     r)   test_mul_add_infzTestJacobi.test_mul_add_inf(  s>    %m44ckk!Xq99:::::r+   c                     t          j        t                    }|                     |dz  |                    d|d                     d S )Nr   r   r	   r.   r   r    r   r   s     r)   test_mul_add_samezTestJacobi.test_mul_add_same-  sB    %m44q#++aa"8"899999r+   c                 B   t          j        t          d          }t          j        |dz  d          }|                     |dz  ||z              |                     |dz  |dz  |dz  z              |                     |dz  |                    d|d                     d S )NT      i     r   r	   r.   r   r    r   r&   r   r   s      r)   test_mul_add_precomputez"TestJacobi.test_mul_add_precompute2  s    %&?FF#C#It44sC!G,,,,cAgAo>>>,ckk!Q.B.BCCCCCr+   c                 B   t          j        t          d          }t          j        |dz  d          }|                     |dz  ||z              |                     |dz  |dz  |dz  z              |                     |dz  |                    d|d                     d S )NTr   r         r   r   s      r)   test_mul_add_precompute_largez(TestJacobi.test_mul_add_precompute_large:  s    %&?FF#C#It44sC!G,,,()3<!f*+D	
 	
 	
 	()3;;vq&+I+I	
 	
 	
 	
 	
r+   c                     t          j        t                    }|dz  }|                    d|d          }|                     ||           d S )Nr   r   r   )r	   r.   r   r   r    )r&   r   r   r   s       r)   test_mul_add_to_mulzTestJacobi.test_mul_add_to_mulF  sL    %m44!GKK3""Ar+   c                     t          j        t                    }|dz  }|                     |                    d|d          |dz             d S )Nr   r   r   r   )r&   r   w_as      r)   test_mul_add_differntz TestJacobi.test_mul_add_differntN  sK    %m44AgQQ//q99999r+   c                     t          j        t                    }|dz  }|dz  }|                     |                    d|d          |dz  |dz  z              d S )Nr   r   r   r   )r&   r   r   w_bs       r)   test_mul_add_slightly_differentz*TestJacobi.test_mul_add_slightly_differentU  s]    %m44AgAgQQ//q371BCCCCCr+   c                     t          j        t                    }t          dz  }t          dz  }|dz  }|                    d|d          }|                     |                                ||z              d S )Nr   i        r	   r.   r   r   r    r@   r&   r   r   r   j_brets         r)   test_mul_addzTestJacobi.test_mul_add]  sl    %m44c!{+Djkk#sD))#)44444r+   c                     t          j        t                    }t          dz  }t          dz  }|dz  }|                    d|d          }|                     |                                ||z              d S )Nr   r   r   r   r   s         r)   test_mul_add_zerozTestJacobi.test_mul_add_zeroh  sl    %m44c!x(Djkk#sA&&#)44444r+   c                 >   t          j        t                    }t          j        |dz            }|                     |dz  ||z              |                     |dz  |dz  |dz  z              |                     |dz  |                    d|d                     d S )Nr   r   r   r   r   r   r   s      r)   test_mul_add_largezTestJacobi.test_mul_add_larget  s    %m44#C#I..sC!G,,,()3<!f*+D	
 	
 	
 	()3;;vq&+I+I	
 	
 	
 	
 	
r+   c                    t          j        t                    }t          j                    }t          j        t          dz            }|                     |                    |dz  ||dz            t                     d S )Nr   )r	   r.   r   r!   r    r   r
   )r&   r   r!   r   s       r)   $test_mul_add_with_infinity_as_resultz/TestJacobi.test_mul_add_with_infinity_as_result  si    %m44#%%#MC$788US[!Uc\BBHMMMMMr+   c                    t          t          t          j                    t          j                    d          }t          j                    }t          dz  }|                                 t          t          |                                |                                d          }|                     |                    |dz  ||dz            t                     d S )Nr   "   )
r	   r   r   r$   r%   r!   r   r    r   r
   )r&   r   r!   r   r   s        r)   test_mul_add_without_orderz%TestJacobi.test_mul_add_without_order  s    )]_%6%68I8I1MM#%%b 			35577CEEGGQ77URZERK@@(KKKKKr+   c                     t          j        t          dz            }d| z  }|                     |                    d|d          t
                     d S )N   r   r   r   )r&   r   dbl_negs      r)   ,test_mul_add_with_doubled_negation_of_itselfz7TestJacobi.test_mul_add_with_doubled_negation_of_itself  sN    %mb&899t*Q33X>>>>>r+   i  i  c                     t          j        t                    }t          |z  }|                    |||          }|                     |||z  ||z  z              d S r-   )r	   r.   r   r   r    )r&   mul1mul2mul3r2   r3   ress          r)   test_mul_add_randomzTestJacobi.test_mul_add_random  s\     %o66$kk$T**cDj3:566666r+   c                     t          t          dddd          dddd          }t          t          dddd          dddd          }|                     ||           d S Nr~   r   r   r   r#   r$   r%   r'   r!   )r	   r   r    )r&   pj1pj2s      r)   test_equalityzTestJacobi.test_equality  sj    Aq! 4 4Q!1MMMAq! 4 4Q!1MMMc"""""r+   c                 d    t          j        t                    }|                     |d           d S )Nr   r;   r   s     r)   !test_equality_with_invalid_objectz,TestJacobi.test_equality_with_invalid_object  s.    %m44C$$$$$r+   c                     t          j        t                    }t          j        t                    }|                     ||           d S r-   )r	   r.   r   r   r6   r1   s      r)   test_equality_with_wrong_curvesz*TestJacobi.test_equality_with_wrong_curves  s>    %m44%m44C%%%%%r+   c           	          t          t          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'   s        r)   test_add_with_point_at_infinityz*TestJacobi.test_add_with_point_at_infinity  sm    Aq! 4 4Q!1MMM((1aAq!R001a!QI.....r+   c                    t          ddd          }t          |ddd          }|                                }|                     |                                |                                fd           |                     |t                     |                                }|                     |t                     |                     |t                     d S Nr~   r   r      r   r   )	r   r	   rE   r    r$   r%   r6   r
   r"   r&   r   rQ   p2p3s        r)   test_double_to_infinityz"TestJacobi.test_double_to_infinity  s    r1a  b"a((XXZZ"$$&&"$$&&)6222B)))YY[[X&&&b(#####r+   c                     t          ddd          }t          |ddd          }|                                }|                     |                                |                                fd           d S )Nr~   r   r   	   )r      )r   r	   rE   r    r$   r%   )r&   c_23_2rQ   r  s       r)   test_double_to_x_0zTestJacobi.test_double_to_x_0  sd    Q""1a((XXZZ"$$&&"$$&&)733333r+   c                 z   t          ddd          }t          |ddd          }|dz  }|                     |                                |                                fd           |                     |t                     |dz  }|                     |t                     |                     |t                     d S )Nr~   r   r   r  r   r  r   r	   r    r$   r%   r6   r
   r"   r  s        r)   test_mul_to_infinityzTestJacobi.test_mul_to_infinity  s    r1a  b"a((U"$$&&"$$&&)6222B)))!VX&&&b(#####r+   c                 z   t          ddd          }t          |ddd          }||z   }|                     |                                |                                fd           |                     |t                     ||z   }|                     |t                     |                     |t                     d S r  r  r  s        r)   test_add_to_infinityzTestJacobi.test_add_to_infinity  s    r1a  b"a((U"$$&&"$$&&)6222B)))"WX&&&b(#####r+   c                     t          ddd          }t          |ddd          }|dz  }|                     |                                |                                fd           d S )Nr~   r   r  r   r   r   r   r   r	   r    r$   r%   r&   r   rQ   r  s       r)   test_mul_to_x_0zTestJacobi.test_mul_to_x_0  s`    r1a  aA&&V"$$&&"$$&&)733333r+   c                     t          ddd          }t          |ddd          }|dz  }|                     |                                |                                fd           d S )Nr~   r   r  r      r  r  r   s       r)   test_mul_to_y_0zTestJacobi.test_mul_to_y_0  s`    r1a  aA&&V"$$&&"$$&&)622222r+   c                     t          ddd          }t          |ddd          }|dz  |z   }|                     |                                |                                fd           d S )Nr~   r   r  r   r   r  r  r   s       r)   test_add_to_x_0zTestJacobi.test_add_to_x_0  sd    r1a  aA&&VaZ"$$&&"$$&&)733333r+   c                     t          ddd          }t          |ddd          }|dz  |z   }|                     |                                |                                fd           d S )Nr~   r   r  r   r   r  r  r   s       r)   test_add_to_y_0zTestJacobi.test_add_to_y_0  sd    r1a  aA&&VaZ"$$&&"$$&&)622222r+   c                     t          ddd          }t          |ddd          }|dz  |dz  z   }|                     |t                     d S )Nr~   r   r  r   r     )r   r	   r"   r
   )r&   r   rQ   r   s       r)   test_add_diff_z_to_infinityz&TestJacobi.test_add_diff_z_to_infinity  sQ    r1a  aA&&FQUNa"""""r+   c                     t          t          dddd          dddd          }|                     t          j        t          j        |                    |           d S r   )r	   r   r    pickleloadsdumpsr<   s     r)   test_picklezTestJacobi.test_pickle  sX    wr1a33qA!LLLfl2&6&677<<<<<r+   PyPyz!threading on PyPy breaks coverage)reasonr   c                 \   t           dz   t           }t          |                                |                                |                                d|                                d          }|                     |j        g            d }g }t          |          D ],}|	                    t          j        ||f                     -|D ]}|                                  ||           |D ]}|                                 |                     |j        t           j                   d S )Nr   r   Tc                 v    |                                  }t          d          D ]}| t          |          z   d S )Nr   r!   ranger   	generatorr!   _s      r)   runnerz.TestJacobi.test_multithreading.<locals>.runner  F    OO%%E2YY - -Ie,,,,,- -r+   targetargs)r   r	   r#   r$   r%   r!   r    r   r6  append	threadingThreadstartjoin)r&   
thread_numgenr:  threadsr9  ts          r)   test_multithreadingzTestJacobi.test_multithreading  s3    	! #))++suuwwCIIKKNN5r:::	- 	- 	-
 z"" 	I 	IANN9+6GGGHHHH 	 	AGGIIIIs 	 	AFFHHHH(4	
 	
 	
 	
 	
r+   WindowszFthere are no signals on Windows, and threading breaks coverage on PyPyc                    d}t           dz   t           }t          |                                |                                |                                d|                                d          }|                     |j        g            d }d }g }t          |          D ],}|	                    t          j        ||f                     -t          j                    }|                                 t          j                    }|                                 t          j                    }	|	                                 |	                    t          j        ||||	f                     |D ]}
|
                                 |                     t                     5  |                                 |                                  ||           |	                                 d d d            n# 1 swxY w Y   |D ]}
|
                                 |                     |j        t           j                   d S )Nr   r   r   Tc                 v    |                                  }t          d          D ]}| t          |          z   d S )N2   r5  r7  s      r)   r:  z>TestJacobi.test_multithreading_with_interrupts.<locals>.runnerE  r;  r+   c                     |                                   |                                 t          j        t          j                    t
          j                   |                                  d S r-   )releaseacquireoskillgetpidsignalSIGINT)barrier_startbarrier_end	lock_exits      r)   interrupterzCTestJacobi.test_multithreading_with_interrupts.<locals>.interrupterJ  sX    !!###!!!GBIKK///r+   r<  )r   r	   r#   r$   r%   r!   r    r   r6  r?  r@  rA  LockrO  rB  r/   KeyboardInterruptrN  rC  )r&   rD  rE  r:  rX  rF  r9  rU  rV  rW  rG  s              r)   #test_multithreading_with_interruptsz.TestJacobi.test_multithreading_with_interrupts3  s    
! #))++suuwwCIIKKNN5r:::	- 	- 	-
	  	  	  z"" 	I 	IANN9+6GGGHHHH!((n&&N$$	"#[)<  	
 	
 	
  	 	AGGIIII011 	  	 !!###!!!F3KKK 	  	  	  	  	  	  	  	  	  	  	  	  	  	  	   	 	AFFHHHH(4	
 	
 	
 	
 	
s   #AG77G;>G;N )___name__
__module____qualname__r*   r4   r8   r=   rC   rF   rJ   rN   rR   rU   rY   r[   r`   rc   re   rg   ri   rk   ro   rs   rv   rx   r{   r   r   r   r   r   r   SLOW_SETTINGSr   stintegersintr   r!   r   r   r   r   r   rQ   r   pytestmarkslowr   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  r  r
  r  r  r  r  r!  r$  r&  r(  r+  r0  NO_OLD_SETTINGSskipifplatformpython_implementationrH  systemr[  r\  r+   r)   r   r   +   s       $ $ $  : : :) ) )
, , ,) ) )$ $ $$ $ $$ $ $$ $ $! ! !$ $ $) ) )) ) )       $ $ $$ $ $) ) )) ) )! ! !* * *
' ' '* * ** * *& & &' ' '
$ $ $ X
U33'F'@'F'H'H1'L#M#M	
 	
 	
 
! !  ! X
U33'F'@'F'H'H1'L#M#M	
 	
 	
 
 WQZZWSS0*0223344  54 Z   X
U33'F'@'F'H'H1'L#M#M	
 	
 	
 	33'F'@'F'H'H1'L#M#M	
 	
 	
	  WQ]]3 3 ]  3 X
U33'F'@'F'H'H1'L#M#M	
 	
 	
 	33'F'@'F'H'H1'L#M#M	
 	
 	
 	a33/F/D/F/H/H1/L+M+MNNN 3 3  3, [X
U33'F'@'F'H'H1'L#M#M	
 	
 	
 	33'F'@'F'H'H1'L#M#M	
 	
 	
 	a33/F/D/F/H/H1/L+M+MNNN  WQ1WQ1WQ3-3559::A>>WQ3-3559::A>>3 3 ?> ?>     38# # #. [X
U33'F'@'F'H'H1'L#M#M	
 	
 	
 	33'F'@'F'H'H1'L#M#M	
 	
 	
 	BKss+B+@+B+D+Dq+H'I'I   	
 	
 	
   WQAq6WQAq6WQ3-3559::QFCCWQ3-3559::QFCC3 3 DC DC  !   ,3<# # #0# # #0# # #0* * *03 3 3
@ @ @
; ; ;
: : :
D D D

 

 

  : : :D D D	5 	5 	5
5 
5 
5

 

 

N N N
L 
L 
L? ? ? Ua33/D/D/F/F/J+K+KLLLa33/D/D/F/F/J+K+KLLLa33/D/D/F/F/J+K+KLLL 
 WS!T7 7  7# # #
% % %
& & &/ / /$ $ $4 4 4$ $ $$ $ $4 4 43 3 34 4 43 3 3# # #= = = [X    [&&((F22    U;2;b11122
 
 32	  !  
@ [[Y& 	6)8)++v5   ;
 ;
  ;
 ;
 ;
r+   r   c                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestZeroCurvez.Tests with curve that has (0, 0) on the curve.c                 2    t          ddd          | _        d S r}   )r   r#   r7   s    r)   setUpzTestZeroCurve.setUp{  s    RA&&


r+   c                 b    |                      | j                            dd                     d S rM   )r   r#   r   r7   s    r)   test_zero_point_on_curvez&TestZeroCurve.test_zero_point_on_curve~  s,    
11!Q7788888r+   c                 
   t          | j        ddd          }|                                }|                     |t                     |                     d|                                |                                f           d S )Nr   r  r   r   r	   r#   rE   r6   r
   r    r$   r%   r&   rQ   ds      r)   test_double_to_0_0_pointz&TestZeroCurve.test_double_to_0_0_point  sj    
Ar1--HHJJAx(((!##%%00000r+   c                 &   d}t          | j        d|dz  z  d|dz  z  |          }|                                }|                     |t                     |                     d|                                |                                f           d S )Nr   r   r  r   rt  ru  )r&   r'   rQ   rw  s       r)   'test_double_to_0_0_point_with_non_one_zz5TestZeroCurve.test_double_to_0_0_point_with_non_one_z  s    
A1Hb1a4i;;HHJJAx(((!##%%00000r+   c                     t          | j        ddd          }|dz  }|                     |t                     |                     d|                                |                                f           d S )Nr   r   r   r   rt  )r	   r#   r6   r
   r    r$   r%   rv  s      r)   test_mul_to_0_0_pointz#TestZeroCurve.test_mul_to_0_0_point  sf    
BA..FAx(((!##%%00000r+   c                     t          | j        ddd          }|                                }|                     |t                     d S rH   )r	   r#   rE   r"   r
   rv  s      r)   test_double_of_0_0_pointz&TestZeroCurve.test_double_of_0_0_point  s>    
Aq!,,HHJJa"""""r+   c                     t          | j        ddd          }t          | j        dd          }t          d          D ]}|                     ||z  ||z             d S )Nr   r   r      )r	   r#   r   r6  r    )r&   rQ   p_cis       r)   "test_compare_to_old_implementationz0TestZeroCurve.test_compare_to_old_implementation  sj    
BA..DJB''r 	- 	-AQUC!G,,,,	- 	-r+   N)r]  r^  r_  __doc__rp  rr  rx  rz  r|  r~  r  r\  r+   r)   rn  rn  x  s        88' ' '9 9 91 1 11 1 11 1 1# # #- - - - -r+   rn  )*r-  sys	unittest2unittestImportErrorrP  rS  rd  r@  rj  hypothesis.strategies
strategiesra  
hypothesisr   r   r   r   ellipticcurver   r	   r
   r   ecdsar   r   r   r   r   r   r   numbertheoryr   utilr   rh  version_infor`  argvTestCaser   rn  r\  r+   r)   <module>r     s    



        OOOOO 
			        " " " " " " 7 7 7 7 7 7 7 7 7 7 7 7 @ @ @ @ @ @ @ @ @ @ @ @                  & % % % % %       f"&OJ sx$%M.!!$&M.!J
 J
 J
 J
 J
" J
 J
 J
Z.- .- .- .- .-H% .- .- .- .- .-s    	