place encoding for NEW/REVOKE/CHALLENGE in protocol detail file
Change-Id: I37d421bf256564c2acf9246983001a525c510e1f
diff --git a/src/protocol-detail/challenge.cpp b/src/protocol-detail/challenge.cpp
index 85875fd..847f7db 100644
--- a/src/protocol-detail/challenge.cpp
+++ b/src/protocol-detail/challenge.cpp
@@ -35,6 +35,23 @@
return response;
}
+CHALLENGE::DecodedData
+CHALLENGE::decodeDataPayload(const Block& data){
+ data.parse();
+ Status status = static_cast<Status>(readNonNegativeInteger(data.get(tlv_status)));
+ std::string challengeStatus = readString(data.get(tlv_challenge_status));
+ size_t remainingTries = readNonNegativeInteger(data.get(tlv_remaining_tries));
+ time::seconds remainingTime = time::seconds(readNonNegativeInteger(data.get(tlv_remaining_time)));
+
+ if (data.find(tlv_issued_cert_name) != data.elements_end()) {
+ Block issuedCertNameBlock = data.get(tlv_issued_cert_name);
+ issuedCertNameBlock.parse();
+ return DecodedData{status, challengeStatus, remainingTries, remainingTime, Name(issuedCertNameBlock.get(tlv::Name))};
+ }
+
+ return DecodedData{status, challengeStatus, remainingTries, remainingTime, nullopt};
+}
+
} // namespace ndncert
} // namespace ndn
diff --git a/src/protocol-detail/challenge.hpp b/src/protocol-detail/challenge.hpp
index aafcd42..8078237 100644
--- a/src/protocol-detail/challenge.hpp
+++ b/src/protocol-detail/challenge.hpp
@@ -30,6 +30,17 @@
public:
static Block
encodeDataPayload(const RequestState& request);
+
+ struct DecodedData{
+ Status status;
+ std::string challengeStatus;
+ size_t remainingTries;
+ time::seconds remainingTime;
+ optional<Name> issuedCertName;
+ };
+
+ static DecodedData
+ decodeDataPayload(const Block& data);
};
} // namespace ndncert
diff --git a/src/protocol-detail/new-renew-revoke.cpp b/src/protocol-detail/new-renew-revoke.cpp
index 0a941b1..6cae7ff 100644
--- a/src/protocol-detail/new-renew-revoke.cpp
+++ b/src/protocol-detail/new-renew-revoke.cpp
@@ -28,7 +28,7 @@
namespace ndn {
namespace ndncert {
-_LOG_INIT(ndncert.client);
+_LOG_INIT(ndncert.encoding.new_renew_revoke);
Block
NEW_RENEW_REVOKE::encodeApplicationParameters(RequestType requestType, const std::string& ecdhPub, const security::v2::Certificate& certRequest)
@@ -55,6 +55,25 @@
return request;
}
+void
+NEW_RENEW_REVOKE::decodeApplicationParameters(const Block& payload, RequestType requestType, std::string& ecdhPub,
+ shared_ptr<security::v2::Certificate>& clientCert) {
+ payload.parse();
+
+ ecdhPub = readString(payload.get(tlv_ecdh_pub));
+ Block requestPayload;
+ if (requestType == RequestType::NEW) {
+ requestPayload = payload.get(tlv_cert_request);
+ }
+ else if (requestType == RequestType::REVOKE) {
+ requestPayload = payload.get(tlv_cert_to_revoke);
+ }
+ requestPayload.parse();
+
+ security::v2::Certificate cert = security::v2::Certificate(requestPayload.get(tlv::Data));
+ clientCert = make_shared<security::v2::Certificate>(cert);
+}
+
Block
NEW_RENEW_REVOKE::encodeDataContent(const std::string& ecdhKey, const std::string& salt,
const RequestState& request,
@@ -72,5 +91,22 @@
return response;
}
+NEW_RENEW_REVOKE::DecodedData
+NEW_RENEW_REVOKE::decodeDataContent(const Block& content)
+{
+ content.parse();
+ const auto& ecdhKey = readString(content.get(tlv_ecdh_pub));
+ const auto& salt = readString(content.get(tlv_salt));
+ const auto& requestStatus = static_cast<Status>(readNonNegativeInteger(content.get(tlv_status)));
+ const auto& requestId = readString(content.get(tlv_request_id));
+ std::list<std::string> challenges;
+ for (auto const& element : content.elements()) {
+ if (element.type() == tlv_challenge) {
+ challenges.push_back(readString(element));
+ }
+ }
+ return DecodedData{ecdhKey, salt, requestId, requestStatus, challenges};
+}
+
} // namespace ndncert
} // namespace ndn
\ No newline at end of file
diff --git a/src/protocol-detail/new-renew-revoke.hpp b/src/protocol-detail/new-renew-revoke.hpp
index aac51d2..4c9cb18 100644
--- a/src/protocol-detail/new-renew-revoke.hpp
+++ b/src/protocol-detail/new-renew-revoke.hpp
@@ -31,10 +31,22 @@
static Block
encodeApplicationParameters(RequestType requestType, const std::string& ecdhPub, const security::v2::Certificate& certRequest);
+ static void
+ decodeApplicationParameters(const Block& block, RequestType requestType, std::string& ecdhPub, shared_ptr<security::v2::Certificate>& certRequest);
+
static Block
encodeDataContent(const std::string& ecdhKey, const std::string& salt,
const RequestState& request,
const std::list<std::string>& challenges);
+ struct DecodedData {
+ std::string ecdhKey;
+ std::string salt;
+ std::string requestId;
+ Status requestStatus;
+ std::list<std::string> challenges;
+ };
+ static DecodedData
+ decodeDataContent(const Block& content);
};
} // namespace ndncert