29 const uint8_t* derPointer = keyDer;
30 m_privateKey = d2i_RSAPrivateKey(NULL, &derPointer, keyDerLength);
32 throw Error(
"RsaPrivateKey constructor: Error decoding private key DER");
38 RSA_free(m_privateKey);
51 SecTpmMemory::~SecTpmMemory()
56 SecTpmMemory::setKeyPairForKeyName(
const Name& keyName,
57 const uint8_t* publicKeyDer,
size_t publicKeyDerLength,
58 const uint8_t* privateKeyDer,
size_t privateKeyDerLength)
60 m_publicKeyStore[keyName.
toUri()] = make_shared<PublicKey>(publicKeyDer, publicKeyDerLength);
61 m_privateKeyStore[keyName.
toUri()] = make_shared<RsaPrivateKey>(privateKeyDer,
66 SecTpmMemory::generateKeyPairInTpm(
const Name& keyName,
KeyType keyType,
int keySize)
68 throw Error(
"SecTpmMemory::generateKeyPair not implemented");
72 SecTpmMemory::deleteKeyPairInTpm(
const Name& keyName)
74 throw Error(
"SecTpmMemory::deleteKeyPairInTpm not implemented");
78 SecTpmMemory::exportPrivateKeyPkcs1FromTpm(
const Name& keyName)
80 return shared_ptr<Buffer>();
84 SecTpmMemory::importPrivateKeyPkcs1IntoTpm(
const Name& keyName,
const uint8_t* buf,
size_t size)
90 SecTpmMemory::importPublicKeyPkcs1IntoTpm(
const Name& keyName,
const uint8_t* buf,
size_t size)
96 SecTpmMemory::getPublicKeyFromTpm(
const Name& keyName)
98 PublicKeyStore::iterator publicKey = m_publicKeyStore.find(keyName.
toUri());
99 if (publicKey == m_publicKeyStore.end())
100 throw Error(
string(
"MemoryPrivateKeyStorage: Cannot find public key ") + keyName.
toUri());
101 return publicKey->second;
105 SecTpmMemory::signInTpm(
const uint8_t* data,
size_t dataLength,
110 throw Error(
"Unsupported digest algorithm.");
113 PrivateKeyStore::iterator privateKey = m_privateKeyStore.find(keyName.
toUri());
114 if (privateKey == m_privateKeyStore.end())
115 throw Error(
string(
"MemoryPrivateKeyStorage: Cannot find private key ") + keyName.
toUri());
117 uint8_t digest[SHA256_DIGEST_LENGTH];
119 SHA256_Init(&sha256);
120 SHA256_Update(&sha256, data, dataLength);
121 SHA256_Final(digest,& sha256);
123 BufferPtr signatureBuffer = make_shared<Buffer>();
124 signatureBuffer->resize(RSA_size(privateKey->second->getPrivateKey()));
126 unsigned int signatureBitsLength;
127 if (!RSA_sign(NID_sha256, digest,
sizeof(digest),
128 signatureBuffer->buf(),
129 &signatureBitsLength,
130 privateKey->second->getPrivateKey()))
132 throw Error(
"Error in RSA_sign");
139 SecTpmMemory::decryptInTpm(
const uint8_t* data,
size_t dataLength,
140 const Name& keyName,
bool isSymmetric)
142 throw Error(
"MemoryPrivateKeyStorage::decrypt not implemented");
146 SecTpmMemory::encryptInTpm(
const uint8_t* data,
size_t dataLength,
147 const Name& keyName,
bool isSymmetric)
149 throw Error(
"MemoryPrivateKeyStorage::encrypt not implemented");
153 SecTpmMemory::generateSymmetricKeyInTpm(
const Name& keyName,
KeyType keyType,
int keySize)
155 throw Error(
"MemoryPrivateKeyStorage::generateKey not implemented");
159 SecTpmMemory::doesKeyExistInTpm(
const Name& keyName,
KeyClass keyClass)
162 return m_publicKeyStore.find(keyName.
toUri()) != m_publicKeyStore.end();
164 return m_privateKeyStore.find(keyName.
toUri()) != m_privateKeyStore.end();
171 SecTpmMemory::generateRandomBlock(uint8_t* res,
size_t size)
175 CryptoPP::AutoSeededRandomPool rng;
176 rng.GenerateBlock(res, size);
179 catch (CryptoPP::Exception& e)
ptr_lib::shared_ptr< Buffer > BufferPtr
Class representing wire element of the NDN packet.
std::string toUri() const
Encode this name as a URI.
ptr_lib::shared_ptr< const Buffer > ConstBufferPtr
RsaPrivateKey(const uint8_t *keyDer, size_t keyDerLength)
A Name holds an array of Name::Component and represents an NDN name.
RsaPrivateKey is a simple class to hold an RSA private key.
ConstBufferPtr sha256(const uint8_t *data, size_t dataLength)
Compute the sha-256 digest of data.