File: //opt/alt/python37/lib64/python3.7/site-packages/Crypto/Util/__pycache__/number.cpython-37.pyc
B
    ��c�t �               @   s2  d Z ddlmZmZ ddlmZ ddlZddlZddl	T e
Zyddlm
Z
 W n ek
rd   dZ
Y nX e
dk	r~e
js~ede� ddlT d	d
� Zd+dd�Zd,d
d�Zd-dd�Zd.dd�Zdd� Zdd� Zd/dd�Zd0dd�Zd1dd�Zd2dd�ZddlZd3d d!�Zd"d#� ZddlZd4d$d%�Zd&d'� Z d(d)� Z!d*Z"dS )5z$Id$�    )�"GetRandomNumber_DeprecationWarning�PowmInsecureWarning)�warnN)�*)�	_fastmathzcNot using mpz_powm_sec.  You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.�   c             C   s   d}x| |? r|d7 }qW |S )zEsize(N:long) : int
    Returns the size of the number N in bits.
    r   r   � )�N�bitsr   r   �E/opt/alt/python37/lib64/python3.7/site-packages/Crypto/Util/number.py�sizeK   s    
r   c             C   s   t �dt� t| |�S )zBDeprecated.  Use getRandomInteger or getRandomNBitInteger instead.z�Crypto.Util.number.getRandomNumber has confusing semanticsand has been deprecated.  Use getRandomInteger or getRandomNBitInteger instead.)�warningsr   r   �getRandomNBitInteger)r	   �randfuncr   r   r   �getRandomNumberT   s    r   c             C   s`   |dkrt �  t�� j}|| d? �}| d }|dkrTt|d��d| ? }t|�| }t|�}|S )z�getRandomInteger(N:int, randfunc:callable):long
    Return a random number with at most N bits.
    If randfunc is omitted, then Random.new().read is used.
    This function is for internal use only and may be renamed or removed in
    the future.
    N�   �   r   r   )�_import_Random�Random�new�read�ordZbchr�
bytes_to_long)r	   r   �SZodd_bits�char�valuer   r   r   �getRandomInteger[   s    	
r   c             C   s>