Botan 3.1.1
Crypto and TLS for C&
ecdh.h
Go to the documentation of this file.
1/*
2* ECDH
3* (C) 2007 Falko Strenzke, FlexSecure GmbH
4* Manuel Hartl, FlexSecure GmbH
5* (C) 2008-2010 Jack Lloyd
6*
7* Botan is released under the Simplified BSD License (see license.txt)
8*/
9
10#ifndef BOTAN_ECDH_KEY_H_
11#define BOTAN_ECDH_KEY_H_
12
13#include <botan/ecc_key.h>
14
15namespace Botan {
16
17/**
18* This class represents ECDH Public Keys.
19*/
20class BOTAN_PUBLIC_API(2, 0) ECDH_PublicKey : public virtual EC_PublicKey {
21 public:
22 /**
23 * Create an ECDH public key.
24 * @param alg_id algorithm identifier
25 * @param key_bits DER encoded public key bits
26 */
27 ECDH_PublicKey(const AlgorithmIdentifier& alg_id, std::span<const uint8_t> key_bits) :
28 EC_PublicKey(alg_id, key_bits) {}
29
30 /**
31 * Construct a public key from a given public point.
32 * @param dom_par the domain parameters associated with this key
33 * @param public_point the public point defining this key
34 */
35 ECDH_PublicKey(const EC_Group& dom_par, const EC_Point& public_point) : EC_PublicKey(dom_par, public_point) {}
36
37 /**
38 * Get this keys algorithm name.
39 * @return this keys algorithm name
40 */
41 std::string algo_name() const override { return "ECDH"; }
42
43 /**
44 * @return public point value
45 */
46 std::vector<uint8_t> public_value() const { return public_point().encode(EC_Point_Format::Uncompressed); }
47
48 /**
49 * @return public point value
50 */
51 std::vector<uint8_t> public_value(EC_Point_Format format) const { return public_point().encode(format); }
52
53 bool supports_operation(PublicKeyOperation op) const override { return (op == PublicKeyOperation::KeyAgreement); }
54
55 protected:
56 ECDH_PublicKey() = default;
57};
58
59/**
60* This class represents ECDH Private Keys.
61*/
62
65
67 public EC_PrivateKey,
69 public:
70 /**
71 * Load a private key.
72 * @param alg_id the X.509 algorithm identifier
73 * @param key_bits ECPrivateKey bits
74 */
75 ECDH_PrivateKey(const AlgorithmIdentifier& alg_id, std::span<const uint8_t> key_bits) :
76 EC_PrivateKey(alg_id, key_bits) {}
77
78 /**
79 * Generate a new private key
80 * @param rng a random number generator
81 * @param domain parameters to used for this key
82 * @param x the private key; if zero, a new random key is generated
83 */
84 ECDH_PrivateKey(RandomNumberGenerator& rng, const EC_Group& domain, const BigInt& x = BigInt::zero()) :
85 EC_PrivateKey(rng, domain, x) {}
86
87 std::unique_ptr<Public_Key> public_key() const override;
88
89 std::vector<uint8_t> public_value() const override {
90 return ECDH_PublicKey::public_value(EC_Point_Format::Uncompressed);
91 }
92
93 std::vector<uint8_t> public_value(EC_Point_Format type) const { return ECDH_PublicKey::public_value(type); }
94
95 std::unique_ptr<PK_Ops::Key_Agreement> create_key_agreement_op(RandomNumberGenerator& rng,
96 std::string_view params,
97 std::string_view provider) const override;
98};
99
101
102} // namespace Botan
103
104#endif
ECDH_PrivateKey(RandomNumberGenerator &rng, const EC_Group &domain, const BigInt &x=BigInt::zero())
Definition: ecdh.h:84
std::vector< uint8_t > public_value() const override
Definition: ecdh.h:89
std::vector< uint8_t > public_value(EC_Point_Format type) const
Definition: ecdh.h:93
ECDH_PrivateKey(const AlgorithmIdentifier &alg_id, std::span< const uint8_t > key_bits)
Definition: ecdh.h:75
bool supports_operation(PublicKeyOperation op) const override
Definition: ecdh.h:53
std::vector< uint8_t > public_value() const
Definition: ecdh.h:46
ECDH_PublicKey(const AlgorithmIdentifier &alg_id, std::span< const uint8_t > key_bits)
Definition: ecdh.h:27
std::string algo_name() const override
Definition: ecdh.h:41
std::vector< uint8_t > public_value(EC_Point_Format format) const
Definition: ecdh.h:51
ECDH_PublicKey(const EC_Group &dom_par, const EC_Point &public_point)
Definition: ecdh.h:35
int(* final)(unsigned char *, CTX *)
#define BOTAN_DIAGNOSTIC_POP
Definition: compiler.h:196
#define BOTAN_DIAGNOSTIC_PUSH
Definition: compiler.h:193
#define BOTAN_DIAGNOSTIC_IGNORE_INHERITED_VIA_DOMINANCE
Definition: compiler.h:195
#define BOTAN_PUBLIC_API(maj, min)
Definition: compiler.h:20
Definition: alg_id.cpp:13
PublicKeyOperation
Definition: pk_keys.h:43
EC_Point_Format
Definition: ec_point.h:19