
    9i~                         S r SSKrSSKrSSKJr  SSK7  SSKJr   " S S\R                  5      r	 " S S	\	5      r
 " S
 S\R                  5      r0 4S jr\S:X  a  S r\R                  " SS9  gg)zSelf-test for Math.Numbers    N)list_test_cases)*)IntegerNativec                   R   \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S% r'S& r(S' r)S( r*S) r+S* r,S+ r-S, r.S- r/S. r0S/ r1S0 r2S1 r3S2 r4S3 r5S4 r6S5 r7S6 r8S7r9g8)9TestIntegerBase.   c                     [        S5      e)NzTo be implemented)NotImplementedErrorselfs    a/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/Crypto/SelfTest/Math/test_Numbers.pysetUpTestIntegerBase.setUp0   s    !"566    c                 .    [        U R                  U5      $ N)mapInteger)r   args     r   IntegersTestIntegerBase.Integers3   s    4<<%%r   c                    U R                   nU" S5      nU" U5      nU" S5      nU R                  [        US5        U" S5      nU" S5      nU" S5      nU" S5      nU" S5      n	U R                  X"5        U R                  US5        U R                  X#5        U R                  US5        U R                  US5        U R                  US5        U R                  US5        U R                  US5        U R                  U	S5        U R	                  X%:H  5        U" U5      nU R                  X'5        U R	                  U" S	5      S :H  5        g )
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_equality&TestIntegerBase.test_init_and_equality6   s6   ,,R[R[R[*gs3V_WV_Z '( R  R X&Y'V$Z(/0" R[ t+,r   c                     U R                  SSS-  5      u  pU R                  [        U5      S5        U R                  [        U5      SS-  5        g )Ni     )r   r   intr   r    r!   s      r   test_conversion_to_int&TestIntegerBase.test_conversion_to_intW   sD    sAI.R#&R!t),r   c                     U R                  SSSS-  5      u  pnU R                  US:H  5        U R                  US:H  5        U R                  US:H  5        U R                  USS-  :H  5        g )Nr   ir+   r,      r   
assertTruer   r   r    r!   r"   s       r   test_equality_with_ints'TestIntegerBase.test_equality_with_ints\   sb    ]]2sAI6
b!c	"r"a4i(r   c                     U R                  SSSSS-  5      u  pp4U R                  [        U5      S:H  5        U R                  [        U5      S:H  5        U R                  [        U5      S:H  5        U R                  [        U5      S	:H  5        g )
N   r   ir+   r,   200z-20.  10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376)r   r4   strr   r    r!   r"   r#   s        r   test_conversion_to_str&TestIntegerBase.test_conversion_to_strc   sz    r1c19=B4(B3'B5()B  $T  T  	Ur   c                     U R                  SSS-  5      u  pU R                  [        U5      S5        U R                  [        U5      S5        g )Nr+   P   zInteger(-1)z"Integer(1208925819614629174706176))r   r   reprr.   s      r   	test_reprTestIntegerBase.test_reprj   sA    r1b5)b=1b#GHr   c                    U R                   nU" S5      nU R                  SUR                  5       5        U" S5      nU R                  SUR                  5       5        U" S5      nU R                  SUR                  5       5        U R                  SUR                  S5      5        U R                  [        UR                  S	5        U R                  S
UR                  SS95        U R                  SUR                  SSS95        U" S5      nU R                  SUR                  5       5        U R                  SUR                  SS95        U R                  SUR                  S5      5        U R                  SUR                  SSS95        U R                  [        UR                  S5        U" S5      nU R                  [        UR                  5        U R                  [        UR                  SS9  g )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_bytes(TestIntegerBase.test_conversion_to_byteso   s   ,,QZ"++-0T]"++-0V_bkkm4"++a.9*bkk15bkkHk&EF"++a8+*LM)*@"++-P@x8	:DR	*DR8<	>*bkk15S\*bkk2*bkkXFr   c                 6   U R                   nUR                  S5      nU R                  [        X!5      5        U R	                  SU5        UR                  S5      nU R	                  SU5        UR                  S5      nU R	                  SU5        UR                  SS5      nU R	                  SU5        UR                  SSS9nU R	                  SU5        UR                  SS	S9nU R	                  S
U5        U R                  [        UR                  SS5        g )NrH   r   s    rK   s   r   bigrM   rL         	rR   )r   
from_bytesr4   
isinstancer   r   r   )r   r   r    r!   r"   r#   r$   r%   s           r   test_conversion_from_bytes*TestIntegerBase.test_conversion_from_bytes   s   ,,(
2/0B,B,$U3Bu=Bx@$*g&8&8'8Lr   c                 `   U R                  SSSS5      u  pp4U R                  X:g  5        U R                  US:g  5        U R                  X:g  5        U R                  US:g  5        U R                  X:g  5        U R                  XA:g  5        U R                  U R                  S5      S :g  5        g )NY   Z   r   )r   r4   r   r   r>   s        r   test_inequalityTestIntegerBase.test_inequality   s    r2r26!b!"r"!!Q4/0r   c                 j   U R                  SSSSS5      u  pp4nU R                  X:  5        U R                  US:  5        U R                  X:  5        U R                  US:  5        U R                  XA:  5        U R                  X:  5        U R                  X:  5        U R                  XQ:  5        g N      rb      r3   r   r    r!   r"   r#   r$   s         r   test_less_thanTestIntegerBase.test_less_than   s    !]]2r2r7C R !b! ! !r   c                 j   U R                  SSSSS5      u  pp4nU R                  X:*  5        U R                  US:*  5        U R                  X:*  5        U R                  US:*  5        U R                  X:*  5        U R                  X:*  5        U R                  X:*  5        U R                  XQ:*  5        g )Nrg   rh   ri   r3   rj   s         r   test_less_than_or_equal'TestIntegerBase.test_less_than_or_equal   s    !]]2r2r7C!b!!b!!"!"r   c                    U R                  SSSSS5      u  pp4nU R                  X1:  5        U R                  US:  5        U R                  X:  5        U R                  X:  5        U R                  US:  5        U R                  X:  5        U R                  XA:  5        U R                  XQ:  5        U R                  X:  5        g rf   r3   rj   s         r   test_more_thanTestIntegerBase.test_more_than   s    !]]2r2r7C R !!b! ! !r   c                    U R                  SSSS5      u  pp4U R                  X1:  5        U R                  US:  5        U R                  X:  5        U R                  X:  5        U R                  US:  5        U R                  XA:  5        g )Nrg   rh   rn   r3   r>   s        r   test_more_than_or_equal'TestIntegerBase.test_more_than_or_equal   st    r2r26!b!!!b!"r   c                 "   U R                  SSSS5      u  pp4U R                  U5        U R                  [        U5      5        U R                  U5        U R                  [        U5      5        U R                  U5        U R                  U5        g )Nr   rO   r   ri   )r   r   boolr4   r>   s        r   	test_boolTestIntegerBase.test_bool   sn    q"b':b"R!r   c                 <   U R                  SS-  * SSSSS-  5      u  pp4nU R                  UR                  5       5        U R                  UR                  5       5        U R                  UR                  5       5        U R                  UR                  5       5        g )NrJ   d   r   )r   r4   is_negativer   rj   s         r   test_is_negative TestIntegerBase.test_is_negative   sy    !]]AH9b!Q3G()())*)*r   c                 L   U R                  SSS5      u  pnU R                  [        X-   U R                  5      5        U R	                  X-   S5        U R	                  US-   S5        U R	                  X-   S5        U R	                  US-   S5        U R	                  US-   S5        g )N   ra   a   r   ri   i  r   r4   r\   r   r   r5   s       r   test_additionTestIntegerBase.test_addition   s    ]]1b"-

27DLL9:"%b"%!$rA&g{3r   c                 L   U R                  SSS5      u  pnU R                  [        X-
  U R                  5      5        U R	                  X!-
  S5        U R	                  US-
  S5        U R	                  X#-
  S5        U R	                  US-
  S5        U R	                  US-
  S5        g )	Nr   ra   r   S   r   rh   ri   ir   r5   s       r   test_subtraction TestIntegerBase.test_subtraction   s    ]]1b"-

27DLL9:"%a$"%rB'g{3r   c                 &   U R                  SSSS5      u  pp4U R                  [        X-  U R                  5      5        U R	                  X-  S5        U R	                  US-  S5        U R	                  US-  S5        U R	                  US-  S5        g )N      ri   r9   rb   i   r   r>   s        r   test_multiplication#TestIntegerBase.test_multiplication  s    q!R9
27DLL9:"%a$b"%g}5r   c                 j  ^ U R                  SSSS-  5      u  mpU R                  [        TU-  U R                  5      5        U R	                  UT-  S5        U R	                  US-  S5        U R	                  US-  S5        U R	                  USS-  -  S5        U R                  [        U4S j5        g )NrJ   rP   r+   rC   r}   O   c                     > T S-  $ Nr    r    s   r   <lambda>0TestIntegerBase.test_floor_div.<locals>.<lambda>  s	    R1Wr   )r   r4   r\   r   r   r   ZeroDivisionErrorr   r!   r"   r    s      @r   test_floor_divTestIntegerBase.test_floor_div  s    ]]1ab1
B
28T\\:;r1%q!$r2&qBw*+_=r   c                   ^ U R                  SSS5      u  mpU R                  [        TU-  U R                  5      5        U R	                  TU-  S5        U R	                  TS-  S5        U R	                  US-  S5        U R	                  TS-  S5        U R                  [        U4S j5        U R                  [        U4S j5        g )	Nr   r   rn   rJ   rK   ri   c                     > T S-  $ r   r   r   s   r   r   0TestIntegerBase.test_remainder.<locals>.<lambda>  s	    R!Vr   c                     > T S-  $ )Nr   r   s   r   r   r     s	    b2gr   )r   r4   r\   r   r   r   r   r   r   s      @r   test_remainderTestIntegerBase.test_remainder  s    ]]2q"-
B
27DLL9:b!$a#a#gr*+^<*o6r   c                    U R                  SSS5      u  pnU R                  [        X-  U R                  5      5        U R	                  X-  S5        U R	                  [        X5      S5        U R	                  US-  S5        U R	                  [        US5      S5        U R	                  US-  S5        U R	                  US-  S5        U R                  [        [
        US5        g )Nr   rJ   r   @   r+   rb   r}   )r   r4   r\   r   r   powr   r   r5   s       r   test_simple_exponentiation*TestIntegerBase.test_simple_exponentiation!  s    ]]1a,

28T\\:;2&Rb)q"%RR(q!$q"%*c2r2r   c           	         U R                  SSS5      u  pnU R                  [        [        XU5      U R                  5      5        U R                  [        XU5      S5        U R                  [        USU5      S5        U R                  [        XS5      S5        U R                  [        USS5      S5        U R                  [        USS5      S5        U R                  [        USSS-  5      S5        U R                  [        USS-  S	5      S
5        U R                  [        [        USS5        U R                  [        [        USS5        U R                  [        [        USS5        g )Nr   r      r   r   rK   r+   rC   i\ iE  rn   r}   rP   )	r   r4   r\   r   r   r   r   r   r   r5   s       r   test_modular_exponentiation+TestIntegerBase.test_modular_exponentiation-  s&   ]]2q"-

3rr?DLLABRR!,RR!,RR!,RR!,RR!,RQ"W-r2Rb5159+S"a;*c2q"5*c2r15r   c                     U R                  S5      nUR                  S5        U R                  US5        U R                  S5      nUR                  SS5        U R                  US5        g )Nr   r+         rK   )r   inplace_powr   r   r    s     r   test_inplace_exponentiation+TestIntegerBase.test_inplace_exponentiation=  sV    \\!_
qR \\!_
q"Qr   c                 ^   U R                  SS-  * SSSSS-  5      u  pp4nU R                  [        U5      SS-  5        U R                  [        U5      S5        U R                  [        U5      S5        U R                  [        U5      S5        U R                  [        U5      SS-  5        g )Nr+   r|   r   r   )r   r   absrj   s         r   test_absTestIntegerBase.test_absF  s    !]]AH9b!QSIR!s(+R!$R!$R!$R!s(+r   c                 >   U R                  SSSSS-  5      u  pp4U R                  [        UR                  5        U R	                  UR                  5       S5        U R	                  UR                  5       S5        U R	                  UR                  5       SS-  5        g )Nr   r   1   rO   r|   r   2   )r   r   r   sqrtr   r>   s        r   	test_sqrtTestIntegerBase.test_sqrtN  sx    r1b"c':*bgg.A&A&BF+r   c                 R   U R                  [        U R                  S5      R                  S5        U R                  [        U R                  S5      R                  S5        U R                  S5      R                  S5      S:X  d   eU R                  S5      R                  S5      S;   d   eS HI  n[	        SU5       H6  nUS-  U-  nU R                  U5      R                  U5      nXBX-
  4;   a  M6   e   MK     U R                  [        U R                  S5      R                  S5        U R                  [        U R                  S	5      R                  S
5        U R                  S5      R                  S5      S;   d   eU R                  S5      R                  S5      S;   d   eg )Nr   r   rB   rK   )rK   r   )   rg   r      r         %   )   +   /   5   r+   r   r   rO   r   )r   r   r   )r   r   r   r   range)r   pisquareress        r   test_sqrt_module TestIntegerBase.test_sqrt_moduleV  sh    	*dll1o&:&:A>*dll1o&:&:B? ||A##A&!+++||A##A&&000 BA1a[All6*//2!%j((( ! B 	*dll1o&:&:B? 	*dll1o&:&:B? ||F#((,666||F#((,666r   c                     U R                  SS5      u  pX-  nU R                  US5        US-  nU R                  US5        US-  nU R                  US5        USS-  -  nU R                  USSS-  -   5        g )	NrO   r9      (   rB   '   r+   r,   r   r   r.   s      r   test_in_place_add!TestIntegerBase.test_in_place_addq  s    r2&
R 
bR 
bR 
a4iR!t)^,r   c                     U R                  SS5      u  pX-  nU R                  US5        US-  nU R                  US5        US-  nU R                  US5        US-  nU R                  US	5        g )
NrO   r9   iira   i_ iʠi`yij'  r   r.   s      r   test_in_place_sub!TestIntegerBase.test_in_place_sub}  sv    r2&
S!
d
R 
eV$
gU#r   c                     U R                  SS5      u  pX-  nU R                  US5        US-  nU R                  US5        US-  nU R                  US5        USS-  -  nU R                  USSS-  -  5        g )	NrJ   r   r   r+   r   r   ir,   r   r.   s      r   test_in_place_mul!TestIntegerBase.test_in_place_mul  s    q!$
R 
aR 
bS!
a4iSAI./r   c                    ^  T R                  SS5      u  pX-  nT R                  US5        USS-  -  nT R                  US5        US-  nT R                  US5        U 4S jnT R                  [        U5        g )Nr9   r      r+   r,   r   c                  2   > TR                  S5      n U S-  n g )N	   r   r   )r"   r   s    r   t0TestIntegerBase.test_in_place_modulus.<locals>.t  s    aB!GBr   )r   r   r   r   )r   r    r!   r   s   `   r   test_in_place_modulus%TestIntegerBase.test_in_place_modulus  sz    r1%
Q
a4iQ
aQ	 	+Q/r   c                    U R                  SSS5      u  pnU R                  [        X-  U R                  5      5        U R	                  X-  S5        U R	                  US-  S5        U R	                  X-  S5        U R	                  US-  S5        U R	                  US-  S5        U R	                  USS-  S-   -  S5        g )N   r   0      r+   r,   r   r5   s       r   test_andTestIntegerBase.test_and  s    ]]4t4

27DLL9:$'dD)$'dD)dD)qDy4/0$7r   c                 4   U R                  SSS5      u  pnU R                  [        X-  U R                  5      5        U R	                  X-  S5        U R	                  US-  S5        U R	                  X#-  S5        U R	                  USS-  -  SS-  S-   5        g )Nr      r      ir+   r,   r   r5   s       r   test_orTestIntegerBase.test_or  s    ]]4t4

27DLL9:$'dD)$'a4idT)9:r   c                   ^ U R                  SSS5      u  mpU R                  TS-	  T5        U R                  [        TU-	  U R                  5      5        U R                  TU-	  S5        U R                  TS-	  S5        U R                  [        U4S j5        U R                  TSS-  -	  S5        U R                  US-	  S	5        U R                  USS-  -	  S
5        g )Nr   rK   r   rP   c                     > T S-	  $ NrB   r   r   s   r   r   2TestIntegerBase.test_right_shift.<locals>.<lambda>  	    bBhr   r+   r,   rb   rB   r   r   r4   r\   r   r   r   r   s      @r   test_right_shift TestIntegerBase.test_right_shift  s    ]]4E2
Bq"%
28T\\:;r4(q$'*&67T	*A.q%(T	*B/r   c                   ^  T R                  SSS5      u  pnUS-  nT R                  US5        US-  nT R                  US5        X-  nT R                  US5        US-  nT R                  US5        U 4S jnT R                  [        U5        U 4S	 jnT R                  SU" 5       5        U 4S
 jnT R                  SU" 5       5        g )Nr   rK   r   r   rP   r   rb   c                  2   > TR                  S5      n U S-  n g N   rB   r   r#   r   s    r   l4TestIntegerBase.test_in_place_right_shift.<locals>.l      d#B2IBr   c                  :   > TR                  S5      n U SS-  -  n U $ Nr   r+   r,   r   r   s    r   m15TestIntegerBase.test_in_place_right_shift.<locals>.m1  s$    d#B19BIr   c                  :   > TR                  S5      n U SS-  -  n U $ )NrB   r+   r,   r   r   s    r   m25TestIntegerBase.test_in_place_right_shift.<locals>.m2  s$    b!B19BIr   rB   r   r   r   r   )r   r    r!   r"   r   r  r  s   `      r   test_in_place_right_shift)TestIntegerBase.test_in_place_right_shift  s    ]]4E2

qT"
qT"
	T"
qU#	 	*a(	 	BD!	 	RT"r   c                   ^ U R                  SSS5      u  mpU R                  TS-  T5        U R                  [        TU-  U R                  5      5        U R                  TU-  S5        U R                  TS-  S5        U R                  US-  S5        U R                  [        U4S j5        U R                  [        U4S j5        g )	Nr   rK   r   r       c                     > T S-  $ r   r   r   s   r   r   2TestIntegerBase._test_left_shift.<locals>.<lambda>  r   r   c                     > T SS-  -  $ )Nr+   r,   r   r   s   r   r   r    s    bQ$Y.?r   r   r   s      @r   _test_left_shift TestIntegerBase._test_left_shift  s    ]]4E2
Bq"%
28T\\:;r4(q$'q%(*&67*&?@r   c                 X  ^  T R                  SSS5      u  pnUS-  nT R                  US5        US-  nT R                  US5        X-  nT R                  US5        US-  nT R                  US5        U 4S jnT R                  [        U5        U 4S	 jnT R                  [        U5        g )
Nr   rK   r   r   r  r   r  c                  2   > TR                  S5      n U S-  n g r   r   r   s    r   r   3TestIntegerBase.test_in_place_left_shift.<locals>.l  r  r   c                  8   > TR                  S5      n U SS-  -  n g r  r   r   s    r   m3TestIntegerBase.test_in_place_left_shift.<locals>.m  s    d#B19Br   r
  )r   r    r!   r"   r   r  s   `     r   test_in_place_left_shift(TestIntegerBase.test_in_place_left_shift  s    ]]4E2

qT"
qT"
	T"
qU#	 	*a(	 	*a(r   c                    U R                  SSS5      u  pnU R                  UR                  S5      S5        U R                  UR                  S5      S5        U R                  UR                  U5      S5        U R                  UR                  S5      S5        U R                  UR                  S5      S5        U R                  [        UR                  S5        U R                  UR                  SS	-  5      S5        U R                  [        UR                  S5        U R                  [        UR                  S5        U R                  [        UR                  S5        U R                  [        UR                  S
5        g )Ni  r}   rK   r   rP   r   rB   r+   r,   i  )r   r   get_bitr   r   r5   s       r   test_get_bitTestIntegerBase.test_get_bit  s   ]]5"a0
A*A*B+A*A**bjj"5AI.2*bjj"5*bjj!4*bjj!4*bjj(;r   c                    U R                  SSSSS5      u  pp4nU R                  UR                  5       5        U R                  UR                  5       5        U R                  UR                  5       5        U R                  UR                  5       5        U R                  UR                  5       5        U R                  UR	                  5       5        U R                  UR	                  5       5        U R                  UR	                  5       5        U R                  UR	                  5       5        U R                  UR	                  5       5        g )Nr   r   r   rn   i)r   r4   is_evenr   is_oddrj   s         r   test_odd_evenTestIntegerBase.test_odd_even  s    !]]1aR=

%

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

%&%%		$%		$r   c                 2   U R                  SSSS5      u  pp4U R                  UR                  5       S5        U R                  UR                  5       S5        U R                  UR                  5       S5        U R                  [        UR                  5        g )Nr   rK   rY   rQ   r   )r   r   size_in_bitsr   r   r>   s        r   test_size_in_bits!TestIntegerBase.test_size_in_bits  ss    q!UC8*A.*A.*A.*boo6r   c                    U R                  SSSSSS5      u  pp4pVU R                  UR                  5       S5        U R                  UR                  5       S5        U R                  UR                  5       S5        U R                  UR                  5       S5        U R                  UR                  5       S5        U R                  [        UR
                  5        g )	Nr   rK      i  i   r   r+   rJ   )r   r   size_in_bytesr   r   r'  r   r    r!   r"   r#   r$   r%   s          r   test_size_in_bytes"TestIntegerBase.test_size_in_bytes  s    !%q!T5'2!N))+Q/))+Q/))+Q/))+Q/))+Q/*boo6r   c                    U R                  U R                  S5      R                  5       5        U R                  U R                  S5      R                  5       5        U R                  U R                  S5      R                  5       5        U R                  U R                  S5      R                  5       5        U R                  U R                  S5      R                  5       5        U R                  U R                  S5      R                  5       5        U R                  U R                  S5      R                  5       5        U R                  U R                  S5      R                  5       5        [	        S	S
5       Hh  nU R                  U R                  US-  S-   5      R                  5       5        U R                  U R                  US-  5      R                  5       5        Mj     g )Nr   r   rK   r+   rJ   r   i  i  r|   r,   )r   r   is_perfect_squarer4   r   )r   xs     r   test_perfect_square#TestIntegerBase.test_perfect_square'  sP   b);;=>Q99;<Q99;<a::<=a::<=Q99;<U+==?@g.@@BCsD!AT\\!Q$q&1CCEFOODLLA.@@BC "r   c                     U R                  SSS5      u  pnUR                  S5        UR                  S5        UR                  SS-  5        U R                  [        UR                  S5        U R                  [        UR                  U5        g )N   ir   r   r+   rC   )r   fail_if_divisible_byr   r   r5   s       r   test_fail_if_divisible_by)TestIntegerBase.test_fail_if_divisible_by6  sz    ]]2sA.
 	"
"
R( 	*b&=&=qA*b&=&=rBr   c                 J   U R                  SSS5      u  pnUR                  X#5        U R                  US5        UR                  US5        U R                  US5        UR                  SU5        U R                  US5        UR                  SS5        U R                  US	5        UR                  SS5        U R                  US
5        UR                  SSS-  5        U R                  US
SS-  -   5        UR                  SS-  S5        U R                  US
SS-  -   5        g )Nr   rJ   r+   rO   r      rK   r   r9      r,     )r   multiply_accumulater   r5   s       r   test_multiply_accumulate(TestIntegerBase.test_multiply_accumulateB  s   ]]1a+

r&R 
r1%R 
q"%R 
q"%R 
r1%R 
q!t),R!t)^,
qDy!,R!t)^,r   c                 P   U R                  SS5      u  pUR                  U5        U R                  US5        UR                  S5        U R                  US5        UR                  S5        U R                  US5        UR                  SS-  5        U R                  USS-  5        g )NrJ   r   r   r   r+   r,   )r   setr   r.   s      r   test_setTestIntegerBase.test_setS  s    q!$
r
Q
q	Q
r
R 
qDyQ$Y'r   c                    U R                  SSSSSS5      u  pp4pVU R                  [        UR                  U5      U R                  5      5        U R                  UR                  U5      S5        U R                  UR                  S5      S5        U R                  UR                  S5      S5        U R                  UR                  S5      S	5        U R                  UR                  S
5      S5        U R                  [        UR                  S5        U R                  [        UR                  S5        U R                  [        UR                  S5        U R                  [        UR                  S5        g )Nr+   r   r}   r   i ii  rJ   iiKS~i&  i  rO   )	r   r4   r\   inverser   r   r   r   r   r-  s          r   test_inverseTestIntegerBase.test_inverse^  s   !%q!RFD!I
2::b>4<<@AB+A*A*H-x8D)40*bjj"5*bjj"5*bjj"5+RZZ;r   c                 r    U R                  SS5      u  pUR                  U5        U R                  US5        g )Nr+   r   rJ   )r   inplace_inverser   r.   s      r   test_inplace_inverse$TestIntegerBase.test_inplace_inversem  s2    q!$
2Qr   c                    U R                  SSSS5      u  pp4U R                  [        UR                  U5      U R                  5      5        U R                  UR                  U5      S5        U R                  UR                  S5      S5        U R                  UR                  U5      S5        U R                  UR                  S5      S5        U R                  UR                  S5      S5        g )Nr   rO   r   r   r+   rK   )r   r4   r\   gcdr   r   r>   s        r   test_gcdTestIntegerBase.test_gcds  s    q"b"5
266":t||<=Q'Q'Q'Q'A&r   c                 l   U R                  SSSSS5      u  pp4nU R                  [        UR                  U5      U R                  5      5        U R                  UR                  U5      S5        U R                  UR                  S5      S5        U R                  UR                  U5      S5        U R                  UR                  S5      S5        U R                  UR                  S5      S5        U R                  UR                  S5      S5        U R                  UR                  S5      S5        g )Nr   rO   r   r   r   r   f   )r   r4   r\   lcmr   r   rj   s         r   test_lcmTestIntegerBase.test_lcm|  s    !]]1b"b!<
266":t||<=R(R(S)Q'A&A&A&r   c           
         SnU R                   R                  n[        SS5       H  nU R                  U" US5      S5        M     [        SSS5       H  nU R                  U" SU5      S5        M     U R	                  [
        USS5        U R	                  [
        USS5        U R	                  [
        USS5        U R	                  [
        USS5        U R	                  [
        USS5        U R	                  [
        USS	5        U R	                  [
        USS5        U R	                  [
        USS
5        U H  nU R                  U" US   US   5      US   5        U R                  U" U R                  US   5      US   5      US   5        U R                  U" US   U R                  US   5      5      US   5        M     g )N))r=  rK   rK   )r   -   rK   )rP      rB   )r   rX  rK   )ib  i  rB   )r=  i&  rB   )r   l   -& rB   rK   r   r+   r   r   rB   r   r   rP   )r   jacobi_symbolr   r   r   r   )r   datajskntvs         r   test_jacobi_symbol"TestIntegerBase.test_jacobi_symbol  s    \\'' q"AR1Xq) q"aAR1Xq) ! 	*b!R0*b!R0*b!Q/*b!Q/*b!Q/*b!Q/*b!Q/*b!Q/BR1r!u-r!u5RRU 3RU;RUCR1t||BqE':;RUC r   c                    S/ SQ4S/ SQ4S/ SQ4S/ SQ4S	/ S
Q4S/ SQ4S/ SQ4S/ SQ4S/ SQ4S/ SQ4S/ SQ4S/ SQ4S/ SQ4S/ SQ4/nU R                   R                  nU H(  u  p4U H  u  pVU R                  U" XS5      U5        M     M*     g )NrJ   )rK   rK   r+   rB   rJ   r   r   rK   r   rB   r   r   r   rK   rP   rB   r   r   rO   rK   r   rB   r6  r   rg   rK   rh   rB   r   r   r   rK   r   rB   r<  r   r   rK   r9   rB   rX  r   r;  rK   r   rB   r2   r      rK      rB      r      rK   r   rB   r   r   r   )rb  rc  rJ   rB   re  r   r   r   rK   r   rB   ri  r   rK   rO   r   r   rK   r6  rB   rg   rB   rh   rK   rp  rq  rr  r<  rB   rt  r9   r   rX  rK   r;  rB   rx  r2   rK   r{  r   r}  rK   r  rB   r  rB   r   rK   r  r   )rb  r+   rK   r  re  rf  r   rB   r   r   rP   rK   r  rO   rB   r  r  r  rh   r   r   rK   rq  rr  r<  rK   r   rB   ru  rv  rw  r   rK   r2   rB   rz  r|  r  r  r   r  r   rK   r   )rb  r  rd  re  r   rK   rg  rh  r  rj  rk  r  rm  rn  r  rp  rq  r   rK   rs  rt  r9   rK   rv  rw  r  ry  rz  r  r~  r  r  r  r   )rb  rc  rJ   rK   re  r  r  r  ri  r  r  )r   r   r6  rK   r  r  r  rq  rr  r  r  r  rX  rB   )r;  r   r  r  rz  r  r  rK   r  r  r   rB   rg   )rb  rc  r  re  rf  r  r  ri  r  rk  rl  r  )rg   r   r  r   rB   rq  r  r  r  ru  r  rw  r  r  rz  )r}  r   r  r  r  r  r   )rb  r  rd  re  r  rg  r  r  rj  r  rl  rm  r  ro  rp  rq  r  rs  rt  r  rv  r  r  ry  r  r|  r~  r  r  r  r   )rb  r  r  re  rf  r  r  r  r  r  rl  r  rn  ro  r  rq  )r   r   r  rt  ru  r  r  rx  r  rz  r  r  r  r  r  r   )rb  rc  r  re  r  r  rh  ri  r  r  r  r  r  ro  r  rq  r  r  )r   r   r  r  r  r  r  rz  r  r  r  r  r  rX  )rb  rc  rd  re  r  rg  r  ri  rj  r  rl  rm  r  r  rp  rq  r  rs  r  r  rv  rw  rx  ry  rz  r  r~  r  r  r  r   )rb  r  r  re  rf  r  r  r  r  r  rl  r  rn  ro  r  rq  rr  r  r  ru  r  r  )r   r   r  rz  r  r  r  r  r  r{  )rb  r  r  re  r  r  rh  r  r  r  r  r  rn  r  rp  rq  r  r  rt  r  r  rw  r  r  r  r  r  r  r  r  r  r   )rb  rc  r  re  r  r  rh  ri  r  r  rl  r  rn  ro  r  rq  rr  r  r  r  r  rw  r  r  rz  r|  r  r  )r   r   r  )r   rY  r   )r   r^  r[  r]  kjr\  js          r   test_jacobi_symbol_wikipedia,TestIntegerBase.test_jacobi_symbol_wikipedia  s      `  a  b  c  b  c  V  W  e  f  d  e  _  `  f  g  d  e  _  `  d  e  W  X  a  b  e  f" \\''EA  A1-  r   c                 `    U R                  S5      u  nU R                  [        U5      S5        g )Nr   0x10)r   r   hexr   s     r   test_hexTestIntegerBase.test_hex  s&    mmD!R&)r   c                 6   U R                   R                  nU" SSS5      nU R                  US5        U" SSS5      nU R                  US5        U" SSS5      nU R                  US5        U" SSS5      nU R                  US5        U" SSS5      nU R                  US5        S	S
-  S-
  nSS-  nSS-  nSnU R                  Xa" XEU5      5        U R                  [        USSS5        U R                  [
        USSS5        U R                  [
        USSS5        g )Nr   r   r      r   ir   r2   r+   i   rK   rg   r|   r   s@   (ynpqB,f)Z*r}q:'z8%	[CUE2:r   rB   )r   _mult_modulo_bytesr   r   r   r   )r   modmultr   modulust1t2expects          r   test_mult_modulo_bytes&TestIntegerBase.test_mult_modulo_bytes  s(   ,,11aBg&fa$g&a$g&fa$g&a$g&S&1*WW H!9:+WaA>*gq!R8*gq!Q7r   r   N):__name__
__module____qualname____firstlineno__r   r   r(   r/   r6   r?   rE   rU   r]   rc   rk   ro   rr   ru   ry   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.  r3  r8  r?  rC  rG  rK  rO  rT  r_  r  r  r  __static_attributes__r   r   r   r   r   .   s   7&-B-
)UI
G>M0	1
"
#"#+446>	7
36  ,,76
-
$
008;
0#2A)(< %77D
C-"	(< '	'!DF.4*8r   r   c                       \ rS rSrS rSrg)TestIntegerInti  c                     [         U l        g r   )r   r   r   s    r   r   TestIntegerInt.setUp  s	    $r   r   Nr  r  r  r  r   r  r   r   r   r  r    s    %r   r  c                   ,    \ rS rSrS rS rS rS rSrg)testIntegerRandomi  c                 P   [        S5       H?  n[        R                  " SS9nU R                  US:  5        U R                  US:  5        MA     [        SS5       HH  n[        R                  " US9nU R                  USUS	-
  -  :  5        U R                  USU-  :  5        MJ     g )
Nr,   rP   )
exact_bits   rY   ri     r+   rK   )r   r   randomr   )r   _a
bits_values       r   test_random_exact_bits(testIntegerRandom.test_random_exact_bits  s    tA$$2AQW%Q#X& 
  h/J$$
;AQZ!^!445Q!Z-/0 0r   c                 6   Sn[        S5       H9  n[        R                  " SS9nU=(       d    US:  nU R                  US:  5        M;     U R	                  U5        [        SS5       H.  n[        R                  " US9nU R                  US	U-  :  5        M0     g )
NFr,   rP   )max_bitsr  rY   ri   r  r+   )r   r   r  r   r4   )r   flagr  r  r  s        r   test_random_max_bits&testIntegerRandom.test_random_max_bits  s    tA$$a0A?1s7DQV$  	h/J$$j9AQ!Z-/0 0r   c                      " S S[         5      nU" 5       n[        R                  " SUS9nU R                  UR                  S5        g )Nc                        \ rS rSrS rS rSrg)@testIntegerRandom.test_random_bits_custom_rng.<locals>.CustomRNGi  c                     SU l         g r   counterr   s    r   __init__ItestIntegerRandom.test_random_bits_custom_rng.<locals>.CustomRNG.__init__	  s	     r   c                 H    U =R                   U-  sl         [        S5      U-  $ r   )r  bchr)r   sizes     r   __call__ItestIntegerRandom.test_random_bits_custom_rng.<locals>.CustomRNG.__call__  s    $Aw~%r   r  N)r  r  r  r  r  r  r  r   r   r   	CustomRNGr    s    !&r   r  r  )r  randfuncr   )objectr   r  r   r  )r   r  
custom_rngr  s       r   test_random_bits_custom_rng-testIntegerRandom.test_random_bits_custom_rng  s?    	& 	& [
  BD++Q/r   c                 r   [         R                  n[        S5       H.  nU" SSS9nU R                  SUs=:*  =(       a    S:*  Os  5        M0     [        S5       H.  nU" SSS9nU R                  SUs=:*  =(       a    S:  Os  5        M0     U R	                  [
        USSSS9  U R	                  [
        USSS	9  g )
N   rK   r   )min_inclusivemax_inclusive)r  max_exclusiver+   rJ   )r  r  r  )r  r  )r   random_ranger   r4   r   r   )r   funcr2  r  s       r   test_random_range#testIntegerRandom.test_random_range  s    ))sA1B7AOOALLbL)  sA1B7AOOAKKRK(  	*d!1:; 	 	=*d!1Mr   r   N)	r  r  r  r  r  r  r  r  r  r   r   r   r  r    s    
110Nr   r  c                   ^^ / nU[        [        5      -  n SSKJm   " U4S jS[        5      nU[        U5      -  n SSKJm   " U4S	 jS
[        5      nU[        U5      -  nU[        [        5      -  nU$ ! [
        [        4 am  n[        R                  S:X  a$  [        R                  R                  S5         S nAN[        R                  R                  S[        U5      -  5         S nANS nAff = f! [
        [        4 a5  n[        R                  R                  S[        U5      -  5         S nANS nAff = f)Nr   
IntegerGMPc                   "   > \ rS rSrU 4S jrSrg)!get_tests.<locals>.TestIntegerGMPi+  c                    > TU l         g r   r   )r   r  s    r   r   'get_tests.<locals>.TestIntegerGMP.setUp,  s
    )r   r   Nr  r  s   r   TestIntegerGMPr  +  s    * *r   r  win32zSkipping GMP tests on Windows
zSkipping GMP tests (%s)
IntegerCustomc                   "   > \ rS rSrU 4S jrSrg)*get_tests.<locals>.TestIntegerCustomModexpi9  c                    > TU l         g r   r   )r   r  s    r   r   0get_tests.<locals>.TestIntegerCustomModexp.setUp:  s
    ,r   r   Nr  r  s   r   TestIntegerCustomModexpr  9  s    - -r   r  z"Skipping custom modexp tests (%s)
)r   r  Crypto.Math._IntegerGMPr  r   ImportErrorOSErrorsysplatformstdoutwriter=   Crypto.Math._IntegerCustomr  r  )configtestsr  er  r  r  s        @@r   	get_testsr  $  s   E	_^,,ED6	*_ 	* 	00	J<	-o 	- 	!899 
_.//EL% ! D<<7"JJ>??JJ83q6ACC	D ! J

>QGIIJs4   &A9 &C9 9C6	3C1+C11C69D>	+D99D>__main__c                  >    [         R                  " [        5       5      $ r   )unittest	TestSuiter  r   r   r   r   r   E  s    H&&y{3r   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      s{   D ! 
  5 # 4t
8h'' t
8n%_ %7N)) 7Nr  @ z3EMMg& r   