blob: ef1432ea1dac81336d8ab31b6d4fc7be007c3bec [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>
15#include <ndn-cpp/security/policy/no-verify-policy-manager.hpp>
16#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::ptr_lib;
22using namespace ndn::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 Thompson2aae2342013-10-23 15:28:56 -070074static uint8_t DEFAULT_CERTIFICATE_DER[] = {
750x04, 0x82, 0x02, 0xAA, 0x03, 0xB2, 0x85, 0x00, 0x00, 0xF2, 0xFA, 0xC5, 0x74, 0x65, 0x73, 0x74, 0x6E, 0x61, 0x6D, 0x65,
760x00, 0xFA, 0x9D, 0x4B, 0x45, 0x59, 0x00, 0xFA, 0xBD, 0x44, 0x53, 0x4B, 0x2D, 0x31, 0x32, 0x33, 0x00, 0xFA, 0xBD, 0x49,
770x44, 0x2D, 0x43, 0x45, 0x52, 0x54, 0x00, 0xFA, 0x8D, 0x30, 0x00, 0x00, 0x01, 0xA2, 0x03, 0xE2, 0x02, 0x85, 0xB5, 0x50,
780x6B, 0x1A, 0xBA, 0x3D, 0xA7, 0x76, 0x1B, 0x0F, 0x8D, 0x61, 0xA4, 0xAA, 0x7E, 0x3B, 0x6D, 0x15, 0xB4, 0x26, 0xFE, 0xB5,
790xBD, 0xA8, 0x23, 0x89, 0xAC, 0xA7, 0x65, 0xA3, 0xB8, 0x1C, 0x00, 0x02, 0xBA, 0x85, 0x00, 0x02, 0xC2, 0x9D, 0x28, 0x46,
800x3F, 0x00, 0x01, 0xE2, 0x01, 0xEA, 0xF2, 0xFA, 0xC5, 0x74, 0x65, 0x73, 0x74, 0x6E, 0x61, 0x6D, 0x65, 0x00, 0xFA, 0x9D,
810x4B, 0x45, 0x59, 0x00, 0xFA, 0xBD, 0x44, 0x53, 0x4B, 0x2D, 0x31, 0x32, 0x33, 0x00, 0xFA, 0xBD, 0x49, 0x44, 0x2D, 0x43,
820x45, 0x52, 0x54, 0x00, 0xFA, 0x8D, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x9A, 0x0F, 0x9D, 0x30, 0x81, 0xF0, 0x30,
830x30, 0x18, 0x16, 0x32, 0x30, 0x31, 0x33, 0x31, 0x30, 0x32, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x2E, 0x30, 0x30,
840x30, 0x30, 0x30, 0x30, 0x5A, 0x18, 0x16, 0x32, 0x30, 0x33, 0x33, 0x31, 0x30, 0x32, 0x33, 0x30, 0x30, 0x30, 0x30, 0x30,
850x30, 0x2E, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5A, 0x30, 0x1A, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x29, 0x13, 0x11,
860x2F, 0x74, 0x65, 0x73, 0x74, 0x6E, 0x61, 0x6D, 0x65, 0x2F, 0x44, 0x53, 0x4B, 0x2D, 0x31, 0x32, 0x33, 0x30, 0x81, 0x9F,
870x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, 0x8D, 0x00, 0x30,
880x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xE1, 0x7D, 0x30, 0xA7, 0xD8, 0x28, 0xAB, 0x1B, 0x84, 0x0B, 0x17, 0x54, 0x2D, 0xCA,
890xF6, 0x20, 0x7A, 0xFD, 0x22, 0x1E, 0x08, 0x6B, 0x2A, 0x60, 0xD1, 0x6C, 0xB7, 0xF5, 0x44, 0x48, 0xBA, 0x9F, 0x3F, 0x08,
900xBC, 0xD0, 0x99, 0xDB, 0x21, 0xDD, 0x16, 0x2A, 0x77, 0x9E, 0x61, 0xAA, 0x89, 0xEE, 0xE5, 0x54, 0xD3, 0xA4, 0x7D, 0xE2,
910x30, 0xBC, 0x7A, 0xC5, 0x90, 0xD5, 0x24, 0x06, 0x7C, 0x38, 0x98, 0xBB, 0xA6, 0xF5, 0xDC, 0x43, 0x60, 0xB8, 0x45, 0xED,
920xA4, 0x8C, 0xBD, 0x9C, 0xF1, 0x26, 0xA7, 0x23, 0x44, 0x5F, 0x0E, 0x19, 0x52, 0xD7, 0x32, 0x5A, 0x75, 0xFA, 0xF5, 0x56,
930x14, 0x4F, 0x9A, 0x98, 0xAF, 0x71, 0x86, 0xB0, 0x27, 0x86, 0x85, 0xB8, 0xE2, 0xC0, 0x8B, 0xEA, 0x87, 0x17, 0x1B, 0x4D,
940xEE, 0x58, 0x5C, 0x18, 0x28, 0x29, 0x5B, 0x53, 0x95, 0xEB, 0x4A, 0x17, 0x77, 0x9F, 0x02, 0x03, 0x01, 0x00, 0x01, 0x00,
950x00
96};
97
Jeff Thompson10ad12a2013-09-24 16:19:11 -070098uint8_t Data1[] = {
Jeff Thompson56ec9e22013-08-02 11:34:07 -0700990x04, 0x82, // NDN Data
Jeff Thompson5cae5e52013-07-10 19:41:20 -0700100 0x02, 0xaa, // Signature
101 0x03, 0xb2, // SignatureBits
102 0x08, 0x85, 0x20, 0xea, 0xb5, 0xb0, 0x63, 0xda, 0x94, 0xe9, 0x68, 0x7a,
103 0x8e, 0x65, 0x60, 0xe0, 0xc6, 0x43, 0x96, 0xd9, 0x69, 0xb4, 0x40, 0x72, 0x52, 0x00, 0x2c, 0x8e, 0x2a, 0xf5,
104 0x47, 0x12, 0x59, 0x93, 0xda, 0xed, 0x82, 0xd0, 0xf8, 0xe6, 0x65, 0x09, 0x87, 0x84, 0x54, 0xc7, 0xce, 0x9a,
105 0x93, 0x0d, 0x47, 0xf1, 0xf9, 0x3b, 0x98, 0x78, 0x2c, 0x22, 0x21, 0xd9, 0x2b, 0xda, 0x03, 0x30, 0x84, 0xf3,
106 0xc5, 0x52, 0x64, 0x2b, 0x1d, 0xde, 0x50, 0xe0, 0xee, 0xca, 0xa2, 0x73, 0x7a, 0x93, 0x30, 0xa8, 0x47, 0x7f,
107 0x6f, 0x41, 0xb0, 0xc8, 0x6e, 0x89, 0x1c, 0xcc, 0xf9, 0x01, 0x44, 0xc3, 0x08, 0xcf, 0x77, 0x47, 0xfc, 0xed,
108 0x48, 0xf0, 0x4c, 0xe9, 0xc2, 0x3b, 0x7d, 0xef, 0x6e, 0xa4, 0x80, 0x40, 0x9e, 0x43, 0xb6, 0x77, 0x7a, 0x1d,
109 0x51, 0xed, 0x98, 0x33, 0x93, 0xdd, 0x88, 0x01, 0x0e, 0xd3,
110 0x00,
111 0x00,
112 0xf2, 0xfa, 0x9d, 0x6e, 0x64, 0x6e, 0x00, 0xfa, 0x9d, 0x61, 0x62, 0x63, 0x00, 0x00, // Name
113 0x01, 0xa2, // SignedInfo
114 0x03, 0xe2, // PublisherPublicKeyDigest
115 0x02, 0x85, 0xb5, 0x50, 0x6b, 0x1a,
116 0xba, 0x3d, 0xa7, 0x76, 0x1b, 0x0f, 0x8d, 0x61, 0xa4, 0xaa, 0x7e, 0x3b, 0x6d, 0x15, 0xb4, 0x26, 0xfe, 0xb5,
117 0xbd, 0xa8, 0x23, 0x89, 0xac, 0xa7, 0x65, 0xa3, 0xb8, 0x1c,
118 0x00,
Jeff Thompson5cae5e52013-07-10 19:41:20 -0700119 0x02, 0xba, // Timestamp
120 0xb5, 0x05, 0x1d, 0xde, 0xe9, 0x5b, 0xdb,
121 0x00,
Jeff Thompson5cae5e52013-07-10 19:41:20 -0700122 0x01, 0xe2, // KeyLocator
123 0x01, 0xda, // Key
124 0x0a, 0x95, 0x30, 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86,
125 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81,
126 0x81, 0x00, 0xe1, 0x7d, 0x30, 0xa7, 0xd8, 0x28, 0xab, 0x1b, 0x84, 0x0b, 0x17, 0x54, 0x2d, 0xca, 0xf6, 0x20,
127 0x7a, 0xfd, 0x22, 0x1e, 0x08, 0x6b, 0x2a, 0x60, 0xd1, 0x6c, 0xb7, 0xf5, 0x44, 0x48, 0xba, 0x9f, 0x3f, 0x08,
128 0xbc, 0xd0, 0x99, 0xdb, 0x21, 0xdd, 0x16, 0x2a, 0x77, 0x9e, 0x61, 0xaa, 0x89, 0xee, 0xe5, 0x54, 0xd3, 0xa4,
129 0x7d, 0xe2, 0x30, 0xbc, 0x7a, 0xc5, 0x90, 0xd5, 0x24, 0x06, 0x7c, 0x38, 0x98, 0xbb, 0xa6, 0xf5, 0xdc, 0x43,
130 0x60, 0xb8, 0x45, 0xed, 0xa4, 0x8c, 0xbd, 0x9c, 0xf1, 0x26, 0xa7, 0x23, 0x44, 0x5f, 0x0e, 0x19, 0x52, 0xd7,
131 0x32, 0x5a, 0x75, 0xfa, 0xf5, 0x56, 0x14, 0x4f, 0x9a, 0x98, 0xaf, 0x71, 0x86, 0xb0, 0x27, 0x86, 0x85, 0xb8,
132 0xe2, 0xc0, 0x8b, 0xea, 0x87, 0x17, 0x1b, 0x4d, 0xee, 0x58, 0x5c, 0x18, 0x28, 0x29, 0x5b, 0x53, 0x95, 0xeb,
133 0x4a, 0x17, 0x77, 0x9f, 0x02, 0x03, 0x01, 0x00, 0x01,
134 0x00,
135 0x00,
136 0x00,
137 0x01, 0x9a, // Content
138 0xc5, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x21,
139 0x00,
1400x00,
1411
142};
143
Jeff Thompson1656e6a2013-08-29 18:01:48 -0700144static void dumpData(const Data& data)
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700145{
146 cout << "name: " << data.getName().to_uri() << endl;
147 if (data.getContent().size() > 0) {
148 cout << "content (raw): ";
Jeff Thompson97223af2013-09-24 17:01:27 -0700149 for (size_t i = 0; i < data.getContent().size(); ++i)
Jeff Thompson18db5a52013-09-12 13:24:43 -0700150 cout << (*data.getContent())[i];
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700151 cout<< endl;
Jeff Thompson18db5a52013-09-12 13:24:43 -0700152 cout << "content (hex): " << toHex(*data.getContent()) << endl;
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700153 }
154 else
155 cout << "content: <empty>" << endl;
Jeff Thompsonfec716d2013-09-11 13:54:36 -0700156
Jeff Thompsonfec716d2013-09-11 13:54:36 -0700157 cout << "metaInfo.timestamp: ";
158 if (data.getMetaInfo().getTimestampMilliseconds() >= 0) {
159 time_t seconds = data.getMetaInfo().getTimestampMilliseconds() / 1000.0;
160 cout << data.getMetaInfo().getTimestampMilliseconds() << " milliseconds, UTC time: " << asctime(gmtime(&seconds));
161 }
162 else
163 cout << "<none>" << endl;
164 if (!(data.getMetaInfo().getType() < 0 || data.getMetaInfo().getType() == ndn_ContentType_DATA)) {
165 cout << "metaInfo.type: ";
166 if (data.getMetaInfo().getType() == ndn_ContentType_ENCR)
167 cout << "ENCR" << endl;
168 else if (data.getMetaInfo().getType() == ndn_ContentType_GONE)
169 cout << "GONE" << endl;
170 else if (data.getMetaInfo().getType() == ndn_ContentType_KEY)
171 cout << "KEY" << endl;
172 else if (data.getMetaInfo().getType() == ndn_ContentType_LINK)
173 cout << "LINK" << endl;
174 else if (data.getMetaInfo().getType() == ndn_ContentType_NACK)
175 cout << "NACK" << endl;
176 }
177 cout << "metaInfo.freshnessSeconds: ";
178 if (data.getMetaInfo().getFreshnessSeconds() >= 0)
179 cout << data.getMetaInfo().getFreshnessSeconds() << endl;
180 else
181 cout << "<none>" << endl;
182 cout << "metaInfo.finalBlockID: "
Jeff Thompson85db6d72013-09-12 12:41:18 -0700183 << (data.getMetaInfo().getFinalBlockID().getValue().size() > 0 ?
184 toHex(*data.getMetaInfo().getFinalBlockID().getValue()).c_str() : "<none>") << endl;
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700185
Jeff Thompson20af0732013-09-12 17:01:45 -0700186 const Sha256WithRsaSignature *signature = dynamic_cast<const Sha256WithRsaSignature*>(data.getSignature());
187 if (signature) {
188 cout << "signature.digestAlgorithm: "
189 << (signature->getDigestAlgorithm().size() > 0 ? toHex(*signature->getDigestAlgorithm()).c_str() : "default (sha-256)") << endl;
190 cout << "signature.witness: "
191 << (signature->getWitness().size() > 0 ? toHex(*signature->getWitness()).c_str() : "<none>") << endl;
192 cout << "signature.signature: "
193 << (signature->getSignature().size() > 0 ? toHex(*signature->getSignature()).c_str() : "<none>") << endl;
194 cout << "signature.publisherPublicKeyDigest: "
195 << (signature->getPublisherPublicKeyDigest().getPublisherPublicKeyDigest().size() > 0 ?
196 toHex(*signature->getPublisherPublicKeyDigest().getPublisherPublicKeyDigest()).c_str() : "<none>") << endl;
197 cout << "signature.keyLocator: ";
198 if ((int)signature->getKeyLocator().getType() >= 0) {
199 if (signature->getKeyLocator().getType() == ndn_KeyLocatorType_KEY)
200 cout << "Key: " << toHex(*signature->getKeyLocator().getKeyData()) << endl;
201 else if (signature->getKeyLocator().getType() == ndn_KeyLocatorType_CERTIFICATE)
202 cout << "Certificate: " << toHex(*signature->getKeyLocator().getKeyData()) << endl;
203 else if (signature->getKeyLocator().getType() == ndn_KeyLocatorType_KEYNAME) {
204 cout << "KeyName: " << signature->getKeyLocator().getKeyName().to_uri() << endl;
Jeff Thompsondb008cc2013-09-17 16:35:07 -0700205 cout << "signature.keyLocator: ";
Jeff Thompson20af0732013-09-12 17:01:45 -0700206 if ((int)signature->getKeyLocator().getKeyNameType() >= 0) {
207 bool showKeyNameData = true;
208 if (signature->getKeyLocator().getKeyNameType() == ndn_KeyNameType_PUBLISHER_PUBLIC_KEY_DIGEST)
209 cout << "PublisherPublicKeyDigest: ";
210 else if (signature->getKeyLocator().getKeyNameType() == ndn_KeyNameType_PUBLISHER_CERTIFICATE_DIGEST)
211 cout << "PublisherCertificateDigest: ";
212 else if (signature->getKeyLocator().getKeyNameType() == ndn_KeyNameType_PUBLISHER_ISSUER_KEY_DIGEST)
213 cout << "PublisherIssuerKeyDigest: ";
214 else if (signature->getKeyLocator().getKeyNameType() == ndn_KeyNameType_PUBLISHER_ISSUER_CERTIFICATE_DIGEST)
215 cout << "PublisherIssuerCertificateDigest: ";
216 else {
217 cout << "<unrecognized ndn_KeyNameType " << signature->getKeyLocator().getKeyNameType() << ">" << endl;
218 showKeyNameData = false;
219 }
220 if (showKeyNameData)
Jeff Thompsondb008cc2013-09-17 16:35:07 -0700221 cout << (signature->getKeyLocator().getKeyData().size() > 0 ?
222 toHex(*signature->getKeyLocator().getKeyData()).c_str() : "<none>") << endl;
Jeff Thompsonf4585af2013-09-11 14:56:59 -0700223 }
Jeff Thompson20af0732013-09-12 17:01:45 -0700224 else
225 cout << "<no key digest>" << endl;
Jeff Thompsonf4585af2013-09-11 14:56:59 -0700226 }
227 else
Jeff Thompson20af0732013-09-12 17:01:45 -0700228 cout << "<unrecognized ndn_KeyLocatorType " << signature->getKeyLocator().getType() << ">" << endl;
Jeff Thompsonf4585af2013-09-11 14:56:59 -0700229 }
230 else
Jeff Thompson20af0732013-09-12 17:01:45 -0700231 cout << "<none>" << endl;
Jeff Thompsonf4585af2013-09-11 14:56:59 -0700232 }
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700233}
234
Jeff Thompson51755b32013-09-18 16:46:56 -0700235static void onVerified(const char *prefix, const shared_ptr<Data>& data)
Jeff Thompsondb008cc2013-09-17 16:35:07 -0700236{
237 cout << prefix << " signature verification: VERIFIED" << endl;
238}
239
Jeff Thompson29ce3102013-09-27 11:47:48 -0700240static void onVerifyFailed(const char *prefix, const shared_ptr<Data>& data)
Jeff Thompsondb008cc2013-09-17 16:35:07 -0700241{
242 cout << prefix << " signature verification: FAILED" << endl;
243}
244
Jeff Thompson5cae5e52013-07-10 19:41:20 -0700245int main(int argc, char** argv)
246{
247 try {
Jeff Thompson51755b32013-09-18 16:46:56 -0700248 shared_ptr<Data> data(new Data());
Jeff Thompson707b77d2013-09-17 17:42:49 -0700249 data->wireDecode(Data1, sizeof(Data1));
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700250 cout << "Decoded Data:" << endl;
Jeff Thompson707b77d2013-09-17 17:42:49 -0700251 dumpData(*data);
Jeff Thompson5cae5e52013-07-10 19:41:20 -0700252
Jeff Thompson707b77d2013-09-17 17:42:49 -0700253 Blob encoding = data->wireEncode();
Jeff Thompson5cae5e52013-07-10 19:41:20 -0700254
Jeff Thompson51755b32013-09-18 16:46:56 -0700255 shared_ptr<Data> reDecodedData(new Data());
Jeff Thompson707b77d2013-09-17 17:42:49 -0700256 reDecodedData->wireDecode(*encoding);
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700257 cout << endl << "Re-decoded Data:" << endl;
Jeff Thompson707b77d2013-09-17 17:42:49 -0700258 dumpData(*reDecodedData);
Jeff Thompsonb81192e2013-08-09 09:34:51 -0700259
Jeff Thompson51755b32013-09-18 16:46:56 -0700260 shared_ptr<Data> freshData(new Data(Name("/ndn/abc")));
Jeff Thompson10ad12a2013-09-24 16:19:11 -0700261 const uint8_t freshContent[] = "SUCCESS!";
Jeff Thompson707b77d2013-09-17 17:42:49 -0700262 freshData->setContent(freshContent, sizeof(freshContent) - 1);
263 freshData->getMetaInfo().setTimestampMilliseconds(time(NULL) * 1000.0);
Jeff Thompsonb81192e2013-08-09 09:34:51 -0700264
Jeff Thompson2aae2342013-10-23 15:28:56 -0700265 shared_ptr<MemoryIdentityStorage> identityStorage(new MemoryIdentityStorage());
Jeff Thompson96eccf02013-09-23 18:09:50 -0700266 shared_ptr<MemoryPrivateKeyStorage> privateKeyStorage(new MemoryPrivateKeyStorage());
Jeff Thompson29ce3102013-09-27 11:47:48 -0700267 KeyChain keyChain
Jeff Thompson2aae2342013-10-23 15:28:56 -0700268 (make_shared<IdentityManager>(identityStorage, privateKeyStorage), make_shared<NoVerifyPolicyManager>());
Jeff Thompsondb008cc2013-09-17 16:35:07 -0700269
Jeff Thompson96eccf02013-09-23 18:09:50 -0700270 // Initialize the storage.
Jeff Thompson3e5acfb2013-09-26 08:43:06 -0700271 Name keyName("/testname/DSK-123");
Jeff Thompson2aae2342013-10-23 15:28:56 -0700272 Name certificateName = keyName.getSubName(0, keyName.size() - 1).append("KEY").append
273 (keyName.get(keyName.size() - 1)).append("ID-CERT").append("0");
274 identityStorage->addKey(keyName, KEY_TYPE_RSA, Blob(DEFAULT_PUBLIC_KEY_DER, sizeof(DEFAULT_PUBLIC_KEY_DER)));
275 Data certificateData;
276 certificateData.wireDecode(DEFAULT_CERTIFICATE_DER, sizeof(DEFAULT_CERTIFICATE_DER));
277 identityStorage->addCertificate(IdentityCertificate(certificateData));
Jeff Thompson96eccf02013-09-23 18:09:50 -0700278 privateKeyStorage->setKeyPairForKeyName
279 (keyName, DEFAULT_PUBLIC_KEY_DER, sizeof(DEFAULT_PUBLIC_KEY_DER), DEFAULT_PRIVATE_KEY_DER, sizeof(DEFAULT_PRIVATE_KEY_DER));
280
Jeff Thompson29ce3102013-09-27 11:47:48 -0700281 keyChain.sign(*freshData, certificateName);
Jeff Thompson1e90d8c2013-08-12 16:09:25 -0700282 cout << endl << "Freshly-signed Data:" << endl;
Jeff Thompson707b77d2013-09-17 17:42:49 -0700283 dumpData(*freshData);
Jeff Thompson3e5acfb2013-09-26 08:43:06 -0700284
Jeff Thompson29ce3102013-09-27 11:47:48 -0700285 keyChain.verifyData(freshData, bind(&onVerified, "Freshly-signed Data", _1), bind(&onVerifyFailed, "Freshly-signed Data", _1));
Jeff Thompsondb008cc2013-09-17 16:35:07 -0700286 } catch (std::exception& e) {
Jeff Thompson5cae5e52013-07-10 19:41:20 -0700287 cout << "exception: " << e.what() << endl;
288 }
289 return 0;
290}