diff --git a/core/common.hpp b/core/common.hpp
index c2f833f..2b031cc 100644
--- a/core/common.hpp
+++ b/core/common.hpp
@@ -49,6 +49,8 @@
 #include <ndn-cxx/face.hpp>
 #include <ndn-cxx/interest.hpp>
 #include <ndn-cxx/security/key-chain.hpp>
+#include <ndn-cxx/security/signing-helpers.hpp>
+#include <ndn-cxx/security/signing-info.hpp>
 #include <ndn-cxx/util/scheduler.hpp>
 #include <ndn-cxx/util/signal.hpp>
 
diff --git a/manpages/conf.py b/manpages/conf.py
index 9e67aa5..3c0f6bb 100644
--- a/manpages/conf.py
+++ b/manpages/conf.py
@@ -10,5 +10,6 @@
     ('ndnpoke', 'ndnpoke', 'simple producer to publish one Data', None, 1),
     ('ndnping', 'ndnping', 'reachability testing client', None, 1),
     ('ndnpingserver', 'ndnpingserver', 'reachability testing server', None, 1),
+    ('ndndump', 'ndndump', 'traffic analysis tool', None, 8),
     ('ndn-dissect', 'ndn-dissect', 'NDN packet format inspector', None, 1),
 ]
diff --git a/manpages/ndndump.rst b/manpages/ndndump.rst
new file mode 100644
index 0000000..95c1904
--- /dev/null
+++ b/manpages/ndndump.rst
@@ -0,0 +1,59 @@
+ndndump
+=======
+
+Usage
+-----
+
+::
+
+    ndndump [-hV] [-i interface] [-r file] [-f filter] [expression]
+
+Description
+-----------
+
+:program:`ndndump` is a traffic analysis tool that captures Interest and Data packets on the wire,
+and displays brief information about captured packets.
+
+Currently, :program:`ndndump` is capable of extracting Interest and Data packets from:
+
+* Ethernet, when bare Interest/Data is transmitted without NDNLP header
+* PPP link (e.g., pcap trace from ndnSIM)
+* IPv4 UDP unicast tunnel
+* IPv4 UDP multicast group
+* IPv6 TCP tunnel, when Interest/Data is aligned to the front of a TCP segment
+
+Options
+-------
+
+``-h``
+  Print help and exit.
+
+``-V``
+  Print version and exit.
+
+``-i``
+  Listen on :option:`interface`.
+  If unspecified, ndndump searches the system interface list for the lowest numbered,
+  configured up interface (excluding loopback).
+
+``-r``
+  Read packets from :option:`file` (which was created with :manpage:`tcpdump(8)` using its -w option).
+
+``-v``
+  Produce verbose output.
+
+``-f``
+  Print a packet only if its Name matches the regular expression :option:`filter`.
+
+``expression``
+  Selects which packets will be analyzed, in :manpage:`pcap-filter(7)` format.
+  If no :option:`expression` is given, a default expression is implied which can be seen with ``-h`` option.
+
+Examples
+--------
+
+Capture on eth1 and print packets containing "ping":
+
+::
+
+    ndndump -i eth1 -f '.*ping.*'
diff --git a/tools/dump/README.md b/tools/dump/README.md
new file mode 100644
index 0000000..d99bfe1
--- /dev/null
+++ b/tools/dump/README.md
@@ -0,0 +1,13 @@
+# ndndump
+
+**ndndump** is a traffic analysis tool that captures Interest and Data packets on the wire,
+and displays brief information about captured packets.
+
+Usage example:
+
+1. start NFD on local machine
+2. create an IPv4 UDP tunnel to a remote machine
+3. cause some traffic going on the tunnel
+4. execute `sudo ndndump`
+
+For more information, consult the manpage.
diff --git a/tools/peek/ndn-poke.cpp b/tools/peek/ndn-poke.cpp
index 9f285a0..9ef3c53 100644
--- a/tools/peek/ndn-poke.cpp
+++ b/tools/peek/ndn-poke.cpp
@@ -164,13 +164,16 @@
       }
     }
 
-    if (m_isUseDigestSha256Set)
-      m_keyChain.signWithSha256(*dataPacket);
+    if (m_isUseDigestSha256Set) {
+      m_keyChain.sign(*dataPacket, signingWithSha256());
+    }
     else {
-      if (m_identityName == nullptr)
+      if (m_identityName == nullptr) {
         m_keyChain.sign(*dataPacket);
-      else
-        m_keyChain.signByIdentity(*dataPacket, *m_identityName);
+      }
+      else {
+        m_keyChain.sign(*dataPacket, signingByIdentity(*m_identityName));
+      }
     }
 
     return dataPacket;
diff --git a/tools/ping/server/ping-server.cpp b/tools/ping/server/ping-server.cpp
index 699da5b..f919113 100644
--- a/tools/ping/server/ping-server.cpp
+++ b/tools/ping/server/ping-server.cpp
@@ -66,7 +66,7 @@
   shared_ptr<Data> data = make_shared<Data>(interestName);
   data->setFreshnessPeriod(m_options.freshnessPeriod);
   data->setContent(m_payload);
-  m_keyChain.signWithSha256(*data);
+  m_keyChain.sign(*data, signingWithSha256());
   m_face.put(*data);
 
   ++m_nPings;
