§
    8·tcwd  ã                   ó„  — d dl Z d dlmZmZ d dlmZmZmZmZm	Z	m
Z
mZmZ ddlmZ dZe j        dk    r ed¦  «        ‚ ed	e¦  «        Zd	ed
œZ eed¦  «        r ed¦  «        ‚ed         dk    rd dlmZmZmZmZ  G d„ de¦  «        Zd„ Zn	d dlmZ d„ Z G d„ de¦  «        Z e¦   «         Z G d„ de¦  «        Z dS )é    N)ÚtobytesÚis_native_int)ÚbackendÚload_libÚget_raw_bufferÚget_c_stringÚnull_pointerÚcreate_string_bufferÚc_ulongÚc_size_té   )ÚIntegerBaseaW  typedef unsigned long UNIX_ULONG;
        typedef struct { int a; int b; void *c; } MPZ;
        typedef MPZ mpz_t[1];
        typedef UNIX_ULONG mp_bitcnt_t;
        void __gmpz_init (mpz_t x);
        void __gmpz_init_set (mpz_t rop, const mpz_t op);
        void __gmpz_init_set_ui (mpz_t rop, UNIX_ULONG op);
        UNIX_ULONG __gmpz_get_ui (const mpz_t op);
        void __gmpz_set (mpz_t rop, const mpz_t op);
        void __gmpz_set_ui (mpz_t rop, UNIX_ULONG op);
        void __gmpz_add (mpz_t rop, const mpz_t op1, const mpz_t op2);
        void __gmpz_add_ui (mpz_t rop, const mpz_t op1, UNIX_ULONG op2);
        void __gmpz_sub_ui (mpz_t rop, const mpz_t op1, UNIX_ULONG op2);
        void __gmpz_addmul (mpz_t rop, const mpz_t op1, const mpz_t op2);
        void __gmpz_addmul_ui (mpz_t rop, const mpz_t op1, UNIX_ULONG op2);
        void __gmpz_submul_ui (mpz_t rop, const mpz_t op1, UNIX_ULONG op2);
        void __gmpz_import (mpz_t rop, size_t count, int order, size_t size,
                            int endian, size_t nails, const void *op);
        void * __gmpz_export (void *rop, size_t *countp, int order,
                              size_t size,
                              int endian, size_t nails, const mpz_t op);
        size_t __gmpz_sizeinbase (const mpz_t op, int base);
        void __gmpz_sub (mpz_t rop, const mpz_t op1, const mpz_t op2);
        void __gmpz_mul (mpz_t rop, const mpz_t op1, const mpz_t op2);
        void __gmpz_mul_ui (mpz_t rop, const mpz_t op1, UNIX_ULONG op2);
        int __gmpz_cmp (const mpz_t op1, const mpz_t op2);
        void __gmpz_powm (mpz_t rop, const mpz_t base, const mpz_t exp, const
                          mpz_t mod);
        void __gmpz_powm_ui (mpz_t rop, const mpz_t base, UNIX_ULONG exp,
                             const mpz_t mod);
        void __gmpz_pow_ui (mpz_t rop, const mpz_t base, UNIX_ULONG exp);
        void __gmpz_sqrt(mpz_t rop, const mpz_t op);
        void __gmpz_mod (mpz_t r, const mpz_t n, const mpz_t d);
        void __gmpz_neg (mpz_t rop, const mpz_t op);
        void __gmpz_abs (mpz_t rop, const mpz_t op);
        void __gmpz_and (mpz_t rop, const mpz_t op1, const mpz_t op2);
        void __gmpz_ior (mpz_t rop, const mpz_t op1, const mpz_t op2);
        void __gmpz_clear (mpz_t x);
        void __gmpz_tdiv_q_2exp (mpz_t q, const mpz_t n, mp_bitcnt_t b);
        void __gmpz_fdiv_q (mpz_t q, const mpz_t n, const mpz_t d);
        void __gmpz_mul_2exp (mpz_t rop, const mpz_t op1, mp_bitcnt_t op2);
        int __gmpz_tstbit (const mpz_t op, mp_bitcnt_t bit_index);
        int __gmpz_perfect_square_p (const mpz_t op);
        int __gmpz_jacobi (const mpz_t a, const mpz_t b);
        void __gmpz_gcd (mpz_t rop, const mpz_t op1, const mpz_t op2);
        UNIX_ULONG __gmpz_gcd_ui (mpz_t rop, const mpz_t op1,
                                     UNIX_ULONG op2);
        void __gmpz_lcm (mpz_t rop, const mpz_t op1, const mpz_t op2);
        int __gmpz_invert (mpz_t rop, const mpz_t op1, const mpz_t op2);
        int __gmpz_divisible_p (const mpz_t n, const mpz_t d);
        int __gmpz_divisible_ui_p (const mpz_t n, UNIX_ULONG d);
        Úwin32zNot using GMP on WindowsÚgmp)ÚlibraryÚapiÚ__mpir_versionzMPIR library detectedr   Úctypes)Ú	StructureÚc_intÚc_void_pÚbyrefc                   ó$   — e Zd ZdefdefdefgZdS )Ú_MPZÚ	_mp_allocÚ_mp_sizeÚ_mp_dN)Ú__name__Ú
__module__Ú__qualname__r   r   Ú_fields_© ó    ú=/usr/lib/python3/dist-packages/Cryptodome/Math/_IntegerGMP.pyr   r   n   s-   € € € € € Ø  %Ð(Ø Ð'Ø˜hÐ'ð)ˆˆˆr#   r   c                  ó8   — t          t          ¦   «         ¦  «        S ©N)r   r   r"   r#   r$   Únew_mpzr'   s   s   € Ý•T‘V”V‰}Œ}Ðr#   )Úffic                  ó*   — t          j        d¦  «        S )NzMPZ*)r(   Únewr"   r#   r$   r'   r'   z   s   € ÝŒw�v‰ŒÐr#   c                   ó   — e Zd Zd„ ZdS )Ú_GMPc                 ó  — |                      d¦  «        rd|dd …         z   }n5|                      d¦  «        rd|dd …         z   }nt          d|z  ¦  «        ‚t          t          |¦  «        }t	          | ||¦  «         |S )NÚmpz_Ú__gmpz_é   Úgmp_Ú__gmp_zAttribute %s is invalid)Ú
startswithÚAttributeErrorÚgetattrÚlibÚsetattr)ÚselfÚnameÚ	func_nameÚfuncs       r$   Ú__getattr__z_GMP.__getattr__�   sŽ   € Ø�?Š?˜6Ñ"Ô"ð 	CØ! D¨¨¨¤HÑ,ˆIˆIØ�_Š_˜VÑ$Ô$ð 	CØ  4¨¨¨¤8Ñ+ˆIˆIå Ð!:¸TÑ!AÑBÔBÐBÝ•s˜IÑ&Ô&ˆÝ��d˜DÑ!Ô!Ð!Øˆr#   N)r   r   r    r<   r"   r#   r$   r,   r,      s#   € € € € € ð	ð 	ð 	ð 	ð 	r#   r,   c                   óÂ  — e Zd ZdZ e¦   «         Ze                     e ed¦  «        ¦  «         d„ Z	d„ Z
d„ Zd„ Zd„ Zd„ Zd7d	„Zed
„ ¦   «         Zd„ 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 d8d„Z!d8d„Z"d„ Z#d8d„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+„ Z2d,„ Z3d-„ Z4d.„ Z5d/„ Z6d0„ Z7d1„ Z8d2„ Z9d3„ Z:d4„ Z;ed5„ ¦   «         Z<d6„ Z=dS )9Ú
IntegerGMPz#A fast, arbitrary precision integerr   c           	      ó²  — t          ¦   «         | _        d| _        t          |t          ¦  «        rt          d¦  «        ‚d| _        t          |¦  «        �r@t                               | j        ¦  «         |dk    rdS t          ¦   «         }t                               |¦  «         |dk    }t          |¦  «        }| 
                    ¦   «         dz
  dz  dz   }|dk    rŽ|dz
  }t                               |t          d||dz  z	  z  ¦  «        ¦  «         t                               ||t          |dz  ¦  «        ¦  «         t                               | j        | j        |¦  «         |dk    °Ž|s't                               | j        | j        ¦  «         dS dS t          |t           ¦  «        r't                               | j        |j        ¦  «         dS t$          ‚)	z*Initialize the integer to the given value.Fz-A floating point type is not a natural numberTr   Nr   é    ì   ÿÿ )r'   Ú_mpz_pÚ_initializedÚ
isinstanceÚfloatÚ
ValueErrorr   Ú_gmpÚmpz_initÚabsÚ
bit_lengthÚ
mpz_set_uir   Úmpz_mul_2expÚmpz_addÚmpz_negr>   Úmpz_init_setÚNotImplementedError)r8   ÚvalueÚtmpÚpositiveÚreduceÚslotss         r$   Ú__init__zIntegerGMP.__init__–   s»  € õ ‘i”iˆŒØ!ˆÔå�e�UÑ#Ô#ð 	NÝÐLÑMÔMÐMà ˆÔå˜ÑÔñ 	&Ý�MŠM˜$œ+Ñ&Ô&Ð&Ø˜ŠzˆzØ�å‘)”)ˆCÝ�MŠM˜#ÑÔÐØ ’zˆHÝ˜‘Z”ZˆFØ×&Ò&Ñ(Ô(¨1Ñ,°Ñ3°aÑ7ˆEà˜!’)�)Ø ™	�Ý—’ Ý '¨
°fÀÈÁÑ6LÑ(MÑ NÔ NñPô Pð På×!Ò! # s­G°E¸B±JÑ,?Ô,?Ñ@Ô@Ð@Ý—’˜Tœ[¨$¬+°sÑ;Ô;Ð;ð ˜!’)�)ð ð 7Ý—’˜Tœ[¨$¬+Ñ6Ô6Ð6Ð6Ð6ð7ð 7å˜�zÑ*Ô*ð 	&Ý×Ò˜dœk¨5¬<Ñ8Ô8Ð8Ð8Ð8å%Ð%r#   c                 óÒ  — t          ¦   «         }t                               || j        ¦  «         d}d}t                               || j        ¦  «        dk    rzt                               |¦  «        dz  }|||dz  z  z  }t                               ||t          d¦  «        ¦  «         |dz   }t                               || j        ¦  «        dk    °z| dk     r| }t          |¦  «        S )Nr   rA   r@   r   )
r'   rG   rO   rB   Úmpz_cmpÚ_zero_mpz_pÚ
mpz_get_uiÚmpz_tdiv_q_2expr   Úint)r8   rR   rQ   ÚslotÚlsbs        r$   Ú__int__zIntegerGMP.__int__»   sÕ   € Ý‰iŒiˆÝ×Ò˜#˜tœ{Ñ+Ô+Ð+ØˆØˆÝ�lŠl˜3 Ô 0Ñ1Ô1°QÒ6Ð6Ý—/’/ #Ñ&Ô&¨Ñ3ˆCØ�S˜T B™YÑ'Ñ'ˆEÝ× Ò   c­7°2©;¬;Ñ7Ô7Ð7Ø˜!‘8ˆDõ	 �lŠl˜3 Ô 0Ñ1Ô1°QÒ6Ð6ð
 �!Š8ˆ8Ø�FˆEÝ�5‰zŒzÐr#   c                 ó:   — t          t          | ¦  «        ¦  «        S r&   )Ústrr\   ©r8   s    r$   Ú__str__zIntegerGMP.__str__É   ó   € Ý•3�t‘9”9‰~Œ~Ðr#   c                 ó&   — dt          | ¦  «        z  S )NzInteger(%s))ra   rb   s    r$   Ú__repr__zIntegerGMP.__repr__Ì   s   € Ø�s 4™yœyÑ(Ð(r#   c                 ó:   — t          t          | ¦  «        ¦  «        S r&   )Úhexr\   rb   s    r$   Ú__hex__zIntegerGMP.__hex__Ð   rd   r#   c                 ó    — t          | ¦  «        S r&   )r\   rb   s    r$   Ú	__index__zIntegerGMP.__index__Ô   s   € Ý�4‰yŒyÐr#   c           
      ó¨  — | dk     rt          d¦  «        ‚t                               | j        d¦  «        dz   dz  }||cxk    rdk    rn nt          d¦  «        ‚t	          |¦  «        }t                               |t          dt          d¦  «        dt          d¦  «        | j        ¦  «         dt          d||z
  ¦  «        z  t          |¦  «        z   S )	a=  Convert the number into a byte string.

        This method encodes the number in network order and prepends
        as many zero bytes as required. It only works for non-negative
        values.

        :Parameters:
          block_size : integer
            The exact size the output byte string must have.
            If zero, the string has the minimal length.
        :Returns:
          A byte string.
        :Raise ValueError:
          If the value is negative or if ``block_size`` is
          provided and the length of the byte string would exceed it.
        r   ú.Conversion only valid for non-negative numbersé   é   é   z@Number is too big to convert to byte string of prescribed lengthr   ó    )
rF   rG   Úmpz_sizeinbaserB   r
   Ú
mpz_exportr	   r   Úmaxr   )r8   Ú
block_sizeÚbuf_lenÚbufs       r$   Úto_byteszIntegerGMP.to_bytes×   så   € ð$ �!Š8ˆ8ÝÐMÑNÔNÐNå×&Ò& t¤{°AÑ6Ô6¸Ñ:¸qÑ@ˆØ�ZÐ#Ð#Ò#Ð# !Ò#Ð#Ð#Ð#Ð#Ýð 5ñ 6ô 6ð 6å" 7Ñ+Ô+ˆå�ŠØÝØÝ˜‘”ØÝ˜‘”Ø”ñ	ô 	ð 	ð �˜Q 
¨WÑ 4Ñ5Ô5Ñ5½ÀsÑ8KÔ8KÑKÐKr#   c           
      óÖ   — t          d¦  «        }t                               |j        t	          t          | ¦  «        ¦  «        dt	          d¦  «        dt	          d¦  «        | ¦  «         |S )a   Convert a byte string into a number.

        :Parameters:
          byte_string : byte string
            The input number, encoded in network order.
            It can only be non-negative.
        :Return:
          The ``Integer`` object carrying the same value as the input.
        r   r   )r>   rG   Ú
mpz_importrB   r   Úlen)Úbyte_stringÚresults     r$   Ú
from_byteszIntegerGMP.from_bytesý   s_   € õ ˜A‘”ˆÝ�ŠØœÝ ¥ [Ñ!1Ô!1Ñ2Ô2ØÝ  ™œØÝ  ™œØ#ñ	%ô 	%ð 	%ð ˆr#   c                 óv   — t          |t          ¦  «        st          |¦  «        } || j        |j        ¦  «        S r&   )rD   r>   rB   )r8   r;   Úterms      r$   Ú_apply_and_returnzIntegerGMP._apply_and_return  s7   € Ý˜$¥
Ñ+Ô+ð 	$Ý˜dÑ#Ô#ˆDØˆt�D”K ¤Ñ-Ô-Ð-r#   c                 ó–   — t          |t          ¦  «        st          |¦  «        sdS |                      t          j        |¦  «        dk    S )NFr   ©rD   r>   r   r�   rG   rX   ©r8   r€   s     r$   Ú__eq__zIntegerGMP.__eq__  sE   € Ý˜4¥Ñ,Ô,ð 	µ¸dÑ0CÔ0Cð 	Ø�5Ø×%Ò%¥d¤l°DÑ9Ô9¸QÒ>Ð>r#   c                 ó–   — t          |t          ¦  «        st          |¦  «        sdS |                      t          j        |¦  «        dk    S )NTr   rƒ   r„   s     r$   Ú__ne__zIntegerGMP.__ne__  sE   € Ý˜4¥Ñ,Ô,ð 	µ¸dÑ0CÔ0Cð 	Ø�4Ø×%Ò%¥d¤l°DÑ9Ô9¸QÒ>Ð>r#   c                 óJ   — |                       t          j        |¦  «        dk     S ©Nr   ©r�   rG   rX   r„   s     r$   Ú__lt__zIntegerGMP.__lt__#  ó   € Ø×%Ò%¥d¤l°DÑ9Ô9¸AÒ=Ð=r#   c                 óJ   — |                       t          j        |¦  «        dk    S r‰   rŠ   r„   s     r$   Ú__le__zIntegerGMP.__le__&  ó   € Ø×%Ò%¥d¤l°DÑ9Ô9¸QÒ>Ð>r#   c                 óJ   — |                       t          j        |¦  «        dk    S r‰   rŠ   r„   s     r$   Ú__gt__zIntegerGMP.__gt__)  rŒ   r#   c                 óJ   — |                       t          j        |¦  «        dk    S r‰   rŠ   r„   s     r$   Ú__ge__zIntegerGMP.__ge__,  r�   r#   c                 óT   — t                                | j        | j        ¦  «        dk    S r‰   ©rG   rX   rB   rY   rb   s    r$   Ú__nonzero__zIntegerGMP.__nonzero__/  s    € Ý�|Š|˜DœK¨Ô)9Ñ:Ô:¸aÒ?Ð?r#   c                 óT   — t                                | j        | j        ¦  «        dk     S r‰   r•   rb   s    r$   Úis_negativezIntegerGMP.is_negative3  s    € Ý�|Š|˜DœK¨Ô)9Ñ:Ô:¸QÒ>Ð>r#   c                 óô   — t          d¦  «        }t          |t           ¦  «        s(	 t          |¦  «        }n# t          $ r
 t          cY S w xY wt                               |j        | j        |j        ¦  «         |S r‰   )r>   rD   rP   ÚNotImplementedrG   rM   rB   ©r8   r€   r}   s      r$   Ú__add__zIntegerGMP.__add__7  ó…   € Ý˜A‘”ˆÝ˜$¥
Ñ+Ô+ð 	&ð&Ý! $Ñ'Ô'��øÝ&ð &ð &ð &Ý%Ð%Ð%Ð%ð&øøøå�Š�V”]Ø”[Ø”[ñ	"ô 	"ð 	"ð ˆó   ¦6 ¶A
Á	A
c                 óô   — t          d¦  «        }t          |t           ¦  «        s(	 t          |¦  «        }n# t          $ r
 t          cY S w xY wt                               |j        | j        |j        ¦  «         |S r‰   )r>   rD   rP   rš   rG   Úmpz_subrB   r›   s      r$   Ú__sub__zIntegerGMP.__sub__C  r�   rž   c                 óô   — t          d¦  «        }t          |t           ¦  «        s(	 t          |¦  «        }n# t          $ r
 t          cY S w xY wt                               |j        | j        |j        ¦  «         |S r‰   )r>   rD   rP   rš   rG   Úmpz_mulrB   r›   s      r$   Ú__mul__zIntegerGMP.__mul__O  r�   rž   c                 ó2  — t          |t          ¦  «        st          |¦  «        }t                               |j        | j        ¦  «        dk    rt          d¦  «        ‚t          d¦  «        }t                               |j        | j        |j        ¦  «         |S )Nr   úDivision by zero)rD   r>   rG   rX   rB   rY   ÚZeroDivisionErrorÚ
mpz_fdiv_q)r8   Údivisorr}   s      r$   Ú__floordiv__zIntegerGMP.__floordiv__[  sŽ   € Ý˜'¥:Ñ.Ô.ð 	*Ý  Ñ)Ô)ˆGÝ�<Š<˜œØÔ(ñ*ô *Ø-.ò/ð /å#Ð$6Ñ7Ô7Ð7Ý˜A‘”ˆÝ�Š˜œØœØœñ	(ô 	(ð 	(ð ˆr#   c                 ó`  — t          |t          ¦  «        st          |¦  «        }t                               |j        | j        ¦  «        }|dk    rt          d¦  «        ‚|dk     rt          d¦  «        ‚t          d¦  «        }t                               |j        | j        |j        ¦  «         |S ©Nr   r¦   úModulus must be positive©	rD   r>   rG   rX   rB   rY   r§   rF   Úmpz_mod)r8   r©   Úcompr}   s       r$   Ú__mod__zIntegerGMP.__mod__g  s¤   € Ý˜'¥:Ñ.Ô.ð 	*Ý  Ñ)Ô)ˆGÝ�|Š|˜GœNØ Ô,ñ.ô .ˆà�1Š9ˆ9Ý#Ð$6Ñ7Ô7Ð7Ø�!Š8ˆ8ÝÐ7Ñ8Ô8Ð8Ý˜A‘”ˆÝ�Š�V”]Ø”[Ø”^ñ	%ô 	%ð 	%ð ˆr#   Nc           	      ó$  — |€l|dk     rt          d¦  «        ‚|dk    rt          d¦  «        ‚t                               | j        | j        t	          t          |¦  «        ¦  «        ¦  «         �n!t          |t          ¦  «        st          |¦  «        }|st          d¦  «        ‚| 	                    ¦   «         rt          d¦  «        ‚t          |¦  «        rf|dk     rt          d¦  «        ‚|dk     r;t                               | j        | j        t	          |¦  «        |j        ¦  «         | S t          |¦  «        }n#| 	                    ¦   «         rt          d¦  «        ‚t                               | j        | j        |j        |j        ¦  «         | S )Nr   zExponent must not be negativeé   zExponent is too bigr¦   r­   é   )rF   rG   Ú
mpz_pow_uirB   r   r\   rD   r>   r§   r˜   r   Úmpz_powm_uiÚmpz_powm)r8   ÚexponentÚmoduluss      r$   Úinplace_powzIntegerGMP.inplace_powv  s˜  € àˆ?Ø˜!Š|ˆ|Ý Ð!@ÑAÔAÐAð ˜#Š~ˆ~Ý Ð!6Ñ7Ô7Ð7Ý�OŠO˜DœKØ œKÝ#¥C¨¡M¤MÑ2Ô2ñô ð ñ õ ˜g¥zÑ2Ô2ð .Ý$ WÑ-Ô-�Øð <Ý'Ð(:Ñ;Ô;Ð;Ø×"Ò"Ñ$Ô$ð =Ý Ð!;Ñ<Ô<Ð<Ý˜XÑ&Ô&ð BØ˜a’<�<Ý$Ð%DÑEÔEÐEØ˜eÒ#Ð#Ý×$Ò$ T¤[Ø%)¤[Ý%,¨XÑ%6Ô%6Ø%,¤^ñ5ô 5ð 5ð  �KÝ% hÑ/Ô/��Ø×%Ò%Ñ'Ô'ð BÝ Ð!@ÑAÔAÐAÝ�MŠM˜$œ+Øœ+Ø"œ/Ø!œ.ñ*ô *ð *ð ˆr#   c                 óL   — t          | ¦  «        }|                     ||¦  «        S r&   )r>   rº   )r8   r¸   r¹   r}   s       r$   Ú__pow__zIntegerGMP.__pow__�  s%   € Ý˜DÑ!Ô!ˆØ×!Ò! (¨GÑ4Ô4Ð4r#   c                 ón   — t          d¦  «        }t                               |j        | j        ¦  «         |S r‰   )r>   rG   Úmpz_absrB   )r8   r}   s     r$   Ú__abs__zIntegerGMP.__abs__¡  s*   € Ý˜A‘”ˆÝ�Š�V”] D¤KÑ0Ô0Ð0Øˆr#   c                 óL  — |€J| dk     rt          d¦  «        ‚t          d¦  «        }t                               |j        | j        ¦  «         nW|dk    rt          d¦  «        ‚t          |¦  «        }t          |                      t          | ¦  «        |z  |¦  «        ¦  «        }|S )zGReturn the largest Integer that does not
        exceed the square rootNr   zSquare root of negative valuer­   )rF   r>   rG   Úmpz_sqrtrB   r\   Ú_tonelli_shanks©r8   r¹   r}   s      r$   ÚsqrtzIntegerGMP.sqrt¦  s¢   € ð ˆ?Ø�aŠxˆxÝ Ð!@ÑAÔAÐAÝ ‘]”]ˆFÝ�MŠM˜&œ-Øœ+ñ'ô 'ð 'ð 'ð ˜!Š|ˆ|Ý Ð!;Ñ<Ô<Ð<Ý˜'‘l”lˆGÝ × 4Ò 4µS¸±Y´YÀÑ5HÈ'Ñ RÔ RÑSÔSˆFàˆr#   c                 ó®  — t          |¦  «        ršd|cxk    rdk     r8n n5t                               | j        | j        t	          |¦  «        ¦  «         | S d|cxk     rdk     r9n n6t                               | j        | j        t	          | ¦  «        ¦  «         | S t          |¦  «        }t                               | j        | j        |j        ¦  «         | S ©Nr   r´   é ÿÿ)r   rG   Ú
mpz_add_uirB   r   Ú
mpz_sub_uir>   rM   r„   s     r$   Ú__iadd__zIntegerGMP.__iadd__¸  óî   € Ý˜ÑÔð 	$Ø�DÐ Ð Ò Ð ˜5Ò Ð Ð Ð Ð Ý—’ ¤Ø $¤Ý '¨¡¤ñ/ô /ð /ð �Ø˜Ð Ð Ò Ð ˜qÒ Ð Ð Ð Ð Ý—’ ¤Ø $¤Ý '¨¨¡¤ñ0ô 0ð 0ð �Ý˜dÑ#Ô#ˆDÝ�Š�T”[Ø”[Ø”[ñ	"ô 	"ð 	"ð ˆr#   c                 ó®  — t          |¦  «        ršd|cxk    rdk     r8n n5t                               | j        | j        t	          |¦  «        ¦  «         | S d|cxk     rdk     r9n n6t                               | j        | j        t	          | ¦  «        ¦  «         | S t          |¦  «        }t                               | j        | j        |j        ¦  «         | S rÆ   )r   rG   rÉ   rB   r   rÈ   r>   r    r„   s     r$   Ú__isub__zIntegerGMP.__isub__Ê  rË   r#   c                 óø  — t          |¦  «        r¿d|cxk    rdk     r8n n5t                               | j        | j        t	          |¦  «        ¦  «         | S d|cxk     rdk     r^n n[t                               | j        | j        t	          | ¦  «        ¦  «         t                               | j        | j        ¦  «         | S t          |¦  «        }t                               | j        | j        |j        ¦  «         | S rÆ   )r   rG   Ú
mpz_mul_uirB   r   rN   r>   r£   r„   s     r$   Ú__imul__zIntegerGMP.__imul__Ü  s  € Ý˜ÑÔð 	$Ø�DÐ Ð Ò Ð ˜5Ò Ð Ð Ð Ð Ý—’ ¤Ø $¤Ý '¨¡¤ñ/ô /ð /ð �Ø˜Ð Ð Ò Ð ˜qÒ Ð Ð Ð Ð Ý—’ ¤Ø $¤Ý '¨¨¡¤ñ0ô 0ð 0õ —’˜Tœ[¨$¬+Ñ6Ô6Ð6Ø�Ý˜dÑ#Ô#ˆDÝ�Š�T”[Ø”[Ø”[ñ	"ô 	"ð 	"ð ˆr#   c                 óB  — t          |t          ¦  «        st          |¦  «        }t                               |j        |j        ¦  «        }|dk    rt          d¦  «        ‚|dk     rt          d¦  «        ‚t                               | j        | j        |j        ¦  «         | S r¬   r®   )r8   r©   r°   s      r$   Ú__imod__zIntegerGMP.__imod__ï  s™   € Ý˜'¥:Ñ.Ô.ð 	*Ý  Ñ)Ô)ˆGÝ�|Š|˜GœNØ#Ô/ñ1ô 1ˆà�1Š9ˆ9Ý#Ð$6Ñ7Ô7Ð7Ø�!Š8ˆ8ÝÐ7Ñ8Ô8Ð8Ý�Š�T”[Ø”[Ø”^ñ	%ô 	%ð 	%ð ˆr#   c                 óÂ   — t          d¦  «        }t          |t           ¦  «        st          |¦  «        }t                               |j        | j        |j        ¦  «         |S r‰   )r>   rD   rG   Úmpz_andrB   r›   s      r$   Ú__and__zIntegerGMP.__and__þ  óW   € Ý˜A‘”ˆÝ˜$¥
Ñ+Ô+ð 	$Ý˜dÑ#Ô#ˆDÝ�Š�V”]Ø”[Ø”[ñ	"ô 	"ð 	"ð ˆr#   c                 óÂ   — t          d¦  «        }t          |t           ¦  «        st          |¦  «        }t                               |j        | j        |j        ¦  «         |S r‰   )r>   rD   rG   Úmpz_iorrB   r›   s      r$   Ú__or__zIntegerGMP.__or__  rÖ   r#   c           	      óî   — t          d¦  «        }|dk     rt          d¦  «        ‚|dk    r
| dk     rdS dS t                               |j        | j        t          t          |¦  «        ¦  «        ¦  «         |S ©Nr   znegative shift countr´   éÿÿÿÿ)r>   rF   rG   r[   rB   r   r\   ©r8   Úposr}   s      r$   Ú
__rshift__zIntegerGMP.__rshift__  sz   € Ý˜A‘”ˆØ�Š7ˆ7ÝÐ3Ñ4Ô4Ð4Ø�Š;ˆ;Ø�aŠxˆxØ�rà�qÝ×Ò˜Vœ]Ø!œ[Ý$¥S¨¡X¤XÑ.Ô.ñ	0ô 	0ð 	0ð ˆr#   c           	      óÐ   — |dk     rt          d¦  «        ‚|dk    r
| dk     rdS dS t                               | j        | j        t	          t          |¦  «        ¦  «        ¦  «         | S rÛ   )rF   rG   r[   rB   r   r\   ©r8   rÞ   s     r$   Ú__irshift__zIntegerGMP.__irshift__  so   € Ø�Š7ˆ7ÝÐ3Ñ4Ô4Ð4Ø�Š;ˆ;Ø�aŠxˆxØ�rà�qÝ×Ò˜Tœ[Ø!œ[Ý$¥S¨¡X¤XÑ.Ô.ñ	0ô 	0ð 	0ð ˆr#   c           	      óà   — t          d¦  «        }d|cxk    rdk     sn t          d¦  «        ‚t                               |j        | j        t          t          |¦  «        ¦  «        ¦  «         |S ©Nr   r´   zIncorrect shift count)r>   rF   rG   rL   rB   r   r\   rÝ   s      r$   Ú
__lshift__zIntegerGMP.__lshift__+  st   € Ý˜A‘”ˆØ�CÐÐÒÐ˜%ÒÐÐÐÝÐ4Ñ5Ô5Ð5Ý×Ò˜&œ-Øœ+Ý!¥# c¡(¤(Ñ+Ô+ñ	-ô 	-ð 	-ð ˆr#   c           	      óÂ   — d|cxk    rdk     sn t          d¦  «        ‚t                               | j        | j        t	          t          |¦  «        ¦  «        ¦  «         | S rä   )rF   rG   rL   rB   r   r\   rá   s     r$   Ú__ilshift__zIntegerGMP.__ilshift__4  si   € Ø�CÐÐÒÐ˜%ÒÐÐÐÝÐ4Ñ5Ô5Ð5Ý×Ò˜$œ+Øœ+Ý!¥# c¡(¤(Ñ+Ô+ñ	-ô 	-ð 	-ð ˆr#   c           
      óô   — | dk     rt          d¦  «        ‚|dk     rt          d¦  «        ‚|dk    rdS t          t                               | j        t          t          |¦  «        ¦  «        ¦  «        ¦  «        S )zPReturn True if the n-th bit is set to 1.
        Bit 0 is the least significant.r   z)no bit representation for negative valuesznegative bit countr´   )rF   ÚboolrG   Ú
mpz_tstbitrB   r   r\   )r8   Úns     r$   Úget_bitzIntegerGMP.get_bit<  sw   € ð �!Š8ˆ8ÝÐHÑIÔIÐIØˆqŠ5ˆ5ÝÐ1Ñ2Ô2Ð2ØˆuŠ9ˆ9Ø�1Ý•D—O’O D¤KÝ$+­C°©F¬F¡O¤Oñ5ô 5ñ 6ô 6ð 	6r#   c                 óJ   — t                                | j        d¦  «        dk    S )Nr   r   ©rG   rê   rB   rb   s    r$   Úis_oddzIntegerGMP.is_oddJ  ó   € Ý�Š˜tœ{¨AÑ.Ô.°!Ò3Ð3r#   c                 óJ   — t                                | j        d¦  «        dk    S r‰   rî   rb   s    r$   Úis_evenzIntegerGMP.is_evenM  rð   r#   c                 ól   — | dk     rt          d¦  «        ‚t                               | j        d¦  «        S )z=Return the minimum number of bits that can encode the number.r   rm   rn   )rF   rG   rr   rB   rb   s    r$   Úsize_in_bitszIntegerGMP.size_in_bitsP  s4   € ð �!Š8ˆ8ÝÐMÑNÔNÐNÝ×"Ò" 4¤;°Ñ2Ô2Ð2r#   c                 ó<   — |                       ¦   «         dz
  dz  dz   S )z>Return the minimum number of bytes that can encode the number.r   rp   )rô   rb   s    r$   Úsize_in_byteszIntegerGMP.size_in_bytesW  s#   € à×!Ò!Ñ#Ô# aÑ'¨AÑ-°Ñ1Ð1r#   c                 óH   — t                                | j        ¦  «        dk    S r‰   )rG   Úmpz_perfect_square_prB   rb   s    r$   Úis_perfect_squarezIntegerGMP.is_perfect_square[  s   € Ý×(Ò(¨¬Ñ5Ô5¸Ò:Ð:r#   c                 óF  — t          |¦  «        r]d|cxk     rdk     rAn n>t                               | j        t	          |¦  «        ¦  «        rt          d¦  «        ‚dS t          |¦  «        }t                               | j        |j        ¦  «        rt          d¦  «        ‚dS )z3Raise an exception if the small prime is a divisor.r   r´   zThe value is compositeN)r   rG   Úmpz_divisible_ui_prB   r   rF   r>   Úmpz_divisible_p)r8   Úsmall_primes     r$   Úfail_if_divisible_byzIntegerGMP.fail_if_divisible_by^  s»   € õ ˜Ñ%Ô%ð 	2Ø�;Ð&Ð&Ò&Ð& Ò&Ð&Ð&Ð&Ð&Ý×*Ò*¨4¬;Ý+2°;Ñ+?Ô+?ñAô Að ?å$Ð%=Ñ>Ô>Ð>Ø�Ý$ [Ñ1Ô1ˆKÝ×Ò ¤Ø +Ô 2ñ4ô 4ð 	7åÐ5Ñ6Ô6Ð6ð	7ð 	7r#   c                 óö  — t          |t          ¦  «        st          |¦  «        }t          |¦  «        ršd|cxk     rdk     r8n n5t                               | j        |j        t          |¦  «        ¦  «         | S d|cxk     rdk     r9n n6t                               | j        |j        t          | ¦  «        ¦  «         | S t          |¦  «        }t                               | j        |j        |j        ¦  «         | S )z/Increment the number by the product of a and b.r   r´   rÇ   )	rD   r>   r   rG   Úmpz_addmul_uirB   r   Úmpz_submul_uiÚ
mpz_addmul)r8   ÚaÚbs      r$   Úmultiply_accumulatezIntegerGMP.multiply_accumulatel  sý   € õ ˜!�ZÑ(Ô(ð 	Ý˜1‘”ˆAÝ˜ÑÔð 	Ø�1ˆ}ˆ}Š}ˆ}�uŠ}ˆ}ˆ}ˆ}ˆ}Ý×"Ò" 4¤;Ø#$¤8Ý#*¨1¡:¤:ñ/ô /ð /ð �Ø˜ˆ~ˆ~Š~ˆ~˜AŠ~ˆ~ˆ~ˆ~ˆ~Ý×"Ò" 4¤;Ø#$¤8Ý#*¨A¨2¡;¤;ñ0ô 0ð 0ð �Ý˜1‘”ˆAÝ�Š˜œØœØœñ	"ô 	"ð 	"ð ˆr#   c                 ó˜   — t          |t          ¦  «        st          |¦  «        }t                               | j        |j        ¦  «         | S )z'Set the Integer to have the given value)rD   r>   rG   Úmpz_setrB   )r8   Úsources     r$   ÚsetzIntegerGMP.set‚  sG   € õ ˜&¥*Ñ-Ô-ð 	(Ý Ñ'Ô'ˆFÝ�Š�T”[Ø”]ñ	$ô 	$ð 	$àˆr#   c                 ód  — t          |t          ¦  «        st          |¦  «        }t                               |j        | j        ¦  «        }|dk    rt          d¦  «        ‚|dk     rt          d¦  «        ‚t                               | j        | j        |j        ¦  «        }|st          d¦  «        ‚| S )z…Compute the inverse of this number in the ring of
        modulo integers.

        Raise an exception if no inverse exists.
        r   zModulus cannot be zeror­   z No inverse value can be computed)	rD   r>   rG   rX   rB   rY   r§   rF   Ú
mpz_invert)r8   r¹   r°   r}   s       r$   Úinplace_inversezIntegerGMP.inplace_inverse‹  s°   € õ ˜'¥:Ñ.Ô.ð 	*Ý  Ñ)Ô)ˆGå�|Š|˜GœNØ Ô,ñ.ô .ˆà�1Š9ˆ9Ý#Ð$<Ñ=Ô=Ð=Ø�!Š8ˆ8ÝÐ7Ñ8Ô8Ð8å—’ ¤Ø!%¤Ø!(¤ñ1ô 1ˆð ð 	AÝÐ?Ñ@Ô@Ð@Øˆr#   c                 óN   — t          | ¦  «        }|                     |¦  «         |S r&   )r>   r  rÃ   s      r$   ÚinversezIntegerGMP.inverse£  s(   € Ý˜DÑ!Ô!ˆØ×Ò˜wÑ'Ô'Ð'Øˆr#   c                 ó@  — t          d¦  «        }t          |¦  «        rTd|cxk     rdk     r8n n5t                               |j        | j        t          |¦  «        ¦  «         |S t          |¦  «        }t                               |j        | j        |j        ¦  «         |S )zUCompute the greatest common denominator between this
        number and another term.r   iÿÿ  )r>   r   rG   Ú
mpz_gcd_uirB   r   Úmpz_gcdr›   s      r$   ÚgcdzIntegerGMP.gcd¨  sž   € õ ˜A‘”ˆÝ˜ÑÔð 	$Ø�4ÐÐÒÐ˜%ÒÐÐÐÐÝ—’ ¤Ø $¤Ý '¨¡¤ñ/ô /ð /ð �Ý˜dÑ#Ô#ˆDÝ�Š�V”] D¤K°´Ñ=Ô=Ð=Øˆr#   c                 óÂ   — t          d¦  «        }t          |t           ¦  «        st          |¦  «        }t                               |j        | j        |j        ¦  «         |S )zQCompute the least common multiplier between this
        number and another term.r   )r>   rD   rG   Úmpz_lcmrB   r›   s      r$   ÚlcmzIntegerGMP.lcm·  sO   € õ ˜A‘”ˆÝ˜$¥
Ñ+Ô+ð 	$Ý˜dÑ#Ô#ˆDÝ�Š�V”] D¤K°´Ñ=Ô=Ð=Øˆr#   c                 ó.  — t          | t          ¦  «        st          | ¦  «        } t          |t          ¦  «        st          |¦  «        }|dk    s|                     ¦   «         rt          d¦  «        ‚t                               | j        |j        ¦  «        S )zCompute the Jacobi symbolr   z-n must be positive even for the Jacobi symbol)rD   r>   rò   rF   rG   Ú
mpz_jacobirB   )r  rë   s     r$   Újacobi_symbolzIntegerGMP.jacobi_symbolÁ  sz   € õ ˜!�ZÑ(Ô(ð 	Ý˜1‘”ˆAÝ˜!�ZÑ(Ô(ð 	Ý˜1‘”ˆAØ�Š6ˆ6�Q—Y’Y‘[”[ˆ6ÝÐLÑMÔMÐMÝ�Š˜qœx¨¬Ñ2Ô2Ð2r#   c                 ó’   — 	 | j         �&| j        rt                               | j         ¦  «         d | _         d S # t          $ r Y d S w xY wr&   )rB   rC   rG   Ú	mpz_clearr4   rb   s    r$   Ú__del__zIntegerGMP.__del__Î  s[   € ð	ØŒ{Ð&ØÔ$ð 0Ý—N’N 4¤;Ñ/Ô/Ð/àˆDŒKˆKˆKøÝð 	ð 	ð 	ØˆDˆDð	øøøs   ‚48 ¸
AÁA)r   r&   )>r   r   r    Ú__doc__r'   rY   rG   Úmpz_init_set_uir   rV   r_   rc   rf   ri   rk   rx   Ústaticmethodr~   r�   r…   r‡   r‹   rŽ   r‘   r“   r–   Ú__bool__r˜   rœ   r¡   r¤   rª   r±   rº   r¼   r¿   rÄ   rÊ   rÍ   rÐ   rÒ   rÕ   rÙ   rß   râ   rå   rç   rì   rï   rò   rô   rö   rù   rþ   r  r	  r  r  r  r  r  r  r"   r#   r$   r>   r>   �   s{  € € € € € Ø-Ð-à�'‘)”)€KØ×Ò˜ g g¨a¡j¤jÑ1Ô1Ð1ð"&ð "&ð "&ðJð ð ðð ð ð)ð )ð )ðð ð ðð ð ð$Lð $Lð $Lð $LðL ðð ñ „\ðð,.ð .ð .ð
?ð ?ð ?ð
?ð ?ð ?ð
>ð >ð >ð?ð ?ð ?ð>ð >ð >ð?ð ?ð ?ð@ð @ð @à€Hð?ð ?ð ?ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ðð ð ð%ð %ð %ð %ðN5ð 5ð 5ð 5ðð ð ð
ð ð ð ð$ð ð ð$ð ð ð$ð ð ð&ð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ð6ð 6ð 6ð4ð 4ð 4ð4ð 4ð 4ð3ð 3ð 3ð2ð 2ð 2ð;ð ;ð ;ð7ð 7ð 7ðð ð ð,ð ð ðð ð ð0ð ð ð
ð ð ðð ð ð ð	3ð 	3ñ „\ð	3ð	ð 	ð 	ð 	ð 	r#   r>   )!ÚsysÚCryptodome.Util.py3compatr   r   ÚCryptodome.Util._raw_apir   r   r   r   r	   r
   r   r   Ú_IntegerBaser   Úgmp_defsÚplatformÚImportErrorr6   ÚimplementationÚhasattrr   r   r   r   r   r   r'   r(   Úobjectr,   rG   r>   r"   r#   r$   ú<module>r*     s  ðð> €
€
€
à <Ð <Ð <Ð <Ð <Ð <Ð <Ð <ð5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð
 &Ð %Ð %Ð %Ð %Ð %ð3€ðj „<�7ÒÐØ
ˆ+Ð0Ñ
1Ô
1Ð1à€hˆu�hÑÔ€Ø"¨7Ð3Ð3€à
€7ˆ3Ð Ñ!Ô!ð /Ø
ˆ+Ð-Ñ
.Ô
.Ð.ð
 �%Ô˜HÒ$Ð$Ø8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ð)ð )ð )ð )ð )ˆyñ )ô )ð )ð
ð ð ð ð
 -Ð,Ð,Ð,Ð,Ð,ðð ð ð
ð ð ð ð ˆ6ñ ô ð ð €t�v„v€ðG	ð G	ð G	ð G	ð G	�ñ G	ô G	ð G	ð G	ð G	r#   