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