fix an error in sqlite storage
Change-Id: I911a6230745aaa5b6a8189c3c8131cabb78f2295
diff --git a/src/detail/ca-sqlite.cpp b/src/detail/ca-sqlite.cpp
index 6abedee..1cddfed 100644
--- a/src/detail/ca-sqlite.cpp
+++ b/src/detail/ca-sqlite.cpp
@@ -137,14 +137,15 @@
if (statement.step() == SQLITE_ROW) {
RequestState state;
+ state.requestId = requestId;
state.caPrefix = Name(statement.getBlock(1));
state.status = static_cast<Status>(statement.getInt(2));
state.cert = security::Certificate(statement.getBlock(4));
state.challengeType = statement.getString(5);
state.requestType = static_cast<RequestType>(statement.getInt(10));
std::memcpy(state.encryptionKey.data(), statement.getBlob(11), statement.getSize(11));
- state.encryptionIv.assign(statement.getBlob(12), statement.getBlob(12) + statement.getSize(12));
- state.decryptionIv.assign(statement.getBlob(13), statement.getBlob(13) + statement.getSize(13));
+ state.encryptionIv = std::vector<uint8_t>(statement.getBlob(12), statement.getBlob(12) + statement.getSize(12));
+ state.decryptionIv = std::vector<uint8_t>(statement.getBlob(13), statement.getBlob(13) + statement.getSize(13));
if (state.challengeType != "") {
ChallengeState challengeState(statement.getString(3), time::fromIsoString(statement.getString(7)),
statement.getInt(8), time::seconds(statement.getInt(9)),
@@ -179,8 +180,7 @@
if (request.challengeState) {
statement.bind(6, request.challengeType, SQLITE_TRANSIENT);
statement.bind(7, request.challengeState->challengeStatus, SQLITE_TRANSIENT);
- statement.bind(8, convertJson2String(request.challengeState->secrets),
- SQLITE_TRANSIENT);
+ statement.bind(8, convertJson2String(request.challengeState->secrets), SQLITE_TRANSIENT);
statement.bind(9, time::toIsoString(request.challengeState->timestamp), SQLITE_TRANSIENT);
statement.bind(10, request.challengeState->remainingTries);
statement.bind(11, request.challengeState->remainingTime.count());
@@ -241,8 +241,8 @@
state.cert = security::Certificate(statement.getBlock(5));
state.requestType = static_cast<RequestType>(statement.getInt(11));
std::memcpy(state.encryptionKey.data(), statement.getBlob(12), statement.getSize(12));
- state.encryptionIv.assign(statement.getBlob(13), statement.getBlob(13) + statement.getSize(13));
- state.decryptionIv.assign(statement.getBlob(14), statement.getBlob(14) + statement.getSize(14));
+ state.encryptionIv = std::vector<uint8_t>(statement.getBlob(13), statement.getBlob(13) + statement.getSize(13));
+ state.decryptionIv = std::vector<uint8_t>(statement.getBlob(14), statement.getBlob(14) + statement.getSize(14));
if (state.challengeType != "") {
ChallengeState challengeState(statement.getString(4), time::fromIsoString(statement.getString(8)),
statement.getInt(9), time::seconds(statement.getInt(10)),
@@ -262,7 +262,7 @@
R"_SQLTEXT_(SELECT id, request_id, ca_name, status,
challenge_status, cert_request, challenge_type, challenge_secrets,
challenge_tp, remaining_tries, remaining_time, request_type,
- encryption_key, aes_block_counter
+ encryption_key, encryption_iv, decryption_iv
FROM RequestStates WHERE ca_name = ?)_SQLTEXT_");
statement.bind(1, caName.wireEncode(), SQLITE_TRANSIENT);
@@ -275,8 +275,8 @@
state.cert = security::Certificate(statement.getBlock(5));
state.requestType = static_cast<RequestType>(statement.getInt(11));
std::memcpy(state.encryptionKey.data(), statement.getBlob(12), statement.getSize(12));
- state.encryptionIv.assign(statement.getBlob(13), statement.getBlob(13) + statement.getSize(13));
- state.decryptionIv.assign(statement.getBlob(14), statement.getBlob(14) + statement.getSize(14));
+ state.encryptionIv = std::vector<uint8_t>(statement.getBlob(13), statement.getBlob(13) + statement.getSize(13));
+ state.decryptionIv = std::vector<uint8_t>(statement.getBlob(14), statement.getBlob(14) + statement.getSize(14));
if (state.challengeType != "") {
ChallengeState challengeState(statement.getString(4), time::fromIsoString(statement.getString(8)),
statement.getInt(9), time::seconds(statement.getInt(10)),
diff --git a/tests/unit-tests/bench.t.cpp b/tests/unit-tests/bench.t.cpp
index 54fc7d7..44e5ac5 100644
--- a/tests/unit-tests/bench.t.cpp
+++ b/tests/unit-tests/bench.t.cpp
@@ -24,8 +24,6 @@
#include "requester.hpp"
#include "test-common.hpp"
-#include <iostream>
-
namespace ndn {
namespace ndncert {
namespace tests {
diff --git a/tests/unit-tests/ca-sqlite.t.cpp b/tests/unit-tests/ca-sqlite.t.cpp
index e338b63..78077db 100644
--- a/tests/unit-tests/ca-sqlite.t.cpp
+++ b/tests/unit-tests/ca-sqlite.t.cpp
@@ -44,6 +44,9 @@
request1.requestId = requestId;
request1.requestType = RequestType::NEW;
request1.cert = cert1;
+ request1.encryptionKey = {{102}};
+ request1.decryptionIv.assign({1,2,3,4,5,6,7,8,9,10,11,12});
+ request1.decryptionIv.assign({2,3,4,5,6,7,8,9,10,11,12,13});
storage.addRequest(request1);
// get operation
@@ -53,6 +56,10 @@
BOOST_CHECK_EQUAL(request1.caPrefix, result.caPrefix);
BOOST_CHECK_EQUAL_COLLECTIONS(request1.encryptionKey.begin(), request1.encryptionKey.end(),
result.encryptionKey.begin(), result.encryptionKey.end());
+ BOOST_CHECK_EQUAL_COLLECTIONS(request1.encryptionIv.begin(), request1.encryptionIv.end(),
+ result.encryptionIv.begin(), result.encryptionIv.end());
+ BOOST_CHECK_EQUAL_COLLECTIONS(request1.decryptionIv.begin(), request1.decryptionIv.end(),
+ result.decryptionIv.begin(), result.decryptionIv.end());
// update operation
RequestState request2;
@@ -65,11 +72,17 @@
secret.add("code", "1234");
request2.challengeState = ChallengeState("test", time::system_clock::now(), 3,
time::seconds(3600), std::move(secret));
+ request2.decryptionIv.assign({1,2,3,4,5,6,7,8,9,10,11,14});
+ request2.decryptionIv.assign({2,3,4,5,6,7,8,9,10,11,12,15});
storage.updateRequest(request2);
result = storage.getRequest(requestId);
BOOST_CHECK_EQUAL(request2.cert, result.cert);
BOOST_CHECK(request2.status == result.status);
BOOST_CHECK_EQUAL(request2.caPrefix, result.caPrefix);
+ BOOST_CHECK_EQUAL_COLLECTIONS(request2.encryptionIv.begin(), request2.encryptionIv.end(),
+ result.encryptionIv.begin(), result.encryptionIv.end());
+ BOOST_CHECK_EQUAL_COLLECTIONS(request2.decryptionIv.begin(), request2.decryptionIv.end(),
+ result.decryptionIv.begin(), result.decryptionIv.end());
// another add operation
auto identity2 = addIdentity(Name("/ndn/site2"));
diff --git a/tools/ndncert-client.cpp b/tools/ndncert-client.cpp
index 738c019..2402833 100644
--- a/tools/ndncert-client.cpp
+++ b/tools/ndncert-client.cpp
@@ -155,7 +155,7 @@
std::cerr << "There is no available challenge provided by the CA. Exit" << std::endl;
exit(1);
}
- else if (challengeList.size() > 1) {
+ else if (challengeList.size() >= 1) {
std::cerr << "\n***************************************\n"
<< "Step " << nStep++
<< ": CHALLENGE SELECTION" << std::endl;
@@ -408,7 +408,7 @@
int validityPeriod = captureValidityPeriod();
auto now = time::system_clock::now();
std::cerr << "The validity period of your certificate will be: " << validityPeriod << " hours" << std::endl;
- requesterState =std::make_shared<RequestState>(keyChain, profile, RequestType::NEW);
+ requesterState = std::make_shared<RequestState>(keyChain, profile, RequestType::NEW);
auto interest = Requester::genNewInterest(*requesterState, identityName, now, now + time::hours(validityPeriod));
if (interest != nullptr) {
face.expressInterest(*interest, bind(&newCb, _2), bind(&onNackCb), bind(&timeoutCb));