o
    e
                     @   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 )zReads '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   6/usr/local/lib/python3.10/dist-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)zReturns 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   