diff --git a/tests/unit-tests/data.t.cpp b/tests/unit-tests/data.t.cpp
index bdf5f18..51c075e 100644
--- a/tests/unit-tests/data.t.cpp
+++ b/tests/unit-tests/data.t.cpp
@@ -1,5 +1,5 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
+/*
  * Copyright (c) 2013-2017 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
@@ -20,8 +20,13 @@
  */
 
 #include "data.hpp"
-#include "security/v1/cryptopp.hpp"
 #include "encoding/buffer-stream.hpp"
+#include "security/transform/private-key.hpp"
+#include "security/transform/public-key.hpp"
+#include "security/transform/signer-filter.hpp"
+#include "security/transform/step-source.hpp"
+#include "security/transform/stream-sink.hpp"
+#include "security/verification-helpers.hpp"
 
 #include "boost-test.hpp"
 #include "identity-management-fixture.hpp"
@@ -202,72 +207,55 @@
 
 class TestDataFixture
 {
-public:
+protected:
   TestDataFixture()
   {
-    CryptoPP::StringSource source(DEFAULT_PRIVATE_KEY_DER, sizeof(DEFAULT_PRIVATE_KEY_DER), true);
-    privateKey_.Load(source);
-    publicKey_ = privateKey_;
+    m_privKey.loadPkcs1(DEFAULT_PRIVATE_KEY_DER, sizeof(DEFAULT_PRIVATE_KEY_DER));
+    auto buf = m_privKey.derivePublicKey();
+    m_pubKey.loadPkcs8(buf->data(), buf->size());
   }
 
 protected:
-  CryptoPP::AutoSeededRandomPool rng_;
-  CryptoPP::RSA::PrivateKey privateKey_;
-  CryptoPP::RSA::PublicKey  publicKey_;
+  security::transform::PrivateKey m_privKey;
+  security::transform::PublicKey m_pubKey;
 };
 
 BOOST_FIXTURE_TEST_CASE(Decode, TestDataFixture)
 {
   Block dataBlock(Data1, sizeof(Data1));
+  Data d(dataBlock);
 
-  ndn::Data d;
-  BOOST_REQUIRE_NO_THROW(d.wireDecode(dataBlock));
+  BOOST_CHECK_EQUAL(d.getName().toUri(), "/local/ndn/prefix");
+  BOOST_CHECK_EQUAL(d.getContentType(), static_cast<uint32_t>(tlv::ContentType_Blob));
+  BOOST_CHECK_EQUAL(d.getFreshnessPeriod(), time::seconds(10));
+  BOOST_CHECK_EQUAL(std::string(reinterpret_cast<const char*>(d.getContent().value()),
+                                d.getContent().value_size()), "SUCCESS!");
+  BOOST_CHECK_EQUAL(d.getSignature().getType(), tlv::SignatureSha256WithRsa);
 
-  BOOST_REQUIRE_EQUAL(d.getName().toUri(), "/local/ndn/prefix");
-  BOOST_REQUIRE_EQUAL(d.getContentType(), static_cast<uint32_t>(tlv::ContentType_Blob));
-  BOOST_REQUIRE_EQUAL(d.getFreshnessPeriod(), time::seconds(10));
-
-  BOOST_REQUIRE_EQUAL(std::string(reinterpret_cast<const char*>(d.getContent().value()),
-                                  d.getContent().value_size()), "SUCCESS!");
-
-  BOOST_REQUIRE_EQUAL(d.getSignature().getType(), tlv::SignatureSha256WithRsa);
-  ndn::Block block = d.getSignature().getInfo();
+  Block block = d.getSignature().getInfo();
   block.parse();
-  KeyLocator keyLocator;
-  BOOST_REQUIRE_NO_THROW(keyLocator.wireDecode(block.get(tlv::KeyLocator)));
+  KeyLocator keyLocator(block.get(tlv::KeyLocator));
+  BOOST_CHECK_EQUAL(keyLocator.getName().toUri(), "/test/key/locator");
 
-  BOOST_REQUIRE_EQUAL(keyLocator.getName().toUri(), "/test/key/locator");
-
-  using namespace CryptoPP;
-  RSASS<PKCS1v15, SHA256>::Verifier verifier(publicKey_);
-  bool signatureVerified = verifier.VerifyMessage(d.wireEncode().value(),
-                                                  d.wireEncode().value_size() -
-                                                    d.getSignature().getValue().size(),
-                                                  d.getSignature().getValue().value(),
-                                                  d.getSignature().getValue().value_size());
-  BOOST_REQUIRE_EQUAL(signatureVerified, true);
+  BOOST_CHECK(security::verifySignature(d, m_pubKey));
 }
 
 BOOST_FIXTURE_TEST_CASE(Encode, TestDataFixture)
 {
   // manual data packet creation for now
 
-  ndn::Data d(ndn::Name("/local/ndn/prefix"));
+  Data d(Name("/local/ndn/prefix"));
   d.setContentType(tlv::ContentType_Blob);
   d.setFreshnessPeriod(time::seconds(10));
-
   d.setContent(Content1, sizeof(Content1));
 
   Block signatureInfo(tlv::SignatureInfo);
   // SignatureType
-  {
-    signatureInfo.push_back(makeNonNegativeIntegerBlock(tlv::SignatureType, tlv::SignatureSha256WithRsa));
-  }
+  signatureInfo.push_back(makeNonNegativeIntegerBlock(tlv::SignatureType, tlv::SignatureSha256WithRsa));
   // KeyLocator
   {
     KeyLocator keyLocator;
     keyLocator.setName("/test/key/locator");
-
     signatureInfo.push_back(keyLocator.wireEncode());
   }
   signatureInfo.encode();
@@ -276,39 +264,34 @@
   OBufferStream os;
   tlv::writeVarNumber(os, tlv::SignatureValue);
 
-  using namespace CryptoPP;
+  OBufferStream sig;
+  {
+    namespace tr = security::transform;
 
-  RSASS<PKCS1v15, SHA256>::Signer signer(privateKey_);
+    tr::StepSource input;
+    input >> tr::signerFilter(DigestAlgorithm::SHA256, m_privKey) >> tr::streamSink(sig);
 
-  PK_MessageAccumulator* hash = signer.NewSignatureAccumulator(rng_);
-  hash->Update(d.getName().    wireEncode().wire(), d.getName().    wireEncode().size());
-  hash->Update(d.getMetaInfo().wireEncode().wire(), d.getMetaInfo().wireEncode().size());
-  hash->Update(d.getContent().              wire(), d.getContent().              size());
-  hash->Update(signatureInfo.               wire(), signatureInfo.               size());
+    input.write(d.getName().    wireEncode().wire(), d.getName().    wireEncode().size());
+    input.write(d.getMetaInfo().wireEncode().wire(), d.getMetaInfo().wireEncode().size());
+    input.write(d.getContent().              wire(), d.getContent().              size());
+    input.write(signatureInfo.               wire(), signatureInfo.               size());
+    input.end();
+  }
+  auto buf = sig.buf();
+  tlv::writeVarNumber(os, buf->size());
+  os.write(reinterpret_cast<const char*>(buf->data()), buf->size());
 
-  size_t length = signer.MaxSignatureLength();
-  SecByteBlock buf(length);
-  signer.Sign(rng_, hash, buf);
-
-  tlv::writeVarNumber(os, buf.size());
-  os.write(reinterpret_cast<const char *>(buf.BytePtr()), buf.size());
-
-  ndn::Block signatureValue(Block(os.buf()));
-
+  Block signatureValue(os.buf());
   Signature signature(signatureInfo, signatureValue);
-
   d.setSignature(signature);
 
-  Block dataBlock;
-  BOOST_REQUIRE_NO_THROW(dataBlock = d.wireEncode());
+  Block dataBlock(d.wireEncode());
+  BOOST_CHECK_EQUAL_COLLECTIONS(Data1, Data1 + sizeof(Data1),
+                                dataBlock.begin(), dataBlock.end());
 
-  BOOST_REQUIRE_EQUAL_COLLECTIONS(Data1, Data1+sizeof(Data1),
-                                  dataBlock.begin(), dataBlock.end());
-
-  std::ostringstream strStream;
-  BOOST_CHECK_NO_THROW(strStream << d);
-
-  BOOST_CHECK_EQUAL(strStream.str(),
+  std::ostringstream ss;
+  ss << d;
+  BOOST_CHECK_EQUAL(ss.str(),
                     "Name: /local/ndn/prefix\n"
                     "MetaInfo: ContentType: 0, FreshnessPeriod: 10000 milliseconds\n"
                     "Content: (size: 8)\n"
@@ -319,7 +302,7 @@
 {
   // Encoding pipeline
 
-  ndn::Data d(ndn::Name("/local/ndn/prefix"));
+  Data d(Name("/local/ndn/prefix"));
   d.setContentType(tlv::ContentType_Blob);
   d.setFreshnessPeriod(time::seconds(10));
 
diff --git a/tests/unit-tests/link.t.cpp b/tests/unit-tests/link.t.cpp
index a12793a..ac44917 100644
--- a/tests/unit-tests/link.t.cpp
+++ b/tests/unit-tests/link.t.cpp
@@ -1,5 +1,5 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
+/*
  * Copyright (c) 2013-2017 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
@@ -20,8 +20,6 @@
  */
 
 #include "link.hpp"
-#include "security/v1/cryptopp.hpp"
-#include "encoding/buffer-stream.hpp"
 
 #include "boost-test.hpp"
 #include "make-interest-data.hpp"
diff --git a/tests/unit-tests/meta-info.t.cpp b/tests/unit-tests/meta-info.t.cpp
index 51412c5..bbd3fef 100644
--- a/tests/unit-tests/meta-info.t.cpp
+++ b/tests/unit-tests/meta-info.t.cpp
@@ -1,5 +1,5 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
+/*
  * Copyright (c) 2013-2017 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
@@ -21,8 +21,6 @@
 
 #include "meta-info.hpp"
 #include "data.hpp"
-#include "security/v1/cryptopp.hpp"
-#include "encoding/buffer-stream.hpp"
 
 #include "boost-test.hpp"
 
@@ -122,9 +120,8 @@
   for (int i = 0; i < 5; i++) {
     uint32_t type = 128 + i * 10;
     info1.addAppMetaInfo(makeNonNegativeIntegerBlock(type, ints[i]));
-    const std::string& s = ss[i];
     type += 5;
-    info1.addAppMetaInfo(makeStringBlock(type, s));
+    info1.addAppMetaInfo(makeStringBlock(type, ss[i]));
   }
 
   BOOST_CHECK(info1.findAppMetaInfo(252) == 0);
