blob: 559aa605e604367df0fc087de2ab1df6c57c873b [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 Thompson27e02cd2013-08-01 16:56:05 -07009#if 0
Jeff Thompson40d67ce2013-07-15 17:33:01 -070010#include <boost/date_time/posix_time/posix_time_types.hpp>
11#include <boost/date_time/posix_time/time_serialize.hpp>
12#include <boost/date_time/gregorian/gregorian.hpp>
Jeff Thompson27e02cd2013-08-01 16:56:05 -070013#endif
Jeff Thompson56ec9e22013-08-02 11:34:07 -070014#include <ndn-cpp/data.hpp>
Jeff Thompsonb81192e2013-08-09 09:34:51 -070015#include <ndn-cpp/key-chain.hpp>
Jeff Thompson5cae5e52013-07-10 19:41:20 -070016
17using namespace std;
18using namespace ndn;
Jeff Thompson27e02cd2013-08-01 16:56:05 -070019#if 0
Jeff Thompson40d67ce2013-07-15 17:33:01 -070020using namespace boost::posix_time;
21using namespace boost::gregorian;
Jeff Thompson27e02cd2013-08-01 16:56:05 -070022#endif
Jeff Thompson5cae5e52013-07-10 19:41:20 -070023
Jeff Thompson56ec9e22013-08-02 11:34:07 -070024unsigned char Data1[] = {
250x04, 0x82, // NDN Data
Jeff Thompson5cae5e52013-07-10 19:41:20 -070026 0x02, 0xaa, // Signature
27 0x03, 0xb2, // SignatureBits
28 0x08, 0x85, 0x20, 0xea, 0xb5, 0xb0, 0x63, 0xda, 0x94, 0xe9, 0x68, 0x7a,
29 0x8e, 0x65, 0x60, 0xe0, 0xc6, 0x43, 0x96, 0xd9, 0x69, 0xb4, 0x40, 0x72, 0x52, 0x00, 0x2c, 0x8e, 0x2a, 0xf5,
30 0x47, 0x12, 0x59, 0x93, 0xda, 0xed, 0x82, 0xd0, 0xf8, 0xe6, 0x65, 0x09, 0x87, 0x84, 0x54, 0xc7, 0xce, 0x9a,
31 0x93, 0x0d, 0x47, 0xf1, 0xf9, 0x3b, 0x98, 0x78, 0x2c, 0x22, 0x21, 0xd9, 0x2b, 0xda, 0x03, 0x30, 0x84, 0xf3,
32 0xc5, 0x52, 0x64, 0x2b, 0x1d, 0xde, 0x50, 0xe0, 0xee, 0xca, 0xa2, 0x73, 0x7a, 0x93, 0x30, 0xa8, 0x47, 0x7f,
33 0x6f, 0x41, 0xb0, 0xc8, 0x6e, 0x89, 0x1c, 0xcc, 0xf9, 0x01, 0x44, 0xc3, 0x08, 0xcf, 0x77, 0x47, 0xfc, 0xed,
34 0x48, 0xf0, 0x4c, 0xe9, 0xc2, 0x3b, 0x7d, 0xef, 0x6e, 0xa4, 0x80, 0x40, 0x9e, 0x43, 0xb6, 0x77, 0x7a, 0x1d,
35 0x51, 0xed, 0x98, 0x33, 0x93, 0xdd, 0x88, 0x01, 0x0e, 0xd3,
36 0x00,
37 0x00,
38 0xf2, 0xfa, 0x9d, 0x6e, 0x64, 0x6e, 0x00, 0xfa, 0x9d, 0x61, 0x62, 0x63, 0x00, 0x00, // Name
39 0x01, 0xa2, // SignedInfo
40 0x03, 0xe2, // PublisherPublicKeyDigest
41 0x02, 0x85, 0xb5, 0x50, 0x6b, 0x1a,
42 0xba, 0x3d, 0xa7, 0x76, 0x1b, 0x0f, 0x8d, 0x61, 0xa4, 0xaa, 0x7e, 0x3b, 0x6d, 0x15, 0xb4, 0x26, 0xfe, 0xb5,
43 0xbd, 0xa8, 0x23, 0x89, 0xac, 0xa7, 0x65, 0xa3, 0xb8, 0x1c,
44 0x00,
Jeff Thompson5cae5e52013-07-10 19:41:20 -070045 0x02, 0xba, // Timestamp
46 0xb5, 0x05, 0x1d, 0xde, 0xe9, 0x5b, 0xdb,
47 0x00,
Jeff Thompson5cae5e52013-07-10 19:41:20 -070048 0x01, 0xe2, // KeyLocator
49 0x01, 0xda, // Key
50 0x0a, 0x95, 0x30, 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86,
51 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81,
52 0x81, 0x00, 0xe1, 0x7d, 0x30, 0xa7, 0xd8, 0x28, 0xab, 0x1b, 0x84, 0x0b, 0x17, 0x54, 0x2d, 0xca, 0xf6, 0x20,
53 0x7a, 0xfd, 0x22, 0x1e, 0x08, 0x6b, 0x2a, 0x60, 0xd1, 0x6c, 0xb7, 0xf5, 0x44, 0x48, 0xba, 0x9f, 0x3f, 0x08,
54 0xbc, 0xd0, 0x99, 0xdb, 0x21, 0xdd, 0x16, 0x2a, 0x77, 0x9e, 0x61, 0xaa, 0x89, 0xee, 0xe5, 0x54, 0xd3, 0xa4,
55 0x7d, 0xe2, 0x30, 0xbc, 0x7a, 0xc5, 0x90, 0xd5, 0x24, 0x06, 0x7c, 0x38, 0x98, 0xbb, 0xa6, 0xf5, 0xdc, 0x43,
56 0x60, 0xb8, 0x45, 0xed, 0xa4, 0x8c, 0xbd, 0x9c, 0xf1, 0x26, 0xa7, 0x23, 0x44, 0x5f, 0x0e, 0x19, 0x52, 0xd7,
57 0x32, 0x5a, 0x75, 0xfa, 0xf5, 0x56, 0x14, 0x4f, 0x9a, 0x98, 0xaf, 0x71, 0x86, 0xb0, 0x27, 0x86, 0x85, 0xb8,
58 0xe2, 0xc0, 0x8b, 0xea, 0x87, 0x17, 0x1b, 0x4d, 0xee, 0x58, 0x5c, 0x18, 0x28, 0x29, 0x5b, 0x53, 0x95, 0xeb,
59 0x4a, 0x17, 0x77, 0x9f, 0x02, 0x03, 0x01, 0x00, 0x01,
60 0x00,
61 0x00,
62 0x00,
63 0x01, 0x9a, // Content
64 0xc5, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x21,
65 0x00,
660x00,
671
68};
69
Jeff Thompson27e02cd2013-08-01 16:56:05 -070070#if 0
Jeff Thompson40d67ce2013-07-15 17:33:01 -070071const ptime UNIX_EPOCH_TIME = ptime (date (1970, Jan, 1));
Jeff Thompson27e02cd2013-08-01 16:56:05 -070072#endif
Jeff Thompson40d67ce2013-07-15 17:33:01 -070073
Jeff Thompson61c4ecf2013-08-08 15:56:46 -070074static void dumpData(const Data &data)
75{
76 cout << "name: " << data.getName().to_uri() << endl;
77 if (data.getContent().size() > 0) {
78 cout << "content (raw): ";
79 for (unsigned int i = 0; i < data.getContent().size(); ++i)
80 cout << data.getContent()[i];
81 cout<< endl;
82 cout << "content (hex): " << toHex(data.getContent()) << endl;
83 }
84 else
85 cout << "content: <empty>" << endl;
86
87 cout << "signature.digestAlgorithm: "
88 << (data.getSignature().getDigestAlgorithm().size() > 0 ? toHex(data.getSignature().getDigestAlgorithm()).c_str() : "default (sha-256)") << endl;
89 cout << "signature.witness: "
90 << (data.getSignature().getWitness().size() > 0 ? toHex(data.getSignature().getWitness()).c_str() : "<none>") << endl;
Jeff Thompson535751b2013-08-08 17:29:12 -070091 cout << "signature.signature: "
92 << (data.getSignature().getSignature().size() > 0 ? toHex(data.getSignature().getSignature()).c_str() : "<none>") << endl;
Jeff Thompson61c4ecf2013-08-08 15:56:46 -070093
94 cout << "signedInfo.publisherPublicKeyDigest: "
95 << (data.getSignedInfo().getPublisherPublicKeyDigest().getPublisherPublicKeyDigest().size() > 0 ?
96 toHex(data.getSignedInfo().getPublisherPublicKeyDigest().getPublisherPublicKeyDigest()).c_str() : "<none>") << endl;
Jeff Thompsonb81192e2013-08-09 09:34:51 -070097 cout << "signedInfo.timestamp: ";
98 if (data.getSignedInfo().getTimestampMilliseconds() >= 0)
99 cout << data.getSignedInfo().getTimestampMilliseconds() << " milliseconds" << endl;
100 // TODO: dump timestamp real date.
101 else
102 cout << "<none>" << endl;
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700103 cout << "signedInfo.freshnessSeconds: ";
104 if (data.getSignedInfo().getFreshnessSeconds() >= 0)
105 cout << data.getSignedInfo().getFreshnessSeconds() << endl;
106 else
107 cout << "<none>" << endl;
108 cout << "signedInfo.finalBlockID: "
109 << (data.getSignedInfo().getFinalBlockID().size() > 0 ?
110 toHex(data.getSignedInfo().getFinalBlockID()).c_str() : "<none>") << endl;
111 cout << "signedInfo.keyLocator: ";
112 if (data.getSignedInfo().getKeyLocator().getType() >= 0) {
113 if (data.getSignedInfo().getKeyLocator().getType() == ndn_KeyLocatorType_KEY)
Jeff Thompson535751b2013-08-08 17:29:12 -0700114 cout << "Key: " << toHex(data.getSignedInfo().getKeyLocator().getKeyOrCertificate()) << endl;
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700115 else if (data.getSignedInfo().getKeyLocator().getType() == ndn_KeyLocatorType_CERTIFICATE)
Jeff Thompson535751b2013-08-08 17:29:12 -0700116 cout << "Certificate: " << toHex(data.getSignedInfo().getKeyLocator().getKeyOrCertificate()) << endl;
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700117 else if (data.getSignedInfo().getKeyLocator().getType() == ndn_KeyLocatorType_KEYNAME)
118 // TODO: Implement keyName.
119 cout << "keyName" << endl;
120 else
121 cout << "<unrecognized ndn_KeyLocatorType " << data.getSignedInfo().getKeyLocator().getType() << ">" << endl;
122 }
123 else
124 cout << "<none>" << endl;
125}
126
Jeff Thompson5cae5e52013-07-10 19:41:20 -0700127int main(int argc, char** argv)
128{
129 try {
Jeff Thompson56ec9e22013-08-02 11:34:07 -0700130 Data data;
Jeff Thompson67e9e0a2013-08-02 19:16:19 -0700131 data.wireDecode(Data1, sizeof(Data1));
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700132 cout << "Decoded Data:" << endl;
133 dumpData(data);
Jeff Thompson27e02cd2013-08-01 16:56:05 -0700134#if 0
Jeff Thompson56ec9e22013-08-02 11:34:07 -0700135 ptime timestamp = UNIX_EPOCH_TIME + milliseconds(data.getSignedInfo().getTimestampMilliseconds());
136 cout << "Data timestamp " << timestamp.date().year() << "/" << timestamp.date().month() << "/" << timestamp.date().day()
Jeff Thompson40d67ce2013-07-15 17:33:01 -0700137 << " " << timestamp.time_of_day().hours() << ":" << timestamp.time_of_day().minutes() << ":" << timestamp.time_of_day().seconds() << endl;
Jeff Thompson27e02cd2013-08-01 16:56:05 -0700138#endif
Jeff Thompson5cae5e52013-07-10 19:41:20 -0700139
Jeff Thompson67e9e0a2013-08-02 19:16:19 -0700140 ptr_lib::shared_ptr<vector<unsigned char> > encoding = data.wireEncode();
Jeff Thompson5cae5e52013-07-10 19:41:20 -0700141
Jeff Thompson56ec9e22013-08-02 11:34:07 -0700142 Data reDecodedData;
Jeff Thompson67e9e0a2013-08-02 19:16:19 -0700143 reDecodedData.wireDecode(*encoding);
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700144 cout << endl << "Re-decoded Data:" << endl;
145 dumpData(reDecodedData);
Jeff Thompsonb81192e2013-08-09 09:34:51 -0700146
147 Data freshData(Name("/ndn/abc"));
148 const char *freshContent = "SUCCESS!";
149 freshData.setContent((const unsigned char *)freshContent, strlen(freshContent));
150
151 KeyChain::defaultSign(freshData);
152 cout << endl << "Freshly signed data:" << endl;
153 dumpData(freshData);
Jeff Thompson5cae5e52013-07-10 19:41:20 -0700154 } catch (exception &e) {
155 cout << "exception: " << e.what() << endl;
156 }
157 return 0;
158}