blob: 0c0de84980df01fbf3e543220f7a19b6d998e924 [file] [log] [blame]
Jeff Thompson5cae5e52013-07-10 19:41:20 -07001/**
2 * @author: Jeff Thompson
3 * See COPYING for copyright and distribution information.
4 */
5
6#include <cstdlib>
7#include <sstream>
8#include <iostream>
Jeff Thompsonade5b1e2013-08-09 12:16:45 -07009#include <time.h>
Jeff Thompson27e02cd2013-08-01 16:56:05 -070010#if 0
Jeff Thompson40d67ce2013-07-15 17:33:01 -070011#include <boost/date_time/posix_time/posix_time_types.hpp>
12#include <boost/date_time/posix_time/time_serialize.hpp>
13#include <boost/date_time/gregorian/gregorian.hpp>
Jeff Thompson27e02cd2013-08-01 16:56:05 -070014#endif
Jeff Thompson56ec9e22013-08-02 11:34:07 -070015#include <ndn-cpp/data.hpp>
Jeff Thompsonb81192e2013-08-09 09:34:51 -070016#include <ndn-cpp/key-chain.hpp>
Jeff Thompson5cae5e52013-07-10 19:41:20 -070017
18using namespace std;
19using namespace ndn;
Jeff Thompson27e02cd2013-08-01 16:56:05 -070020#if 0
Jeff Thompson40d67ce2013-07-15 17:33:01 -070021using namespace boost::posix_time;
22using namespace boost::gregorian;
Jeff Thompson27e02cd2013-08-01 16:56:05 -070023#endif
Jeff Thompson5cae5e52013-07-10 19:41:20 -070024
Jeff Thompson56ec9e22013-08-02 11:34:07 -070025unsigned char Data1[] = {
260x04, 0x82, // NDN Data
Jeff Thompson5cae5e52013-07-10 19:41:20 -070027 0x02, 0xaa, // Signature
28 0x03, 0xb2, // SignatureBits
29 0x08, 0x85, 0x20, 0xea, 0xb5, 0xb0, 0x63, 0xda, 0x94, 0xe9, 0x68, 0x7a,
30 0x8e, 0x65, 0x60, 0xe0, 0xc6, 0x43, 0x96, 0xd9, 0x69, 0xb4, 0x40, 0x72, 0x52, 0x00, 0x2c, 0x8e, 0x2a, 0xf5,
31 0x47, 0x12, 0x59, 0x93, 0xda, 0xed, 0x82, 0xd0, 0xf8, 0xe6, 0x65, 0x09, 0x87, 0x84, 0x54, 0xc7, 0xce, 0x9a,
32 0x93, 0x0d, 0x47, 0xf1, 0xf9, 0x3b, 0x98, 0x78, 0x2c, 0x22, 0x21, 0xd9, 0x2b, 0xda, 0x03, 0x30, 0x84, 0xf3,
33 0xc5, 0x52, 0x64, 0x2b, 0x1d, 0xde, 0x50, 0xe0, 0xee, 0xca, 0xa2, 0x73, 0x7a, 0x93, 0x30, 0xa8, 0x47, 0x7f,
34 0x6f, 0x41, 0xb0, 0xc8, 0x6e, 0x89, 0x1c, 0xcc, 0xf9, 0x01, 0x44, 0xc3, 0x08, 0xcf, 0x77, 0x47, 0xfc, 0xed,
35 0x48, 0xf0, 0x4c, 0xe9, 0xc2, 0x3b, 0x7d, 0xef, 0x6e, 0xa4, 0x80, 0x40, 0x9e, 0x43, 0xb6, 0x77, 0x7a, 0x1d,
36 0x51, 0xed, 0x98, 0x33, 0x93, 0xdd, 0x88, 0x01, 0x0e, 0xd3,
37 0x00,
38 0x00,
39 0xf2, 0xfa, 0x9d, 0x6e, 0x64, 0x6e, 0x00, 0xfa, 0x9d, 0x61, 0x62, 0x63, 0x00, 0x00, // Name
40 0x01, 0xa2, // SignedInfo
41 0x03, 0xe2, // PublisherPublicKeyDigest
42 0x02, 0x85, 0xb5, 0x50, 0x6b, 0x1a,
43 0xba, 0x3d, 0xa7, 0x76, 0x1b, 0x0f, 0x8d, 0x61, 0xa4, 0xaa, 0x7e, 0x3b, 0x6d, 0x15, 0xb4, 0x26, 0xfe, 0xb5,
44 0xbd, 0xa8, 0x23, 0x89, 0xac, 0xa7, 0x65, 0xa3, 0xb8, 0x1c,
45 0x00,
Jeff Thompson5cae5e52013-07-10 19:41:20 -070046 0x02, 0xba, // Timestamp
47 0xb5, 0x05, 0x1d, 0xde, 0xe9, 0x5b, 0xdb,
48 0x00,
Jeff Thompson5cae5e52013-07-10 19:41:20 -070049 0x01, 0xe2, // KeyLocator
50 0x01, 0xda, // Key
51 0x0a, 0x95, 0x30, 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86,
52 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81,
53 0x81, 0x00, 0xe1, 0x7d, 0x30, 0xa7, 0xd8, 0x28, 0xab, 0x1b, 0x84, 0x0b, 0x17, 0x54, 0x2d, 0xca, 0xf6, 0x20,
54 0x7a, 0xfd, 0x22, 0x1e, 0x08, 0x6b, 0x2a, 0x60, 0xd1, 0x6c, 0xb7, 0xf5, 0x44, 0x48, 0xba, 0x9f, 0x3f, 0x08,
55 0xbc, 0xd0, 0x99, 0xdb, 0x21, 0xdd, 0x16, 0x2a, 0x77, 0x9e, 0x61, 0xaa, 0x89, 0xee, 0xe5, 0x54, 0xd3, 0xa4,
56 0x7d, 0xe2, 0x30, 0xbc, 0x7a, 0xc5, 0x90, 0xd5, 0x24, 0x06, 0x7c, 0x38, 0x98, 0xbb, 0xa6, 0xf5, 0xdc, 0x43,
57 0x60, 0xb8, 0x45, 0xed, 0xa4, 0x8c, 0xbd, 0x9c, 0xf1, 0x26, 0xa7, 0x23, 0x44, 0x5f, 0x0e, 0x19, 0x52, 0xd7,
58 0x32, 0x5a, 0x75, 0xfa, 0xf5, 0x56, 0x14, 0x4f, 0x9a, 0x98, 0xaf, 0x71, 0x86, 0xb0, 0x27, 0x86, 0x85, 0xb8,
59 0xe2, 0xc0, 0x8b, 0xea, 0x87, 0x17, 0x1b, 0x4d, 0xee, 0x58, 0x5c, 0x18, 0x28, 0x29, 0x5b, 0x53, 0x95, 0xeb,
60 0x4a, 0x17, 0x77, 0x9f, 0x02, 0x03, 0x01, 0x00, 0x01,
61 0x00,
62 0x00,
63 0x00,
64 0x01, 0x9a, // Content
65 0xc5, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x21,
66 0x00,
670x00,
681
69};
70
Jeff Thompson27e02cd2013-08-01 16:56:05 -070071#if 0
Jeff Thompson40d67ce2013-07-15 17:33:01 -070072const ptime UNIX_EPOCH_TIME = ptime (date (1970, Jan, 1));
Jeff Thompson27e02cd2013-08-01 16:56:05 -070073#endif
Jeff Thompson40d67ce2013-07-15 17:33:01 -070074
Jeff Thompson61c4ecf2013-08-08 15:56:46 -070075static void dumpData(const Data &data)
76{
77 cout << "name: " << data.getName().to_uri() << endl;
78 if (data.getContent().size() > 0) {
79 cout << "content (raw): ";
80 for (unsigned int i = 0; i < data.getContent().size(); ++i)
81 cout << data.getContent()[i];
82 cout<< endl;
83 cout << "content (hex): " << toHex(data.getContent()) << endl;
84 }
85 else
86 cout << "content: <empty>" << endl;
87
88 cout << "signature.digestAlgorithm: "
89 << (data.getSignature().getDigestAlgorithm().size() > 0 ? toHex(data.getSignature().getDigestAlgorithm()).c_str() : "default (sha-256)") << endl;
90 cout << "signature.witness: "
91 << (data.getSignature().getWitness().size() > 0 ? toHex(data.getSignature().getWitness()).c_str() : "<none>") << endl;
Jeff Thompson535751b2013-08-08 17:29:12 -070092 cout << "signature.signature: "
93 << (data.getSignature().getSignature().size() > 0 ? toHex(data.getSignature().getSignature()).c_str() : "<none>") << endl;
Jeff Thompson61c4ecf2013-08-08 15:56:46 -070094
95 cout << "signedInfo.publisherPublicKeyDigest: "
96 << (data.getSignedInfo().getPublisherPublicKeyDigest().getPublisherPublicKeyDigest().size() > 0 ?
97 toHex(data.getSignedInfo().getPublisherPublicKeyDigest().getPublisherPublicKeyDigest()).c_str() : "<none>") << endl;
Jeff Thompsonb81192e2013-08-09 09:34:51 -070098 cout << "signedInfo.timestamp: ";
Jeff Thompsonade5b1e2013-08-09 12:16:45 -070099 if (data.getSignedInfo().getTimestampMilliseconds() >= 0) {
Jeff Thompsonb81192e2013-08-09 09:34:51 -0700100 cout << data.getSignedInfo().getTimestampMilliseconds() << " milliseconds" << endl;
101 // TODO: dump timestamp real date.
Jeff Thompsonade5b1e2013-08-09 12:16:45 -0700102#if 0
103 ptime timestamp = UNIX_EPOCH_TIME + milliseconds(data.getSignedInfo().getTimestampMilliseconds());
104 cout << "Data timestamp " << timestamp.date().year() << "/" << timestamp.date().month() << "/" << timestamp.date().day()
105 << " " << timestamp.time_of_day().hours() << ":" << timestamp.time_of_day().minutes() << ":" << timestamp.time_of_day().seconds() << endl;
106#endif
107 }
Jeff Thompsonb81192e2013-08-09 09:34:51 -0700108 else
109 cout << "<none>" << endl;
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700110 cout << "signedInfo.freshnessSeconds: ";
111 if (data.getSignedInfo().getFreshnessSeconds() >= 0)
112 cout << data.getSignedInfo().getFreshnessSeconds() << endl;
113 else
114 cout << "<none>" << endl;
115 cout << "signedInfo.finalBlockID: "
116 << (data.getSignedInfo().getFinalBlockID().size() > 0 ?
117 toHex(data.getSignedInfo().getFinalBlockID()).c_str() : "<none>") << endl;
118 cout << "signedInfo.keyLocator: ";
119 if (data.getSignedInfo().getKeyLocator().getType() >= 0) {
120 if (data.getSignedInfo().getKeyLocator().getType() == ndn_KeyLocatorType_KEY)
Jeff Thompson535751b2013-08-08 17:29:12 -0700121 cout << "Key: " << toHex(data.getSignedInfo().getKeyLocator().getKeyOrCertificate()) << endl;
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700122 else if (data.getSignedInfo().getKeyLocator().getType() == ndn_KeyLocatorType_CERTIFICATE)
Jeff Thompson535751b2013-08-08 17:29:12 -0700123 cout << "Certificate: " << toHex(data.getSignedInfo().getKeyLocator().getKeyOrCertificate()) << endl;
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700124 else if (data.getSignedInfo().getKeyLocator().getType() == ndn_KeyLocatorType_KEYNAME)
125 // TODO: Implement keyName.
126 cout << "keyName" << endl;
127 else
128 cout << "<unrecognized ndn_KeyLocatorType " << data.getSignedInfo().getKeyLocator().getType() << ">" << endl;
129 }
130 else
131 cout << "<none>" << endl;
132}
133
Jeff Thompson5cae5e52013-07-10 19:41:20 -0700134int main(int argc, char** argv)
135{
136 try {
Jeff Thompson56ec9e22013-08-02 11:34:07 -0700137 Data data;
Jeff Thompson67e9e0a2013-08-02 19:16:19 -0700138 data.wireDecode(Data1, sizeof(Data1));
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700139 cout << "Decoded Data:" << endl;
140 dumpData(data);
Jeff Thompson5cae5e52013-07-10 19:41:20 -0700141
Jeff Thompson67e9e0a2013-08-02 19:16:19 -0700142 ptr_lib::shared_ptr<vector<unsigned char> > encoding = data.wireEncode();
Jeff Thompson5cae5e52013-07-10 19:41:20 -0700143
Jeff Thompson56ec9e22013-08-02 11:34:07 -0700144 Data reDecodedData;
Jeff Thompson67e9e0a2013-08-02 19:16:19 -0700145 reDecodedData.wireDecode(*encoding);
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700146 cout << endl << "Re-decoded Data:" << endl;
147 dumpData(reDecodedData);
Jeff Thompsonb81192e2013-08-09 09:34:51 -0700148
149 Data freshData(Name("/ndn/abc"));
Jeff Thompsonecc1a822013-08-09 10:53:48 -0700150 const unsigned char freshContent[] = "SUCCESS!";
151 freshData.setContent(freshContent, sizeof(freshContent) - 1);
Jeff Thompsonade5b1e2013-08-09 12:16:45 -0700152 freshData.getSignedInfo().setTimestampMilliseconds(time(NULL) * 1000.0);
Jeff Thompsonb81192e2013-08-09 09:34:51 -0700153
154 KeyChain::defaultSign(freshData);
155 cout << endl << "Freshly signed data:" << endl;
156 dumpData(freshData);
Jeff Thompson5cae5e52013-07-10 19:41:20 -0700157 } catch (exception &e) {
158 cout << "exception: " << e.what() << endl;
159 }
160 return 0;
161}