o
    ýÞha
  ã                   @   sp   d Z ddlZddlZddlmZmZ dedefdd„Zdedefdd	„Z	dedefd
d„Z
dedefdd„ZdS )z(Functions for generating random numbers.é    N)ÚcommonÚ	transformÚnbitsÚreturnc                 C   sN   t | dƒ\}}t |¡}|dkr%tt d¡ƒ}|d| L }t d|¡| }|S )z�Reads 'nbits' random bits.

    If nbits isn't a whole number of bytes, an extra byte will be appended with
    only the lower bits set.
    é   r   é   ÚB)ÚdivmodÚosÚurandomÚordÚstructÚpack)r   ÚnbytesÚrbitsÚ
randomdataÚrandomvalue© r   úK/var/www/html/premium_crap/venv/lib/python3.10/site-packages/rsa/randnum.pyÚread_random_bits   s   
r   c                 C   s&   t | ƒ}t |¡}|d| d > O }|S )z3Reads a random integer of approximately nbits bits.r   )r   r   Ú	bytes2int)r   r   Úvaluer   r   r   Úread_random_int.   s   
r   c                 C   s   t | ƒ}|dB S )zhReads a random odd integer of approximately nbits bits.

    >>> read_random_odd_int(512) & 1
    1
    r   )r   )r   r   r   r   r   Úread_random_odd_int;   s   r   Úmaxvaluec                 C   sH   t  | ¡}d}	 t|ƒ}|| kr	 |S |d dkr|r|d8 }|d7 }q)zÞReturns a random integer x with 1 <= x <= maxvalue

    May take a very long time in specific situations. If maxvalue needs N bits
    to store, the closer maxvalue is to (2 ** N) - 1, the faster this function
    is.
    r   Té
   r   )r   Úbit_sizer   )r   r   Útriesr   r   r   r   ÚrandintH   s   
	ùör   )Ú__doc__r
   r   Úrsar   r   ÚintÚbytesr   r   r   r   r   r   r   r   Ú<module>   s   