data: Optimize Data signing
As of this commit, KeyChain::sign pre-allocates EncodingBuffer, requests
unsigned portion of Data using Data::wireEncode(EncodingBuffer, true),
and then appends the resulting signature and prepends Data packet
header. This way there is no extra memory allocation after Data packet
is signed.
Change-Id: I670e9a2f1d6f5e9b049f41b47f011af384f32c95
diff --git a/src/security/key-chain.hpp b/src/security/key-chain.hpp
index dcf2079..7c95e14 100644
--- a/src/security/key-chain.hpp
+++ b/src/security/key-chain.hpp
@@ -871,10 +871,13 @@
const Name& keyName, DigestAlgorithm digestAlgorithm)
{
data.setSignature(signature);
- data.setSignatureValue(m_tpm->signInTpm(data.wireEncode().value(),
- data.wireEncode().value_size() -
- data.getSignature().getValue().size(),
- keyName, digestAlgorithm));
+
+ EncodingBuffer encoder;
+ data.wireEncode(encoder, true);
+
+ Block signatureValue = m_tpm->signInTpm(encoder.buf(), encoder.size(),
+ keyName, digestAlgorithm);
+ data.wireEncode(encoder, signatureValue);
}
inline void