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>
14 #include <botan/rng.h>
15 #include <botan/eme.h>
16 #include <botan/emsa.h>
17 #include <botan/kdf.h>
19 #if defined(BOTAN_HAS_SYSTEM_RNG)
20 #include <botan/system_rng.h>
21 #define BOTAN_PUBKEY_INCLUDE_DEPRECATED_CONSTRUCTORS
46 std::vector<uint8_t>
encrypt(
const uint8_t in[],
size_t length,
49 return enc(in, length, rng);
58 template<
typename Alloc>
59 std::vector<uint8_t>
encrypt(
const std::vector<uint8_t, Alloc>& in,
62 return enc(in.data(), in.size(), rng);
69 virtual size_t maximum_input_size()
const = 0;
78 virtual std::vector<uint8_t> enc(
const uint8_t[],
size_t,
104 template<
typename Alloc>
107 return decrypt(in.data(), in.size());
117 decrypt_or_random(
const uint8_t in[],
119 size_t expected_pt_len,
137 decrypt_or_random(
const uint8_t in[],
139 size_t expected_pt_len,
141 const uint8_t required_content_bytes[],
142 const uint8_t required_content_offsets[],
143 size_t required_contents)
const;
153 const uint8_t in[],
size_t in_len)
const = 0;
176 const std::string& emsa,
178 const std::string& provider =
"");
180 #if defined(BOTAN_PUBKEY_INCLUDE_DEPRECATED_CONSTRUCTORS)
190 const std::string& emsa,
192 const std::string& provider =
"") :
212 this->update(in, length);
213 return this->signature(rng);
224 {
return sign_message(in.data(), in.size(), rng); }
234 {
return sign_message(in.data(), in.size(), rng); }
247 void update(
const uint8_t in[],
size_t length);
253 void update(
const std::vector<uint8_t>& in) {
update(in.data(), in.size()); }
261 update(reinterpret_cast<const uint8_t*>(in.data()), in.size());
278 std::unique_ptr<PK_Ops::Signature> m_op;
280 size_t m_parts, m_part_size;
299 const std::string& emsa,
301 const std::string& provider =
"");
316 bool verify_message(
const uint8_t msg[],
size_t msg_length,
317 const uint8_t sig[],
size_t sig_length);
324 template<
typename Alloc,
typename Alloc2>
326 const std::vector<uint8_t, Alloc2>& sig)
328 return verify_message(msg.data(), msg.size(),
329 sig.data(), sig.size());
345 void update(
const uint8_t msg_part[],
size_t length);
352 void update(
const std::vector<uint8_t>& in)
353 { update(in.data(), in.size()); }
361 update(reinterpret_cast<const uint8_t*>(in.data()), in.size());
371 bool check_signature(
const uint8_t sig[],
size_t length);
379 template<
typename Alloc>
382 return check_signature(sig.data(), sig.size());
392 std::unique_ptr<PK_Ops::Verification> m_op;
394 size_t m_parts, m_part_size;
413 const std::string& kdf,
414 const std::string& provider =
"");
416 #if defined(BOTAN_PUBKEY_INCLUDE_DEPRECATED_CONSTRUCTORS)
425 const std::string& kdf,
426 const std::string& provider =
"") :
451 const uint8_t params[],
452 size_t params_len)
const;
463 const std::vector<uint8_t>& in,
464 const uint8_t params[],
465 size_t params_len)
const
467 return derive_key(key_len, in.data(), in.size(),
479 const uint8_t in[],
size_t in_len,
480 const std::string& params =
"")
const
482 return derive_key(key_len, in, in_len,
483 reinterpret_cast<const uint8_t*>(params.data()),
494 const std::vector<uint8_t>& in,
495 const std::string& params =
"")
const
497 return derive_key(key_len, in.data(), in.size(),
498 reinterpret_cast<const uint8_t*
>(params.data()),
503 std::unique_ptr<PK_Ops::Key_Agreement> m_op;
513 size_t maximum_input_size()
const override;
524 const std::string& padding,
525 const std::string& provider =
"");
527 #if defined(BOTAN_PUBKEY_INCLUDE_DEPRECATED_CONSTRUCTORS)
535 const std::string& padding,
536 const std::string& provider =
"") :
545 std::vector<uint8_t> enc(
const uint8_t[],
size_t,
548 std::unique_ptr<PK_Ops::Encryption> m_op;
566 const std::string& eme,
567 const std::string& provider =
"");
570 #if defined(BOTAN_PUBKEY_INCLUDE_DEPRECATED_CONSTRUCTORS)
578 const std::string& eme,
579 const std::string& provider =
"") :
589 size_t in_len)
const override;
591 std::unique_ptr<PK_Ops::Decryption> m_op;
609 const std::string& kem_param =
"",
610 const std::string& provider =
"");
612 #if defined(BOTAN_PUBKEY_INCLUDE_DEPRECATED_CONSTRUCTORS)
615 const std::string& kem_param =
"",
616 const std::string& provider =
"") :
636 size_t desired_shared_key_len,
638 const uint8_t salt[],
649 template<
typename Alloc>
652 size_t desired_shared_key_len,
654 const std::vector<uint8_t, Alloc>& salt)
656 this->
encrypt(out_encapsulated_key,
658 desired_shared_key_len,
660 salt.data(), salt.size());
673 size_t desired_shared_key_len,
676 this->
encrypt(out_encapsulated_key,
678 desired_shared_key_len,
685 std::unique_ptr<PK_Ops::KEM_Encryption> m_op;
703 const std::string& kem_param =
"",
704 const std::string& provider =
"");
706 #if defined(BOTAN_PUBKEY_INCLUDE_DEPRECATED_CONSTRUCTORS)
709 const std::string& kem_param =
"",
710 const std::string& provider =
"") :
729 size_t encap_key_len,
730 size_t desired_shared_key_len,
731 const uint8_t salt[],
742 size_t encap_key_len,
743 size_t desired_shared_key_len)
745 return this->
decrypt(encap_key, encap_key_len,
746 desired_shared_key_len,
757 template<
typename Alloc1,
typename Alloc2>
759 size_t desired_shared_key_len,
760 const std::vector<uint8_t, Alloc2>& salt)
762 return this->
decrypt(encap_key.data(), encap_key.size(),
763 desired_shared_key_len,
764 salt.data(), salt.size());
768 std::unique_ptr<PK_Ops::KEM_Decryption> m_op;
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)
void update(const std::vector< uint8_t > &in)
std::vector< uint8_t > sign_message(const uint8_t in[], size_t length, RandomNumberGenerator &rng)
std::string encrypt(const uint8_t input[], size_t input_len, const std::string &passphrase, 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
class BOTAN_DLL BOTAN_DEPRECATED("LibraryInitializer is no longer required") LibraryInitializer
SymmetricKey derive_key(size_t key_len, const uint8_t in[], size_t in_len, const std::string ¶ms="") const
void update(const std::vector< uint8_t > &in)
std::vector< uint8_t > sign_message(const secure_vector< uint8_t > &in, RandomNumberGenerator &rng)
secure_vector< uint8_t > decrypt(const uint8_t encap_key[], size_t encap_key_len, size_t desired_shared_key_len)
std::string decrypt(const uint8_t input[], size_t input_len, const std::string &passphrase)
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 update(const std::string &in)
RandomNumberGenerator & system_rng()
std::vector< uint8_t > sign_message(const std::vector< uint8_t > &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
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)