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);
