The unified diff between revisions [92f17752..] and [4e40e885..] is displayed below. It can also be downloaded as a raw diff.

This diff has been restricted to the following files: 'src/make_prm.cpp'

#
#
# patch "src/make_prm.cpp"
#  from [4ef12c2a523d27ad2c7602374ed7aac7d0de36ef]
#    to [67084166fa8d39268b1743f5d5f1231d4265f427]
#
============================================================
--- src/make_prm.cpp	4ef12c2a523d27ad2c7602374ed7aac7d0de36ef
+++ src/make_prm.cpp	67084166fa8d39268b1743f5d5f1231d4265f427
@@ -1,111 +1,16 @@
 /*************************************************
 * Prime Generation Source File                   *
-* (C) 1999-2006 The Botan Project                *
+* (C) 1999-2007 Jack Lloyd                       *
 *************************************************/

 #include <botan/numthry.h>
-#include <botan/libstate.h>
-#include <botan/lookup.h>
-#include <botan/bit_ops.h>
 #include <botan/parsing.h>
-#include <botan/rng.h>
+#include <botan/libstate.h>
 #include <algorithm>
-#include <memory>

 namespace Botan {

-namespace {
-
 /*************************************************
-* Increment the seed by one                      *
-*************************************************/
-void increment(SecureVector<byte>& seed)
-   {
-   for(u32bit j = seed.size(); j > 0; --j)
-      if(++seed[j-1])
-         break;
-   }
-
-}
-
-/*************************************************
-* Attempt DSA prime generation with given seed   *
-*************************************************/
-bool generate_dsa_primes(BigInt& p, BigInt& q, const byte const_seed[],
-                         u32bit seed_len, u32bit pbits, u32bit counter_start)
-   {
-   if(seed_len < 20)
-      throw Invalid_Argument("DSA prime generation needs a seed "
-                             "at least 160 bits long");
-   if((pbits % 64 != 0) || (pbits > 1024) || (pbits < 512))
-      throw Invalid_Argument("DSA prime generation algorithm does not support "
-                             "prime size " + to_string(pbits));
-
-   std::auto_ptr<HashFunction> sha1(get_hash("SHA-1"));
-
-   SecureVector<byte> seed(const_seed, seed_len);
-
-   SecureVector<byte> qhash = sha1->process(seed);
-   increment(seed);
-   SecureVector<byte> qhash2 = sha1->process(seed);
-   xor_buf(qhash, qhash2, qhash.size());
-
-   qhash[0] |= 0x80;
-   qhash[19] |= 0x01;
-   q.binary_decode(qhash, qhash.size());
-   if(!is_prime(q))
-      return false;
-   global_state().pulse(PRIME_FOUND);
-
-   u32bit n = (pbits-1) / 160, b = (pbits-1) % 160;
-   SecureVector<byte> W(20 * (n+1));
-   BigInt X;
-
-   for(u32bit j = 0; j != counter_start; ++j)
-      for(u32bit k = 0; k != n + 1; ++k)
-         increment(seed);
-
-   for(u32bit j = 0; j != 4096 - counter_start; ++j)
-      {
-      global_state().pulse(PRIME_SEARCHING);
-
-      for(u32bit k = 0; k != n + 1; ++k)
-         {
-         increment(seed);
-         sha1->update(seed);
-         sha1->final(W + 20 * (n-k));
-         }
-      X.binary_decode(W + (20 - 1 - b/8), W.size() - (20 - 1 - b/8));
-      X.set_bit(pbits-1);
-
-      p = X - (X % (2*q) - 1);
-
-      if(p.bits() == pbits && is_prime(p))
-         {
-         global_state().pulse(PRIME_FOUND);
-         return true;
-         }
-      }
-   return false;
-   }
-
-/*************************************************
-* Generate DSA Primes                            *
-*************************************************/
-SecureVector<byte> generate_dsa_primes(BigInt& p, BigInt& q, u32bit pbits)
-   {
-   SecureVector<byte> seed(20);
-
-   while(true)
-      {
-      Global_RNG::randomize(seed, seed.size());
-      global_state().pulse(PRIME_SEARCHING);
-      if(generate_dsa_primes(p, q, seed, seed.size(), pbits))
-         return seed;
-      }
-   }
-
-/*************************************************
 * Generate a random prime                        *
 *************************************************/
 BigInt random_prime(u32bit bits, const BigInt& coprime,
@@ -124,8 +29,6 @@ BigInt random_prime(u32bit bits, const B

    while(true)
       {
-      global_state().pulse(PRIME_SEARCHING);
-
       BigInt p = random_integer(bits);
       p.set_bit(bits - 2);
       p.set_bit(0);
@@ -137,10 +40,7 @@ BigInt random_prime(u32bit bits, const B
       SecureVector<u32bit> sieve(sieve_size);

       for(u32bit j = 0; j != sieve.size(); ++j)
-         {
          sieve[j] = p % PRIMES[j];
-         global_state().pulse(PRIME_SIEVING);
-         }

       u32bit counter = 0;
       while(true)
@@ -148,8 +48,6 @@ BigInt random_prime(u32bit bits, const B
          if(counter == 4096 || p.bits() > bits)
             break;

-         global_state().pulse(PRIME_SEARCHING);
-
          bool passes_sieve = true;
          ++counter;
          p += modulo;
@@ -157,19 +55,14 @@ BigInt random_prime(u32bit bits, const B
          for(u32bit j = 0; j != sieve.size(); ++j)
             {
             sieve[j] = (sieve[j] + modulo) % PRIMES[j];
-            global_state().pulse(PRIME_SIEVING);
             if(sieve[j] == 0)
                passes_sieve = false;
             }

          if(!passes_sieve || gcd(p - 1, coprime) != 1)
             continue;
-         global_state().pulse(PRIME_PASSED_SIEVE);
          if(passes_mr_tests(p))
-            {
-            global_state().pulse(PRIME_FOUND);
             return p;
-            }
          }
       }
    }