Botan 2.19.1
Crypto and TLS for C&
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
13namespace Botan {
14
15/**
16* This class represents ECGDSA public keys.
17*/
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
ECGDSA_PrivateKey(RandomNumberGenerator &rng, const EC_Group &domain, const BigInt &x=0)
Definition: ecgdsa.h:81
ECGDSA_PrivateKey(const AlgorithmIdentifier &alg_id, const secure_vector< uint8_t > &key_bits)
Definition: ecgdsa.h:71
std::string algo_name() const override
Definition: ecgdsa.h:44
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
size_t message_part_size() const override
Definition: ecgdsa.h:48
ECGDSA_PublicKey(const EC_Group &dom_par, const PointGFp &public_point)
Definition: ecgdsa.h:27
int(* final)(unsigned char *, CTX *)
#define BOTAN_PUBLIC_API(maj, min)
Definition: compiler.h:31
Definition: alg_id.cpp:13
std::vector< T, secure_allocator< T > > secure_vector
Definition: secmem.h:65