HEX
Server: Apache
System: Linux pdx1-shared-a1-29 6.18.39-grsec-noble+ #4 SMP Thu Jul 23 07:53:29 UTC 2026 x86_64
User: dh_bj99yp (22285841)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/rsa/__pycache__/common.cpython-312.pyc
�

%
�a��	� �dZddlZGd�de�Zdedefd�Zdedefd	�Zded
edefd�Zded
edejeeeffd�Z	dededefd�Z
dejedejedefd�Ze
dk(rddlZej�yy)z/Common functionality shared by several modules.�Nc�6��eZdZddededededdf
�fd�
Z�xZS)	�NotRelativePrimeError�a�b�d�msg�returnNc�b��t�|�|xsd|||fz�||_||_||_y)Nz.%d and %d are not relatively prime, divider=%i)�super�__init__rrr)�selfrrrr�	__class__s     ��,/usr/lib/python3/dist-packages/rsa/common.pyrzNotRelativePrimeError.__init__s:���
����\� P�TU�WX�Z[�S\� \�]����������)�)�__name__�
__module__�__qualname__�int�strr�
__classcell__)rs@rrrs0����#��#��#��C����rr�numr	c�v�	|j�S#t$r}tdt|�z�|�d}~wwxYw)a�
    Number of bits needed to represent a integer excluding any prefix
    0 bits.

    Usage::

        >>> bit_size(1023)
        10
        >>> bit_size(1024)
        11
        >>> bit_size(1025)
        11

    :param num:
        Integer value. If num is 0, returns 0. Only the absolute value of the
        number is considered. Therefore, signed integers will be abs(num)
        before the number's bit length is determined.
    :returns:
        Returns the number of bits in the integer.
    z,bit_size(num) only supports integers, not %rN)�
bit_length�AttributeError�	TypeError�type)r�exs  r�bit_sizers?��,\��~�~�����\��F��c��R�S�Y[�[��\�s��	8�3�8�numberc�8�|dk(rytt|�d�S)a�
    Returns the number of bytes required to hold a specific long number.

    The number of bytes is rounded up.

    Usage::

        >>> byte_size(1 << 1023)
        128
        >>> byte_size((1 << 1024) - 1)
        128
        >>> byte_size(1 << 1024)
        129

    :param number:
        An unsigned integer
    :returns:
        The number of bytes required to hold a specific long number.
    r��)�ceil_divr)r s r�	byte_sizer%8s ��(��{���H�V�$�a�(�(r�divc�2�t||�\}}|r|dz
}|S)av
    Returns the ceiling function of a division between `num` and `div`.

    Usage::

        >>> ceil_div(100, 7)
        15
        >>> ceil_div(100, 10)
        10
        >>> ceil_div(1, 4)
        1

    :param num: Division's numerator, a number
    :param div: Division's divisor, a number

    :return: Rounded up result of the division between the parameters.
    r")�divmod)rr&�quanta�mods    rr$r$Qs%��$��c�"�K�F�C�
��!����Mrrrc��d}d}d}d}|}|}|dk7r&||z}|||z}}|||zz
|}}|||zz
|}}|dk7r�&|dkr||z
}|dkr||z
}|||fS)z;Returns a tuple (r, i, j) such that r = gcd(a, b) = ia + jbrr"�)	rr�x�y�lx�ly�oa�ob�qs	         r�extended_gcdr4is���	
�A�	�A�	
�B�	
�B�	
�B�	
�B�
�q�&�
��F���Q��U�A���!�a�%�L�1�B���!�a�%�L�1�B��	�q�&�

�A�v�
�b���	�A�v�
�b����b�"�9�rr-�nc�J�t||�\}}}|dk7r
t|||��|S)z�Returns the inverse of x % n under multiplication, a.k.a x^-1 (mod n)

    >>> inverse(7, 4)
    3
    >>> (inverse(143, 4) * 143) % 4
    1
    r")r4r)r-r5�divider�inv�_s     r�inverser:�s2��%�Q��*��W�c�1��!�|�#�A�q�'�2�2��Jr�a_values�
modulo_valuesc��d}d}|D]}||z}�	t||�D]$\}}||z}t||�}|||z|zz|z}�&|S)a�Chinese Remainder Theorem.

    Calculates x such that x = a[i] (mod m[i]) for each i.

    :param a_values: the a-values of the above equation
    :param modulo_values: the m-values of the above equation
    :returns: x such that x = a[i] (mod m[i]) for each i


    >>> crt([2, 3], [3, 5])
    8

    >>> crt([2, 3, 2], [3, 5, 7])
    23

    >>> crt([2, 3, 0], [7, 11, 15])
    135
    r"r)�zipr:)	r;r<�mr-�modulo�m_i�a_i�M_ir8s	         r�crtrD�su��(	
�A�	�A����	�V�����-��2�&�
��c��3�h���c�3���
��s��S��
 �A�%��	&�
�Hr�__main__)�__doc__�typing�
ValueErrorrrrr%r$�Tupler4r:�IterablerDr�doctest�testmodr,rr�<module>rMs���6�
��J��\�#�\�#�\�8)�c�)�c�)�2�#��C��C��0�C��C��F�L�L��c�3��$?��0�s��s��s��" 
�&�/�/�#�&� 
�v���s�7K� 
�PS� 
�F�z����G�O�O��r