Botan 3.9.0
Crypto and TLS for C&
pk_ops_impl.h
Go to the documentation of this file.
1
2/*
3* (C) 2015 Jack Lloyd
4*
5* Botan is released under the Simplified BSD License (see license.txt)
6*/
7
8#ifndef BOTAN_PK_OPERATION_IMPL_H_
9#define BOTAN_PK_OPERATION_IMPL_H_
10
11#include <botan/pk_ops.h>
12
13namespace Botan {
14
15class HashFunction;
16class KDF;
17class EME;
18
19} // namespace Botan
20
21namespace Botan::PK_Ops {
22
23// NOLINTBEGIN(*-special-member-functions)
24
26 public:
28
29 size_t max_input_bits() const override;
30
31 std::vector<uint8_t> encrypt(std::span<const uint8_t> ptext, RandomNumberGenerator& rng) override;
32
33 protected:
34 explicit Encryption_with_EME(std::string_view eme);
35
36 private:
37 virtual size_t max_ptext_input_bits() const = 0;
38
39 virtual std::vector<uint8_t> raw_encrypt(std::span<const uint8_t> msg, RandomNumberGenerator& rng) = 0;
40 std::unique_ptr<EME> m_eme;
41};
42
44 public:
46
47 secure_vector<uint8_t> decrypt(uint8_t& valid_mask, std::span<const uint8_t> ctext) override;
48
49 protected:
50 explicit Decryption_with_EME(std::string_view eme);
51
52 private:
53 virtual secure_vector<uint8_t> raw_decrypt(std::span<const uint8_t> ctext) = 0;
54 std::unique_ptr<EME> m_eme;
55};
56
58 public:
60
61 void update(std::span<const uint8_t> input) override;
62 bool is_valid_signature(std::span<const uint8_t> sig) override;
63
64 std::string hash_function() const final;
65
66 protected:
67 explicit Verification_with_Hash(std::string_view hash);
68
69 explicit Verification_with_Hash(const AlgorithmIdentifier& alg_id,
70 std::string_view pk_algo,
71 bool allow_null_parameters = false);
72
73 /**
74 * Perform a signature check operation
75 * @param msg the message
76 * @param sig the signature
77 * @returns if sig is a valid signature for msg
78 */
79 virtual bool verify(std::span<const uint8_t> msg, std::span<const uint8_t> sig) = 0;
80
81 private:
82 std::unique_ptr<HashFunction> m_hash;
83};
84
86 public:
87 void update(std::span<const uint8_t> input) override;
88
89 std::vector<uint8_t> sign(RandomNumberGenerator& rng) override;
90
92
93 protected:
94 explicit Signature_with_Hash(std::string_view hash);
95
96 std::string hash_function() const final;
97
98#if defined(BOTAN_HAS_RFC6979_GENERATOR)
99 std::string rfc6979_hash_function() const;
100#endif
101
102 private:
103 virtual std::vector<uint8_t> raw_sign(std::span<const uint8_t> input, RandomNumberGenerator& rng) = 0;
104
105 std::unique_ptr<HashFunction> m_hash;
106};
107
109 public:
110 secure_vector<uint8_t> agree(size_t key_len,
111 std::span<const uint8_t> other_key,
112 std::span<const uint8_t> salt) override;
113
115
116 protected:
117 explicit Key_Agreement_with_KDF(std::string_view kdf);
118
119 private:
120 virtual secure_vector<uint8_t> raw_agree(const uint8_t w[], size_t w_len) = 0;
121 std::unique_ptr<KDF> m_kdf;
122};
123
125 public:
126 void kem_encrypt(std::span<uint8_t> out_encapsulated_key,
127 std::span<uint8_t> out_shared_key,
129 size_t desired_shared_key_len,
130 std::span<const uint8_t> salt) final;
131
132 size_t shared_key_length(size_t desired_shared_key_len) const final;
133
135
136 protected:
137 virtual void raw_kem_encrypt(std::span<uint8_t> out_encapsulated_key,
138 std::span<uint8_t> out_raw_shared_key,
139 RandomNumberGenerator& rng) = 0;
140
141 virtual size_t raw_kem_shared_key_length() const = 0;
142
143 explicit KEM_Encryption_with_KDF(std::string_view kdf);
144
145 private:
146 std::unique_ptr<KDF> m_kdf;
147};
148
150 public:
151 void kem_decrypt(std::span<uint8_t> out_shared_key,
152 std::span<const uint8_t> encapsulated_key,
153 size_t desired_shared_key_len,
154 std::span<const uint8_t> salt) final;
155
156 size_t shared_key_length(size_t desired_shared_key_len) const final;
157
159
160 protected:
161 virtual void raw_kem_decrypt(std::span<uint8_t> out_raw_shared_key,
162 std::span<const uint8_t> encapsulated_key) = 0;
163
164 virtual size_t raw_kem_shared_key_length() const = 0;
165
166 explicit KEM_Decryption_with_KDF(std::string_view kdf);
167
168 private:
169 std::unique_ptr<KDF> m_kdf;
170};
171
172// NOLINTEND(*-special-member-functions)
173
174} // namespace Botan::PK_Ops
175
176#endif
Decryption_with_EME(std::string_view eme)
Definition pk_ops.cpp:47
secure_vector< uint8_t > decrypt(uint8_t &valid_mask, std::span< const uint8_t > ctext) override
Definition pk_ops.cpp:51
std::vector< uint8_t > encrypt(std::span< const uint8_t > ptext, RandomNumberGenerator &rng) override
Definition pk_ops.cpp:37
size_t max_input_bits() const override
Definition pk_ops.cpp:33
Encryption_with_EME(std::string_view eme)
Definition pk_ops.cpp:29
void kem_decrypt(std::span< uint8_t > out_shared_key, std::span< const uint8_t > encapsulated_key, size_t desired_shared_key_len, std::span< const uint8_t > salt) final
Definition pk_ops.cpp:243
KEM_Decryption_with_KDF(std::string_view kdf)
Definition pk_ops.cpp:262
virtual void raw_kem_decrypt(std::span< uint8_t > out_raw_shared_key, std::span< const uint8_t > encapsulated_key)=0
size_t shared_key_length(size_t desired_shared_key_len) const final
Definition pk_ops.cpp:235
virtual size_t raw_kem_shared_key_length() const =0
void kem_encrypt(std::span< uint8_t > out_encapsulated_key, std::span< uint8_t > out_shared_key, RandomNumberGenerator &rng, size_t desired_shared_key_len, std::span< const uint8_t > salt) final
Definition pk_ops.cpp:206
virtual size_t raw_kem_shared_key_length() const =0
size_t shared_key_length(size_t desired_shared_key_len) const final
Definition pk_ops.cpp:198
virtual void raw_kem_encrypt(std::span< uint8_t > out_encapsulated_key, std::span< uint8_t > out_raw_shared_key, RandomNumberGenerator &rng)=0
KEM_Encryption_with_KDF(std::string_view kdf)
Definition pk_ops.cpp:227
Key_Agreement_with_KDF(std::string_view kdf)
Definition pk_ops.cpp:73
secure_vector< uint8_t > agree(size_t key_len, std::span< const uint8_t > other_key, std::span< const uint8_t > salt) override
Definition pk_ops.cpp:81
std::vector< uint8_t > sign(RandomNumberGenerator &rng) override
Definition pk_ops.cpp:152
Signature_with_Hash(std::string_view hash)
Definition pk_ops.cpp:129
std::string hash_function() const final
Definition pk_ops.cpp:162
void update(std::span< const uint8_t > input) override
Definition pk_ops.cpp:189
virtual bool verify(std::span< const uint8_t > msg, std::span< const uint8_t > sig)=0
Verification_with_Hash(std::string_view hash)
Definition pk_ops.cpp:157
bool is_valid_signature(std::span< const uint8_t > sig) override
Definition pk_ops.cpp:193
std::vector< T, secure_allocator< T > > secure_vector
Definition secmem.h:69