HEX
Server: LiteSpeed
System: Linux srv146.niagahoster.com 4.18.0-553.30.1.lve.el8.x86_64 #1 SMP Tue Dec 3 01:21:19 UTC 2024 x86_64
User: kodi1989 (1633)
PHP: 8.1.34
Disabled: symlink,shell_exec,exec,popen,system,dl,passthru,escapeshellarg,escapeshellcmd,show_source,pcntl_exec
Upload Files
File: //opt/alt/python37/lib/python3.7/site-packages/rsa/__pycache__/common.cpython-37.pyc
B

��f��@s�dZddlZGdd�de�Zeed�dd�Zeed�d	d
�Zeeed�dd
�Zeeejeeefd�dd�Z	eeed�dd�Z
ejeejeed�dd�Ze
dkr�ddlZe��dS)z/Common functionality shared by several modules.�Ncs,eZdZdeeeedd��fdd�
Z�ZS)�NotRelativePrimeError�N)�a�b�d�msg�returncs0t��|pd|||f�||_||_||_dS)Nz.%d and %d are not relatively prime, divider=%i)�super�__init__rrr)�selfrrrr)�	__class__��;/opt/alt/python37/lib/python3.7/site-packages/rsa/common.pyr
szNotRelativePrimeError.__init__)r)�__name__�
__module__�__qualname__�int�strr
�
__classcell__r
r
)rrrsr)�numrc
CsBy|��Stk
r<}ztdt|��|�Wdd}~XYnXdS)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�exr
r
r�bit_sizesr)�numberrcCs|dkrdStt|�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)rr
r
r�	byte_size8sr )r�divrcCst||�\}}|r|d7}|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�modr
r
rrQsr)rrrc	Cs�d}d}d}d}|}|}xF|dkr^||}|||}}||||}}||||}}qW|dkrp||7}|dkr�||7}|||fS)z;Returns a tuple (r, i, j) such that r = gcd(a, b) = ia + jbrrr
)	rr�x�yZlxZlyZoa�ob�qr
r
r�extended_gcdis 
r))r%�nrcCs(t||�\}}}|dkr$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)r)r)r%r*�divider�inv�_r
r
r�inverse�s	r.)�a_values�
modulo_valuesrc	Cs`d}d}x|D]}||9}qWx<t||�D].\}}||}t||�}|||||}q*W|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
    rr)�zipr.)	r/r0�mr%ZmoduloZm_iZa_iZM_ir,r
r
r�crt�s

r3�__main__)�__doc__�typing�
ValueErrorrrrr r�Tupler)r.�Iterabler3r�doctest�testmodr
r
r
r�<module>s#