Botan 2.19.1
Crypto and TLS for C&
curve25519.h
Go to the documentation of this file.
1/*
2* Curve25519
3* (C) 2014 Jack Lloyd
4*
5* Botan is released under the Simplified BSD License (see license.txt)
6*/
7
8#ifndef BOTAN_CURVE_25519_H_
9#define BOTAN_CURVE_25519_H_
10
11#include <botan/pk_keys.h>
12
13namespace Botan {
14
16 {
17 public:
18 std::string algo_name() const override { return "Curve25519"; }
19
20 size_t estimated_strength() const override { return 128; }
21
22 size_t key_length() const override { return 255; }
23
24 bool check_key(RandomNumberGenerator& rng, bool strong) const override;
25
26 AlgorithmIdentifier algorithm_identifier() const override;
27
28 std::vector<uint8_t> public_key_bits() const override;
29
30 std::vector<uint8_t> public_value() const { return m_public; }
31
32 /**
33 * Create a Curve25519 Public Key.
34 * @param alg_id the X.509 algorithm identifier
35 * @param key_bits DER encoded public key bits
36 */
38 const std::vector<uint8_t>& key_bits);
39
40 /**
41 * Create a Curve25519 Public Key.
42 * @param pub 32-byte raw public key
43 */
44 explicit Curve25519_PublicKey(const std::vector<uint8_t>& pub) : m_public(pub) {}
45
46 /**
47 * Create a Curve25519 Public Key.
48 * @param pub 32-byte raw public key
49 */
51 m_public(pub.begin(), pub.end()) {}
52
53 protected:
55 std::vector<uint8_t> m_public;
56 };
57
59 public virtual Private_Key,
60 public virtual PK_Key_Agreement_Key
61 {
62 public:
63 /**
64 * Construct a private key from the specified parameters.
65 * @param alg_id the X.509 algorithm identifier
66 * @param key_bits PKCS #8 structure
67 */
69 const secure_vector<uint8_t>& key_bits);
70
71 /**
72 * Generate a private key.
73 * @param rng the RNG to use
74 */
76
77 /**
78 * Construct a private key from the specified parameters.
79 * @param secret_key the private key
80 */
81 explicit Curve25519_PrivateKey(const secure_vector<uint8_t>& secret_key);
82
83 std::vector<uint8_t> public_value() const override { return Curve25519_PublicKey::public_value(); }
84
85 secure_vector<uint8_t> agree(const uint8_t w[], size_t w_len) const;
86
87 const secure_vector<uint8_t>& get_x() const { return m_private; }
88
89 secure_vector<uint8_t> private_key_bits() const override;
90
91 bool check_key(RandomNumberGenerator& rng, bool strong) const override;
92
93 std::unique_ptr<PK_Ops::Key_Agreement>
94 create_key_agreement_op(RandomNumberGenerator& rng,
95 const std::string& params,
96 const std::string& provider) const override;
97
98 private:
99 secure_vector<uint8_t> m_private;
100 };
101
104
105/*
106* The types above are just wrappers for curve25519_donna, plus defining
107* encodings for public and private keys.
108*/
109void BOTAN_PUBLIC_API(2,0) curve25519_donna(uint8_t mypublic[32],
110 const uint8_t secret[32],
111 const uint8_t basepoint[32]);
112
113/**
114* Exponentiate by the x25519 base point
115* @param mypublic output value
116* @param secret random scalar
117*/
118void BOTAN_PUBLIC_API(2,0) curve25519_basepoint(uint8_t mypublic[32],
119 const uint8_t secret[32]);
120
121}
122
123#endif
std::vector< uint8_t > public_value() const override
Definition: curve25519.h:83
const secure_vector< uint8_t > & get_x() const
Definition: curve25519.h:87
Curve25519_PublicKey(const std::vector< uint8_t > &pub)
Definition: curve25519.h:44
std::vector< uint8_t > m_public
Definition: curve25519.h:55
std::vector< uint8_t > public_value() const
Definition: curve25519.h:30
size_t key_length() const override
Definition: curve25519.h:22
std::string algo_name() const override
Definition: curve25519.h:18
size_t estimated_strength() const override
Definition: curve25519.h:20
Curve25519_PublicKey(const secure_vector< uint8_t > &pub)
Definition: curve25519.h:50
int(* final)(unsigned char *, CTX *)
#define BOTAN_PUBLIC_API(maj, min)
Definition: compiler.h:31
Definition: alg_id.cpp:13
Curve25519_PrivateKey X25519_PrivateKey
Definition: curve25519.h:103
void curve25519_donna(uint8_t mypublic[32], const uint8_t secret[32], const uint8_t basepoint[32])
Definition: donna.cpp:440
Curve25519_PublicKey X25519_PublicKey
Definition: curve25519.h:102
void curve25519_basepoint(uint8_t mypublic[32], const uint8_t secret[32])
Definition: curve25519.cpp:16
std::vector< T, secure_allocator< T > > secure_vector
Definition: secmem.h:65