summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2010-09-05 12:21:11 +0200
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2010-09-05 12:21:11 +0200
commitd1e7a8d480ccc2d0b2313cef22ccf80b4797d129 (patch)
tree72bc75221af7625874c92845ddd515308342e5ca
parent06074f69d4662868ab7fa381a59e5d8567f318eb (diff)
downloadcryptodev-linux-d1e7a8d480ccc2d0b2313cef22ccf80b4797d129.tar.gz
cryptodev-linux-d1e7a8d480ccc2d0b2313cef22ccf80b4797d129.tar.xz
cryptodev-linux-d1e7a8d480ccc2d0b2313cef22ccf80b4797d129.zip
DH key generation moved to a while loop... Just in case.
-rw-r--r--ncr-dh.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/ncr-dh.c b/ncr-dh.c
index bc45723..501eaa3 100644
--- a/ncr-dh.c
+++ b/ncr-dh.c
@@ -92,20 +92,22 @@ int dh_generate_key(dh_key * key)
return -ENOMEM;
}
- get_random_bytes(buf, size);
+ do {
+ get_random_bytes(buf, size);
- if ((err = mp_read_unsigned_bin(&key->x, buf, size)) != CRYPT_OK) {
- err();
- ret = _ncr_tomerr(err);
- goto fail;
- }
+ if ((err = mp_read_unsigned_bin(&key->x, buf, size)) != CRYPT_OK) {
+ err();
+ ret = _ncr_tomerr(err);
+ goto fail;
+ }
- err = mp_mod(&key->x, &key->p, &key->x);
- if (err != CRYPT_OK) {
- err();
- ret = _ncr_tomerr(err);
- goto fail;
- }
+ err = mp_mod(&key->x, &key->p, &key->x);
+ if (err != CRYPT_OK) {
+ err();
+ ret = _ncr_tomerr(err);
+ goto fail;
+ }
+ } while(mp_cmp_d(&key->x, 0) == MP_EQ || mp_cmp_d(&key->x, 1) == MP_EQ);
key->type = PK_PRIVATE;