
    ¿ig~                         d Z ddlZddlZddlmZ ddlT ddlmZ  G d dej                  Z	 G d d	e	          Z
 G d
 dej                  Zi fdZedk    rd Z ej        d           dS dS )zSelf-test for Math.Numbers    N)list_test_cases)*)IntegerNativec                   L   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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. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6d5 Z7d6S )7TestIntegerBasec                      t          d          )NzTo be implemented)NotImplementedErrorselfs    a/var/www/html/afkarena/venv/lib/python3.11/site-packages/Cryptodome/SelfTest/Math/test_Numbers.pysetUpzTestIntegerBase.setUp0   s    !"5666    c                 ,    t          | j        |          S N)mapInteger)r   args     r   IntegerszTestIntegerBase.Integers3   s    4<%%%r   c                 @   | j         } |d          } ||          } |d          }|                     t          |d            |d          } |d          } |d          } |d          } |d          }	|                     ||           |                     |d           |                     ||           |                     |d           |                     |d           |                     |d           |                     |d           |                     |d           |                     |	d           |                     ||k                ||          }|                     ||           |                      |d	          d k               d S )
N   g      ?l    d(	 l d(	   l    l    r   )r   assertRaises
ValueErrorassertEqualassertFalse)
r   r   v1v2v3v4v5v6v7v8s
             r   test_init_and_equalityz&TestIntegerBase.test_init_and_equality6   s   ,WR[[WR[[WR[[*gs333WV__WWWV__WZ  W'((R   R   R   R   X&&&Y'''V$$$Z(((/000r""" WR[[R   t+,,,,,r   c                     |                      dddz            \  }}|                     t          |          d           |                     t          |          ddz             d S )Ni     )r   r   intr   r   r   s      r   test_conversion_to_intz&TestIntegerBase.test_conversion_to_intW   s_    sAI..BR#&&&R!t),,,,,r   c                    |                      ddddz            \  }}}|                     |dk               |                     |dk               |                     |dk               |                     |ddz  k               d S )Nr   ir'   r(      r   
assertTruer   r   r   r   r   s       r   test_equality_with_intsz'TestIntegerBase.test_equality_with_ints\   s    ]]2sAI66
Bb!!!c	"""r"""a4i(((((r   c                 v   |                      dddddz            \  }}}}|                     t          |          dk               |                     t          |          dk               |                     t          |          dk               |                     t          |          d	k               d S )
N   r   ir'   r(   200z-20.  10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376)r   r/   strr   r   r   r   r    s        r   test_conversion_to_strz&TestIntegerBase.test_conversion_to_strc   s    r1c19==BBB4(((B3'''B5()))B  $T  T  	U  	U  	U  	U  	Ur   c                     |                      dddz            \  }}|                     t          |          d           |                     t          |          d           d S )Nr'   P   zInteger(-1)z"Integer(1208925819614629174706176))r   r   reprr*   s      r   	test_reprzTestIntegerBase.test_reprj   s\    r1b5))Bb=111b#GHHHHHr   c                    | j         } |d          }|                     d|                                            |d          }|                     d|                                            |d          }|                     d|                                           |                     d|                    d                     |                     t          |j        d	           |                     d
|                    d                     |                     d|                    dd                      |d          }|                     d|                                           |                     d|                    d                     |                     d|                    d                     |                     d|                    dd                     |                     t          |j        d            |d          }|                     t          |j                   |                     t          |j        d           d S )Nr       r      i  s   s          s   little	byteorders    l   ";3oUs	    "s	   "̻ s
     "
   s
   "̻     bittle)r   r   to_bytesr   r   )r   r   v0r   r   r   r    s          r   test_conversion_to_bytesz(TestIntegerBase.test_conversion_to_byteso   s!   ,WQZZ"++--000WT]]"++--000WV__bkkmm444"++a..999*bk1555bkkHk&E&EFFF"++a8+*L*LMMMW)**@"++--PPP@x88	: 	: 	:DR	* 	* 	*DR8<<	> 	> 	>*bk1555WS\\*bk222*bkXFFFFFr   c                    | j         }|                    d          }|                     t          ||                     |                     d|           |                    d          }|                     d|           |                    d          }|                     d|           |                    dd          }|                     d|           |                    dd          }|                     d|           |                    dd	          }|                     d
|           |                     t          |j        dd           d S )Nr@   r   s    rC   s   r   bigrE   rD         	rJ   )r   
from_bytesr/   
isinstancer   r   r   )r   r   r   r   r   r    r!   r"   s           r   test_conversion_from_bytesz*TestIntegerBase.test_conversion_from_bytes   sJ   ,((
2w//000B,,B,,$$$U33Bu==Bx@@$$$*g&8'8LLLLLr   c                    |                      dddd          \  }}}}|                     ||k               |                     |dk               |                     ||k               |                     |dk               |                     ||k               |                     ||k               |                     |                     d          d k               d S )NY   Z   r   )r   r/   r   r   r8   s        r   test_inequalityzTestIntegerBase.test_inequality   s    r2r266BBb!!!b!!!r"""r"""b!!!b!!!Q4/00000r   c                    |                      ddddd          \  }}}}}|                     ||k                |                     |dk                |                     ||k                |                     |dk                |                     ||k                |                     ||k                |                     ||k                |                     ||k                d S N      rX      r.   r   r   r   r   r    r!   s         r   test_less_thanzTestIntegerBase.test_less_than   s    !]]2r2r7CCBBR   R   b!!!b!!!R   b!!!R   b!!!!!r   c                    |                      ddddd          \  }}}}}|                     ||k               |                     |dk               |                     ||k               |                     |dk               |                     ||k               |                     ||k               |                     ||k               |                     ||k               d S )Nr\   r]   r^   r.   r_   s         r   test_less_than_or_equalz'TestIntegerBase.test_less_than_or_equal   s    !]]2r2r7CCBBb!!!b!!!b!!!b!!!b!!!r"""b!!!r"""""r   c                    |                      ddddd          \  }}}}}|                     ||k               |                     |dk               |                     ||k               |                     ||k               |                     |dk               |                     ||k               |                     ||k               |                     ||k               |                     ||k               d S r[   r.   r_   s         r   test_more_thanzTestIntegerBase.test_more_than   s    !]]2r2r7CCBBR   R   b!!!b!!!b!!!R   b!!!R   b!!!!!r   c                 l   |                      dddd          \  }}}}|                     ||k               |                     |dk               |                     ||k               |                     ||k               |                     |dk               |                     ||k               d S )Nr\   r]   rb   r.   r8   s        r   test_more_than_or_equalz'TestIntegerBase.test_more_than_or_equal   s    r2r266BBb!!!b!!!b!!!b!!!b!!!r"""""r   c                 p   |                      dddd          \  }}}}|                     |           |                     t          |                     |                     |           |                     t          |                     |                     |           |                     |           d S )Nr   rG   r   r^   )r   r   boolr/   r8   s        r   	test_boolzTestIntegerBase.test_bool   s    q"b'::BBb"""R!!!r   c                    |                      ddz   dddddz            \  }}}}}|                     |                                           |                     |                                           |                     |                                           |                     |                                           d S )NrB   d   r   )r   r/   is_negativer   r_   s         r   test_is_negativez TestIntegerBase.test_is_negative   s    !]]AH9b!Q3GGBB(()))(()))))***))*****r   c                    |                      ddd          \  }}}|                     t          ||z   | j                             |                     ||z   d           |                     |dz   d           |                     ||z   d           |                     |dz   d           |                     |dz   d           d S )N   rW   a   r   r^   i  r   r/   rS   r   r   r0   s       r   test_additionzTestIntegerBase.test_addition   s    ]]1b"--
B
27DL99:::b"%%%b"%%%b!$$$rA&&&g{33333r   c                    |                      ddd          \  }}}|                     t          ||z
  | j                             |                     ||z
  d           |                     |dz
  d           |                     ||z
  d           |                     |dz
  d           |                     |dz
  d           d S )	Nrq   rW   rr   S   rs   r]   r^   irt   r0   s       r   test_subtractionz TestIntegerBase.test_subtraction   s    ]]1b"--
B
27DL99:::b"%%%a$$$b"%%%rB'''g{33333r   c                 ^   |                      dddd          \  }}}}|                     t          ||z  | j                             |                     ||z  d           |                     |dz  d           |                     |dz  d           |                     |dz  d           d S )N      r^   r3   rX   i   rt   r8   s        r   test_multiplicationz#TestIntegerBase.test_multiplication  s    q!R99BB
27DL99:::b"%%%a$$$b"%%%g}55555r   c                    |                      ddddz            \  }}|                     t          |z  | j                             |                     |z  d           |                     |dz  d           |                     |dz  d           |                     |ddz  z  d           |                     t          fd           d S )NrB   rH   r'   r<   rm   O   c                       dz  S Nr    r   s   r   <lambda>z0TestIntegerBase.test_floor_div.<locals>.<lambda>  s    R1W r   )r   r/   rS   r   r   r   ZeroDivisionErrorr   r   r   r   s      @r   test_floor_divzTestIntegerBase.test_floor_div  s    ]]1ab11
B
28T\::;;;r1%%%q!$$$r2&&&qBw***+____=====r   c                    |                      ddd          \  }}|                     t          |z  | j                             |                     |z  d           |                     dz  d           |                     |dz  d           |                     dz  d           |                     t          fd           |                     t          fd           d S )	Nr   r{   rb   rB   rC   r^   c                       dz  S r   r   r   s   r   r   z0TestIntegerBase.test_remainder.<locals>.<lambda>  s    R!V r   c                       dz  S )Nr   r   s   r   r   z0TestIntegerBase.test_remainder.<locals>.<lambda>  s    b2g r   )r   r/   rS   r   r   r   r   r   r   s      @r   test_remainderzTestIntegerBase.test_remainder  s    ]]2q"--
B
27DL99:::b!$$$a###a###gr***+^^^^<<<*oooo66666r   c                 .   |                      ddd          \  }}}|                     t          ||z  | j                             |                     ||z  d           |                     t          ||          d           |                     |dz  d           |                     t          |d          d           |                     |dz  d           |                     |dz  d           |                     t          t
          |d           d S )Nrz   rB   r|   @   r'   rX   rm   )r   r/   rS   r   r   powr   r   r0   s       r   test_simple_exponentiationz*TestIntegerBase.test_simple_exponentiation!  s   ]]1a,,
B
28T\::;;;r2&&&Rb)))q"%%%RR(((q!$$$q"%%%*c2r22222r   c           	         |                      ddd          \  }}}|                     t          t          |||          | j                             |                     t          |||          d           |                     t          |d|          d           |                     t          ||d          d           |                     t          |dd          d           |                     t          |dd          d           |                     t          |dddz            d           |                     t          |ddz  d	          d
           |                     t          t          |dd           |                     t          t          |dd           |                     t          t          |dd           d S )Nr   r{      rq   r   rC   r'   r<   i\ iE  rb   rm   rH   )	r   r/   rS   r   r   r   r   r   r   r0   s       r   test_modular_exponentiationz+TestIntegerBase.test_modular_exponentiation-  s   ]]2q"--
B
3r2r??DLAABBBRR!,,,RR!,,,RR!,,,RR!,,,RR!,,,RQ"W--r222Rb5115999+S"a;;;*c2q"555*c2r155555r   c                    |                      d          }|                    d           |                     |d           |                      d          }|                    dd           |                     |d           d S )Nrz   r'         rC   )r   inplace_powr   r   r   s     r   test_inplace_exponentiationz+TestIntegerBase.test_inplace_exponentiation=  sx    \\!__
qR   \\!__
q"Qr   c                    |                      ddz   dddddz            \  }}}}}|                     t          |          ddz             |                     t          |          d           |                     t          |          d           |                     t          |          d           |                     t          |          ddz             d S )Nr'   rl   r|   r   )r   r   absr_   s         r   test_abszTestIntegerBase.test_absF  s    !]]AH9b!QSIIBBR!s(+++R!$$$R!$$$R!$$$R!s(+++++r   c                 |   |                      dddddz            \  }}}}|                     t          |j                   |                     |                                d           |                     |                                d           |                     |                                ddz             d S )Nr|   r   1   rG   rl   rq   2   )r   r   r   sqrtr   r8   s        r   	test_sqrtzTestIntegerBase.test_sqrtN  s    r1b"c'::BB*bg...A&&&A&&&BF+++++r   c                    |                      t          |                     d          j        d           |                      t          |                     d          j        d           |                     d                              d          dk    sJ |                     d                              d          dv sJ dD ]P}t	          d|          D ]=}|dz  |z  }|                     |                              |          }||||z
  fv sJ >Q|                      t          |                     d          j        d           |                      t          |                     d	          j        d
           |                     d                              d          dv sJ |                     d                              d          dv sJ d S )Nr{   r   r;   rC   )rC   rz   )   r\   r      r         %   )   +   /   5   r'   r   rz   rG   r   )rz   rq   r   )r   r   r   r   range)r   pisquareress        r   test_sqrt_modulez TestIntegerBase.test_sqrt_moduleV  s    	*dll1oo&:A>>>*dll1oo&:B??? ||A##A&&!++++||A##A&&&0000 B 	) 	)A1a[[ ) )All6**//22q!a%j((((() 	*dll1oo&:B??? 	*dll1oo&:B??? ||F##((,,6666||F##((,,666666r   c                 "   |                      dd          \  }}||z  }|                     |d           |dz  }|                     |d           |dz  }|                     |d           |ddz  z  }|                     |dddz  z              d S )	NrG   r3      (   r;   '   r'   r(   r   r   r*   s      r   test_in_place_addz!TestIntegerBase.test_in_place_addq  s    r2&&B
bR   
bR   
bR   
a4iR!t)^,,,,,r   c                    |                      dd          \  }}||z  }|                     |d           |dz  }|                     |d           |dz  }|                     |d           |dz  }|                     |d	           d S )
NrG   r3   iirW   i_ iʠi`yij'  r   r*   s      r   test_in_place_subz!TestIntegerBase.test_in_place_sub}  s    r2&&B
bS!!!
d
R   
eV$$$
gU#####r   c                 "   |                      dd          \  }}||z  }|                     |d           |dz  }|                     |d           |dz  }|                     |d           |ddz  z  }|                     |dddz  z             d S )	NrB   r{   r   r'   r   r|   ir(   r   r*   s      r   test_in_place_mulz!TestIntegerBase.test_in_place_mul  s    q!$$B
bR   
aR   
bS!!!
a4iSAI./////r   c                 "                          dd          \  }}||z  }                     |d           |ddz  z  }                     |d           |dz  }                     |d            fd}                     t          |           d S )Nr3   rq      r'   r(   r   c                  <                         d          } | dz  } d S )N	   r   r   )r   r   s    r   tz0TestIntegerBase.test_in_place_modulus.<locals>.t  s    aB!GBBBr   )r   r   r   r   )r   r   r   r   s   `   r   test_in_place_modulusz%TestIntegerBase.test_in_place_modulus  s    r1%%B
bQ
a4iQ
aQ	 	 	 	 	 	+Q/////r   c                    |                      ddd          \  }}}|                     t          ||z  | j                             |                     ||z  d           |                     |dz  d           |                     ||z  d           |                     |dz  d           |                     |dz  d           |                     |ddz  dz   z  d           d S )N   r   0      r'   r(   rt   r0   s       r   test_andzTestIntegerBase.test_and  s    ]]4t44
B
27DL99:::b$'''dD)))b$'''dD)))dD)))qDy4/0$77777r   c                 l   |                      ddd          \  }}}|                     t          ||z  | j                             |                     ||z  d           |                     |dz  d           |                     ||z  d           |                     |ddz  z  ddz  dz              d S )Nr      r      ir'   r(   rt   r0   s       r   test_orzTestIntegerBase.test_or  s    ]]4t44
B
27DL99:::b$'''dD)))b$'''a4idT)9:::::r   c                    |                      ddd          \  }}|                     dz	             |                     t          |z	  | j                             |                     |z	  d           |                     dz	  d           |                     t          fd           |                     ddz  z	  d           |                     |dz	  d	           |                     |ddz  z	  d
           d S )Nr   rC   r   rH   c                       dz	  S Nr;   r   r   s   r   r   z2TestIntegerBase.test_right_shift.<locals>.<lambda>      bBh r   r'   r(   rX   r;   r   r   r/   rS   r   r   r   r   s      @r   test_right_shiftz TestIntegerBase.test_right_shift  s   ]]4E22
Bq"%%%
28T\::;;;r4(((q$'''*&6&6&6&6777T	*A...q%(((T	*B/////r   c                                           ddd          \  }}}|dz  }                     |d           |dz  }                     |d           ||z  }                     |d           |dz  }                     |d            fd}                     t          |            fd	}                     d |                        fd
}                     d |                       d S )Nr   rC   r   r   rH   rz   rX   c                  <                         d          } | dz  } d S N   r;   r   r    r   s    r   lz4TestIntegerBase.test_in_place_right_shift.<locals>.l  !    d##B2IBBBr   c                  B                         d          } | ddz  z  } | S Nr   r'   r(   r   r   s    r   m1z5TestIntegerBase.test_in_place_right_shift.<locals>.m1  s'    d##B19BIr   c                  B                         d          } | ddz  z  } | S )Nr;   r'   r(   r   r   s    r   m2z5TestIntegerBase.test_in_place_right_shift.<locals>.m2  s'    b!!B19BIr   r;   r   r   r   r   )r   r   r   r   r   r   r   s   `      r   test_in_place_right_shiftz)TestIntegerBase.test_in_place_right_shift  s?   ]]4E22
B
qT"""
qT"""
r	T"""
qU###	 	 	 	 	 	*a(((	 	 	 	 	 	BBDD!!!	 	 	 	 	 	RRTT"""""r   c                    |                      ddd          \  }}|                     dz             |                     t          |z  | j                             |                     |z  d           |                     dz  d           |                     |dz  d           |                     t          fd           |                     t          fd           d S )	Nr   rC   r   r       c                       dz  S r   r   r   s   r   r   z2TestIntegerBase._test_left_shift.<locals>.<lambda>  r   r   c                       ddz  z  S )Nr'   r(   r   r   s   r   r   z2TestIntegerBase._test_left_shift.<locals>.<lambda>  s    bQ$Y.? r   r   r   s      @r   _test_left_shiftz TestIntegerBase._test_left_shift  s    ]]4E22
Bq"%%%
28T\::;;;r4(((q$'''q%(((*&6&6&6&6777*&?&?&?&?@@@@@r   c                                           ddd          \  }}}|dz  }                     |d           |dz  }                     |d           ||z  }                     |d           |dz  }                     |d            fd}                     t          |            fd	}                     t          |           d S )
Nr   rC   r   r   r   r   r   c                  <                         d          } | dz  } d S r   r   r   s    r   r   z3TestIntegerBase.test_in_place_left_shift.<locals>.l  r   r   c                  B                         d          } | ddz  z  } d S r   r   r   s    r   mz3TestIntegerBase.test_in_place_left_shift.<locals>.m  s&    d##B19BBBr   r   )r   r   r   r   r   r   s   `     r   test_in_place_left_shiftz(TestIntegerBase.test_in_place_left_shift  s   ]]4E22
B
qT"""
qT"""
r	T"""
qU###	 	 	 	 	 	*a(((	 	 	 	 	 	*a(((((r   c                 x   |                      ddd          \  }}}|                     |                    d          d           |                     |                    d          d           |                     |                    |          d           |                     |                    d          d           |                     |                    d          d           |                     t          |j        d           |                     |                    dd	z            d           |                     t          |j        d           |                     t          |j        d           |                     t          |j        d           |                     t          |j        d
           d S )Ni  rm   rC   r   rH   r   r;   r'   r(   i  )r   r   get_bitr   r   r0   s       r   test_get_bitzTestIntegerBase.test_get_bit  sk   ]]5"a00
BA***A***B+++A***A****bj"555AI..222*bj"555*bj!444*bj!444*bj(;;;;;r   c                 P   |                      ddddd          \  }}}}}|                     |                                           |                     |                                           |                     |                                           |                     |                                           |                     |                                           |                     |                                           |                     |                                           |                     |                                           |                     |                                           |                     |                                           d S )Nr   rz   r   rb   i)r   r/   is_evenr   is_oddr_   s         r   test_odd_evenzTestIntegerBase.test_odd_even  s:   !]]1aR==BB

%%%

%%%&&&

%%%&&&%%%%%%		$$$%%%		$$$$$r   c                 p   |                      dddd          \  }}}}|                     |                                d           |                     |                                d           |                     |                                d           |                     t          |j                   d S )Nr   rC   rP   rI   r   )r   r   size_in_bitsr   r   r8   s        r   test_size_in_bitsz!TestIntegerBase.test_size_in_bits  s    q!UC88BB**A...**A...**A...*bo66666r   c                    |                      dddddd          \  }}}}}}|                     |                                d           |                     |                                d           |                     |                                d           |                     |                                d           |                     |                                d           |                     t          |j                   d S )	Nr   rC      i  i   r   r'   rB   )r   r   size_in_bytesr   r   r   r   r   r   r   r    r!   r"   s          r   test_size_in_bytesz"TestIntegerBase.test_size_in_bytes  s    !%q!T5'2!N!NBBB))++Q///))++Q///))++Q///))++Q///))++Q///*bo66666r   c                    |                      |                     d                                                     |                     |                     d                                                     |                     |                     d                                                     |                      |                     d                                                     |                      |                     d                                                     |                     |                     d                                                     |                     |                     d                                                     |                      |                     d                                                     t	          d	d
          D ]}|                      |                     |dz  dz                                                        |                     |                     |dz                                                       d S )Nr   r   rC   r'   rB   rz   i  i  rl   r(   )r   r   is_perfect_squarer/   r   )r   xs     r   test_perfect_squarez#TestIntegerBase.test_perfect_square'  s   b));;==>>>Q99;;<<<Q99;;<<<a::<<===a::<<===Q99;;<<<U++==??@@@g..@@BBCCCsD!! 	D 	DAT\\!Q$q&11CCEEFFFOODLLA..@@BBCCCC	D 	Dr   c                 D   |                      ddd          \  }}}|                    d           |                    d           |                    ddz             |                     t          |j        d           |                     t          |j        |           d S )N   irz   rq   r'   r<   )r   fail_if_divisible_byr   r   r0   s       r   test_fail_if_divisible_byz)TestIntegerBase.test_fail_if_divisible_by6  s    ]]2sA..
B 	"""
"""
R((( 	*b&=qAAA*b&=rBBBBBr   c                    |                      ddd          \  }}}|                    ||           |                     |d           |                    |d           |                     |d           |                    d|           |                     |d           |                    dd           |                     |d	           |                    dd           |                     |d
           |                    dddz             |                     |d
ddz  z              |                    ddz  d           |                     |d
ddz  z              d S )Nrz   rB   r'   rG   r      rC   r|   r3      r(     )r   multiply_accumulater   r0   s       r   test_multiply_accumulatez(TestIntegerBase.test_multiply_accumulateB  so   ]]1a++
B
r2&&&R   
r1%%%R   
q"%%%R   
q"%%%R   
r1%%%R   
q!t),,,R!t)^,,,
qDy!,,,R!t)^,,,,,r   c                    |                      dd          \  }}|                    |           |                     |d           |                    d           |                     |d           |                    d           |                     |d           |                    ddz             |                     |ddz             d S )NrB   r   r   r|   r'   r(   )r   setr   r*   s      r   test_setzTestIntegerBase.test_setS  s    q!$$B
r


Q
q			Q
r


R   
qDyQ$Y'''''r   c                 `   |                      dddddd          \  }}}}}}|                     t          |                    |          | j                             |                     |                    |          d           |                     |                    d          d           |                     |                    d          d           |                     |                    d          d	           |                     |                    d
          d           |                     t          |j        d           |                     t          |j        d           |                     t          |j        d           |                     t          |j        d           d S )Nr'   r{   rm   r   i ii  rB   iiKS~i&  i  rG   )	r   r/   rS   inverser   r   r   r   r   r   s          r   test_inversezTestIntegerBase.test_inverse^  se   !%q!RFD!I!IBBB
2::b>>4<@@AAAB+++A***A***H--x888D))4000*bj"555*bj"555*bj"555+RZ;;;;;r   c                     |                      dd          \  }}|                    |           |                     |d           d S )Nr'   r{   rB   )r   inplace_inverser   r*   s      r   test_inplace_inversez$TestIntegerBase.test_inplace_inversem  sI    q!$$B
2Qr   c                 P   |                      dddd          \  }}}}|                     t          |                    |          | j                             |                     |                    |          d           |                     |                    d          d           |                     |                    |          d           |                     |                    d          d           |                     |                    d          d           d S )Nr   rG   r   r|   r'   rC   )r   r/   rS   gcdr   r   r8   s        r   test_gcdzTestIntegerBase.test_gcds  s    q"b"55BB
266"::t|<<===Q'''Q'''Q'''Q'''A&&&&&r   c                    |                      ddddd          \  }}}}}|                     t          |                    |          | j                             |                     |                    |          d           |                     |                    d          d           |                     |                    |          d           |                     |                    d          d           |                     |                    d          d           |                     |                    d          d           |                     |                    d          d           d S )Nr   rG   r   r|   r   r   f   )r   r/   rS   lcmr   r   r_   s         r   test_lcmzTestIntegerBase.test_lcm|  s4   !]]1b"b!<<BB
266"::t|<<===R(((R(((S)))Q'''A&&&A&&&A&&&&&r   c           
      B   d}| j         j        }t          dd          D ]"}|                      ||d          d           #t          ddd          D ]"}|                      |d|          d           #|                     t
          |dd           |                     t
          |dd           |                     t
          |dd           |                     t
          |dd           |                     t
          |dd           |                     t
          |dd	           |                     t
          |dd           |                     t
          |dd
           |D ]}|                      ||d         |d                   |d                    |                      ||                      |d                   |d                   |d                    |                      ||d         |                      |d                             |d                    d S )N))r  rC   rC   )r   -   rC   )rH      r;   )r{   r  rC   )ib  i  r;   )r  i&  r;   )r{   l   -& r;   rC   r   r'   r   r|   r;   r   rz   rH   )r   jacobi_symbolr   r   r   r   )r   datajskntvs         r   test_jacobi_symbolz"TestIntegerBase.test_jacobi_symbol  s!    \' q" 	* 	*ARR1XXq))))q"a 	* 	*ARR1XXq)))) 	*b!R000*b!R000*b!Q///*b!Q///*b!Q///*b!Q///*b!Q///*b!Q/// 	D 	DBRR1r!u--r!u555RRRU 3 3RU;;RUCCCRR1t||BqE':':;;RUCCCC	D 	Dr   c                    dg dfdg dfdg dfdg dfd	g d
fdg dfdg dfdg dfdg dfdg dfdg dfdg dfdg dfdg dfg}| j         j        }|D ]-\  }}|D ]%\  }}|                      |||          |           &.d S )NrB   )rC   rC   r'   r;   rB   r   rz   rC   r{   r;   r   r   rq   rC   rH   r;   r   r   rG   rC   r   r;   r  r   r\   rC   r]   r;   r   r   r   rC   r   r;   r  r   r   rC   r3   r;   r  r   r  rC   r   r;   r-   r      rC      r;      r      rC   r   r;   r   r   r{   )r%  r&  rB   r;   r(  r{   r   r   rC   rq   r;   r,  r   rC   rG   r   r   rC   r  r;   r\   r;   r]   rC   r3  r4  r5  r  r;   r7  r3   r   r  rC   r  r;   r;  r-   rC   r>  r   r@  rC   rB  r;   rD  r;   r   rC   rF  rq   )r%  r'   rC   rG  r(  r)  r   r;   rq   r   rH   rC   rK  rG   r;   rM  rN  rO  r]   r   r   rC   r4  r5  r  rC   r   r;   r8  r9  r:  r   rC   r-   r;   r=  r?  rX  rD  r   rZ  r   rC   r   )r%  r[  r'  r(  r{   rC   r*  r+  r^  r-  r.  rM  r0  r1  rP  r3  r4  r   rC   r6  r7  r3   rC   r9  r:  rd  r<  r=  rW  rA  rC  rZ  rF  r   )r%  r&  rB   rC   r(  rh  r\  rJ  r,  rK  r_  )r   r   r  rC   rO  rP  ra  r4  r5  rQ  rc  rj  r  r;   )r  r   rd  re  r=  rW  rB  rC   rY  rE  r   r;   r\   )r%  r&  rk  r(  r)  r\  rJ  r,  rK  r.  r/  rl  )r\   r   rP  r   r;   r4  ri  rQ  rc  r8  rm  r:  rd  re  r=  )r@  r   rn  rY  rZ  rg  r   )r%  r[  r'  r(  rH  r*  rJ  r^  r-  rL  r/  r0  rO  r2  r3  r4  ri  r6  r7  rR  r9  rT  rd  r<  rV  r?  rA  rY  rE  rF  r   )r%  r[  rG  r(  r)  r\  rJ  r^  rK  r_  r/  rN  r1  r2  ra  r4  )r   r   rb  r7  r8  rS  rT  r;  re  r=  rW  rX  rY  rE  rg  r   )r%  r&  rG  r(  rh  rI  r+  r,  rK  r_  rM  rN  rO  r2  rp  r4  ri  rQ  )r   r   rj  rm  rT  rd  rU  r=  rW  rX  rC  rE  rg  r  )r%  r&  r'  r(  rh  r*  r]  r,  r-  r_  r/  r0  rO  r`  r3  r4  ri  r6  rc  rj  r9  r:  r;  r<  r=  rW  rA  rf  rE  rF  r   )r%  r[  rk  r(  r)  rI  rJ  r^  rK  r_  r/  rl  r1  r2  rp  r4  r5  rb  rc  r8  rm  rT  )r   r   rU  r=  rW  rn  rY  rZ  ro  r>  )r%  r[  rk  r(  rH  rI  r+  r^  rK  rL  rM  rl  r1  rP  r3  r4  ri  rb  r7  rR  rS  r:  rd  rU  rV  rW  rn  rC  rZ  rF  rB  r   )r%  r&  rG  r(  rh  rI  r+  r,  rK  r_  r/  rN  r1  r2  rp  r4  r5  rQ  rc  rj  rm  r:  rd  rU  r=  r?  rX  rC  )r   r   rg  )r   r  r   )r   r"  r  r!  kjr   js          r   test_jacobi_symbol_wikipediaz,TestIntegerBase.test_jacobi_symbol_wikipedia  s      `  `  `  a  b  b  b  c  b  b  b  c  V  V  V  W  e  e  e  f  d  d  d  e  _  _  _  `  f  f  f  g  d  d  d  e  _  _  _  `  d  d  d  e  W  W  W  X  a  a  a  b  e  e  e  f" \' 	. 	.EAr . .1  Aq1----.	. 	.r   c                 z    |                      d          \  }|                     t          |          d           d S )Nr   0x10)r   r   hexr   s     r   test_hexzTestIntegerBase.test_hex  s7    mmD!!R&)))))r   c                    | j         j        } |ddd          }|                     |d            |ddd          }|                     |d            |ddd          }|                     |d            |ddd          }|                     |d            |ddd          }|                     |d           d	d
z  dz
  }ddz  }ddz  }d}|                     | ||||                     |                     t          |ddd           |                     t
          |ddd           |                     t
          |ddd           d S )Nrz   r{   r      r   ir   r-   r'   i   rC   r\   rl   r   s@   (ynpqB,f)Z*r}q:'z8%	[CUE2:r   r;   )r   _mult_modulo_bytesr   r   r   r   )r   modmultr   modulust1t2expects          r   test_mult_modulo_bytesz&TestIntegerBase.test_mult_modulo_bytes  s   ,1gaBg&&&gfa$$g&&&ga$$g&&&gfa$$g&&&ga$$g&&&S&1*WW HR!9!9:::+WaA>>>*gq!R888*gq!Q77777r   N)8__name__
__module____qualname__r   r   r%   r+   r1   r9   r>   rM   rT   rY   r`   rc   re   rg   rj   ro   ru   rx   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#  rs  rw  r  r   r   r   r   r   .   sI       7 7 7& & &- - -B- - -
) ) )U U UI I I
G G G>M M M0	1 	1 	1
" 
" 
"
# 
# 
#" " "# # #  + + +4 4 44 4 46 6 6> > >	7 	7 	7
3 
3 
36 6 6      , , ,, , ,7 7 76
- 
- 
-
$ 
$ 
$
0 
0 
00 0 08 8 8; ; ;
0 
0 
0# # #2A A A) ) )(< < < % % %7 7 77 7 7D D D
C 
C 
C- - -"	( 	( 	(< < <     ' ' '	' 	' 	'!D !D !DF. . .4* * *8 8 8 8 8r   r   c                       e Zd Zd ZdS )TestIntegerIntc                     t           | _        d S r   )r   r   r
   s    r   r   zTestIntegerInt.setUp  s    $r   Nr  r  r  r   r   r   r   r  r    s#        % % % % %r   r  c                   &    e Zd Zd Zd Zd Zd ZdS )testIntegerRandomc                 ~   t          d          D ]I}t          j        d          }|                     |dk                |                     |dk               Jt          dd          D ]R}t          j        |          }|                     |d|d	z
  z  k                |                     |d|z  k               Sd S )
Nr(   rH   )
exact_bits   rP   r^     r'   rC   )r   r   randomr   )r   _a
bits_values       r   test_random_exact_bitsz(testIntegerRandom.test_random_exact_bits  s    t 	' 	'A$222AQW%%%Q#X&&&&h// 	1 	1J$
;;;AQZ!^!44555Q!Z-/0000	1 	1r   c                 L   d}t          d          D ]8}t          j        d          }|p|dk     }|                     |dk               9|                     |           t          dd          D ]3}t          j        |          }|                     |d	|z  k               4d S )
NFr(   rH   )max_bitsr  rP   r^   r  r'   )r   r   r  r   r/   )r   flagr  r  r  s        r   test_random_max_bitsz&testIntegerRandom.test_random_max_bits  s    t 	% 	%A$a000A?1s7DQV$$$$h// 	1 	1J$j999AQ!Z-/0000	1 	1r   c                      G d dt                     } |            }t          j        d|          }|                     |j        d           d S )Nc                       e Zd Zd Zd ZdS )@testIntegerRandom.test_random_bits_custom_rng.<locals>.CustomRNGc                     d| _         d S r   )counterr
   s    r   __init__zItestIntegerRandom.test_random_bits_custom_rng.<locals>.CustomRNG.__init__	  s     r   c                 F    | xj         |z  c_         t          d          |z  S r   )r  bchr)r   sizes     r   __call__zItestIntegerRandom.test_random_bits_custom_rng.<locals>.CustomRNG.__call__  s"    $Aww~%r   N)r  r  r  r  r  r   r   r   	CustomRNGr    s2        ! ! !& & & & &r   r  r   )r  randfuncrz   )objectr   r  r   r  )r   r  
custom_rngr  s       r   test_random_bits_custom_rngz-testIntegerRandom.test_random_bits_custom_rng  sm    	& 	& 	& 	& 	& 	& 	& 	& Y[[
 BDDD+Q/////r   c                    t           j        }t          d          D ]2} |dd          }|                     d|cxk    odk    nc            3t          d          D ]2} |dd          }|                     d|cxk    odk     nc            3|                     t
          |ddd           |                     t
          |dd	           d S )
N   rC   r   )min_inclusivemax_inclusive)r  max_exclusiver'   rB   )r  r  r  )r  r  )r   random_ranger   r/   r   r   )r   funcr   r  s       r   test_random_rangez#testIntegerRandom.test_random_range  s    )s 	* 	*A1B777AOOALLLLbLLLL))))s 	) 	)A1B777AOOAKKKKRKKKK((((*d!1:; 	 	= 	= 	=*d!1MMMMMr   N)r  r  r  r  r  r  r  r   r   r   r  r    sU        
1 
1 
11 1 10 0 0N N N N Nr   r  c                    g }|t          t                    z  }	 ddlm  G fddt                    }|t          |          z  }n}# t
          t          f$ ri}t          j        dk    r t          j	        
                    d           n/t          j	        
                    dt          |          z             Y d }~nd }~ww xY w	 ddlm  G fd	d
t                    }|t          |          z  }nM# t
          t          f$ r9}t          j	        
                    dt          |          z             Y d }~nd }~ww xY w|t          t                    z  }|S )Nr   
IntegerGMPc                       e Zd Z fdZdS )!get_tests.<locals>.TestIntegerGMPc                     | _         d S r   r   )r   r  s    r   r   z'get_tests.<locals>.TestIntegerGMP.setUp,  s    )r   Nr  r  s   r   TestIntegerGMPr  +  s.        * * * * * * *r   r  win32zSkipping GMP tests on Windows
zSkipping GMP tests (%s)
IntegerCustomc                       e Zd Z fdZdS )*get_tests.<locals>.TestIntegerCustomModexpc                     | _         d S r   r   )r   r  s    r   r   z0get_tests.<locals>.TestIntegerCustomModexp.setUp:  s    ,r   Nr  r  s   r   TestIntegerCustomModexpr  9  s.        - - - - - - -r   r  z"Skipping custom modexp tests (%s)
)r   r  Cryptodome.Math._IntegerGMPr  r   ImportErrorOSErrorsysplatformstdoutwriter7   Cryptodome.Math._IntegerCustomr  r  )configtestsr  er  r  r  s        @@r   	get_testsr  $  s   E	_^,,,ED::::::	* 	* 	* 	* 	* 	* 	*_ 	* 	* 	* 	000! D D D<7""J>????J83q66ACCC	D	J@@@@@@	- 	- 	- 	- 	- 	- 	-o 	- 	- 	- 	!8999! J J J
>QGIIIIIIIIJ 
_.///ELs0   -A CAC  C	-C7 7E/D<<E__main__c                  B    t          j        t                                S r   )unittest	TestSuiter  r   r   r   r   r   E  s    H&y{{33 r   suite)defaultTest)__doc__r  r  Cryptodome.SelfTest.st_commonr   Cryptodome.Util.py3compatCryptodome.Math._IntegerNativer   TestCaser   r  r  r  r  r  mainr   r   r   <module>r     s8  D !   



  9 9 9 9 9 9 ' ' ' ' 8 8 8 8 8 8t
8 t
8 t
8 t
8 t
8h' t
8 t
8 t
8n% % % % %_ % % %7N 7N 7N 7N 7N) 7N 7N 7Nr     @ z33EHMg&&&&&& r   