U
    Ÿ#°iÓd  ã                   @   s:  d dl Z d dlZzd dlZW n ek
r8   d dlZY nX 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&kr
de%d< nde%d< G dd„ dej'ƒZ(G d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   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d/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zef e Že!e"j#d9e$e% &¡ d: ƒd;ƒd<d=„ ƒƒZ'ef e Že!e"j#d9e$e% &¡ d: ƒd;ƒe(d9ƒe(e$e% &¡ ƒƒd>d?„ ƒƒƒƒZ)ef e Že!e"j#d:e$e% &¡ d: ƒd;e"j#d:e$e% &¡ d: ƒd;ƒe(d@d@ƒdAdB„ ƒƒƒZ*ef e Že!e"j#d:e$e% &¡ d: ƒd;e"j#d:e$e% &¡ d: ƒd;e"j#d:e$e+ ,¡ d: ƒd;ƒdCdD„ ƒƒZ-e.j/j0ef e Že!e"j#d:e$e% &¡ d: ƒd;e"j#d:e$e% &¡ d: ƒd;e"j#d:e$e+ ,¡ d: ƒd;ƒe(d:d:d:ƒe(d@d@d@ƒe(dEe$e% &¡ dE ƒd:ƒe(dEe$e% &¡ dE ƒd@ƒdFdG„ ƒƒƒƒƒƒƒZ1dHdI„ Z2e.j/j0ef e Že!e"j#d:e$e% &¡ d: ƒd;e"j#d:e$e% &¡ d: ƒd;e"j3e"j#d:e$e+ ,¡ d: ƒd;dEdEdJdKƒe(dEdEdEd:gƒe(dEdEdEd@gƒe(dEe$e% &¡ dE ƒdEd@gƒe(dEe$e% &¡ dE ƒdEd:gƒdLdM„ ƒƒƒƒƒƒƒ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„ ZFdrds„ ZGe!e"j#d9e$eH &¡ d: ƒd;e"j#d9e$eH &¡ d: ƒd;e"j#d9e$eH &¡ d: ƒd;ƒe(dtdEduƒdvdw„ ƒƒZIdxdy„ ZJdzd{„ ZKd|d}„ ZLd~d„ ZMd€d„ ZNd‚dƒ„ ZOd„d…„ ZPd†d‡„ ZQdˆd‰„ ZRdŠd‹„ ZSdŒd„ ZTdŽd„ ZUdd‘„ ZVd’d“„ ZWe.j/j0ef eXŽe.j/jYeZ [¡ d”kd•d–e!e"j#d:d—d;ƒd˜d™„ ƒƒƒƒZ\e.j/j0e.j/jYeZ ]¡ dškpjeZ [¡ d”kd›d–dœd„ ƒƒZ^dž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%   úY/var/www/html/me.goteku.com/backend/venv/lib/python3.8/site-packages/ecdsa/test_jacobi.pyÚtest___init__,   s    zTestJacobi.test___init__c              	   C   s6   t  t¡}t  t¡}|  t¡ ||  W 5 Q R X 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   s   t  t¡}|  |d¡ d S )NÚvalue©r   r)   r   r0   ©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!   r9   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   r<   r   r	   r5   r%   r%   r&   Útest_double_with_zero_pointW   s    z&TestJacobi.test_double_with_zero_pointc                 C   s&   t tdddƒ}| ¡ }|  |t¡ d S ©Nr   r?   r5   r%   r%   r&   Ú&test_double_with_zero_equivalent_point^   s    z1TestJacobi.test_double_with_zero_equivalent_pointc                 C   s*   t tddt ¡ ƒ}| ¡ }|  |t¡ d S r>   ©r   r   Úpr<   r   r	   r5   r%   r%   r&   Ú<test_double_with_zero_equivalent_point_non_zero_z_non_zero_ye   s    zGTestJacobi.test_double_with_zero_equivalent_point_non_zero_z_non_zero_yc                 C   s*   t tddt ¡ ƒ}| ¡ }|  |t¡ d S rA   rC   r5   r%   r%   r&   Ú1test_double_with_zero_equivalent_point_non_zero_zl   s    z<TestJacobi.test_double_with_zero_equivalent_point_non_zero_zc                 C   s.   t  t¡}| ¡ }|  ||¡ |  ||¡ d S r(   r7   ©r"   r$   Úpar%   r%   r&   Útest_compare_with_affine_points   s    
z)TestJacobi.test_compare_with_affine_pointc                 C   s&   t tdddƒ}| ¡ }|  |t¡ d S rA   )r   r   r8   r   r	   rG   r%   r%   r&   Útest_to_affine_with_zero_pointz   s    z)TestJacobi.test_to_affine_with_zero_pointc                 C   s.   t  t¡}| ¡ }|| }|  || ¡ ¡ d S r(   ©r   r)   r   r8   r   r<   ©r"   r$   rH   Úsr%   r%   r&   Útest_add_with_affine_point   s    
z%TestJacobi.test_add_with_affine_pointc                 C   s.   t  t¡}| ¡ }|| }|  || ¡ ¡ d S r(   rK   rL   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$   rM   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 rA   )r   r)   r   r8   r   r   )r"   rH   r$   rM   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 rA   )r   r)   r   r   r	   r5   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	   r5   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!   r9   r%   r%   r&   Útest_multiply_by_one®   s
    
zTestJacobi.test_multiply_by_onec                 C   sF   t  t¡}td }|d }|  | ¡ | ¡ ¡ |  | ¡ | ¡ ¡ d S ©Nr   rU   r9   r%   r%   r&   Útest_multiply_by_two·   s
    
zTestJacobi.test_multiply_by_twoc                 C   s*   t  t¡}td }d| }|  ||¡ d S rW   ©r   r)   r   r   r9   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È   s    
z.TestJacobi.test_compare_non_zero_with_infinityc                 C   s   t tdddƒ}|  |t¡ d S )Nr   r   ©r   r   r   r	   r5   r%   r%   r&   Ú-test_compare_non_zero_bad_scale_with_infinityÍ   s    z8TestJacobi.test_compare_non_zero_bad_scale_with_infinityc                 C   s<   t dddƒ}t|dddƒ}|  | dd¡¡ |  |t¡ d S ©Né   r   r   ©r   r   Ú
assertTrueÚcontains_pointr0   r	   ©r"   Úc_23r$   r%   r%   r&   Ú"test_eq_x_0_on_curve_with_infinityÑ   s    z-TestJacobi.test_eq_x_0_on_curve_with_infinityc                 C   s<   t dddƒ}t|dddƒ}|  | dd¡¡ |  |t¡ d S )Nr_   r   r   r   r`   rc   r%   r%   r&   Ú"test_eq_y_0_on_curve_with_infinityÙ   s    z-TestJacobi.test_eq_y_0_on_curve_with_infinityc                 C   s8   t dddƒ}t|dddƒ}t|dddƒ}|  ||¡ d S )Nr_   r   r   é   )r   r   r0   )r"   rd   r-   r.   r%   r%   r&   Útest_eq_with_same_x_different_yá   s    z*TestJacobi.test_eq_with_same_x_different_yc                 C   s   t tdddƒ}|  |t¡ d S rA   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 rW   )r   r)   r   r<   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   r8   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   ra   Ú_PointJacobi__precomputer   r)   r   )r"   rk   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_grn   ro   Ú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   rD   r   r   r    r!   r   ©
r"   rq   rr   Únew_zrs   rn   ro   rD   Znew_zzrt   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(   rv   rw   r%   r%   r&   Útest_add_same_scale_pointsH  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   rD   Úscaler   r    r!   r   )r"   rs   rD   rn   Úz1r    r!   rt   r%   r%   r&   Ú!test_add_same_scale_points_statics  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>   rv   )r"   rq   rr   rx   rs   rn   ro   rD   Znew_zz0Znew_zz1rt   r%   r%   r&   Útest_add_different_scale_pointsŠ  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 )Nr{   r|   r   r   é   r}   )	r"   rs   rD   rn   r   r    Zz2r!   rt   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 )Nr{   é   r|   r   r   r}   )	r"   rs   rD   rn   ro   r#   r    r!   rt   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 )Nr{   r   r   r   )r   r   rD   r~   r   r    r!   r   )r"   rs   rD   r#   rn   r    r!   rt   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 )Nr{   r   )r   r~   r   r   r    r!   r   r	   )r"   rs   r#   rn   ro   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   rY   ©r"   rs   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 rT   )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 rT   ©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   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"   rs   ro   r%   r%   r&   Útest_mul_add_precompute2  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"   rs   rn   ro   r%   r%   r&   Útest_mul_add_to_mulF  s    
zTestJacobi.test_mul_add_to_mulc                 C   s0   t  t¡}|d }|  | d|d¡|d ¡ d S )Nr   r   r   r   )r"   rs   Úw_ar%   r%   r&   Útest_mul_add_differntN  s    
z TestJacobi.test_mul_add_differntc                 C   s@   t  t¡}|d }|d }|  | d|d¡|d |d  ¡ d S )Nr   r   r   r   )r"   rs   r   Úw_br%   r%   r&   Útest_mul_add_slightly_differentU  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   r8   ©r"   rs   r   rŸ   Zj_bÚretr%   r%   r&   Útest_mul_add]  s    
zTestJacobi.test_mul_addc                 C   sH   t  t¡}td }td }|d }| d|d¡}|  | ¡ || ¡ d S )Nr’   r   r¡   r£   r¤   r%   r%   r&   Útest_mul_add_zeroh  s    
zTestJacobi.test_mul_add_zeroc                 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_larget  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"   rs   r   ro   r%   r%   r&   Ú$test_mul_add_with_infinity_as_result€  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"   rs   r   rŸ   ro   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"   rs   Zdbl_negr%   r%   r&   Ú,test_mul_add_with_doubled_negation_of_itself•  s    
z7TestJacobi.test_mul_add_with_doubled_negation_of_itselfiµ  iÝ  c                 C   s<   t  t¡}t| }| |||¡}|  ||| ||  ¡ d S r(   )r   r)   r   rŽ   r   )r"   Zmul1Zmul2Zmul3r-   r.   Úresr%   r%   r&   Útest_mul_add_randomœ  s    
zTestJacobi.test_mul_add_randomc                 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 ©Nr_   r   r   r   ©r   r    r!   r#   r   )r   r   r   )r"   Úpj1Zpj2r%   r%   r&   Útest_equalityª  s    zTestJacobi.test_equalityc                 C   s   t  t¡}|  |d¡ d S )Nr†   r4   rŠ   r%   r%   r&   Ú!test_equality_with_invalid_object¯  s    
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_curves´  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   sj   t dddƒ}t|dddƒ}| ¡ }|  | ¡ | ¡ fd¡ |  |t¡ | ¡ }|  |t¡ |  |t¡ d S ©Nr_   r   r{   é   ©r   r   )	r   r   r<   r   r    r!   r0   r	   r   ©r"   rd   rD   Úp2Zp3r%   r%   r&   Útest_double_to_infinityÀ  s    z"TestJacobi.test_double_to_infinityc                 C   s>   t dddƒ}t|dddƒ}| ¡ }|  | ¡ | ¡ fd¡ d S )Nr_   r   r   é	   )r   é   )r   r   r<   r   r    r!   )r"   Zc_23_2rD   r¼   r%   r%   r&   Útest_double_to_x_0Ê  s    zTestJacobi.test_double_to_x_0c                 C   sj   t dddƒ}t|dddƒ}|d }|  | ¡ | ¡ fd¡ |  |t¡ |d }|  |t¡ |  |t¡ d S )Nr_   r   r{   r¹   r   rº   ©r   r   r   r    r!   r0   r	   r   r»   r%   r%   r&   Útest_mul_to_infinityÑ  s    zTestJacobi.test_mul_to_infinityc                 C   sj   t dddƒ}t|dddƒ}|| }|  | ¡ | ¡ fd¡ |  |t¡ || }|  |t¡ |  |t¡ d S r¸   rÁ   r»   r%   r%   r&   Útest_add_to_infinityÛ  s    zTestJacobi.test_add_to_infinityc                 C   s>   t dddƒ}t|dddƒ}|d }|  | ¡ | ¡ fd¡ d S )Nr_   r   r¾   r   r|   ©r   rg   ©r   r   r   r    r!   ©r"   rd   rD   r¼   r%   r%   r&   Útest_mul_to_x_0å  s    zTestJacobi.test_mul_to_x_0c                 C   s>   t dddƒ}t|dddƒ}|d }|  | ¡ | ¡ fd¡ d S )Nr_   r   r¾   r   é   rº   rÅ   rÆ   r%   r%   r&   Útest_mul_to_y_0ì  s    zTestJacobi.test_mul_to_y_0c                 C   sB   t dddƒ}t|dddƒ}|d | }|  | ¡ | ¡ fd¡ d S )Nr_   r   r¾   r   r†   rÄ   rÅ   rÆ   r%   r%   r&   Útest_add_to_x_0ó  s    zTestJacobi.test_add_to_x_0c                 C   sB   t dddƒ}t|dddƒ}|d | }|  | ¡ | ¡ fd¡ d S )Nr_   r   r¾   r   r|   rº   rÅ   rÆ   r%   r%   r&   Útest_add_to_y_0ú  s    zTestJacobi.test_add_to_y_0c                 C   s:   t dddƒ}t|dddƒ}|d |d  }|  |t¡ d S )Nr_   r   r¾   r   r¹   é   )r   r   r   r	   )r"   rd   rD   rt   r%   r%   r&   Útest_add_diff_z_to_infinity  s    z&TestJacobi.test_add_diff_z_to_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¡ 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   rm   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   s2  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¡& | ¡  | ¡  ||ƒ |	 ¡  W 5 Q R X |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Ù   E  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&   ÚinterrupterJ  s    zCTestJacobi.test_multithreading_with_interrupts.<locals>.interrupterrÚ   )r   r   r   r    r!   r   r   rm   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_interrupts3  sF    "þÿ
þz.TestJacobi.test_multithreading_with_interruptsN)_Ú__name__Ú
__module__Ú__qualname__r'   r/   r2   r6   r;   r=   r@   rB   rE   rF   rI   rJ   rN   rO   rP   rQ   rR   rS   rV   rX   rZ   r[   r]   re   rf   rh   ri   rj   r   ÚSLOW_SETTINGSr   ÚstZintegersÚintr   r   rl   r   rp   ru   r   rD   ry   ÚpytestÚmarkZslowrz   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Í   rÑ   ÚNO_OLD_SETTINGSZskipifÚplatformÚpython_implementationræ   Úsystemrö   r%   r%   r%   r&   r   +   sX  			 ÿÿ	 ÿÿ
 ÿ ÿü	 ÿ ÿù	 ÿ ÿù	

 ÿ ÿ ÿúù	ý




þ 
ýr   c                   @   sH   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dS )ÚTestZeroCurvez.Tests with curve that has (0, 0) on the curve.c                 C   s   t dddƒ| _d S r^   )r   r   r1   r%   r%   r&   ÚsetUp{  s    zTestZeroCurve.setUpc                 C   s   |   | j dd¡¡ d S rA   )ra   r   rb   r1   r%   r%   r&   Útest_zero_point_on_curve~  s    z&TestZeroCurve.test_zero_point_on_curvec                 C   s@   t | jdddƒ}| ¡ }|  |t¡ |  d| ¡ | ¡ f¡ d S )Nr   r¿   ©r   r   ©r   r   r<   r0   r	   r   r    r!   ©r"   rD   Údr%   r%   r&   Útest_double_to_0_0_point  s    z&TestZeroCurve.test_double_to_0_0_pointc                 C   sT   d}t | jd|d  d|d  |ƒ}| ¡ }|  |t¡ |  d| ¡ | ¡ f¡ d S )Nr   r   r¿   r   r  r  )r"   r#   rD   r
  r%   r%   r&   Ú'test_double_to_0_0_point_with_non_one_z‰  s
     z5TestZeroCurve.test_double_to_0_0_point_with_non_one_zc                 C   s@   t | jdddƒ}|d }|  |t¡ |  d| ¡ | ¡ f¡ d S )Nr{   r|   r   r†   r  )r   r   r0   r	   r   r    r!   r	  r%   r%   r&   Útest_mul_to_0_0_point’  s    z#TestZeroCurve.test_mul_to_0_0_pointc                 C   s(   t | jdddƒ}| ¡ }|  |t¡ d S r>   )r   r   r<   r   r	   r	  r%   r%   r&   Útest_double_of_0_0_pointš  s    z&TestZeroCurve.test_double_of_0_0_pointc                 C   sD   t | jdddƒ}t| jddƒ}tdƒD ]}|  || || ¡ q&d S )Nr{   r|   r   é   )r   r   r
   rÕ   r   )r"   rD   Zp_cÚir%   r%   r&   Ú"test_compare_to_old_implementation¡  s    z0TestZeroCurve.test_compare_to_old_implementationN)r÷   rø   rù   Ú__doc__r  r  r  r  r  r  r  r%   r%   r%   r&   r  x  s   	r  )*rÎ   ÚsysZ	unittest2ZunittestÚImportErrorrë   rî   rý   rÞ   r  Zhypothesis.strategiesZ
strategiesrû   Z
hypothesisr   r   r   r   Zellipticcurver   r   r	   r
   Zecdsar   r   r   r   r   r   r   Znumbertheoryr   Úutilr   r   Úversion_inforú   ÚargvZTestCaser   r  r%   r%   r%   r&   Ú<module>   s>   $	

      S