diff --git a/ndn-cxx/data.cpp b/ndn-cxx/data.cpp
index abd4784..1ba5f4f 100644
--- a/ndn-cxx/data.cpp
+++ b/ndn-cxx/data.cpp
@@ -312,9 +312,10 @@
 operator==(const Data& lhs, const Data& rhs)
 {
   return lhs.getName() == rhs.getName() &&
-         lhs.getMetaInfo() == rhs.getMetaInfo() &&
+         lhs.getMetaInfo().wireEncode() == rhs.getMetaInfo().wireEncode() &&
          lhs.getContent() == rhs.getContent() &&
-         lhs.getSignature() == rhs.getSignature();
+         lhs.getSignature().getSignatureInfo() == rhs.getSignature().getSignatureInfo() &&
+         lhs.getSignature().getValue() == rhs.getSignature().getValue();
 }
 
 std::ostream&
diff --git a/ndn-cxx/interest.cpp b/ndn-cxx/interest.cpp
index a25147b..091038b 100644
--- a/ndn-cxx/interest.cpp
+++ b/ndn-cxx/interest.cpp
@@ -27,8 +27,6 @@
 #include "ndn-cxx/security/transform/stream-sink.hpp"
 #include "ndn-cxx/util/random.hpp"
 
-#include <boost/scope_exit.hpp>
-
 #ifdef NDN_CXX_HAVE_STACKTRACE
 #include <boost/stacktrace/stacktrace.hpp>
 #endif
@@ -39,7 +37,6 @@
 
 namespace ndn {
 
-BOOST_CONCEPT_ASSERT((boost::EqualityComparable<Interest>));
 BOOST_CONCEPT_ASSERT((WireEncodable<Interest>));
 BOOST_CONCEPT_ASSERT((WireEncodableWithEncodingBuffer<Interest>));
 BOOST_CONCEPT_ASSERT((WireDecodable<Interest>));
@@ -755,21 +752,6 @@
 
 // ---- operators ----
 
-bool
-operator==(const Interest& lhs, const Interest& rhs)
-{
-  bool wasCanBePrefixSetOnLhs = lhs.m_isCanBePrefixSet;
-  bool wasCanBePrefixSetOnRhs = rhs.m_isCanBePrefixSet;
-  lhs.m_isCanBePrefixSet = true;
-  rhs.m_isCanBePrefixSet = true;
-  BOOST_SCOPE_EXIT_ALL(&) {
-    lhs.m_isCanBePrefixSet = wasCanBePrefixSetOnLhs;
-    rhs.m_isCanBePrefixSet = wasCanBePrefixSetOnRhs;
-  };
-
-  return lhs.wireEncode() == rhs.wireEncode();
-}
-
 std::ostream&
 operator<<(std::ostream& os, const Interest& interest)
 {
diff --git a/ndn-cxx/interest.hpp b/ndn-cxx/interest.hpp
index a127dae..fd79836 100644
--- a/ndn-cxx/interest.hpp
+++ b/ndn-cxx/interest.hpp
@@ -566,8 +566,6 @@
   std::vector<Block> m_parameters; // NDN Packet Format v0.3 only
 
   mutable Block m_wire;
-
-  friend bool operator==(const Interest& lhs, const Interest& rhs);
 };
 
 NDN_CXX_DECLARE_WIRE_ENCODE_INSTANTIATIONS(Interest);
@@ -575,15 +573,6 @@
 std::ostream&
 operator<<(std::ostream& os, const Interest& interest);
 
-bool
-operator==(const Interest& lhs, const Interest& rhs);
-
-inline bool
-operator!=(const Interest& lhs, const Interest& rhs)
-{
-  return !(lhs == rhs);
-}
-
 } // namespace ndn
 
 #endif // NDN_INTEREST_HPP
diff --git a/ndn-cxx/meta-info.cpp b/ndn-cxx/meta-info.cpp
index b53a58c..4315fc8 100644
--- a/ndn-cxx/meta-info.cpp
+++ b/ndn-cxx/meta-info.cpp
@@ -25,7 +25,6 @@
 
 namespace ndn {
 
-BOOST_CONCEPT_ASSERT((boost::EqualityComparable<MetaInfo>));
 BOOST_CONCEPT_ASSERT((WireEncodable<MetaInfo>));
 BOOST_CONCEPT_ASSERT((WireEncodableWithEncodingBuffer<MetaInfo>));
 BOOST_CONCEPT_ASSERT((WireDecodable<MetaInfo>));
diff --git a/ndn-cxx/meta-info.hpp b/ndn-cxx/meta-info.hpp
index a5f6a44..fe3f19c 100644
--- a/ndn-cxx/meta-info.hpp
+++ b/ndn-cxx/meta-info.hpp
@@ -199,13 +199,6 @@
   const Block*
   findAppMetaInfo(uint32_t tlvType) const;
 
-public: // EqualityComparable concept
-  bool
-  operator==(const MetaInfo& other) const;
-
-  bool
-  operator!=(const MetaInfo& other) const;
-
 private:
   uint32_t m_type;
   time::milliseconds m_freshnessPeriod;
@@ -220,18 +213,6 @@
 std::ostream&
 operator<<(std::ostream& os, const MetaInfo& info);
 
-inline bool
-MetaInfo::operator==(const MetaInfo& other) const
-{
-  return wireEncode() == other.wireEncode();
-}
-
-inline bool
-MetaInfo::operator!=(const MetaInfo& other) const
-{
-  return !(*this == other);
-}
-
 } // namespace ndn
 
 #endif // NDN_META_INFO_HPP
diff --git a/ndn-cxx/mgmt/nfd/cs-info.cpp b/ndn-cxx/mgmt/nfd/cs-info.cpp
index 9e6d29d..36cda7e 100644
--- a/ndn-cxx/mgmt/nfd/cs-info.cpp
+++ b/ndn-cxx/mgmt/nfd/cs-info.cpp
@@ -180,19 +180,23 @@
 bool
 operator==(const CsInfo& a, const CsInfo& b)
 {
-  return a.wireEncode() == b.wireEncode();
+  return a.getCapacity() == b.getCapacity() &&
+      a.getEnableAdmit() == b.getEnableAdmit() &&
+      a.getEnableServe() == b.getEnableServe() &&
+      a.getNEntries() == b.getNEntries() &&
+      a.getNHits() == b.getNHits() &&
+      a.getNMisses() == b.getNMisses();
 }
 
 std::ostream&
 operator<<(std::ostream& os, const CsInfo& csi)
 {
-  os << "CS: "
-     << csi.getNEntries() << " entries, " << csi.getCapacity() << " max, "
-     << (csi.getEnableAdmit() ? "admit enabled, " : "admit disabled, ")
-     << (csi.getEnableServe() ? "serve enabled, " : "serve disabled, ")
-     << csi.getNHits() << (csi.getNHits() == 1 ? " hit, " : " hits, ")
-     << csi.getNMisses() << (csi.getNMisses() == 1 ? " miss" : " misses");
-  return os;
+  return os << "CsInfo: "
+            << csi.getNEntries() << " entries, " << csi.getCapacity() << " max, "
+            << (csi.getEnableAdmit() ? "admit enabled, " : "admit disabled, ")
+            << (csi.getEnableServe() ? "serve enabled, " : "serve disabled, ")
+            << csi.getNHits() << (csi.getNHits() == 1 ? " hit, " : " hits, ")
+            << csi.getNMisses() << (csi.getNMisses() == 1 ? " miss" : " misses");
 }
 
 } // namespace nfd
diff --git a/ndn-cxx/mgmt/nfd/cs-info.hpp b/ndn-cxx/mgmt/nfd/cs-info.hpp
index 6a185ad..199eddd 100644
--- a/ndn-cxx/mgmt/nfd/cs-info.hpp
+++ b/ndn-cxx/mgmt/nfd/cs-info.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2018 Regents of the University of California.
+ * Copyright (c) 2013-2019 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -132,6 +132,7 @@
   uint64_t m_nEntries;
   uint64_t m_nHits;
   uint64_t m_nMisses;
+
   mutable Block m_wire;
 };
 
diff --git a/ndn-cxx/signature.cpp b/ndn-cxx/signature.cpp
index 6c4787c..e3a07eb 100644
--- a/ndn-cxx/signature.cpp
+++ b/ndn-cxx/signature.cpp
@@ -23,7 +23,6 @@
 
 namespace ndn {
 
-BOOST_CONCEPT_ASSERT((boost::EqualityComparable<Signature>));
 static_assert(std::is_base_of<tlv::Error, Signature::Error>::value,
               "Signature::Error must inherit from tlv::Error");
 
@@ -64,10 +63,4 @@
   m_value = value;
 }
 
-bool
-operator==(const Signature& lhs, const Signature& rhs)
-{
-  return lhs.getSignatureInfo() == rhs.getSignatureInfo() && lhs.getValue() == rhs.getValue();
-}
-
 } // namespace ndn
diff --git a/ndn-cxx/signature.hpp b/ndn-cxx/signature.hpp
index c9e8030..1c02c60 100644
--- a/ndn-cxx/signature.hpp
+++ b/ndn-cxx/signature.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2018 Regents of the University of California.
+ * Copyright (c) 2013-2019 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -151,15 +151,6 @@
   mutable Block m_value;
 };
 
-bool
-operator==(const Signature& lhs, const Signature& rhs);
-
-inline bool
-operator!=(const Signature& lhs, const Signature& rhs)
-{
-  return !(lhs == rhs);
-}
-
 } // namespace ndn
 
 #endif // NDN_SIGNATURE_HPP
diff --git a/tests/unit/data.t.cpp b/tests/unit/data.t.cpp
index 9457089..56ca775 100644
--- a/tests/unit/data.t.cpp
+++ b/tests/unit/data.t.cpp
@@ -79,8 +79,6 @@
         0xfc, 0x90, 0x7a, 0xb8, 0x66, 0x9c, 0x0e, 0xf6, 0xb7, 0x64, 0xd1
 };
 
-// ---- constructor, encode, decode ----
-
 BOOST_AUTO_TEST_CASE(DefaultConstructor)
 {
   Data d;
@@ -251,7 +249,9 @@
 {
   d.wireDecode("0607 0700 16031B0100"_block);
   BOOST_CHECK_EQUAL(d.getName(), "/"); // empty Name is allowed in Data
-  BOOST_CHECK_EQUAL(d.getMetaInfo(), MetaInfo());
+  BOOST_CHECK_EQUAL(d.getContentType(), tlv::ContentType_Blob);
+  BOOST_CHECK_EQUAL(d.getFreshnessPeriod(), 0_ms);
+  BOOST_CHECK_EQUAL(d.getFinalBlock().has_value(), false);
   BOOST_CHECK_EQUAL(d.getContent().value_size(), 0);
   BOOST_CHECK_EQUAL(d.getSignature().getType(), tlv::DigestSha256);
   BOOST_CHECK_EQUAL(d.getSignature().getValue().value_size(), 0);
@@ -262,7 +262,9 @@
   d.wireDecode("062C 0703080144 16031B0100 "
                "1720612A79399E60304A9F701C1ECAC7956BF2F1B046E6C6F0D6C29B3FE3A29BAD76"_block);
   BOOST_CHECK_EQUAL(d.getName(), "/D");
-  BOOST_CHECK_EQUAL(d.getMetaInfo(), MetaInfo());
+  BOOST_CHECK_EQUAL(d.getContentType(), tlv::ContentType_Blob);
+  BOOST_CHECK_EQUAL(d.getFreshnessPeriod(), 0_ms);
+  BOOST_CHECK_EQUAL(d.getFinalBlock().has_value(), false);
   BOOST_CHECK_EQUAL(d.getContent().value_size(), 0);
   BOOST_CHECK_EQUAL(d.getSignature().getType(), tlv::DigestSha256);
   BOOST_CHECK_EQUAL(d.getSignature().getValue().value_size(), 32);
@@ -282,7 +284,9 @@
   d.wireDecode("063A 0703080144 FC00 1400 FC00 1500 FC00 16031B0100 FC00 "
                "1720612A79399E60304A9F701C1ECAC7956BF2F1B046E6C6F0D6C29B3FE3A29BAD76 FC00"_block);
   BOOST_CHECK_EQUAL(d.getName(), "/D");
-  BOOST_CHECK_EQUAL(d.getMetaInfo(), MetaInfo());
+  BOOST_CHECK_EQUAL(d.getContentType(), tlv::ContentType_Blob);
+  BOOST_CHECK_EQUAL(d.getFreshnessPeriod(), 0_ms);
+  BOOST_CHECK_EQUAL(d.getFinalBlock().has_value(), false);
   BOOST_CHECK_EQUAL(d.getContent().value_size(), 0);
   BOOST_CHECK_EQUAL(d.getSignature().getType(), tlv::DigestSha256);
   BOOST_CHECK_EQUAL(d.getSignature().getValue().value_size(), 32);
@@ -379,8 +383,6 @@
     "sha256digest=28bad4b5275bd392dbb670c75cf0b66f13f7942b21e80f55c0e86b374753a548");
 }
 
-// ---- operators ----
-
 BOOST_AUTO_TEST_CASE(Equality)
 {
   Data a;
diff --git a/tests/unit/interest.t.cpp b/tests/unit/interest.t.cpp
index e7354e9..75aba88 100644
--- a/tests/unit/interest.t.cpp
+++ b/tests/unit/interest.t.cpp
@@ -101,8 +101,6 @@
   BOOST_CHECK(i2.getHopLimit() == nullopt);
   BOOST_CHECK_EQUAL(i2.hasApplicationParameters(), false);
   BOOST_CHECK_EQUAL(i2.isParametersDigestValid(), true);
-
-  BOOST_CHECK_EQUAL(i1, i2);
 }
 
 BOOST_AUTO_TEST_CASE(Full)
@@ -144,8 +142,6 @@
   BOOST_CHECK(i2.getHopLimit() == nullopt);
   BOOST_CHECK_EQUAL(i2.hasApplicationParameters(), false);
   BOOST_CHECK_EQUAL(i2.isParametersDigestValid(), true);
-
-  BOOST_CHECK_EQUAL(i1, i2);
 }
 
 BOOST_AUTO_TEST_CASE(ParametersSha256DigestComponent)
@@ -884,86 +880,6 @@
   BOOST_CHECK_EQUAL(i.isParametersDigestValid(), true);
 }
 
-BOOST_AUTO_TEST_CASE(Equality)
-{
-  Interest a;
-  Interest b;
-
-  // if nonce is not set, it would be set to a random value
-  a.setNonce(1);
-  b.setNonce(1);
-
-  BOOST_CHECK_EQUAL(a == b, true);
-  BOOST_CHECK_EQUAL(a != b, false);
-
-  // compare Name
-  a.setName("/A");
-  BOOST_CHECK_EQUAL(a == b, false);
-  BOOST_CHECK_EQUAL(a != b, true);
-
-  b.setName("/B");
-  BOOST_CHECK_EQUAL(a == b, false);
-  BOOST_CHECK_EQUAL(a != b, true);
-
-  b.setName("/A");
-  BOOST_CHECK_EQUAL(a == b, true);
-  BOOST_CHECK_EQUAL(a != b, false);
-
-  // compare Selectors
-  a.setChildSelector(1);
-  BOOST_CHECK_EQUAL(a == b, false);
-  BOOST_CHECK_EQUAL(a != b, true);
-
-  b.setChildSelector(1);
-  BOOST_CHECK_EQUAL(a == b, true);
-  BOOST_CHECK_EQUAL(a != b, false);
-
-  // compare ForwardingHint
-  a.setForwardingHint({{1, "/H"}});
-  BOOST_CHECK_EQUAL(a == b, false);
-  BOOST_CHECK_EQUAL(a != b, true);
-
-  b.setForwardingHint({{1, "/H"}});
-  BOOST_CHECK_EQUAL(a == b, true);
-  BOOST_CHECK_EQUAL(a != b, false);
-
-  // compare Nonce
-  a.setNonce(100);
-  BOOST_CHECK_EQUAL(a == b, false);
-  BOOST_CHECK_EQUAL(a != b, true);
-
-  b.setNonce(100);
-  BOOST_CHECK_EQUAL(a == b, true);
-  BOOST_CHECK_EQUAL(a != b, false);
-
-  // compare InterestLifetime
-  a.setInterestLifetime(10_s);
-  BOOST_CHECK_EQUAL(a == b, false);
-  BOOST_CHECK_EQUAL(a != b, true);
-
-  b.setInterestLifetime(10_s);
-  BOOST_CHECK_EQUAL(a == b, true);
-  BOOST_CHECK_EQUAL(a != b, false);
-
-  // compare HopLimit
-  a.setHopLimit(255);
-  BOOST_CHECK_EQUAL(a == b, false);
-  BOOST_CHECK_EQUAL(a != b, true);
-
-  b.setHopLimit(255);
-  BOOST_CHECK_EQUAL(a == b, true);
-  BOOST_CHECK_EQUAL(a != b, false);
-
-  // compare ApplicationParameters
-  a.setApplicationParameters("2404C0C1C2C3"_block);
-  BOOST_CHECK_EQUAL(a == b, false);
-  BOOST_CHECK_EQUAL(a != b, true);
-
-  b.setApplicationParameters("2404C0C1C2C3"_block);
-  BOOST_CHECK_EQUAL(a == b, true);
-  BOOST_CHECK_EQUAL(a != b, false);
-}
-
 BOOST_AUTO_TEST_SUITE_END() // TestInterest
 
 } // namespace tests
diff --git a/tests/unit/meta-info.t.cpp b/tests/unit/meta-info.t.cpp
index e6ad757..e5229bf 100644
--- a/tests/unit/meta-info.t.cpp
+++ b/tests/unit/meta-info.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2018 Regents of the University of California.
+ * Copyright (c) 2013-2019 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -29,51 +29,49 @@
 
 BOOST_AUTO_TEST_SUITE(TestMetaInfo)
 
-BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES(EncodeDecodeEquality, 1)
-BOOST_AUTO_TEST_CASE(EncodeDecodeEquality)
+BOOST_AUTO_TEST_CASE(EncodeDecode)
 {
   // default values
   MetaInfo a("1406 type=180100 freshness=190100"_block);
   BOOST_CHECK_EQUAL(a.getType(), tlv::ContentType_Blob);
   BOOST_CHECK_EQUAL(a.getFreshnessPeriod(), 0_ms);
-  BOOST_CHECK(!a.getFinalBlock());
-  BOOST_CHECK_EQUAL(a, a);
+  BOOST_CHECK(a.getFinalBlock() == nullopt);
 
   MetaInfo b;
-  BOOST_CHECK_NE(a, b);
+  BOOST_CHECK_NE(a.wireEncode(), b.wireEncode());
   b.setType(a.getType());
   b.setFreshnessPeriod(a.getFreshnessPeriod());
   b.setFinalBlock(a.getFinalBlock());
+  BOOST_CHECK_NE(a.wireEncode(), b.wireEncode());
   BOOST_CHECK_EQUAL(b.wireEncode(), "1400"_block);
-  BOOST_CHECK_EQUAL(a, b); // expected failure #4569
 
   // non-default values
-  Block wire2 = "140C type=180101 freshness=190266B2 finalblock=1A03080141"_block;
+  Block wire2("140C type=180101 freshness=190266B2 finalblock=1A03080141"_block);
   a.wireDecode(wire2);
   BOOST_CHECK_EQUAL(a.getType(), tlv::ContentType_Link);
   BOOST_CHECK_EQUAL(a.getFreshnessPeriod(), 26290_ms);
+  BOOST_REQUIRE(a.getFinalBlock().has_value());
   BOOST_CHECK_EQUAL(*a.getFinalBlock(), name::Component("A"));
-  BOOST_CHECK_NE(a, b);
+  BOOST_CHECK_NE(a.wireEncode(), b.wireEncode());
 
   b.setType(a.getType());
   b.setFreshnessPeriod(a.getFreshnessPeriod());
   b.setFinalBlock(a.getFinalBlock());
   BOOST_CHECK_EQUAL(b.wireEncode(), wire2);
-  BOOST_CHECK_EQUAL(a, b);
 
-  // FinalBlockId is typed name component
+  // FinalBlockId is a typed name component
   Block wire3 = "1405 finalblock=1A03DD0141"_block;
   a.wireDecode(wire3);
   BOOST_CHECK_EQUAL(a.getType(), tlv::ContentType_Blob);
   BOOST_CHECK_EQUAL(a.getFreshnessPeriod(), 0_ms);
+  BOOST_REQUIRE(a.getFinalBlock().has_value());
   BOOST_CHECK_EQUAL(*a.getFinalBlock(), name::Component::fromEscapedString("221=A"));
-  BOOST_CHECK_NE(a, b);
+  BOOST_CHECK_NE(a.wireEncode(), b.wireEncode());
 
   b.setType(a.getType());
   b.setFreshnessPeriod(a.getFreshnessPeriod());
   b.setFinalBlock(a.getFinalBlock());
   BOOST_CHECK_EQUAL(b.wireEncode(), wire3);
-  BOOST_CHECK_EQUAL(a, b);
 }
 
 BOOST_AUTO_TEST_CASE(AppMetaInfo)
diff --git a/tests/unit/mgmt/nfd/cs-info.t.cpp b/tests/unit/mgmt/nfd/cs-info.t.cpp
index 9c1999c..3bc5f7b 100644
--- a/tests/unit/mgmt/nfd/cs-info.t.cpp
+++ b/tests/unit/mgmt/nfd/cs-info.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2018 Regents of the University of California.
+ * Copyright (c) 2013-2019 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -107,15 +107,15 @@
 {
   CsInfo csi;
   BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(csi),
-    "CS: 0 entries, 0 max, admit disabled, serve disabled, 0 hits, 0 misses");
+    "CsInfo: 0 entries, 0 max, admit disabled, serve disabled, 0 hits, 0 misses");
 
   csi = makeCsInfo();
   BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(csi),
-    "CS: 5509 entries, 20177 max, admit disabled, serve enabled, 12951 hits, 28179 misses");
+    "CsInfo: 5509 entries, 20177 max, admit disabled, serve enabled, 12951 hits, 28179 misses");
 
   csi.setEnableAdmit(true).setNHits(1).setNMisses(1);
   BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(csi),
-    "CS: 5509 entries, 20177 max, admit enabled, serve enabled, 1 hit, 1 miss");
+    "CsInfo: 5509 entries, 20177 max, admit enabled, serve enabled, 1 hit, 1 miss");
 }
 
 BOOST_AUTO_TEST_SUITE_END() // TestCsInfo
diff --git a/tests/unit/signature.t.cpp b/tests/unit/signature.t.cpp
deleted file mode 100644
index 0650b03..0000000
--- a/tests/unit/signature.t.cpp
+++ /dev/null
@@ -1,69 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2013-2018 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 "ndn-cxx/signature.hpp"
-#include "ndn-cxx/security/digest-sha256.hpp"
-#include "ndn-cxx/security/signature-sha256-with-rsa.hpp"
-
-#include "tests/boost-test.hpp"
-
-namespace ndn {
-namespace tests {
-
-BOOST_AUTO_TEST_SUITE(TestSignature)
-
-BOOST_AUTO_TEST_CASE(Equality)
-{
-  Signature a;
-  Signature b;
-
-  BOOST_CHECK_EQUAL(a == b, true);
-  BOOST_CHECK_EQUAL(a != b, false);
-
-  a = SignatureSha256WithRsa();
-  BOOST_CHECK_EQUAL(a == b, false);
-  BOOST_CHECK_EQUAL(a != b, true);
-
-  b = SignatureSha256WithRsa();
-  static const uint8_t someData[256] = {};
-  Block signatureValue = makeBinaryBlock(tlv::SignatureValue, someData, sizeof(someData));
-  b.setValue(signatureValue);
-  BOOST_CHECK_EQUAL(a == b, false);
-  BOOST_CHECK_EQUAL(a != b, true);
-
-  a.setValue(signatureValue);
-  BOOST_CHECK_EQUAL(a == b, true);
-  BOOST_CHECK_EQUAL(a != b, false);
-
-  a = DigestSha256();
-  b = SignatureSha256WithRsa();
-  BOOST_CHECK_EQUAL(a == b, false);
-  BOOST_CHECK_EQUAL(a != b, true);
-
-  b = DigestSha256();
-  BOOST_CHECK_EQUAL(a == b, true);
-  BOOST_CHECK_EQUAL(a != b, false);
-}
-
-BOOST_AUTO_TEST_SUITE_END() // TestSignature
-
-} // namespace tests
-} // namespace ndn
