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