8#include <botan/internal/pk_ops_impl.h>
9#include <botan/internal/bit_ops.h>
23 return 8 * m_eme->maximum_input_size(max_raw_input_bits());
29 const size_t max_raw = max_raw_input_bits();
30 const std::vector<uint8_t> encoded =
unlock(m_eme->encode(msg, msg_len, max_raw, rng));
31 return raw_encrypt(encoded.data(), encoded.size(), rng);
43 const uint8_t ciphertext[],
44 size_t ciphertext_len)
47 return m_eme->unpad(valid_mask, raw.data(), raw.size());
57 const uint8_t w[],
size_t w_len,
58 const uint8_t salt[],
size_t salt_len)
62 return m_kdf->derive_key(key_len, z, salt,
salt_len);
78 if(has_prefix() && !m_prefix_used)
82 m_emsa->update(prefix.data(), prefix.size());
84 m_emsa->update(msg, msg_len);
89 m_prefix_used =
false;
91 const auto padded = m_emsa->encoding_of(msg, this->max_input_bits(), rng);
92 return raw_sign(padded.data(), padded.size(), rng);
107 if(has_prefix() && !m_prefix_used)
109 m_prefix_used =
true;
111 m_emsa->update(prefix.data(), prefix.size());
113 m_emsa->update(msg, msg_len);
118 m_prefix_used =
false;
124 return m_emsa->verify(output_of_key, msg, max_input_bits());
130 return verify(encoded.data(), encoded.size(), sig, sig_len);
136 size_t desired_shared_key_len,
138 const uint8_t salt[],
142 this->raw_kem_encrypt(out_encapsulated_key, raw_shared, rng);
144 out_shared_key = m_kdf->derive_key(desired_shared_key_len,
145 raw_shared.data(), raw_shared.size(),
157 size_t desired_shared_key_len,
158 const uint8_t salt[],
163 return m_kdf->derive_key(desired_shared_key_len,
164 raw_shared.data(), raw_shared.size(),
secure_vector< uint8_t > decrypt(uint8_t &valid_mask, const uint8_t msg[], size_t msg_len) override
Decryption_with_EME(const std::string &eme)
size_t max_input_bits() const override
secure_vector< uint8_t > encrypt(const uint8_t msg[], size_t msg_len, RandomNumberGenerator &rng) override
Encryption_with_EME(const std::string &eme)
KEM_Decryption_with_KDF(const std::string &kdf)
secure_vector< uint8_t > kem_decrypt(const uint8_t encap_key[], size_t len, size_t desired_shared_key_len, const uint8_t salt[], size_t salt_len) override
void kem_encrypt(secure_vector< uint8_t > &out_encapsulated_key, secure_vector< uint8_t > &out_shared_key, size_t desired_shared_key_len, Botan::RandomNumberGenerator &rng, const uint8_t salt[], size_t salt_len) override
KEM_Encryption_with_KDF(const std::string &kdf)
Key_Agreement_with_KDF(const std::string &kdf)
secure_vector< uint8_t > agree(size_t key_len, const uint8_t other_key[], size_t other_key_len, const uint8_t salt[], size_t salt_len) override
Signature_with_EMSA(const std::string &emsa)
void update(const uint8_t msg[], size_t msg_len) override
secure_vector< uint8_t > sign(RandomNumberGenerator &rng) override
void update(const uint8_t msg[], size_t msg_len) override
Verification_with_EMSA(const std::string &emsa)
bool is_valid_signature(const uint8_t sig[], size_t sig_len) override
KDF * get_kdf(const std::string &algo_spec)
std::string hash_for_emsa(const std::string &algo_spec)
EME * get_eme(const std::string &algo_spec)
std::vector< T > unlock(const secure_vector< T > &in)
EMSA * get_emsa(const std::string &algo_spec)
std::vector< T, secure_allocator< T > > secure_vector