2c8c022
diff -up libgcrypt-1.7.3/cipher/dsa.c.tests libgcrypt-1.7.3/cipher/dsa.c
2c8c022
--- libgcrypt-1.7.3/cipher/dsa.c.tests	2016-04-07 17:30:08.000000000 +0200
2c8c022
+++ libgcrypt-1.7.3/cipher/dsa.c	2016-11-22 15:33:48.813026002 +0100
2c8c022
@@ -457,11 +457,22 @@ generate_fips186 (DSA_secret_key *sk, un
2c8c022
                                              &prime_q, &prime_p,
2c8c022
                                              r_counter,
2c8c022
                                              r_seed, r_seedlen);
2c8c022
-      else
2c8c022
-        ec = _gcry_generate_fips186_3_prime (nbits, qbits, NULL, 0,
2c8c022
+      else if (!domain->p || !domain->q)
2c8c022
+        ec = _gcry_generate_fips186_3_prime (nbits, qbits,
2c8c022
+                                             initial_seed.seed,
2c8c022
+                                             initial_seed.seedlen,
2c8c022
                                              &prime_q, &prime_p,
2c8c022
                                              r_counter,
2c8c022
                                              r_seed, r_seedlen, NULL);
2c8c022
+      else
2c8c022
+        {
2c8c022
+          /* Domain parameters p and q are given; use them.  */
2c8c022
+          prime_p = mpi_copy (domain->p);
2c8c022
+          prime_q = mpi_copy (domain->q);
2c8c022
+          gcry_assert (mpi_get_nbits (prime_p) == nbits);
2c8c022
+          gcry_assert (mpi_get_nbits (prime_q) == qbits);
2c8c022
+          ec = 0;
2c8c022
+        }
2c8c022
       sexp_release (initial_seed.sexp);
2c8c022
       if (ec)
2c8c022
         goto leave;
2c8c022
@@ -855,13 +866,12 @@ dsa_generate (const gcry_sexp_t genparms
2c8c022
       sexp_release (l1);
2c8c022
       sexp_release (domainsexp);
2c8c022
 
2c8c022
-      /* Check that all domain parameters are available.  */
2c8c022
-      if (!domain.p || !domain.q || !domain.g)
2c8c022
+      /* Check that p and q domain parameters are available.  */
2c8c022
+      if (!domain.p || !domain.q || (!domain.g && !(flags & PUBKEY_FLAG_USE_FIPS186)))
2c8c022
         {
2c8c022
           _gcry_mpi_release (domain.p);
2c8c022
           _gcry_mpi_release (domain.q);
2c8c022
           _gcry_mpi_release (domain.g);
2c8c022
-          sexp_release (deriveparms);
2c8c022
           return GPG_ERR_MISSING_VALUE;
2c8c022
         }
2c8c022
 
2c8c022
diff -up libgcrypt-1.7.3/cipher/rsa.c.tests libgcrypt-1.7.3/cipher/rsa.c
2c8c022
--- libgcrypt-1.7.3/cipher/rsa.c.tests	2016-07-14 11:19:17.000000000 +0200
2c8c022
+++ libgcrypt-1.7.3/cipher/rsa.c	2016-11-22 15:25:05.426838229 +0100
2c8c022
@@ -696,7 +696,7 @@ generate_x931 (RSA_secret_key *sk, unsig
2c8c022
 
2c8c022
   *swapped = 0;
2c8c022
 
2c8c022
-  if (e_value == 1)   /* Alias for a secure value. */
2c8c022
+  if (e_value == 1 || e_value == 0)   /* Alias for a secure value. */
2c8c022
     e_value = 65537;
2c8c022
 
2c8c022
   /* Point 1 of section 4.1:  k = 1024 + 256s with S >= 0  */
2c8c022
diff -up libgcrypt-1.7.3/tests/keygen.c.tests libgcrypt-1.7.3/tests/keygen.c
2c8c022
--- libgcrypt-1.7.3/tests/keygen.c.tests	2016-04-07 17:30:08.000000000 +0200
2c8c022
+++ libgcrypt-1.7.3/tests/keygen.c	2016-11-22 15:25:33.178484464 +0100
2c8c022
@@ -257,11 +257,11 @@ check_rsa_keys (void)
2c8c022
 
2c8c022
 
2c8c022
   if (verbose)
2c8c022
-    show ("creating 512 bit RSA key with e=257\n");
2c8c022
+    show ("creating 1024 bit RSA key with e=257\n");
2c8c022
   rc = gcry_sexp_new (&keyparm,
2c8c022
                       "(genkey\n"
2c8c022
                       " (rsa\n"
2c8c022
-                      "  (nbits 3:512)\n"
2c8c022
+                      "  (nbits 4:1024)\n"
2c8c022
                       "  (rsa-use-e 3:257)\n"
2c8c022
                       " ))", 0, 1);
2c8c022
   if (rc)
2c8c022
@@ -282,11 +282,11 @@ check_rsa_keys (void)
2c8c022
   gcry_sexp_release (key);
2c8c022
 
2c8c022
   if (verbose)
2c8c022
-    show ("creating 512 bit RSA key with default e\n");
2c8c022
+    show ("creating 1024 bit RSA key with default e\n");
2c8c022
   rc = gcry_sexp_new (&keyparm,
2c8c022
                       "(genkey\n"
2c8c022
                       " (rsa\n"
2c8c022
-                      "  (nbits 3:512)\n"
2c8c022
+                      "  (nbits 4:1024)\n"
2c8c022
                       "  (rsa-use-e 1:0)\n"
2c8c022
                       " ))", 0, 1);
2c8c022
   if (rc)
2c8c022
@@ -366,12 +366,12 @@ check_dsa_keys (void)
2c8c022
     }
2c8c022
 
2c8c022
   if (verbose)
2c8c022
-    show ("creating 1536 bit DSA key\n");
2c8c022
+    show ("creating 2048 bit DSA key\n");
2c8c022
   rc = gcry_sexp_new (&keyparm,
2c8c022
                       "(genkey\n"
2c8c022
                       " (dsa\n"
2c8c022
-                      "  (nbits 4:1536)\n"
2c8c022
-                      "  (qbits 3:224)\n"
2c8c022
+                      "  (nbits 4:2048)\n"
2c8c022
+                      "  (qbits 3:256)\n"
2c8c022
                       " ))", 0, 1);
2c8c022
   if (rc)
2c8c022
     die ("error creating S-expression: %s\n", gpg_strerror (rc));
2c8c022
diff -up libgcrypt-1.7.3/tests/pubkey.c.tests libgcrypt-1.7.3/tests/pubkey.c
2c8c022
--- libgcrypt-1.7.3/tests/pubkey.c.tests	2016-07-14 11:19:17.000000000 +0200
2c8c022
+++ libgcrypt-1.7.3/tests/pubkey.c	2016-11-22 18:40:23.220813982 +0100
2c8c022
@@ -651,7 +651,7 @@ get_dsa_key_fips186_with_seed_new (gcry_
2c8c022
      "    (use-fips186)"
2c8c022
      "    (transient-key)"
2c8c022
      "    (derive-parms"
2c8c022
-     "      (seed #0cb1990c1fd3626055d7a0096f8fa99807399871#))))",
2c8c022
+     "      (seed #8b4c4d671fff82e8ed932260206d0571e3a1c2cee8cd94cb73fe58f9b67488fa#))))",
2c8c022
      0, 1);
2c8c022
   if (rc)
2c8c022
     die ("error creating S-expression: %s\n", gcry_strerror (rc));