From 5bac303e8ac695e60e52646574d8a449dfb831b0 Mon Sep 17 00:00:00 2001 From: Michael Manganiello Date: Wed, 20 Jan 2016 21:00:10 -0300 Subject: Primes regeneration in RSA keys generation --- rsa/key.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/rsa/key.py b/rsa/key.py index b6de7b3..339c656 100644 --- a/rsa/key.py +++ b/rsa/key.py @@ -530,22 +530,31 @@ def calculate_keys(p, q, nbits): return (e, d) + def gen_keys(nbits, getprime_func, accurate=True): '''Generate RSA keys of nbits bits. Returns (p, q, e, d). Note: this can take a long time, depending on the key size. - + :param nbits: the total number of bits in ``p`` and ``q``. Both ``p`` and ``q`` will use ``nbits/2`` bits. :param getprime_func: either :py:func:`rsa.prime.getprime` or a function with similar signature. ''' - (p, q) = find_p_q(nbits // 2, getprime_func, accurate) - (e, d) = calculate_keys(p, q, nbits // 2) + # Regenerate p and q values, until calculate_keys doesn't raise a + # ValueError. + while True: + (p, q) = find_p_q(nbits // 2, getprime_func, accurate) + try: + (e, d) = calculate_keys(p, q, nbits // 2) + break + except ValueError: + pass return (p, q, e, d) + def newkeys(nbits, accurate=True, poolsize=1): '''Generates public and private keys, and returns them as (pub, priv). -- cgit v1.2.1