Botan 2.19.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 {
22 public:
23 /**
24 * Create an ECDH public key.
25 * @param alg_id algorithm identifier
26 * @param key_bits DER encoded public key bits
27 */
29 const std::vector<uint8_t>& key_bits) :
30 EC_PublicKey(alg_id, key_bits) {}
31
32 /**
33 * Construct a public key from a given public point.
34 * @param dom_par the domain parameters associated with this key
35 * @param public_point the public point defining this key
36 */
37 ECDH_PublicKey(const EC_Group& dom_par,
38 const PointGFp& public_point) :
39 EC_PublicKey(dom_par, public_point) {}
40
41 /**
42 * Get this keys algorithm name.
43 * @return this keys algorithm name
44 */
45 std::string algo_name() const override { return "ECDH"; }
46
47 /**
48 * @return public point value
49 */
50 std::vector<uint8_t> public_value() const
51 { return public_point().encode(PointGFp::UNCOMPRESSED); }
52
53 /**
54 * @return public point value
55 */
56 std::vector<uint8_t> public_value(PointGFp::Compression_Type format) const
57 { return public_point().encode(format); }
58
59 protected:
60 ECDH_PublicKey() = default;
61 };
62
63/**
64* This class represents ECDH Private Keys.
65*/
67 public EC_PrivateKey,
69 {
70 public:
71
72 /**
73 * Load a private key.
74 * @param alg_id the X.509 algorithm identifier
75 * @param key_bits ECPrivateKey bits
76 */
78 const secure_vector<uint8_t>& key_bits) :
79 EC_PrivateKey(alg_id, key_bits) {}
80
81 /**
82 * Generate a new private key
83 * @param rng a random number generator
84 * @param domain parameters to used for this key
85 * @param x the private key; if zero, a new random key is generated
86 */
88 const EC_Group& domain,
89 const BigInt& x = 0) :
90 EC_PrivateKey(rng, domain, x) {}
91
92 std::vector<uint8_t> public_value() const override
94
95 std::vector<uint8_t> public_value(PointGFp::Compression_Type type) const
97
98 std::unique_ptr<PK_Ops::Key_Agreement>
99 create_key_agreement_op(RandomNumberGenerator& rng,
100 const std::string& params,
101 const std::string& provider) const override;
102 };
103
104}
105
106#endif
ECDH_PrivateKey(RandomNumberGenerator &rng, const EC_Group &domain, const BigInt &x=0)
Definition: ecdh.h:87
std::vector< uint8_t > public_value() const override
Definition: ecdh.h:92
std::vector< uint8_t > public_value(PointGFp::Compression_Type type) const
Definition: ecdh.h:95
ECDH_PrivateKey(const AlgorithmIdentifier &alg_id, const secure_vector< uint8_t > &key_bits)
Definition: ecdh.h:77
ECDH_PublicKey(const EC_Group &dom_par, const PointGFp &public_point)
Definition: ecdh.h:37
std::vector< uint8_t > public_value() const
Definition: ecdh.h:50
std::vector< uint8_t > public_value(PointGFp::Compression_Type format) const
Definition: ecdh.h:56
std::string algo_name() const override
Definition: ecdh.h:45
ECDH_PublicKey(const AlgorithmIdentifier &alg_id, const std::vector< uint8_t > &key_bits)
Definition: ecdh.h:28
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
MechanismType type