Botan 2.19.5 Crypto and TLS for C&

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

## ◆ pin_cb

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

## ◆ TPM_Context()

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

Definition at line 156 of file tpm.cpp.

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 }
TSPI_CHECK_SUCCESS
#define TSPI_CHECK_SUCCESS(expr)
Definition: tpm.cpp:68

References TSPI_CHECK_SUCCESS.

## ◆ ~TPM_Context()

Botan::TPM_Context::~TPM_Context | ( |  | ) |

Definition at line 176 of file tpm.cpp.

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 }

References TSPI_CHECK_SUCCESS.

## Member Function Documentation

## ◆ current_counter()

uint32_t Botan::TPM_Context::current_counter | ( |  | ) |

Definition at line 184 of file tpm.cpp.

185 {
186 uint32_t r = 0;
187 TSPI_CHECK_SUCCESS(::Tspi_TPM_ReadCounter(m_tpm, &r));
188 return r;
189 }

References TSPI_CHECK_SUCCESS.

## ◆ gen_random()

void Botan::TPM_Context::gen_random | ( | uint8_t | out[],
|  | size_t | out_len
| ) |  |

Definition at line 191 of file tpm.cpp.

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 }
Botan::copy_mem
void copy_mem(T *out, const T *in, size_t n)
Definition: mem_ops.h:133

References Botan::copy_mem(), and TSPI_CHECK_SUCCESS.

## ◆ get_user_pin()

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 }

## ◆ handle()

TSS_HCONTEXT Botan::TPM_Context::handle | ( |  | ) | const
| inline

Definition at line 67 of file tpm.h.

67{ return m_ctx; }

Referenced by Botan::TPM_PrivateKey::export_blob(), Botan::TPM_PrivateKey::get_e(), Botan::TPM_PrivateKey::get_n(), Botan::TPM_PrivateKey::register_key(), and Botan::TPM_PrivateKey::registered_keys().

## ◆ srk()

TSS_HKEY Botan::TPM_Context::srk | ( |  | ) | const
| inline

Definition at line 68 of file tpm.h.

68{ return m_srk; }

## ◆ stir_random()

void Botan::TPM_Context::stir_random | ( | const uint8_t | in[],
|  | size_t | in_len
| ) |  |

Definition at line 199 of file tpm.cpp.

200 {
201 TSPI_CHECK_SUCCESS(::Tspi_TPM_StirRandom(m_tpm, in_len, const_cast<BYTE*>(in)));
202 }

References TSPI_CHECK_SUCCESS.

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

- src/lib/prov/tpm/tpm.h
- src/lib/prov/tpm/tpm.cpp