diff --git a/src/ca-module.cpp b/src/ca-module.cpp
index 43becc5..40a4060 100644
--- a/src/ca-module.cpp
+++ b/src/ca-module.cpp
@@ -42,7 +42,7 @@
 
 _LOG_INIT(ndncert.ca);
 
-CaModule::CaModule(Face& face, security::v2::KeyChain& keyChain,
+CaModule::CaModule(Face& face, security::KeyChain& keyChain,
                    const std::string& configPath, const std::string& storageType)
     : m_face(face)
     , m_keyChain(keyChain)
@@ -191,7 +191,7 @@
   // get ECDH pub key and cert request
   const auto& parameterTLV = request.getApplicationParameters();
   std::string ecdhPub;
-  shared_ptr<security::v2::Certificate> clientCert;
+  shared_ptr<security::Certificate> clientCert;
   try {
       NEW_RENEW_REVOKE::decodeApplicationParameters(parameterTLV, requestType, ecdhPub, clientCert);
   } catch (const std::exception& e) {
@@ -236,7 +236,7 @@
 
   // verify identity name
   if (!m_config.m_caItem.m_caPrefix.isPrefixOf(clientCert->getIdentity())
-      || !security::v2::Certificate::isValidName(clientCert->getName())
+      || !security::Certificate::isValidName(clientCert->getName())
       || clientCert->getIdentity().size() <= m_config.m_caItem.m_caPrefix.size()) {
       _LOG_ERROR("An invalid certificate name is being requested " << clientCert->getName());
       m_face.put(generateErrorDataPacket(request.getName(), ErrorCode::NAME_NOT_ALLOWED,
@@ -421,13 +421,13 @@
   }
 }
 
-security::v2::Certificate
+security::Certificate
 CaModule::issueCertificate(const CaState& requestState)
 {
   auto expectedPeriod =
       requestState.m_cert.getValidityPeriod().getPeriod();
   security::ValidityPeriod period(expectedPeriod.first, expectedPeriod.second);
-  security::v2::Certificate newCert;
+  security::Certificate newCert;
 
   Name certName = requestState.m_cert.getKeyName();
   certName.append("NDNCERT").append(std::to_string(random::generateSecureWord64()));
diff --git a/src/ca-module.hpp b/src/ca-module.hpp
index 04d594f..64af10a 100644
--- a/src/ca-module.hpp
+++ b/src/ca-module.hpp
@@ -31,7 +31,7 @@
 class CaModule : noncopyable
 {
 public:
-  CaModule(Face& face, security::v2::KeyChain& keyChain, const std::string& configPath,
+  CaModule(Face& face, security::KeyChain& keyChain, const std::string& configPath,
            const std::string& storageType = "ca-storage-sqlite3");
 
   ~CaModule();
@@ -73,7 +73,7 @@
   CaState
   getCertificateRequest(const Interest& request);
 
-  security::v2::Certificate
+  security::Certificate
   issueCertificate(const CaState& requestState);
 
   void
@@ -86,7 +86,7 @@
   Face& m_face;
   CaConfig m_config;
   unique_ptr<CaStorage> m_storage;
-  security::v2::KeyChain& m_keyChain;
+  security::KeyChain& m_keyChain;
   uint8_t m_requestIdGenKey[32];
   std::unique_ptr<Data> m_profileData;
 
diff --git a/src/ca-state.cpp b/src/ca-state.cpp
index e72b19f..b48f82d 100644
--- a/src/ca-state.cpp
+++ b/src/ca-state.cpp
@@ -43,7 +43,7 @@
 }
 
 CaState::CaState(const Name& caName, const std::string& requestId, RequestType requestType, Status status,
-                 const security::v2::Certificate& cert, Block encryptionKey)
+                 const security::Certificate& cert, Block encryptionKey)
     : m_caPrefix(caName)
     , m_requestId(requestId)
     , m_requestType(requestType)
@@ -54,7 +54,7 @@
 }
 
 CaState::CaState(const Name& caName, const std::string& requestId, RequestType requestType, Status status,
-                 const security::v2::Certificate& cert, const std::string& challengeType,
+                 const security::Certificate& cert, const std::string& challengeType,
                  const std::string& challengeStatus, const system_clock::TimePoint& challengeTp,
                  size_t remainingTries, time::seconds remainingTime, JsonSection&& challengeSecrets,
                  Block encryptionKey)
diff --git a/src/ca-state.hpp b/src/ca-state.hpp
index 6806688..baf791c 100644
--- a/src/ca-state.hpp
+++ b/src/ca-state.hpp
@@ -49,9 +49,9 @@
 public:
   CaState();
   CaState(const Name& caName, const std::string& requestId, RequestType requestType, Status status,
-          const security::v2::Certificate& cert, Block m_encryptionKey);
+          const security::Certificate& cert, Block m_encryptionKey);
   CaState(const Name& caName, const std::string& requestId, RequestType requestType, Status status,
-          const security::v2::Certificate& cert, const std::string& challengeType,
+          const security::Certificate& cert, const std::string& challengeType,
           const std::string& challengeStatus, const system_clock::TimePoint& challengeTp,
           size_t remainingTries, time::seconds remainingTime, JsonSection&& challengeSecrets,
           Block m_encryptionKey);
@@ -61,7 +61,7 @@
   std::string m_requestId;
   RequestType m_requestType;
   Status m_status;
-  security::v2::Certificate m_cert;
+  security::Certificate m_cert;
   Block m_encryptionKey;
 
   std::string m_challengeType;
diff --git a/src/ca-storage/ca-memory.cpp b/src/ca-storage/ca-memory.cpp
index 1fe27e1..e08a822 100644
--- a/src/ca-storage/ca-memory.cpp
+++ b/src/ca-storage/ca-memory.cpp
@@ -20,7 +20,7 @@
 
 #include "ca-memory.hpp"
 
-#include <ndn-cxx/security/v2/validation-policy.hpp>
+#include <ndn-cxx/security/validation-policy.hpp>
 
 namespace ndn {
 namespace ndncert {
diff --git a/src/ca-storage/ca-sqlite.cpp b/src/ca-storage/ca-sqlite.cpp
index 8292f36..594df46 100644
--- a/src/ca-storage/ca-sqlite.cpp
+++ b/src/ca-storage/ca-sqlite.cpp
@@ -23,7 +23,7 @@
 #include <sqlite3.h>
 
 #include <boost/filesystem.hpp>
-#include <ndn-cxx/security/v2/validation-policy.hpp>
+#include <ndn-cxx/security/validation-policy.hpp>
 #include <ndn-cxx/util/sqlite3-statement.hpp>
 
 namespace ndn {
@@ -120,7 +120,7 @@
     Name caName(statement.getBlock(1));
     auto status = static_cast<Status>(statement.getInt(2));
     auto challengeStatus = statement.getString(3);
-    security::v2::Certificate cert(statement.getBlock(4));
+    security::Certificate cert(statement.getBlock(4));
     auto challengeType = statement.getString(5);
     auto challengeSecrets = statement.getString(6);
     auto challengeTp = statement.getString(7);
@@ -217,7 +217,7 @@
     Name caName(statement.getBlock(2));
     auto status = static_cast<Status>(statement.getInt(3));
     auto challengeStatus = statement.getString(4);
-    security::v2::Certificate cert(statement.getBlock(5));
+    security::Certificate cert(statement.getBlock(5));
     auto challengeType = statement.getString(6);
     auto challengeSecrets = statement.getString(7);
     auto challengeTp = statement.getString(8);
@@ -254,7 +254,7 @@
     Name caName(statement.getBlock(2));
     auto status = static_cast<Status>(statement.getInt(3));
     auto challengeStatus = statement.getString(4);
-    security::v2::Certificate cert(statement.getBlock(5));
+    security::Certificate cert(statement.getBlock(5));
     auto challengeType = statement.getString(6);
     auto challengeSecrets = statement.getString(7);
     auto challengeTp = statement.getString(8);
diff --git a/src/configuration.cpp b/src/configuration.cpp
index 3cc4aa7..618202c 100644
--- a/src/configuration.cpp
+++ b/src/configuration.cpp
@@ -75,7 +75,7 @@
   auto certificateStr = configJson.get(CONFIG_CERTIFICATE, "");
   if (certificateStr != "") {
     std::istringstream ss(certificateStr);
-    m_cert = io::load<security::v2::Certificate>(ss);
+    m_cert = io::load<security::Certificate>(ss);
   }
 }
 
@@ -141,9 +141,9 @@
         BOOST_THROW_EXCEPTION(std::runtime_error("Redirect-to item's ca-prefix or certificate cannot be empty."));
       }
       std::istringstream ss(caCertStr);
-      auto caCert = io::load<security::v2::Certificate>(ss);
+      auto caCert = io::load<security::Certificate>(ss);
       if (!m_redirection) {
-        m_redirection = std::vector<std::shared_ptr<security::v2::Certificate>>();
+        m_redirection = std::vector<std::shared_ptr<security::Certificate>>();
       }
       m_redirection->push_back(caCert);
     }
diff --git a/src/configuration.hpp b/src/configuration.hpp
index 40285e0..44c7df9 100644
--- a/src/configuration.hpp
+++ b/src/configuration.hpp
@@ -63,7 +63,7 @@
    * CA's certificate. Only Client side will have m_cert.
    * Default: nullptr.
    */
-  std::shared_ptr<security::v2::Certificate> m_cert;
+  std::shared_ptr<security::Certificate> m_cert;
 
   void
   parse(const JsonSection& configJson);
@@ -126,7 +126,7 @@
    * Used for CA redirection as specified in
    * https://github.com/named-data/ndncert/wiki/NDNCERT-Protocol-0.3-PROBE-Extensions#probe-extension-for-redirection
    */
-  boost::optional<std::vector<std::shared_ptr<security::v2::Certificate>>> m_redirection;
+  boost::optional<std::vector<std::shared_ptr<security::Certificate>>> m_redirection;
   /**
    * StatusUpdate Callback function
    */
diff --git a/src/identity-challenge/challenge-credential.cpp b/src/identity-challenge/challenge-credential.cpp
index f6e26c2..0d171e4 100644
--- a/src/identity-challenge/challenge-credential.cpp
+++ b/src/identity-challenge/challenge-credential.cpp
@@ -65,7 +65,7 @@
   auto it = anchorList.begin();
   for (; it != anchorList.end(); it++) {
     std::istringstream ss(it->second.get("certificate", ""));
-    auto cert = io::load<security::v2::Certificate>(ss);
+    auto cert = io::load<security::Certificate>(ss);
     if (cert == nullptr) {
       _LOG_ERROR("Cannot load the certificate from config file");
       continue;
@@ -82,7 +82,7 @@
   if (m_trustAnchors.empty()) {
     parseConfigFile();
   }
-  security::v2::Certificate credential;
+  security::Certificate credential;
   const uint8_t* signature;
   size_t signatureLen;
   const auto& elements = params.elements();
@@ -105,7 +105,7 @@
   }
 
   // verify the credential and the self-signed cert
-  Name signingKeyName = credential.getSignature().getKeyLocator().getName();
+  Name signingKeyName = credential.getSignatureInfo().getKeyLocator().getName();
   security::transform::PublicKey key;
   const auto& pubKeyBuffer = credential.getPublicKey();
   key.loadPkcs8(pubKeyBuffer.data(), pubKeyBuffer.size());
@@ -176,8 +176,8 @@
                                        KeyChain& keyChain, const Name& issuedCertName, const std::string& requestId)
 {
   auto& pib = keyChain.getPib();
-  auto id = pib.getIdentity(security::v2::extractIdentityFromCertName(issuedCertName));
-  auto issuedCert = id.getKey(security::v2::extractKeyNameFromCertName(issuedCertName)).getCertificate(issuedCertName);
+  auto id = pib.getIdentity(security::extractIdentityFromCertName(issuedCertName));
+  auto issuedCert = id.getKey(security::extractKeyNameFromCertName(issuedCertName)).getCertificate(issuedCertName);
   auto issuedCertTlv = issuedCert.wireEncode();
   auto signatureTlv = keyChain.sign((uint8_t*)requestId.c_str(), requestId.length(), security::signingByCertificate(issuedCertName));
   for (auto& item : params) {
diff --git a/src/identity-challenge/challenge-credential.hpp b/src/identity-challenge/challenge-credential.hpp
index 2c0229b..49670f6 100644
--- a/src/identity-challenge/challenge-credential.hpp
+++ b/src/identity-challenge/challenge-credential.hpp
@@ -76,7 +76,7 @@
   parseConfigFile();
 
 PUBLIC_WITH_TESTS_ELSE_PRIVATE:
-  std::list<security::v2::Certificate> m_trustAnchors;
+  std::list<security::Certificate> m_trustAnchors;
   std::string m_configFile;
 };
 
diff --git a/src/ndncert-common.hpp b/src/ndncert-common.hpp
index c77cedb..a1077cc 100644
--- a/src/ndncert-common.hpp
+++ b/src/ndncert-common.hpp
@@ -47,7 +47,7 @@
 #include <ndn-cxx/lp/nack.hpp>
 #include <ndn-cxx/name.hpp>
 #include <ndn-cxx/security/key-chain.hpp>
-#include <ndn-cxx/security/v2/certificate.hpp>
+#include <ndn-cxx/security/certificate.hpp>
 #include <ndn-cxx/util/logger.hpp>
 #include <boost/algorithm/string.hpp>
 #include <boost/assert.hpp>
diff --git a/src/protocol-detail/info.cpp b/src/protocol-detail/info.cpp
index 7c0e449..58e8fc3 100644
--- a/src/protocol-detail/info.cpp
+++ b/src/protocol-detail/info.cpp
@@ -24,13 +24,13 @@
 namespace ndncert {
 
 Block
-INFO::encodeDataContent(const CaProfile& caConfig, const security::v2::Certificate& certificate)
+INFO::encodeDataContent(const CaProfile& caConfig, const security::Certificate& certificate)
 {
   auto content = makeEmptyBlock(tlv::Content);
   content.push_back(makeNestedBlock(tlv_ca_prefix, caConfig.m_caPrefix));
   std::string caInfo = "";
   if (caConfig.m_caInfo == "") {
-    caInfo = "Issued by " + certificate.getSignature().getKeyLocator().getName().toUri();
+    caInfo = "Issued by " + certificate.getSignatureInfo().getKeyLocator().getName().toUri();
   }
   else {
     caInfo = caConfig.m_caInfo;
@@ -73,7 +73,7 @@
       break;
     case tlv_ca_certificate:
       item.parse();
-      result.m_cert = std::make_shared<security::v2::Certificate>(item.get(tlv::Data));
+      result.m_cert = std::make_shared<security::Certificate>(item.get(tlv::Data));
       break;
     default:
       continue;
diff --git a/src/protocol-detail/info.hpp b/src/protocol-detail/info.hpp
index 571d120..d34c0a2 100644
--- a/src/protocol-detail/info.hpp
+++ b/src/protocol-detail/info.hpp
@@ -32,7 +32,7 @@
    * Encode CA configuration and its certificate into a TLV block as INFO Data packet content.
    */
   static Block
-  encodeDataContent(const CaProfile& caConfig, const security::v2::Certificate& certificate);
+  encodeDataContent(const CaProfile& caConfig, const security::Certificate& certificate);
 
   /**
    * Decode CA configuration from the TLV block of INFO Data packet content.
diff --git a/src/protocol-detail/new-renew-revoke.cpp b/src/protocol-detail/new-renew-revoke.cpp
index b368c8c..3ce3ac0 100644
--- a/src/protocol-detail/new-renew-revoke.cpp
+++ b/src/protocol-detail/new-renew-revoke.cpp
@@ -31,7 +31,7 @@
 _LOG_INIT(ndncert.encoding.new_renew_revoke);
 
 Block
-NEW_RENEW_REVOKE::encodeApplicationParameters(RequestType requestType, const std::string& ecdhPub, const security::v2::Certificate& certRequest)
+NEW_RENEW_REVOKE::encodeApplicationParameters(RequestType requestType, const std::string& ecdhPub, const security::Certificate& certRequest)
 {
   Block request = makeEmptyBlock(tlv::ApplicationParameters);
   std::stringstream ss;
@@ -57,7 +57,7 @@
 
 void
 NEW_RENEW_REVOKE::decodeApplicationParameters(const Block& payload, RequestType requestType, std::string& ecdhPub,
-                                              shared_ptr<security::v2::Certificate>& clientCert) {
+                                              shared_ptr<security::Certificate>& clientCert) {
   payload.parse();
 
   ecdhPub = readString(payload.get(tlv_ecdh_pub));
@@ -70,8 +70,8 @@
   }
   requestPayload.parse();
 
-  security::v2::Certificate cert = security::v2::Certificate(requestPayload.get(tlv::Data));
-  clientCert = make_shared<security::v2::Certificate>(cert);
+  security::Certificate cert = security::Certificate(requestPayload.get(tlv::Data));
+  clientCert = make_shared<security::Certificate>(cert);
 }
 
 Block
diff --git a/src/protocol-detail/new-renew-revoke.hpp b/src/protocol-detail/new-renew-revoke.hpp
index de5d558..f9710b8 100644
--- a/src/protocol-detail/new-renew-revoke.hpp
+++ b/src/protocol-detail/new-renew-revoke.hpp
@@ -29,10 +29,10 @@
 class NEW_RENEW_REVOKE {
 public:
   static Block
-  encodeApplicationParameters(RequestType requestType, const std::string& ecdhPub, const security::v2::Certificate& certRequest);
+  encodeApplicationParameters(RequestType requestType, const std::string& ecdhPub, const security::Certificate& certRequest);
 
   static void
-  decodeApplicationParameters(const Block& block, RequestType requestType, std::string& ecdhPub, shared_ptr<security::v2::Certificate>& certRequest);
+  decodeApplicationParameters(const Block& block, RequestType requestType, std::string& ecdhPub, shared_ptr<security::Certificate>& certRequest);
 
   static Block
   encodeDataContent(const std::string& ecdhKey, const std::string& salt,
diff --git a/src/protocol-detail/probe.cpp b/src/protocol-detail/probe.cpp
index d2f9e7e..b0ac75c 100644
--- a/src/protocol-detail/probe.cpp
+++ b/src/protocol-detail/probe.cpp
@@ -50,7 +50,7 @@
 
 Block
 PROBE::encodeDataContent(const std::vector<Name>& identifiers, boost::optional<size_t> maxSuffixLength,
-                         boost::optional<std::vector<std::shared_ptr<security::v2::Certificate>>> redirectionItems)
+                         boost::optional<std::vector<std::shared_ptr<security::Certificate>>> redirectionItems)
 {
   Block content = makeEmptyBlock(tlv::Content);
   for (const auto& name : identifiers) {
diff --git a/src/protocol-detail/probe.hpp b/src/protocol-detail/probe.hpp
index 6e19bab..7d61461 100644
--- a/src/protocol-detail/probe.hpp
+++ b/src/protocol-detail/probe.hpp
@@ -40,7 +40,7 @@
   static Block
   encodeDataContent(const std::vector<Name>& identifiers,
                     boost::optional<size_t> maxSuffixLength = boost::none,
-                    boost::optional<std::vector<std::shared_ptr<security::v2::Certificate>>> redirectionItems = boost::none);
+                    boost::optional<std::vector<std::shared_ptr<security::Certificate>>> redirectionItems = boost::none);
 
   static std::vector<std::tuple<std::string, std::string>>
   decodeApplicationParameters(const Block& block);
diff --git a/src/requester.cpp b/src/requester.cpp
index 22c9d27..0b5a6c5 100644
--- a/src/requester.cpp
+++ b/src/requester.cpp
@@ -40,7 +40,7 @@
 
 _LOG_INIT(ndncert.client);
 
-RequesterState::RequesterState(security::v2::KeyChain& keyChain, const CaProfile& caItem, RequestType requestType)
+RequesterState::RequesterState(security::KeyChain& keyChain, const CaProfile& caItem, RequestType requestType)
   : m_caItem(caItem)
   , m_keyChain(keyChain)
   , m_type(requestType)
@@ -85,7 +85,7 @@
 {
   auto caItem = INFO::decodeDataContent(reply.getContent());
   auto certBlock = caItem.m_cert->wireEncode();
-  caItem.m_cert = std::make_shared<security::v2::Certificate>(certBlock);
+  caItem.m_cert = std::make_shared<security::Certificate>(certBlock);
   if (caItem.m_cert->getFullName() != caCertFullName) {
     _LOG_ERROR("Ca profile does not match the certificate information offered by the original CA.");
     BOOST_THROW_EXCEPTION(std::runtime_error("Cannot verify replied Data packet signature."));
@@ -156,7 +156,7 @@
   auto& keyName = state.m_keyPair.getName();
 
   // generate certificate request
-  security::v2::Certificate certRequest;
+  security::Certificate certRequest;
   certRequest.setName(Name(keyName).append("cert-request").appendVersion());
   certRequest.setContentType(tlv::ContentType_Key);
   certRequest.setContent(state.m_keyPair.getPublicKey().data(), state.m_keyPair.getPublicKey().size());
@@ -179,7 +179,7 @@
 }
 
 shared_ptr<Interest>
-Requester::genRevokeInterest(RequesterState& state, const security::v2::Certificate& certificate)
+Requester::genRevokeInterest(RequesterState& state, const security::Certificate& certificate)
 {
   if (!state.m_caItem.m_caPrefix.isPrefixOf(certificate.getName())) {
     return nullptr;
@@ -290,11 +290,11 @@
   return interest;
 }
 
-shared_ptr<security::v2::Certificate>
+shared_ptr<security::Certificate>
 Requester::onCertFetchResponse(const Data& reply)
 {
   try {
-    return std::make_shared<security::v2::Certificate>(reply);
+    return std::make_shared<security::Certificate>(reply);
   }
   catch (const std::exception& e) {
     _LOG_ERROR("Cannot parse replied certificate ");
diff --git a/src/requester.hpp b/src/requester.hpp
index c6510b1..1b64d4b 100644
--- a/src/requester.hpp
+++ b/src/requester.hpp
@@ -34,7 +34,7 @@
 
 struct RequesterState {
   explicit
-  RequesterState(security::v2::KeyChain& keyChain, const CaProfile& caItem, RequestType requestType);
+  RequesterState(security::KeyChain& keyChain, const CaProfile& caItem, RequestType requestType);
 
   /**
    * The CA profile for this request.
@@ -43,7 +43,7 @@
   /**
    * The local keychain to generate and install identities, keys and certificates
    */
-  security::v2::KeyChain& m_keyChain;
+  security::KeyChain& m_keyChain;
   /**
    * The type of request. Either NEW, RENEW, or REVOKE.
    */
@@ -181,7 +181,7 @@
    * @return The shared pointer to the encoded interest.
    */
   static shared_ptr<Interest>
-  genRevokeInterest(RequesterState& state, const security::v2::Certificate& certificate);
+  genRevokeInterest(RequesterState& state, const security::Certificate& certificate);
 
   /**
    * Decodes the replied data of NEW, RENEW, or REVOKE interest from the CA.
@@ -236,7 +236,7 @@
    * @param reply, the data replied from the certificate fetch interest.
    * @return The shared pointer to the certificate being fetched.
    */
-  static shared_ptr<security::v2::Certificate>
+  static shared_ptr<security::Certificate>
   onCertFetchResponse(const Data& reply);
 
   /**
diff --git a/tests/identity-management-fixture.cpp b/tests/identity-management-fixture.cpp
index 84e1492..c3d6727 100644
--- a/tests/identity-management-fixture.cpp
+++ b/tests/identity-management-fixture.cpp
@@ -20,7 +20,7 @@
  */
 
 #include "identity-management-fixture.hpp"
-#include <ndn-cxx/security/v2/additional-description.hpp>
+#include <ndn-cxx/security/additional-description.hpp>
 #include <ndn-cxx/util/io.hpp>
 #include <boost/filesystem.hpp>
 
diff --git a/tests/identity-management-fixture.hpp b/tests/identity-management-fixture.hpp
index 0400553..063c7ae 100644
--- a/tests/identity-management-fixture.hpp
+++ b/tests/identity-management-fixture.hpp
@@ -22,7 +22,7 @@
 #ifndef NDN_TESTS_IDENTITY_MANAGEMENT_FIXTURE_HPP
 #define NDN_TESTS_IDENTITY_MANAGEMENT_FIXTURE_HPP
 
-#include <ndn-cxx/security/v2/key-chain.hpp>
+#include <ndn-cxx/security/key-chain.hpp>
 #include <ndn-cxx/security/signing-helpers.hpp>
 #include <vector>
 
@@ -60,7 +60,7 @@
    */
   security::Identity
   addIdentity(const Name& identityName,
-              const KeyParams& params = security::v2::KeyChain::getDefaultKeyParams());
+              const KeyParams& params = security::KeyChain::getDefaultKeyParams());
 
   /**
    *  @brief Save identity certificate to a file
@@ -82,12 +82,12 @@
    */
   security::Identity
   addSubCertificate(const Name& subIdentityName, const security::Identity& issuer,
-                    const KeyParams& params = security::v2::KeyChain::getDefaultKeyParams());
+                    const KeyParams& params = security::KeyChain::getDefaultKeyParams());
 
   /**
    * @brief Add a self-signed certificate to @p key with issuer ID @p issuer
    */
-  security::v2::Certificate
+  security::Certificate
   addCertificate(const security::Key& key, const std::string& issuer);
 
 protected:
diff --git a/tests/unit-tests/bench.t.cpp b/tests/unit-tests/bench.t.cpp
index 13adf8c..1766a18 100644
--- a/tests/unit-tests/bench.t.cpp
+++ b/tests/unit-tests/bench.t.cpp
@@ -101,7 +101,7 @@
   // generate NEW Interest
   CaProfile item;
   item.m_caPrefix = Name("/ndn");
-  item.m_cert = std::make_shared<security::v2::Certificate>(cert);
+  item.m_cert = std::make_shared<security::Certificate>(cert);
   RequesterState state(m_keyChain, item, RequestType::NEW);
   auto newInterest = Requester::genNewInterest(state, Name("/ndn/alice"),
                                                time::system_clock::now(),
diff --git a/tests/unit-tests/ca-module.t.cpp b/tests/unit-tests/ca-module.t.cpp
index a7b9875..9f7d53a 100644
--- a/tests/unit-tests/ca-module.t.cpp
+++ b/tests/unit-tests/ca-module.t.cpp
@@ -206,8 +206,8 @@
       }
     }
     BOOST_CHECK_EQUAL(redirectionItems.size(), 2);
-    BOOST_CHECK_EQUAL(security::v2::extractIdentityFromCertName(redirectionItems[0].getPrefix(-1)), "/ndn/site1");
-    BOOST_CHECK_EQUAL(security::v2::extractIdentityFromCertName(redirectionItems[1].getPrefix(-1)), "/ndn/site1");
+    BOOST_CHECK_EQUAL(security::extractIdentityFromCertName(redirectionItems[0].getPrefix(-1)), "/ndn/site1");
+    BOOST_CHECK_EQUAL(security::extractIdentityFromCertName(redirectionItems[1].getPrefix(-1)), "/ndn/site1");
   });
   face.receive(interest);
   advanceClocks(time::milliseconds(20), 60);
@@ -226,7 +226,7 @@
 
   CaProfile item;
   item.m_caPrefix = Name("/ndn");
-  item.m_cert = std::make_shared<security::v2::Certificate>(cert);
+  item.m_cert = std::make_shared<security::Certificate>(cert);
   RequesterState state(m_keyChain, item, RequestType::NEW);
   auto interest = Requester::genNewInterest(state, Name("/ndn/zhiyi"),
                                             time::system_clock::now(),
@@ -275,7 +275,7 @@
 
   CaProfile item;
   item.m_caPrefix = Name("/ndn");
-  item.m_cert = std::make_shared<security::v2::Certificate>(cert);
+  item.m_cert = std::make_shared<security::Certificate>(cert);
   RequesterState state(m_keyChain, item, RequestType::NEW);
   auto current_tp = time::system_clock::now();
   auto interest1 = Requester::genNewInterest(state, Name("/ndn/zhiyi"), current_tp, current_tp - time::hours(1));
@@ -306,7 +306,7 @@
 
   CaProfile item;
   item.m_caPrefix = Name("/ndn");
-  item.m_cert = std::make_shared<security::v2::Certificate>(cert);
+  item.m_cert = std::make_shared<security::Certificate>(cert);
   RequesterState state(m_keyChain, item, RequestType::NEW);
 
   auto interest1 = Requester::genNewInterest(state, Name("/ndn/a"), time::system_clock::now(),
@@ -347,7 +347,7 @@
 
   CaProfile item;
   item.m_caPrefix = Name("/ndn");
-  item.m_cert = std::make_shared<security::v2::Certificate>(cert);
+  item.m_cert = std::make_shared<security::Certificate>(cert);
   RequesterState state(m_keyChain, item, RequestType::NEW);
 
   auto current_tp = time::system_clock::now();
@@ -378,7 +378,7 @@
   // generate NEW Interest
   CaProfile item;
   item.m_caPrefix = Name("/ndn");
-  item.m_cert = std::make_shared<security::v2::Certificate>(cert);
+  item.m_cert = std::make_shared<security::Certificate>(cert);
   RequesterState state(m_keyChain, item, RequestType::NEW);
 
   auto newInterest = Requester::genNewInterest(state, Name("/ndn/zhiyi"), time::system_clock::now(),
@@ -453,7 +453,7 @@
   //generate a certificate
   auto clientIdentity = m_keyChain.createIdentity("/ndn/qwerty");
   auto clientKey = clientIdentity.getDefaultKey();
-  security::v2::Certificate clientCert;
+  security::Certificate clientCert;
   clientCert.setName(Name(clientKey.getName()).append("cert-request").appendVersion());
   clientCert.setContentType(tlv::ContentType_Key);
   clientCert.setFreshnessPeriod(time::hours(24));
@@ -467,7 +467,7 @@
 
   CaProfile item;
   item.m_caPrefix = Name("/ndn");
-  item.m_cert = std::make_shared<security::v2::Certificate>(cert);
+  item.m_cert = std::make_shared<security::Certificate>(cert);
   RequesterState state(m_keyChain, item, RequestType::REVOKE);
 
   auto interest = Requester::genRevokeInterest(state, issuedCert);
@@ -516,7 +516,7 @@
   // generate a certificate
   auto clientIdentity = m_keyChain.createIdentity("/ndn/qwerty");
   auto clientKey = clientIdentity.getDefaultKey();
-  security::v2::Certificate clientCert;
+  security::Certificate clientCert;
   clientCert.setName(Name(clientKey.getName()).append("NDNCERT").append(std::to_string(1473283247810732701)));
   clientCert.setContentType(tlv::ContentType_Key);
   clientCert.setFreshnessPeriod(time::hours(24));
@@ -528,7 +528,7 @@
 
   CaProfile item;
   item.m_caPrefix = Name("/ndn");
-  item.m_cert = std::make_shared<security::v2::Certificate>(cert);
+  item.m_cert = std::make_shared<security::Certificate>(cert);
   RequesterState state(m_keyChain, item, RequestType::NEW);
 
   auto interest = Requester::genRevokeInterest(state, clientCert);
diff --git a/tests/unit-tests/challenge-credential.t.cpp b/tests/unit-tests/challenge-credential.t.cpp
index 236d274..46c5928 100644
--- a/tests/unit-tests/challenge-credential.t.cpp
+++ b/tests/unit-tests/challenge-credential.t.cpp
@@ -61,7 +61,7 @@
   auto identityB = addIdentity(Name("/trust/cert"));
   auto keyB = identityB.getDefaultKey();
   auto credentialName = Name(keyB.getName()).append("Credential").appendVersion();
-  security::v2::Certificate credential;
+  security::Certificate credential;
   credential.setName(credentialName);
   credential.setContent(keyB.getPublicKey().data(), keyB.getPublicKey().size());
   SignatureInfo signatureInfo;
diff --git a/tests/unit-tests/requester.t.cpp b/tests/unit-tests/requester.t.cpp
index 8ac66c9..44a4b7f 100644
--- a/tests/unit-tests/requester.t.cpp
+++ b/tests/unit-tests/requester.t.cpp
@@ -44,7 +44,7 @@
   ca_profile.m_probeParameterKeys.push_back("uid");
   ca_profile.m_probeParameterKeys.push_back("name");
   ca_profile.m_caPrefix = Name("/site");
-  ca_profile.m_cert = std::make_shared<security::v2::Certificate>(cert);
+  ca_profile.m_cert = std::make_shared<security::Certificate>(cert);
 
   std::vector<std::tuple<std::string, std::string>> probeParams;
   probeParams.push_back(std::make_tuple("email", "zhiyi@cs.ucla.edu"));
@@ -68,7 +68,7 @@
   ca_profile.m_probeParameterKeys.push_back("uid");
   ca_profile.m_probeParameterKeys.push_back("name");
   ca_profile.m_caPrefix = Name("/site");
-  ca_profile.m_cert = std::make_shared<security::v2::Certificate>(cert);
+  ca_profile.m_cert = std::make_shared<security::Certificate>(cert);
 
   std::vector<Name> availableNames;
   availableNames.push_back(Name("/site1"));
@@ -92,8 +92,8 @@
   BOOST_CHECK_EQUAL(names[1].toUri(), "/site2");
 
   BOOST_CHECK_EQUAL(redirects.size(), 2);
-  BOOST_CHECK_EQUAL(security::v2::extractIdentityFromCertName(redirects[0].getPrefix(-1)), "/ndn/site1");
-  BOOST_CHECK_EQUAL(security::v2::extractIdentityFromCertName(redirects[1].getPrefix(-1)), "/ndn/site1");
+  BOOST_CHECK_EQUAL(security::extractIdentityFromCertName(redirects[0].getPrefix(-1)), "/ndn/site1");
+  BOOST_CHECK_EQUAL(security::extractIdentityFromCertName(redirects[1].getPrefix(-1)), "/ndn/site1");
 }
 
 BOOST_AUTO_TEST_CASE(ErrorHandling)
@@ -104,7 +104,7 @@
 
   CaProfile item;
   item.m_caPrefix = Name("/site");
-  item.m_cert = std::make_shared<security::v2::Certificate>(cert);
+  item.m_cert = std::make_shared<security::Certificate>(cert);
   RequesterState state(m_keyChain, item, RequestType::NEW);
 
   Data errorPacket;
diff --git a/tools/ndncert-ca-server.cpp b/tools/ndncert-ca-server.cpp
index 281e7fe..be0c07d 100644
--- a/tools/ndncert-ca-server.cpp
+++ b/tools/ndncert-ca-server.cpp
@@ -33,7 +33,7 @@
 namespace ndncert {
 
 Face face;
-security::v2::KeyChain keyChain;
+security::KeyChain keyChain;
 std::string repoHost = "localhost";
 std::string repoPort = "7376";
 
diff --git a/tools/ndncert-client.cpp b/tools/ndncert-client.cpp
index 77cca60..d948854 100644
--- a/tools/ndncert-client.cpp
+++ b/tools/ndncert-client.cpp
@@ -43,7 +43,7 @@
 
 size_t nStep = 1;
 Face face;
-security::v2::KeyChain keyChain;
+security::KeyChain keyChain;
 shared_ptr<RequesterState> requesterState = nullptr;
 
 static void
@@ -217,7 +217,7 @@
             << "Step " << nStep++
             << ": Will use a new trust anchor, please double check the identity info:" << std::endl
             << "> New CA name: " << profile->m_caPrefix.toUri() << std::endl
-            << "> This trust anchor information is signed by: " << reply.getSignature().getKeyLocator() << std::endl
+            << "> This trust anchor information is signed by: " << reply.getSignatureInfo().getKeyLocator() << std::endl
             << "> The certificate: " << profile->m_cert << std::endl
             << "Do you trust the information? Type in YES or NO" << std::endl;
 
@@ -252,7 +252,7 @@
   std::cerr << "\nOr choose another trusted CA suggested by the CA: " << std::endl;
   for (const auto& redirect : redirects) {
     std::cerr << "> Index: " << count++ << std::endl
-              << ">> Suggested CA: " << security::v2::extractIdentityFromCertName(redirect.getPrefix(-1)) << std::endl;
+              << ">> Suggested CA: " << security::extractIdentityFromCertName(redirect.getPrefix(-1)) << std::endl;
   }
   std::cerr << "Please type in the index of your choice:" << std::endl;
   size_t index = 0;
@@ -277,7 +277,7 @@
   else {
     //redirects
     auto redirectedCaFullName = redirects[index - names.size()];
-    auto redirectedCaName = security::v2::extractIdentityFromCertName(redirectedCaFullName.getPrefix(-1));
+    auto redirectedCaName = security::extractIdentityFromCertName(redirectedCaFullName.getPrefix(-1));
     std::cerr << "You selected to be redirected to CA: " << redirectedCaName.toUri() << std::endl;
     face.expressInterest(
         *Requester::genCaProfileDiscoveryInterest(redirectedCaName),
