o j`a @spdZddlZddlZddlmZmZdedefddZdedefdd Z dedefd d Z d edefd dZ dS)z(Functions for generating random numbers.N)common transformnbitsreturncCsNt|d\}}t|}|dkr%ttd}|d|L}td||}|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. rB)divmodosurandomordstructpack)rnbytesrbits randomdata randomvaluer-/usr/lib/python3/dist-packages/rsa/randnum.pyread_random_bitss  rcCs&t|}t|}|d|d>O}|S)z3Reads a random integer of approximately nbits bits.r)rr bytes2int)rrvaluerrrread_random_int.s rcCst|}|dBS)zhReads a random odd integer of approximately nbits bits. >>> read_random_odd_int(512) & 1 1 r)r)rrrrrread_random_odd_int;srmaxvaluecCsHt|}d} t|}||kr |S|ddkr|r|d8}|d7}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. rT r)rbit_sizer)rrtriesrrrrrandintHs  r) __doc__r r rsarrintbytesrrrrrrrrs