blob: 708be9c7a9525e86b8308e75868d4a50e23ee2e4 [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 Thompson2ce8f492013-09-17 18:01:25 -070011#include "../face.hpp"
12#include "identity/identity-manager.hpp"
Jeff Thompson47c93cf2013-08-09 00:38:48 -070013
14namespace ndn {
15
Jeff Thompson2ce8f492013-09-17 18:01:25 -070016/**
17 * An OnVerified function object is used to pass a callback to verifyData to report a successful verification.
18 */
19typedef func_lib::function<void(const ptr_lib::shared_ptr<Data>& data)> OnVerified;
20
21/**
22 * An OnVerifyFailed function object is used to pass a callback to verifyData to report a failed verification.
23 */
24typedef func_lib::function<void()> OnVerifyFailed;
25
Jeff Thompson47c93cf2013-08-09 00:38:48 -070026class KeyChain {
27public:
Jeff Thompson2ce8f492013-09-17 18:01:25 -070028 KeyChain(ptr_lib::shared_ptr<IdentityManager> identityManager)
29 : identityManager_(identityManager), face_(0), maxSteps_(100)
30 {
31 }
32
Jeff Thompson47c93cf2013-08-09 00:38:48 -070033 /**
Jeff Thompson2ce8f492013-09-17 18:01:25 -070034 * Wire encode the Data object, sign it and set its signature.
Jeff Thompsonade5b1e2013-08-09 12:16:45 -070035 * Note: the caller must make sure the timestamp is correct, for example with
Jeff Thompsonfec716d2013-09-11 13:54:36 -070036 * data.getMetaInfo().setTimestampMilliseconds(time(NULL) * 1000.0).
Jeff Thompson2ce8f492013-09-17 18:01:25 -070037 * @param data The Data object to be signed. This updates its signature and key locator field and wireEncoding.
38 * @param signerName The signing identity or certificate name, depending on byKeyName. If omitted, infer the certificate name from data.getName().
39 * @param byKeyName If true, the signerName is the key name, otherwise it is the certificate name. If omitted, the default is true.
Jeff Thompson8d24fe12013-09-18 15:54:51 -070040 * @param wireFormat A WireFormat object used to encode the input. If omitted, use WireFormat getDefaultWireFormat().
Jeff Thompson3c73da42013-08-12 11:19:05 -070041 */
Jeff Thompson2ce8f492013-09-17 18:01:25 -070042 void
43 signData(Data& data, const Name& signerName = Name(), bool byKeyName = true, WireFormat& wireFormat = *WireFormat::getDefaultWireFormat());
Jeff Thompson3c73da42013-08-12 11:19:05 -070044
45 /**
Jeff Thompson2ce8f492013-09-17 18:01:25 -070046 * Check the signature on the Data object and call either onVerify or onVerifyFailed.
47 * We use callback functions because verify may fetch information to check the signature.
Jeff Thompson3c73da42013-08-12 11:19:05 -070048 * @param data
Jeff Thompson2ce8f492013-09-17 18:01:25 -070049 * @param onVerified
50 * @param onVerifyFailed
Jeff Thompson8efe5ad2013-08-20 17:36:38 -070051 */
Jeff Thompson2ce8f492013-09-17 18:01:25 -070052 void
53 verifyData(const ptr_lib::shared_ptr<Data>& data, const OnVerified& onVerified, const OnVerifyFailed& onVerifyFailed);
Jeff Thompson8efe5ad2013-08-20 17:36:38 -070054
55 /**
Jeff Thompson2ce8f492013-09-17 18:01:25 -070056 * Set the Face which will be used to fetch required certificates.
57 * @param face A pointer to the Face object.
Jeff Thompson1e90d8c2013-08-12 16:09:25 -070058 */
Jeff Thompson2ce8f492013-09-17 18:01:25 -070059 void
60 setFace(Face* face) { face_ = face; }
61
62private:
63 ptr_lib::shared_ptr<IdentityManager> identityManager_;
64 Face* face_;
65 const int maxSteps_;
Jeff Thompson47c93cf2013-08-09 00:38:48 -070066};
67
68}
69
70#endif