
    ,h<,                     >    d dl mZ ddlmZmZmZmZ  G d de      Zy)   )IntegerBase    )long_to_bytesbytes_to_longinverseGCDc                   h   e Zd ZdZd Zd Zd Zd Zd Zd Z	d5dZ
ed6d	       Zd
 Zd Zd Zd Zd Zd Zd ZeZd Zd Zd Zd Zd Zd Zd7dZd7dZd Zd7d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. Z1d/ Z2d0 Z3d1 Z4d2 Z5e6d3        Z7e6d4        Z8y)8IntegerNativez3A class to model a natural integer (including zero)c                     t        |t              rt        d      	 |j                  | _        y # t        $ r
 || _        Y y w xY w)Nz-A floating point type is not a natural number)
isinstancefloat
ValueError_valueAttributeError)selfvalues     \/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/Crypto/Math/_IntegerNative.py__init__zIntegerNative.__init__'   s>    eU#LMM	 ,,DK 	 DK	 s   / AAc                     | j                   S Nr   r   s    r   __int__zIntegerNative.__int__0   s    {{    c                 *    t        t        |             S r   )strintr   s    r   __str__zIntegerNative.__str__3   s    3t9~r   c                     dt        |       z  S )NzInteger(%s))r   r   s    r   __repr__zIntegerNative.__repr__6   s    s4y((r   c                 ,    t        | j                        S r   )hexr   r   s    r   __hex__zIntegerNative.__hex__:       4;;r   c                 ,    t        | j                        S r   r   r   r   s    r   	__index__zIntegerNative.__index__>   r$   r   c                 "   | j                   dk  rt        d      t        | j                   |      }t        |      |cxkD  rdkD  rt        d       |dk(  r	 |S |dk(  r(t	        |      }|j                          t        |      }|S t        d      )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_byteszIntegerNative.to_bytesA   s    ;;?MNNt{{J7v;'a'899 (  ("v&FNN6]F  233r   c                     |dk(  rn,|dk(  rt        |      }|j                          nt        d       | t        |            S )Nr*   r+   r,   )r.   r/   r   r   )clsbyte_stringr2   s      r   
from_byteszIntegerNative.from_bytesQ   sG    ("#K0K!233=-..r   c                 8    |y| j                   t        |      k(  S )NFr   r   r   terms     r   __eq__zIntegerNative.__eq__]   s    <{{c$i''r   c                 &    | j                  |       S r   )r=   r;   s     r   __ne__zIntegerNative.__ne__b       ;;t$$$r   c                 2    | j                   t        |      k  S r   r:   r;   s     r   __lt__zIntegerNative.__lt__e   s    {{SY&&r   c                 J    | j                  |      xs | j                  |      S r   )rB   r=   r;   s     r   __le__zIntegerNative.__le__h   s    {{4 5DKK$55r   c                 &    | j                  |       S r   )rD   r;   s     r   __gt__zIntegerNative.__gt__k   r@   r   c                 &    | j                  |       S r   )rB   r;   s     r   __ge__zIntegerNative.__ge__n   r@   r   c                      | j                   dk7  S Nr   r   r   s    r   __nonzero__zIntegerNative.__nonzero__q   s    {{ar   c                      | j                   dk  S rJ   r   r   s    r   is_negativezIntegerNative.is_negativeu   s    {{Qr   c                     	 | j                  | j                  t        |      z         S # t        t        t
        f$ r	 t        cY S w xY wr   	__class__r   r   r   r   	TypeErrorNotImplementedr;   s     r   __add__zIntegerNative.__add__y   ?    	">>$++D	"9::NI6 	"!!	"   &) AAc                     	 | j                  | j                  t        |      z
        S # t        t        t
        f$ r	 t        cY S w xY wr   rO   r;   s     r   __sub__zIntegerNative.__sub__   rT   rU   c                     	 | j                  | j                  t        |      z        S # t        t        t
        f$ r	 t        cY S w xY wr   rO   )r   factors     r   __mul__zIntegerNative.__mul__   s?    	">>$++F";<<NI6 	"!!	"rU   c                 P    | j                  | j                  t        |      z        S r   rP   r   r   )r   divisors     r   __floordiv__zIntegerNative.__floordiv__   s    ~~dkkS\9::r   c                 t    t        |      }|dk  rt        d      | j                  | j                  |z        S )Nr   Modulus must be positive)r   r   rP   r   )r   r]   divisor_values      r   __mod__zIntegerNative.__mod__   s7    G1788~~dkkM9::r   Nc                     t        |      }|dk  rt        d      |+t        |      }|dk  rt        d      |dk(  rt        d      d }t        | j                  ||      | _        | S )Nr   zExponent must not be negativer`   Modulus cannot be zero)r   r   ZeroDivisionErrorpowr   )r   exponentmodulus	exp_value	mod_values        r   inplace_powzIntegerNative.inplace_pow   sq    M	q=<==GI1} !;<<A~'(@AAI$++y)<r   c                 H    | j                  |       }|j                  ||      S r   )rP   rk   )r   rg   rh   r3   s       r   __pow__zIntegerNative.__pow__   s#    %!!(G44r   c                 ,    t        | j                        S r   )absr   r   s    r   __abs__zIntegerNative.__abs__   r$   r   c                     | j                   }|5|dk  rt        d      |}|dz   dz  }||k  r|}|||z  z   dz  }||k  r|}n%|dk  rt        d      | j                  | |z  |      }| j                  |      S )Nr   zSquare root of negative valuer      r`   )r   r   _tonelli_shanksrP   )r   rh   r   xyr3   s         r   sqrtzIntegerNative.sqrt   s    ?qy !@AA AQ1Aa%!^) a% F!| !;<<))$.'BF~~f%%r   c                 B    | xj                   t        |      z  c_         | S r   r:   r;   s     r   __iadd__zIntegerNative.__iadd__       s4y r   c                 B    | xj                   t        |      z  c_         | S r   r:   r;   s     r   __isub__zIntegerNative.__isub__   ry   r   c                 B    | xj                   t        |      z  c_         | S r   r:   r;   s     r   __imul__zIntegerNative.__imul__   ry   r   c                     t        |      }|dk(  rt        d      |dk  rt        d      | xj                  |z  c_        | S )Nr   zDivision by zeror`   )r   re   r   r   )r   r<   rh   s      r   __imod__zIntegerNative.__imod__   sD    d)a<#$677Q;788wr   c                 P    | j                  | j                  t        |      z        S r   r\   r;   s     r   __and__zIntegerNative.__and__       ~~dkkCI566r   c                 P    | j                  | j                  t        |      z        S r   r\   r;   s     r   __or__zIntegerNative.__or__   r   r   c                     	 | j                  | j                  t        |      z	        S # t        $ r | j                  dk\  rY yY yw xY wNr   )rP   r   r   OverflowErrorr   poss     r   
__rshift__zIntegerNative.__rshift__   sD    	>>$++S"9:: 	{{a		s   &) AAc                     	 | xj                   t        |      z  c_         | S # t        $ r | j                   dk\  rY yY yw xY wr   )r   r   r   r   s     r   __irshift__zIntegerNative.__irshift__   sC    	KKCH$K   	{{a		s   " ??c                     	 | j                  | j                  t        |      z        S # t        $ r t	        d      w xY wNzIncorrect shift count)rP   r   r   r   r   r   s     r   
__lshift__zIntegerNative.__lshift__   s>    	6>>$++S"9:: 	6455	6s   &) >c                 t    	 | xj                   t        |      z  c_         | S # t        $ r t        d      w xY wr   )r   r   r   r   r   s     r   __ilshift__zIntegerNative.__ilshift__   s=    	6KKCH$K   	6455	6s   " 7c                 4   | j                   dk  rt        d      	 	 | j                   |j                   z	  dz  }|j                   dk  rt        d      	 |S # t        $ r& | j                   |z	  dz  }|dk  rt        d      Y |S w xY w# t        $ r d}Y |S w xY w)Nr   z)no bit representation for negative valuesr   znegative bit count)r   r   r   r   )r   nr3   s      r   get_bitzIntegerNative.get_bit   s    ;;?HII
	;++1Q688a<$%9::    " ;++*a/q5$%9::  ;  	F	s)   6A +BB BB BBc                 &    | j                   dz  dk(  S )Nr   r   r   s    r   is_oddzIntegerNative.is_odd      aA%%r   c                 &    | j                   dz  dk(  S )Nr   r   r   r   s    r   is_evenzIntegerNative.is_even  r   r   c                     | j                   dk  rt        d      | j                   dk(  ry| j                   j                         S )Nr   r)   r   )r   r   
bit_lengthr   s    r   size_in_bitszIntegerNative.size_in_bits  s;    ;;?MNN;;!{{%%''r   c                 4    | j                         dz
  dz  dz   S )Nr      )r   r   s    r   size_in_byteszIntegerNative.size_in_bytes  s     !!#a'A-11r   c                     | j                   dk  ry| j                   dv ry| j                   dz  }|dz  }|| j                   kD  r*|| j                   z   d|z  z  }|dz  }|| j                   kD  r*| j                   |dz  k(  S )Nr   F)r   r   Trr   r   )r   rt   square_xs      r   is_perfect_squarezIntegerNative.is_perfect_square   s    ;;?;;& KK16$DKK'QU3AAvH $ {{a1f$$r   c                 P    | j                   t        |      z  dk(  rt        d      y )Nr   zValue is composite)r   r   r   )r   small_primes     r   fail_if_divisible_byz"IntegerNative.fail_if_divisible_by/  s)    KK#k**q0122 1r   c                 Z    | xj                   t        |      t        |      z  z  c_         | S r   r:   )r   abs      r   multiply_accumulatez!IntegerNative.multiply_accumulate3  s!    s1vA&r   c                 $    t        |      | _        y r   r&   )r   sources     r   setzIntegerNative.set7  s    &kr   c                 N    t        | j                  t        |            | _        | S r   )r   r   r   )r   rh   s     r   inplace_inversezIntegerNative.inplace_inverse:  s    dkk3w<8r   c                 J    | j                  |       }|j                  |       |S r   )rP   r   )r   rh   r3   s      r   r   zIntegerNative.inverse>  s#    %w'r   c           
          | j                  t        t        | j                        t        t	        |                        S r   )rP   r   ro   r   r   r;   s     r   gcdzIntegerNative.gcdC  s)    ~~c#dkk"2CD	NCDDr   c                     t        |      }| j                  dk(  s|dk(  r| j                  d      S | j                  t        | j                  |z  | j	                  |      j                  z              S rJ   )r   r   rP   ro   r   r;   s     r   lcmzIntegerNative.lcmF  s\    4y;;!tqy>>!$$~~c4;;#5$((4.:O:O"OPQQr   c                 n   t        |       } t        |      }|dk  rt        d      |dz  dk(  rt        d      | |z  } | dk(  s|dk(  ry| dk(  ryd}| }|dz  dk(  r|dz  }|dz  }|dz  dk(  r|dz  dk(  rd}n|dz  dv rd}nd}|dz  d	k(  r|dz  d	k(  r| }||z  }|t        j                  ||      z  S )
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   z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=..r2666r   c                     |dk  rt        d      |dk(  rt        d      |dz  dk(  rt        d      t        t        |            }t        | |z  |z  |      S )Nr   r`   rd   r   zOdd modulus is required)r   re   r-   r   )term1term2rh   
number_lens       r   _mult_modulo_bytesz IntegerNative._mult_modulo_bytest  se    Q;788a<#$<==aKA677w/0
eemw6
CCr   )r   r*   )r*   r   )9__name__
__module____qualname____doc__r   r   r   r    r#   r'   r4   classmethodr8   r=   r?   rB   rD   rF   rH   rK   __bool__rM   rS   rW   rZ   r^   rb   rk   rm   rp   rv   rx   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   staticmethodr   r    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   