diff --git a/tests/unit-tests/security/conf/checker.t.cpp b/tests/unit-tests/security/conf/checker.t.cpp
index f43231b..be2f9ea 100644
--- a/tests/unit-tests/security/conf/checker.t.cpp
+++ b/tests/unit-tests/security/conf/checker.t.cpp
@@ -213,11 +213,11 @@
   using security::conf::RegexKeyLocatorNameChecker;
 
   Name identity("/SecurityTestConfChecker/CustomizedCheckerTest3");
-  addIdentity(identity, EcdsaKeyParams());
+  addIdentity(identity, EcKeyParams());
   Name certName = m_keyChain.getDefaultCertificateNameForIdentity(identity);
 
   Name identity2("/SecurityTestConfChecker/CustomizedCheckerTest3Wrong");
-  addIdentity(identity2, EcdsaKeyParams());
+  addIdentity(identity2, EcKeyParams());
   Name certName2 = m_keyChain.getDefaultCertificateNameForIdentity(identity2);
 
   Name packetName("/SecurityTestConfChecker/CustomizedCheckerTest3/Data");
@@ -273,7 +273,7 @@
   using security::conf::HierarchicalChecker;
 
   Name identity("/SecurityTestConfChecker/HierarchicalCheckerTest1");
-  addIdentity(identity, EcdsaKeyParams());
+  addIdentity(identity, EcKeyParams());
   Name certName = m_keyChain.getDefaultCertificateNameForIdentity(identity);
 
   Name identity2("/SecurityTestConfChecker/HierarchicalCheckerTest1/Data");
@@ -363,7 +363,7 @@
   using security::conf::FixedSignerChecker;
 
   Name identity("/SecurityTestConfChecker/FixedSignerCheckerTest1");
-  addIdentity(identity, EcdsaKeyParams());
+  addIdentity(identity, EcKeyParams());
   Name certName = m_keyChain.getDefaultCertificateNameForIdentity(identity);
   shared_ptr<v1::IdentityCertificate> cert1 = m_keyChain.getCertificate(certName);
 
diff --git a/tests/unit-tests/security/key-params.t.cpp b/tests/unit-tests/security/key-params.t.cpp
index f8efed1..a877625 100644
--- a/tests/unit-tests/security/key-params.t.cpp
+++ b/tests/unit-tests/security/key-params.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).
  *
@@ -53,22 +53,22 @@
   BOOST_CHECK_EQUAL(params4.getKeyId(), keyId);
 }
 
-BOOST_AUTO_TEST_CASE(Ecdsa)
+BOOST_AUTO_TEST_CASE(Ec)
 {
-  EcdsaKeyParams params;
+  EcKeyParams params;
   BOOST_CHECK_EQUAL(params.getKeyType(), KeyType::EC);
   BOOST_CHECK_EQUAL(params.getKeySize(), 256);
   BOOST_CHECK(params.getKeyIdType() == KeyIdType::RANDOM);
 
-  EcdsaKeyParams params2(384, KeyIdType::SHA256);
+  EcKeyParams params2(384, KeyIdType::SHA256);
   BOOST_CHECK_EQUAL(params2.getKeyType(), KeyType::EC);
   BOOST_CHECK_EQUAL(params2.getKeySize(), 384);
   BOOST_CHECK(params2.getKeyIdType() == KeyIdType::SHA256);
 
-  BOOST_CHECK_THROW(EcdsaKeyParams(3), KeyParams::Error);
+  BOOST_CHECK_THROW(EcKeyParams(3), KeyParams::Error);
 
   name::Component keyId("keyId");
-  EcdsaKeyParams params4(keyId);
+  EcKeyParams params4(keyId);
   BOOST_CHECK(params4.getKeyType() == KeyType::EC);
   BOOST_CHECK_EQUAL(params4.getKeySize(), 256);
   BOOST_CHECK(params4.getKeyIdType() == KeyIdType::USER_SPECIFIED);
diff --git a/tests/unit-tests/security/pib/pib-data-fixture.cpp b/tests/unit-tests/security/pib/pib-data-fixture.cpp
index 544892d..0856b85 100644
--- a/tests/unit-tests/security/pib/pib-data-fixture.cpp
+++ b/tests/unit-tests/security/pib/pib-data-fixture.cpp
@@ -43,7 +43,7 @@
 //   printTestDataForId(const std::string& prefix, const Name& id)
 //   {
 //     for (int keyId : {1, 2}) {
-//       Name keyName = tpm.createKey(id, EcdsaKeyParams(name::Component::fromNumber(keyId)));
+//       Name keyName = tpm.createKey(id, EcKeyParams(name::Component::fromNumber(keyId)));
 
 //       for (int certVersion : {1, 2}) {
 //         Name certName = keyName;
diff --git a/tests/unit-tests/security/sec-rule-relative.t.cpp b/tests/unit-tests/security/sec-rule-relative.t.cpp
index 492f2a6..79f8831 100644
--- a/tests/unit-tests/security/sec-rule-relative.t.cpp
+++ b/tests/unit-tests/security/sec-rule-relative.t.cpp
@@ -35,18 +35,18 @@
 {
   Name rsaIdentity("/SecurityTestSecRule/Basic/Rsa");
   addIdentity(rsaIdentity, RsaKeyParams());
-  Name ecdsaIdentity("/SecurityTestSecRule/Basic/Ecdsa");
-  addIdentity(ecdsaIdentity, EcdsaKeyParams());
+  Name ecIdentity("/SecurityTestSecRule/Basic/Ec");
+  addIdentity(ecIdentity, EcKeyParams());
 
   Name dataName("SecurityTestSecRule/Basic");
   Data rsaData(dataName);
   m_keyChain.sign(rsaData,
                   security::SigningInfo(security::SigningInfo::SIGNER_TYPE_ID,
                                         rsaIdentity));
-  Data ecdsaData(dataName);
-  m_keyChain.sign(ecdsaData,
+  Data ecData(dataName);
+  m_keyChain.sign(ecData,
                   security::SigningInfo(security::SigningInfo::SIGNER_TYPE_ID,
-                                        ecdsaIdentity));
+                                        ecIdentity));
   Data sha256Data(dataName);
   m_keyChain.sign(sha256Data, security::SigningInfo(security::SigningInfo::SIGNER_TYPE_SHA256));
 
@@ -54,11 +54,11 @@
                        "^(<SecurityTestSecRule><Basic>)<><KEY><><>$",
                        "==", "\\1", "\\1", true);
   BOOST_CHECK(rule.satisfy(rsaData));
-  BOOST_CHECK(rule.satisfy(ecdsaData));
+  BOOST_CHECK(rule.satisfy(ecData));
   BOOST_CHECK_EQUAL(rule.satisfy(sha256Data), false);
 
   BOOST_CHECK(rule.matchSignerName(rsaData));
-  BOOST_CHECK(rule.matchSignerName(ecdsaData));
+  BOOST_CHECK(rule.matchSignerName(ecData));
   BOOST_CHECK_EQUAL(rule.matchSignerName(sha256Data), false);
 }
 
diff --git a/tests/unit-tests/security/sec-rule-specific.t.cpp b/tests/unit-tests/security/sec-rule-specific.t.cpp
index 5435394..6b9275a 100644
--- a/tests/unit-tests/security/sec-rule-specific.t.cpp
+++ b/tests/unit-tests/security/sec-rule-specific.t.cpp
@@ -20,6 +20,7 @@
  */
 
 #include "security/sec-rule-specific.hpp"
+#include "security/signing-helpers.hpp"
 
 #include "boost-test.hpp"
 #include "identity-management-fixture.hpp"
@@ -31,39 +32,31 @@
 using namespace ndn::tests;
 
 BOOST_AUTO_TEST_SUITE(Security)
-BOOST_FIXTURE_TEST_SUITE(TestSecRuleSpecific, IdentityManagementV1Fixture)
+BOOST_FIXTURE_TEST_SUITE(TestSecRuleSpecific, IdentityManagementFixture)
 
 BOOST_AUTO_TEST_CASE(Basic)
 {
-  Name rsaIdentity("/SecurityTestSecRule/Basic/Rsa");
-  addIdentity(rsaIdentity, RsaKeyParams());
-  Name ecdsaIdentity("/SecurityTestSecRule/Basic/Ecdsa");
-  addIdentity(ecdsaIdentity, EcdsaKeyParams());
+  auto rsaIdentity = addIdentity("/SecurityTestSecRule/Basic/Rsa", RsaKeyParams());
+  auto ecIdentity = addIdentity("/SecurityTestSecRule/Basic/Ec", EcKeyParams());
 
-  Name dataName("SecurityTestSecRule/Basic");
+  Name dataName("/SecurityTestSecRule/Basic");
   Data rsaData(dataName);
-  m_keyChain.sign(rsaData,
-                  security::SigningInfo(security::SigningInfo::SIGNER_TYPE_ID,
-                                        rsaIdentity));
-  Data ecdsaData(dataName);
-  m_keyChain.sign(ecdsaData,
-                  security::SigningInfo(security::SigningInfo::SIGNER_TYPE_ID,
-                                        ecdsaIdentity));
+  m_keyChain.sign(rsaData, signingByIdentity(rsaIdentity));
+  Data ecData(dataName);
+  m_keyChain.sign(ecData, signingByIdentity(ecIdentity));
   Data sha256Data(dataName);
-  m_keyChain.sign(sha256Data, security::SigningInfo(security::SigningInfo::SIGNER_TYPE_SHA256));
+  m_keyChain.sign(sha256Data, security::signingWithSha256());
 
-  shared_ptr<Regex> dataRegex =
-    make_shared<Regex>("^<SecurityTestSecRule><Basic>$");
-  shared_ptr<Regex> signerRegex =
-    make_shared<Regex>("^<SecurityTestSecRule><Basic><><KEY><><>$");
+  auto dataRegex = make_shared<Regex>("^<SecurityTestSecRule><Basic>$");
+  auto signerRegex = make_shared<Regex>("^<SecurityTestSecRule><Basic><><KEY><>$");
 
   SecRuleSpecific rule(dataRegex, signerRegex);
   BOOST_CHECK(rule.satisfy(rsaData));
-  BOOST_CHECK(rule.satisfy(ecdsaData));
+  BOOST_CHECK(rule.satisfy(ecData));
   BOOST_CHECK_EQUAL(rule.satisfy(sha256Data), false);
 
   BOOST_CHECK(rule.matchSignerName(rsaData));
-  BOOST_CHECK(rule.matchSignerName(ecdsaData));
+  BOOST_CHECK(rule.matchSignerName(ecData));
   BOOST_CHECK_EQUAL(rule.matchSignerName(sha256Data), false);
 }
 
diff --git a/tests/unit-tests/security/signature-sha256-with-ecdsa.t.cpp b/tests/unit-tests/security/signature-sha256-with-ecdsa.t.cpp
index cef4c22..76e497a 100644
--- a/tests/unit-tests/security/signature-sha256-with-ecdsa.t.cpp
+++ b/tests/unit-tests/security/signature-sha256-with-ecdsa.t.cpp
@@ -107,7 +107,7 @@
 
 BOOST_AUTO_TEST_CASE(DataSignature)
 {
-  Identity identity = addIdentity("/SecurityTestSignatureSha256WithEcdsa/DataSignature", EcdsaKeyParams());
+  Identity identity = addIdentity("/SecurityTestSignatureSha256WithEcdsa/DataSignature", EcKeyParams());
 
   Data testData("/SecurityTestSignatureSha256WithEcdsa/DataSignature/Data1");
   char content[5] = "1234";
@@ -122,7 +122,7 @@
 
 BOOST_AUTO_TEST_CASE(InterestSignature)
 {
-  Identity identity = addIdentity("/SecurityTestSignatureSha256WithEcdsa/InterestSignature", EcdsaKeyParams());
+  Identity identity = addIdentity("/SecurityTestSignatureSha256WithEcdsa/InterestSignature", EcKeyParams());
 
   Interest interest("/SecurityTestSignatureSha256WithEcdsa/InterestSignature/Interest1");
   Interest interest11("/SecurityTestSignatureSha256WithEcdsa/InterestSignature/Interest1");
diff --git a/tests/unit-tests/security/tpm/back-end.t.cpp b/tests/unit-tests/security/tpm/back-end.t.cpp
index 01b9e6c..8dc93a4 100644
--- a/tests/unit-tests/security/tpm/back-end.t.cpp
+++ b/tests/unit-tests/security/tpm/back-end.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).
  *
@@ -149,11 +149,11 @@
   T wrapper;
   BackEnd& tpm = wrapper.getTpm();
 
-  // create an ecdsa key
-  Name identity("/Test/Ecdsa/KeyName");
+  // create an ec key
+  Name identity("/Test/Ec/KeyName");
 
-  unique_ptr<KeyHandle> key = tpm.createKey(identity, EcdsaKeyParams());
-  Name ecdsaKeyName = key->getKeyName();
+  unique_ptr<KeyHandle> key = tpm.createKey(identity, EcKeyParams());
+  Name ecKeyName = key->getKeyName();
 
   const uint8_t content[] = {0x01, 0x02, 0x03, 0x04};
   Block sigBlock(tlv::SignatureValue, key->sign(DigestAlgorithm::SHA256, content, sizeof(content)));
@@ -171,8 +171,8 @@
   }
   BOOST_CHECK_EQUAL(result, true);
 
-  tpm.deleteKey(ecdsaKeyName);
-  BOOST_CHECK_EQUAL(tpm.hasKey(ecdsaKeyName), false);
+  tpm.deleteKey(ecKeyName);
+  BOOST_CHECK_EQUAL(tpm.hasKey(ecKeyName), false);
 }
 
 BOOST_AUTO_TEST_CASE_TEMPLATE(ImportExport, T, TestBackEnds)
diff --git a/tests/unit-tests/security/transform/private-key.t.cpp b/tests/unit-tests/security/transform/private-key.t.cpp
index 6531a70..f8932de 100644
--- a/tests/unit-tests/security/transform/private-key.t.cpp
+++ b/tests/unit-tests/security/transform/private-key.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).
  *
@@ -114,10 +114,10 @@
   std::string publicKeyPkcs8;
 };
 
-class EcdsaKeyTestData
+class EcKeyTestData
 {
 public:
-  EcdsaKeyTestData()
+  EcKeyTestData()
   {
     privateKeyPkcs1 =
       "MIIBaAIBAQQgRxwcbzK9RV6AHYFsDcykI86o3M/a1KlJn0z8PcLMBZOggfowgfcC\n"
@@ -158,7 +158,7 @@
 };
 
 typedef boost::mpl::list<RsaKeyTestData,
-                         EcdsaKeyTestData> KeyTestDataSets;
+                         EcKeyTestData> KeyTestDataSets;
 
 void
 checkPkcs8Encoding(ConstBufferPtr encoding, const std::string& password, ConstBufferPtr pkcs1)
@@ -377,7 +377,7 @@
 }
 
 typedef boost::mpl::list<RsaKeyParams,
-                         EcdsaKeyParams> TestKeyParams;
+                         EcKeyParams> TestKeyParams;
 
 BOOST_AUTO_TEST_CASE_TEMPLATE(GenerateKey, T, TestKeyParams)
 {
diff --git a/tests/unit-tests/security/transform/public-key.t.cpp b/tests/unit-tests/security/transform/public-key.t.cpp
index 1009bd9..26903e7 100644
--- a/tests/unit-tests/security/transform/public-key.t.cpp
+++ b/tests/unit-tests/security/transform/public-key.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).
  *
@@ -56,10 +56,10 @@
   std::string publicKeyPkcs8;
 };
 
-class EcdsaPublicKeyTestData
+class EcPublicKeyTestData
 {
 public:
-  EcdsaPublicKeyTestData()
+  EcPublicKeyTestData()
   {
     publicKeyPkcs8 =
       "MIIBSzCCAQMGByqGSM49AgEwgfcCAQEwLAYHKoZIzj0BAQIhAP////8AAAABAAAA\n"
@@ -76,7 +76,7 @@
 };
 
 typedef boost::mpl::list<RsaPublicKeyTestData,
-                         EcdsaPublicKeyTestData> PublicKeyTestDataSets;
+                         EcPublicKeyTestData> PublicKeyTestDataSets;
 
 BOOST_AUTO_TEST_CASE_TEMPLATE(SaveLoad, T, PublicKeyTestDataSets)
 {
diff --git a/tests/unit-tests/security/transform/signer-filter.t.cpp b/tests/unit-tests/security/transform/signer-filter.t.cpp
index dc173e3..7714827 100644
--- a/tests/unit-tests/security/transform/signer-filter.t.cpp
+++ b/tests/unit-tests/security/transform/signer-filter.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).
  *
diff --git a/tests/unit-tests/security/transform/verifier-filter.t.cpp b/tests/unit-tests/security/transform/verifier-filter.t.cpp
index cd496df..1813ba0 100644
--- a/tests/unit-tests/security/transform/verifier-filter.t.cpp
+++ b/tests/unit-tests/security/transform/verifier-filter.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).
  *
diff --git a/tests/unit-tests/security/v1/certificate.t.cpp b/tests/unit-tests/security/v1/certificate.t.cpp
index 5b410c5..95188d6 100644
--- a/tests/unit-tests/security/v1/certificate.t.cpp
+++ b/tests/unit-tests/security/v1/certificate.t.cpp
@@ -227,7 +227,7 @@
   "  NotAfter: 20341116T182912\n"
   "Subject Description:\n"
   "  2.5.4.41: /ecdsa/ksk-1416594552827\n"
-  "Public key bits: (ECDSA)\n"
+  "Public key bits: (EC)\n"
   "  MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEg+WBGdn6ZECtfJP8FZBrOB7FyrFr\n"
   "  Cx9kv0iq0JFcJNZ4QP2VXVRk4S0OmGYderBhFwUmE2MlfNqHEclnzRIF\n"
   "Signature Information:\n"
diff --git a/tests/unit-tests/security/v1/key-chain.t.cpp b/tests/unit-tests/security/v1/key-chain.t.cpp
index 4caba4f..ef10ca4 100644
--- a/tests/unit-tests/security/v1/key-chain.t.cpp
+++ b/tests/unit-tests/security/v1/key-chain.t.cpp
@@ -412,12 +412,12 @@
                                                DigestAlgorithm::SHA256));
   BOOST_CHECK(nonExistingIdentity.isPrefixOf(data.getSignature().getKeyLocator().getName()));
 
-  Name ecdsaIdentity = Name("/ndn/test/ecdsa").appendVersion();
-  Name ecdsaKeyName = m_keyChain.generateEcdsaKeyPairAsDefault(ecdsaIdentity, false, 256);
-  BOOST_CHECK_NO_THROW(m_keyChain.sign(data, signingByIdentity(ecdsaIdentity)));
+  Name ecIdentity = Name("/ndn/test/ec").appendVersion();
+  Name ecKeyName = m_keyChain.generateEcKeyPairAsDefault(ecIdentity, false, 256);
+  BOOST_CHECK_NO_THROW(m_keyChain.sign(data, signingByIdentity(ecIdentity)));
   BOOST_CHECK_EQUAL(data.getSignature().getType(),
-                    KeyChain::getSignatureType(EcdsaKeyParams().getKeyType(), DigestAlgorithm::SHA256));
-  BOOST_CHECK(ecdsaIdentity.isPrefixOf(data.getSignature().getKeyLocator().getName()));
+                    KeyChain::getSignatureType(EcKeyParams().getKeyType(), DigestAlgorithm::SHA256));
+  BOOST_CHECK(ecIdentity.isPrefixOf(data.getSignature().getKeyLocator().getName()));
 }
 
 BOOST_AUTO_TEST_SUITE_END() // TestKeyChain
diff --git a/tests/unit-tests/security/v1/public-key.t.cpp b/tests/unit-tests/security/v1/public-key.t.cpp
index 53df40c..41ee7d6 100644
--- a/tests/unit-tests/security/v1/public-key.t.cpp
+++ b/tests/unit-tests/security/v1/public-key.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).
  *
@@ -83,7 +83,7 @@
                                 digest.wire() + digest.size());
 }
 
-BOOST_AUTO_TEST_CASE(Ecdsa)
+BOOST_AUTO_TEST_CASE(Ec)
 {
   using namespace CryptoPP;
 
diff --git a/tests/unit-tests/security/v1/sec-public-info-sqlite3.t.cpp b/tests/unit-tests/security/v1/sec-public-info-sqlite3.t.cpp
index e2d668b..aaa0499 100644
--- a/tests/unit-tests/security/v1/sec-public-info-sqlite3.t.cpp
+++ b/tests/unit-tests/security/v1/sec-public-info-sqlite3.t.cpp
@@ -120,7 +120,7 @@
   pib.deleteIdentityInfo(Name("/TestSecPublicInfoSqlite3/KeyType/RSA"));
 }
 
-BOOST_AUTO_TEST_CASE(KeyTypeEcdsa)
+BOOST_AUTO_TEST_CASE(KeyTypeEc)
 {
   using namespace CryptoPP;
 
@@ -128,14 +128,14 @@
   StringSource ss(reinterpret_cast<const uint8_t*>(ECDSA_DER.c_str()), ECDSA_DER.size(),
                   true, new Base64Decoder(new FileSink(os)));
 
-  shared_ptr<v1::PublicKey> ecdsaKey;
-  BOOST_REQUIRE_NO_THROW(ecdsaKey = make_shared<v1::PublicKey>(os.buf()->buf(), os.buf()->size()));
-  Name ecdsaKeyName("/TestSecPublicInfoSqlite3/KeyType/ECDSA/ksk-123");
+  shared_ptr<v1::PublicKey> ecKey;
+  BOOST_REQUIRE_NO_THROW(ecKey = make_shared<v1::PublicKey>(os.buf()->buf(), os.buf()->size()));
+  Name ecKeyName("/TestSecPublicInfoSqlite3/KeyType/EC/ksk-123");
   SecPublicInfoSqlite3 pib;
-  pib.addKey(ecdsaKeyName, *ecdsaKey);
+  pib.addKey(ecKeyName, *ecKey);
 
-  BOOST_CHECK_EQUAL(KeyType::EC, pib.getPublicKeyType(ecdsaKeyName));
-  pib.deleteIdentityInfo(Name("/TestSecPublicInfoSqlite3/KeyType/ECDSA"));
+  BOOST_CHECK_EQUAL(KeyType::EC, pib.getPublicKeyType(ecKeyName));
+  pib.deleteIdentityInfo(Name("/TestSecPublicInfoSqlite3/KeyType/EC"));
 }
 
 BOOST_AUTO_TEST_CASE(KeyTypeNonExistent)
diff --git a/tests/unit-tests/security/v1/sec-tpm-file.t.cpp b/tests/unit-tests/security/v1/sec-tpm-file.t.cpp
index 79e3645..54518d8 100644
--- a/tests/unit-tests/security/v1/sec-tpm-file.t.cpp
+++ b/tests/unit-tests/security/v1/sec-tpm-file.t.cpp
@@ -252,7 +252,7 @@
 
   Name keyName("/TestSecTpmFile/EcdsaSigning/ksk-" +
                boost::lexical_cast<std::string>(time::toUnixTimestamp(time::system_clock::now())));
-  EcdsaKeyParams params;
+  EcKeyParams params;
   BOOST_CHECK_NO_THROW(tpm.generateKeyPairInTpm(keyName, params));
 
   Data data("/TestSecTpmFile/EcdsaSigning/Data/1");
@@ -293,7 +293,7 @@
 }
 
 
-BOOST_AUTO_TEST_CASE(ImportExportEcdsaKey)
+BOOST_AUTO_TEST_CASE(ImportExportEcKey)
 {
   using namespace CryptoPP;
 
@@ -309,7 +309,7 @@
 
   SecTpmFile tpm;
 
-  Name keyName("/TestSecTpmFile/ImportExportEcdsaKey/ksk-" +
+  Name keyName("/TestSecTpmFile/ImportExportEcKey/ksk-" +
                boost::lexical_cast<std::string>(time::toUnixTimestamp(time::system_clock::now())));
 
   BOOST_REQUIRE_EQUAL(tpm.doesKeyExistInTpm(keyName, KeyClass::PRIVATE), false);
@@ -336,16 +336,16 @@
     {
       using namespace CryptoPP;
 
-      ECDSA<ECP, SHA256>::PublicKey ecdsaPublicKey;
+      ECDSA<ECP, SHA256>::PublicKey ecPublicKey;
       ByteQueue queue;
       queue.Put(reinterpret_cast<const byte*>(publicKey->get().buf()), publicKey->get().size());
-      ecdsaPublicKey.Load(queue);
+      ecPublicKey.Load(queue);
 
       uint8_t buffer[64];
       size_t usedSize = DSAConvertSignatureFormat(buffer, 64, DSA_P1363,
                                                   sigBlock.value(), sigBlock.value_size(), DSA_DER);
 
-      ECDSA<ECP, SHA256>::Verifier verifier(ecdsaPublicKey);
+      ECDSA<ECP, SHA256>::Verifier verifier(ecPublicKey);
       bool isVerified = verifier.VerifyMessage(content, sizeof(content),
                                                buffer, usedSize);
 
@@ -379,17 +379,17 @@
     {
       using namespace CryptoPP;
 
-      ECDSA<ECP, SHA256>::PublicKey ecdsaPublicKey;
+      ECDSA<ECP, SHA256>::PublicKey ecPublicKey;
       ByteQueue queue;
       queue.Put(reinterpret_cast<const byte*>(publicKey->get().buf()), publicKey->get().size());
-      ecdsaPublicKey.Load(queue);
+      ecPublicKey.Load(queue);
 
       uint8_t buffer[64];
       size_t usedSize = DSAConvertSignatureFormat(buffer, 64, DSA_P1363,
                                                   sigBlock2.value(), sigBlock2.value_size(),
                                                   DSA_DER);
 
-      ECDSA<ECP, SHA256>::Verifier verifier(ecdsaPublicKey);
+      ECDSA<ECP, SHA256>::Verifier verifier(ecPublicKey);
       bool isVerified = verifier.VerifyMessage(content2, sizeof(content2),
                                                buffer, usedSize);
 
diff --git a/tests/unit-tests/security/v1/sec-tpm-osx.t.cpp b/tests/unit-tests/security/v1/sec-tpm-osx.t.cpp
index 2d6fbcc..7c36328 100644
--- a/tests/unit-tests/security/v1/sec-tpm-osx.t.cpp
+++ b/tests/unit-tests/security/v1/sec-tpm-osx.t.cpp
@@ -246,7 +246,7 @@
 
   Name keyName("/TestSecTpmOsx/EcdsaSigning/ksk-" +
                boost::lexical_cast<std::string>(time::toUnixTimestamp(time::system_clock::now())));
-  EcdsaKeyParams params;
+  EcKeyParams params;
   BOOST_CHECK_NO_THROW(tpm.generateKeyPairInTpm(keyName, params));
 
   Data data("/TestSecTpmOsx/EcdsaSigning/Data/1");
@@ -287,17 +287,17 @@
 }
 
 
-BOOST_AUTO_TEST_CASE(ExportImportEcdsaKey)
+BOOST_AUTO_TEST_CASE(ExportImportEcKey)
 {
   using namespace CryptoPP;
 
   SecTpmOsx tpm;
 
-  Name keyName("/TestSecTpmOsx/ExportImportEcdsaKey/ksk-" +
+  Name keyName("/TestSecTpmOsx/ExportImportEcKey/ksk-" +
                boost::lexical_cast<std::string>(
                  time::toUnixTimestamp(time::system_clock::now()).count()));
 
-  EcdsaKeyParams params;
+  EcKeyParams params;
   BOOST_CHECK_NO_THROW(tpm.generateKeyPairInTpm(keyName, params));
 
   BOOST_REQUIRE_EQUAL(tpm.doesKeyExistInTpm(keyName, KeyClass::PRIVATE), true);
@@ -330,17 +330,17 @@
     {
       using namespace CryptoPP;
 
-      ECDSA<ECP, SHA256>::PublicKey ecdsaPublicKey;
+      ECDSA<ECP, SHA256>::PublicKey ecPublicKey;
       ByteQueue queue;
       queue.Put(reinterpret_cast<const byte*>(publicKey->get().buf()), publicKey->get().size());
-      ecdsaPublicKey.Load(queue);
+      ecPublicKey.Load(queue);
 
       uint8_t buffer[64];
       size_t usedSize = DSAConvertSignatureFormat(buffer, 64, DSA_P1363,
                                                   sigBlock.value(), sigBlock.value_size(),
                                                   DSA_DER);
 
-      ECDSA<ECP, SHA256>::Verifier verifier(ecdsaPublicKey);
+      ECDSA<ECP, SHA256>::Verifier verifier(ecPublicKey);
       bool isVerified = verifier.VerifyMessage(content, sizeof(content),
                                                buffer, usedSize);
 
diff --git a/tests/unit-tests/security/v2/key-chain.t.cpp b/tests/unit-tests/security/v2/key-chain.t.cpp
index f67e30c..f438ea4 100644
--- a/tests/unit-tests/security/v2/key-chain.t.cpp
+++ b/tests/unit-tests/security/v2/key-chain.t.cpp
@@ -336,11 +336,11 @@
   // Identity will be created with generated key and self-signed cert with default parameters
   BOOST_CHECK_THROW(m_keyChain.sign(data, signingByIdentity("/non-existing/identity")), KeyChain::InvalidSigningInfoError);
 
-  // Create identity with ECDSA key and the corresponding self-signed certificate
-  Identity id = addIdentity("/ndn/test/ecdsa", EcdsaKeyParams());
+  // Create identity with EC key and the corresponding self-signed certificate
+  Identity id = addIdentity("/ndn/test/ec", EcKeyParams());
   BOOST_CHECK_NO_THROW(m_keyChain.sign(data, signingByIdentity(id.getName())));
   BOOST_CHECK_EQUAL(data.getSignature().getType(),
-                    KeyChain::getSignatureType(EcdsaKeyParams().getKeyType(), DigestAlgorithm::SHA256));
+                    KeyChain::getSignatureType(EcKeyParams().getKeyType(), DigestAlgorithm::SHA256));
   BOOST_CHECK(id.getName().isPrefixOf(data.getSignature().getKeyLocator().getName()));
 
   // Create identity with RSA key and the corresponding self-signed certificate
diff --git a/tests/unit-tests/security/validator-config.t.cpp b/tests/unit-tests/security/validator-config.t.cpp
index 271a541..14ed721 100644
--- a/tests/unit-tests/security/validator-config.t.cpp
+++ b/tests/unit-tests/security/validator-config.t.cpp
@@ -994,20 +994,20 @@
   Name rsaIdentity("/TestValidatorConfig/FixedSignerChecker2/Rsa");
   addIdentity(rsaIdentity, RsaKeyParams());
 
-  Name ecdsaIdentity("/TestValidatorConfig/FixedSignerChecker2/Ecdsa");
-  auto identity = addIdentity(ecdsaIdentity, EcdsaKeyParams());
+  Name ecIdentity("/TestValidatorConfig/FixedSignerChecker2/Ec");
+  auto identity = addIdentity(ecIdentity, EcKeyParams());
   BOOST_REQUIRE(saveIdentityCertificate(identity, "trust-anchor-11.cert"));
 
   Name dataName("/TestValidatorConfig/FixedSignerChecker2");
   shared_ptr<Data> dataRsa = make_shared<Data>(dataName);
   m_keyChain.sign(*dataRsa, security::signingByIdentity(rsaIdentity));
-  shared_ptr<Data> dataEcdsa = make_shared<Data>(dataName);
-  m_keyChain.sign(*dataEcdsa, security::signingByIdentity(ecdsaIdentity));
+  shared_ptr<Data> dataEc = make_shared<Data>(dataName);
+  m_keyChain.sign(*dataEc, security::signingByIdentity(ecIdentity));
 
   shared_ptr<Interest> interestRsa = make_shared<Interest>(dataName);
   m_keyChain.sign(*interestRsa, security::signingByIdentity(rsaIdentity));
-  shared_ptr<Interest> interestEcdsa = make_shared<Interest>(dataName);
-  m_keyChain.sign(*interestEcdsa, security::signingByIdentity(ecdsaIdentity));
+  shared_ptr<Interest> interestEc = make_shared<Interest>(dataName);
+  m_keyChain.sign(*interestEc, security::signingByIdentity(ecIdentity));
 
   const std::string CONFIG =
     "rule\n"
@@ -1057,7 +1057,7 @@
 
   validator.load(CONFIG, CONFIG_PATH.c_str());
 
-  validator.validate(*dataEcdsa,
+  validator.validate(*dataEc,
     [] (const shared_ptr<const Data>&) { BOOST_CHECK(true); },
     [] (const shared_ptr<const Data>&, const std::string&) { BOOST_CHECK(false); });
 
@@ -1065,7 +1065,7 @@
     [] (const shared_ptr<const Data>&) { BOOST_CHECK(false); },
     [] (const shared_ptr<const Data>&, const std::string&) { BOOST_CHECK(true); });
 
-  validator.validate(*interestEcdsa,
+  validator.validate(*interestEc,
     [] (const shared_ptr<const Interest>&) { BOOST_CHECK(true); },
     [] (const shared_ptr<const Interest>&, const std::string&) { BOOST_CHECK(false); });
 
diff --git a/tests/unit-tests/security/validator.t.cpp b/tests/unit-tests/security/validator.t.cpp
index 68bed61..3f26b44 100644
--- a/tests/unit-tests/security/validator.t.cpp
+++ b/tests/unit-tests/security/validator.t.cpp
@@ -157,12 +157,12 @@
 BOOST_AUTO_TEST_CASE(EcdsaSignatureVerification)
 {
   Name identity("/TestValidator/EcdsaSignatureVerification");
-  addIdentity(identity, EcdsaKeyParams());
+  addIdentity(identity, EcKeyParams());
   Name keyName = m_keyChain.getDefaultKeyNameForIdentity(identity);
   shared_ptr<v1::PublicKey> publicKey = m_keyChain.getPublicKey(keyName);
 
   Name identity2("/TestValidator/EcdsaSignatureVerification/id2");
-  addIdentity(identity2, EcdsaKeyParams());
+  addIdentity(identity2, EcKeyParams());
   Name keyName2 = m_keyChain.getDefaultKeyNameForIdentity(identity2);
   shared_ptr<v1::PublicKey> publicKey2 = m_keyChain.getPublicKey(keyName2);
 
@@ -191,10 +191,10 @@
 
 BOOST_AUTO_TEST_CASE(EcdsaSignatureVerification2)
 {
-  Name ecdsaIdentity("/SecurityTestValidator/EcdsaSignatureVerification2/ecdsa");
-  addIdentity(ecdsaIdentity, EcdsaKeyParams());
-  Name ecdsaCertName = m_keyChain.getDefaultCertificateNameForIdentity(ecdsaIdentity);
-  shared_ptr<v1::IdentityCertificate> ecdsaCert = m_keyChain.getCertificate(ecdsaCertName);
+  Name ecIdentity("/SecurityTestValidator/EcdsaSignatureVerification2/ec");
+  addIdentity(ecIdentity, EcKeyParams());
+  Name ecCertName = m_keyChain.getDefaultCertificateNameForIdentity(ecIdentity);
+  shared_ptr<v1::IdentityCertificate> ecCert = m_keyChain.getCertificate(ecCertName);
 
   Name rsaIdentity("/SecurityTestValidator/EcdsaSignatureVerification2/rsa");
   addIdentity(rsaIdentity, RsaKeyParams());
@@ -210,7 +210,7 @@
   shared_ptr<Data> testDataEcdsa = make_shared<Data>(packetName);
   m_keyChain.sign(*testDataEcdsa,
                   security::SigningInfo(security::SigningInfo::SIGNER_TYPE_ID,
-                                        ecdsaIdentity));
+                                        ecIdentity));
   shared_ptr<Interest> testInterestRsa = make_shared<Interest>(packetName);
   m_keyChain.sign(*testInterestRsa,
                   security::SigningInfo(security::SigningInfo::SIGNER_TYPE_ID,
@@ -218,22 +218,22 @@
   shared_ptr<Interest> testInterestEcdsa = make_shared<Interest>(packetName);
   m_keyChain.sign(*testInterestEcdsa,
                   security::SigningInfo(security::SigningInfo::SIGNER_TYPE_ID,
-                                        ecdsaIdentity));
+                                        ecIdentity));
 
-  BOOST_CHECK(Validator::verifySignature(*ecdsaCert, ecdsaCert->getPublicKeyInfo()));
-  BOOST_CHECK_EQUAL(Validator::verifySignature(*ecdsaCert, rsaCert->getPublicKeyInfo()), false);
-  BOOST_CHECK_EQUAL(Validator::verifySignature(*rsaCert, ecdsaCert->getPublicKeyInfo()), false);
+  BOOST_CHECK(Validator::verifySignature(*ecCert, ecCert->getPublicKeyInfo()));
+  BOOST_CHECK_EQUAL(Validator::verifySignature(*ecCert, rsaCert->getPublicKeyInfo()), false);
+  BOOST_CHECK_EQUAL(Validator::verifySignature(*rsaCert, ecCert->getPublicKeyInfo()), false);
   BOOST_CHECK(Validator::verifySignature(*rsaCert, rsaCert->getPublicKeyInfo()));
 
-  BOOST_CHECK(Validator::verifySignature(*testDataEcdsa, ecdsaCert->getPublicKeyInfo()));
+  BOOST_CHECK(Validator::verifySignature(*testDataEcdsa, ecCert->getPublicKeyInfo()));
   BOOST_CHECK_EQUAL(Validator::verifySignature(*testDataEcdsa, rsaCert->getPublicKeyInfo()), false);
-  BOOST_CHECK_EQUAL(Validator::verifySignature(*testDataRsa, ecdsaCert->getPublicKeyInfo()), false);
+  BOOST_CHECK_EQUAL(Validator::verifySignature(*testDataRsa, ecCert->getPublicKeyInfo()), false);
   BOOST_CHECK(Validator::verifySignature(*testDataRsa, rsaCert->getPublicKeyInfo()));
 
-  BOOST_CHECK(Validator::verifySignature(*testInterestEcdsa, ecdsaCert->getPublicKeyInfo()));
+  BOOST_CHECK(Validator::verifySignature(*testInterestEcdsa, ecCert->getPublicKeyInfo()));
   BOOST_CHECK_EQUAL(Validator::verifySignature(*testInterestEcdsa, rsaCert->getPublicKeyInfo()),
                     false);
-  BOOST_CHECK_EQUAL(Validator::verifySignature(*testInterestRsa, ecdsaCert->getPublicKeyInfo()),
+  BOOST_CHECK_EQUAL(Validator::verifySignature(*testInterestRsa, ecCert->getPublicKeyInfo()),
                     false);
   BOOST_CHECK(Validator::verifySignature(*testInterestRsa, rsaCert->getPublicKeyInfo()));
 }
