CVS: crypto/PublicKey RSA.py,1.18,1.19

"A.M. Kuchling" <[email protected]> Fri, 04 Apr 2003 11:42:11 -0800
Newsgroups gmane.comp.python.cryptography.cvs
Message-ID <[email protected]>
Update of /cvsroot/pycrypto/crypto/PublicKey
In directory sc8-pr-cvs1:/tmp/cvs-serv25762

Modified Files:
	RSA.py 
Log Message:
Generate RSA primes in a loop until the product is larger enough.


Index: RSA.py
===================================================================
RCS file: /cvsroot/pycrypto/crypto/PublicKey/RSA.py,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- RSA.py	4 Apr 2003 19:03:13 -0000	1.18
+++ RSA.py	4 Apr 2003 19:42:07 -0000	1.19
@@ -31,17 +31,21 @@
     the progress of the key generation.
     """
     obj=RSAobj()
+
     # Generate the prime factors of n
     if progress_func:
-        progress_func('p\n')
-    obj.p = pubkey.getPrime(bits/2+1, randfunc)
-    if progress_func:
-        progress_func('q\n')
-    obj.q = pubkey.getPrime(bits/2+1, randfunc)
+        progress_func('p,q\n')
+    p = q = 1L
+    while number.size(p*q) < bits:
+        p = pubkey.getPrime(bits/2, randfunc)
+        q = pubkey.getPrime(bits/2, randfunc)
 
     # p shall be smaller than q (for calc of u)
-    if obj.p > obj.q:
-        (obj.p, obj.q)=(obj.q, obj.p)
+    if p > q:
+        (p, q)=(q, p)
+    obj.p = p
+    obj.q = q
+
     if progress_func:
         progress_func('u\n')
     obj.u = pubkey.inverse(obj.p, obj.q)
@@ -52,7 +56,7 @@
         progress_func('d\n')
     obj.d=pubkey.inverse(obj.e, (obj.p-1)*(obj.q-1))
 
-    assert obj.size() >= bits, "Generated key is too small"
+    assert bits <= 1+obj.size(), "Generated key is too small"
 
     return obj
 
@@ -206,11 +210,13 @@
 def generate_c(bits, randfunc, progress_func = None):
     # Generate the prime factors of n
     if progress_func:
-        progress_func('p\n')
-    p=pubkey.getPrime(bits/2 + 1, randfunc)
-    if progress_func:
-        progress_func('q\n')
-    q=pubkey.getPrime(bits/2 + 1, randfunc)
+        progress_func('p,q\n')
+
+    p = q = 1L
+    while number.size(p*q) < bits:
+        p = pubkey.getPrime(bits/2, randfunc)
+        q = pubkey.getPrime(bits/2, randfunc)
+
     # p shall be smaller than q (for calc of u)
     if p > q:
         (p, q)=(q, p)
@@ -230,7 +236,7 @@
 ##    print q
 ##    print number.size(p), number.size(q), number.size(q*p),
 ##    print obj.size(), bits
-    assert obj.size() >= bits, "Generated key is too small"
+    assert bits <= 1+obj.size(), "Generated key is too small"
     return obj
 
 



-------------------------------------------------------
This SF.net email is sponsored by: ValueWeb: 
Dedicated Hosting for just $79/mo with 500 GB of bandwidth! 
No other company gives more support or power for your dedicated server
http://click.atdmt.com/AFF/go/sdnxxaff00300020aff/direct/01/