
    g
                     h    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y)z(Functions for generating random numbers.    N)common	transformnbitsreturnc                     t        | d      \  }}t        j                  |      }|dkD  r?t        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/openai/venv/lib/python3.12/site-packages/rsa/randnum.pyread_random_bitsr      sh     5!$MFE F#J qy"**Q-(E	![[k2Z?
    c                 \    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   .   s8     "%(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	 |S |dz  dk(  r|r|dz  }|dz  }()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   
   r	   )r   bit_sizer   )r   r!   triesr   s       r   randintr#   H   s^     x(HE
)H L 2:?u MH
 r   )__doc__r   r   rsar   r   intbytesr   r   r   r#    r   r   <module>r)      sa    / 
  !C E *
3 
3 

s 
s 
c c r   