403Webshell
Server IP : 217.160.0.135  /  Your IP : 216.73.217.85
Web Server : Apache
System : Linux www 6.18.52-i1-ampere #1203 SMP Mon Sep 14 18:29:59 CEST 2026 aarch64
User : sws1074145052 ( 1074145052)
PHP Version : 8.3.32
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /lib/python3/dist-packages/Cryptodome/Math/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /lib/python3/dist-packages/Cryptodome/Math/__pycache__/_IntegerGMP.cpython-311.pyc
�

8�tcwd���ddlZddlmZmZddlmZmZmZmZm	Z	m
Z
mZmZddl
mZdZejdkred���ed	e��Zd	ed
�Zeed��red���ed
dkrddlmZmZmZmZGd�de��Zd�Zn	ddlmZd�ZGd�de��Ze��ZGd�de��Z dS)�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);
        �win32zNot using GMP on Windows�gmp)�library�api�__mpir_versionzMPIR library detectedr�ctypes)�	Structure�c_int�c_void_p�byrefc�$�eZdZdefdefdefgZdS)�_MPZ�	_mp_alloc�_mp_size�_mp_dN)�__name__�
__module__�__qualname__rr�_fields_���=/usr/lib/python3/dist-packages/Cryptodome/Math/_IntegerGMP.pyrrns-������ �%�(���'��h�'�)���r#rc�8�tt����S�N)rrr"r#r$�new_mpzr'ss���T�V�V�}�}�r#)�ffic�*�tjd��S)NzMPZ*)r(�newr"r#r$r'r'zs���w�v���r#c��eZdZd�ZdS)�_GMPc��|�d��rd|dd�z}n5|�d��rd|dd�z}ntd|z���tt|��}t	|||��|S)N�mpz_�__gmpz_��gmp_�__gmp_zAttribute %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)rrr r<r"r#r$r,r,s#������	�	�	�	�	r#r,c���eZdZdZe��Ze�eed����d�Z	d�Z
d�Zd�Zd�Z
d�Zd7d	�Zed
���Zd�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�ZeZd�Zd�Zd�Zd�Zd�Zd�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;ed5���Z<d6�Z=dS)9�
IntegerGMPz#A fast, arbitrary precision integerrc	��t��|_d|_t|t��rtd���d|_t
|���r@t�|j��|dkrdSt��}t�|��|dk}t|��}|�
��dz
dzdz}|dkr�|dz
}t�|td||dzz	z����t�
||t|dz����t�|j|j|��|dk��|s't�|j|j��dSdSt|t ��r't�|j|j��dSt$�)	z*Initialize the integer to the given value.Fz-A floating point type is not a natural numberTrNr
� ���)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__zIntegerGMP.__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��dkrzt�|��dz}|||dzzz}t�||td����|dz}t�||j��dk�z|dkr|}t|��S)NrrAr@r
)
r'rGrOrB�mpz_cmp�_zero_mpz_p�
mpz_get_ui�mpz_tdiv_q_2expr�int)r8rRrQ�slot�lsbs     r$�__int__zIntegerGMP.__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�:�tt|����Sr&)�strr\�r8s r$�__str__zIntegerGMP.__str__�����3�t�9�9�~�~�r#c�&�dt|��zS)NzInteger(%s))rarbs r$�__repr__zIntegerGMP.__repr__�s���s�4�y�y�(�(r#c�:�tt|����Sr&)�hexr\rbs r$�__hex__zIntegerGMP.__hex__�rdr#c� �t|��Sr&)r\rbs r$�	__index__zIntegerGMP.__index__�s���4�y�y�r#c
��|dkrtd���t�|jd��dzdz}||cxkrdkrnntd���t	|��}t�|tdtd��dtd��|j��dtd||z
��zt|��zS)	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
�)
rFrG�mpz_sizeinbaserBr
�
mpz_exportr	r�maxr)r8�
block_size�buf_len�bufs    r$�to_byteszIntegerGMP.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
���td��}t�|jt	t|����dt	d��dt	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.
        rr
)r>rG�
mpz_importrBr�len)�byte_string�results  r$�
from_byteszIntegerGMP.from_bytes�s_���A��������
� ��[�!1�!1�2�2�� ����� ����#�	%�	%�	%��
r#c�v�t|t��st|��}||j|j��Sr&)rDr>rB)r8r;�terms   r$�_apply_and_returnzIntegerGMP._apply_and_returns7���$�
�+�+�	$��d�#�#�D��t�D�K���-�-�-r#c��t|t��st|��sdS|�tj|��dkS)NFr�rDr>rr�rGrX�r8r�s  r$�__eq__zIntegerGMP.__eq__sE���4��,�,�	�
�d�0C�0C�	��5��%�%�d�l�D�9�9�Q�>�>r#c��t|t��st|��sdS|�tj|��dkS)NTrr�r�s  r$�__ne__zIntegerGMP.__ne__sE���4��,�,�	�
�d�0C�0C�	��4��%�%�d�l�D�9�9�Q�>�>r#c�J�|�tj|��dkS�Nr�r�rGrXr�s  r$�__lt__zIntegerGMP.__lt__#����%�%�d�l�D�9�9�A�=�=r#c�J�|�tj|��dkSr�r�r�s  r$�__le__zIntegerGMP.__le__&����%�%�d�l�D�9�9�Q�>�>r#c�J�|�tj|��dkSr�r�r�s  r$�__gt__zIntegerGMP.__gt__)r�r#c�J�|�tj|��dkSr�r�r�s  r$�__ge__zIntegerGMP.__ge__,r�r#c�T�t�|j|j��dkSr��rGrXrBrYrbs r$�__nonzero__zIntegerGMP.__nonzero__/s ���|�|�D�K��)9�:�:�a�?�?r#c�T�t�|j|j��dkSr�r�rbs r$�is_negativezIntegerGMP.is_negative3s ���|�|�D�K��)9�:�:�Q�>�>r#c���td��}t|t��s(	t|��}n#t$r
tcYSwxYwt�|j|j|j��|Sr�)r>rDrP�NotImplementedrGrMrB�r8r�r}s   r$�__add__zIntegerGMP.__add__7����A�����$�
�+�+�	&�
&�!�$�'�'����&�
&�
&�
&�%�%�%�%�
&�������V�]��[��[�	"�	"�	"��
��6�A
�	A
c���td��}t|t��s(	t|��}n#t$r
tcYSwxYwt�|j|j|j��|Sr�)r>rDrPr�rG�mpz_subrBr�s   r$�__sub__zIntegerGMP.__sub__Cr�r�c���td��}t|t��s(	t|��}n#t$r
tcYSwxYwt�|j|j|j��|Sr�)r>rDrPr�rG�mpz_mulrBr�s   r$�__mul__zIntegerGMP.__mul__Or�r�c�2�t|t��st|��}t�|j|j��dkrt
d���td��}t�|j|j|j��|S)Nr�Division by zero)rDr>rGrXrBrY�ZeroDivisionError�
mpz_fdiv_q)r8�divisorr}s   r$�__floordiv__zIntegerGMP.__floordiv__[s����'�:�.�.�	*� ��)�)�G��<�<����(�*�*�-.�/�/�#�$6�7�7�7��A��������
�����	(�	(�	(��
r#c�`�t|t��st|��}t�|j|j��}|dkrt
d���|dkrtd���td��}t�|j|j|j��|S�Nrr��Modulus must be positive�	rDr>rGrXrBrYr�rF�mpz_mod)r8r��compr}s    r$�__mod__zIntegerGMP.__mod__gs����'�:�.�.�	*� ��)�)�G��|�|�G�N� �,�.�.���1�9�9�#�$6�7�7�7��!�8�8��7�8�8�8��A�������V�]��[��^�	%�	%�	%��
r#Nc	�$�|�l|dkrtd���|dkrtd���t�|j|jt	t|�������n!t
|t��st|��}|std���|�	��rtd���t|��rf|dkrtd���|dkr;t�|j|jt	|��|j��|St|��}n#|�	��rtd���t�|j|j|j|j��|S)NrzExponent must not be negative�zExponent is too bigr�r��)
rFrG�
mpz_pow_uirBrr\rDr>r�r�r�mpz_powm_ui�mpz_powm)r8�exponent�moduluss   r$�inplace_powzIntegerGMP.inplace_powvs����?��!�|�|� �!@�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|��}|�||��Sr&)r>r�)r8r�r�r}s    r$�__pow__zIntegerGMP.__pow__�s%���D�!�!���!�!�(�G�4�4�4r#c�n�td��}t�|j|j��|Sr�)r>rG�mpz_absrB)r8r}s  r$�__abs__zIntegerGMP.__abs__�s*���A�������V�]�D�K�0�0�0��
r#c�L�|�J|dkrtd���td��}t�|j|j��nW|dkrtd���t|��}t|�t|��|z|����}|S)zGReturn the largest Integer that does not
        exceed the square rootNrzSquare root of negative valuer�)rFr>rG�mpz_sqrtrBr\�_tonelli_shanks�r8r�r}s   r$�sqrtzIntegerGMP.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|cxkrdkr8nn5t�|j|jt	|����|Sd|cxkrdkr9nn6t�|j|jt	|����|St
|��}t�|j|j|j��|S�Nrr����)rrG�
mpz_add_uirBr�
mpz_sub_uir>rMr�s  r$�__iadd__zIntegerGMP.__iadd__���������	$��D� � � � �5� � � � � ������ $�� '��
�
�/�/�/����� � � � �q� � � � � ������ $�� '�����0�0�0����d�#�#�D����T�[��[��[�	"�	"�	"��r#c��t|��r�d|cxkrdkr8nn5t�|j|jt	|����|Sd|cxkrdkr9nn6t�|j|jt	|����|St
|��}t�|j|j|j��|Sr�)rrGr�rBrr�r>r�r�s  r$�__isub__zIntegerGMP.__isub__�r�r#c��t|��r�d|cxkrdkr8nn5t�|j|jt	|����|Sd|cxkrdkr^nn[t�|j|jt	|����t�|j|j��|St
|��}t�|j|j|j��|Sr�)rrG�
mpz_mul_uirBrrNr>r�r�s  r$�__imul__zIntegerGMP.__imul__�s������	$��D� � � � �5� � � � � ������ $�� '��
�
�/�/�/����� � � � �q� � � � � ������ $�� '�����0�0�0����T�[�$�+�6�6�6����d�#�#�D����T�[��[��[�	"�	"�	"��r#c�B�t|t��st|��}t�|j|j��}|dkrt
d���|dkrtd���t�|j|j|j��|Sr�r�)r8r�r�s   r$�__imod__zIntegerGMP.__imod__�s����'�:�.�.�	*� ��)�)�G��|�|�G�N�#�/�1�1���1�9�9�#�$6�7�7�7��!�8�8��7�8�8�8����T�[��[��^�	%�	%�	%��r#c���td��}t|t��st|��}t�|j|j|j��|Sr�)r>rDrG�mpz_andrBr�s   r$�__and__zIntegerGMP.__and__��W���A�����$�
�+�+�	$��d�#�#�D����V�]��[��[�	"�	"�	"��
r#c���td��}t|t��st|��}t�|j|j|j��|Sr�)r>rDrG�mpz_iorrBr�s   r$�__or__zIntegerGMP.__or__r�r#c	���td��}|dkrtd���|dkr
|dkrdSdSt�|j|jtt
|������|S�Nrznegative shift countr����)r>rFrGr[rBrr\�r8�posr}s   r$�
__rshift__zIntegerGMP.__rshift__sz���A������7�7��3�4�4�4���;�;��a�x�x��r��q����V�]�!�[�$�S��X�X�.�.�	0�	0�	0��
r#c	���|dkrtd���|dkr
|dkrdSdSt�|j|jt	t|������|Sr�)rFrGr[rBrr\�r8r�s  r$�__irshift__zIntegerGMP.__irshift__so����7�7��3�4�4�4���;�;��a�x�x��r��q����T�[�!�[�$�S��X�X�.�.�	0�	0�	0��r#c	���td��}d|cxkrdksntd���t�|j|jtt
|������|S�Nrr�zIncorrect shift count)r>rFrGrLrBrr\r�s   r$�
__lshift__zIntegerGMP.__lshift__+st���A�����C�����%������4�5�5�5����&�-��+�!�#�c�(�(�+�+�	-�	-�	-��
r#c	���d|cxkrdksntd���t�|j|jt	t|������|Sr�)rFrGrLrBrr\r�s  r$�__ilshift__zIntegerGMP.__ilshift__4si���C�����%������4�5�5�5����$�+��+�!�#�c�(�(�+�+�	-�	-�	-��r#c
���|dkrtd���|dkrtd���|dkrdStt�|jtt
|��������S)zPReturn True if the n-th bit is set to 1.
        Bit 0 is the least significant.rz)no bit representation for negative valuesznegative bit countr�)rF�boolrG�
mpz_tstbitrBrr\)r8�ns  r$�get_bitzIntegerGMP.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�|jd��dkS)Nrr
�rGr�rBrbs r$�is_oddzIntegerGMP.is_oddJ������t�{�A�.�.�!�3�3r#c�J�t�|jd��dkSr�r�rbs r$�is_evenzIntegerGMP.is_evenMr�r#c�l�|dkrtd���t�|jd��S)z=Return the minimum number of bits that can encode the number.rrmrn)rFrGrrrBrbs r$�size_in_bitszIntegerGMP.size_in_bitsPs4���!�8�8��M�N�N�N��"�"�4�;��2�2�2r#c�<�|���dz
dzdzS)z>Return the minimum number of bytes that can encode the number.r
rp)r�rbs r$�
size_in_byteszIntegerGMP.size_in_bytesWs#���!�!�#�#�a�'�A�-��1�1r#c�H�t�|j��dkSr�)rG�mpz_perfect_square_prBrbs r$�is_perfect_squarezIntegerGMP.is_perfect_square[s���(�(���5�5��:�:r#c�F�t|��r]d|cxkrdkrAnn>t�|jt	|����rtd���dSt
|��}t�|j|j��rtd���dS)z3Raise an exception if the small prime is a divisor.rr�zThe value is compositeN)rrG�mpz_divisible_ui_prBrrFr>�mpz_divisible_p)r8�small_primes  r$�fail_if_divisible_byzIntegerGMP.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��st|��}t|��r�d|cxkrdkr8nn5t�|j|jt
|����|Sd|cxkrdkr9nn6t�|j|jt
|����|St|��}t�|j|j|j��|S)z/Increment the number by the product of a and b.rr�r�)	rDr>rrG�
mpz_addmul_uirBr�
mpz_submul_ui�
mpz_addmul)r8�a�bs   r$�multiply_accumulatezIntegerGMP.multiply_accumulatels����!�Z�(�(�	��1�
�
�A�����	��1�}�}�}�}�u�}�}�}�}�}��"�"�4�;�#$�8�#*�1�:�:�/�/�/�����~�~�~�~�A�~�~�~�~�~��"�"�4�;�#$�8�#*�A�2�;�;�0�0�0����1�
�
�A����������	"�	"�	"��r#c��t|t��st|��}t�|j|j��|S)z'Set the Integer to have the given value)rDr>rG�mpz_setrB)r8�sources  r$�setzIntegerGMP.set�sG���&�*�-�-�	(���'�'�F����T�[��]�	$�	$�	$��r#c�d�t|t��st|��}t�|j|j��}|dkrt
d���|dkrtd���t�|j|j|j��}|std���|S)z�Compute the inverse of this number in the ring of
        modulo integers.

        Raise an exception if no inverse exists.
        rzModulus cannot be zeror�z No inverse value can be computed)	rDr>rGrXrBrYr�rF�
mpz_invert)r8r�r�r}s    r$�inplace_inversezIntegerGMP.inplace_inverse�s����'�:�.�.�	*� ��)�)�G��|�|�G�N� �,�.�.���1�9�9�#�$<�=�=�=��!�8�8��7�8�8�8������!%��!(��1�1���	A��?�@�@�@��r#c�N�t|��}|�|��|Sr&)r>rr�s   r$�inversezIntegerGMP.inverse�s(���D�!�!�����w�'�'�'��
r#c�@�td��}t|��rTd|cxkrdkr8nn5t�|j|jt|����|St|��}t�|j|j|j��|S)zUCompute the greatest common denominator between this
        number and another term.ri��)r>rrG�
mpz_gcd_uirBr�mpz_gcdr�s   r$�gcdzIntegerGMP.gcd�s����A��������	$��4�����%����������
� $�� '��
�
�/�/�/��
��d�#�#�D����V�]�D�K���=�=�=��
r#c���td��}t|t��st|��}t�|j|j|j��|S)zQCompute the least common multiplier between this
        number and another term.r)r>rDrG�mpz_lcmrBr�s   r$�lcmzIntegerGMP.lcm�sO���A�����$�
�+�+�	$��d�#�#�D����V�]�D�K���=�=�=��
r#c�.�t|t��st|��}t|t��st|��}|dks|���rtd���t�|j|j��S)zCompute the Jacobi symbolrz-n must be positive even for the Jacobi symbol)rDr>r�rFrG�
mpz_jacobirB)rr�s  r$�
jacobi_symbolzIntegerGMP.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�&|jrt�|j��d|_dS#t$rYdSwxYwr&)rBrCrG�	mpz_clearr4rbs r$�__del__zIntegerGMP.__del__�s[��	��{�&��$�0��N�N�4�;�/�/�/��D�K�K�K���	�	�	��D�D�	���s�48�
A�A)rr&)>rrr �__doc__r'rYrG�mpz_init_set_uirrVr_rcrfrirkrx�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�rr	rrrrrrr"r#r$r>r>�s{������-�-��'�)�)�K�����g�g�a�j�j�1�1�1�"&�"&�"&�J������)�)�)�������$L�$L�$L�$L�L����\��,.�.�.�
?�?�?�
?�?�?�
>�>�>�?�?�?�>�>�>�?�?�?�@�@�@��H�?�?�?�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�%�%�%�%�N5�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.py3compatrr�Cryptodome.Util._raw_apirrrrr	r
rr�_IntegerBaser�gmp_defs�platform�ImportErrorr6�implementation�hasattrrrrrrrr'r(�objectr,rGr>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#

Youez - 2016 - github.com/yon3zu
LinuXploit