summaryrefslogtreecommitdiff
path: root/rsa-keygen.c
diff options
context:
space:
mode:
authorNiels Möller <nisse@lysator.liu.se>2010-03-24 15:40:21 +0100
committerNiels Möller <nisse@lysator.liu.se>2010-03-24 15:40:21 +0100
commit153141e709a3a1548215fb63a1b840fc27d6e90e (patch)
tree0bf656c06a77e0bb177d37785f046993e164ec40 /rsa-keygen.c
parent08f1aac76055aff7da2a217c7ba3fa327353ab67 (diff)
downloadnettle-153141e709a3a1548215fb63a1b840fc27d6e90e.tar.gz
(rsa_generate_keypair): Ensure that bit size of e is less than bit
size of n, and check for the unlikely case p = q. Rev: nettle/rsa-keygen.c:1.6
Diffstat (limited to 'rsa-keygen.c')
-rw-r--r--rsa-keygen.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/rsa-keygen.c b/rsa-keygen.c
index 34192e14..f5f52647 100644
--- a/rsa-keygen.c
+++ b/rsa-keygen.c
@@ -79,7 +79,7 @@ rsa_generate_keypair(struct rsa_public_key *pub,
if (e_size)
{
/* We should choose e randomly. Is the size reasonable? */
- if ((e_size < 16) || (e_size > n_size) )
+ if ((e_size < 16) || (e_size >= n_size) )
return 0;
}
else
@@ -87,14 +87,18 @@ rsa_generate_keypair(struct rsa_public_key *pub,
/* We have a fixed e. Check that it makes sense */
/* It must be odd */
- if (!mpz_tstbit(pub->e, 0))
+ if (mpz_even_p(pub->e, 0))
return 0;
/* And 3 or larger */
if (mpz_cmp_ui(pub->e, 3) < 0)
return 0;
+
+ /* And size less than n */
+ if (mpz_sizeinbase(pub->e, 2) >= n_size)
+ return 0;
}
-
+
if (n_size < RSA_MINIMUM_N_BITS)
return 0;
@@ -132,6 +136,11 @@ rsa_generate_keypair(struct rsa_public_key *pub,
bignum_random_prime(key->q, n_size/2,
random_ctx, random,
progress_ctx, progress);
+
+ /* Very unlikely. */
+ if (mpz_cmp (key->q, key->p) == 0)
+ continue;
+
mpz_sub_ui(q1, key->q, 1);
/* If e was given, we must chose q such that q-1 has no factors in