8 #ifndef BOTAN_PUBKEY_H_
9 #define BOTAN_PUBKEY_H_
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
23 class 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);
63 virtual size_t maximum_input_size()
const = 0;
68 virtual size_t ciphertext_length(
size_t ctext_len)
const = 0;
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;
148 virtual size_t plaintext_length(
size_t ctext_len)
const = 0;
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;
RandomNumberGenerator & system_rng()
void update(const std::vector< uint8_t, Alloc > &in)
std::vector< uint8_t > encrypt(const std::vector< uint8_t, Alloc > &in, RandomNumberGenerator &rng) const
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)
bool check_signature(const std::vector< uint8_t, Alloc > &sig)
bool verify_message(const std::vector< uint8_t, Alloc > &msg, const std::vector< uint8_t, Alloc2 > &sig)
int(* final)(unsigned char *, CTX *)
#define BOTAN_PUBLIC_API(maj, min)
const uint8_t * cast_char_ptr_to_uint8(const char *s)
std::vector< uint8_t > sign_message(const uint8_t in[], size_t length, RandomNumberGenerator &rng)
std::vector< uint8_t > encrypt(const uint8_t in[], size_t length, RandomNumberGenerator &rng) const
std::vector< T, secure_allocator< T >> secure_vector
SymmetricKey derive_key(size_t key_len, const uint8_t in[], size_t in_len, const std::string ¶ms="") const
std::string decrypt(const uint8_t input[], size_t input_len, const std::string &passphrase)
secure_vector< uint8_t > decrypt(const uint8_t encap_key[], size_t encap_key_len, size_t desired_shared_key_len)
void update(const std::vector< uint8_t, Alloc > &in)
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)
int(* update)(CTX *, const void *, CC_LONG len)
void update(const std::string &in)
std::vector< uint8_t > sign_message(const std::vector< uint8_t, Alloc > &in, RandomNumberGenerator &rng)
SymmetricKey derive_key(size_t key_len, const std::vector< uint8_t > &in, const uint8_t params[], size_t params_len) const
void set_output_format(Signature_Format format)
void update(const std::string &in)
SymmetricKey derive_key(size_t key_len, const std::vector< uint8_t > &in, const std::string ¶ms="") const
secure_vector< uint8_t > decrypt(const std::vector< uint8_t, Alloc > &in) const
std::string encrypt(const uint8_t input[], size_t input_len, const std::string &passphrase, RandomNumberGenerator &rng)
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)