blob: 2164eb48fbe7a1f355ba350a2c72f71239a7709f [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;
Jeff Thompson535751b2013-08-08 17:29:12 -070090 cout << "signature.signature: "
91 << (data.getSignature().getSignature().size() > 0 ? toHex(data.getSignature().getSignature()).c_str() : "<none>") << endl;
Jeff Thompson61c4ecf2013-08-08 15:56:46 -070092
93 cout << "signedInfo.publisherPublicKeyDigest: "
94 << (data.getSignedInfo().getPublisherPublicKeyDigest().getPublisherPublicKeyDigest().size() > 0 ?
95 toHex(data.getSignedInfo().getPublisherPublicKeyDigest().getPublisherPublicKeyDigest()).c_str() : "<none>") << endl;
96 // TODO: dump timestamp.
97 cout << "signedInfo.freshnessSeconds: ";
98 if (data.getSignedInfo().getFreshnessSeconds() >= 0)
99 cout << data.getSignedInfo().getFreshnessSeconds() << endl;
100 else
101 cout << "<none>" << endl;
102 cout << "signedInfo.finalBlockID: "
103 << (data.getSignedInfo().getFinalBlockID().size() > 0 ?
104 toHex(data.getSignedInfo().getFinalBlockID()).c_str() : "<none>") << endl;
105 cout << "signedInfo.keyLocator: ";
106 if (data.getSignedInfo().getKeyLocator().getType() >= 0) {
107 if (data.getSignedInfo().getKeyLocator().getType() == ndn_KeyLocatorType_KEY)
Jeff Thompson535751b2013-08-08 17:29:12 -0700108 cout << "Key: " << toHex(data.getSignedInfo().getKeyLocator().getKeyOrCertificate()) << endl;
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700109 else if (data.getSignedInfo().getKeyLocator().getType() == ndn_KeyLocatorType_CERTIFICATE)
Jeff Thompson535751b2013-08-08 17:29:12 -0700110 cout << "Certificate: " << toHex(data.getSignedInfo().getKeyLocator().getKeyOrCertificate()) << endl;
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700111 else if (data.getSignedInfo().getKeyLocator().getType() == ndn_KeyLocatorType_KEYNAME)
112 // TODO: Implement keyName.
113 cout << "keyName" << endl;
114 else
115 cout << "<unrecognized ndn_KeyLocatorType " << data.getSignedInfo().getKeyLocator().getType() << ">" << endl;
116 }
117 else
118 cout << "<none>" << endl;
119}
120
Jeff Thompson5cae5e52013-07-10 19:41:20 -0700121int main(int argc, char** argv)
122{
123 try {
Jeff Thompson56ec9e22013-08-02 11:34:07 -0700124 Data data;
Jeff Thompson67e9e0a2013-08-02 19:16:19 -0700125 data.wireDecode(Data1, sizeof(Data1));
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700126 cout << "Decoded Data:" << endl;
127 dumpData(data);
Jeff Thompson27e02cd2013-08-01 16:56:05 -0700128#if 0
Jeff Thompson56ec9e22013-08-02 11:34:07 -0700129 ptime timestamp = UNIX_EPOCH_TIME + milliseconds(data.getSignedInfo().getTimestampMilliseconds());
130 cout << "Data timestamp " << timestamp.date().year() << "/" << timestamp.date().month() << "/" << timestamp.date().day()
Jeff Thompson40d67ce2013-07-15 17:33:01 -0700131 << " " << timestamp.time_of_day().hours() << ":" << timestamp.time_of_day().minutes() << ":" << timestamp.time_of_day().seconds() << endl;
Jeff Thompson27e02cd2013-08-01 16:56:05 -0700132#endif
Jeff Thompson5cae5e52013-07-10 19:41:20 -0700133
Jeff Thompson67e9e0a2013-08-02 19:16:19 -0700134 ptr_lib::shared_ptr<vector<unsigned char> > encoding = data.wireEncode();
Jeff Thompson5cae5e52013-07-10 19:41:20 -0700135
Jeff Thompson56ec9e22013-08-02 11:34:07 -0700136 Data reDecodedData;
Jeff Thompson67e9e0a2013-08-02 19:16:19 -0700137 reDecodedData.wireDecode(*encoding);
Jeff Thompson61c4ecf2013-08-08 15:56:46 -0700138 cout << endl << "Re-decoded Data:" << endl;
139 dumpData(reDecodedData);
Jeff Thompson5cae5e52013-07-10 19:41:20 -0700140 } catch (exception &e) {
141 cout << "exception: " << e.what() << endl;
142 }
143 return 0;
144}