summaryrefslogtreecommitdiff
path: root/rsa/randnum.py
diff options
context:
space:
mode:
authorSybren A. Stüvel <sybren@stuvel.eu>2011-07-23 10:30:11 +0200
committerSybren A. Stüvel <sybren@stuvel.eu>2011-07-23 10:30:11 +0200
commit1058ccf8a48a2944114919c5faa08250d6914e20 (patch)
treecca0b6147e55350a70d3589da61d9bf899ab140e /rsa/randnum.py
parent0a99006dc5d3fe2cdf085e333f7e0fe0f5f8ac14 (diff)
downloadrsa-git-1058ccf8a48a2944114919c5faa08250d6914e20.tar.gz
Improved random number generation
Diffstat (limited to 'rsa/randnum.py')
-rw-r--r--rsa/randnum.py12
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