
    9i<,                     >    S SK Jr  SSKJrJrJrJr   " S S\5      rg)   )IntegerBase    )long_to_bytesbytes_to_longinverseGCDc                   z   \ rS rSrSrS rS rS rS rS r	S r
S7S	 jr\S8S
 j5       rS rS rS rS rS rS rS r\rS rS rS rS rS rS rS9S jrS9S jrS rS9S j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. r1S/ r2S0 r3S1 r4S2 r5S3 r6\7S4 5       r8\7S5 5       r9S6r:g):IntegerNative$   z3A class to model a natural integer (including zero)c                     [        U[        5      (       a  [        S5      e UR                  U l        g ! [         a	    Xl         g f = f)Nz-A floating point type is not a natural number)
isinstancefloat
ValueError_valueAttributeError)selfvalues     Z/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/Crypto/Math/_IntegerNative.py__init__IntegerNative.__init__'   s?    eU##LMM	 ,,DK 	 K	 s   4 AAc                     U R                   $ Nr   r   s    r   __int__IntegerNative.__int__0   s    {{    c                 *    [        [        U 5      5      $ r   )strintr   s    r   __str__IntegerNative.__str__3   s    3t9~r   c                     S[        U 5      -  $ )NzInteger(%s))r   r   s    r   __repr__IntegerNative.__repr__6   s    s4y((r   c                 ,    [        U R                  5      $ r   )hexr   r   s    r   __hex__IntegerNative.__hex__:       4;;r   c                 ,    [        U R                  5      $ r   r    r   r   s    r   	__index__IntegerNative.__index__>   r*   r   c                 0   U R                   S:  a  [        S5      e[        U R                   U5      n[        U5      Us=:  a  S:  a  O  O[        S5      eUS:X  a   U$ US:X  a(  [	        U5      nUR                  5         [        U5      nU$ [        S5      e)Nr   .Conversion only valid for non-negative numberszValue too large to encodebiglittleIncorrect byteorder)r   r   r   len	bytearrayreversebytes)r   
block_size	byteorderresults       r   to_bytesIntegerNative.to_bytesA   s    ;;?MNNt{{J7v;'a'899  ("v&FNN6]F  233r   c                     US:X  a  O-US:X  a  [        U5      nUR                  5         O[        S5      eU " [        U5      5      $ )Nr1   r2   r3   )r5   r6   r   r   )clsbyte_stringr9   s      r   
from_bytesIntegerNative.from_bytesQ   sG    ("#K0K!233=-..r   c                 :    Uc  gU R                   [        U5      :H  $ )NFr   r    r   terms     r   __eq__IntegerNative.__eq__]   s    <{{c$i''r   c                 .    U R                  U5      (       + $ r   )rF   rD   s     r   __ne__IntegerNative.__ne__b       ;;t$$$r   c                 2    U R                   [        U5      :  $ r   rC   rD   s     r   __lt__IntegerNative.__lt__e   s    {{SY&&r   c                 T    U R                  U5      =(       d    U R                  U5      $ r   )rM   rF   rD   s     r   __le__IntegerNative.__le__h   s    {{4 5DKK$55r   c                 .    U R                  U5      (       + $ r   )rP   rD   s     r   __gt__IntegerNative.__gt__k   rK   r   c                 .    U R                  U5      (       + $ r   )rM   rD   s     r   __ge__IntegerNative.__ge__n   rK   r   c                      U R                   S:g  $ Nr   r   r   s    r   __nonzero__IntegerNative.__nonzero__q   s    {{ar   c                      U R                   S:  $ rY   r   r   s    r   is_negativeIntegerNative.is_negativeu   s    {{Qr   c                      U R                  U R                  [        U5      -   5      $ ! [        [        [
        4 a	    [        s $ f = fr   	__class__r   r    r   r   	TypeErrorNotImplementedrD   s     r   __add__IntegerNative.__add__y   ?    	">>$++D	"9::NI6 	"!!	"   &) AAc                      U R                  U R                  [        U5      -
  5      $ ! [        [        [
        4 a	    [        s $ f = fr   r`   rD   s     r   __sub__IntegerNative.__sub__   rf   rg   c                      U R                  U R                  [        U5      -  5      $ ! [        [        [
        4 a	    [        s $ f = fr   r`   )r   factors     r   __mul__IntegerNative.__mul__   s?    	">>$++F";<<NI6 	"!!	"rg   c                 P    U R                  U R                  [        U5      -  5      $ r   ra   r   r    )r   divisors     r   __floordiv__IntegerNative.__floordiv__   s    ~~dkkS\9::r   c                 v    [        U5      nUS:  a  [        S5      eU R                  U R                  U-  5      $ )Nr   Modulus must be positive)r    r   ra   r   )r   rq   divisor_values      r   __mod__IntegerNative.__mod__   s7    G1788~~dkkM9::r   Nc                     [        U5      nUS:  a  [        S5      eUb.  [        U5      nUS:  a  [        S5      eUS:X  a  [        S5      eOS n[        U R                  X45      U l        U $ )Nr   zExponent must not be negativeru   Modulus cannot be zero)r    r   ZeroDivisionErrorpowr   )r   exponentmodulus	exp_value	mod_values        r   inplace_powIntegerNative.inplace_pow   sv    M	q=<==GI1} !;<<A~'(@AA  I$++y<r   c                 F    U R                  U 5      nUR                  X5      $ r   )ra   r   )r   r}   r~   r:   s       r   __pow__IntegerNative.__pow__   s!    %!!(44r   c                 ,    [        U R                  5      $ r   )absr   r   s    r   __abs__IntegerNative.__abs__   r*   r   c                     U R                   nUc6  US:  a  [        S5      eUnUS-   S-  nXC:  a  UnX2U-  -   S-  nXC:  a  M  UnO%US::  a  [        S5      eU R                  X-  U5      nU R                  U5      $ )Nr   zSquare root of negative valuer      ru   )r   r   _tonelli_shanksra   )r   r~   r   xyr:   s         r   sqrtIntegerNative.sqrt   s    ?qy !@AA AQ1A%!^) % F!| !;<<))$.'BF~~f%%r   c                 B    U =R                   [        U5      -  sl         U $ r   rC   rD   s     r   __iadd__IntegerNative.__iadd__       s4y r   c                 B    U =R                   [        U5      -  sl         U $ r   rC   rD   s     r   __isub__IntegerNative.__isub__   r   r   c                 B    U =R                   [        U5      -  sl         U $ r   rC   rD   s     r   __imul__IntegerNative.__imul__   r   r   c                     [        U5      nUS:X  a  [        S5      eUS:  a  [        S5      eU =R                  U-  sl        U $ )Nr   zDivision by zeroru   )r    r{   r   r   )r   rE   r~   s      r   __imod__IntegerNative.__imod__   sD    d)a<#$677Q;788wr   c                 P    U R                  U R                  [        U5      -  5      $ r   rp   rD   s     r   __and__IntegerNative.__and__       ~~dkkCI566r   c                 P    U R                  U R                  [        U5      -  5      $ r   rp   rD   s     r   __or__IntegerNative.__or__   r   r   c                      U R                  U R                  [        U5      -	  5      $ ! [         a    U R                  S:  a   g gf = fNr   )ra   r   r    OverflowErrorr   poss     r   
__rshift__IntegerNative.__rshift__   sD    	>>$++S"9:: 	{{a		s   &) AAc                      U =R                   [        U5      -  sl         U $ ! [         a    U R                   S:  a   g gf = fr   )r   r    r   r   s     r   __irshift__IntegerNative.__irshift__   sC    	KKCH$K   	{{a		s   " A Ac                      U R                  U R                  [        U5      -  5      $ ! [         a    [	        S5      ef = fNzIncorrect shift count)ra   r   r    r   r   r   s     r   
__lshift__IntegerNative.__lshift__   s>    	6>>$++S"9:: 	6455	6s   &) ?c                 v     U =R                   [        U5      -  sl         U $ ! [         a    [        S5      ef = fr   )r   r    r   r   r   s     r   __ilshift__IntegerNative.__ilshift__   s=    	6KKCH$K   	6455	6s   " 8c                 >   U R                   S:  a  [        S5      e  U R                   UR                   -	  S-  nUR                   S:  a  [        S5      e U$ ! [         a'    U R                   U-	  S-  nUS:  a  [        S5      e U$ f = f! [         a    Sn U$ f = f)Nr   z)no bit representation for negative valuesr   znegative bit count)r   r   r   r   )r   nr:   s      r   get_bitIntegerNative.get_bit   s    ;;?HII
	;++1Q688a<$%9::    " ;++*a/q5$%9::  ;  	F	s)   7A -B	B B		B BBc                 &    U R                   S-  S:H  $ )Nr   r   r   s    r   is_oddIntegerNative.is_odd      aA%%r   c                 &    U R                   S-  S:H  $ )Nr   r   r   r   s    r   is_evenIntegerNative.is_even  r   r   c                     U R                   S:  a  [        S5      eU R                   S:X  a  gU R                   R                  5       $ )Nr   r0   r   )r   r   
bit_lengthr   s    r   size_in_bitsIntegerNative.size_in_bits  s;    ;;?MNN;;!{{%%''r   c                 4    U R                  5       S-
  S-  S-   $ )Nr      )r   r   s    r   size_in_bytesIntegerNative.size_in_bytes  s     !!#a'A-11r   c                    U R                   S:  a  gU R                   S;   a  gU R                   S-  nUS-  nX R                   :  a*  X R                   -   SU-  -  nUS-  nX R                   :  a  M*  U R                   US-  :H  $ )Nr   F)r   r   Tr   r   )r   r   square_xs      r   is_perfect_squareIntegerNative.is_perfect_square   s    ;;?;;& KK16$KK'QU3AAvH $ {{a1f$$r   c                 R    U R                   [        U5      -  S:X  a  [        S5      eg )Nr   zValue is composite)r   r    r   )r   small_primes     r   fail_if_divisible_by"IntegerNative.fail_if_divisible_by/  s)    KK#k**q0122 1r   c                 Z    U =R                   [        U5      [        U5      -  -  sl         U $ r   rC   )r   abs      r   multiply_accumulate!IntegerNative.multiply_accumulate3  s!    s1vA&r   c                 $    [        U5      U l        g r   r,   )r   sources     r   setIntegerNative.set7  s    &kr   c                 N    [        U R                  [        U5      5      U l        U $ r   )r   r   r    )r   r~   s     r   inplace_inverseIntegerNative.inplace_inverse:  s    dkk3w<8r   c                 J    U R                  U 5      nUR                  U5        U$ r   )ra   r   )r   r~   r:   s      r   r   IntegerNative.inverse>  s#    %w'r   c           
          U R                  [        [        U R                  5      [        [	        U5      5      5      5      $ r   )ra   r   r   r   r    rD   s     r   gcdIntegerNative.gcdC  s)    ~~c#dkk"2CD	NCDDr   c                     [        U5      nU R                  S:X  d  US:X  a  U R                  S5      $ U R                  [        U R                  U-  U R	                  U5      R                  -  5      5      $ rY   )r    r   ra   r   r   rD   s     r   lcmIntegerNative.lcmF  s\    4y;;!tqy>>!$$~~c4;;#5$((4.:O:O"OPQQr   c                    [        U 5      n [        U5      nUS::  a  [        S5      eUS-  S:X  a  [        S5      eX-  n U S:X  d  US:X  a  gU S:X  a  gSnU nUS-  S:X  a  US-  nUS-  nUS-  S:X  a  M  US-  S:X  a  SnOUS-  S;   a  SnOSnUS-  S	:X  a  US-  S	:X  a  U* nX-  nU[        R                  XS5      -  $ )
Nr   zn must be a positive integerr   z#n must be odd for the Jacobi symbolr   )r      r         )r    r   r
   jacobi_symbol)r   r   ea1sn1s         r   r   IntegerNative.jacobi_symbolL  s    FF6;<<Ea<BCC E6Q!V6Av!m1HBFA Av!m Ea<AUf_AAq5A:"q&A+AV=..r666r   c                     US:  a  [        S5      eUS:X  a  [        S5      eUS-  S:X  a  [        S5      e[        [        U5      5      n[        X-  U-  U5      $ )Nr   ru   rz   r   zOdd modulus is required)r   r{   r4   r   )term1term2r~   
number_lens       r   _mult_modulo_bytes IntegerNative._mult_modulo_bytest  sc    Q;788a<#$<==aKA677w/0
emw6
CCr   r   )r   r1   )r1   r   );__name__
__module____qualname____firstlineno____doc__r   r   r!   r$   r(   r-   r;   classmethodr@   rF   rI   rM   rP   rS   rV   rZ   __bool__r]   rd   ri   rm   rr   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   staticmethodr   r   __static_attributes__ r   r   r
   r
   $   s6   = )    / /(
%'6%% H""";; 5 &*776"&&(2%3"
ER %7 %7N 	D 	Dr   r
   N)_IntegerBaser   Crypto.Util.numberr   r   r   r   r
   r   r   r   <module>r     s    > & I IZDK ZDr   