encryptor: Properly handle KEK fetching notification
Change-Id: Id65b58d4a24cd79015fa5a6ab38994bb873af31f
Refs: #4669
diff --git a/src/encryptor.cpp b/src/encryptor.cpp
index 0472e1e..eb6c486 100644
--- a/src/encryptor.cpp
+++ b/src/encryptor.cpp
@@ -153,7 +153,9 @@
m_kekPendingInterest = nullptr;
// @todo verify if the key is legit
m_kek = kek;
- makeAndPublishCkData(onFailure);
+ if (makeAndPublishCkData(onFailure)) {
+ onReady();
+ }
// otherwise, failure has been already declared
},
[=] (const Interest& i, const lp::Nack& nack) {
@@ -189,7 +191,7 @@
});
}
-void
+bool
Encryptor::makeAndPublishCkData(const ErrorCallback& onFailure)
{
try {
@@ -207,9 +209,11 @@
m_ims.insert(*ckData);
NDN_LOG_DEBUG("Publishing CK data: " << ckData->getName());
+ return true;
}
catch (const std::runtime_error& error) {
onFailure(ErrorCode::EncryptionFailure, "Failed to encrypt generated CK with KEK " + m_kek->getName().toUri());
+ return false;
}
}
diff --git a/src/encryptor.hpp b/src/encryptor.hpp
index 34d69bb..2b82d31 100644
--- a/src/encryptor.hpp
+++ b/src/encryptor.hpp
@@ -124,10 +124,10 @@
const ErrorCallback& onFailure,
size_t nTriesLeft);
- void
+ bool
makeAndPublishCkData(const ErrorCallback& onFailure);
-private:
+PUBLIC_WITH_TESTS_ELSE_PRIVATE:
Name m_accessPrefix;
Name m_ckPrefix;
Name m_ckName;
diff --git a/tests/tests/encryptor.t.cpp b/tests/tests/encryptor.t.cpp
index 57e8b21..5b8aae8 100644
--- a/tests/tests/encryptor.t.cpp
+++ b/tests/tests/encryptor.t.cpp
@@ -98,6 +98,11 @@
BOOST_AUTO_TEST_CASE(EncryptAndPublishedCk)
{
+ encryptor.m_kek.reset();
+ BOOST_CHECK_EQUAL(encryptor.m_isKekRetrievalInProgress, false);
+ encryptor.regenerateCk();
+ BOOST_CHECK_EQUAL(encryptor.m_isKekRetrievalInProgress, true);
+
std::string plaintext = "Data to encrypt";
auto block = encryptor.encrypt(reinterpret_cast<const uint8_t*>(plaintext.data()), plaintext.size());
@@ -133,6 +138,8 @@
auto extractedKek = ckName.getSubName(6);
BOOST_CHECK_EQUAL(extractedKek, kek.getName());
+
+ BOOST_CHECK_EQUAL(encryptor.m_isKekRetrievalInProgress, false);
}
BOOST_FIXTURE_TEST_CASE(KekRetrievalFailure, EncryptorFixture<false>)
diff --git a/wscript b/wscript
index 6ee6d57..2010b7f 100644
--- a/wscript
+++ b/wscript
@@ -29,8 +29,11 @@
uselib_store='NDN_CXX', mandatory=True)
USED_BOOST_LIBS = ['system', 'thread', 'log', 'log_setup']
+
if conf.env['WITH_TESTS']:
USED_BOOST_LIBS += ['unit_test_framework']
+ conf.define('NDN_NAC_HAVE_TESTS', 1)
+
conf.check_boost(lib=USED_BOOST_LIBS, mandatory=True, mt=True)
conf.check_compiler_flags()