10 #include <botan/ecdsa.h>
11 #include <botan/keypair.h>
28 base_point(ecdsa.domain().get_base_point()),
29 order(ecdsa.domain().get_order()),
30 x(ecdsa.private_value()),
45 while(r == 0 ||
s == 0)
61 s.binary_encode(&output[output.size() -
s.bytes()]);
66 base_point(ecdsa.domain().get_base_point()),
67 public_point(ecdsa.public_point()),
68 order(ecdsa.domain().get_order())
73 const byte sig[],
size_t sig_len)
75 if(sig_len != order.
bytes()*2)
81 BigInt s(sig + sig_len / 2, sig_len / 2);
83 if(r <= 0 || r >= order || s <= 0 || s >= order)
void binary_encode(byte buf[]) const
bool signature_consistency_check(RandomNumberGenerator &rng, const Private_Key &key, const std::string &padding)
bool verify(const byte msg[], size_t msg_len, const byte sig[], size_t sig_len)
virtual void add_entropy(const byte in[], size_t length)=0
SecureVector< byte > sign(const byte msg[], size_t msg_len, RandomNumberGenerator &rng)
const PointGFp & public_point() const
BigInt get_affine_x() const
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
BigInt inverse_mod(const BigInt &n, const BigInt &mod)
ECDSA_Signature_Operation(const ECDSA_PrivateKey &ecdsa)
ECDSA_Verification_Operation(const ECDSA_PublicKey &ecdsa)
bool check_key(RandomNumberGenerator &rng, bool) const
PointGFp multi_exponentiate(const PointGFp &p1, const BigInt &z1, const PointGFp &p2, const BigInt &z2)
BigInt mul_add(const BigInt &a, const BigInt &b, const BigInt &c)