Botan 3.4.0
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 std::unique_ptr<Private_Key> generate_another(RandomNumberGenerator& rng) const final;
56
57 protected:
58 ECDH_PublicKey() = default;
59};
60
61/**
62* This class represents ECDH Private Keys.
63*/
64
67
69 public EC_PrivateKey,
71 public:
72 /**
73 * Load a private key.
74 * @param alg_id the X.509 algorithm identifier
75 * @param key_bits ECPrivateKey bits
76 */
77 ECDH_PrivateKey(const AlgorithmIdentifier& alg_id, std::span<const uint8_t> key_bits) :
78 EC_PrivateKey(alg_id, key_bits) {}
79
80 /**
81 * Generate a new private key
82 * @param rng a random number generator
83 * @param domain parameters to used for this key
84 * @param x the private key; if zero, a new random key is generated
85 */
86 ECDH_PrivateKey(RandomNumberGenerator& rng, const EC_Group& domain, const BigInt& x = BigInt::zero()) :
87 EC_PrivateKey(rng, domain, x) {}
88
89 std::unique_ptr<Public_Key> public_key() const override;
90
91 std::vector<uint8_t> public_value() const override {
92 return ECDH_PublicKey::public_value(EC_Point_Format::Uncompressed);
93 }
94
95 std::vector<uint8_t> public_value(EC_Point_Format type) const { return ECDH_PublicKey::public_value(type); }
96
97 std::unique_ptr<PK_Ops::Key_Agreement> create_key_agreement_op(RandomNumberGenerator& rng,
98 std::string_view params,
99 std::string_view provider) const override;
100};
101
103
104} // namespace Botan
105
106#endif
ECDH_PrivateKey(RandomNumberGenerator &rng, const EC_Group &domain, const BigInt &x=BigInt::zero())
Definition ecdh.h:86
std::vector< uint8_t > public_value() const override
Definition ecdh.h:91
std::vector< uint8_t > public_value(EC_Point_Format type) const
Definition ecdh.h:95
ECDH_PrivateKey(const AlgorithmIdentifier &alg_id, std::span< const uint8_t > key_bits)
Definition ecdh.h:77
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:191
#define BOTAN_DIAGNOSTIC_PUSH
Definition compiler.h:188
#define BOTAN_DIAGNOSTIC_IGNORE_INHERITED_VIA_DOMINANCE
Definition compiler.h:190
#define BOTAN_PUBLIC_API(maj, min)
Definition compiler.h:31
PublicKeyOperation
Definition pk_keys.h:45
EC_Point_Format
Definition ec_point.h:19