blob: 665d097e4cbe86dca891006864a3813f42c309dc [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 Thompson40d67ce2013-07-15 17:33:01 -07009#include <boost/date_time/posix_time/posix_time_types.hpp>
10#include <boost/date_time/posix_time/time_serialize.hpp>
11#include <boost/date_time/gregorian/gregorian.hpp>
Jeff Thompson5cae5e52013-07-10 19:41:20 -070012#include <ndn-cpp/ContentObject.hpp>
13
14using namespace std;
15using namespace ndn;
Jeff Thompson40d67ce2013-07-15 17:33:01 -070016using namespace boost::posix_time;
17using namespace boost::gregorian;
Jeff Thompson5cae5e52013-07-10 19:41:20 -070018
19unsigned char ContentObject1[] = {
200x04, 0x82, // ContentObject
21 0x02, 0xaa, // Signature
22 0x03, 0xb2, // SignatureBits
23 0x08, 0x85, 0x20, 0xea, 0xb5, 0xb0, 0x63, 0xda, 0x94, 0xe9, 0x68, 0x7a,
24 0x8e, 0x65, 0x60, 0xe0, 0xc6, 0x43, 0x96, 0xd9, 0x69, 0xb4, 0x40, 0x72, 0x52, 0x00, 0x2c, 0x8e, 0x2a, 0xf5,
25 0x47, 0x12, 0x59, 0x93, 0xda, 0xed, 0x82, 0xd0, 0xf8, 0xe6, 0x65, 0x09, 0x87, 0x84, 0x54, 0xc7, 0xce, 0x9a,
26 0x93, 0x0d, 0x47, 0xf1, 0xf9, 0x3b, 0x98, 0x78, 0x2c, 0x22, 0x21, 0xd9, 0x2b, 0xda, 0x03, 0x30, 0x84, 0xf3,
27 0xc5, 0x52, 0x64, 0x2b, 0x1d, 0xde, 0x50, 0xe0, 0xee, 0xca, 0xa2, 0x73, 0x7a, 0x93, 0x30, 0xa8, 0x47, 0x7f,
28 0x6f, 0x41, 0xb0, 0xc8, 0x6e, 0x89, 0x1c, 0xcc, 0xf9, 0x01, 0x44, 0xc3, 0x08, 0xcf, 0x77, 0x47, 0xfc, 0xed,
29 0x48, 0xf0, 0x4c, 0xe9, 0xc2, 0x3b, 0x7d, 0xef, 0x6e, 0xa4, 0x80, 0x40, 0x9e, 0x43, 0xb6, 0x77, 0x7a, 0x1d,
30 0x51, 0xed, 0x98, 0x33, 0x93, 0xdd, 0x88, 0x01, 0x0e, 0xd3,
31 0x00,
32 0x00,
33 0xf2, 0xfa, 0x9d, 0x6e, 0x64, 0x6e, 0x00, 0xfa, 0x9d, 0x61, 0x62, 0x63, 0x00, 0x00, // Name
34 0x01, 0xa2, // SignedInfo
35 0x03, 0xe2, // PublisherPublicKeyDigest
36 0x02, 0x85, 0xb5, 0x50, 0x6b, 0x1a,
37 0xba, 0x3d, 0xa7, 0x76, 0x1b, 0x0f, 0x8d, 0x61, 0xa4, 0xaa, 0x7e, 0x3b, 0x6d, 0x15, 0xb4, 0x26, 0xfe, 0xb5,
38 0xbd, 0xa8, 0x23, 0x89, 0xac, 0xa7, 0x65, 0xa3, 0xb8, 0x1c,
39 0x00,
Jeff Thompson5cae5e52013-07-10 19:41:20 -070040 0x02, 0xba, // Timestamp
41 0xb5, 0x05, 0x1d, 0xde, 0xe9, 0x5b, 0xdb,
42 0x00,
Jeff Thompson5cae5e52013-07-10 19:41:20 -070043 0x01, 0xe2, // KeyLocator
44 0x01, 0xda, // Key
45 0x0a, 0x95, 0x30, 0x81, 0x9f, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86,
46 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, 0x8d, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81,
47 0x81, 0x00, 0xe1, 0x7d, 0x30, 0xa7, 0xd8, 0x28, 0xab, 0x1b, 0x84, 0x0b, 0x17, 0x54, 0x2d, 0xca, 0xf6, 0x20,
48 0x7a, 0xfd, 0x22, 0x1e, 0x08, 0x6b, 0x2a, 0x60, 0xd1, 0x6c, 0xb7, 0xf5, 0x44, 0x48, 0xba, 0x9f, 0x3f, 0x08,
49 0xbc, 0xd0, 0x99, 0xdb, 0x21, 0xdd, 0x16, 0x2a, 0x77, 0x9e, 0x61, 0xaa, 0x89, 0xee, 0xe5, 0x54, 0xd3, 0xa4,
50 0x7d, 0xe2, 0x30, 0xbc, 0x7a, 0xc5, 0x90, 0xd5, 0x24, 0x06, 0x7c, 0x38, 0x98, 0xbb, 0xa6, 0xf5, 0xdc, 0x43,
51 0x60, 0xb8, 0x45, 0xed, 0xa4, 0x8c, 0xbd, 0x9c, 0xf1, 0x26, 0xa7, 0x23, 0x44, 0x5f, 0x0e, 0x19, 0x52, 0xd7,
52 0x32, 0x5a, 0x75, 0xfa, 0xf5, 0x56, 0x14, 0x4f, 0x9a, 0x98, 0xaf, 0x71, 0x86, 0xb0, 0x27, 0x86, 0x85, 0xb8,
53 0xe2, 0xc0, 0x8b, 0xea, 0x87, 0x17, 0x1b, 0x4d, 0xee, 0x58, 0x5c, 0x18, 0x28, 0x29, 0x5b, 0x53, 0x95, 0xeb,
54 0x4a, 0x17, 0x77, 0x9f, 0x02, 0x03, 0x01, 0x00, 0x01,
55 0x00,
56 0x00,
57 0x00,
58 0x01, 0x9a, // Content
59 0xc5, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x21,
60 0x00,
610x00,
621
63};
64
Jeff Thompson40d67ce2013-07-15 17:33:01 -070065const ptime UNIX_EPOCH_TIME = ptime (date (1970, Jan, 1));
66
Jeff Thompson5cae5e52013-07-10 19:41:20 -070067int main(int argc, char** argv)
68{
69 try {
70 ContentObject contentObject;
71 contentObject.decode(ContentObject1, sizeof(ContentObject1));
Jeff Thompson210b92f2013-07-11 15:16:03 -070072 cout << "ContentObject name " << contentObject.getName().to_uri() << endl;
Jeff Thompson40d67ce2013-07-15 17:33:01 -070073 ptime timestamp = UNIX_EPOCH_TIME + milliseconds(contentObject.getSignedInfo().getTimestampMilliseconds());
74 cout << "ContentObject timestamp " << timestamp.date().year() << "/" << timestamp.date().month() << "/" << timestamp.date().day()
75 << " " << timestamp.time_of_day().hours() << ":" << timestamp.time_of_day().minutes() << ":" << timestamp.time_of_day().seconds() << endl;
Jeff Thompson5cae5e52013-07-10 19:41:20 -070076
Jeff Thompsonb0979fd2013-07-30 15:48:21 -070077 ptr_lib::shared_ptr<vector<unsigned char> > encoding = contentObject.encode();
78 cout << "ContentObject encoding length " << encoding->size() << " vs. sizeof(ContentObject1) " << sizeof(ContentObject1) << endl;
Jeff Thompson5cae5e52013-07-10 19:41:20 -070079
80 ContentObject reDecodedContentObject;
Jeff Thompsonb0979fd2013-07-30 15:48:21 -070081 reDecodedContentObject.decode(*encoding);
Jeff Thompson210b92f2013-07-11 15:16:03 -070082 cout << "Re-decoded ContentObject name " << reDecodedContentObject.getName().to_uri() << endl;
Jeff Thompson40d67ce2013-07-15 17:33:01 -070083 timestamp = UNIX_EPOCH_TIME + milliseconds(reDecodedContentObject.getSignedInfo().getTimestampMilliseconds());
84 cout << "Re-decoded ContentObject timestamp " << timestamp.date().year() << "/" << timestamp.date().month() << "/" << timestamp.date().day() << endl;
Jeff Thompson5cae5e52013-07-10 19:41:20 -070085 } catch (exception &e) {
86 cout << "exception: " << e.what() << endl;
87 }
88 return 0;
89}