code: def get_random_integer(N, randfunc=None):
      
      if randfunc is None:
          randfunc = Random.new().read
  
      S = randfunc(N>>3)
      odd_bits = N % 8
      if odd_bits != 0:
          char = ord(randfunc(1)) >> (8-odd_bits)
          S = bchr(char) + S
      value = bytes_to_long(S)
      return value
docs: getRandomInteger(N:int, randfunc:callable):long
      Return a random number with at most N bits.
  
      If randfunc is omitted, then Random.new().read is used.
  
      This function is for internal use only and may be renamed or removed in
      the future.