refactor the HKDF State class
Change-Id: I819c9a8dcb7b3b13c1a63269a18ceadfa2b80c50
diff --git a/src/detail/new-renew-revoke-encoder.cpp b/src/detail/new-renew-revoke-encoder.cpp
index 77717bd..27c630e 100644
--- a/src/detail/new-renew-revoke-encoder.cpp
+++ b/src/detail/new-renew-revoke-encoder.cpp
@@ -29,7 +29,8 @@
NDN_LOG_INIT(ndncert.encoding.new_renew_revoke);
Block
-NewRenewRevokeEncoder::encodeApplicationParameters(RequestType requestType, const std::string& ecdhPub, const security::Certificate& certRequest)
+NewRenewRevokeEncoder::encodeApplicationParameters(RequestType requestType, const std::vector<uint8_t>& ecdhPub,
+ const security::Certificate& certRequest)
{
Block request = makeEmptyBlock(ndn::tlv::ApplicationParameters);
std::stringstream ss;
@@ -43,7 +44,7 @@
return request;
}
- request.push_back(makeStringBlock(tlv::EcdhPub, ecdhPub));
+ request.push_back(makeBinaryBlock(tlv::EcdhPub, ecdhPub.data(), ecdhPub.size()));
if (requestType == RequestType::NEW || requestType == RequestType::RENEW) {
request.push_back(makeNestedBlock(tlv::CertRequest, certRequest));
} else if (requestType == RequestType::REVOKE) {
@@ -54,12 +55,16 @@
}
void
-NewRenewRevokeEncoder::decodeApplicationParameters(const Block& payload, RequestType requestType, std::string& ecdhPub,
+NewRenewRevokeEncoder::decodeApplicationParameters(const Block& payload, RequestType requestType,
+ std::vector<uint8_t>& ecdhPub,
shared_ptr<security::Certificate>& clientCert)
{
payload.parse();
- ecdhPub = readString(payload.get(tlv::EcdhPub));
+ const auto& ecdhBlock = payload.get(tlv::EcdhPub);
+ ecdhPub.resize(ecdhBlock.value_size());
+ std::memcpy(ecdhPub.data(), ecdhBlock.value(), ecdhBlock.value_size());
+
Block requestPayload;
if (requestType == RequestType::NEW) {
requestPayload = payload.get(tlv::CertRequest);
@@ -74,12 +79,12 @@
}
Block
-NewRenewRevokeEncoder::encodeDataContent(const std::string& ecdhKey, const std::array<uint8_t, 32>& salt,
+NewRenewRevokeEncoder::encodeDataContent(const std::vector<uint8_t>& ecdhKey, const std::array<uint8_t, 32>& salt,
const CaState& request,
const std::list<std::string>& challenges)
{
Block response = makeEmptyBlock(ndn::tlv::Content);
- response.push_back(makeStringBlock(tlv::EcdhPub, ecdhKey));
+ response.push_back(makeBinaryBlock(tlv::EcdhPub, ecdhKey.data(), ecdhKey.size()));
response.push_back(makeBinaryBlock(tlv::Salt, salt.data(), salt.size()));
response.push_back(makeBinaryBlock(tlv::RequestId, request.m_requestId.data(), request.m_requestId.size()));
response.push_back(makeNonNegativeIntegerBlock(tlv::Status, static_cast<size_t>(request.m_status)));
@@ -90,19 +95,21 @@
return response;
}
-NewRenewRevokeEncoder::DecodedData
-NewRenewRevokeEncoder::decodeDataContent(const Block& content)
+std::list<std::string>
+NewRenewRevokeEncoder::decodeDataContent(const Block& content, std::vector<uint8_t>& ecdhKey,
+ std::array<uint8_t, 32>& salt, RequestID& requestId, Status& status)
{
content.parse();
- const auto& requestStatus = static_cast<Status>(readNonNegativeInteger(content.get(tlv::Status)));
- const auto& ecdhKey = readString(content.get(tlv::EcdhPub));
+ status = static_cast<Status>(readNonNegativeInteger(content.get(tlv::Status)));
+
+ const auto& ecdhBlock = content.get(tlv::EcdhPub);
+ ecdhKey.resize(ecdhBlock.value_size());
+ std::memcpy(ecdhKey.data(), ecdhBlock.value(), ecdhBlock.value_size());
const auto& saltBlock = content.get(tlv::Salt);
- std::array<uint8_t, 32> salt;
std::memcpy(salt.data(), saltBlock.value(), saltBlock.value_size());
const auto& requestIdBlock = content.get(tlv::RequestId);
- RequestID requestId;
std::memcpy(requestId.data(), requestIdBlock.value(), requestIdBlock.value_size());
std::list<std::string> challenges;
@@ -111,7 +118,7 @@
challenges.push_back(readString(element));
}
}
- return DecodedData{ecdhKey, salt, requestId, requestStatus, challenges};
+ return challenges;
}
} // namespace ndncert