Botan  1.11.34
Crypto and TLS for C++11
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 
15 namespace Botan {
16 
17 /**
18 * This class represents ECDH Public Keys.
19 */
20 class BOTAN_DLL 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 secure_vector<byte>& 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<byte> public_value() const
51  { return unlock(EC2OSP(public_point(), PointGFp::UNCOMPRESSED)); }
52 
53  /**
54  * @return public point value
55  */
56  std::vector<byte> public_value(PointGFp::Compression_Type type) const
57  { return unlock(EC2OSP(public_point(), type)); }
58 
59  protected:
61  };
62 
63 /**
64 * This class represents ECDH Private Keys.
65 */
66 class BOTAN_DLL ECDH_PrivateKey : public ECDH_PublicKey,
67  public EC_PrivateKey,
69  {
70  public:
71 
72  /**
73  * Create an ECDH public key.
74  * @param alg_id the X.509 algorithm identifier
75  * @param key_bits X.509 subject public key info structure
76  */
78  const secure_vector<byte>& 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<byte> public_value() const override
94 
95  std::vector<byte> public_value(PointGFp::Compression_Type type) const
96  { return ECDH_PublicKey::public_value(type); }
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(const AlgorithmIdentifier &alg_id, const secure_vector< byte > &key_bits)
Definition: ecdh.h:77
std::vector< byte > public_value() const override
Definition: ecdh.h:92
secure_vector< byte > EC2OSP(const PointGFp &point, byte format)
Definition: point_gfp.cpp:516
MechanismType type
std::vector< T, secure_allocator< T >> secure_vector
Definition: secmem.h:113
ECDH_PublicKey(const AlgorithmIdentifier &alg_id, const secure_vector< byte > &key_bits)
Definition: ecdh.h:28
Definition: alg_id.cpp:13
std::vector< byte > public_value() const
Definition: ecdh.h:50
std::vector< byte > public_value(PointGFp::Compression_Type type) const
Definition: ecdh.h:95
ECDH_PrivateKey(RandomNumberGenerator &rng, const EC_Group &domain, const BigInt &x=0)
Definition: ecdh.h:87
ECDH_PublicKey(const EC_Group &dom_par, const PointGFp &public_point)
Definition: ecdh.h:37
std::string algo_name() const override
Definition: ecdh.h:45
std::vector< byte > public_value(PointGFp::Compression_Type type) const
Definition: ecdh.h:56
std::vector< T > unlock(const secure_vector< T > &in)
Definition: secmem.h:117