diff --git a/common.hpp b/common.hpp
index 2ddc3d9..ce1f776 100644
--- a/common.hpp
+++ b/common.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
 /*
- * Copyright (c) 2012-2014 University of California, Los Angeles
+ * Copyright (c) 2012-2017 University of California, Los Angeles
  *
  * This file is part of ChronoSync, synchronization library for distributed realtime
  * applications for NDN.
@@ -84,10 +84,11 @@
 
 namespace tlv {
 using namespace ndn::tlv;
-}
+} // namespace tlv
 
 namespace name = ndn::name;
 namespace time = ndn::time;
+namespace security = ndn::security;
 
 } // namespace chronosync
 
diff --git a/src/leaf-container.hpp b/src/leaf-container.hpp
index d116b55..e1d30bd 100644
--- a/src/leaf-container.hpp
+++ b/src/leaf-container.hpp
@@ -28,14 +28,12 @@
 #include "mi-tag.hpp"
 #include "leaf.hpp"
 
-#include <ndn-cxx/util/crypto.hpp>
-
 #include <boost/multi_index_container.hpp>
 #include <boost/multi_index/ordered_index.hpp>
 #include <boost/multi_index/hashed_index.hpp>
 #include <boost/multi_index/mem_fun.hpp>
 
-
+#include <ndn-cxx/util/sha256.hpp>
 
 namespace chronosync {
 
@@ -47,7 +45,7 @@
   operator()(const Name& prefix) const
   {
     ndn::ConstBufferPtr buffer =
-      ndn::crypto::computeSha256Digest(prefix.wireEncode().wire(), prefix.wireEncode().size());
+      ndn::util::Sha256::computeDigest(prefix.wireEncode().wire(), prefix.wireEncode().size());
 
     BOOST_ASSERT(buffer->size() > sizeof(std::size_t));
 
diff --git a/src/leaf.hpp b/src/leaf.hpp
index b26b975..4c8223d 100644
--- a/src/leaf.hpp
+++ b/src/leaf.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
 /*
- * Copyright (c) 2012-2014 University of California, Los Angeles
+ * Copyright (c) 2012-2017 University of California, Los Angeles
  *
  * This file is part of ChronoSync, synchronization library for distributed realtime
  * applications for NDN.
@@ -26,7 +26,7 @@
 #define CHRONOSYNC_LEAF_HPP
 
 #include "common.hpp"
-#include <ndn-cxx/util/digest.hpp>
+#include <ndn-cxx/util/sha256.hpp>
 
 namespace chronosync {
 
diff --git a/src/logic.cpp b/src/logic.cpp
index fc4aa83..df0fcd1 100644
--- a/src/logic.cpp
+++ b/src/logic.cpp
@@ -26,6 +26,8 @@
 #include "logic.hpp"
 #include "logger.hpp"
 
+#include <ndn-cxx/util/string-helper.hpp>
+
 INIT_LOGGER(Logic);
 
 #ifdef _DEBUG
@@ -94,7 +96,6 @@
   , m_syncInterestLifetime(syncInterestLifetime)
   , m_syncReplyFreshness(syncReplyFreshness)
   , m_recoveryInterestLifetime(recoveryInterestLifetime)
-  , m_defaultSigningId(defaultSigningId)
   , m_validator(validator)
 {
 #ifdef _DEBUG
@@ -103,7 +104,7 @@
 
   _LOG_DEBUG_ID(">> Logic::Logic");
 
-  addUserNode(m_defaultUserPrefix, m_defaultSigningId);
+  addUserNode(m_defaultUserPrefix, defaultSigningId);
 
 
   m_syncReset = m_syncPrefix;
@@ -159,7 +160,6 @@
   if (defaultUserPrefix != EMPTY_NAME) {
     if (m_nodeList.find(defaultUserPrefix) != m_nodeList.end()) {
       m_defaultUserPrefix = defaultUserPrefix;
-      m_defaultSigningId = m_nodeList[defaultUserPrefix].signingId;
     }
   }
 }
@@ -171,7 +171,6 @@
     return;
   if (m_defaultUserPrefix == EMPTY_NAME) {
     m_defaultUserPrefix = userPrefix;
-    m_defaultSigningId = signingId;
   }
   if (m_nodeList.find(userPrefix) == m_nodeList.end()) {
     m_nodeList[userPrefix].userPrefix = userPrefix;
@@ -193,11 +192,9 @@
     if (m_defaultUserPrefix == userPrefix) {
       if (!m_nodeList.empty()) {
         m_defaultUserPrefix = m_nodeList.begin()->second.userPrefix;
-        m_defaultSigningId = m_nodeList.begin()->second.signingId;
       }
       else {
         m_defaultUserPrefix = EMPTY_NAME;
-        m_defaultSigningId = DEFAULT_NAME;
       }
     }
     reset(false);
@@ -256,11 +253,7 @@
       _LOG_DEBUG_ID("updateSeqNo: not in Reset ");
       ndn::ConstBufferPtr previousRoot = m_state.getRootDigest();
       {
-        using namespace CryptoPP;
-
-        std::string hash;
-        StringSource(previousRoot->buf(), previousRoot->size(), true,
-                     new HexEncoder(new StringSink(hash), false));
+        std::string hash = ndn::toHex(previousRoot->buf(), previousRoot->size(), false);
         _LOG_DEBUG_ID("Hash: " << hash);
       }
 
@@ -660,7 +653,7 @@
   if (m_nodeList[nodePrefix].signingId.empty())
     m_keyChain.sign(*syncReply);
   else
-    m_keyChain.signByIdentity(*syncReply, m_nodeList[nodePrefix].signingId);
+    m_keyChain.sign(*syncReply, security::signingByIdentity(m_nodeList[nodePrefix].signingId));
 
   m_face.put(*syncReply);
 
@@ -700,11 +693,7 @@
 void
 Logic::printDigest(ndn::ConstBufferPtr digest)
 {
-  using namespace CryptoPP;
-
-  std::string hash;
-  StringSource(digest->buf(), digest->size(), true,
-               new HexEncoder(new StringSink(hash), false));
+  std::string hash = ndn::toHex(digest->buf(), digest->size(), false);
   _LOG_DEBUG_ID("Hash: " << hash);
 }
 
@@ -811,7 +800,7 @@
   if (m_nodeList[nodePrefix].signingId.empty())
     m_keyChain.sign(*data);
   else
-    m_keyChain.signByIdentity(*data, m_nodeList[nodePrefix].signingId);
+    m_keyChain.sign(*data, security::signingByIdentity(m_nodeList[nodePrefix].signingId));
 
   sendExcludeInterest(interest, *data);
 
diff --git a/src/logic.hpp b/src/logic.hpp
index 4f75085..78080ae 100644
--- a/src/logic.hpp
+++ b/src/logic.hpp
@@ -27,17 +27,18 @@
 #define CHRONOSYNC_LOGIC_HPP
 
 #include "boost-header.h"
+#include "diff-state-container.hpp"
+#include "interest-table.hpp"
+
 #include <memory>
 #include <unordered_map>
 
 #include <ndn-cxx/face.hpp>
 #include <ndn-cxx/util/scheduler.hpp>
 #include <ndn-cxx/security/key-chain.hpp>
+#include <ndn-cxx/security/signing-helpers.hpp>
 #include <ndn-cxx/security/validator.hpp>
 
-#include "interest-table.hpp"
-#include "diff-state-container.hpp"
-
 namespace chronosync {
 
 /**
@@ -515,7 +516,6 @@
   time::milliseconds m_recoveryInterestLifetime;
 
   // Security
-  ndn::Name m_defaultSigningId;
   ndn::KeyChain m_keyChain;
   std::shared_ptr<ndn::Validator> m_validator;
 
diff --git a/src/socket.cpp b/src/socket.cpp
index 4a947d7..0fd5707 100644
--- a/src/socket.cpp
+++ b/src/socket.cpp
@@ -129,7 +129,7 @@
   if (m_signingId.empty())
     m_keyChain.sign(*data);
   else
-    m_keyChain.signByIdentity(*data, m_signingId);
+    m_keyChain.sign(*data, security::signingByIdentity(m_signingId));
 
   m_ims.insert(*data);
 
@@ -152,7 +152,7 @@
   if (m_signingId.empty())
     m_keyChain.sign(*data);
   else
-    m_keyChain.signByIdentity(*data, m_signingId);
+    m_keyChain.sign(*data, security::signingByIdentity(m_signingId));
 
   m_ims.insert(*data);
 
diff --git a/src/socket.hpp b/src/socket.hpp
index 356b212..6ec0aef 100644
--- a/src/socket.hpp
+++ b/src/socket.hpp
@@ -25,12 +25,12 @@
 #ifndef CHRONOSYNC_SOCKET_HPP
 #define CHRONOSYNC_SOCKET_HPP
 
-#include <ndn-cxx/face.hpp>
-#include <ndn-cxx/util/in-memory-storage-persistent.hpp>
-#include <unordered_map>
-
 #include "logic.hpp"
 
+#include <ndn-cxx/face.hpp>
+#include <ndn-cxx/ims/in-memory-storage-persistent.hpp>
+#include <unordered_map>
+
 namespace chronosync {
 
 /**
@@ -235,12 +235,12 @@
   ndn::Face& m_face;
   Logic m_logic;
 
-  ndn::Name m_signingId;
+  Name m_signingId;
   ndn::KeyChain m_keyChain;
   std::shared_ptr<ndn::Validator> m_validator;
 
   RegisteredPrefixList m_registeredPrefixList;
-  ndn::util::InMemoryStoragePersistent m_ims;
+  ndn::InMemoryStoragePersistent m_ims;
 };
 
 } // namespace chronosync
diff --git a/src/state.hpp b/src/state.hpp
index 4fa82e9..8713552 100644
--- a/src/state.hpp
+++ b/src/state.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
 /*
- * Copyright (c) 2012-2014 University of California, Los Angeles
+ * Copyright (c) 2012-2017 University of California, Los Angeles
  *
  * This file is part of ChronoSync, synchronization library for distributed realtime
  * applications for NDN.
@@ -27,7 +27,7 @@
 
 #include "tlv.hpp"
 #include "leaf-container.hpp"
-#include <ndn-cxx/util/digest.hpp>
+#include <ndn-cxx/util/sha256.hpp>
 
 namespace chronosync {
 
diff --git a/tests/unit-tests/test-interest-table.cpp b/tests/unit-tests/test-interest-table.cpp
index 8b1f156..0f0c95d 100644
--- a/tests/unit-tests/test-interest-table.cpp
+++ b/tests/unit-tests/test-interest-table.cpp
@@ -18,12 +18,11 @@
  */
 
 #include "interest-table.hpp"
+#include "boost-test.hpp"
+#include "../unit-test-time-fixture.hpp"
 
 #include <unistd.h>
 
-#include "../unit-test-time-fixture.hpp"
-#include "boost-test.hpp"
-
 namespace chronosync {
 namespace test {
 
@@ -36,19 +35,19 @@
     Name prefix("/test/prefix");
 
     Name interestName1;
-    digest1 = ndn::crypto::computeSha256Digest(origin, 1);
+    digest1 = ndn::util::Sha256::computeDigest(origin, 1);
     interestName1.append(prefix).append(name::Component(digest1));
     interest1 = make_shared<Interest>(interestName1);
     interest1->setInterestLifetime(time::milliseconds(100));
 
     Name interestName2;
-    digest2 = ndn::crypto::computeSha256Digest(origin, 2);
+    digest2 = ndn::util::Sha256::computeDigest(origin, 2);
     interestName2.append(prefix).append(name::Component(digest2));
     interest2 = make_shared<Interest>(interestName2);
     interest2->setInterestLifetime(time::milliseconds(100));
 
     Name interestName3;
-    digest3 = ndn::crypto::computeSha256Digest(origin, 3);
+    digest3 = ndn::util::Sha256::computeDigest(origin, 3);
     interestName3.append(prefix).append(name::Component(digest3));
     interest3 = make_shared<Interest>(interestName3);
     interest3->setInterestLifetime(time::milliseconds(100));
diff --git a/tests/unit-tests/test-leaf.cpp b/tests/unit-tests/test-leaf.cpp
index 5553a05..1588514 100644
--- a/tests/unit-tests/test-leaf.cpp
+++ b/tests/unit-tests/test-leaf.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
 /*
- * Copyright (c) 2012-2014 University of California, Los Angeles
+ * Copyright (c) 2012-2017 University of California, Los Angeles
  *
  * This file is part of ChronoSync, synchronization library for distributed realtime
  * applications for NDN.
@@ -17,13 +17,12 @@
  * ChronoSync, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-
 #include "leaf.hpp"
-#include "leaf-container.hpp"
-#include <ndn-cxx/encoding/buffer-stream.hpp>
-
 #include "boost-test.hpp"
+#include "leaf-container.hpp"
 
+#include <ndn-cxx/encoding/buffer-stream.hpp>
+#include <ndn-cxx/util/string-helper.hpp>
 
 namespace chronosync {
 namespace test {
@@ -49,12 +48,7 @@
 
 BOOST_AUTO_TEST_CASE(LeafDigest)
 {
-  using namespace CryptoPP;
-
-  std::string hexResult = "05fe7f728d3341e9eff82526277b02171044124d0a52e8c4610982261c20de2b";
-  ndn::OBufferStream os;
-  StringSource(hexResult, true, new HexDecoder(new FileSink(os)));
-  ndn::ConstBufferPtr result = os.buf();
+  std::string result = "05fe7f728d3341e9eff82526277b02171044124d0a52e8c4610982261c20de2b";
 
   Name userPrefix("/test/name");
   Leaf leaf(userPrefix, 1, 10);
@@ -62,7 +56,7 @@
   BOOST_CHECK_NO_THROW(leaf.getDigest());
 
   ndn::ConstBufferPtr digest = leaf.getDigest();
-  BOOST_CHECK(*result == *digest);
+  BOOST_CHECK_EQUAL(result, ndn::toHex(digest->buf(), digest->size(), false));
 }
 
 BOOST_AUTO_TEST_CASE(Container)
diff --git a/wscript b/wscript
index e3e3b1e..01139df 100644
--- a/wscript
+++ b/wscript
@@ -21,7 +21,7 @@
 
 def configure(conf):
     conf.load(['compiler_c', 'compiler_cxx', 'gnu_dirs',
-               'default-compiler-flags', 'boost', 'pch', 'sanitizers', 'coverage',
+               'default-compiler-flags', 'boost', 'pch', 'coverage',
                'doxygen', 'sphinx_build'])
 
     conf.check_cfg(package='libndn-cxx', args=['--cflags', '--libs'],
@@ -35,6 +35,8 @@
 
     conf.check_boost(lib=boost_libs, mt=True)
 
+    conf.load('sanitizers')
+
     # If there happens to be a static library, waf will put the corresponding -L flags
     # before dynamic library flags.  This can result in compilation failure when the
     # system has a different version of the ChronoSync library installed.
