blob: 7cfa64e5782dda7e93d9aa1f4ee69e38f0458600 [file] [log] [blame]
Jeff Thompson47c93cf2013-08-09 00:38:48 -07001/**
Jeff Thompson7687dc02013-09-13 11:54:07 -07002 * Copyright (C) 2013 Regents of the University of California.
3 * @author: Jeff Thompson <jefft0@remap.ucla.edu>
Jeff Thompson47c93cf2013-08-09 00:38:48 -07004 * See COPYING for copyright and distribution information.
5 */
6
7#ifndef NDN_KEY_CHAIN_HPP
Jeff Thompson2d27e2f2013-08-09 12:55:00 -07008#define NDN_KEY_CHAIN_HPP
Jeff Thompson47c93cf2013-08-09 00:38:48 -07009
Jeff Thompson7a67cb62013-08-26 11:43:18 -070010#include "../data.hpp"
Jeff Thompson47c93cf2013-08-09 00:38:48 -070011
12namespace ndn {
13
14class KeyChain {
15public:
16 /**
Jeff Thompsonfec716d2013-09-11 13:54:36 -070017 * In data, set the meta info publisher public key digest and key locator key to the public key and set the
Jeff Thompson3c73da42013-08-12 11:19:05 -070018 * signature using the private key.
Jeff Thompsonade5b1e2013-08-09 12:16:45 -070019 * Note: the caller must make sure the timestamp is correct, for example with
Jeff Thompsonfec716d2013-09-11 13:54:36 -070020 * data.getMetaInfo().setTimestampMilliseconds(time(NULL) * 1000.0).
Jeff Thompson3c73da42013-08-12 11:19:05 -070021 * @param data The Data object to sign and set the key and signature.
22 * @param publicKeyDer A pointer to a buffer with the DER-encoded public key.
23 * @param publicKeyDerLength The number of bytes in publicKeyDer.
24 * @param privateKeyDer A pointer to a buffer with the DER-encoded private key.
25 * @param privateKeyDerLength The number of bytes in privateKeyDer.
Jeff Thompson8efe5ad2013-08-20 17:36:38 -070026 * @param wireFormat The WireFormat for calling encodeData.
Jeff Thompson3c73da42013-08-12 11:19:05 -070027 */
Jeff Thompson0050abe2013-09-17 12:50:25 -070028 static void
29 sign
Jeff Thompson1656e6a2013-08-29 18:01:48 -070030 (Data& data, const unsigned char *publicKeyDer, unsigned int publicKeyDerLength,
31 const unsigned char *privateKeyDer, unsigned int privateKeyDerLength, WireFormat& wireFormat);
Jeff Thompson3c73da42013-08-12 11:19:05 -070032
33 /**
34 * Call sign with the default public and private keys.
35 * @param data
Jeff Thompsona7516e02013-09-11 17:12:25 -070036 * @param wireFormat The WireFormat for calling encodeData, or WireFormat::getDefaultWireFormat() if omitted.
Jeff Thompson8efe5ad2013-08-20 17:36:38 -070037 */
Jeff Thompson0050abe2013-09-17 12:50:25 -070038 static void
39 defaultSign(Data& data, WireFormat& wireFormat = *WireFormat::getDefaultWireFormat());
Jeff Thompson8efe5ad2013-08-20 17:36:38 -070040
41 /**
Jeff Thompson1e90d8c2013-08-12 16:09:25 -070042 * Use the WireFormat to decode the input as a Data packet and use the public key in the key locator to
43 * verify the signature.
44 * This does just uses the public key without checking whether it is certified.
45 * @param input A pointer to the input buffer to decode.
46 * @param inputLength The number of bytes in input.
47 * @param wireFormat The WireFormat for calling decodeData.
48 * @return true if the public key in the Data object verifies the object, false if not or if the Data object
49 * doesn't have a public key.
50 */
Jeff Thompson0050abe2013-09-17 12:50:25 -070051 static bool
52 selfVerifyData(const unsigned char *input, unsigned int inputLength, WireFormat& wireFormat);
Jeff Thompson1e90d8c2013-08-12 16:09:25 -070053
Jeff Thompson0050abe2013-09-17 12:50:25 -070054 static bool
55 selfVerifyData(const unsigned char *input, unsigned int inputLength)
Jeff Thompson1e90d8c2013-08-12 16:09:25 -070056 {
57 return selfVerifyData(input, inputLength, *WireFormat::getDefaultWireFormat());
58 }
Jeff Thompson47c93cf2013-08-09 00:38:48 -070059};
60
61}
62
63#endif