o
    ¥6÷dÔG  ã                   @   sü   d dl Z zd dlZW n ey   d dlZY nw d dlZd dlZd dlZd dlZd dlZd dl	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rsd	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dui e?¤Žeejd7d/d2ƒdmdn„ ƒƒZ@eAjBjCeD E¡ dokdpdqdrds„ ƒZFdtS )vÚ
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"   úhC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\site-packages\ecdsa/test_jacobi.pyÚtest___init__$   s   zTestJacobi.test___init__c                 C   sL   t  t¡}t  t¡}|  t¡ ||  W d   ƒ d S 1 sw   Y  d S ©N)r   Úfrom_affiner
   r   ÚassertRaisesÚ
ValueError©r   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   ó   t  t¡}|  |d¡ d S )NÚvalue©r   r&   r
   r+   ©r   r!   r"   r"   r#   Útest_equality_with_non_point;   ó   
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   r5   r"   r"   r#   Útest_single_doubleF   ó
   
zTestJacobi.test_single_doublec                 C   s&   t tdddƒ}| ¡ }|  |t¡ d S ©Nr   r   )r   r   r8   r   r	   r0   r"   r"   r#   Útest_double_with_zero_pointO   ó   z&TestJacobi.test_double_with_zero_pointc                 C   ó*   t tdt ¡ dƒ}| ¡ }|  |t¡ d S r;   ©r   r   Úpr8   r   r	   r0   r"   r"   r#   Ú&test_double_with_zero_equivalent_pointV   ó   z1TestJacobi.test_double_with_zero_equivalent_pointc                 C   r>   )Nr   r   r?   r0   r"   r"   r#   Ú.test_double_with_zero_equivalent_point_non_1_z]   rB   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_pointd   s   
z)TestJacobi.test_compare_with_affine_pointc                 C   s&   t tdddƒ}| ¡ }|  |t¡ d S r;   )r   r   r4   r   r	   rD   r"   r"   r#   Útest_to_affine_with_zero_pointk   r=   z)TestJacobi.test_to_affine_with_zero_pointc                 C   s.   t  t¡}| ¡ }|| }|  || ¡ ¡ d S r%   ©r   r&   r
   r4   r   r8   ©r   r!   rE   Úsr"   r"   r#   Útest_add_with_affine_pointr   ó   
z%TestJacobi.test_add_with_affine_pointc                 C   s.   t  t¡}| ¡ }|| }|  || ¡ ¡ d S r%   rH   rI   r"   r"   r#   Útest_radd_with_affine_pointz   rL   z&TestJacobi.test_radd_with_affine_pointc                 C   s"   t  t¡}|t }|  ||¡ d S r%   )r   r&   r
   r	   r   )r   r!   rJ   r"   r"   r#   Útest_add_with_infinity‚   ó   
z!TestJacobi.test_add_with_infinityc                 C   s4   t  t¡ ¡ }t tdddƒ}|| }|  ||¡ d S r;   )r   r&   r
   r4   r   r   )r   rE   r!   rJ   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	   r0   r"   r"   r#   Útest_multiply_by_zero‘   rO   z TestJacobi.test_multiply_by_zeroc                 C   s&   t tdddƒ}|d }|  |t¡ d S r;   )r   r   r   r	   r0   r"   r"   r#   Útest_zero_point_multiply_by_one˜   r=   z*TestJacobi.test_zero_point_multiply_by_onec                 C   óF   t  t¡}td }|d }|  | ¡ | ¡ ¡ |  | ¡ | ¡ ¡ d S ©Nr   ©r   r&   r
   r   r   r   r5   r"   r"   r#   Útest_multiply_by_oneŸ   r:   zTestJacobi.test_multiply_by_onec                 C   rS   ©Nr   rU   r5   r"   r"   r#   Útest_multiply_by_two¨   r:   zTestJacobi.test_multiply_by_twoc                 C   s*   t  t¡}td }d| }|  ||¡ d S rW   ©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	   r0   r"   r"   r#   Ú#test_compare_non_zero_with_infinity¹   r2   z.TestJacobi.test_compare_non_zero_with_infinityc                 C   s   t tdddƒ}|  |t¡ d S r;   )r   r   r   r	   r0   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
   r8   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   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   r_   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_grc   rd   Ú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   rf   rg   Únew_zrh   rc   rd   r@   Znew_zzri   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%   rk   rl   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   rh   r@   rc   Úz1r   r   ri   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 r;   rk   )r   rf   rg   rm   rh   rc   rd   r@   Znew_zz0Znew_zz1ri   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 )Nrp   rq   r   r   é   rr   )	r   rh   r@   rc   rt   r   Zz2r   ri   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   rY   ©r   rh   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   ój   t  td¡}t  |d d¡}|  |d || ¡ |  |d |d |d  ¡ |  |d | d|d¡¡ d S )NTéÿ   é   iþ  é   r   ©r   r&   r   r   r€   ©r   rh   rd   r"   r"   r#   Útest_mul_add_precompute¾  s
   z"TestJacobi.test_mul_add_precomputec                 C   r„   )NTr…   r†   éþð é ÿ  éðð  rˆ   r‰   r"   r"   r#   Útest_mul_add_precompute_largeÆ  s   ÿÿz(TestJacobi.test_mul_add_precompute_largec                 C   s0   t  t¡}|d }| d|d¡}|  ||¡ d S )Nr   r   r   )r   r&   r
   r€   r   )r   rh   rc   rd   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   rh   Ú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   rh   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
   r€   r   r4   )r   rh   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_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   r€   r	   )r   rh   r   rd   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   rs   r   r€   r	   )r   rh   r   r’   rd   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   rh   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   r-   )Né   r/   r|   r"   r"   r#   Ú!test_equality_with_invalid_object!  r2   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Údumpsr0   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¡ q(|D ]}| ¡  q8||ƒ |D ]}| ¡  qE|  |jt j¡ d S )Nr   r   Tc                 S   ó&   |   ¡ }tdƒD ]}| t|ƒ  qd S )Nr^   ©r   Úranger   ©Ú	generatorr   Ú_r"   r"   r#   Úrunner<  ó   ÿz.TestJacobi.test_multithreading.<locals>.runner©ÚtargetÚargs)r   r   r   r   r   r   r   rb   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   sD  d}t d  t }t| ¡ | ¡ | ¡ d| ¡ dƒ}|  |jg ¡ dd„ }dd„ }g }t|ƒD ]}| 	t
j||fd	¡ q.t
 ¡ }| ¡  t
 ¡ }| ¡  t
 ¡ }	|	 ¡  | 	t
j||||	fd	¡ |D ]}
|
 ¡  qc|  t¡ | ¡  | ¡  ||ƒ |	 ¡  W d   ƒ n1 sŠw   Y  |D ]}
|
 ¡  q‘|  |jt j¡ d S )
Nr^   r   r   Tc                 S   r¨   )Né2   r©   r«   r"   r"   r#   r®   a  r¯   z>TestJacobi.test_multithreading_with_interrupts.<locals>.runnerc                 S   s.   |   ¡  | ¡  t t ¡ tj¡ |  ¡  d S r%   )ÚreleaseÚacquireÚosÚkillÚgetpidÚsignalÚSIGINT)Úbarrier_startÚbarrier_endÚ	lock_exitr"   r"   r#   Úinterrupterf  s   zCTestJacobi.test_multithreading_with_interrupts.<locals>.interrupterr°   )r   r   r   r   r   r   r   rb   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  sH   "þÿ

ù	
þz.TestJacobi.test_multithreading_with_interruptsNr"   )GÚ__name__Ú
__module__Ú__qualname__r$   r*   r,   r1   r7   r9   r<   rA   rC   rF   rG   rK   rM   rN   rP   rQ   rR   rV   rX   rZ   r[   r\   r]   r   r   ÚstZintegersÚintr   r   r`   r   re   rj   r   r@   rn   ro   ru   Úlistsry   r{   r}   r~   r   rƒ   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,    ÿ 
