GCM: Add support for split data buffers and online operation
[libgcrypt.git] / cipher / primegen.c
index 1d8aba8..94e8599 100644 (file)
@@ -31,7 +31,7 @@
 #include "cipher.h"
 #include "ath.h"
 
-static gcry_mpi_t gen_prime (unsigned int nbits, int secret, int randomlevel, 
+static gcry_mpi_t gen_prime (unsigned int nbits, int secret, int randomlevel,
                              int (*extra_check)(void *, gcry_mpi_t),
                              void *extra_check_arg);
 static int check_prime( gcry_mpi_t prime, gcry_mpi_t val_2, int rm_rounds,
@@ -132,7 +132,7 @@ static int no_of_small_prime_numbers = DIM (small_prime_numbers) - 1;
 \f
 /* An object and a list to build up a global pool of primes.  See
    save_pool_prime and get_pool_prime. */
-struct primepool_s 
+struct primepool_s
 {
   struct primepool_s *next;
   gcry_mpi_t prime;      /* If this is NULL the entry is not used. */
@@ -141,9 +141,20 @@ struct primepool_s
 };
 struct primepool_s *primepool;
 /* Mutex used to protect access to the primepool.  */
-static ath_mutex_t primepool_lock = ATH_MUTEX_INITIALIZER;
+static ath_mutex_t primepool_lock;
 
 
+gcry_err_code_t
+_gcry_primegen_init (void)
+{
+  gcry_err_code_t ec;
+
+  ec = ath_mutex_init (&primepool_lock);
+  if (ec)
+    return gpg_err_code_from_errno (ec);
+  return ec;
+}
+
 
 /* Save PRIME which has been generated at RANDOMLEVEL for later
    use. Needs to be called while primepool_lock is being hold.  Note
@@ -163,7 +174,7 @@ save_pool_prime (gcry_mpi_t prime, gcry_random_level_t randomlevel)
       /* Remove some of the entries.  Our strategy is removing
          the last third from the list. */
       int i;
-      
+
       for (i=0, item2 = primepool; item2; item2 = item2->next)
         {
           if (i >= n/3*2)
@@ -182,7 +193,7 @@ save_pool_prime (gcry_mpi_t prime, gcry_random_level_t randomlevel)
         {
           /* Out of memory.  Silently giving up. */
           gcry_mpi_release (prime);
-          return; 
+          return;
         }
       item->next = primepool;
       primepool = item;
@@ -195,7 +206,7 @@ save_pool_prime (gcry_mpi_t prime, gcry_random_level_t randomlevel)
 
 /* Return a prime for the prime pool or NULL if none has been found.
    The prime needs to match NBITS and randomlevel. This function needs
-   to be called why the primepool_look is being hold. */
+   to be called with the primepool_look is being hold. */
 static gcry_mpi_t
 get_pool_prime (unsigned int nbits, gcry_random_level_t randomlevel)
 {
@@ -359,7 +370,7 @@ prime_generate_internal (int need_q_factor,
       fbits = (pbits - req_qbits -1) / n;
       qbits = pbits - n * fbits;
     }
-  
+
   if (DBG_CIPHER)
     log_debug ("gen prime: pbits=%u qbits=%u fbits=%u/%u n=%d\n",
                pbits, req_qbits, qbits, fbits, n);
@@ -373,7 +384,7 @@ prime_generate_internal (int need_q_factor,
   /* Generate a specific Q-Factor if requested. */
   if (need_q_factor)
     q_factor = gen_prime (req_qbits, is_secret, randomlevel, NULL, NULL);
-  
+
   /* Allocate an array to hold all factors + 2 for later usage.  */
   factors = gcry_calloc (n + 2, sizeof (*factors));
   if (!factors)
@@ -391,10 +402,10 @@ prime_generate_internal (int need_q_factor,
     }
   for (i=0; i < n; i++)
     pool_in_use[i] = -1;
-      
+
   /* Make a pool of 3n+5 primes (this is an arbitrary value).  We
-     require at least 30 primes for are useful selection process. 
-     
+     require at least 30 primes for are useful selection process.
+
      Fixme: We need to research the best formula for sizing the pool.
   */
   m = n * 3 + 5;
@@ -443,7 +454,7 @@ prime_generate_internal (int need_q_factor,
           is_locked = 1;
           for (i = 0; i < n; i++)
             {
-              perms[i] = 1; 
+              perms[i] = 1;
               /* At a maximum we use strong random for the factors.
                  This saves us a lot of entropy. Given that Q and
                  possible Q-factor are also used in the final prime
@@ -523,12 +534,12 @@ prime_generate_internal (int need_q_factor,
               gcry_free (perms);
               perms = NULL;
               progress ('!');
-              goto next_try;   
+              goto next_try;
             }
         }
 
        /* Generate next prime candidate:
-          p = 2 * q [ * q_factor] * factor_0 * factor_1 * ... * factor_n + 1. 
+          p = 2 * q [ * q_factor] * factor_0 * factor_1 * ... * factor_n + 1.
          */
        mpi_set (prime, q);
        mpi_mul_ui (prime, prime, 2);
@@ -553,7 +564,7 @@ prime_generate_internal (int need_q_factor,
          }
        else
          count1 = 0;
-        
+
        if (nprime > pbits)
          {
            if (++count2 > 20)
@@ -575,19 +586,19 @@ prime_generate_internal (int need_q_factor,
   if (DBG_CIPHER)
     {
       progress ('\n');
-      log_mpidump ("prime    ", prime);
-      log_mpidump ("factor  q", q);
+      log_mpidump ("prime    ", prime);
+      log_mpidump ("factor  q", q);
       if (need_q_factor)
-        log_mpidump ("factor q0", q_factor);
+        log_mpidump ("factor q0", q_factor);
       for (i = 0; i < n; i++)
-        log_mpidump ("factor pi", factors[i]);
+        log_mpidump ("factor pi", factors[i]);
       log_debug ("bit sizes: prime=%u, q=%u",
                  mpi_get_nbits (prime), mpi_get_nbits (q));
       if (need_q_factor)
-        log_debug (", q0=%u", mpi_get_nbits (q_factor));
+        log_printf (", q0=%u", mpi_get_nbits (q_factor));
       for (i = 0; i < n; i++)
-        log_debug (", p%d=%u", i, mpi_get_nbits (factors[i]));
-      progress('\n');
+        log_printf (", p%d=%u", i, mpi_get_nbits (factors[i]));
+      log_printf ("\n");
     }
 
   if (ret_factors)
@@ -624,14 +635,14 @@ prime_generate_internal (int need_q_factor,
               factors_new[i] = mpi_copy (factors[i]);
         }
     }
-  
+
   if (g)
     {
       /* Create a generator (start with 3).  */
       gcry_mpi_t tmp = mpi_alloc (mpi_get_nlimbs (prime));
       gcry_mpi_t b = mpi_alloc (mpi_get_nlimbs (prime));
       gcry_mpi_t pmin1 = mpi_alloc (mpi_get_nlimbs (prime));
-      
+
       if (need_q_factor)
         err = GPG_ERR_NOT_IMPLEMENTED;
       else
@@ -644,11 +655,7 @@ prime_generate_internal (int need_q_factor,
             {
               mpi_add_ui (g, g, 1);
               if (DBG_CIPHER)
-                {
-                  log_debug ("checking g:");
-                  gcry_mpi_dump (g);
-                  log_printf ("\n");
-                }
+                log_printmpi ("checking g", g);
               else
                 progress('^');
               for (i = 0; i < n + 2; i++)
@@ -662,7 +669,7 @@ prime_generate_internal (int need_q_factor,
                 }
               if (DBG_CIPHER)
                 progress('\n');
-            } 
+            }
           while (i < n + 2);
 
           mpi_free (factors[n+1]);
@@ -671,7 +678,7 @@ prime_generate_internal (int need_q_factor,
           mpi_free (pmin1);
         }
     }
-  
+
   if (! DBG_CIPHER)
     progress ('\n');
 
@@ -738,19 +745,19 @@ gcry_mpi_t
 _gcry_generate_elg_prime (int mode, unsigned pbits, unsigned qbits,
                          gcry_mpi_t g, gcry_mpi_t **ret_factors)
 {
-  gcry_err_code_t err = GPG_ERR_NO_ERROR;
   gcry_mpi_t prime = NULL;
-  
-  err = prime_generate_internal ((mode == 1), &prime, pbits, qbits, g,
-                                ret_factors, GCRY_WEAK_RANDOM, 0, 0,
-                                 NULL, NULL);
+
+  if (prime_generate_internal ((mode == 1), &prime, pbits, qbits, g,
+                               ret_factors, GCRY_WEAK_RANDOM, 0, 0,
+                               NULL, NULL))
+    prime = NULL; /* (Should be NULL in the error case anyway.)  */
 
   return prime;
 }
 
 
 static gcry_mpi_t
-gen_prime (unsigned int nbits, int secret, int randomlevel, 
+gen_prime (unsigned int nbits, int secret, int randomlevel,
            int (*extra_check)(void *, gcry_mpi_t), void *extra_check_arg)
 {
   gcry_mpi_t prime, ptest, pminus1, val_2, val_3, result;
@@ -758,7 +765,7 @@ gen_prime (unsigned int nbits, int secret, int randomlevel,
   unsigned int x, step;
   unsigned int count1, count2;
   int *mods;
-  
+
 /*   if (  DBG_CIPHER ) */
 /*     log_debug ("generate a prime of %u bits ", nbits ); */
 
@@ -777,10 +784,10 @@ gen_prime (unsigned int nbits, int secret, int randomlevel,
   for (;;)
     {  /* try forvever */
       int dotcount=0;
-      
+
       /* generate a random number */
       gcry_mpi_randomize( prime, nbits, randomlevel );
-      
+
       /* Set high order bit to 1, set low order bit to 1.  If we are
          generating a secret prime we are most probably doing that
          for RSA, to make sure that the modulus does have the
@@ -789,17 +796,17 @@ gen_prime (unsigned int nbits, int secret, int randomlevel,
       if (secret)
         mpi_set_bit (prime, nbits-2);
       mpi_set_bit(prime, 0);
-      
+
       /* Calculate all remainders. */
       for (i=0; (x = small_prime_numbers[i]); i++ )
         mods[i] = mpi_fdiv_r_ui(NULL, prime, x);
-      
+
       /* Now try some primes starting with prime. */
-      for(step=0; step < 20000; step += 2 ) 
+      for(step=0; step < 20000; step += 2 )
         {
           /* Check against all the small primes we have in mods. */
           count1++;
-          for (i=0; (x = small_prime_numbers[i]); i++ ) 
+          for (i=0; (x = small_prime_numbers[i]); i++ )
             {
               while ( mods[i] + step >= x )
                 mods[i] -= x;
@@ -808,7 +815,7 @@ gen_prime (unsigned int nbits, int secret, int randomlevel,
            }
           if ( x )
             continue;   /* Found a multiple of an already known prime. */
-          
+
           mpi_add_ui( ptest, prime, step );
 
           /* Do a fast Fermat test now. */
@@ -816,7 +823,7 @@ gen_prime (unsigned int nbits, int secret, int randomlevel,
           mpi_sub_ui( pminus1, ptest, 1);
           gcry_mpi_powm( result, val_2, pminus1, ptest );
           if ( !mpi_cmp_ui( result, 1 ) )
-            { 
+            {
               /* Not composite, perform stronger tests */
               if (is_prime(ptest, 5, &count2 ))
                 {
@@ -828,13 +835,13 @@ gen_prime (unsigned int nbits, int secret, int randomlevel,
                     }
 
                   if (extra_check && extra_check (extra_check_arg, ptest))
-                    { 
+                    {
                       /* The extra check told us that this prime is
                          not of the caller's taste. */
                       progress ('/');
                     }
                   else
-                    { 
+                    {
                       /* Got it. */
                       mpi_free(val_2);
                       mpi_free(val_3);
@@ -842,7 +849,7 @@ gen_prime (unsigned int nbits, int secret, int randomlevel,
                       mpi_free(pminus1);
                       mpi_free(prime);
                       gcry_free(mods);
-                      return ptest; 
+                      return ptest;
                     }
                 }
            }
@@ -883,7 +890,7 @@ check_prime( gcry_mpi_t prime, gcry_mpi_t val_2, int rm_rounds,
     gcry_mpi_powm( result, val_2, pminus1, prime );
     mpi_free( pminus1 );
     if ( mpi_cmp_ui( result, 1 ) )
-      { 
+      {
         /* Is composite. */
         mpi_free( result );
         progress('.');
@@ -924,7 +931,7 @@ is_prime (gcry_mpi_t n, int steps, unsigned int *count)
   unsigned nbits = mpi_get_nbits( n );
 
   if (steps < 5) /* Make sure that we do at least 5 rounds. */
-    steps = 5; 
+    steps = 5;
 
   mpi_sub_ui( nminus1, n, 1 );
 
@@ -988,7 +995,7 @@ is_prime (gcry_mpi_t n, int steps, unsigned int *count)
 /* Given ARRAY of size N with M elements set to true produce a
    modified array with the next permutation of M elements.  Note, that
    ARRAY is used in a one-bit-per-byte approach.  To detected the last
-   permutation it is useful to intialize the array with the first M
+   permutation it is useful to initialize the array with the first M
    element set to true and use this test:
        m_out_of_n (array, m, n);
        for (i = j = 0; i < n && j < m; i++)
@@ -996,7 +1003,7 @@ is_prime (gcry_mpi_t n, int steps, unsigned int *count)
            j++;
        if (j == m)
          goto ready;
-     
+
    This code is based on the algorithm 452 from the "Collected
    Algorithms From ACM, Volume II" by C. N. Liu and D. T. Tang.
 */
@@ -1010,7 +1017,7 @@ m_out_of_n ( char *array, int m, int n )
 
   /* Need to handle this simple case separately. */
   if( m == 1 )
-    { 
+    {
       for (i=0; i < n; i++ )
         {
           if ( array[i] )
@@ -1060,7 +1067,7 @@ m_out_of_n ( char *array, int m, int n )
       else
         k1 = k2 + 1;
     }
-  else 
+  else
     {
       /* M is even. */
       if( !array[n-1] )
@@ -1069,7 +1076,7 @@ m_out_of_n ( char *array, int m, int n )
           k2 = k1 + 1;
           goto leave;
         }
-        
+
       if( !(j1 & 1) )
         {
           k1 = n - j1;
@@ -1080,7 +1087,7 @@ m_out_of_n ( char *array, int m, int n )
         }
     scan:
       jp = n - j1 - 1;
-      for (i=1; i <= jp; i++ ) 
+      for (i=1; i <= jp; i++ )
         {
           i1 = jp + 2 - i;
           if( array[i1-1]  )
@@ -1128,7 +1135,7 @@ gcry_prime_generate (gcry_mpi_t *prime, unsigned int prime_bits,
 
   if (!prime)
     return gpg_error (GPG_ERR_INV_ARG);
-  *prime = NULL; 
+  *prime = NULL;
 
   if (flags & GCRY_PRIME_FLAG_SPECIAL_FACTOR)
     mode = 1;
@@ -1156,7 +1163,7 @@ gcry_prime_generate (gcry_mpi_t *prime, unsigned int prime_bits,
                   mpi_free (factors_generated[i]);
                 gcry_free (factors_generated);
               }
-           err = GPG_ERR_GENERAL; 
+           err = GPG_ERR_GENERAL;
          }
       }
 
@@ -1170,7 +1177,7 @@ gcry_prime_generate (gcry_mpi_t *prime, unsigned int prime_bits,
   return gcry_error (err);
 }
 
-/* Check wether the number X is prime.  */
+/* Check whether the number X is prime.  */
 gcry_error_t
 gcry_prime_check (gcry_mpi_t x, unsigned int flags)
 {
@@ -1207,38 +1214,34 @@ gcry_prime_group_generator (gcry_mpi_t *r_g,
 
   if (!factors || !r_g || !prime)
     return gpg_error (GPG_ERR_INV_ARG);
-  *r_g = NULL; 
+  *r_g = NULL;
 
   for (n=0; factors[n]; n++)
     ;
   if (n < 2)
     return gpg_error (GPG_ERR_INV_ARG);
 
-  /* Extra sanity check - usually disabled. */  
+  /* Extra sanity check - usually disabled. */
 /*   mpi_set (tmp, factors[0]); */
 /*   for(i = 1; i < n; i++) */
 /*     mpi_mul (tmp, tmp, factors[i]); */
 /*   mpi_add_ui (tmp, tmp, 1); */
 /*   if (mpi_cmp (prime, tmp)) */
 /*     return gpg_error (GPG_ERR_INV_ARG); */
-  
-  gcry_mpi_sub_ui (pmin1, prime, 1);      
-  do         
+
+  gcry_mpi_sub_ui (pmin1, prime, 1);
+  do
     {
       if (first)
         first = 0;
       else
         gcry_mpi_add_ui (g, g, 1);
-      
+
       if (DBG_CIPHER)
-        {
-          log_debug ("checking g:");
-          gcry_mpi_dump (g);
-          log_debug ("\n");
-        }
+        log_printmpi ("checking g", g);
       else
         progress('^');
-      
+
       for (i = 0; i < n; i++)
         {
           mpi_fdiv_q (tmp, pmin1, factors[i]);
@@ -1250,13 +1253,13 @@ gcry_prime_group_generator (gcry_mpi_t *r_g,
         progress('\n');
     }
   while (i < n);
-  
+
   gcry_mpi_release (tmp);
-  gcry_mpi_release (b); 
-  gcry_mpi_release (pmin1); 
-  *r_g = g; 
+  gcry_mpi_release (b);
+  gcry_mpi_release (pmin1);
+  *r_g = g;
 
-  return 0; 
+  return 0;
 }
 
 /* Convenience function to release the factors array. */
@@ -1266,7 +1269,7 @@ gcry_prime_release_factors (gcry_mpi_t *factors)
   if (factors)
     {
       int i;
-      
+
       for (i=0; factors[i]; i++)
         mpi_free (factors[i]);
       gcry_free (factors);
@@ -1279,11 +1282,11 @@ gcry_prime_release_factors (gcry_mpi_t *factors)
 static gcry_mpi_t
 find_x931_prime (const gcry_mpi_t pfirst)
 {
-  gcry_mpi_t val_2 = mpi_alloc_set_ui (2); 
+  gcry_mpi_t val_2 = mpi_alloc_set_ui (2);
   gcry_mpi_t prime;
-  
+
   prime = gcry_mpi_copy (pfirst);
-  /* If P is even add 1.  */ 
+  /* If P is even add 1.  */
   mpi_set_bit (prime, 0);
 
   /* We use 64 Rabin-Miller rounds which is better and thus
@@ -1299,7 +1302,7 @@ find_x931_prime (const gcry_mpi_t pfirst)
 }
 
 
-/* Generate a prime using the algorithm from X9.31 appendix B.4. 
+/* Generate a prime using the algorithm from X9.31 appendix B.4.
 
    This function requires that the provided public exponent E is odd.
    XP, XP1 and XP2 are the seed values.  All values are mandatory.
@@ -1308,7 +1311,7 @@ find_x931_prime (const gcry_mpi_t pfirst)
    internal values P1 and P2 are saved at these addresses.  On error
    NULL is returned.  */
 gcry_mpi_t
-_gcry_derive_x931_prime (const gcry_mpi_t xp, 
+_gcry_derive_x931_prime (const gcry_mpi_t xp,
                          const gcry_mpi_t xp1, const gcry_mpi_t xp2,
                          const gcry_mpi_t e,
                          gcry_mpi_t *r_p1, gcry_mpi_t *r_p2)
@@ -1327,20 +1330,20 @@ _gcry_derive_x931_prime (const gcry_mpi_t xp,
 
   {
     gcry_mpi_t r1, tmp;
-  
+
     /* r1 = (p2^{-1} mod p1)p2 - (p1^{-1} mod p2) */
     tmp = mpi_alloc_like (p1);
     mpi_invm (tmp, p2, p1);
     mpi_mul (tmp, tmp, p2);
     r1 = tmp;
-    
+
     tmp = mpi_alloc_like (p2);
     mpi_invm (tmp, p1, p2);
     mpi_mul (tmp, tmp, p1);
     mpi_sub (r1, r1, tmp);
 
     /* Fixup a negative value.  */
-    if (mpi_is_neg (r1)) 
+    if (mpi_has_sign (r1))
       mpi_add (r1, r1, p1p2);
 
     /* yp0 = xp + (r1 - xp mod p1*p2)  */
@@ -1350,7 +1353,7 @@ _gcry_derive_x931_prime (const gcry_mpi_t xp,
     mpi_free (r1);
 
     /* Fixup a negative value.  */
-    if (mpi_cmp (yp0, xp) < 0 ) 
+    if (mpi_cmp (yp0, xp) < 0 )
       mpi_add (yp0, yp0, p1p2);
   }
 
@@ -1378,10 +1381,10 @@ _gcry_derive_x931_prime (const gcry_mpi_t xp,
    */
 
   {
-    gcry_mpi_t val_2 = mpi_alloc_set_ui (2); 
+    gcry_mpi_t val_2 = mpi_alloc_set_ui (2);
     gcry_mpi_t gcdtmp = mpi_alloc_like (yp0);
     int gcdres;
-  
+
     mpi_sub_ui (p1p2, p1p2, 1); /* Adjust for loop body.  */
     mpi_sub_ui (yp0, yp0, 1);   /* Ditto.  */
     for (;;)
@@ -1453,7 +1456,7 @@ _gcry_generate_fips186_2_prime (unsigned int pbits, unsigned int qbits,
     ; /* No seed value given:  We are asked to generate it.  */
   else if (!seed || seedlen < qbits/8)
     return GPG_ERR_INV_ARG;
-  
+
   /* Allocate a buffer to later compute SEED+some_increment. */
   seed_plus = gcry_malloc (seedlen < 20? 20:seedlen);
   if (!seed_plus)
@@ -1468,7 +1471,7 @@ _gcry_generate_fips186_2_prime (unsigned int pbits, unsigned int qbits,
   value_w = gcry_mpi_new (pbits);
   value_x = gcry_mpi_new (pbits);
 
- restart:  
+ restart:
   /* Generate Q.  */
   for (;;)
     {
@@ -1479,7 +1482,7 @@ _gcry_generate_fips186_2_prime (unsigned int pbits, unsigned int qbits,
           gcry_create_nonce (seed_help_buffer, seedlen);
           seed = seed_help_buffer;
         }
-      
+
       /* Step 2: U = sha1(seed) ^ sha1((seed+1) mod 2^{qbits})  */
       memcpy (seed_plus, seed, seedlen);
       for (i=seedlen-1; i >= 0; i--)
@@ -1492,16 +1495,16 @@ _gcry_generate_fips186_2_prime (unsigned int pbits, unsigned int qbits,
       gcry_md_hash_buffer (GCRY_MD_SHA1, digest, seed_plus, seedlen);
       for (i=0; i < sizeof value_u; i++)
         value_u[i] ^= digest[i];
-  
+
       /* Step 3:  Form q from U  */
       gcry_mpi_release (prime_q); prime_q = NULL;
-      ec = gpg_err_code (gcry_mpi_scan (&prime_q, GCRYMPI_FMT_USG, 
+      ec = gpg_err_code (gcry_mpi_scan (&prime_q, GCRYMPI_FMT_USG,
                                         value_u, sizeof value_u, NULL));
       if (ec)
         goto leave;
       mpi_set_highbit (prime_q, qbits-1 );
       mpi_set_bit (prime_q, 0);
-      
+
       /* Step 4:  Test whether Q is prime using 64 round of Rabin-Miller.  */
       if (check_prime (prime_q, val_2, 64, NULL, NULL))
         break; /* Yes, Q is prime.  */
@@ -1509,7 +1512,7 @@ _gcry_generate_fips186_2_prime (unsigned int pbits, unsigned int qbits,
       /* Step 5.  */
       seed = NULL;  /* Force a new seed at Step 1.  */
     }
-  
+
   /* Step 6.  Note that we do no use an explicit offset but increment
      SEED_PLUS accordingly.  SEED_PLUS is currently SEED+1.  */
   counter = 0;
@@ -1518,12 +1521,12 @@ _gcry_generate_fips186_2_prime (unsigned int pbits, unsigned int qbits,
   prime_p = gcry_mpi_new (pbits);
   for (;;)
     {
-      /* Step 7: For k = 0,...n let 
-                   V_k = sha1(seed+offset+k) mod 2^{qbits}  
-         Step 8: W = V_0 + V_1*2^160 + 
-                         ... 
+      /* Step 7: For k = 0,...n let
+                   V_k = sha1(seed+offset+k) mod 2^{qbits}
+         Step 8: W = V_0 + V_1*2^160 +
+                         ...
                          + V_{n-1}*2^{(n-1)*160}
-                         + (V_{n} mod 2^b)*2^{n*160}                
+                         + (V_{n} mod 2^b)*2^{n*160}
        */
       mpi_set_ui (value_w, 0);
       for (value_k=0; value_k <= value_n; value_k++)
@@ -1542,14 +1545,14 @@ _gcry_generate_fips186_2_prime (unsigned int pbits, unsigned int qbits,
                 break;
             }
           gcry_md_hash_buffer (GCRY_MD_SHA1, digest, seed_plus, seedlen);
-          
+
           gcry_mpi_release (tmpval); tmpval = NULL;
           ec = gpg_err_code (gcry_mpi_scan (&tmpval, GCRYMPI_FMT_USG,
                                             digest, sizeof digest, NULL));
           if (ec)
             goto leave;
           if (value_k == value_n)
-            mpi_clear_highbit (tmpval, value_b+1); /* (V_n mod 2^b) */
+            mpi_clear_highbit (tmpval, value_b); /* (V_n mod 2^b) */
           mpi_lshift (tmpval, tmpval, value_k*qbits);
           mpi_add (value_w, value_w, tmpval);
         }
@@ -1570,7 +1573,7 @@ _gcry_generate_fips186_2_prime (unsigned int pbits, unsigned int qbits,
       if (mpi_get_nbits (prime_p) >= pbits-1
           && check_prime (prime_p, val_2, 64, NULL, NULL) )
         break; /* Yes, P is prime, continue with Step 15.  */
-      
+
       /* Step 13: counter = counter + 1, offset = offset + n + 1. */
       counter++;
 
@@ -1582,7 +1585,7 @@ _gcry_generate_fips186_2_prime (unsigned int pbits, unsigned int qbits,
   /* Step 15:  Save p, q, counter and seed.  */
 /*   log_debug ("fips186-2 pbits p=%u q=%u counter=%d\n", */
 /*              mpi_get_nbits (prime_p), mpi_get_nbits (prime_q), counter); */
-/*   log_printhex("fips186-2 seed:", seed, seedlen);  */
+/*   log_printhex("fips186-2 seed:", seed, seedlen); */
 /*   log_mpidump ("fips186-2 prime p", prime_p); */
 /*   log_mpidump ("fips186-2 prime q", prime_q); */
   if (r_q)
@@ -1631,7 +1634,7 @@ _gcry_generate_fips186_2_prime (unsigned int pbits, unsigned int qbits,
    value is stored at R_COUNTER and the seed actually used for
    generation is stored at R_SEED and R_SEEDVALUE.  The hash algorithm
    used is stored at R_HASHALGO.
-   
+
    Note that this function is very similar to the fips186_2 code.  Due
    to the minor differences, other buffer sizes and for documentarion,
    we use a separate function.
@@ -1652,7 +1655,7 @@ _gcry_generate_fips186_3_prime (unsigned int pbits, unsigned int qbits,
   gcry_mpi_t tmpval = NULL;     /* Helper variable.  */
   int hashalgo;                 /* The id of the Approved Hash Function.  */
   int i;
-  
+
   unsigned char value_u[256/8];
   int value_n, value_b, value_j;
   int counter;
@@ -1690,10 +1693,10 @@ _gcry_generate_fips186_3_prime (unsigned int pbits, unsigned int qbits,
     ; /* No seed value given:  We are asked to generate it.  */
   else if (!seed || seedlen < qbits/8)
     return GPG_ERR_INV_ARG;
-  
+
   /* Allocate a buffer to later compute SEED+some_increment and a few
      helper variables.  */
-  seed_plus = gcry_malloc (seedlen < sizeof seed_help_buffer? 
+  seed_plus = gcry_malloc (seedlen < sizeof seed_help_buffer?
                            sizeof seed_help_buffer : seedlen);
   if (!seed_plus)
     {
@@ -1709,7 +1712,7 @@ _gcry_generate_fips186_3_prime (unsigned int pbits, unsigned int qbits,
   /* Step 4: b = L - 1 - (n * outlen)  */
   value_b = pbits - 1 - (value_n * qbits);
 
- restart:  
+ restart:
   /* Generate Q.  */
   for (;;)
     {
@@ -1721,7 +1724,7 @@ _gcry_generate_fips186_3_prime (unsigned int pbits, unsigned int qbits,
           gcry_create_nonce (seed_help_buffer, seedlen);
           seed = seed_help_buffer;
         }
-      
+
       /* Step 6:  U = hash(seed)  */
       gcry_md_hash_buffer (hashalgo, value_u, seed, seedlen);
 
@@ -1736,12 +1739,12 @@ _gcry_generate_fips186_3_prime (unsigned int pbits, unsigned int qbits,
             }
         }
       gcry_mpi_release (prime_q); prime_q = NULL;
-      ec = gpg_err_code (gcry_mpi_scan (&prime_q, GCRYMPI_FMT_USG, 
+      ec = gpg_err_code (gcry_mpi_scan (&prime_q, GCRYMPI_FMT_USG,
                                         value_u, sizeof value_u, NULL));
       if (ec)
         goto leave;
       mpi_set_highbit (prime_q, qbits-1 );
-      
+
       /* Step 8:  Test whether Q is prime using 64 round of Rabin-Miller.
                   According to table C.1 this is sufficient for all
                   supported prime sizes (i.e. up 3072/256).  */
@@ -1751,7 +1754,7 @@ _gcry_generate_fips186_3_prime (unsigned int pbits, unsigned int qbits,
       /* Step 8.  */
       seed = NULL;  /* Force a new seed at Step 5.  */
     }
-  
+
   /* Step 11.  Note that we do no use an explicit offset but increment
      SEED_PLUS accordingly.  */
   memcpy (seed_plus, seed, seedlen);
@@ -1761,12 +1764,12 @@ _gcry_generate_fips186_3_prime (unsigned int pbits, unsigned int qbits,
   prime_p = gcry_mpi_new (pbits);
   for (;;)
     {
-      /* Step 11.1: For j = 0,...n let 
-                      V_j = hash(seed+offset+j)  
-         Step 11.2: W = V_0 + V_1*2^outlen + 
-                            ... 
+      /* Step 11.1: For j = 0,...n let
+                      V_j = hash(seed+offset+j)
+         Step 11.2: W = V_0 + V_1*2^outlen +
+                            ...
                             + V_{n-1}*2^{(n-1)*outlen}
-                            + (V_{n} mod 2^b)*2^{n*outlen}                
+                            + (V_{n} mod 2^b)*2^{n*outlen}
        */
       mpi_set_ui (value_w, 0);
       for (value_j=0; value_j <= value_n; value_j++)
@@ -1783,14 +1786,14 @@ _gcry_generate_fips186_3_prime (unsigned int pbits, unsigned int qbits,
                 break;
             }
           gcry_md_hash_buffer (GCRY_MD_SHA1, digest, seed_plus, seedlen);
-          
+
           gcry_mpi_release (tmpval); tmpval = NULL;
           ec = gpg_err_code (gcry_mpi_scan (&tmpval, GCRYMPI_FMT_USG,
                                             digest, sizeof digest, NULL));
           if (ec)
             goto leave;
           if (value_j == value_n)
-            mpi_clear_highbit (tmpval, value_b+1); /* (V_n mod 2^b) */
+            mpi_clear_highbit (tmpval, value_b); /* (V_n mod 2^b) */
           mpi_lshift (tmpval, tmpval, value_j*qbits);
           mpi_add (value_w, value_w, tmpval);
         }
@@ -1813,7 +1816,7 @@ _gcry_generate_fips186_3_prime (unsigned int pbits, unsigned int qbits,
       if (mpi_get_nbits (prime_p) >= pbits-1
           && check_prime (prime_p, val_2, 64, NULL, NULL) )
         break; /* Yes, P is prime, continue with Step 15.  */
-      
+
       /* Step 11.9: counter = counter + 1, offset = offset + n + 1.
                     If counter >= 4L  goto Step 5.  */
       counter++;
@@ -1824,9 +1827,9 @@ _gcry_generate_fips186_3_prime (unsigned int pbits, unsigned int qbits,
   /* Step 12:  Save p, q, counter and seed.  */
   log_debug ("fips186-3 pbits p=%u q=%u counter=%d\n",
              mpi_get_nbits (prime_p), mpi_get_nbits (prime_q), counter);
-  log_printhex("fips186-3 seed:", seed, seedlen);
-  log_mpidump ("fips186-3 prime p", prime_p);
-  log_mpidump ("fips186-3 prime q", prime_q);
+  log_printhex ("fips186-3 seed", seed, seedlen);
+  log_printmpi ("fips186-3    p", prime_p);
+  log_printmpi ("fips186-3    q", prime_q);
   if (r_q)
     {
       *r_q = prime_q;
@@ -1859,4 +1862,3 @@ _gcry_generate_fips186_3_prime (unsigned int pbits, unsigned int qbits,
   gcry_mpi_release (val_2);
   return ec;
 }
-