diff options
author | Sybren A. Stüvel <sybren@stuvel.eu> | 2011-07-23 10:30:11 +0200 |
---|---|---|
committer | Sybren A. Stüvel <sybren@stuvel.eu> | 2011-07-23 10:30:11 +0200 |
commit | 1058ccf8a48a2944114919c5faa08250d6914e20 (patch) | |
tree | cca0b6147e55350a70d3589da61d9bf899ab140e /rsa/randnum.py | |
parent | 0a99006dc5d3fe2cdf085e333f7e0fe0f5f8ac14 (diff) | |
download | rsa-git-1058ccf8a48a2944114919c5faa08250d6914e20.tar.gz |
Improved random number generation
Diffstat (limited to 'rsa/randnum.py')
-rw-r--r-- | rsa/randnum.py | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/rsa/randnum.py b/rsa/randnum.py index 140c22f..bb8be15 100644 --- a/rsa/randnum.py +++ b/rsa/randnum.py @@ -1,6 +1,8 @@ '''Functions for generating random numbers.''' +import math import os +import random from rsa import common, transform @@ -11,16 +13,16 @@ def read_random_int(nbits): resulting number can be stored in ``nbits`` bits. """ - randomdata = os.urandom(nbits // 8) + randomdata = os.urandom(int(math.ceil(nbits / 8.0))) return transform.bytes2int(randomdata) def randint(maxvalue): """Returns a random integer x with 1 <= x <= maxvalue""" - - # Safety - get a lot of random data even if the range is fairly - # small readbits = max(common.bit_size(maxvalue), 32) - return (read_random_int(readbits) % maxvalue) + 1 + while True: + value = read_random_int(readbits) + if value <= maxvalue: + return value |