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