26#include <boost/lexical_cast.hpp>
30Tpm::Tpm(
const std::string& locator, unique_ptr<BackEnd> backEnd)
32 , m_backEnd(
std::move(backEnd))
39Tpm::hasKey(
const Name& keyName)
const
41 return m_backEnd->hasKey(keyName);
45Tpm::createKey(
const Name& identityName,
const KeyParams& params)
47 auto keyHandle = m_backEnd->createKey(identityName, params);
48 auto keyName = keyHandle->getKeyName();
49 m_keys[keyName] = std::move(keyHandle);
54Tpm::deleteKey(
const Name& keyName)
56 if (
auto it = m_keys.find(keyName); it != m_keys.end())
59 m_backEnd->deleteKey(keyName);
63Tpm::getPublicKey(
const Name& keyName)
const
73 return key ? key->
sign(digestAlgorithm,
bufs) :
nullptr;
77Tpm::verify(
const InputBuffers&
bufs, span<const uint8_t>
sig,
const Name& keyName,
82 return boost::logic::indeterminate;
88Tpm::decrypt(span<const uint8_t> buf,
const Name& keyName)
const
91 return key ? key->
decrypt(buf) :
nullptr;
95Tpm::exportPrivateKey(
const Name& keyName,
const char* pw,
size_t pwLen)
const
97 return m_backEnd->exportKey(keyName, pw, pwLen);
101Tpm::importPrivateKey(
const Name& keyName, span<const uint8_t> pkcs8,
const char* pw,
size_t pwLen)
103 m_backEnd->importKey(keyName, pkcs8, pw, pwLen);
107Tpm::importPrivateKey(
const Name& keyName, shared_ptr<transform::PrivateKey> key)
109 m_backEnd->importKey(keyName, std::move(key));
113Tpm::findKey(
const Name& keyName)
const
115 if (
auto it = m_keys.find(keyName); it != m_keys.end())
116 return it->second.get();
118 auto handle = m_backEnd->getKeyHandle(keyName);
119 if (handle ==
nullptr)
122 const KeyHandle* key = handle.get();
123 m_keys[keyName] = std::move(handle);
Base class for key parameters.
Represents an absolute name.
Abstraction of TPM key handle.
ConstBufferPtr derivePublicKey() const
ConstBufferPtr decrypt(span< const uint8_t > cipherText) const
Return plain text content decrypted from cipherText using this key.
bool verify(DigestAlgorithm digestAlgorithm, const InputBuffers &bufs, span< const uint8_t > sig) const
Verify the signature sig over bufs using this key and digestAlgorithm.
ConstBufferPtr sign(DigestAlgorithm digestAlgorithm, const InputBuffers &bufs) const
Generate a digital signature for bufs using this key with digestAlgorithm.
std::shared_ptr< const Buffer > ConstBufferPtr
span< const uint8_t > sig