12#include <botan/bigint.h> 
   13#include <botan/exceptn.h> 
   14#include <botan/pk_keys.h> 
   16#include <botan/uuid.h> 
   49      typedef std::function<std::string(std::string)> 
pin_cb;
 
   56      void gen_random(uint8_t out[], 
size_t out_len);
 
   59      void stir_random(const uint8_t in[], 
size_t in_len);
 
   61      std::
string get_user_pin(const std::
string& who) { 
return m_pin_cb(who); }
 
   63      uint32_t current_counter();
 
   65      TSS_HCONTEXT 
handle()
 const { 
return m_ctx; }
 
   67      TSS_HKEY 
srk()
 const { 
return m_srk; }
 
   70      std::function<std::string(std::string)> m_pin_cb;
 
   74      TSS_HPOLICY m_srk_policy;
 
 
   83      std::string 
name()
 const override { 
return "TPM_RNG"; }
 
   88      void fill_bytes_with_input(std::span<uint8_t> output, std::span<const uint8_t> input)
 override {
 
   90            m_ctx.stir_random(input.data(), input.size());
 
   94            m_ctx.gen_random(output.data(), output.size());
 
 
  136      std::unique_ptr<Public_Key> 
public_key() 
const override;
 
  142      TSS_HKEY 
handle()
 const { 
return m_key; }
 
  147      static std::vector<std::string> registered_keys(
TPM_Context& ctx);
 
  149      size_t estimated_strength() 
const override;
 
  151      size_t key_length() 
const override;
 
  155      std::vector<uint8_t> public_key_bits() 
const override;
 
  157      std::vector<uint8_t> raw_public_key_bits() 
const override;
 
  167      std::string 
algo_name()
 const override { 
return "RSA"; }  
 
  170         throw Not_Implemented(
"Cannot generate a new TPM-based keypair from this asymmetric key");
 
 
  176                                                             std::string_view params,
 
  177                                                             std::string_view provider) 
const override;
 
 
#define BOTAN_DEPRECATED_HEADER(hdr)
 
#define BOTAN_PUBLIC_API(maj, min)
 
#define BOTAN_DEPRECATED(msg)
 
Exception(std::string_view msg)
 
TSS_HCONTEXT handle() const
 
TPM_Context(pin_cb cb, const char *srk_password)
 
void gen_random(uint8_t out[], size_t out_len)
 
std::string get_user_pin(const std::string &who)
 
std::function< std::string(std::string)> pin_cb
 
void stir_random(const uint8_t in[], size_t in_len)
 
ErrorType error_type() const noexcept override
 
TPM_Error(std::string_view err)
 
std::vector< uint8_t > export_blob() const
 
std::string register_key(TPM_Storage_Type storage_type)
 
TPM_PrivateKey(TPM_Context &ctx, size_t bits, const char *key_password)
 
std::unique_ptr< Private_Key > generate_another(RandomNumberGenerator &) const override
 
bool supports_operation(PublicKeyOperation op) const override
 
TPM_Context & ctx() const
 
std::string algo_name() const override
 
std::unique_ptr< Public_Key > public_key() const override
 
bool accepts_input() const override
 
bool is_seeded() const override
 
std::string name() const override
 
TPM_RNG(TPM_Context &ctx)
 
std::vector< T, secure_allocator< T > > secure_vector