11#include <botan/pk_keys.h>
12#include <botan/pk_ops_fwd.h>
13#include <botan/symkey.h>
16#if defined(BOTAN_HAS_SYSTEM_RNG)
17 #include <botan/system_rng.h>
18 #define BOTAN_PUBKEY_INCLUDE_DEPRECATED_CONSTRUCTORS
23class RandomNumberGenerator;
40 std::vector<uint8_t>
encrypt(
const uint8_t in[],
size_t length,
43 return enc(in, length, rng);
52 template<
typename Alloc>
53 std::vector<uint8_t>
encrypt(
const std::vector<uint8_t, Alloc>& in,
56 return enc(in.data(), in.size(), rng);
77 virtual std::vector<uint8_t> enc(
const uint8_t[],
size_t,
103 template<
typename Alloc>
106 return decrypt(in.data(), in.size());
116 decrypt_or_random(
const uint8_t in[],
118 size_t expected_pt_len,
136 decrypt_or_random(
const uint8_t in[],
138 size_t expected_pt_len,
140 const uint8_t required_content_bytes[],
141 const uint8_t required_content_offsets[],
142 size_t required_contents)
const;
158 const uint8_t in[],
size_t in_len)
const = 0;
181 const std::string& emsa,
183 const std::string& provider =
"");
185#if defined(BOTAN_PUBKEY_INCLUDE_DEPRECATED_CONSTRUCTORS)
193 BOTAN_DEPRECATED(
"Use constructor taking a RNG object")
195 const std::string& emsa,
197 const std::string& provider =
"") :
218 return this->signature(rng);
227 template<
typename Alloc>
228 std::vector<uint8_t>
sign_message(
const std::vector<uint8_t, Alloc>& in,
231 return sign_message(in.data(), in.size(), rng);
245 void update(
const uint8_t in[],
size_t length);
251 template<
typename Alloc>
252 void update(
const std::vector<uint8_t, Alloc>& in)
254 update(in.data(), in.size());
285 size_t signature_length()
const;
288 std::unique_ptr<PK_Ops::Signature> m_op;
290 size_t m_parts, m_part_size;
309 const std::string& emsa,
311 const std::string& provider =
"");
326 bool verify_message(
const uint8_t msg[],
size_t msg_length,
327 const uint8_t sig[],
size_t sig_length);
334 template<
typename Alloc,
typename Alloc2>
336 const std::vector<uint8_t, Alloc2>& sig)
338 return verify_message(msg.data(), msg.size(),
339 sig.data(), sig.size());
355 void update(
const uint8_t msg_part[],
size_t length);
362 template<
typename Alloc>
363 void update(
const std::vector<uint8_t, Alloc>& in)
365 update(in.data(), in.size());
384 bool check_signature(
const uint8_t sig[],
size_t length);
392 template<
typename Alloc>
395 return check_signature(sig.data(), sig.size());
405 std::unique_ptr<PK_Ops::Verification> m_op;
407 size_t m_parts, m_part_size;
426 const std::string& kdf,
427 const std::string& provider =
"");
429#if defined(BOTAN_PUBKEY_INCLUDE_DEPRECATED_CONSTRUCTORS)
436 BOTAN_DEPRECATED(
"Use constructor taking a RNG object")
438 const std::string& kdf,
439 const std::string& provider =
"") :
464 const uint8_t params[],
465 size_t params_len)
const;
475 const std::vector<uint8_t>& in,
476 const uint8_t params[],
477 size_t params_len)
const
479 return derive_key(key_len, in.data(), in.size(),
491 const uint8_t in[],
size_t in_len,
492 const std::string& params =
"")
const
494 return derive_key(key_len, in, in_len,
506 const std::vector<uint8_t>& in,
507 const std::string& params =
"")
const
509 return derive_key(key_len, in.data(), in.size(),
519 size_t agreed_value_size()
const;
522 std::unique_ptr<PK_Ops::Key_Agreement> m_op;
532 size_t maximum_input_size()
const override;
543 const std::string& padding,
544 const std::string& provider =
"");
546#if defined(BOTAN_PUBKEY_INCLUDE_DEPRECATED_CONSTRUCTORS)
552 BOTAN_DEPRECATED(
"Use constructor taking a RNG object")
554 const std::string& padding,
555 const std::string& provider =
"") :
568 size_t ciphertext_length(
size_t ptext_len)
const override;
570 std::vector<uint8_t> enc(
const uint8_t[],
size_t,
573 std::unique_ptr<PK_Ops::Encryption> m_op;
591 const std::string& eme,
592 const std::string& provider =
"");
595#if defined(BOTAN_PUBKEY_INCLUDE_DEPRECATED_CONSTRUCTORS)
601 BOTAN_DEPRECATED(
"Use constructor taking a RNG object")
603 const std::string& eme,
604 const std::string& provider =
"") :
608 size_t plaintext_length(
size_t ptext_len)
const override;
616 size_t in_len)
const override;
618 std::unique_ptr<PK_Ops::Decryption> m_op;
636 const std::string& kem_param =
"",
637 const std::string& provider =
"");
639#if defined(BOTAN_PUBKEY_INCLUDE_DEPRECATED_CONSTRUCTORS)
640 BOTAN_DEPRECATED(
"Use constructor taking a RNG object")
642 const std::string& kem_param =
"",
643 const std::string& provider =
"") :
663 size_t desired_shared_key_len,
665 const uint8_t salt[],
676 template<
typename Alloc>
679 size_t desired_shared_key_len,
681 const std::vector<uint8_t, Alloc>& salt)
683 this->encrypt(out_encapsulated_key,
685 desired_shared_key_len,
687 salt.data(), salt.size());
700 size_t desired_shared_key_len,
703 this->encrypt(out_encapsulated_key,
705 desired_shared_key_len,
712 std::unique_ptr<PK_Ops::KEM_Encryption> m_op;
730 const std::string& kem_param =
"",
731 const std::string& provider =
"");
733#if defined(BOTAN_PUBKEY_INCLUDE_DEPRECATED_CONSTRUCTORS)
734 BOTAN_DEPRECATED(
"Use constructor taking a RNG object")
736 const std::string& kem_param =
"",
737 const std::string& provider =
"") :
756 size_t encap_key_len,
757 size_t desired_shared_key_len,
758 const uint8_t salt[],
769 size_t encap_key_len,
770 size_t desired_shared_key_len)
772 return this->decrypt(encap_key, encap_key_len,
773 desired_shared_key_len,
784 template<
typename Alloc1,
typename Alloc2>
786 size_t desired_shared_key_len,
787 const std::vector<uint8_t, Alloc2>& salt)
789 return this->decrypt(encap_key.data(), encap_key.size(),
790 desired_shared_key_len,
791 salt.data(), salt.size());
795 std::unique_ptr<PK_Ops::KEM_Decryption> m_op;
PK_Decryptor_EME(const PK_Decryptor_EME &)=delete
PK_Decryptor_EME & operator=(const PK_Decryptor_EME &)=delete
virtual ~PK_Decryptor()=default
virtual size_t plaintext_length(size_t ctext_len) const =0
secure_vector< uint8_t > decrypt(const std::vector< uint8_t, Alloc > &in) const
PK_Decryptor & operator=(const PK_Decryptor &)=delete
PK_Decryptor(const PK_Decryptor &)=delete
PK_Encryptor_EME & operator=(const PK_Encryptor_EME &)=delete
PK_Encryptor_EME(const PK_Encryptor_EME &)=delete
PK_Encryptor & operator=(const PK_Encryptor &)=delete
virtual size_t maximum_input_size() const =0
virtual size_t ciphertext_length(size_t ctext_len) const =0
std::vector< uint8_t > encrypt(const std::vector< uint8_t, Alloc > &in, RandomNumberGenerator &rng) const
virtual ~PK_Encryptor()=default
std::vector< uint8_t > encrypt(const uint8_t in[], size_t length, RandomNumberGenerator &rng) const
PK_Encryptor(const PK_Encryptor &)=delete
PK_KEM_Decryptor & operator=(const PK_KEM_Decryptor &)=delete
PK_KEM_Decryptor(const PK_KEM_Decryptor &)=delete
secure_vector< uint8_t > decrypt(const uint8_t encap_key[], size_t encap_key_len, size_t desired_shared_key_len)
secure_vector< uint8_t > decrypt(const std::vector< uint8_t, Alloc1 > &encap_key, size_t desired_shared_key_len, const std::vector< uint8_t, Alloc2 > &salt)
void 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 std::vector< uint8_t, Alloc > &salt)
void encrypt(secure_vector< uint8_t > &out_encapsulated_key, secure_vector< uint8_t > &out_shared_key, size_t desired_shared_key_len, Botan::RandomNumberGenerator &rng)
PK_KEM_Encryptor(const PK_KEM_Encryptor &)=delete
PK_KEM_Encryptor & operator=(const PK_KEM_Encryptor &)=delete
SymmetricKey derive_key(size_t key_len, const std::vector< uint8_t > &in, const uint8_t params[], size_t params_len) const
PK_Key_Agreement & operator=(const PK_Key_Agreement &)=delete
SymmetricKey derive_key(size_t key_len, const uint8_t in[], size_t in_len, const std::string ¶ms="") const
SymmetricKey derive_key(size_t key_len, const std::vector< uint8_t > &in, const std::string ¶ms="") const
PK_Key_Agreement(const PK_Key_Agreement &)=delete
void update(const std::string &in)
std::vector< uint8_t > sign_message(const std::vector< uint8_t, Alloc > &in, RandomNumberGenerator &rng)
PK_Signer & operator=(const PK_Signer &)=delete
void set_output_format(Signature_Format format)
PK_Signer(const PK_Signer &)=delete
std::vector< uint8_t > sign_message(const uint8_t in[], size_t length, RandomNumberGenerator &rng)
void update(const std::vector< uint8_t, Alloc > &in)
bool check_signature(const std::vector< uint8_t, Alloc > &sig)
PK_Verifier(const PK_Verifier &)=delete
void update(const std::string &in)
PK_Verifier & operator=(const PK_Verifier &)=delete
bool verify_message(const std::vector< uint8_t, Alloc > &msg, const std::vector< uint8_t, Alloc2 > &sig)
void update(const std::vector< uint8_t, Alloc > &in)
int(* update)(CTX *, const void *, CC_LONG len)
int(* final)(unsigned char *, CTX *)
#define BOTAN_PUBLIC_API(maj, min)
RandomNumberGenerator & system_rng()
std::vector< T, secure_allocator< T > > secure_vector
const uint8_t * cast_char_ptr_to_uint8(const char *s)