/* * DSA * (C) 1999-2010 Jack Lloyd * * Botan is released under the Simplified BSD License (see license.txt) */ #ifndef BOTAN_DSA_H__ #define BOTAN_DSA_H__ #include namespace Botan { /** * DSA Public Key */ class BOTAN_DLL DSA_PublicKey : public virtual DL_Scheme_PublicKey { public: std::string algo_name() const override { return "DSA"; } DL_Group::Format group_format() const override { return DL_Group::ANSI_X9_57; } size_t message_parts() const override { return 2; } size_t message_part_size() const override { return group_q().bytes(); } size_t max_input_bits() const override { return group_q().bits(); } DSA_PublicKey(const AlgorithmIdentifier& alg_id, const secure_vector& key_bits) : DL_Scheme_PublicKey(alg_id, key_bits, DL_Group::ANSI_X9_57) { } DSA_PublicKey(const DL_Group& group, const BigInt& y); std::unique_ptr create_verification_op(RandomNumberGenerator& rng, const std::string& params, const std::string& provider) const override; protected: DSA_PublicKey() {} }; /** * DSA Private Key */ class BOTAN_DLL DSA_PrivateKey : public DSA_PublicKey, public virtual DL_Scheme_PrivateKey { public: DSA_PrivateKey(const AlgorithmIdentifier& alg_id, const secure_vector& key_bits, RandomNumberGenerator& rng); DSA_PrivateKey(RandomNumberGenerator& rng, const DL_Group& group, const BigInt& private_key = 0); bool check_key(RandomNumberGenerator& rng, bool strong) const override; std::unique_ptr create_signature_op(RandomNumberGenerator& rng, const std::string& params, const std::string& provider) const; }; } #endif