place encoding for NEW/REVOKE/CHALLENGE in protocol detail file

Change-Id: I37d421bf256564c2acf9246983001a525c510e1f
diff --git a/src/requester.cpp b/src/requester.cpp
index 7bf9594..165ad93 100644
--- a/src/requester.cpp
+++ b/src/requester.cpp
@@ -181,28 +181,21 @@
   processIfError(reply);
 
   auto contentTLV = reply.getContent();
-  contentTLV.parse();
+  const auto content = NEW_RENEW_REVOKE::decodeDataContent(contentTLV);
 
   // ECDH
-  const auto& peerKeyBase64Str = readString(contentTLV.get(tlv_ecdh_pub));
-  const auto& saltStr = readString(contentTLV.get(tlv_salt));
-  uint64_t saltInt = std::stoull(saltStr);
-  state.m_ecdh.deriveSecret(peerKeyBase64Str);
+  uint64_t saltInt = std::stoull(content.salt);
+  state.m_ecdh.deriveSecret(content.ecdhKey);
 
   // HKDF
   hkdf(state.m_ecdh.context->sharedSecret, state.m_ecdh.context->sharedSecretLen,
        (uint8_t*)&saltInt, sizeof(saltInt), state.m_aesKey, sizeof(state.m_aesKey));
 
   // update state
-  state.m_status = static_cast<Status>(readNonNegativeInteger(contentTLV.get(tlv_status)));
-  state.m_requestId = readString(contentTLV.get(tlv_request_id));
-  std::list<std::string> challengeList;
-  for (auto const& element : contentTLV.elements()) {
-    if (element.type() == tlv_challenge) {
-      challengeList.push_back(readString(element));
-    }
-  }
-  return challengeList;
+  state.m_status = content.requestStatus;
+  state.m_requestId = content.requestId;
+
+  return content.challenges;
 }
 
 std::vector<std::tuple<std::string, std::string>>
@@ -254,19 +247,16 @@
   processIfError(reply);
   auto result = decodeBlockWithAesGcm128(reply.getContent(), state.m_aesKey, (const uint8_t*)"test", strlen("test"));
   Block contentTLV = makeBinaryBlock(tlv_encrypted_payload, result.data(), result.size());
-  contentTLV.parse();
+  auto decoded = CHALLENGE::decodeDataPayload(contentTLV);
 
   // update state
-  state.m_status = static_cast<Status>(readNonNegativeInteger(contentTLV.get(tlv_status)));
-  state.m_challengeStatus = readString(contentTLV.get(tlv_challenge_status));
-  state.m_remainingTries = readNonNegativeInteger(contentTLV.get(tlv_remaining_tries));
-  state.m_freshBefore = time::system_clock::now() +
-                  time::seconds(readNonNegativeInteger(contentTLV.get(tlv_remaining_time)));
+  state.m_status = decoded.status;
+  state.m_challengeStatus = decoded.challengeStatus;
+  state.m_remainingTries = decoded.remainingTries;
+  state.m_freshBefore = time::system_clock::now() + decoded.remainingTime;
 
-  if (contentTLV.find(tlv_issued_cert_name) != contentTLV.elements_end()) {
-    Block issuedCertNameBlock = contentTLV.get(tlv_issued_cert_name);
-    issuedCertNameBlock.parse();
-    state.m_issuedCertName.wireDecode(issuedCertNameBlock.get(tlv::Name));
+  if (decoded.issuedCertName) {
+    state.m_issuedCertName = *decoded.issuedCertName;
   }
 }