summaryrefslogtreecommitdiff
path: root/lib/Crypto/Util
diff options
context:
space:
mode:
authorDwayne C. Litzenberger <dlitz@dlitz.net>2010-08-02 16:58:07 -0400
committerDwayne C. Litzenberger <dlitz@dlitz.net>2010-08-02 17:03:29 -0400
commit79f6c64c58cfb8795fa40b6999a89219ac9f102d (patch)
tree7d6b8cb8a98aa81735e6f6e457d38a1ef1047054 /lib/Crypto/Util
parent902ea14fc2d3d4a6e01afbef6f45115ab37e7fcd (diff)
downloadpycrypto-79f6c64c58cfb8795fa40b6999a89219ac9f102d.tar.gz
getRandomNumber API compatibility:
Legrandin's getStrongPrime() patch changed the behaviour of Crypto.Util.number.getRandomNumber() to something that is more like what people would expect, but different from what we did before. This change modifies Crypto.Util.number in the following ways: - Rename getRandomNBitNumber -> getRandomNBitInteger and getRandomNumber -> getRandomInteger - Preserve old behaviour by making getRandomNumber work the same as getRandomNBitInteger. - Emit a DeprecationWarning when the old getRandomNumber is used.
Diffstat (limited to 'lib/Crypto/Util')
-rw-r--r--lib/Crypto/Util/number.py23
1 files changed, 14 insertions, 9 deletions
diff --git a/lib/Crypto/Util/number.py b/lib/Crypto/Util/number.py
index e4af717..665aa2e 100644
--- a/lib/Crypto/Util/number.py
+++ b/lib/Crypto/Util/number.py
@@ -59,9 +59,14 @@ def size (N):
bits += 1
return bits
-
def getRandomNumber(N, randfunc=None):
- """getRandomNumber(N:int, randfunc:callable):long
+ """Deprecated. Use getRandomInteger or getRandomNBitInteger instead."""
+ warnings.warn("Crypto.Util.number.getRandomNumber has confusing semantics and has been deprecated. Use getRandomInteger or getRandomNBitInteger instead.",
+ GetRandomNumber_DeprecationWarning)
+ return getRandomNBitInteger(N, randfunc)
+
+def getRandomInteger(N, randfunc=None):
+ """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.
@@ -92,13 +97,13 @@ def getRandomRange(a, b, randfunc=None):
"""
range_ = b - a - 1
bits = size(range_)
- value = getRandomNumber(bits, randfunc)
+ value = getRandomInteger(bits, randfunc)
while value > range_:
- value = getRandomNumber(bits, randfunc)
+ value = getRandomInteger(bits, randfunc)
return a + value
-def getRandomNBitNumber(N, randfunc=None):
- """getRandomNumber(N:int, randfunc:callable):long
+def getRandomNBitInteger(N, randfunc=None):
+ """getRandomInteger(N:int, randfunc:callable):long
Return a random number with exactly N-bits, i.e. a random number
between 2**(N-1) and (2**N)-1.
@@ -107,7 +112,7 @@ def getRandomNBitNumber(N, randfunc=None):
This function is for internal use only and may be renamed or removed in
the future.
"""
- value = getRandomNumber (N-1, randfunc)
+ value = getRandomInteger (N-1, randfunc)
value |= 2L ** (N-1) # Ensure high bit is set
assert size(value) >= N
return value
@@ -148,7 +153,7 @@ def getPrime(N, randfunc=None):
_import_Random()
randfunc = Random.new().read
- number=getRandomNBitNumber(N, randfunc) | 1
+ number=getRandomNBitInteger(N, randfunc) | 1
while (not isPrime(number, randfunc=randfunc)):
number=number+2
return number
@@ -256,7 +261,7 @@ def getStrongPrime(N, e=0, false_positive_prob=1e-6, randfunc=None):
p = [0, 0]
for i in (0, 1):
# randomly choose 101-bit y
- y = getRandomNBitNumber (101, randfunc)
+ y = getRandomNBitInteger (101, randfunc)
# initialize the field for sieving
field = [0] * 5 * len (sieve_base)