8 #include <botan/numthry.h>
9 #include <botan/parsing.h>
18 size_t bits,
const BigInt& coprime,
19 size_t equiv,
size_t modulo)
33 if(modulo % 2 == 1 || modulo == 0)
35 if(equiv >= modulo || equiv % 2 == 0)
47 if(p % modulo != equiv)
48 p += (modulo - p % modulo) + equiv;
53 for(
size_t j = 0; j != sieve.
size(); ++j)
59 if(counter == 4096 || p.
bits() > bits)
62 bool passes_sieve =
true;
69 for(
size_t j = 0; j != sieve.
size(); ++j)
71 sieve[j] = (sieve[j] + modulo) %
PRIMES[j];
76 if(!passes_sieve ||
gcd(p - 1, coprime) != 1)
const size_t PRIME_TABLE_SIZE
BigInt gcd(const BigInt &a, const BigInt &b)
std::invalid_argument Invalid_Argument
RandomNumberGenerator * rng
BigInt random_safe_prime(RandomNumberGenerator &rng, size_t bits)
std::string to_string(u64bit n, size_t min_len)
const u16bit BOTAN_DLL PRIMES[]
BigInt random_prime(RandomNumberGenerator &rng, size_t bits, const BigInt &coprime, size_t equiv, size_t modulo)
bool check_prime(const BigInt &n, RandomNumberGenerator &rng)