8 #include <botan/internal/pk_ops_impl.h>
9 #include <botan/internal/bit_ops.h>
22 return m_eme->maximum_input_size(max_raw_input_bits());
28 const size_t max_raw = max_raw_input_bits();
29 const std::vector<uint8_t> encoded =
unlock(m_eme->encode(msg, msg_len, max_raw, rng));
30 return raw_encrypt(encoded.data(), encoded.size(), rng);
42 const uint8_t ciphertext[],
43 size_t ciphertext_len)
46 return m_eme->unpad(valid_mask, raw.data(), raw.size());
56 const uint8_t w[],
size_t w_len,
57 const uint8_t salt[],
size_t salt_len)
61 return m_kdf->derive_key(key_len, z, salt, salt_len);
77 if(has_prefix() && !m_prefix_used)
81 m_emsa->update(prefix.data(), prefix.size());
83 m_emsa->update(msg, msg_len);
88 m_prefix_used =
false;
90 const auto padded =
m_emsa->encoding_of(msg, this->max_input_bits(), rng);
91 return raw_sign(padded.data(), padded.size(), rng);
106 if(has_prefix() && !m_prefix_used)
108 m_prefix_used =
true;
110 m_emsa->update(prefix.data(), prefix.size());
112 m_emsa->update(msg, msg_len);
117 m_prefix_used =
false;
123 return m_emsa->verify(output_of_key, msg, max_input_bits());
129 return verify(encoded.data(), encoded.size(), sig, sig_len);
135 size_t desired_shared_key_len,
137 const uint8_t salt[],
141 this->raw_kem_encrypt(out_encapsulated_key, raw_shared, rng);
143 out_shared_key = m_kdf->derive_key(desired_shared_key_len,
144 raw_shared.data(), raw_shared.size(),
156 size_t desired_shared_key_len,
157 const uint8_t salt[],
162 return m_kdf->derive_key(desired_shared_key_len,
163 raw_shared.data(), raw_shared.size(),
secure_vector< uint8_t > encrypt(const uint8_t msg[], size_t msg_len, RandomNumberGenerator &rng) override
void update(const uint8_t msg[], size_t msg_len) override
std::string hash_for_emsa(const std::string &algo_spec)
EMSA * get_emsa(const std::string &algo_spec)
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
Key_Agreement_with_KDF(const std::string &kdf)
Encryption_with_EME(const std::string &eme)
KEM_Decryption_with_KDF(const std::string &kdf)
Decryption_with_EME(const std::string &eme)
Signature_with_EMSA(const std::string &emsa)
KEM_Encryption_with_KDF(const std::string &kdf)
std::unique_ptr< EMSA > m_emsa
std::vector< T, secure_allocator< T >> secure_vector
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
secure_vector< uint8_t > sign(RandomNumberGenerator &rng) override
size_t max_input_bits() const override
Verification_with_EMSA(const std::string &emsa)
EME * get_eme(const std::string &algo_spec)
void update(const uint8_t msg[], size_t msg_len) override
bool is_valid_signature(const uint8_t sig[], size_t sig_len) override
std::vector< T > unlock(const secure_vector< T > &in)
std::unique_ptr< EMSA > m_emsa
KDF * get_kdf(const std::string &algo_spec)
std::unique_ptr< HashFunction > m_hash
secure_vector< uint8_t > decrypt(uint8_t &valid_mask, const uint8_t msg[], size_t msg_len) override
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