diff --git a/tests/unit-tests/exclude.t.cpp b/tests/unit-tests/exclude.t.cpp
index 1e074d5..a6823c6 100644
--- a/tests/unit-tests/exclude.t.cpp
+++ b/tests/unit-tests/exclude.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2013-2016 Regents of the University of California.
+/*
+ * Copyright (c) 2013-2017 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -20,7 +20,7 @@
  */
 
 #include "exclude.hpp"
-#include "util/crypto.hpp"
+#include "util/digest.hpp"
 
 #include "boost-test.hpp"
 
@@ -86,7 +86,7 @@
 
 BOOST_AUTO_TEST_CASE(Before)
 {
-  // based on http://redmine.named-data.net/issues/1158
+  // based on https://redmine.named-data.net/issues/1158
   ndn::Exclude e;
   BOOST_REQUIRE_NO_THROW(e.excludeBefore(name::Component("PuQxMaf91")));
 
@@ -237,7 +237,7 @@
 
 BOOST_AUTO_TEST_SUITE(ImplicitDigest) // exclude ImplicitSha256DigestComponent
 
-/** \brief make a name::Component with an octet repeated crypto::SHA256_DIGEST_SIZE times
+/** \brief make a name::Component with an octet repeated util::Sha256::DIGEST_SIZE times
  *  \param octet the octet to fill the component
  *  \param isDigest whether to make an ImplicitSha256DigestComponent or a generic NameComponent
  *  \param lastOctet if non-negative, set the last octet to a different value
@@ -245,10 +245,10 @@
 static name::Component
 makeComponent(uint8_t octet, bool isDigest, int lastOctet = -1)
 {
-  uint8_t wire[crypto::SHA256_DIGEST_SIZE];
+  uint8_t wire[util::Sha256::DIGEST_SIZE];
   std::memset(wire, octet, sizeof(wire));
   if (lastOctet >= 0) {
-    wire[crypto::SHA256_DIGEST_SIZE - 1] = static_cast<uint8_t>(lastOctet);
+    wire[util::Sha256::DIGEST_SIZE - 1] = static_cast<uint8_t>(lastOctet);
   }
 
   if (isDigest) {
diff --git a/tests/unit-tests/security/digest-sha256.t.cpp b/tests/unit-tests/security/digest-sha256.t.cpp
index 732efe6..6facb98 100644
--- a/tests/unit-tests/security/digest-sha256.t.cpp
+++ b/tests/unit-tests/security/digest-sha256.t.cpp
@@ -1,5 +1,5 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
+/*
  * Copyright (c) 2013-2017 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
@@ -21,6 +21,7 @@
 
 #include "security/digest-sha256.hpp"
 #include "security/validator.hpp"
+#include "util/digest.hpp"
 #include "util/string-helper.hpp"
 
 #include "identity-management-fixture.hpp"
@@ -35,7 +36,7 @@
 BOOST_AUTO_TEST_CASE(Sha256)
 {
   char content[6] = "1234\n";
-  ConstBufferPtr buf = crypto::computeSha256Digest(reinterpret_cast<uint8_t*>(content), 5);
+  ConstBufferPtr buf = util::Sha256::computeDigest(reinterpret_cast<uint8_t*>(content), 5);
 
   BOOST_CHECK_EQUAL(toHex(buf->buf(), buf->size(), false),
                     "a883dafc480d466ee04e0d6da986bd78eb1fdd2178d04693723da3a8f95d42f4");
diff --git a/tests/unit-tests/util/crypto.t.cpp b/tests/unit-tests/util/crypto.t.cpp
deleted file mode 100644
index 7770245..0000000
--- a/tests/unit-tests/util/crypto.t.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2013-2017 Regents of the University of California.
- *
- * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
- *
- * ndn-cxx library is free software: you can redistribute it and/or modify it under the
- * terms of the GNU Lesser General Public License as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option) any later version.
- *
- * ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
- *
- * You should have received copies of the GNU General Public License and GNU Lesser
- * General Public License along with ndn-cxx, e.g., in COPYING.md file.  If not, see
- * <http://www.gnu.org/licenses/>.
- *
- * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
- */
-
-#include "util/crypto.hpp"
-
-#include "boost-test.hpp"
-
-namespace ndn {
-namespace crypto {
-namespace tests {
-
-BOOST_AUTO_TEST_SUITE(Util)
-BOOST_AUTO_TEST_SUITE(TestCrypto)
-
-BOOST_AUTO_TEST_CASE(Basic)
-{
-  const std::string testString = "Hello, world!";
-  auto result = computeSha256Digest(reinterpret_cast<const uint8_t*>(testString.data()),
-                                    testString.size());
-
-  BOOST_CHECK_EQUAL(result->size(), SHA256_DIGEST_SIZE);
-
-  const uint8_t expectedSha256[] = {0x31, 0x5f, 0x5b, 0xdb, 0x76, 0xd0, 0x78, 0xc4,
-                                    0x3b, 0x8a, 0xc0, 0x06, 0x4e, 0x4a, 0x01, 0x64,
-                                    0x61, 0x2b, 0x1f, 0xce, 0x77, 0xc8, 0x69, 0x34,
-                                    0x5b, 0xfc, 0x94, 0xc7, 0x58, 0x94, 0xed, 0xd3};
-  BOOST_CHECK_EQUAL_COLLECTIONS(result->begin(), result->end(),
-                                expectedSha256, expectedSha256 + sizeof(expectedSha256));
-}
-
-BOOST_AUTO_TEST_SUITE_END() // TestCrypto
-BOOST_AUTO_TEST_SUITE_END() // Util
-
-} // namespace tests
-} // namespace crypto
-} // namespace ndn
diff --git a/tests/unit-tests/util/digest.t.cpp b/tests/unit-tests/util/digest.t.cpp
index 36a72e2..d8614c1 100644
--- a/tests/unit-tests/util/digest.t.cpp
+++ b/tests/unit-tests/util/digest.t.cpp
@@ -21,6 +21,7 @@
 
 #include "util/digest.hpp"
 #include "util/string-helper.hpp"
+#include "encoding/endian.hpp"
 
 #include "boost-test.hpp"
 
@@ -33,44 +34,44 @@
 
 BOOST_AUTO_TEST_CASE(Basic)
 {
-  const uint8_t origin[] = {0x01, 0x02, 0x03, 0x04};
-  ConstBufferPtr digest1 = crypto::computeSha256Digest(origin, sizeof(origin));
+  const uint8_t input[] = {0x01, 0x02, 0x03, 0x04};
+  auto expected = fromHex("9f64a747e1b97f131fabb6b447296c9b6f0201e79fb3c5356e6c77e89b6a806a");
 
   Sha256 statefulSha256;
   BOOST_CHECK_EQUAL(statefulSha256.empty(), true);
 
-  statefulSha256.update(origin, 1);
-  statefulSha256.update(origin + 1, 1);
-  statefulSha256.update(origin + 2, 1);
-  statefulSha256.update(origin + 3, 1);
-  ConstBufferPtr digest2 = statefulSha256.computeDigest();
-  BOOST_CHECK_EQUAL_COLLECTIONS(digest1->buf(), digest1->buf() + digest1->size(),
-                                digest2->buf(), digest2->buf() + digest2->size());
+  statefulSha256.update(input, 1);
+  statefulSha256.update(input + 1, 1);
+  statefulSha256.update(input + 2, 1);
+  statefulSha256.update(input + 3, 1);
+  ConstBufferPtr digest = statefulSha256.computeDigest();
+  BOOST_CHECK_EQUAL(digest->size(), Sha256::DIGEST_SIZE);
+  BOOST_CHECK_EQUAL_COLLECTIONS(expected->buf(), expected->buf() + expected->size(),
+                                digest->buf(), digest->buf() + digest->size());
 }
 
 BOOST_AUTO_TEST_CASE(ConstructFromStream)
 {
-  const std::string input = "Hello, World!";
-  ConstBufferPtr digest1 = crypto::computeSha256Digest(reinterpret_cast<const uint8_t*>(input.data()),
-                                                       input.size());
+  const std::string input = "Hello, world!";
+  auto expected = fromHex("315f5bdb76d078c43b8ac0064e4a0164612b1fce77c869345bfc94c75894edd3");
 
   std::istringstream is(input);
   Sha256 sha(is);
   BOOST_CHECK_EQUAL(sha.empty(), false);
-  BOOST_CHECK_EQUAL(sha.toString(), "DFFD6021BB2BD5B0AF676290809EC3A53191DD81C7F70A4B28688A362182986F");
+  BOOST_CHECK_EQUAL(sha.toString(), "315F5BDB76D078C43B8AC0064E4A0164612B1FCE77C869345BFC94C75894EDD3");
 
-  ConstBufferPtr digest2 = sha.computeDigest();
-  BOOST_CHECK_EQUAL_COLLECTIONS(digest1->buf(), digest1->buf() + digest1->size(),
-                                digest2->buf(), digest2->buf() + digest2->size());
+  ConstBufferPtr digest = sha.computeDigest();
+  BOOST_CHECK_EQUAL_COLLECTIONS(expected->buf(), expected->buf() + expected->size(),
+                                digest->buf(), digest->buf() + digest->size());
 }
 
 BOOST_AUTO_TEST_CASE(Compare)
 {
   const uint8_t origin[] = {0x01, 0x02, 0x03, 0x04};
 
-  Sha256 digest;
-  digest.update(origin, sizeof(origin));
-  digest.computeDigest();
+  Sha256 digest1;
+  digest1.update(origin, sizeof(origin));
+  digest1.computeDigest();
 
   Sha256 digest2;
   digest2.update(origin, 1);
@@ -79,46 +80,43 @@
   digest2.update(origin + 3, 1);
   digest2.computeDigest();
 
-  BOOST_CHECK_EQUAL(digest == digest2, true);
-  BOOST_CHECK_EQUAL(digest != digest2, false);
+  BOOST_CHECK_EQUAL(digest1 == digest2, true);
+  BOOST_CHECK_EQUAL(digest1 != digest2, false);
 }
 
 BOOST_AUTO_TEST_CASE(InsertionOperatorSha256)
 {
-  const uint8_t origin[] = {0x94, 0xEE, 0x05, 0x93, 0x35, 0xE5, 0x87, 0xE5,
-                            0x01, 0xCC, 0x4B, 0xF9, 0x06, 0x13, 0xE0, 0x81,
-                            0x4F, 0x00, 0xA7, 0xB0, 0x8B, 0xC7, 0xC6, 0x48,
-                            0xFD, 0x86, 0x5A, 0x2A, 0xF6, 0xA2, 0x2C, 0xC2};
-  ConstBufferPtr digest1 = crypto::computeSha256Digest(origin, sizeof(origin));
+  auto expected = fromHex("d7bd34bfe44a18d2aa755a344fe3e6b06ed0473772e6dfce16ac71ba0b0a241c");
 
   Sha256 innerDigest;
   innerDigest << "TEST";
 
   Sha256 statefulSha256;
   statefulSha256 << innerDigest;
-  ConstBufferPtr digest2 = statefulSha256.computeDigest();
+  ConstBufferPtr digest = statefulSha256.computeDigest();
 
-  BOOST_CHECK_EQUAL_COLLECTIONS(digest1->buf(), digest1->buf() + digest1->size(),
-                                digest2->buf(), digest2->buf() + digest2->size());
+  BOOST_CHECK_EQUAL(statefulSha256.empty(), false);
+  BOOST_CHECK_EQUAL_COLLECTIONS(expected->buf(), expected->buf() + expected->size(),
+                                digest->buf(), digest->buf() + digest->size());
 }
 
 BOOST_AUTO_TEST_CASE(InsertionOperatorString)
 {
-  const std::string str = "Hello, World!";
-  ConstBufferPtr digest1 = crypto::computeSha256Digest(reinterpret_cast<const uint8_t*>(str.data()),
-                                                       str.size());
+  const std::string input = "Hello, world!";
+  auto expected = fromHex("315f5bdb76d078c43b8ac0064e4a0164612b1fce77c869345bfc94c75894edd3");
 
   Sha256 statefulSha256;
-  statefulSha256 << str;
-  ConstBufferPtr digest2 = statefulSha256.computeDigest();
+  statefulSha256 << input;
+  ConstBufferPtr digest = statefulSha256.computeDigest();
 
-  BOOST_CHECK_EQUAL_COLLECTIONS(digest1->buf(), digest1->buf() + digest1->size(),
-                                digest2->buf(), digest2->buf() + digest2->size());
+  BOOST_CHECK_EQUAL(statefulSha256.empty(), false);
+  BOOST_CHECK_EQUAL_COLLECTIONS(expected->buf(), expected->buf() + expected->size(),
+                                digest->buf(), digest->buf() + digest->size());
 }
 
 BOOST_AUTO_TEST_CASE(InsertionOperatorBlock)
 {
-  const uint8_t origin[] = {
+  const uint8_t input[] = {
     0x16, 0x1b, // SignatureInfo
       0x1b, 0x01, // SignatureType
         0x01, // Sha256WithRsa
@@ -131,32 +129,31 @@
           0x08, 0x07,
             0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72
   };
-  ConstBufferPtr digest1 = crypto::computeSha256Digest(origin, sizeof(origin));
+  auto expected = fromHex("b372edfd4d6a4db2cfeaeead6c34fdee9b9e759f7b8d799cf8067e39e7f2886c");
 
   Sha256 statefulSha256;
-  Block block(origin, sizeof(origin));
-  statefulSha256 << block;
-  ConstBufferPtr digest2 = statefulSha256.computeDigest();
+  statefulSha256 << Block{input, sizeof(input)};
+  ConstBufferPtr digest = statefulSha256.computeDigest();
 
-  BOOST_CHECK_EQUAL_COLLECTIONS(digest1->buf(), digest1->buf() + digest1->size(),
-                                digest2->buf(), digest2->buf() + digest2->size());
+  BOOST_CHECK_EQUAL(statefulSha256.empty(), false);
+  BOOST_CHECK_EQUAL_COLLECTIONS(expected->buf(), expected->buf() + expected->size(),
+                                digest->buf(), digest->buf() + digest->size());
 }
 
 BOOST_AUTO_TEST_CASE(InsertionOperatorUint64t)
 {
-  const uint64_t origin[] = {1, 2, 3, 4};
-  ConstBufferPtr digest1 = crypto::computeSha256Digest(reinterpret_cast<const uint8_t*>(origin),
-                                                       sizeof(origin));
+  const uint64_t input[] = {1, 2, 3, 4};
+  auto expected = fromHex("7236c00c170036c6de133a878210ddd58567aa1d0619a0f70f69e38ae6f916e9");
 
   Sha256 statefulSha256;
-  statefulSha256 << origin[0];
-  statefulSha256 << origin[1];
-  statefulSha256 << origin[2];
-  statefulSha256 << origin[3];
-  ConstBufferPtr digest2 = statefulSha256.computeDigest();
+  for (size_t i = 0; i < sizeof(input) / sizeof(uint64_t); ++i) {
+    statefulSha256 << htobe64(input[i]);
+  }
+  ConstBufferPtr digest = statefulSha256.computeDigest();
 
-  BOOST_CHECK_EQUAL_COLLECTIONS(digest1->buf(), digest1->buf() + digest1->size(),
-                                digest2->buf(), digest2->buf() + digest2->size());
+  BOOST_CHECK_EQUAL(statefulSha256.empty(), false);
+  BOOST_CHECK_EQUAL_COLLECTIONS(expected->buf(), expected->buf() + expected->size(),
+                                digest->buf(), digest->buf() + digest->size());
 }
 
 BOOST_AUTO_TEST_CASE(Reset)
@@ -183,11 +180,12 @@
 
 BOOST_AUTO_TEST_CASE(StaticComputeDigest)
 {
-  const uint8_t origin[] = {0x01, 0x02, 0x03, 0x04};
-  ConstBufferPtr digest1 = crypto::computeSha256Digest(origin, sizeof(origin));
-  ConstBufferPtr digest2 = Sha256::computeDigest(origin, sizeof(origin));
-  BOOST_CHECK_EQUAL_COLLECTIONS(digest1->buf(), digest1->buf() + digest1->size(),
-                                digest2->buf(), digest2->buf() + digest2->size());
+  const uint8_t input[] = {0x01, 0x02, 0x03, 0x04};
+  auto expected = fromHex("9f64a747e1b97f131fabb6b447296c9b6f0201e79fb3c5356e6c77e89b6a806a");
+
+  ConstBufferPtr digest = Sha256::computeDigest(input, sizeof(input));
+  BOOST_CHECK_EQUAL_COLLECTIONS(expected->buf(), expected->buf() + expected->size(),
+                                digest->buf(), digest->buf() + digest->size());
 }
 
 BOOST_AUTO_TEST_CASE(Print)
@@ -196,14 +194,14 @@
                             0x01, 0xCC, 0x4B, 0xF9, 0x06, 0x13, 0xE0, 0x81,
                             0x4F, 0x00, 0xA7, 0xB0, 0x8B, 0xC7, 0xC6, 0x48,
                             0xFD, 0x86, 0x5A, 0x2A, 0xF6, 0xA2, 0x2C, 0xC2};
-  std::string hexString = toHex(origin, sizeof(origin));
+  std::string expected = toHex(origin, sizeof(origin));
 
   Sha256 digest;
   digest << "TEST";
   std::ostringstream os;
   os << digest;
-  BOOST_CHECK_EQUAL(os.str(), hexString);
-  BOOST_CHECK_EQUAL(digest.toString(), hexString);
+  BOOST_CHECK_EQUAL(os.str(), expected);
+  BOOST_CHECK_EQUAL(digest.toString(), expected);
 }
 
 BOOST_AUTO_TEST_SUITE_END() // TestSha256
diff --git a/tests/unit-tests/util/in-memory-storage-common.t.cpp b/tests/unit-tests/util/in-memory-storage-common.t.cpp
index a4a992b..5c83391 100644
--- a/tests/unit-tests/util/in-memory-storage-common.t.cpp
+++ b/tests/unit-tests/util/in-memory-storage-common.t.cpp
@@ -1,5 +1,5 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
+/*
  * Copyright (c) 2013-2017 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
@@ -23,7 +23,7 @@
 #include "util/in-memory-storage-fifo.hpp"
 #include "util/in-memory-storage-lfu.hpp"
 #include "util/in-memory-storage-lru.hpp"
-#include "util/crypto.hpp"
+#include "util/digest.hpp"
 #include "security/signature-sha256-with-rsa.hpp"
 
 #include "boost-test.hpp"
@@ -274,7 +274,7 @@
 {
   shared_ptr<Data> data = makeData("/digest/compute");
 
-  ConstBufferPtr digest1 = crypto::computeSha256Digest(data->wireEncode().wire(), data->wireEncode().size());
+  ConstBufferPtr digest1 = Sha256::computeDigest(data->wireEncode().wire(), data->wireEncode().size());
   BOOST_CHECK_EQUAL(digest1->size(), 32);
 
   InMemoryStorageEntry entry;
@@ -372,7 +372,7 @@
   shared_ptr<Data> data7 = makeData("/c/c/1");
   ims.insert(*data7);
 
-  ConstBufferPtr digest1 = crypto::computeSha256Digest(data->wireEncode().wire(), data->wireEncode().size());
+  ConstBufferPtr digest1 = Sha256::computeDigest(data->wireEncode().wire(), data->wireEncode().size());
 
   Name name("/a");
   ims.erase(name);
@@ -393,7 +393,7 @@
   shared_ptr<Data> data3 = makeData("/z/z/z");
   ims.insert(*data3);
 
-  ConstBufferPtr digest1 = crypto::computeSha256Digest(data->wireEncode().wire(), data->wireEncode().size());
+  ConstBufferPtr digest1 = Sha256::computeDigest(data->wireEncode().wire(), data->wireEncode().size());
 
   shared_ptr<Interest> interest = makeInterest("");
   interest->setName(Name(name).appendImplicitSha256Digest(digest1->buf(), digest1->size()));
@@ -928,9 +928,9 @@
   Name n2 = insert(2, "ndn:/A");
   insert(3, "ndn:/A/B");
 
-  uint8_t digest00[crypto::SHA256_DIGEST_SIZE];
+  uint8_t digest00[Sha256::DIGEST_SIZE];
   std::fill_n(digest00, sizeof(digest00), 0x00);
-  uint8_t digestFF[crypto::SHA256_DIGEST_SIZE];
+  uint8_t digestFF[Sha256::DIGEST_SIZE];
   std::fill_n(digestFF, sizeof(digestFF), 0xFF);
 
   Exclude excludeDigest;
