File: //lib/python3/dist-packages/rsa/__pycache__/common.cpython-38.pyc
U
+�[� � @ sh d dl mZ G dd� de�Zdd� Zdd� Zdd � Zd
d� Zdd
� Zdd� Z e
dkrdd dlZe�� dS )� )�zipc s e Zd Zd� fdd� Z� ZS )�NotRelativePrimeErrorNc s4 t t| ��|pd|||f � || _|| _|| _d S )Nz.%d and %d are not relatively prime, divider=%i)�superr �__init__�a�b�d)�selfr r r �msg�� __class__� �,/usr/lib/python3/dist-packages/rsa/common.pyr s
�zNotRelativePrimeError.__init__)N)�__name__�
__module__�__qualname__r �
__classcell__r
r
r r r s r c C s4 z
| � � W S tk
r. tdt| � ��Y nX dS )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)�numr
r
r �bit_size s
r c C s | dkrdS t t| �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 )Znumberr
r
r � byte_size; s r c C s t | |�\}}|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)r ZdivZquanta�modr
r
r r T s r c C s� d}d}d}d}| }|}|dkr\| | }|| | } }||| | }}||| | }}q|dk rl||7 }|dk r|||7 }| ||fS )z@Returns a tuple (r, i, j) such that r = gcd(a, b) = ia + jb
r r r
) r r �x�yZlxZlyZoa�ob�qr
r
r �extended_gcdl s r# c C s( 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 �nZdivider�inv�_r
r
r �inverse� s r'