Botan 2.1.0 Crypto and TLS for C++11

- Main Page
- Namespaces
- Classes
- Files

- Class List
- Class Index
- Class Hierarchy
- Class Members

Public Member Functions | Static Public Member Functions | List of all members
Botan::TPM_PrivateKey Class Reference

`#include <tpm.h>`

Inheritance diagram for Botan::TPM_PrivateKey:

## Public Member Functions
std::string | algo_name () const override
AlgorithmIdentifier | algorithm_identifier () const override
bool | check_key (RandomNumberGenerator &rng, bool) const override
virtual std::unique_ptr< PK_Ops::Decryption > | create_decryption_op (RandomNumberGenerator &rng, const std::string &params, const std::string &provider) const
virtual std::unique_ptr< PK_Ops::Encryption > | create_encryption_op (RandomNumberGenerator &rng, const std::string &params, const std::string &provider) const
virtual std::unique_ptr< PK_Ops::KEM_Decryption > | create_kem_decryption_op (RandomNumberGenerator &rng, const std::string &params, const std::string &provider) const
virtual std::unique_ptr< PK_Ops::KEM_Encryption > | create_kem_encryption_op (RandomNumberGenerator &rng, const std::string &params, const std::string &provider) const
virtual std::unique_ptr< PK_Ops::Key_Agreement > | create_key_agreement_op (RandomNumberGenerator &rng, const std::string &params, const std::string &provider) const
std::unique_ptr< PK_Ops::Signature > | create_signature_op (RandomNumberGenerator &rng, const std::string &params, const std::string &provider) const override
virtual std::unique_ptr< PK_Ops::Verification > | create_verification_op (const std::string &params, const std::string &provider) const
TPM_Context & | ctx () const
size_t | estimated_strength () const override
std::vector< uint8_t > | export_blob () const
std::string | fingerprint (const std::string &alg="SHA") const
virtual OID | get_oid () const
TSS_HKEY | handle () const
size_t | key_length () const override
virtual size_t | message_part_size () const
virtual size_t | message_parts () const
virtual AlgorithmIdentifier | pkcs8_algorithm_identifier () const
secure_vector< uint8_t > | private_key_bits () const override
secure_vector< uint8_t > | private_key_info () const
std::unique_ptr< Public_Key > | public_key () const
std::vector< uint8_t > | public_key_bits () const override
std::string | register_key (TPM_Storage_Type storage_type)
std::vector< uint8_t > | subject_public_key () const
| TPM_PrivateKey (TPM_Context &ctx, size_t bits, const char *key_password)
| TPM_PrivateKey (TPM_Context &ctx, const std::string &uuid, TPM_Storage_Type storage_type)
| TPM_PrivateKey (TPM_Context &ctx, const std::vector< uint8_t > &blob)

## Static Public Member Functions
static std::vector< std::string > | registered_keys (TPM_Context &ctx)

## Detailed Description

Definition at line 106 of file tpm.h.

## Constructor & Destructor Documentation

Botan::TPM_PrivateKey::TPM_PrivateKey | ( | TPM_Context & | ctx,
|  | size_t | bits,
|  | const char * | key_password
| ) |  |

Definition at line 203 of file tpm.cpp.

References Botan::TPM_Context::handle(), Botan::TPM_Context::srk(), and TSPI_CHECK_SUCCESS.

204 : m_ctx(ctx)
205 {
206 // TODO: can also do OAEP decryption via binding keys
207 // TODO: offer signing, binding (decrypt), or legacy (sign + decrypt) keys?
208
209 TSS_FLAG key_flags = bit_flag(bits) | TSS_KEY_VOLATILE | TSS_KEY_TYPE_SIGNING;
210
211 TSS_HKEY key;
212 TSPI_CHECK_SUCCESS(::Tspi_Context_CreateObject(m_ctx.handle(), TSS_OBJECT_TYPE_RSAKEY, key_flags, &key));
213
214 TSPI_CHECK_SUCCESS(::Tspi_SetAttribUint32(key, TSS_TSPATTRIB_KEY_INFO,
215 TSS_TSPATTRIB_KEYINFO_SIGSCHEME,
216 TSS_SS_RSASSAPKCS1V15_DER));
217
218 TSS_HPOLICY policy;
219 TSPI_CHECK_SUCCESS(::Tspi_Context_CreateObject(m_ctx.handle(), TSS_OBJECT_TYPE_POLICY, TSS_POLICY_USAGE, &policy));
220 set_policy_secret(policy, key_password);
221 TSPI_CHECK_SUCCESS(::Tspi_Policy_AssignToObject(policy, key));
222
223 TSPI_CHECK_SUCCESS(::Tspi_Key_CreateKey(key, ctx.srk(), 0));
224 m_key = key;
225 }
Botan::TPM_Context::srk
TSS_HKEY srk() const
Definition: tpm.h:66
Botan::TPM_Context::handle
TSS_HCONTEXT handle() const
Definition: tpm.h:65
TSPI_CHECK_SUCCESS
#define TSPI_CHECK_SUCCESS(expr)
Definition: tpm.cpp:68
Botan::TPM_PrivateKey::ctx
TPM_Context & ctx() const
Definition: tpm.h:142

Botan::TPM_PrivateKey::TPM_PrivateKey | ( | TPM_Context & | ctx,
|  | const std::string & | uuid,
|  | TPM_Storage_Type | storage_type
| ) |  |

Definition at line 228 of file tpm.cpp.

References Botan::TPM_Context::handle(), TSPI_CHECK_SUCCESS, and Botan::User.

229 :
230 m_ctx(ctx),
231 m_uuid(uuid_str),
232 m_storage(storage_type)
233 {
234 const TSS_FLAG key_ps_type =
235 (m_storage == TPM_Storage_Type::User) ? TSS_PS_TYPE_USER : TSS_PS_TYPE_SYSTEM;
236
237 TSPI_CHECK_SUCCESS(::Tspi_Context_LoadKeyByUUID(m_ctx.handle(),
238 key_ps_type,
239 to_tss_uuid(m_uuid),
240 &m_key));
241 }
Botan::TPM_Context::handle
TSS_HCONTEXT handle() const
Definition: tpm.h:65
TSPI_CHECK_SUCCESS
#define TSPI_CHECK_SUCCESS(expr)
Definition: tpm.cpp:68
Botan::TPM_Storage_Type::User
Botan::TPM_PrivateKey::ctx
TPM_Context & ctx() const
Definition: tpm.h:142

Botan::TPM_PrivateKey::TPM_PrivateKey | ( | TPM_Context & | ctx,
|  | const std::vector< uint8_t > & | blob
| ) |  |

Definition at line 243 of file tpm.cpp.

References Botan::TPM_Context::handle(), Botan::TPM_Context::srk(), and TSPI_CHECK_SUCCESS.

244 : m_ctx(ctx)
245 {
246 TSPI_CHECK_SUCCESS(::Tspi_Context_LoadKeyByBlob(m_ctx.handle(), m_ctx.srk(), blob.size(),
247 const_cast<uint8_t*>(blob.data()),
248 &m_key));
249
250 //TSPI_CHECK_SUCCESS(::Tspi_Key_LoadKey(m_key, m_ctx.srk()));
251 }
Botan::TPM_Context::srk
TSS_HKEY srk() const
Definition: tpm.h:66
Botan::TPM_Context::handle
TSS_HCONTEXT handle() const
Definition: tpm.h:65
TSPI_CHECK_SUCCESS
#define TSPI_CHECK_SUCCESS(expr)
Definition: tpm.cpp:68
Botan::TPM_PrivateKey::ctx
TPM_Context & ctx() const
Definition: tpm.h:142

## Member Function Documentation

std::string Botan::TPM_PrivateKey::algo_name | ( |  | ) | const
| inline override virtual

Get the name of the underlying public key scheme.

Returns
  name of the public key scheme

Implements Botan::Public_Key.

Definition at line 163 of file tpm.h.

163 { return "RSA"; } // ???

AlgorithmIdentifier Botan::TPM_PrivateKey::algorithm_identifier | ( |  | ) | const
| override virtual

Returns
  X.509 AlgorithmIdentifier for this key

Implements Botan::Public_Key.

Definition at line 346 of file tpm.cpp.

References Botan::Public_Key::get_oid(), and Botan::AlgorithmIdentifier::USE_NULL_PARAM.

347 {
348 return AlgorithmIdentifier(get_oid(),
349 AlgorithmIdentifier::USE_NULL_PARAM);
350 }
Botan::Public_Key::get_oid
virtual OID get_oid() const
Definition: pk_keys.cpp:30
Botan::AlgorithmIdentifier::USE_NULL_PARAM
Definition: alg_id.h:23

bool Botan::TPM_PrivateKey::check_key | ( | RandomNumberGenerator & | rng,
|  | bool | strong
| ) |  | const
| override virtual

Test the key values for consistency.

Parameters

  rng | rng to use
  strong | whether to perform strong and lengthy version of the test

Returns
  true if the test is passed

Implements Botan::Public_Key.

Definition at line 379 of file tpm.cpp.

380 {
381 return true; // TODO do a kat or pairwise check
382 }

std::unique_ptr< PK_Ops::Decryption > Botan::Private_Key::create_decryption_op | ( | RandomNumberGenerator & | rng,
|  | const std::string & | params,
|  | const std::string & | provider
| ) |  | const
| virtual inherited

This is an internal library function exposed on key types. In almost all cases applications should use wrappers in pubkey.h

Return an decryption operation for this key/params or throw

Parameters

  rng | a random number generator. The PK_Op may maintain a reference to the RNG and use it many times. The rng must outlive any operations which reference it.
  params | additional parameters
  provider | the provider to use

Reimplemented in Botan::RSA_PrivateKey, and Botan::ElGamal_PrivateKey.

Definition at line 102 of file pk_keys.cpp.

References Botan::Public_Key::algo_name().

Referenced by Botan::PK_Decryptor_EME::PK_Decryptor_EME().

105 {
106 throw Lookup_Error(algo_name() + " does not support decryption");
107 }
Botan::Public_Key::algo_name
virtual std::string algo_name() const =0

std::unique_ptr< PK_Ops::Encryption > Botan::Public_Key::create_encryption_op | ( | RandomNumberGenerator & | rng,
|  | const std::string & | params,
|  | const std::string & | provider
| ) |  | const
| virtual inherited

This is an internal library function exposed on key types. In almost all cases applications should use wrappers in pubkey.h

Return an encryption operation for this key/params or throw

Parameters

  rng | a random number generator. The PK_Op may maintain a reference to the RNG and use it many times. The rng must outlive any operations which reference it.
  params | additional parameters
  provider | the provider to use

Reimplemented in Botan::RSA_PublicKey, and Botan::ElGamal_PublicKey.

Definition at line 79 of file pk_keys.cpp.

References Botan::Public_Key::algo_name().

Referenced by Botan::PK_Encryptor_EME::PK_Encryptor_EME().

82 {
83 throw Lookup_Error(algo_name() + " does not support encryption");
84 }
Botan::Public_Key::algo_name
virtual std::string algo_name() const =0

std::unique_ptr< PK_Ops::KEM_Decryption > Botan::Private_Key::create_kem_decryption_op | ( | RandomNumberGenerator & | rng,
|  | const std::string & | params,
|  | const std::string & | provider
| ) |  | const
| virtual inherited

This is an internal library function exposed on key types. In almost all cases applications should use wrappers in pubkey.h

Return a KEM decryption operation for this key/params or throw

Parameters

  rng | a random number generator. The PK_Op may maintain a reference to the RNG and use it many times. The rng must outlive any operations which reference it.
  params | additional parameters
  provider | the provider to use

Reimplemented in Botan::RSA_PrivateKey, and Botan::McEliece_PrivateKey.

Definition at line 110 of file pk_keys.cpp.

References Botan::Public_Key::algo_name().

Referenced by Botan::PK_KEM_Decryptor::PK_KEM_Decryptor().

113 {
114 throw Lookup_Error(algo_name() + " does not support KEM decryption");
115 }
Botan::Public_Key::algo_name
virtual std::string algo_name() const =0

std::unique_ptr< PK_Ops::KEM_Encryption > Botan::Public_Key::create_kem_encryption_op | ( | RandomNumberGenerator & | rng,
|  | const std::string & | params,
|  | const std::string & | provider
| ) |  | const
| virtual inherited

This is an internal library function exposed on key types. In almost all cases applications should use wrappers in pubkey.h

Return a KEM encryption operation for this key/params or throw

Parameters

  rng | a random number generator. The PK_Op may maintain a reference to the RNG and use it many times. The rng must outlive any operations which reference it.
  params | additional parameters
  provider | the provider to use

Reimplemented in Botan::RSA_PublicKey, and Botan::McEliece_PublicKey.

Definition at line 87 of file pk_keys.cpp.

References Botan::Public_Key::algo_name().

Referenced by Botan::PK_KEM_Encryptor::PK_KEM_Encryptor().

90 {
91 throw Lookup_Error(algo_name() + " does not support KEM encryption");
92 }
Botan::Public_Key::algo_name
virtual std::string algo_name() const =0

std::unique_ptr< PK_Ops::Key_Agreement > Botan::Private_Key::create_key_agreement_op | ( | RandomNumberGenerator & | rng,
|  | const std::string & | params,
|  | const std::string & | provider
| ) |  | const
| virtual inherited

This is an internal library function exposed on key types. In almost all cases applications should use wrappers in pubkey.h

Return a key agreement operation for this key/params or throw

Parameters

  rng | a random number generator. The PK_Op may maintain a reference to the RNG and use it many times. The rng must outlive any operations which reference it.
  params | additional parameters
  provider | the provider to use

Reimplemented in Botan::ECDH_PrivateKey, Botan::Curve25519_PrivateKey, and Botan::DH_PrivateKey.

Definition at line 126 of file pk_keys.cpp.

References Botan::Public_Key::algo_name().

Referenced by Botan::PK_Key_Agreement::PK_Key_Agreement().

129 {
130 throw Lookup_Error(algo_name() + " does not support key agreement");
131 }
Botan::Public_Key::algo_name
virtual std::string algo_name() const =0

std::unique_ptr< PK_Ops::Signature > Botan::TPM_PrivateKey::create_signature_op | ( | RandomNumberGenerator & | rng,
|  | const std::string & | params,
|  | const std::string & | provider
| ) |  | const
| override virtual

This is an internal library function exposed on key types. In almost all cases applications should use wrappers in pubkey.h

Return a signature operation for this key/params or throw

Parameters

  rng | a random number generator. The PK_Op may maintain a reference to the RNG and use it many times. The rng must outlive any operations which reference it.
  params | additional parameters
  provider | the provider to use

Reimplemented from Botan::Private_Key.

Definition at line 446 of file tpm.cpp.

449 {
450 return std::unique_ptr<PK_Ops::Signature>(new TPM_Signing_Operation(*this, params));
451 }

std::unique_ptr< PK_Ops::Verification > Botan::Public_Key::create_verification_op | ( | const std::string & | params,
|  | const std::string & | provider
| ) |  | const
| virtual inherited

This is an internal library function exposed on key types. In almost all cases applications should use wrappers in pubkey.h

Return a verification operation for this key/params or throw

Parameters

  params | additional parameters
  provider | the provider to use

Reimplemented in Botan::XMSS_WOTS_PublicKey, Botan::XMSS_PublicKey, Botan::RSA_PublicKey, Botan::XMSS_WOTS_Addressed_PublicKey, Botan::GOST_3410_PublicKey, Botan::ECDSA_PublicKey, Botan::ECGDSA_PublicKey, Botan::ECKCDSA_PublicKey, and Botan::DSA_PublicKey.

Definition at line 95 of file pk_keys.cpp.

References Botan::Public_Key::algo_name().

Referenced by Botan::PK_Verifier::PK_Verifier().

97 {
98 throw Lookup_Error(algo_name() + " does not support verification");
99 }
Botan::Public_Key::algo_name
virtual std::string algo_name() const =0

TPM_Context& Botan::TPM_PrivateKey::ctx | ( |  | ) | const
| inline

Definition at line 142 of file tpm.h.

Referenced by register_key().

142 { return m_ctx; }

size_t Botan::TPM_PrivateKey::estimated_strength | ( |  | ) | const
| override virtual

Return the estimated strength of the underlying key against the best currently known attack. Note that this ignores anything but pure attacks against the key itself and do not take into account padding schemes, usage mistakes, etc which might reduce the strength. However it does suffice to provide an upper bound.

Returns
  estimated strength in bits

Implements Botan::Public_Key.

Definition at line 336 of file tpm.cpp.

References Botan::if_work_factor(), and key_length().

337 {
338 return if_work_factor(key_length());
339 }
Botan::TPM_PrivateKey::key_length
size_t key_length() const override
Definition: tpm.cpp:341
Botan::if_work_factor
size_t if_work_factor(size_t bits)
Definition: workfactor.cpp:19

std::vector< uint8_t > Botan::TPM_PrivateKey::export_blob | ( |  | ) | const

Definition at line 367 of file tpm.cpp.

References Botan::TPM_Context::handle().

368 {
369 return get_obj_attr(m_ctx.handle(), m_key,
370 TSS_TSPATTRIB_KEY_BLOB,
371 TSS_TSPATTRIB_KEYBLOB_BLOB);
372 }
Botan::TPM_Context::handle
TSS_HCONTEXT handle() const
Definition: tpm.h:65

std::string Botan::Private_Key::fingerprint | ( | const std::string & | alg = `"SHA"` | ) | const
| inherited

Returns
  Hash of the PKCS #8 encoding for this key object

Definition at line 57 of file pk_keys.cpp.

References Botan::HashFunction::create(), hash, Botan::hex_encode(), and Botan::Private_Key::private_key_bits().

Referenced by Botan::Certificate_Store_In_SQL::find_certs_for_key(), Botan::Certificate_Store_In_SQL::insert_key(), and Botan::Certificate_Store_In_SQL::remove_key().

58 {
59 secure_vector<uint8_t> buf = private_key_bits();
60 std::unique_ptr<HashFunction> hash(HashFunction::create(alg));
61 hash->update(buf);
62 const auto hex_print = hex_encode(hash->final());
63
64 std::string formatted_print;
65
66 for(size_t i = 0; i != hex_print.size(); i += 2)
67 {
68 formatted_print.push_back(hex_print[i]);
69 formatted_print.push_back(hex_print[i+1]);
70
71 if(i != hex_print.size() - 2)
72 formatted_print.push_back(':');
73 }
74
75 return formatted_print;
76 }
Botan::Private_Key::private_key_bits
virtual secure_vector< uint8_t > private_key_bits() const =0
Botan::HashFunction::create
static std::unique_ptr< HashFunction > create(const std::string &algo_spec, const std::string &provider="")
Definition: hash.cpp:93
Botan::hex_encode
void hex_encode(char output[], const uint8_t input[], size_t input_length, bool uppercase)
Definition: hex.cpp:14
hash
MechanismType hash
Definition: p11_mechanism.cpp:63

OID Botan::Public_Key::get_oid | ( |  | ) | const
| virtual inherited

Get the OID of the underlying public key scheme.

Returns
  OID of the public key scheme

Reimplemented in Botan::XMSS_WOTS_Addressed_PublicKey.

Definition at line 30 of file pk_keys.cpp.

References Botan::Public_Key::algo_name(), and Botan::OIDS::lookup().

Referenced by Botan::DL_Scheme_PublicKey::algorithm_identifier(), Botan::Curve25519_PublicKey::algorithm_identifier(), Botan::McEliece_PublicKey::algorithm_identifier(), Botan::RSA_PublicKey::algorithm_identifier(), Botan::GOST_3410_PublicKey::algorithm_identifier(), Botan::EC_PublicKey::algorithm_identifier(), algorithm_identifier(), and Botan::XMSS_WOTS_Addressed_PublicKey::get_oid().

31 {
32 try {
33 return OIDS::lookup(algo_name());
34 }
35 catch(Lookup_Error&)
36 {
37 throw Lookup_Error("PK algo " + algo_name() + " has no defined OIDs");
38 }
39 }
Botan::Public_Key::algo_name
virtual std::string algo_name() const =0
Botan::OIDS::lookup
std::string lookup(const OID &oid)
Definition: oids.cpp:18

TSS_HKEY Botan::TPM_PrivateKey::handle | ( |  | ) | const
| inline

Definition at line 144 of file tpm.h.

References m_key.

144 { return m_key; }

size_t Botan::TPM_PrivateKey::key_length | ( |  | ) | const
| override virtual

Return an integer value best approximating the length of the primary security parameter. For example for RSA this will be the size of the modulus, for ECDSA the size of the ECC group, and for McEliece the size of the code will be returned.

Implements Botan::Public_Key.

Definition at line 341 of file tpm.cpp.

References Botan::BigInt::bits().

Referenced by estimated_strength().

342 {
343 return get_n().bits();
344 }
Botan::BigInt::bits
size_t bits() const
Definition: bigint.cpp:184

virtual size_t Botan::Public_Key::message_part_size | ( |  | ) | const
| inline virtual inherited

Returns how large each of the message parts refered to by message_parts() is

This function is public but applications should have few reasons to ever call this.

Returns
  size of the message parts in bits

Reimplemented in Botan::GOST_3410_PublicKey, Botan::ECDSA_PublicKey, Botan::ECGDSA_PublicKey, Botan::ECKCDSA_PublicKey, and Botan::DSA_PublicKey.

Definition at line 114 of file pk_keys.h.

Referenced by Botan::PK_Signer::PK_Signer(), and Botan::PK_Verifier::PK_Verifier().

114 { return 0; }

virtual size_t Botan::Public_Key::message_parts | ( |  | ) | const
| inline virtual inherited

Returns more than 1 if the output of this algorithm (ciphertext, signature) should be treated as more than one value. This is used for algorithms like DSA and ECDSA, where the (r,s) output pair can be encoded as either a plain binary list or a TLV tagged DER encoding depending on the protocol.

This function is public but applications should have few reasons to ever call this.

Returns
  number of message parts

Reimplemented in Botan::GOST_3410_PublicKey, Botan::ECDSA_PublicKey, Botan::ECGDSA_PublicKey, Botan::ECKCDSA_PublicKey, and Botan::DSA_PublicKey.

Definition at line 103 of file pk_keys.h.

Referenced by Botan::X509_Object::check_signature(), Botan::choose_sig_format(), Botan::PK_Signer::PK_Signer(), and Botan::PK_Verifier::PK_Verifier().

103 { return 1; }

virtual AlgorithmIdentifier Botan::Private_Key::pkcs8_algorithm_identifier | ( |  | ) | const
| inline virtual inherited

Returns
  PKCS #8 AlgorithmIdentifier for this key Might be different from the X.509 identifier, but normally is not

Reimplemented in Botan::XMSS_WOTS_PrivateKey, Botan::GOST_3410_PrivateKey, and Botan::XMSS_WOTS_Addressed_PrivateKey.

Definition at line 188 of file pk_keys.h.

Referenced by Botan::Private_Key::private_key_info().

189 { return algorithm_identifier(); }
Botan::Public_Key::algorithm_identifier
virtual AlgorithmIdentifier algorithm_identifier() const =0

secure_vector< uint8_t > Botan::TPM_PrivateKey::private_key_bits | ( |  | ) | const
| override virtual

Returns
  BER encoded private key bits

Implements Botan::Private_Key.

Definition at line 362 of file tpm.cpp.

363 {
364 throw TPM_Error("Private key export not supported for TPM keys");
365 }

secure_vector< uint8_t > Botan::Private_Key::private_key_info | ( |  | ) | const
| inherited

Returns
  PKCS #8 private key encoding for this key object

Definition at line 41 of file pk_keys.cpp.

References Botan::DER_Encoder::encode(), Botan::DER_Encoder::end_cons(), Botan::DER_Encoder::get_contents(), Botan::OCTET_STRING, Botan::Private_Key::pkcs8_algorithm_identifier(), Botan::Private_Key::private_key_bits(), Botan::SEQUENCE, and Botan::DER_Encoder::start_cons().

Referenced by Botan::PKCS8::BER_encode(), Botan::PKCS8::BER_encode_encrypted_pbkdf_iter(), and Botan::PKCS8::BER_encode_encrypted_pbkdf_msec().

42 {
43 const size_t PKCS8_VERSION = 0;
44
45 return DER_Encoder()
46 .start_cons(SEQUENCE)
47 .encode(PKCS8_VERSION)
48 .encode(pkcs8_algorithm_identifier())
49 .encode(private_key_bits(), OCTET_STRING)
50 .end_cons()
51 .get_contents();
52 }
Botan::Private_Key::private_key_bits
virtual secure_vector< uint8_t > private_key_bits() const =0
Botan::OCTET_STRING
Definition: asn1_obj.h:35
Botan::Private_Key::pkcs8_algorithm_identifier
virtual AlgorithmIdentifier pkcs8_algorithm_identifier() const
Definition: pk_keys.h:188
Botan::SEQUENCE
Definition: asn1_obj.h:39

std::unique_ptr< Public_Key > Botan::TPM_PrivateKey::public_key | ( |  | ) | const

Returns a copy of the public key

Definition at line 374 of file tpm.cpp.

375 {
376 return std::unique_ptr<Public_Key>(new RSA_PublicKey(get_n(), get_e()));
377 }

std::vector< uint8_t > Botan::TPM_PrivateKey::public_key_bits | ( |  | ) | const
| override virtual

Returns
  BER encoded public key bits

Implements Botan::Public_Key.

Definition at line 352 of file tpm.cpp.

References Botan::DER_Encoder::encode(), Botan::DER_Encoder::end_cons(), Botan::DER_Encoder::get_contents_unlocked(), Botan::SEQUENCE, and Botan::DER_Encoder::start_cons().

353 {
354 return DER_Encoder()
355 .start_cons(SEQUENCE)
356 .encode(get_n())
357 .encode(get_e())
358 .end_cons()
359 .get_contents_unlocked();
360 }
Botan::SEQUENCE
Definition: asn1_obj.h:39

std::string Botan::TPM_PrivateKey::register_key | ( | TPM_Storage_Type | storage_type | ) |

If the key is not currently registered under a known UUID, generates a new random UUID and registers the key. Returns the access URL.

Definition at line 253 of file tpm.cpp.

References ctx(), Botan::TPM_Context::handle(), Botan::UUID::is_valid(), Botan::UUID::to_string(), TSPI_CHECK_SUCCESS, and Botan::User.

254 {
255 if(!m_uuid.is_valid())
256 {
257 TPM_RNG rng(ctx()); // use system_rng or arg RNG& instead?
258 m_uuid = UUID(rng);
259 m_storage = storage_type;
260
261 const TSS_UUID key_uuid = to_tss_uuid(m_uuid);
262 const TSS_FLAG key_ps_type =
263 (storage_type == TPM_Storage_Type::User) ? TSS_PS_TYPE_USER : TSS_PS_TYPE_SYSTEM;
264
265 const TSS_UUID srk_uuid = TSS_UUID_SRK;
266
267 TSPI_CHECK_SUCCESS(::Tspi_Context_RegisterKey(m_ctx.handle(),
268 m_key,
269 key_ps_type,
270 key_uuid,
271 TSS_PS_TYPE_SYSTEM,
272 srk_uuid));
273
274 }
275
276 // Presumably we could re-register in the other store and same UUID
277 // Doesn't seem like what is desired most of the time here
278 if(storage_type != m_storage)
279 {
280 throw TPM_Error("TPM key " + m_uuid.to_string() +
281 " already registered with different storage type");
282 }
283
284 return format_url(m_uuid, m_storage);
285 }
Botan::UUID::is_valid
bool is_valid() const
Definition: uuid.h:98
Botan::TPM_Context::handle
TSS_HCONTEXT handle() const
Definition: tpm.h:65
TSPI_CHECK_SUCCESS
#define TSPI_CHECK_SUCCESS(expr)
Definition: tpm.cpp:68
Botan::UUID::to_string
std::string to_string() const
Definition: uuid.h:77
Botan::TPM_Storage_Type::User
Botan::TPM_PrivateKey::ctx
TPM_Context & ctx() const
Definition: tpm.h:142

std::vector< std::string > Botan::TPM_PrivateKey::registered_keys | ( | TPM_Context & | ctx | ) |
| static

Definition at line 287 of file tpm.cpp.

References Botan::TPM_Context::handle(), and TSPI_CHECK_SUCCESS.

288 {
289 TSS_KM_KEYINFO2* key_info;
290 UINT32 key_info_size;
291
292 // TODO: does the PS type matter here at all?
293 TSPI_CHECK_SUCCESS(::Tspi_Context_GetRegisteredKeysByUUID2(ctx.handle(),
294 TSS_PS_TYPE_SYSTEM,
295 nullptr,
296 &key_info_size,
297 &key_info));
298
299 std::vector<std::string> r(key_info_size);
300
301 for(size_t i = 0; i != key_info_size; ++i)
302 {
303 r[i] = format_url(key_info[i].keyUUID, key_info[i].persistentStorageType);
304 }
305
306 // TODO: are we supposed to free this memory and if so how?
307 //TSPI_CHECK_SUCCESS(::Tspi_Context_FreeMemory(ctx.handle(), key_info));
308
309 return r;
310 }
Botan::TPM_Context::handle
TSS_HCONTEXT handle() const
Definition: tpm.h:65
TSPI_CHECK_SUCCESS
#define TSPI_CHECK_SUCCESS(expr)
Definition: tpm.cpp:68
Botan::TPM_PrivateKey::ctx
TPM_Context & ctx() const
Definition: tpm.h:142

std::vector< uint8_t > Botan::Public_Key::subject_public_key | ( |  | ) | const
| inherited

Returns
  X.509 subject key encoding for this key object

Definition at line 17 of file pk_keys.cpp.

References Botan::Public_Key::algorithm_identifier(), Botan::BIT_STRING, Botan::DER_Encoder::encode(), Botan::DER_Encoder::end_cons(), Botan::DER_Encoder::get_contents_unlocked(), Botan::Public_Key::public_key_bits(), Botan::SEQUENCE, and Botan::DER_Encoder::start_cons().

Referenced by Botan::X509::BER_encode(), and Botan::X509::PEM_encode().

18 {
19 return DER_Encoder()
20 .start_cons(SEQUENCE)
21 .encode(algorithm_identifier())
22 .encode(public_key_bits(), BIT_STRING)
23 .end_cons()
24 .get_contents_unlocked();
25 }
Botan::Public_Key::public_key_bits
virtual std::vector< uint8_t > public_key_bits() const =0
Botan::Public_Key::algorithm_identifier
virtual AlgorithmIdentifier algorithm_identifier() const =0
Botan::SEQUENCE
Definition: asn1_obj.h:39
Botan::BIT_STRING
Definition: asn1_obj.h:34

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

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