diff --git a/src/security/cryptopp.hpp b/src/security/cryptopp.hpp
deleted file mode 100644
index 4c9e959..0000000
--- a/src/security/cryptopp.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2013-2016 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.
- */
-
-/**
- * @file security/cryptopp.hpp
- * @deprecated Use security/v1/cryptopp.hpp
- */
-
-#include "security-common.hpp"
-
-#ifdef NDN_CXX_KEEP_SECURITY_V1_ALIASES
-#include "v1/cryptopp.hpp"
-#else
-#error "Deprecated. Use v1/cryptopp.hpp instead."
-#endif // NDN_CXX_KEEP_SECURITY_V1_ALIASES
diff --git a/src/security/identity-certificate.hpp b/src/security/identity-certificate.hpp
deleted file mode 100644
index 42553a6..0000000
--- a/src/security/identity-certificate.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2013-2016 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.
- */
-
-/**
- * @file security/identity-certificate.hpp
- * @deprecated Use security/v1/identity-certificate.hpp
- */
-
-#include "security-common.hpp"
-
-#ifdef NDN_CXX_KEEP_SECURITY_V1_ALIASES
-#include "v1/identity-certificate.hpp"
-#else
-#error "Deprecated. Use `v1/identity-certificate.hpp` instead."
-#endif // NDN_CXX_KEEP_SECURITY_V1_ALIASES
diff --git a/src/security/public-key.hpp b/src/security/public-key.hpp
deleted file mode 100644
index 8e1a09b..0000000
--- a/src/security/public-key.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2013-2016 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.
- */
-
-/**
- * @file security/public-key.hpp
- * @deprecated Use security/v1/public-key.hpp
- */
-
-#include "security-common.hpp"
-
-#ifdef NDN_CXX_KEEP_SECURITY_V1_ALIASES
-#include "v1/public-key.hpp"
-#else
-#error "Deprecated. Use `v1/public-key.hpp` instead."
-#endif // NDN_CXX_KEEP_SECURITY_V1_ALIASES
diff --git a/src/security/security-common.hpp b/src/security/security-common.hpp
index b5a704d..20d8040 100644
--- a/src/security/security-common.hpp
+++ b/src/security/security-common.hpp
@@ -38,15 +38,6 @@
  */
 const size_t MIN_SIZE = 2;
 
-/** \deprecated To avoid a potentially breaking change, this value is kept based on the Command
- *              Interest definition.  This value will be eliminated in favor of `MIN_SIZE=2`.
- */
-const size_t MIN_LENGTH = 4;
-
-/** \deprecated Use `MIN_SIZE`
- */
-const size_t MIN_LENGTH_SIG_ONLY = 2;
-
 } // namespace signed_interest
 
 namespace command_interest {
@@ -63,20 +54,6 @@
 
 } // namespace command_interest
 
-namespace signed_interest {
-
-/**
- * @deprecated Use command_interest::POS_RANDOM_VAL
- */
-using command_interest::POS_RANDOM_VAL;
-
-/**
- * @deprecated Use command_interest::POS_TIMESTAMP
- */
-using command_interest::POS_TIMESTAMP;
-
-} // namespace signed_interest
-
 /**
  * @brief The type of KeyId component in a key name
  */
diff --git a/src/security/v2/key-chain.cpp b/src/security/v2/key-chain.cpp
index 954231c..53f1898 100644
--- a/src/security/v2/key-chain.cpp
+++ b/src/security/v2/key-chain.cpp
@@ -685,7 +685,7 @@
                const Name& keyName, DigestAlgorithm digestAlgorithm) const
 {
   if (keyName == SigningInfo::getDigestSha256Identity())
-    return Block(tlv::SignatureValue, crypto::sha256(buf, size));
+    return Block(tlv::SignatureValue, crypto::computeSha256Digest(buf, size));
 
   return Block(tlv::SignatureValue, m_tpm->sign(buf, size, keyName, digestAlgorithm));
 }
