Botan  2.19.1
Crypto and TLS for C++11
Public Types | Public Member Functions | List of all members
Botan::TPM_Context Class Referencefinal

#include <tpm.h>

Public Types

typedef std::function< std::string(std::string)> pin_cb
 

Public Member Functions

uint32_t current_counter ()
 
void gen_random (uint8_t out[], size_t out_len)
 
std::string get_user_pin (const std::string &who)
 
TSS_HCONTEXT handle () const
 
TSS_HKEY srk () const
 
void stir_random (const uint8_t in[], size_t in_len)
 
 TPM_Context (pin_cb cb, const char *srk_password)
 
 ~TPM_Context ()
 

Detailed Description

Creates a connection to the TPM. All other TPM types take and hold a TPM_Context reference, so all other objects must be deallocated before ~TPM_Context runs.

Use nullptr for the srk_password to indicate the well known secret (ie, an unencrypted SRK). This is usually what you want.

TODO: handling owner password?

Definition at line 41 of file tpm.h.

Member Typedef Documentation

typedef std::function<std::string (std::string)> Botan::TPM_Context::pin_cb

User callback for getting the PIN. Will be passed the best available description of what we are attempting to load.

Definition at line 48 of file tpm.h.

Constructor & Destructor Documentation

Botan::TPM_Context::TPM_Context ( pin_cb  cb,
const char *  srk_password 
)

Definition at line 156 of file tpm.cpp.

References TSPI_CHECK_SUCCESS.

156  :
157  m_pin_cb(cb),
158  m_srk_policy(0)
159  {
160  TSPI_CHECK_SUCCESS(::Tspi_Context_Create(&m_ctx));
161  TSPI_CHECK_SUCCESS(::Tspi_Context_Connect(m_ctx, nullptr));
162 
163  TSPI_CHECK_SUCCESS(::Tspi_Context_GetTpmObject(m_ctx, &m_tpm));
164 
165  const TSS_UUID SRK_UUID = TSS_UUID_SRK;
166 
167  TSPI_CHECK_SUCCESS(::Tspi_Context_LoadKeyByUUID(m_ctx, TSS_PS_TYPE_SYSTEM, SRK_UUID, &m_srk));
168 
169  TSPI_CHECK_SUCCESS(::Tspi_GetPolicyObject(m_srk, TSS_POLICY_USAGE, &m_srk_policy));
170  set_policy_secret(m_srk_policy, srk_password);
171 
172  // TODO: do we have to cache it?
173  // TODO: try to use SRK with null, if it fails call the pin cb?
174  }
#define TSPI_CHECK_SUCCESS(expr)
Definition: tpm.cpp:68
Botan::TPM_Context::~TPM_Context ( )

Definition at line 176 of file tpm.cpp.

References TSPI_CHECK_SUCCESS.

177  {
178  TSPI_CHECK_SUCCESS(::Tspi_Context_CloseObject(m_ctx, m_srk));
179  //TSPI_CHECK_SUCCESS(::Tspi_Context_CloseObject(m_ctx, m_tpm));
180  TSPI_CHECK_SUCCESS(::Tspi_Context_Close(m_srk_policy));
181  TSPI_CHECK_SUCCESS(::Tspi_Context_Close(m_ctx));
182  }
#define TSPI_CHECK_SUCCESS(expr)
Definition: tpm.cpp:68

Member Function Documentation

uint32_t Botan::TPM_Context::current_counter ( )

Definition at line 184 of file tpm.cpp.

References TSPI_CHECK_SUCCESS.

185  {
186  uint32_t r = 0;
187  TSPI_CHECK_SUCCESS(::Tspi_TPM_ReadCounter(m_tpm, &r));
188  return r;
189  }
#define TSPI_CHECK_SUCCESS(expr)
Definition: tpm.cpp:68
void Botan::TPM_Context::gen_random ( uint8_t  out[],
size_t  out_len 
)

Definition at line 191 of file tpm.cpp.

References Botan::copy_mem(), and TSPI_CHECK_SUCCESS.

192  {
193  BYTE* mem;
194  TSPI_CHECK_SUCCESS(::Tspi_TPM_GetRandom(m_tpm, out_len, &mem));
195  copy_mem(out, reinterpret_cast<const uint8_t*>(mem), out_len);
196  TSPI_CHECK_SUCCESS(::Tspi_Context_FreeMemory(m_ctx, mem));
197  }
#define TSPI_CHECK_SUCCESS(expr)
Definition: tpm.cpp:68
void copy_mem(T *out, const T *in, size_t n)
Definition: mem_ops.h:133
std::string Botan::TPM_Context::get_user_pin ( const std::string &  who)
inline

Definition at line 60 of file tpm.h.

61  {
62  return m_pin_cb(who);
63  }
TSS_HCONTEXT Botan::TPM_Context::handle ( ) const
inline
TSS_HKEY Botan::TPM_Context::srk ( ) const
inline

Definition at line 68 of file tpm.h.

Referenced by Botan::TPM_PrivateKey::TPM_PrivateKey().

68 { return m_srk; }
void Botan::TPM_Context::stir_random ( const uint8_t  in[],
size_t  in_len 
)

Definition at line 199 of file tpm.cpp.

References TSPI_CHECK_SUCCESS.

200  {
201  TSPI_CHECK_SUCCESS(::Tspi_TPM_StirRandom(m_tpm, in_len, const_cast<BYTE*>(in)));
202  }
#define TSPI_CHECK_SUCCESS(expr)
Definition: tpm.cpp:68

The documentation for this class was generated from the following files: