summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@redhat.com>2017-04-24 14:16:24 +0200
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2017-04-25 08:02:18 +0200
commit5ac8a62e12d69fe5e785e36d4c3cca21e9f99e00 (patch)
treec419f6369fd12d1bbe2ebbf193d0675f1dd4eaac
parentd321acbafe210bbcb3b026e4fbd69b1bd274b4b5 (diff)
downloadgnutls-tmp-rsa-keygen-fix-in-fips.tar.gz
Added explicit check for the bounds of the generated 'd'.tmp-rsa-keygen-fix-in-fips
This is according to FIPS186-4 sec. B.3.1. Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
-rw-r--r--lib/nettle/int/rsa-keygen-fips186.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/nettle/int/rsa-keygen-fips186.c b/lib/nettle/int/rsa-keygen-fips186.c
index 9bafc10186..506f758dd1 100644
--- a/lib/nettle/int/rsa-keygen-fips186.c
+++ b/lib/nettle/int/rsa-keygen-fips186.c
@@ -365,6 +365,12 @@ _rsa_generate_fips186_4_keypair(struct rsa_public_key *pub,
goto cleanup;
}
+ /* check whether d > 2^(nlen/2) -- FIPS186-4 5.3.1 */
+ if (mpz_sizeinbase(key->d, 2) < n_size/2) {
+ ret = 0;
+ goto cleanup;
+ }
+
/* Done! Almost, we must compute the auxillary private values. */
/* a = d % (p-1) */
mpz_fdiv_r(key->a, key->d, p1);