8 #include <botan/numthry.h>
9 #include <botan/parsing.h>
18 size_t bits,
const BigInt& coprime,
19 size_t equiv,
size_t modulo)
25 if(modulo % 2 == 1 || modulo == 0)
29 if(equiv >= modulo || equiv % 2 == 0)
62 if(p % modulo != equiv)
63 p += (modulo - p % modulo) + equiv;
68 for(
size_t j = 0; j != sieve.size(); ++j)
69 sieve[j] = static_cast<uint16_t>(p %
PRIMES[j]);
86 bool passes_sieve =
true;
87 for(
size_t j = 0; j != sieve.size(); ++j)
89 sieve[j] = (sieve[j] + modulo) %
PRIMES[j];
100 if(
gcd(p - 1, coprime) != 1)
123 while(!
is_prime(p, rng, 128,
true));
const size_t PRIME_TABLE_SIZE
const uint16_t BOTAN_DLL PRIMES[]
bool is_prime(const BigInt &n, RandomNumberGenerator &rng, size_t prob, bool is_random)
BigInt gcd(const BigInt &a, const BigInt &b)
std::string to_string(const BER_Object &obj)
std::vector< T, secure_allocator< T >> secure_vector
BigInt random_safe_prime(RandomNumberGenerator &rng, size_t bits)
BigInt random_prime(RandomNumberGenerator &rng, size_t bits, const BigInt &coprime, size_t equiv, size_t modulo)