
    <f|                         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    p/home/panchajanya/Development/work/volatility3/lib/python3.11/site-packages/Crypto/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          }|                     t          d          |                                            |d          }|                     t          d          |                                           |                     t          d          |                    d                     |                     t
          |j        d           |                     t          d          |                    d	
                     |                     t          d          |                    dd	
                      |d          }|                     t
          |j                   |                     t
          |j        d
           d S )Nr   i  u   ÿþu    ÿþ      u   þÿlittle	byteorderu   þÿ bittle)r   r   bto_bytesr   r   )r   r   r   r   r   s        r   test_conversion_to_bytesz(TestIntegerBase.test_conversion_to_byteso   sM   ,WT]]6BKKMM222WV__:666>**BKKNN;;;*bk1555:h(G(GHHH>**BKKXK,N,NOOO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 )N    r   s    rB   s   r   bigrD   rC         	rG   )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      rV      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 )NrZ   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 rY   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 )NrZ   r[   r`   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   
   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 )NrA   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   rU   a   r   r\   i  r   r/   rQ   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 )	Nrp   rU   rq   S   rr   r[   r\   irs   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   rV   i   rs   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 )NrA      r'   r<   rl   O   c                       dz  S Nr    r   s   r   <lambda>z0TestIntegerBase.test_floor_div.<locals>.<lambda>  s    R1W r   )r   r/   rQ   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   rz   r`   rA   rB   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/   rQ   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 )Nry   rA   r{   @   r'   rV   rl   )r   r/   rQ   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   rz      rp   r   rB   r'   r<   i\ iE  r`   rl   r~   )	r   r/   rQ   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 )Nry   r'         rB   )r   inplace_powr   r   r   s     r   test_inplace_exponentiationz+TestIntegerBase.test_inplace_exponentiation0  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'   rk   r{   r   )r   r   absr]   s         r   test_abszTestIntegerBase.test_abs9  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   rk   rp   2   )r   r   r   sqrtr   r8   s        r   	test_sqrtzTestIntegerBase.test_sqrtA  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 )Nrz   r   r;   rB   )rB   ry   )   rZ   r      r         %   )   +   /   5   r'   r   ry   rg   r   )ry   rp   r   )r   r   r   r   range)r   pisquareress        r   test_sqrt_modulez TestIntegerBase.test_sqrt_moduleI  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_addd  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   iirU   i_ iʠi`yij'  r   r*   s      r   test_in_place_subz!TestIntegerBase.test_in_place_subp  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 )	NrA   rz   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   rp      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(   rs   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(   rs   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   rB   r   r~   c                       dz	  S Nr;   r   r   s   r   r   z2TestIntegerBase.test_right_shift.<locals>.<lambda>      bBh r   r'   r(   rV   r;   r   r   r/   rQ   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   rB   r   r   r~   ry   rV   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   rB   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   rB   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  rl   rB   r   r~   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   ry   r   r`   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   rB   rN   rF   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   rB      i  i   r   r'   rA   )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   rB   r'   rA   ry   i  i  rk   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   iry   rp   r'   r<   )r   fail_if_divisible_byr   r   r0   s       r   test_fail_if_divisible_byz)TestIntegerBase.test_fail_if_divisible_by)  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 )Nry   rA   r'   rg   r      rB   r{   r3      r(     )r   multiply_accumulater   r0   s       r   test_multiply_accumulatez(TestIntegerBase.test_multiply_accumulate5  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 )NrA   r   r   r{   r'   r(   )r   setr   r*   s      r   test_setzTestIntegerBase.test_setF  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'   rz   rl   r   i ii  rA   iiKS~i&  i  rg   )	r   r/   rQ   inverser   r   r   r   r   r   s          r   test_inversezTestIntegerBase.test_inverseQ  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'   rz   rA   )r   inplace_inverser   r*   s      r   test_inplace_inversez$TestIntegerBase.test_inplace_inverse`  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'   rB   )r   r/   rQ   gcdr   r   r8   s        r   test_gcdzTestIntegerBase.test_gcdf  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/   rQ   lcmr   r   r]   s         r   test_lcmzTestIntegerBase.test_lcmo  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  rB   rB   )r   -   rB   )r~      r;   )rz   r  rB   )ib  i  r;   )r  i&  r;   )rz   l   -& r;   rB   r   r'   r   r{   r;   r   ry   r~   )r   jacobi_symbolr   r   r   r   )r   datajskntvs         r   test_jacobi_symbolz"TestIntegerBase.test_jacobi_symbolz  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 )NrA   )rB   rB   r'   r;   rA   r   ry   rB   rz   r;   r   r   rp   rB   r~   r;   r   r   rg   rB   r   r;   r  r   rZ   rB   r[   r;   r   r   r   rB   r   r;   r  r   r   rB   r3   r;   r  r   r  rB   r   r;   r-   r      rB      r;      r      rB   r   r;   r   r   rz   )r%  r&  rA   r;   r(  rz   r   r   rB   rp   r;   r,  r   rB   rg   r   r   rB   r  r;   rZ   r;   r[   rB   r3  r4  r5  r  r;   r7  r3   r   r  rB   r  r;   r;  r-   rB   r>  r   r@  rB   rB  r;   rD  r;   r   rB   rF  rp   )r%  r'   rB   rG  r(  r)  r   r;   rp   r   r~   rB   rK  rg   r;   rM  rN  rO  r[   r   r   rB   r4  r5  r  rB   r   r;   r8  r9  r:  r   rB   r-   r;   r=  r?  rX  rD  r   rZ  r   rB   r   )r%  r[  r'  r(  rz   rB   r*  r+  r^  r-  r.  rM  r0  r1  rP  r3  r4  r   rB   r6  r7  r3   rB   r9  r:  rd  r<  r=  rW  rA  rC  rZ  rF  r   )r%  r&  rA   rB   r(  rh  r\  rJ  r,  rK  r_  )r   r   r  rB   rO  rP  ra  r4  r5  rQ  rc  rj  r  r;   )r  r   rd  re  r=  rW  rB  rB   rY  rE  r   r;   rZ   )r%  r&  rk  r(  r)  r\  rJ  r,  rK  r.  r/  rl  )rZ   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 )Nry   rz   r      r   ir   r-   r'   i   rB   rZ   rk   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>   rJ   rR   rW   r^   ra   rc   re   ri   rn   rt   rw   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(   r~   )
exact_bits   rN   r\     r'   rB   )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(   r~   )max_bitsr  rN   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  randfuncry   )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   rB   r   )min_inclusivemax_inclusive)r  max_exclusiver'   rA   )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  ,  s.        - - - - - - -r   r  z"Skipping custom modexp tests (%s)
)r   r  Crypto.Math._IntegerGMPr  r   ImportErrorOSErrorsysplatformstdoutwriter7   Crypto.Math._IntegerCustomr  r  )configtestsr  er  r  r  s        @@r   	get_testsr    s   E	_^,,,ED666666	* 	* 	* 	* 	* 	* 	*_ 	* 	* 	* 	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   8  s    H&y{{33 r   suite)defaultTest)__doc__r  r  Crypto.SelfTest.st_commonr   Crypto.Util.py3compatCrypto.Math._IntegerNativer   TestCaser   r  r  r  r  r  mainr   r   r   <module>r     s8  D !   



  5 5 5 5 5 5 # # # # 4 4 4 4 4 4g
8 g
8 g
8 g
8 g
8h' g
8 g
8 g
8T% % % % %_ % % %7N 7N 7N 7N 7N) 7N 7N 7Nr     @ z33EHMg&&&&&& r   