Adding Encryptor class to encrypt content and place in Data packets.
Change-Id: Ie77fd51b58091bbbb182ab9197a58a55b183654c
Refs: #3014
diff --git a/src/encrypted-content.cpp b/src/encrypted-content.cpp
index 29f8ceb..3e0879f 100644
--- a/src/encrypted-content.cpp
+++ b/src/encrypted-content.cpp
@@ -20,13 +20,15 @@
}
EncryptedContent::EncryptedContent(tlv::AlgorithmTypeValue type, const KeyLocator& keyLocator,
- ConstBufferPtr payload, ConstBufferPtr iv)
+ const uint8_t* payload, size_t payloadLen,
+ const uint8_t* iv, size_t ivLen)
: m_type(type)
, m_hasKeyLocator(true)
, m_keyLocator(keyLocator)
- , m_payload(payload)
- , m_iv(iv)
+ , m_payload(payload, payloadLen)
{
+ if (iv != nullptr && ivLen != 0)
+ m_iv = Buffer(iv, ivLen);
}
EncryptedContent::EncryptedContent(const Block& block)
@@ -59,26 +61,26 @@
}
void
-EncryptedContent::setInitialVector(ConstBufferPtr iv)
+EncryptedContent::setInitialVector(const uint8_t* iv, size_t ivLen)
{
m_wire.reset();
- m_iv = iv;
+ m_iv = Buffer(iv, ivLen);
}
-ConstBufferPtr
+const Buffer&
EncryptedContent::getInitialVector() const
{
return m_iv;
}
void
-EncryptedContent::setPayload(ConstBufferPtr payload)
+EncryptedContent::setPayload(const uint8_t* payload, size_t payloadLen)
{
m_wire.reset();
- m_payload = payload;
+ m_payload = Buffer(payload, payloadLen);
}
-ConstBufferPtr
+const Buffer&
EncryptedContent::getPayload() const
{
return m_payload;
@@ -90,13 +92,14 @@
{
size_t totalLength = 0;
- if (m_payload != nullptr)
- totalLength += block.prependByteArrayBlock(tlv::EncryptedPayload, m_payload->buf(), m_payload->size());
+ if (m_payload.size() != 0)
+ totalLength += block.prependByteArrayBlock(tlv::EncryptedPayload, m_payload.buf(), m_payload.size());
else
throw Error("EncryptedContent does not have a payload");
- if (m_iv != nullptr)
- totalLength += block.prependByteArrayBlock(tlv::InitialVector, m_iv->buf(), m_iv->size());
+ if (m_iv.size() != 0) {
+ totalLength += block.prependByteArrayBlock(tlv::InitialVector, m_iv.buf(), m_iv.size());
+ }
if (m_type != -1)
totalLength += prependNonNegativeIntegerBlock(block, tlv::EncryptionAlgorithm, m_type);
@@ -162,14 +165,14 @@
throw Error("EncryptedContent does not have encryption algorithm");
if (it != m_wire.elements_end() && it->type() == tlv::InitialVector) {
- m_iv = make_shared<Buffer>(it->value_begin(), it->value_end());
+ m_iv = Buffer(it->value_begin(), it->value_end());
it++;
}
else
- m_iv = nullptr;
+ m_iv = Buffer();
if (it != m_wire.elements_end() && it->type() == tlv::EncryptedPayload) {
- m_payload = make_shared<Buffer>(it->value_begin(), it->value_end());
+ m_payload = Buffer(it->value_begin(), it->value_end());
it++;
}
else