Botan  2.4.0
Crypto and TLS for C++11
ecgdsa.h
Go to the documentation of this file.
1 /*
2 * ECGDSA (BSI-TR-03111, version 2.0)
3 * (C) 2016 RenĂ© Korthaus
4 *
5 * Botan is released under the Simplified BSD License (see license.txt)
6 */
7 
8 #ifndef BOTAN_ECGDSA_KEY_H_
9 #define BOTAN_ECGDSA_KEY_H_
10 
11 #include <botan/ecc_key.h>
12 
13 namespace Botan {
14 
15 /**
16 * This class represents ECGDSA public keys.
17 */
18 class BOTAN_PUBLIC_API(2,0) ECGDSA_PublicKey : public virtual EC_PublicKey
19  {
20  public:
21 
22  /**
23  * Construct a public key from a given public point.
24  * @param dom_par the domain parameters associated with this key
25  * @param public_point the public point defining this key
26  */
27  ECGDSA_PublicKey(const EC_Group& dom_par,
28  const PointGFp& public_point) :
29  EC_PublicKey(dom_par, public_point) {}
30 
31  /**
32  * Load a public key.
33  * @param alg_id the X.509 algorithm identifier
34  * @param key_bits DER encoded public key bits
35  */
37  const std::vector<uint8_t>& key_bits) :
38  EC_PublicKey(alg_id, key_bits) {}
39 
40  /**
41  * Get this keys algorithm name.
42  * @result this keys algorithm name ("ECGDSA")
43  */
44  std::string algo_name() const override { return "ECGDSA"; }
45 
46  size_t message_parts() const override { return 2; }
47 
48  size_t message_part_size() const override
49  { return domain().get_order().bytes(); }
50 
51  std::unique_ptr<PK_Ops::Verification>
52  create_verification_op(const std::string& params,
53  const std::string& provider) const override;
54  protected:
55  ECGDSA_PublicKey() = default;
56  };
57 
58 /**
59 * This class represents ECGDSA private keys.
60 */
62  public EC_PrivateKey
63  {
64  public:
65 
66  /**
67  * Load a private key.
68  * @param alg_id the X.509 algorithm identifier
69  * @param key_bits ECPrivateKey bits
70  */
72  const secure_vector<uint8_t>& key_bits) :
73  EC_PrivateKey(alg_id, key_bits, true) {}
74 
75  /**
76  * Generate a new private key.
77  * @param rng a random number generator
78  * @param domain parameters to used for this key
79  * @param x the private key (if zero, generate a new random key)
80  */
82  const EC_Group& domain,
83  const BigInt& x = 0) :
84  EC_PrivateKey(rng, domain, x, true) {}
85 
86  bool check_key(RandomNumberGenerator& rng, bool) const override;
87 
88  std::unique_ptr<PK_Ops::Signature>
89  create_signature_op(RandomNumberGenerator& rng,
90  const std::string& params,
91  const std::string& provider) const override;
92  };
93 
94 }
95 
96 #endif
std::string algo_name() const override
Definition: ecgdsa.h:44
ECGDSA_PrivateKey(const AlgorithmIdentifier &alg_id, const secure_vector< uint8_t > &key_bits)
Definition: ecgdsa.h:71
#define BOTAN_PUBLIC_API(maj, min)
Definition: compiler.h:27
size_t message_parts() const override
Definition: ecgdsa.h:46
ECGDSA_PublicKey(const AlgorithmIdentifier &alg_id, const std::vector< uint8_t > &key_bits)
Definition: ecgdsa.h:36
ECGDSA_PublicKey(const EC_Group &dom_par, const PointGFp &public_point)
Definition: ecgdsa.h:27
ECGDSA_PrivateKey(RandomNumberGenerator &rng, const EC_Group &domain, const BigInt &x=0)
Definition: ecgdsa.h:81
Definition: alg_id.cpp:13
std::vector< T, secure_allocator< T > > secure_vector
Definition: secmem.h:88
size_t message_part_size() const override
Definition: ecgdsa.h:48