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));