Coverage Report

Created: 2021-04-07 06:07

/src/botan/build/include/botan/curve25519.h
Line
Count
Source (jump to first uncovered line)
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
13
namespace Botan {
14
15
class BOTAN_PUBLIC_API(2,0) Curve25519_PublicKey : public virtual Public_Key
16
   {
17
   public:
18
37
      std::string algo_name() const override { return "Curve25519"; }
19
20
0
      size_t estimated_strength() const override { return 128; }
21
22
0
      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
592
      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
      */
37
      Curve25519_PublicKey(const AlgorithmIdentifier& alg_id,
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
0
      explicit Curve25519_PublicKey(const std::vector<uint8_t>& pub) : m_public(pub) {}
Unexecuted instantiation: Botan::Curve25519_PublicKey::Curve25519_PublicKey(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > const&)
Unexecuted instantiation: Botan::Curve25519_PublicKey::Curve25519_PublicKey(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > const&)
45
46
      /**
47
      * Create a Curve25519 Public Key.
48
      * @param pub 32-byte raw public key
49
      */
50
      explicit Curve25519_PublicKey(const secure_vector<uint8_t>& pub) :
51
0
         m_public(pub.begin(), pub.end()) {}
52
53
   protected:
54
588
      Curve25519_PublicKey() = default;
55
      std::vector<uint8_t> m_public;
56
   };
57
58
class BOTAN_PUBLIC_API(2,0) Curve25519_PrivateKey final : public Curve25519_PublicKey,
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
      */
68
      Curve25519_PrivateKey(const AlgorithmIdentifier& alg_id,
69
                            const secure_vector<uint8_t>& key_bits);
70
71
      /**
72
      * Generate a private key.
73
      * @param rng the RNG to use
74
      */
75
      explicit Curve25519_PrivateKey(RandomNumberGenerator& rng);
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
592
      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
0
      const secure_vector<uint8_t>& get_x() const { return m_private; }
88
89
      secure_vector<uint8_t> private_key_bits() const override;
90
91
      std::unique_ptr<Public_Key> public_key() const override;
92
93
      bool check_key(RandomNumberGenerator& rng, bool strong) const override;
94
95
      std::unique_ptr<PK_Ops::Key_Agreement>
96
         create_key_agreement_op(RandomNumberGenerator& rng,
97
                                 const std::string& params,
98
                                 const std::string& provider) const override;
99
100
   private:
101
      secure_vector<uint8_t> m_private;
102
   };
103
104
typedef Curve25519_PublicKey X25519_PublicKey;
105
typedef Curve25519_PrivateKey X25519_PrivateKey;
106
107
/*
108
* The types above are just wrappers for curve25519_donna, plus defining
109
* encodings for public and private keys.
110
*/
111
void BOTAN_PUBLIC_API(2,0) curve25519_donna(uint8_t mypublic[32],
112
                                const uint8_t secret[32],
113
                                const uint8_t basepoint[32]);
114
115
/**
116
* Exponentiate by the x25519 base point
117
* @param mypublic output value
118
* @param secret random scalar
119
*/
120
void BOTAN_PUBLIC_API(2,0) curve25519_basepoint(uint8_t mypublic[32],
121
                                    const uint8_t secret[32]);
122
123
}
124
125
#endif