From 5855faca9ad995df37ca795a551c453bde0b2502 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se>
Date: Tue, 1 Jun 2010 17:28:37 +0200
Subject: [PATCH] (dsa_generate_keypair): Updated for changes in
 nettle_random_prime and _nettle_generate_pocklington_prime. Invoke progress
 callback.

Rev: nettle/dsa-keygen.c:1.7
---
 dsa-keygen.c | 33 +++++++++++++++++++++++++--------
 1 file changed, 25 insertions(+), 8 deletions(-)

diff --git a/dsa-keygen.c b/dsa-keygen.c
index 62adabed..5b50d0e1 100644
--- a/dsa-keygen.c
+++ b/dsa-keygen.c
@@ -43,7 +43,7 @@
 int
 dsa_generate_keypair(struct dsa_public_key *pub,
 		     struct dsa_private_key *key,
-		     void *ctx, nettle_random_func random,
+		     void *random_ctx, nettle_random_func random,
 		     void *progress_ctx, nettle_progress_func progress,
 		     unsigned p_bits, unsigned q_bits)
 {
@@ -65,24 +65,35 @@ dsa_generate_keypair(struct dsa_public_key *pub,
       return 0;
     }
 
-  nettle_random_prime (pub->q, q_bits, ctx, random);
-
   mpz_init (p0);
+  mpz_init (p0q);
+  mpz_init (r);
+
+  nettle_random_prime (pub->q, q_bits, 0, random_ctx, random,
+		       progress_ctx, progress);
+
   p0_bits = (p_bits + 3)/2;
   
-  nettle_random_prime (p0, p0_bits, ctx, random);
+  nettle_random_prime (p0, p0_bits, 0,
+		       random_ctx, random,
+		       progress_ctx, progress);
+
+  if (progress)
+    progress (progress_ctx, 'q');
   
   /* Generate p = 2 r q p0 + 1, such that 2^{n-1} < p < 2^n.
    *
    * We select r in the range i + 1 < r <= 2i, with i = floor (2^{n-2} / (p0 q). */
 
-  mpz_init (p0q);
   mpz_mul (p0q, p0, pub->q);
 
-  _nettle_generate_pocklington_prime (pub->p, p_bits, r,
-				      ctx, random,
+  _nettle_generate_pocklington_prime (pub->p, r, p_bits, 0,
+				      random_ctx, random,
 				      p0, pub->q, p0q);
 
+  if (progress)
+    progress (progress_ctx, 'p');
+
   mpz_mul (r, r, p0);
 
   for (a = 2; ; a++)
@@ -93,13 +104,19 @@ dsa_generate_keypair(struct dsa_public_key *pub,
 	break;
     }
 
+  if (progress)
+    progress (progress_ctx, 'g');
+
   mpz_init_set(r, pub->q);
   mpz_sub_ui(r, r, 2);
-  nettle_mpz_random(key->x, ctx, random, r);
+  nettle_mpz_random(key->x, random_ctx, random, r);
 
   mpz_add_ui(key->x, key->x, 1);
 
   mpz_powm(pub->y, pub->g, key->x, pub->p);
+
+  if (progress)
+    progress (progress_ctx, '\n');
   
   mpz_clear (p0);
   mpz_clear (p0q);
-- 
GitLab