9#include <botan/numthry.h>
10#include <botan/keypair.h>
77 powermod_g_p(nr.group_g(), nr.group_p()),
102 c = mod_q.reduce(powermod_g_p(k) + f);
103 d = mod_q.reduce(k - x * c);
113 q(nr.group_q()), y(nr.get_y())
124 const BigInt& q = mod_q.get_modulus();
126 if(msg_len != 2*q.bytes())
130 BigInt d(msg + q.bytes(), q.bytes());
132 if(c.
is_zero() || c >= q || d >= q)
135 BigInt i = mod_p.multiply(powermod_g_p(d), powermod_y_p(c));
void binary_encode(byte buf[]) const
static BigInt random_integer(RandomNumberGenerator &rng, const BigInt &min, const BigInt &max)
static SecureVector< byte > encode(const BigInt &n, Base base=Binary)
void randomize(RandomNumberGenerator &rng, size_t bitsize=0)
bool check_key(RandomNumberGenerator &rng, bool) const
DL_Scheme_PrivateKey(const AlgorithmIdentifier &alg_id, const MemoryRegion< byte > &key_bits, DL_Group::Format group_format)
const BigInt & group_p() const
DL_Scheme_PublicKey(const AlgorithmIdentifier &alg_id, const MemoryRegion< byte > &key_bits, DL_Group::Format group_format)
const BigInt & group_q() const
const BigInt & group_g() const
NR_PrivateKey(const AlgorithmIdentifier &alg_id, const MemoryRegion< byte > &key_bits, RandomNumberGenerator &rng)
bool check_key(RandomNumberGenerator &rng, bool strong) const
NR_Signature_Operation(const NR_PrivateKey &nr)
SecureVector< byte > sign(const byte msg[], size_t msg_len, RandomNumberGenerator &rng)
SecureVector< byte > verify_mr(const byte msg[], size_t msg_len)
NR_Verification_Operation(const NR_PublicKey &nr)
void gen_check(RandomNumberGenerator &rng) const
void load_check(RandomNumberGenerator &rng) const
virtual void add_entropy(const byte in[], size_t length)=0
bool signature_consistency_check(RandomNumberGenerator &rng, const Private_Key &key, const std::string &padding)
BigInt power_mod(const BigInt &base, const BigInt &exp, const BigInt &mod)
std::invalid_argument Invalid_Argument