9 #include <botan/numthry.h>
10 #include <botan/keypair.h>
71 powermod_g_p(dsa.group_g(), dsa.group_p()),
85 while(r == 0 ||
s == 0)
92 r = mod_q.
reduce(powermod_g_p(k));
98 s.binary_encode(&output[output.size() -
s.bytes()]);
103 q(dsa.group_q()), y(dsa.get_y())
112 const byte sig[],
size_t sig_len)
116 if(sig_len != 2*q.
bytes() || msg_len > q.
bytes())
123 if(r <= 0 || r >= q || s <= 0 || s >= q)
void load_check(RandomNumberGenerator &rng) const
void binary_encode(byte buf[]) const
bool signature_consistency_check(RandomNumberGenerator &rng, const Private_Key &key, const std::string &padding)
virtual void add_entropy(const byte in[], size_t length)=0
const BigInt & group_q() const
const BigInt & group_p() const
static BigInt random_integer(RandomNumberGenerator &rng, const BigInt &min, const BigInt &max)
bool check_key(RandomNumberGenerator &rng, bool) const
DSA_Verification_Operation(const DSA_PublicKey &dsa)
bool verify(const byte msg[], size_t msg_len, const byte sig[], size_t sig_len)
RandomNumberGenerator * rng
void randomize(RandomNumberGenerator &rng, size_t bitsize=0)
BigInt multiply(const BigInt &x, const BigInt &y) const
BigInt reduce(const BigInt &x) const
SecureVector< byte > sign(const byte msg[], size_t msg_len, RandomNumberGenerator &rng)
DSA_Signature_Operation(const DSA_PrivateKey &dsa)
BigInt inverse_mod(const BigInt &n, const BigInt &mod)
BigInt power_mod(const BigInt &base, const BigInt &exp, const BigInt &mod)
const BigInt & group_g() const
bool check_key(RandomNumberGenerator &rng, bool strong) const
void gen_check(RandomNumberGenerator &rng) const
DSA_PrivateKey(const AlgorithmIdentifier &alg_id, const MemoryRegion< byte > &key_bits, RandomNumberGenerator &rng)
const BigInt & get_modulus() const
BigInt mul_add(const BigInt &a, const BigInt &b, const BigInt &c)