Move key-chain to security subdirectory.
diff --git a/ndn-cpp/security/key-chain.hpp b/ndn-cpp/security/key-chain.hpp
new file mode 100644
index 0000000..662e6a4
--- /dev/null
+++ b/ndn-cpp/security/key-chain.hpp
@@ -0,0 +1,64 @@
+/**
+ * @author: Jeff Thompson
+ * See COPYING for copyright and distribution information.
+ */
+
+#ifndef NDN_KEY_CHAIN_HPP
+#define NDN_KEY_CHAIN_HPP
+
+#include "../data.hpp"
+
+namespace ndn {
+
+class KeyChain {
+public:
+ /**
+ * In data, set the signed info publisher public key digest and key locator key to the public key and set the
+ * signature using the private key.
+ * Note: the caller must make sure the timestamp is correct, for example with
+ * data.getSignedInfo().setTimestampMilliseconds(time(NULL) * 1000.0).
+ * @param data The Data object to sign and set the key and signature.
+ * @param publicKeyDer A pointer to a buffer with the DER-encoded public key.
+ * @param publicKeyDerLength The number of bytes in publicKeyDer.
+ * @param privateKeyDer A pointer to a buffer with the DER-encoded private key.
+ * @param privateKeyDerLength The number of bytes in privateKeyDer.
+ * @param wireFormat The WireFormat for calling encodeData.
+ */
+ static void sign
+ (Data &data, const unsigned char *publicKeyDer, unsigned int publicKeyDerLength,
+ const unsigned char *privateKeyDer, unsigned int privateKeyDerLength, WireFormat &wireFormat);
+
+ /**
+ * Call sign with the default public and private keys.
+ * @param data
+ * @param wireFormat The WireFormat for calling encodeData.
+ */
+ static void defaultSign(Data &data, WireFormat &wireFormat);
+
+ /**
+ * Call sign with the default public and private keys. For wireFormat, use WireFormat::getDefaultWireFormat().
+ * @param data
+ */
+ static void defaultSign(Data &data);
+
+ /**
+ * Use the WireFormat to decode the input as a Data packet and use the public key in the key locator to
+ * verify the signature.
+ * This does just uses the public key without checking whether it is certified.
+ * @param input A pointer to the input buffer to decode.
+ * @param inputLength The number of bytes in input.
+ * @param wireFormat The WireFormat for calling decodeData.
+ * @return true if the public key in the Data object verifies the object, false if not or if the Data object
+ * doesn't have a public key.
+ */
+ static bool selfVerifyData(const unsigned char *input, unsigned int inputLength, WireFormat &wireFormat);
+
+ static bool selfVerifyData(const unsigned char *input, unsigned int inputLength)
+ {
+ return selfVerifyData(input, inputLength, *WireFormat::getDefaultWireFormat());
+ }
+};
+
+}
+
+#endif