Botan 3.7.1
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
24 public:
26
27 size_t max_input_bits() const override;
28
29 std::vector<uint8_t> encrypt(std::span<const uint8_t> ptext, RandomNumberGenerator& rng) override;
30
31 protected:
32 explicit Encryption_with_EME(std::string_view eme);
33
34 private:
35 virtual size_t max_ptext_input_bits() const = 0;
36
37 virtual std::vector<uint8_t> raw_encrypt(std::span<const uint8_t> msg, RandomNumberGenerator& rng) = 0;
38 std::unique_ptr<EME> m_eme;
39};
40
42 public:
44
45 secure_vector<uint8_t> decrypt(uint8_t& valid_mask, std::span<const uint8_t> ctext) override;
46
47 protected:
48 explicit Decryption_with_EME(std::string_view eme);
49
50 private:
51 virtual secure_vector<uint8_t> raw_decrypt(std::span<const uint8_t> ctext) = 0;
52 std::unique_ptr<EME> m_eme;
53};
54
56 public:
58
59 void update(std::span<const uint8_t> input) override;
60 bool is_valid_signature(std::span<const uint8_t> sig) override;
61
62 std::string hash_function() const final;
63
64 protected:
65 explicit Verification_with_Hash(std::string_view hash);
66
67 explicit Verification_with_Hash(const AlgorithmIdentifier& alg_id,
68 std::string_view pk_algo,
69 bool allow_null_parameters = false);
70
71 /**
72 * Perform a signature check operation
73 * @param msg the message
74 * @param sig the signature
75 * @returns if sig is a valid signature for msg
76 */
77 virtual bool verify(std::span<const uint8_t> msg, std::span<const uint8_t> sig) = 0;
78
79 private:
80 std::unique_ptr<HashFunction> m_hash;
81};
82
84 public:
85 void update(std::span<const uint8_t> input) override;
86
87 std::vector<uint8_t> sign(RandomNumberGenerator& rng) override;
88
90
91 protected:
92 explicit Signature_with_Hash(std::string_view hash);
93
94 std::string hash_function() const final;
95
96#if defined(BOTAN_HAS_RFC6979_GENERATOR)
97 std::string rfc6979_hash_function() const;
98#endif
99
100 private:
101 virtual std::vector<uint8_t> raw_sign(std::span<const uint8_t> input, RandomNumberGenerator& rng) = 0;
102
103 std::unique_ptr<HashFunction> m_hash;
104};
105
107 public:
108 secure_vector<uint8_t> agree(size_t key_len,
109 std::span<const uint8_t> other_key,
110 std::span<const uint8_t> salt) override;
111
113
114 protected:
115 explicit Key_Agreement_with_KDF(std::string_view kdf);
116
117 private:
118 virtual secure_vector<uint8_t> raw_agree(const uint8_t w[], size_t w_len) = 0;
119 std::unique_ptr<KDF> m_kdf;
120};
121
123 public:
124 void kem_encrypt(std::span<uint8_t> out_encapsulated_key,
125 std::span<uint8_t> out_shared_key,
127 size_t desired_shared_key_len,
128 std::span<const uint8_t> salt) final;
129
130 size_t shared_key_length(size_t desired_shared_key_len) const final;
131
133
134 protected:
135 virtual void raw_kem_encrypt(std::span<uint8_t> out_encapsulated_key,
136 std::span<uint8_t> out_raw_shared_key,
137 RandomNumberGenerator& rng) = 0;
138
139 virtual size_t raw_kem_shared_key_length() const = 0;
140
141 explicit KEM_Encryption_with_KDF(std::string_view kdf);
142
143 private:
144 std::unique_ptr<KDF> m_kdf;
145};
146
148 public:
149 void kem_decrypt(std::span<uint8_t> out_shared_key,
150 std::span<const uint8_t> encapsulated_key,
151 size_t desired_shared_key_len,
152 std::span<const uint8_t> salt) final;
153
154 size_t shared_key_length(size_t desired_shared_key_len) const final;
155
157
158 protected:
159 virtual void raw_kem_decrypt(std::span<uint8_t> out_raw_shared_key,
160 std::span<const uint8_t> encapsulated_key) = 0;
161
162 virtual size_t raw_kem_shared_key_length() const = 0;
163
164 explicit KEM_Decryption_with_KDF(std::string_view kdf);
165
166 private:
167 std::unique_ptr<KDF> m_kdf;
168};
169
170} // namespace Botan::PK_Ops
171
172#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
virtual void raw_kem_decrypt(std::span< uint8_t > out_raw_shared_key, std::span< const uint8_t > encapsulated_key)=0
virtual size_t raw_kem_shared_key_length() const =0
virtual size_t raw_kem_shared_key_length() const =0
virtual void raw_kem_encrypt(std::span< uint8_t > out_encapsulated_key, std::span< uint8_t > out_raw_shared_key, RandomNumberGenerator &rng)=0
std::string hash_function() const final
Definition pk_ops.cpp:162
virtual bool verify(std::span< const uint8_t > msg, std::span< const uint8_t > sig)=0
bool is_valid_signature(std::span< const uint8_t > sig) override
Definition pk_ops.cpp:193
int(* update)(CTX *, const void *, CC_LONG len)
int(* final)(unsigned char *, CTX *)
std::vector< T, secure_allocator< T > > secure_vector
Definition secmem.h:61