a
    ‘dbäG  ã                   @   sü   d dl Z zd dlZW n ey.   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	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 ddlmZ ddlm Z  i Z!ej"dkræ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)Úinverse_mod)Ú	randrange)é   é   iˆ  Údeadlinec                
   @   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/d0eejd1ee  ¡ ƒd2ƒd3d4„ ƒƒZ!ed/d0eejd1ee  ¡ ƒd2ƒe"d1ƒe"ee  ¡ ƒƒd5d6„ ƒƒƒƒZ#ed/d0eejd7ee  ¡ ƒd2ejd7ee  ¡ ƒd2ƒe"d8d8ƒd9d:„ ƒƒƒZ$ed/d0eejd7ee  ¡ ƒd2ejd7ee  ¡ ƒd2ejd7ee% &¡ d7 ƒd2ƒd;d<„ ƒƒZ'ed/d0eejd7ee  ¡ ƒd2ejd7ee  ¡ ƒd2ejd7ee% &¡ d7 ƒd2ƒe"d7d7d7ƒe"d8d8d8ƒe"d=ee  ¡ d= ƒd7ƒe"d=ee  ¡ d= ƒd8ƒd>d?„ ƒƒƒƒƒƒZ(d@dA„ Z)edBd0eejd7ee  ¡ ƒd2ejd7ee  ¡ ƒd2ej*ejd7ee% &¡ d7 ƒd2d=d=dCdDƒe"d=d=d=d7gƒe"d=d=d=d8gƒe"d=ee  ¡ d= ƒd=d8gƒe"d=ee  ¡ d= ƒd=d7gƒdEdF„ ƒƒƒƒƒƒZ+dGdH„ Z,dIdJ„ Z-dKdL„ Z.dMdN„ Z/dOdP„ Z0dQdR„ Z1dSdT„ Z2dUdV„ Z3dWdX„ Z4dYdZ„ Z5d[d\„ Z6d]d^„ Z7d_d`„ Z8dadb„ Z9dcdd„ Z:dedf„ Z;dgdh„ Z<didj„ Z=dkdl„ Z>ef i e?¤Žeejd7d/d2ƒdmdn„ ƒƒZ@eAjBjCeD E¡ dokdpdqdrds„ ƒZFdtS )uÚ
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"   úb/home/tom/ab/renpy-build/tmp/install.linux-x86_64/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_curves1   s    

z)TestJacobi.test_add_with_different_curvesc                 C   s   |   tt¡ d S r%   )ÚassertNotEqualr
   r   )r   r"   r"   r#   Útest_compare_different_curves8   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_point;   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_conversion@   s    
zTestJacobi.test_conversionc                 C   sF   t  t¡}t ¡ }| ¡ }|  | ¡ | ¡ ¡ |  | ¡ | ¡ ¡ d S r%   )r   r&   r
   Údoubler   r   r   r3   r"   r"   r#   Útest_single_doubleF   s
    
zTestJacobi.test_single_doublec                 C   s&   t tdddƒ}| ¡ }|  |t¡ d S ©Nr   r   )r   r   r6   r   r	   r/   r"   r"   r#   Útest_double_with_zero_pointO   s    z&TestJacobi.test_double_with_zero_pointc                 C   s*   t tdt ¡ dƒ}| ¡ }|  |t¡ d S r8   ©r   r   Úpr6   r   r	   r/   r"   r"   r#   Ú&test_double_with_zero_equivalent_pointV   s    z1TestJacobi.test_double_with_zero_equivalent_pointc                 C   s*   t tdt ¡ dƒ}| ¡ }|  |t¡ d S )Nr   r   r:   r/   r"   r"   r#   Ú.test_double_with_zero_equivalent_point_non_1_z]   s    z9TestJacobi.test_double_with_zero_equivalent_point_non_1_zc                 C   s.   t  t¡}| ¡ }|  ||¡ |  ||¡ d S r%   r1   ©r   r!   Úpar"   r"   r#   Útest_compare_with_affine_pointd   s    
z)TestJacobi.test_compare_with_affine_pointc                 C   s&   t tdddƒ}| ¡ }|  |t¡ d S r8   )r   r   r2   r   r	   r>   r"   r"   r#   Útest_to_affine_with_zero_pointk   s    z)TestJacobi.test_to_affine_with_zero_pointc                 C   s.   t  t¡}| ¡ }|| }|  || ¡ ¡ d S r%   ©r   r&   r
   r2   r   r6   ©r   r!   r?   Úsr"   r"   r#   Útest_add_with_affine_pointr   s    
z%TestJacobi.test_add_with_affine_pointc                 C   s.   t  t¡}| ¡ }|| }|  || ¡ ¡ d S r%   rB   rC   r"   r"   r#   Útest_radd_with_affine_pointz   s    
z&TestJacobi.test_radd_with_affine_pointc                 C   s"   t  t¡}|t }|  ||¡ d S r%   )r   r&   r
   r	   r   )r   r!   rD   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 r8   )r   r&   r
   r2   r   r   )r   r?   r!   rD   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	   r/   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 r8   )r   r   r   r	   r/   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   r3   r"   r"   r#   Útest_multiply_by_oneŸ   s
    
zTestJacobi.test_multiply_by_onec                 C   sF   t  t¡}td }|d }|  | ¡ | ¡ ¡ |  | ¡ | ¡ ¡ d S ©Nr   rL   r3   r"   r"   r#   Útest_multiply_by_two¨   s
    
zTestJacobi.test_multiply_by_twoc                 C   s*   t  t¡}td }d| }|  ||¡ d S rN   ©r   r&   r
   r   r3   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	   r/   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 r8   )r   r   r   r	   r/   r"   r"   r#   Ú%test_compare_zero_point_with_infinity¾   s    z0TestJacobi.test_compare_zero_point_with_infinityc                 C   s*   t  t¡}| ¡ }|d }|  ||¡ d S rN   )r   r&   r
   r6   r   )r   r!   ZdblZmlplr"   r"   r#   Ú!test_compare_double_with_multiplyÃ   s    
z,TestJacobi.test_compare_double_with_multiplyé
   )Zmax_examplesr   )Z	min_valueZ	max_valuec                 C   sR   t  t¡}| ¡ | }|| }|  | ¡ | ¡ f| ¡ | ¡ f¡ |  ||¡ d S r%   )r   r&   r   r2   r   r   r   )r   Úmulr!   r4   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   rV   Zprecompr!   ÚaÚbr"   r"   r#   Útest_precomputeÙ   s    	
zTestJacobi.test_precomputer   r   c                 C   sF   t  t¡}t  || ¡}t  || ¡}|| }|  ||||  ¡ d S r%   )r   r&   r   r   )r   Úa_mulÚb_mulÚj_grZ   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_   rZ   r[   r;   Znew_zzr`   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%   rb   rc   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;   rZ   Úz1r   r   r`   r"   r"   r#   Ú!test_add_same_scale_points_staticH  s&    üüz,TestJacobi.test_add_same_scale_points_staticé   T)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 r8   rb   )r   r]   r^   rd   r_   rZ   r[   r;   Znew_zz0Znew_zz1r`   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 )Nrg   rh   r   r   é   ri   )	r   r_   r;   rZ   rk   r   Zz2r   r`   r"   r"   r#   Ú&test_add_different_scale_points_static’  s(    üüz1TestJacobi.test_add_different_scale_points_staticc                 C   s&   t  t¡}|  |d || | ¡ d S )Nr   rP   ©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 rK   )r   r   r
   r   r   r   r   r	   rs   r"   r"   r#   Útest_mul_without_order¯  s    z!TestJacobi.test_mul_without_orderc                 C   s$   t  t¡}|  || dtd¡¡ d S rK   ©r   r&   r
   r   Úmul_addr	   rs   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   rw   rs   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   rw   ©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
   rw   r   )r   r_   rZ   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   ry   )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   ry   )r   r_   r†   Úw_br"   r"   r#   Útest_mul_add_slightly_differentá  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
   rw   r   r2   )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ƒ   ry   r   r"   r"   r#   Útest_mul_add_largeô  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   rw   r	   )r   r_   r   r[   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   rj   r   rw   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   rv   )r   r_   Zdbl_negr"   r"   r#   Ú,test_mul_add_with_doubled_negation_of_itself  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   Zpj1Zpj2r"   r"   r#   Útest_equality  s    zTestJacobi.test_equalityc                 C   s   t  t¡}|  |d¡ d S )Né   r.   rs   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   r+   r)   r"   r"   r#   Útest_equality_with_wrong_curves&  s    

z*TestJacobi.test_equality_with_wrong_curvesc                 C   s8   t tddddƒddddd}|  t t |¡¡|¡ d S r”   )r   r   r   ÚpickleÚloadsÚdumpsr/   r"   r"   r#   Útest_pickle,  s    zTestJacobi.test_picklec                 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 )NrU   ©r   Úranger   ©Ú	generatorr   Ú_r"   r"   r#   Úrunner<  s    z.TestJacobi.test_multithreading.<locals>.runner©ÚtargetÚargs)r   r   r   r   r   r   r   rY   rŸ   ÚappendÚ	threadingÚThreadÚstartÚjoin)r   Ú
thread_numÚgenr£   Úthreadsr¢   Útr"   r"   r#   Útest_multithreading0  s"    "

þzTestJacobi.test_multithreadingÚWindowszthere are no signals on Windows)Úreasonc                 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 )
NrU   r   r   Tc                 S   s&   |   ¡ }tdƒD ]}| t|ƒ  qd S )Né2   rž   r    r"   r"   r#   r£   a  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#   Úinterrupterf  s    zCTestJacobi.test_multithreading_with_interrupts.<locals>.interrupterr¤   )r   r   r   r   r   r   r   rY   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_interruptsR  sF    "þÿ
(þz.TestJacobi.test_multithreading_with_interruptsN)GÚ__name__Ú
__module__Ú__qualname__r$   r*   r,   r0   r5   r7   r9   r<   r=   r@   rA   rE   rF   rG   rH   rI   rJ   rM   rO   rQ   rR   rS   rT   r   r   ÚstZintegersÚintr   r   rW   r   r\   ra   r   r;   re   rf   rl   Úlistsrp   rr   rt   ru   rx   rz   r€   r„   r…   r‡   r‰   r   rŽ   r   r‘   r“   r–   r˜   r™   r   ÚNO_OLD_SETTINGSr°   ÚpytestÚmarkZskipifÚplatformÚsystemrÁ   r"   r"   r"   r#   r   #   sü   			ÿÿ	ÿÿ
ÿÿü	ÿÿù	ÿÿù	

ÿÿÿúù	 
þr   )%rš   Z	unittest2ZunittestÚImportErrorr¶   Úsysr¹   rÉ   r¨   rË   Zhypothesis.strategiesÚ
strategiesrÅ   Z
hypothesisr   r   r   r   Zellipticcurver   r   r	   Zecdsar
   r   r   r   r   r   Znumbertheoryr   Úutilr   rÈ   Úversion_infoZTestCaser   r"   r"   r"   r#   Ú<module>   s(    
