
    Tf3              
       ,   d dl Z d dlm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mZ	 d dl
Z
d dlmZmZmZ 	 d dlmZ dZn# e$ r dZY nw xY wddlmZmZmZmZmZmZmZmZmZmZmZ 	 d d	lmZ n!# e$ r 	 d d	lmZ n# e$ r d
 ZY nw xY wY nw xY wdZ e
j!        "                    dd  e#e dd         e dd                   D                       d             Z$e
j!        "                    dg d          d             Z%e
j!        j&        e
j!        "                    de          d                         Z'd Z(d Z)d Z*d Z+ G d dej,                  Z-e	j.        d             Z/e	j.        d             Z0e	j.        d             Z1e	j.        d             Z2e	j.        d             Z3i Z4erej5        ej6        ge4d <   d!e4d"<   d#ej7        v rd$e4d%<    e8e4          Z9d#ej7        v rde9d%<   nd$e9d%<    G d& d'ej,                  Z: G d( d)ej,                  Z;dS )*    N)reduce)givensettingsexample)HealthCheckTF   )SquareRootErrorJacobiErrorfactorizationgcdlcmjacobiinverse_modis_prime
next_primesmallprimessquare_root_mod_prime)mpzc                     | S N xs    I/var/www/html/env/lib/python3.11/site-packages/ecdsa/test_numbertheory.pyr   r   (   s    H    )i@ iA i)A i/A iEA iSA iYA i]A iA iA iA iA iA iA iA iB iB iB i+B i/B zprime, next_pc                     g | ]	\  }}||f
S r   r   ).0pqs      r   
<listcomp>r    E   s     LLLAq!fLLLr   c                 0    t          |           |k    sJ d S r   r   )primenext_ps     r   test_next_primer&   D   s#     e&&&&&&r   val)r!   r   r   c                 0    t          |           dk    sJ d S N   r#   )r'   s    r    test_next_prime_with_nums_less_2r+   K   s    c??ar   r$   c                 |   t                      }t          dd| dz  z             D ]=}||z  | z  }|                    |           t          ||           }||z  | z  |k    sJ >t          d|           D ]H}||v rt	          j        t                    5  t          ||            d d d            n# 1 swxY w Y   Id S )Nr   r   r*   )setrangeaddr   pytestraisesr	   )r$   squaresnumsqroot	nonsquares         r   +test_square_root_mod_prime_for_small_primesr7   P   s    eeGQEQJ'' ) )3YB$R//d{U"b(((((1e__ 4 4	]?++ 	4 	4!)U333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	44 4s   B00B4	7B4	c                  6    t          dd          } | dk    sJ d S )Nr   r*   r   )as    r    test_square_root_mod_prime_for_2r;   b   s"    a##A666666r   c                  B    t          dd          } | | z  dz  dk    sJ d S )N	   e   r9   )r5   s    r   *test_square_root_mod_prime_for_small_primer?   g   s1     c22D$;!!!!!!r   c                  \    d} | dz  dk    sJ t          d|           }||z  | z  dk    sJ d S )N            r9   r   r5   s     r   ,test_square_root_mod_prime_for_p_congruent_5rF   l   F    
Aq5A:::: A&&D$;?ar   c                  \    d} | dz  dk    sJ t          d|           }||z  | z  dk    sJ d S )N   rB   rC      r9   rE   s     r   4test_square_root_mod_prime_for_p_congruent_5_large_drK   t   rG   r   c                   &    e Zd Zd Zd Zd Zd ZdS )TestSquareRootModPrimec                     |                      t                    5  t          dd           d d d            d S # 1 swxY w Y   d S )N       )assertRaisesr
   r   selfs    r   test_power_of_2_pz(TestSquareRootModPrime.test_power_of_2_p}   s    {++ 	* 	*!"b)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   9= =c                     |                      t                    5 }t          dd           d d d            n# 1 swxY w Y   |                     dt	          |j                             d S )NrO      zno square rootrQ   r	   r   assertInstr	exceptionrS   es     r   test_no_squarez%TestSquareRootModPrime.test_no_square       // 	*1!"b)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	&AK(8(899999   8<<c                     |                      t                    5 }t          dd           d d d            n# 1 swxY w Y   |                     dt	          |j                             d S )NrO   !   p is not primerW   r[   s     r   test_non_primez%TestSquareRootModPrime.test_non_prime   r^   r_   c                     |                      t                    5 }t          dd           d d d            n# 1 swxY w Y   |                     dt	          |j                             d S )Ni  i  rb   rW   r[   s     r   test_non_prime_with_negativez3TestSquareRootModPrime.test_non_prime_with_negative   s    // 	01!'3///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	&AK(8(899999r_   N)__name__
__module____qualname__rT   r]   rc   re   r   r   r   rM   rM   |   sP        * * *: : :: : :: : : : :r   rM   c                      | t          j        dddz                       | t          j        ddz
                                fd                    }|fS )Nr*      	min_value	max_valuer   c                 ,    t          |           dk    S Nr   r   )r   mods    r   <lambda>z'st_two_nums_rel_prime.<locals>.<lambda>   s    c!SkkQ& r   )stintegersfilter)drawr3   rq   s     @r   st_two_nums_rel_primerw      su     $r{Q!T':::
;
;C
$
a37333::&&&&	
 	
 C
 8Or   c                     d|vrd|d<    | t          j        t                    t          j        |i |                    t
                    z            }|S )Nrl   r   )rs   sampled_fromr   rt   ru   r   )rv   argskwargsr$   s       r   	st_primesr|      sa    &  {D
$$
+t
&v
&
&
-
-h
7
7	8 E Lr   c                      | t          ddz                      } | t          j        dd|dz  z                       }||z  |z  }||fS )Nr*   rj   rm   r   r   rk   )r|   rs   rt   )rv   r$   r3   r4   s       r   st_num_square_primer      s^    DQW---..E
$r{Q!eqj.AAA
B
BC	sU	Bu9r   c                     | t          j        t          ddz            dd                     | t          j        t          j                  dd                    }t	          t
          j        |d           | t          j        dd                              fd	                    }fd
|D             S )zM
    Strategy that returns lists of numbers, all having a common factor.
    r*      r~   r   
   min_sizemax_size   rk   c                 ~    t          j        t          j        t          j                  d          d|           S N   )r   r   r   rs   listsry   )nprimess    r   rr   z&st_comp_with_com_fac.<locals>.<lambda>   s:    bh002>>>   r   c                 L    g | ] }t          t          j        |d           z  !S r   r   operatormul)r   numscom_facs     r   r    z(st_comp_with_com_fac.<locals>.<listcomp>   s,    LLLF8<q))G3LLLr   )	rs   r   r|   ry   r   r   r   rt   flatmap)rv   com_fac_primescomp_primesr   r   s      @@r   st_comp_with_com_facr      s    
 T
QV,,,q2FFF F T
((1rBBB N X\>155G
 $
a2...66   	
 	
 K MLLLLLLLr   c           	      \    | t          j        t          ddz            ddd                    } | t          j        t          j        |          dt	          |          dz
  d                    t          t          j        d          }fd|D             sJ sJ  | t          j        dd	
          	                    fd                    }d |D             } | t          j        dt	          |          
                    }|
                    ||           |S )zQ
    Strategy that returns lists of numbers that don't have a common factor.
    r*   r   r~   r   T)r   r   uniquer   c                     g | ]}|v|	S r   r   )r   iuncom_fac_primess     r   r    z&st_comp_no_com_fac.<locals>.<listcomp>   s$    FFFQA5E,E,Eq,E,E,Er   r   rk   c                 ~    t          j        t          j        t          j                  d          d|           S r   r   )r   leftover_primess    r   rr   z$st_comp_no_com_fac.<locals>.<lambda>   s:    bh99BGGG   r   c                 D    g | ]}t          t          j        |d           S r   r   )r   r   s     r   r    z&st_comp_no_com_fac.<locals>.<listcomp>   s&    GGGvhlD!,,GGGr   r   )rs   r   r|   ry   lenr   r   r   rt   r   insert)rv   r   	uncom_facnumber_primesnumbers	insert_atr   r   s         @@r   st_comp_no_com_facr      sp   
 T
3'''!b	
 	
 	
 F t
OF##[[1_		
 	
 	
  x|%5q99I GFFF&FFFO? D
a2...66   	
 	
 M HGGGGGR[1GEEEFFINN9i(((Nr   suppress_health_checki  deadlinez--fastr   max_examplesc                   P    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S )TestIsPrimec                 (    t          d          sJ d S )N   r   rR   s    r   test_very_small_primez!TestIsPrime.test_very_small_prime  s    |||r   c                 (    t          d          rJ d S )N   r   rR   s    r   test_very_small_compositez%TestIsPrime.test_very_small_composite  s    B<<r   c                 (    t          d          sJ d S )Ni[r   rR   s    r   test_small_primezTestIsPrime.test_small_prime  s    	"""""""r   c                 (    t          d          rJ d S )Ni(  r   rR   s    r   test_special_compositez"TestIsPrime.test_special_composite  s    E??"""""r   c                 4    t          ddz  dz             sJ d S )Nr*      i)  r   rR   s    r   test_medium_prime_1zTestIsPrime.test_medium_prime_1"  $    3'''''''r   c                 4    t          ddz  dz             sJ d S )Nr*   r   i-  r   rR   s    r   test_medium_prime_2zTestIsPrime.test_medium_prime_2&  r   r   c                 4    t          ddz  dz             rJ d S )Nr*   r   i0  r   rR   s    r   test_medium_trivial_compositez)TestIsPrime.test_medium_trivial_composite*  $    AsFUN+++++++r   c                 4    t          ddz  dz             rJ d S )Nr*   r   i/  r   rR   s    r   !test_medium_non_trivial_compositez-TestIsPrime.test_medium_non_trivial_composite-  r   r   c                 N    t          t          d          dz  dz             sJ d S )Nr*   i   i  )r   r   rR   s    r   test_large_primezTestIsPrime.test_large_prime0  s+    A$.///////r   c                 (    t          d          rJ d S )Nl   *i:.S#q.m& r   rR   s    r   test_pseudoprime_base_19z$TestIsPrime.test_pseudoprime_base_194  s    >???????r   c                     t          d                    dd                    }t          |          sJ t          d          D ],}t          |d|dz
  z  dz   z  d|dz
  z  dz   z            s d S -J d	            )
Nz29 674 495 668 685 510 550 154 174 642 905 332 730 771 991 799 853 043 350 995 075 531 276 838 753 171 770 199 594 238 596 428 121 188 033 664 754 218 345 562 493 168 782 883  r   i9  r   ia  Fzcomposite not detected)intreplacer   r.   )rS   r   _s      r   test_pseudoprime_base_300z%TestIsPrime.test_pseudoprime_base_3007  s     " #*'#r"2"2	
 
 {{{r 	3 	3AAA!23sa!e}q7HIJJ  32225r   N)rf   rg   rh   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s               # # ## # #( ( (( ( (, , ,, , ,0 0 0@ @ @3 3 3 3 3r   r   c            
          e Zd Zd Z ej        ed           ed!i e e	ddg           e
 e                      d                                                 Z ej        ed           ed!i e e	g d           e
 e                      d                                                 Z ed!i e e
 ej         ej        dd	d
z            dd                    d                         Zd Z ed!i e e
 ej         ej        dd	d
z            dd                    d                         Z ej        ed           ed!i e e
 e                      d                                     Zej        j         ed!i e e
 ej        dd                     e	d           e	d          d                                                             Zd Zd Zd Zd Z ed!i e e
 ej        dd                              d                     d                         Z  ed!i e e
 e!                      d                         Z"d Z#d S )"TestNumbertheoryc                     t          ddd          dk    sJ t          g d          dk    sJ t          d          dk    sJ d S )Ni            )r   r   r   rD   rp   rR   s    r   test_gcdzTestNumbertheory.test_gcdM  sV    9j*55>>>>666775@@@@1vv{{{{{{r   zwHypothesis 2.0.0 can't be made tolerant of hard to meet requirements (like `is_prime()`), the test case times-out on itig i c                 \    t          |          }d|v s|dk    sJ |D ]}||z  dk    sJ d S Nr   r   rp   rS   r   r   r   s       r   test_gcd_with_com_factorz)TestNumbertheory.test_gcd_with_com_factorR  sQ     LLG||qAvvv% 	 	Aq5A:::::	 	r   )i  i-  i  c                 4    t          |          }|dk    sJ d S ro   rp   )rS   r   r   s      r   test_gcd_with_uncom_factorz+TestNumbertheory.test_gcd_with_uncom_factora  s      LLAvvvvvvr   r   r*   i    rk   r   r   c                 D    t          |          }|D ]}||z  dk    sJ d S Nr   rp   r   s       r   test_gcd_with_random_numbersz-TestNumbertheory.test_gcd_with_random_numbersn  s;     LL 	 	Aq5A:::::	 	r   c                     t          ddd          dk    sJ t          g d          dk    sJ t          d          dk    sJ d S )NrD   r      r   )rD   r   r   r   rR   s    r   test_lcmzTestNumbertheory.test_lcm|  sV    1eU##y0000$$$%%22221vv{{{{{{r   c                 D    t          |          }|D ]}||z  dk    sJ d S r   r   r   s       r   test_lcm_with_random_numbersz-TestNumbertheory.test_lcm_with_random_numbers  s;     LL 	 	Aq5A:::::	 	r   c                 L    |\  }}t          ||          }||z  |z  |k    sJ d S r   r9   )rS   valssquarer$   calcs        r   test_square_root_mod_primez+TestNumbertheory.test_square_root_mod_prime  s<     $VU33d{U"f,,,,,,r   l    J)l   5yl   1n
Yc                 j    t          |          }d}|D ]}||d         |d         z  z  }||k    sJ d S r   )r   )rS   r3   factorsmultr   s        r   test_factorizationz#TestNumbertheory.test_factorization  sN      $$ 	! 	!AAaDAaDL DDs{{{{{{r   c                     d}dt           v sJ dt           v sJ t          |          }d}|D ]}||d         |d         z  z  }||k    sJ d S )Ni(  r>   g   r   r   r   r   rS   expr   r   r   s        r   test_factorisation_smallprimesz/TestNumbertheory.test_factorisation_smallprimes  ss    k!!!!k!!!!$$ 	! 	!AAaDAaDL DDs{{{{{{r   c                     d}dt           vsJ dt           vsJ t          |          }d}|D ]}||d         |d         z  z  }||k    sJ d S )Ni;< i  i  r   r   r   r   s        r   "test_factorisation_not_smallprimesz3TestNumbertheory.test_factorisation_not_smallprimes  ss    ;&&&&;&&&&$$ 	! 	!AAaDAaDL DDs{{{{{{r   c                 2    t          dd          dk    sJ d S )Nr   rD   r   rR   s    r   test_jacobi_with_zeroz&TestNumbertheory.test_jacobi_with_zero  !    a||q      r   c                 2    t          dd          dk    sJ d S )Nr   rD   r   rR   s    r   test_jacobi_with_onez%TestNumbertheory.test_jacobi_with_one  r   r   rD   i  c                     | dz  S r)   r   r   s    r   rr   zTestNumbertheory.<lambda>  s
    QU r   c                 H   t          |          }t          |          rt                      }t          d|          D ]E}t          |          }t	          ||z  |          dk    sJ |                    ||z  |z             Ft          d|          D ]+}||vr%t          |          }t	          ||          dk    sJ ,d S t          |          }t          d|          D ]A}d}|D ]$}|t	          ||d                   |d         z  z  }%|t	          ||          k    sJ Bd S )Nr   r!   r   )r   r   r-   r.   r   r/   r   )rS   rq   r2   r5   r   r   r:   cs           r   test_jacobizTestNumbertheory.test_jacobi  sW    #hhC== 	+eeGa / /4yydTk3//14444D4K#-....1c]] 0 0G##AA!!S>>R////0 0
 $C((G1c]] + +  1 1A1Q4AaD00AAF1cNN*****	+ +r   c                 n    |\  }}t          ||          }d|cxk     r|k     sn J ||z  |z  dk    sJ d S )Nr   r   r   )rS   r   r3   rq   invs        r   test_inverse_modz!TestNumbertheory.test_inverse_mod  sV     S#s##3}}}}}}}}}}Sy3!######r   c                 2    dt          dd          k    sJ d S )Nr      r  rR   s    r   test_inverse_mod_with_zeroz+TestNumbertheory.test_inverse_mod_with_zero  s#    K2&&&&&&&&r   Nr   )$rf   rg   rh   r   unittest
skipUnless
HC_PRESENTr   HYP_SLOW_SETTINGSr   r   r   r   r   r   rs   r   rt   r   r   r   r   r   r0   markslowr   r   r   r   r   ru   r   rw   r  r  r   r   r   r   r   L  s<         
 X	  X""!""Wj*%&&
U!!""  #" '& #"  X	  X""!""W  
U    !  !  #"  X""!""
UBK!q$w777	
 	
 	
    #"  
 X""!""
UBK!q$w777	
 	
 	
    #"
 X	  X""!""
U  !!- - "! #" - [X""!""
U;2;f55566WW    !   76 #" 
    ! ! !! ! ! X""!""
U;2;d333::??KKLL+ + ML #"+( X""!""
U  ""##$ $ $# #"$' ' ' ' 'r   r   )<r   	functoolsr   sys	unittest2r  ImportErrorhypothesis.strategies
strategiesrs   r0   
hypothesisr   r   r   r   r	  numbertheoryr	   r
   r   r   r   r   r   r   r   r   r   gmpy2r   gmpy	BIGPRIMESr  parametrizezipr&   r+   r  r7   r;   r?   rF   rK   TestCaserM   	compositerw   r|   r   r   r   HYP_SETTINGSfilter_too_muchtoo_slowargvdictr
  r   r   r   r   r   <module>r!     s          



        OOOOO " " " " " "  / / / / / / / / / /&&&&&&JJ   JJJ                               	 	 	 	 		0 LLYss^Yqrr])K)KLLL ' ' ' 


++    ,+  +..4 4 /. 4   
" " "
          : : : : :X. : : :0 	 	 	       M M M: + + +\  $#-L()
  $Lsx#%L  D&& sx()n%%(*n%43 43 43 43 43(# 43 43 43nW' W' W' W' W'x( W' W' W' W' W'sS    	!!A AA*A1 1B7A>=B>B	BB		BB