
    &g
                     j    d Z ddlZddlZddlmZmZ dedefdZdedefdZ	dedefdZ
d	edefd
ZdS )z(Functions for generating random numbers.    N)common	transformnbitsreturnc                     t          | d          \  }}t          j        |          }|dk    rAt          t          j        d                    }|d|z
  z  }t	          j        d|          |z   }|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randomvalues        =/var/www/api/venv/lib/python3.11/site-packages/rsa/randnum.pyread_random_bitsr      sr     5!$$MFE F##J qyy"*Q--((E	![k22Z?
    c                 b    t          |           }t          j        |          }|d| dz
  z  z  }|S )z3Reads a random integer of approximately nbits bits.r	   )r   r   	bytes2int)r   r   values      r   read_random_intr   .   s;     "%((J
++E 
Q519ELr   c                 *    t          |           }|dz  S )zhReads a random odd integer of approximately nbits bits.

    >>> read_random_odd_int(512) & 1
    1
    r	   )r   )r   r   s     r   read_random_odd_intr   ;   s     E""E 19r   maxvaluec                     t          j        |           }d}	 t          |          }|| k    rn|dz  dk    r|r|dz  }|dz  },|S )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   s       r   randintr#   H   si     x((HE
))H2:??u? MH

 Lr   )__doc__r   r   rsar   r   intbytesr   r   r   r#    r   r   <module>r)      s    / . 
			  ! ! ! ! ! ! ! !C E    *
3 
3 
 
 
 

s 
s 
 
 
 
c c      r   