
    ¿ig@,                     F    d dl mZ ddlmZmZmZmZ  G d de          ZdS )   )IntegerBase    )long_to_bytesbytes_to_longinverseGCDc                   |   e Zd ZdZd Zd Zd Zd Zd Zd Z	d7d
Z
ed8d            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d9dZd9dZd Zd9d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/ Z0d0 Z1d1 Z2d2 Z3d3 Z4d4 Z5e6d5             Z7e6d6             Z8dS ):IntegerNativez3A class to model a natural integer (including zero)c                     t          |t                    rt          d          	 |j        | _        d S # t          $ r || _        Y d S w xY w)Nz-A floating point type is not a natural number)
isinstancefloat
ValueError_valueAttributeError)selfvalues     Z/var/www/html/afkarena/venv/lib/python3.11/site-packages/Cryptodome/Math/_IntegerNative.py__init__zIntegerNative.__init__'   s^    eU## 	NLMMM	 ,DKKK 	  	  	 DKKKK	 s   4 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    3t99~~r   c                 &    dt          |           z  S )NzInteger(%s))r   r   s    r   __repr__zIntegerNative.__repr__6   s    s4yy((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   r   bigc                 Z   | j         dk     rt          d          t          | j         |          }t          |          |cxk    rdk    rn nt          d          |dk    rnH|dk    r3t	          |          }|                                 t          |          }nt          d          |S )Nr   .Conversion only valid for non-negative numberszValue too large to encoder(   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Nt{J77v;;''''a'''''8999(""v&&FNN6]]FF2333r   c                     |dk    rn9|dk    r$t          |          }|                                 nt          d           | t          |                    S )Nr(   r+   r,   )r.   r/   r   r   )clsbyte_stringr2   s      r   
from_byteszIntegerNative.from_bytesQ   sd    (""#K00K!!!!2333s=--...r   c                 :    |dS | j         t          |          k    S )NFr   r   r   terms     r   __eq__zIntegerNative.__eq__]   s    <5{c$ii''r   c                 .    |                      |           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YY&&r   c                 V    |                      |          p|                     |          S r   )rB   r=   r;   s     r   __le__zIntegerNative.__le__h   s%    {{4  5DKK$5$55r   c                 .    |                      |           S r   )rD   r;   s     r   __gt__zIntegerNative.__gt__k   r@   r   c                 .    |                      |           S r   )rB   r;   s     r   __ge__zIntegerNative.__ge__n   r@   r   c                     | j         dk    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        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   T    	">>$+D		"9:::NI6 	" 	" 	"!!!!	"   ), AAc                     	 |                      | 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        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__   sT    	">>$+F";<<<NI6 	" 	" 	"!!!!	"rU   c                 V    |                      | j        t          |          z            S r   rP   r   r   )r   divisors     r   __floordiv__zIntegerNative.__floordiv__   s!    ~~dkS\\9:::r   c                     t          |          }|dk     rt          d          |                     | j        |z            S )Nr   Modulus must be positive)r   r   rP   r   )r   r]   divisor_values      r   __mod__zIntegerNative.__mod__   s@    G17888~~dkM9:::r   Nc                     t          |          }|dk     rt          d          |:t          |          }|dk     rt          d          |dk    rt          d          n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   s    MM	q==<===GI1}} !;<<<A~~'(@AAA  I$+y)<<r   c                 X    |                      |           }|                    ||          S r   )rP   rk   )r   rg   rh   r3   s       r   __pow__zIntegerNative.__pow__   s)    %%!!(G444r   c                 *    t          | j                  S r   )absr   r   s    r   __abs__zIntegerNative.__abs__   r$   r   c                    | j         }|;|dk     rt          d          |}|dz   dz  }||k     r|}|||z  z   dz  }||k     |}n.|dk    rt          d          |                     | |z  |          }|                     |          S )Nr   zSquare root of negative valuer      r`   )r   r   _tonelli_shanksrP   )r   rh   r   xyr3   s         r   sqrtzIntegerNative.sqrt   s    ?qyy !@AAA AQ1Aa%%!^) a%% FF!|| !;<<<))$.'BBF~~f%%%r   c                 @    | xj         t          |          z  c_         | S r   r:   r;   s     r   __iadd__zIntegerNative.__iadd__       s4yy r   c                 @    | xj         t          |          z  c_         | S r   r:   r;   s     r   __isub__zIntegerNative.__isub__   ry   r   c                 @    | 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__   sR    d))a<<#$6777Q;;7888wr   c                 V    |                      | j        t          |          z            S r   r\   r;   s     r   __and__zIntegerNative.__and__   !    ~~dkCII5666r   c                 V    |                      | j        t          |          z            S r   r\   r;   s     r   __or__zIntegerNative.__or__   r   r   c                     	 |                      | j        t          |          z	            S # t          $ r | j        dk    rY dS Y dS w xY wNr   )rP   r   r   OverflowErrorr   poss     r   
__rshift__zIntegerNative.__rshift__   s\    	>>$+S"9::: 	 	 	{aqqrr		s   ), AAc                     	 | xj         t          |          z  c_         n# t          $ r | j         dk    rY dS Y dS w xY w| S r   )r   r   r   r   s     r   __irshift__zIntegerNative.__irshift__   s\    	KKCHH$KKK 	 	 	{aqqrr		
 s     <<c                     	 |                      | 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__   sP    	6>>$+S"9::: 	6 	6 	64555	6s	   ), Ac                 ~    	 | xj         t          |          z  c_         n# t          $ r t          d          w xY w| S r   )r   r   r   r   r   s     r   __ilshift__zIntegerNative.__ilshift__   sN    	6KKCHH$KKK 	6 	6 	64555	6s     :c                 "   | j         dk     rt          d          	 	 | j         |j         z	  dz  }|j         dk     rt          d          n2# t          $ r% | j         |z	  dz  }|dk     rt          d          Y nw xY wn# t          $ r d}Y nw xY w|S )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I
	;+1Q68a<<$%9:::  ! ; ; ;+*a/q55$%9::: 5;  	 	 	FFF	s/   ,A
 	A= 
,A96A= 8A99A= =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dS | j                                         S )Nr   r*   r   )r   r   
bit_lengthr   s    r   size_in_bitszIntegerNative.size_in_bits  sB    ;??MNNN;!1{%%'''r   c                 <    |                                  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dS | j         dv rdS | j         dz  }|dz  }|| j         k    r || j         z   d|z  z  }|dz  }|| j         k     | j         |dz  k    S )Nr   F)r   r   Trr   r   )r   rt   square_xs      r   is_perfect_squarezIntegerNative.is_perfect_square   s    ;??5;&  4K16$$DK'QU3AAvH $$ {a1f$$r   c                 Z    | j         t          |          z  dk    rt          d          d S )Nr   zValue is composite)r   r   r   )r   small_primes     r   fail_if_divisible_byz"IntegerNative.fail_if_divisible_by/  s3    K#k***q001222 10r   c                 `    | xj         t          |          t          |          z  z  c_         | S r   r:   )r   abs      r   multiply_accumulatez!IntegerNative.multiply_accumulate3  s'    s1vvA&r   c                 .    t          |          | _        d S r   r&   )r   sources     r   setzIntegerNative.set7  s    &kkr   c                 T    t          | j        t          |                    | _        | S r   )r   r   r   )r   rh   s     r   inplace_inversezIntegerNative.inplace_inverse:  s     dk3w<<88r   c                 Z    |                      |           }|                    |           |S r   )rP   r   )r   rh   r3   s      r   r   zIntegerNative.inverse>  s,    %%w'''r   c           
          |                      t          t          | j                  t          t	          |                                        S r   )rP   r   ro   r   r   r;   s     r   gcdzIntegerNative.gcdC  s4    ~~c#dk"2"2CD		NNCCDDDr   c                     t          |          }| j        dk    s|dk    r|                     d          S |                     t          | j        |z  |                     |          j        z                      S rJ   )r   r   rP   ro   r   r;   s     r   lcmzIntegerNative.lcmF  sg    4yy;!tqyy>>!$$$~~c4;#5$((4..:O"OPPQQQr   c                    t          |           } t          |          }|dk    rt          d          |dz  dk    rt          d          | |z  } | dk    s|dk    rdS | dk    rdS d}| }|dz  dk    r|dz  }|dz  }|dz  dk    |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                              ||          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&   FFFF66;<<<Ea<<BCCC E66Q!VV1661Av!mm1HBFA Av!mm Ea<<AAUf__AAAq5A::"q&A++AV=..r26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  s~    Q;;7888a<<#$<===aKA6777w//00
eemw6
C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
   $   sV       ==         ) ) )               / / / [/( ( (
% % %' ' '6 6 6% % %% % %     H  " " "" " "" " "; ; ;; ; ;    5 5 5 5     & & & &*        7 7 77 7 7    6 6 6    "& & && & &( ( (2 2 2% % %3 3 3  " " "    
E E ER R R %7 %7 \%7N 	D 	D \	D 	D 	Dr   r
   N)_IntegerBaser   Cryptodome.Util.numberr   r   r   r   r
   r   r   r   <module>r      s   > & % % % % % M M M M M M M M M M M MZD ZD ZD ZD ZDK ZD ZD ZD ZD ZDr   