blob: 41fefcd2fc5186a64fcfae324180716fc335c66f [file] [log] [blame]
Jeff Thompson5cae5e52013-07-10 19:41:20 -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 Thompson5cae5e52013-07-10 19:41:20 -07004 * See COPYING for copyright and distribution information.
5 */
6
7#include <cstdlib>
8#include <sstream>
9#include <iostream>
Jeff Thompsonade5b1e2013-08-09 12:16:45 -070010#include <time.h>
Jeff Thompson96eccf02013-09-23 18:09:50 -070011#include <stdint.h>
Jeff Thompson25b4e612013-10-10 16:03:24 -070012#include <ndn-cpp/data.hpp>
13#include <ndn-cpp/security/identity/memory-identity-storage.hpp>
14#include <ndn-cpp/security/identity/memory-private-key-storage.hpp>
Jeff Thompson3a2eb2f2013-12-11 11:00:27 -080015#include <ndn-cpp/security/policy/self-verify-policy-manager.hpp>
Jeff Thompson25b4e612013-10-10 16:03:24 -070016#include <ndn-cpp/security/key-chain.hpp>
17#include <ndn-cpp/sha256-with-rsa-signature.hpp>
Jeff Thompson5cae5e52013-07-10 19:41:20 -070018
19using namespace std;
20using namespace ndn;
Jeff Thompson25bfdca2013-10-16 17:05:41 -070021using namespace ndn::func_lib;
Jeff Thompsonb7523002013-10-09 10:25:00 -070022#if NDN_CPP_HAVE_STD_FUNCTION
Jeff Thompsondb008cc2013-09-17 16:35:07 -070023// In the std library, the placeholders are in a different namespace than boost.
24using namespace func_lib::placeholders;
25#endif
Jeff Thompson5cae5e52013-07-10 19:41:20 -070026
Jeff Thompson10ad12a2013-09-24 16:19:11 -070027static uint8_t DEFAULT_PUBLIC_KEY_DER[] = {
Jeff Thompson96eccf02013-09-23 18:09:50 -0700280x30, 0x81, 0x9F, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81,
290x8D, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xE1, 0x7D, 0x30, 0xA7, 0xD8, 0x28, 0xAB, 0x1B, 0x84, 0x0B, 0x17,
300x54, 0x2D, 0xCA, 0xF6, 0x20, 0x7A, 0xFD, 0x22, 0x1E, 0x08, 0x6B, 0x2A, 0x60, 0xD1, 0x6C, 0xB7, 0xF5, 0x44, 0x48, 0xBA,
310x9F, 0x3F, 0x08, 0xBC, 0xD0, 0x99, 0xDB, 0x21, 0xDD, 0x16, 0x2A, 0x77, 0x9E, 0x61, 0xAA, 0x89, 0xEE, 0xE5, 0x54, 0xD3,
320xA4, 0x7D, 0xE2, 0x30, 0xBC, 0x7A, 0xC5, 0x90, 0xD5, 0x24, 0x06, 0x7C, 0x38, 0x98, 0xBB, 0xA6, 0xF5, 0xDC, 0x43, 0x60,
330xB8, 0x45, 0xED, 0xA4, 0x8C, 0xBD, 0x9C, 0xF1, 0x26, 0xA7, 0x23, 0x44, 0x5F, 0x0E, 0x19, 0x52, 0xD7, 0x32, 0x5A, 0x75,
340xFA, 0xF5, 0x56, 0x14, 0x4F, 0x9A, 0x98, 0xAF, 0x71, 0x86, 0xB0, 0x27, 0x86, 0x85, 0xB8, 0xE2, 0xC0, 0x8B, 0xEA, 0x87,
350x17, 0x1B, 0x4D, 0xEE, 0x58, 0x5C, 0x18, 0x28, 0x29, 0x5B, 0x53, 0x95, 0xEB, 0x4A, 0x17, 0x77, 0x9F, 0x02, 0x03, 0x01,
360x00, 01
37};
38
Jeff Thompson10ad12a2013-09-24 16:19:11 -070039static uint8_t DEFAULT_PRIVATE_KEY_DER[] = {
Jeff Thompson96eccf02013-09-23 18:09:50 -0700400x30, 0x82, 0x02, 0x5d, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xe1, 0x7d, 0x30, 0xa7, 0xd8, 0x28, 0xab, 0x1b, 0x84,
410x0b, 0x17, 0x54, 0x2d, 0xca, 0xf6, 0x20, 0x7a, 0xfd, 0x22, 0x1e, 0x08, 0x6b, 0x2a, 0x60, 0xd1, 0x6c, 0xb7, 0xf5, 0x44,
420x48, 0xba, 0x9f, 0x3f, 0x08, 0xbc, 0xd0, 0x99, 0xdb, 0x21, 0xdd, 0x16, 0x2a, 0x77, 0x9e, 0x61, 0xaa, 0x89, 0xee, 0xe5,
430x54, 0xd3, 0xa4, 0x7d, 0xe2, 0x30, 0xbc, 0x7a, 0xc5, 0x90, 0xd5, 0x24, 0x06, 0x7c, 0x38, 0x98, 0xbb, 0xa6, 0xf5, 0xdc,
440x43, 0x60, 0xb8, 0x45, 0xed, 0xa4, 0x8c, 0xbd, 0x9c, 0xf1, 0x26, 0xa7, 0x23, 0x44, 0x5f, 0x0e, 0x19, 0x52, 0xd7, 0x32,
450x5a, 0x75, 0xfa, 0xf5, 0x56, 0x14, 0x4f, 0x9a, 0x98, 0xaf, 0x71, 0x86, 0xb0, 0x27, 0x86, 0x85, 0xb8, 0xe2, 0xc0, 0x8b,
460xea, 0x87, 0x17, 0x1b, 0x4d, 0xee, 0x58, 0x5c, 0x18, 0x28, 0x29, 0x5b, 0x53, 0x95, 0xeb, 0x4a, 0x17, 0x77, 0x9f, 0x02,
470x03, 0x01, 0x00, 0x01, 0x02, 0x81, 0x80, 0x1a, 0x4b, 0xfa, 0x4f, 0xa8, 0xc2, 0xdd, 0x69, 0xa1, 0x15, 0x96, 0x0b, 0xe8,
480x27, 0x42, 0x5a, 0xf9, 0x5c, 0xea, 0x0c, 0xac, 0x98, 0xaa, 0xe1, 0x8d, 0xaa, 0xeb, 0x2d, 0x3c, 0x60, 0x6a, 0xfb, 0x45,
490x63, 0xa4, 0x79, 0x83, 0x67, 0xed, 0xe4, 0x15, 0xc0, 0xb0, 0x20, 0x95, 0x6d, 0x49, 0x16, 0xc6, 0x42, 0x05, 0x48, 0xaa,
500xb1, 0xa5, 0x53, 0x65, 0xd2, 0x02, 0x99, 0x08, 0xd1, 0x84, 0xcc, 0xf0, 0xcd, 0xea, 0x61, 0xc9, 0x39, 0x02, 0x3f, 0x87,
510x4a, 0xe5, 0xc4, 0xd2, 0x07, 0x02, 0xe1, 0x9f, 0xa0, 0x06, 0xc2, 0xcc, 0x02, 0xe7, 0xaa, 0x6c, 0x99, 0x8a, 0xf8, 0x49,
520x00, 0xf1, 0xa2, 0x8c, 0x0c, 0x8a, 0xb9, 0x4f, 0x6d, 0x73, 0x3b, 0x2c, 0xb7, 0x9f, 0x8a, 0xa6, 0x7f, 0x9b, 0x9f, 0xb7,
530xa1, 0xcc, 0x74, 0x2e, 0x8f, 0xb8, 0xb0, 0x26, 0x89, 0xd2, 0xe5, 0x66, 0xe8, 0x8e, 0xa1, 0x02, 0x41, 0x00, 0xfc, 0xe7,
540x52, 0xbc, 0x4e, 0x95, 0xb6, 0x1a, 0xb4, 0x62, 0xcc, 0xd8, 0x06, 0xe1, 0xdc, 0x7a, 0xa2, 0xb6, 0x71, 0x01, 0xaa, 0x27,
550xfc, 0x99, 0xe5, 0xf2, 0x54, 0xbb, 0xb2, 0x85, 0xe1, 0x96, 0x54, 0x2d, 0xcb, 0xba, 0x86, 0xfa, 0x80, 0xdf, 0xcf, 0x39,
560xe6, 0x74, 0xcb, 0x22, 0xce, 0x70, 0xaa, 0x10, 0x00, 0x73, 0x1d, 0x45, 0x0a, 0x39, 0x51, 0x84, 0xf5, 0x15, 0x8f, 0x37,
570x76, 0x91, 0x02, 0x41, 0x00, 0xe4, 0x3f, 0xf0, 0xf4, 0xde, 0x79, 0x77, 0x48, 0x9b, 0x9c, 0x28, 0x45, 0x26, 0x57, 0x3c,
580x71, 0x40, 0x28, 0x6a, 0xa1, 0xfe, 0xc3, 0xe5, 0x37, 0xa1, 0x03, 0xf6, 0x2d, 0xbe, 0x80, 0x64, 0x72, 0x69, 0x2e, 0x9b,
590x4d, 0xe3, 0x2e, 0x1b, 0xfe, 0xe7, 0xf9, 0x77, 0x8c, 0x18, 0x53, 0x9f, 0xe2, 0xfe, 0x00, 0xbb, 0x49, 0x20, 0x47, 0xdf,
600x01, 0x61, 0x87, 0xd6, 0xe3, 0x44, 0xb5, 0x03, 0x2f, 0x02, 0x40, 0x54, 0xec, 0x7c, 0xbc, 0xdd, 0x0a, 0xaa, 0xde, 0xe6,
610xc9, 0xf2, 0x8d, 0x6c, 0x2a, 0x35, 0xf6, 0x3c, 0x63, 0x55, 0x29, 0x40, 0xf1, 0x32, 0x82, 0x9f, 0x53, 0xb3, 0x9e, 0x5f,
620xc1, 0x53, 0x52, 0x3e, 0xac, 0x2e, 0x28, 0x51, 0xa1, 0x16, 0xdb, 0x90, 0xe3, 0x99, 0x7e, 0x88, 0xa4, 0x04, 0x7c, 0x92,
630xae, 0xd2, 0xe7, 0xd4, 0xe1, 0x55, 0x20, 0x90, 0x3e, 0x3c, 0x6a, 0x63, 0xf0, 0x34, 0xf1, 0x02, 0x41, 0x00, 0x84, 0x5a,
640x17, 0x6c, 0xc6, 0x3c, 0x84, 0xd0, 0x93, 0x7a, 0xff, 0x56, 0xe9, 0x9e, 0x98, 0x2b, 0xcb, 0x5a, 0x24, 0x4a, 0xff, 0x21,
650xb4, 0x9e, 0x87, 0x3d, 0x76, 0xd8, 0x9b, 0xa8, 0x73, 0x96, 0x6c, 0x2b, 0x5c, 0x5e, 0xd3, 0xa6, 0xff, 0x10, 0xd6, 0x8e,
660xaf, 0xa5, 0x8a, 0xcd, 0xa2, 0xde, 0xcb, 0x0e, 0xbd, 0x8a, 0xef, 0xae, 0xfd, 0x3f, 0x1d, 0xc0, 0xd8, 0xf8, 0x3b, 0xf5,
670x02, 0x7d, 0x02, 0x41, 0x00, 0x8b, 0x26, 0xd3, 0x2c, 0x7d, 0x28, 0x38, 0x92, 0xf1, 0xbf, 0x15, 0x16, 0x39, 0x50, 0xc8,
680x6d, 0x32, 0xec, 0x28, 0xf2, 0x8b, 0xd8, 0x70, 0xc5, 0xed, 0xe1, 0x7b, 0xff, 0x2d, 0x66, 0x8c, 0x86, 0x77, 0x43, 0xeb,
690xb6, 0xf6, 0x50, 0x66, 0xb0, 0x40, 0x24, 0x6a, 0xaf, 0x98, 0x21, 0x45, 0x30, 0x01, 0x59, 0xd0, 0xc3, 0xfc, 0x7b, 0xae,
700x30, 0x18, 0xeb, 0x90, 0xfb, 0x17, 0xd3, 0xce, 0xb5
71};
72
Jeff Thompson10ad12a2013-09-24 16:19:11 -070073uint8_t Data1[] = {
Jeff Thompson56ec9e22013-08-02 11:34:07 -0700740x04, 0x82, // NDN Data
Jeff Thompson5cae5e52013-07-10 19:41:20 -070075 0x02, 0xaa, // Signature
76 0x03, 0xb2, // SignatureBits
77 0x08, 0x85, 0x20, 0xea, 0xb5, 0xb0, 0x63, 0xda, 0x94, 0xe9, 0x68, 0x7a,
78 0x8e, 0x65, 0x60, 0xe0, 0xc6, 0x43, 0x96, 0xd9, 0x69, 0xb4, 0x40, 0x72, 0x52, 0x00, 0x2c, 0x8e, 0x2a, 0xf5,
79 0x47, 0x12, 0x59, 0x93, 0xda, 0xed, 0x82, 0xd0, 0xf8, 0xe6, 0x65, 0x09, 0x87, 0x84, 0x54, 0xc7, 0xce, 0x9a,
80 0x93, 0x0d, 0x47, 0xf1, 0xf9, 0x3b, 0x98, 0x78, 0x2c, 0x22, 0x21, 0xd9, 0x2b, 0xda, 0x03, 0x30, 0x84, 0xf3,
81 0xc5, 0x52, 0x64, 0x2b, 0x1d, 0xde, 0x50, 0xe0, 0xee, 0xca, 0xa2, 0x73, 0x7a, 0x93, 0x30, 0xa8, 0x47, 0x7f,
82 0x6f, 0x41, 0xb0, 0xc8, 0x6e, 0x89, 0x1c, 0xcc, 0xf9, 0x01, 0x44, 0xc3, 0x08, 0xcf, 0x77, 0x47, 0xfc, 0xed,
83 0x48, 0xf0, 0x4c, 0xe9, 0xc2, 0x3b, 0x7d, 0xef, 0x6e, 0xa4, 0x80, 0x40, 0x9e, 0x43, 0xb6, 0x77, 0x7a, 0x1d,
84 0x51, 0xed, 0x98, 0x33, 0x93, 0xdd, 0x88, 0x01, 0x0e, 0xd3,
85 0x00,
86 0x00,
87 0xf2, 0xfa, 0x9d, 0x6e, 0x64, 0x6e, 0x00, 0xfa, 0x9d, 0x61, 0x62, 0x63, 0x00, 0x00, // Name
88 0x01, 0xa2, // SignedInfo
89 0x03, 0xe2, // PublisherPublicKeyDigest
90 0x02, 0x85, 0xb5, 0x50, 0x6b, 0x1a,
91 0xba, 0x3d, 0xa7, 0x76, 0x1b, 0x0f, 0x8d, 0x61, 0xa4, 0xaa, 0x7e, 0x3b, 0x6d, 0x15, 0xb4, 0x26, 0xfe, 0xb5,
92 0xbd, 0xa8, 0x23, 0x89, 0xac, 0xa7, 0x65, 0xa3, 0xb8, 0x1c,
93 0x00,
Jeff Thompson5cae5e52013-07-10 19:41:20 -070094 0x02, 0xba, // Timestamp
95 0xb5, 0x05, 0x1d, 0xde, 0xe9, 0x5b, 0xdb,
96 0x00,
Jeff Thompson5cae5e52013-07-10 19:41:20 -070097 0x01, 0xe2, // KeyLocator
98 0x01, 0xda, // Key
99 0x0a, 0x95, 0x30, 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86,
100 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81,
101 0x81, 0x00, 0xe1, 0x7d, 0x30, 0xa7, 0xd8, 0x28, 0xab, 0x1b, 0x84, 0x0b, 0x17, 0x54, 0x2d, 0xca, 0xf6, 0x20,
102 0x7a, 0xfd, 0x22, 0x1e, 0x08, 0x6b, 0x2a, 0x60, 0xd1, 0x6c, 0xb7, 0xf5, 0x44, 0x48, 0xba, 0x9f, 0x3f, 0x08,
103 0xbc, 0xd0, 0x99, 0xdb, 0x21, 0xdd, 0x16, 0x2a, 0x77, 0x9e, 0x61, 0xaa, 0x89, 0xee, 0xe5, 0x54, 0xd3, 0xa4,
104 0x7d, 0xe2, 0x30, 0xbc, 0x7a, 0xc5, 0x90, 0xd5, 0x24, 0x06, 0x7c, 0x38, 0x98, 0xbb, 0xa6, 0xf5, 0xdc, 0x43,
105 0x60, 0xb8, 0x45, 0xed, 0xa4, 0x8c, 0xbd, 0x9c, 0xf1, 0x26, 0xa7, 0x23, 0x44, 0x5f, 0x0e, 0x19, 0x52, 0xd7,
106 0x32, 0x5a, 0x75, 0xfa, 0xf5, 0x56, 0x14, 0x4f, 0x9a, 0x98, 0xaf, 0x71, 0x86, 0xb0, 0x27, 0x86, 0x85, 0xb8,
107 0xe2, 0xc0, 0x8b, 0xea, 0x87, 0x17, 0x1b, 0x4d, 0xee, 0x58, 0x5c, 0x18, 0x28, 0x29, 0x5b, 0x53, 0x95, 0xeb,
108 0x4a, 0x17, 0x77, 0x9f, 0x02, 0x03, 0x01, 0x00, 0x01,
109 0x00,
110 0x00,
111 0x00,
112 0x01, 0x9a, // Content
113 0xc5, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x21,
114 0x00,
1150x00,
1161
117};
118
Jeff Thompson1656e6a2013-08-29 18:01:48 -0700119static void dumpData(const Data& data)
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700120{
121 cout << "name: " << data.getName().to_uri() << endl;
122 if (data.getContent().size() > 0) {
123 cout << "content (raw): ";
Jeff Thompson97223af2013-09-24 17:01:27 -0700124 for (size_t i = 0; i < data.getContent().size(); ++i)
Jeff Thompson18db5a52013-09-12 13:24:43 -0700125 cout << (*data.getContent())[i];
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700126 cout<< endl;
Jeff Thompson18db5a52013-09-12 13:24:43 -0700127 cout << "content (hex): " << toHex(*data.getContent()) << endl;
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700128 }
129 else
130 cout << "content: <empty>" << endl;
Jeff Thompsonfec716d2013-09-11 13:54:36 -0700131
Jeff Thompsonfec716d2013-09-11 13:54:36 -0700132 cout << "metaInfo.timestamp: ";
133 if (data.getMetaInfo().getTimestampMilliseconds() >= 0) {
134 time_t seconds = data.getMetaInfo().getTimestampMilliseconds() / 1000.0;
135 cout << data.getMetaInfo().getTimestampMilliseconds() << " milliseconds, UTC time: " << asctime(gmtime(&seconds));
136 }
137 else
138 cout << "<none>" << endl;
139 if (!(data.getMetaInfo().getType() < 0 || data.getMetaInfo().getType() == ndn_ContentType_DATA)) {
140 cout << "metaInfo.type: ";
141 if (data.getMetaInfo().getType() == ndn_ContentType_ENCR)
142 cout << "ENCR" << endl;
143 else if (data.getMetaInfo().getType() == ndn_ContentType_GONE)
144 cout << "GONE" << endl;
145 else if (data.getMetaInfo().getType() == ndn_ContentType_KEY)
146 cout << "KEY" << endl;
147 else if (data.getMetaInfo().getType() == ndn_ContentType_LINK)
148 cout << "LINK" << endl;
149 else if (data.getMetaInfo().getType() == ndn_ContentType_NACK)
150 cout << "NACK" << endl;
151 }
152 cout << "metaInfo.freshnessSeconds: ";
153 if (data.getMetaInfo().getFreshnessSeconds() >= 0)
154 cout << data.getMetaInfo().getFreshnessSeconds() << endl;
155 else
156 cout << "<none>" << endl;
157 cout << "metaInfo.finalBlockID: "
Jeff Thompson85db6d72013-09-12 12:41:18 -0700158 << (data.getMetaInfo().getFinalBlockID().getValue().size() > 0 ?
159 toHex(*data.getMetaInfo().getFinalBlockID().getValue()).c_str() : "<none>") << endl;
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700160
Jeff Thompson20af0732013-09-12 17:01:45 -0700161 const Sha256WithRsaSignature *signature = dynamic_cast<const Sha256WithRsaSignature*>(data.getSignature());
162 if (signature) {
163 cout << "signature.digestAlgorithm: "
164 << (signature->getDigestAlgorithm().size() > 0 ? toHex(*signature->getDigestAlgorithm()).c_str() : "default (sha-256)") << endl;
165 cout << "signature.witness: "
166 << (signature->getWitness().size() > 0 ? toHex(*signature->getWitness()).c_str() : "<none>") << endl;
167 cout << "signature.signature: "
168 << (signature->getSignature().size() > 0 ? toHex(*signature->getSignature()).c_str() : "<none>") << endl;
169 cout << "signature.publisherPublicKeyDigest: "
170 << (signature->getPublisherPublicKeyDigest().getPublisherPublicKeyDigest().size() > 0 ?
171 toHex(*signature->getPublisherPublicKeyDigest().getPublisherPublicKeyDigest()).c_str() : "<none>") << endl;
172 cout << "signature.keyLocator: ";
173 if ((int)signature->getKeyLocator().getType() >= 0) {
174 if (signature->getKeyLocator().getType() == ndn_KeyLocatorType_KEY)
175 cout << "Key: " << toHex(*signature->getKeyLocator().getKeyData()) << endl;
176 else if (signature->getKeyLocator().getType() == ndn_KeyLocatorType_CERTIFICATE)
177 cout << "Certificate: " << toHex(*signature->getKeyLocator().getKeyData()) << endl;
178 else if (signature->getKeyLocator().getType() == ndn_KeyLocatorType_KEYNAME) {
179 cout << "KeyName: " << signature->getKeyLocator().getKeyName().to_uri() << endl;
Jeff Thompsondb008cc2013-09-17 16:35:07 -0700180 cout << "signature.keyLocator: ";
Jeff Thompson20af0732013-09-12 17:01:45 -0700181 if ((int)signature->getKeyLocator().getKeyNameType() >= 0) {
182 bool showKeyNameData = true;
183 if (signature->getKeyLocator().getKeyNameType() == ndn_KeyNameType_PUBLISHER_PUBLIC_KEY_DIGEST)
184 cout << "PublisherPublicKeyDigest: ";
185 else if (signature->getKeyLocator().getKeyNameType() == ndn_KeyNameType_PUBLISHER_CERTIFICATE_DIGEST)
186 cout << "PublisherCertificateDigest: ";
187 else if (signature->getKeyLocator().getKeyNameType() == ndn_KeyNameType_PUBLISHER_ISSUER_KEY_DIGEST)
188 cout << "PublisherIssuerKeyDigest: ";
189 else if (signature->getKeyLocator().getKeyNameType() == ndn_KeyNameType_PUBLISHER_ISSUER_CERTIFICATE_DIGEST)
190 cout << "PublisherIssuerCertificateDigest: ";
191 else {
192 cout << "<unrecognized ndn_KeyNameType " << signature->getKeyLocator().getKeyNameType() << ">" << endl;
193 showKeyNameData = false;
194 }
195 if (showKeyNameData)
Jeff Thompsondb008cc2013-09-17 16:35:07 -0700196 cout << (signature->getKeyLocator().getKeyData().size() > 0 ?
197 toHex(*signature->getKeyLocator().getKeyData()).c_str() : "<none>") << endl;
Jeff Thompsonf4585af2013-09-11 14:56:59 -0700198 }
Jeff Thompson20af0732013-09-12 17:01:45 -0700199 else
200 cout << "<no key digest>" << endl;
Jeff Thompsonf4585af2013-09-11 14:56:59 -0700201 }
202 else
Jeff Thompson20af0732013-09-12 17:01:45 -0700203 cout << "<unrecognized ndn_KeyLocatorType " << signature->getKeyLocator().getType() << ">" << endl;
Jeff Thompsonf4585af2013-09-11 14:56:59 -0700204 }
205 else
Jeff Thompson20af0732013-09-12 17:01:45 -0700206 cout << "<none>" << endl;
Jeff Thompsonf4585af2013-09-11 14:56:59 -0700207 }
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700208}
209
Jeff Thompson06d17802013-12-11 16:34:27 -0800210static void onVerified(const char *prefix, const ptr_lib::shared_ptr<Data>& data)
Jeff Thompsondb008cc2013-09-17 16:35:07 -0700211{
212 cout << prefix << " signature verification: VERIFIED" << endl;
213}
214
Jeff Thompson06d17802013-12-11 16:34:27 -0800215static void onVerifyFailed(const char *prefix, const ptr_lib::shared_ptr<Data>& data)
Jeff Thompsondb008cc2013-09-17 16:35:07 -0700216{
217 cout << prefix << " signature verification: FAILED" << endl;
218}
219
Jeff Thompson5cae5e52013-07-10 19:41:20 -0700220int main(int argc, char** argv)
221{
222 try {
Jeff Thompson06d17802013-12-11 16:34:27 -0800223 ptr_lib::shared_ptr<Data> data(new Data());
Jeff Thompson707b77d2013-09-17 17:42:49 -0700224 data->wireDecode(Data1, sizeof(Data1));
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700225 cout << "Decoded Data:" << endl;
Jeff Thompson707b77d2013-09-17 17:42:49 -0700226 dumpData(*data);
Jeff Thompson5cae5e52013-07-10 19:41:20 -0700227
Jeff Thompson707b77d2013-09-17 17:42:49 -0700228 Blob encoding = data->wireEncode();
Jeff Thompson5cae5e52013-07-10 19:41:20 -0700229
Jeff Thompson06d17802013-12-11 16:34:27 -0800230 ptr_lib::shared_ptr<Data> reDecodedData(new Data());
Jeff Thompson707b77d2013-09-17 17:42:49 -0700231 reDecodedData->wireDecode(*encoding);
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700232 cout << endl << "Re-decoded Data:" << endl;
Jeff Thompson707b77d2013-09-17 17:42:49 -0700233 dumpData(*reDecodedData);
Jeff Thompsonb81192e2013-08-09 09:34:51 -0700234
Jeff Thompson06d17802013-12-11 16:34:27 -0800235 ptr_lib::shared_ptr<Data> freshData(new Data(Name("/ndn/abc")));
Jeff Thompson10ad12a2013-09-24 16:19:11 -0700236 const uint8_t freshContent[] = "SUCCESS!";
Jeff Thompson707b77d2013-09-17 17:42:49 -0700237 freshData->setContent(freshContent, sizeof(freshContent) - 1);
238 freshData->getMetaInfo().setTimestampMilliseconds(time(NULL) * 1000.0);
Jeff Thompsonb81192e2013-08-09 09:34:51 -0700239
Jeff Thompson06d17802013-12-11 16:34:27 -0800240 ptr_lib::shared_ptr<MemoryIdentityStorage> identityStorage(new MemoryIdentityStorage());
241 ptr_lib::shared_ptr<MemoryPrivateKeyStorage> privateKeyStorage(new MemoryPrivateKeyStorage());
Jeff Thompson29ce3102013-09-27 11:47:48 -0700242 KeyChain keyChain
Jeff Thompson06d17802013-12-11 16:34:27 -0800243 (ptr_lib::make_shared<IdentityManager>(identityStorage, privateKeyStorage),
244 ptr_lib::make_shared<SelfVerifyPolicyManager>(identityStorage.get()));
Jeff Thompsondb008cc2013-09-17 16:35:07 -0700245
Jeff Thompson96eccf02013-09-23 18:09:50 -0700246 // Initialize the storage.
Jeff Thompson3e5acfb2013-09-26 08:43:06 -0700247 Name keyName("/testname/DSK-123");
Jeff Thompson2aae2342013-10-23 15:28:56 -0700248 Name certificateName = keyName.getSubName(0, keyName.size() - 1).append("KEY").append
249 (keyName.get(keyName.size() - 1)).append("ID-CERT").append("0");
250 identityStorage->addKey(keyName, KEY_TYPE_RSA, Blob(DEFAULT_PUBLIC_KEY_DER, sizeof(DEFAULT_PUBLIC_KEY_DER)));
Jeff Thompson96eccf02013-09-23 18:09:50 -0700251 privateKeyStorage->setKeyPairForKeyName
252 (keyName, DEFAULT_PUBLIC_KEY_DER, sizeof(DEFAULT_PUBLIC_KEY_DER), DEFAULT_PRIVATE_KEY_DER, sizeof(DEFAULT_PRIVATE_KEY_DER));
253
Jeff Thompson29ce3102013-09-27 11:47:48 -0700254 keyChain.sign(*freshData, certificateName);
Jeff Thompson1e90d8c2013-08-12 16:09:25 -0700255 cout << endl << "Freshly-signed Data:" << endl;
Jeff Thompson707b77d2013-09-17 17:42:49 -0700256 dumpData(*freshData);
Jeff Thompson3e5acfb2013-09-26 08:43:06 -0700257
Jeff Thompson29ce3102013-09-27 11:47:48 -0700258 keyChain.verifyData(freshData, bind(&onVerified, "Freshly-signed Data", _1), bind(&onVerifyFailed, "Freshly-signed Data", _1));
Jeff Thompsondb008cc2013-09-17 16:35:07 -0700259 } catch (std::exception& e) {
Jeff Thompson5cae5e52013-07-10 19:41:20 -0700260 cout << "exception: " << e.what() << endl;
261 }
262 return 0;
263}