Change credential challenge to possession
Change-Id: Ib36ef7bfe8d879e0ae117f79a1aab52062184e68
diff --git a/src/detail/challenge-encoder.cpp b/src/detail/challenge-encoder.cpp
index 023b2c1..9ab567a 100644
--- a/src/detail/challenge-encoder.cpp
+++ b/src/detail/challenge-encoder.cpp
@@ -34,6 +34,15 @@
makeNonNegativeIntegerBlock(tlv::RemainingTries, request.challengeState->remainingTries));
response.push_back(
makeNonNegativeIntegerBlock(tlv::RemainingTime, request.challengeState->remainingTime.count()));
+ if (request.challengeState->challengeStatus == "need-proof") {
+ response.push_back(
+ makeStringBlock(tlv::ParameterKey, "nonce")
+ );
+ auto nonce = fromHex(request.challengeState->secrets.get("nonce", ""));
+ response.push_back(
+ makeBinaryBlock(tlv::ParameterValue, nonce->data(), 16)
+ );
+ }
}
if (!issuedCertName.empty()) {
response.push_back(makeNestedBlock(tlv::IssuedCertName, issuedCertName));
@@ -65,6 +74,16 @@
Block issuedCertNameBlock = data.get(tlv::IssuedCertName);
state.issuedCertName = Name(issuedCertNameBlock.blockFromValue());
}
+ if (data.find(tlv::ParameterKey) != data.elements_end() && readString(data.get(tlv::ParameterKey)) == "nonce") {
+ if (data.find(tlv::ParameterKey) == data.elements_end()) {
+ NDN_THROW(std::runtime_error("Parameter Key found, but no value found"));
+ }
+ Block nonceBlock = data.get(tlv::ParameterValue);
+ if (nonceBlock.value_size() != 16) {
+ NDN_THROW(std::runtime_error("Wrong nonce length"));
+ }
+ memcpy(state.nonce.data(), nonceBlock.value(), 16);
+ }
}
} // namespace ndncert