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