8#ifndef BOTAN_PK_OPERATION_IMPL_H_
9#define BOTAN_PK_OPERATION_IMPL_H_
11#include <botan/pk_ops.h>
17class EncryptionPaddingScheme;
37 virtual size_t max_ptext_input_bits()
const = 0;
39 virtual std::vector<uint8_t> raw_encrypt(std::span<const uint8_t> msg,
RandomNumberGenerator& rng) = 0;
40 std::unique_ptr<EncryptionPaddingScheme> m_padding;
54 std::unique_ptr<EncryptionPaddingScheme> m_padding;
61 void update(std::span<const uint8_t> input)
override;
70 std::string_view pk_algo,
71 bool allow_null_parameters = false);
79 virtual
bool verify(std::span<const uint8_t> msg, std::span<const uint8_t> sig) = 0;
87 void update(std::span<const uint8_t> input)
override;
98#if defined(BOTAN_HAS_RFC6979_GENERATOR)
99 std::string rfc6979_hash_function()
const;
103 virtual std::vector<uint8_t> raw_sign(std::span<const uint8_t> input,
RandomNumberGenerator& rng) = 0;
105 std::unique_ptr<HashFunction> m_hash;
111 std::span<const uint8_t> other_key,
112 std::span<const uint8_t> salt)
override;
121 std::unique_ptr<KDF> m_kdf;
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;
132 size_t shared_key_length(
size_t desired_shared_key_len)
const final;
138 std::span<uint8_t> out_raw_shared_key,
146 std::unique_ptr<KDF> m_kdf;
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;
156 size_t shared_key_length(
size_t desired_shared_key_len)
const final;
162 std::span<const uint8_t> encapsulated_key) = 0;
169 std::unique_ptr<KDF> m_kdf;
~Decryption_with_Padding() override
secure_vector< uint8_t > decrypt(uint8_t &valid_mask, std::span< const uint8_t > ctext) override
Decryption_with_Padding(std::string_view padding)
~Encryption_with_Padding() override
size_t max_input_bits() const override
std::vector< uint8_t > encrypt(std::span< const uint8_t > ptext, RandomNumberGenerator &rng) override
Encryption_with_Padding(std::string_view padding)
~KEM_Decryption_with_KDF() override
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
~KEM_Encryption_with_KDF() override
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
~Key_Agreement_with_KDF() override
~Signature_with_Hash() override
std::string hash_function() const final
~Verification_with_Hash() override
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
int(* update)(CTX *, const void *, CC_LONG len)
int(* final)(unsigned char *, CTX *)
std::vector< T, secure_allocator< T > > secure_vector