blob: e6c7b4b32b16e5055eae59f2ad4eb29d4a147dd1 [file] [log] [blame]
Alexander Afanasyevc169a812014-05-20 20:37:29 -04001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Davide Pesaventoc2e12b42017-07-09 20:35:09 -04002/*
Eric Newberrya3c8bd12020-05-15 17:27:07 -07003 * Copyright (c) 2013-2020 Regents of the University of California.
Alexander Afanasyevdfa52c42014-04-24 21:10:11 -07004 *
5 * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
Alexander Afanasyevdfa52c42014-04-24 21:10:11 -07006 *
Alexander Afanasyevc169a812014-05-20 20:37:29 -04007 * ndn-cxx library is free software: you can redistribute it and/or modify it under the
8 * terms of the GNU Lesser General Public License as published by the Free Software
9 * Foundation, either version 3 of the License, or (at your option) any later version.
10 *
11 * ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
12 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
13 * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
14 *
15 * You should have received copies of the GNU General Public License and GNU Lesser
16 * General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
17 * <http://www.gnu.org/licenses/>.
18 *
19 * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -080020 */
21
Davide Pesavento7e780642018-11-24 15:51:34 -050022#include "ndn-cxx/data.hpp"
23#include "ndn-cxx/encoding/buffer-stream.hpp"
Davide Pesavento7e780642018-11-24 15:51:34 -050024#include "ndn-cxx/security/transform/private-key.hpp"
25#include "ndn-cxx/security/transform/public-key.hpp"
26#include "ndn-cxx/security/transform/signer-filter.hpp"
27#include "ndn-cxx/security/transform/step-source.hpp"
28#include "ndn-cxx/security/transform/stream-sink.hpp"
29#include "ndn-cxx/security/verification-helpers.hpp"
30#include "ndn-cxx/util/sha256.hpp"
Davide Pesavento14c56cd2020-05-21 01:44:03 -040031#include "ndn-cxx/util/string-helper.hpp"
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -080032
Davide Pesavento7e780642018-11-24 15:51:34 -050033#include "tests/boost-test.hpp"
34#include "tests/identity-management-fixture.hpp"
Davide Pesavento14c56cd2020-05-21 01:44:03 -040035
Junxiao Shi81206d52017-07-23 12:43:22 +000036#include <boost/lexical_cast.hpp>
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -070037
Alexander Afanasyev0abb2da2014-01-30 18:07:57 -080038namespace ndn {
Spyridon Mastorakis429634f2015-02-19 17:35:33 -080039namespace tests {
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -080040
41BOOST_AUTO_TEST_SUITE(TestData)
42
Junxiao Shi81206d52017-07-23 12:43:22 +000043const uint8_t CONTENT1[] = {0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x21};
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -080044
Junxiao Shi81206d52017-07-23 12:43:22 +000045const uint8_t DATA1[] = {
Davide Pesavento14c56cd2020-05-21 01:44:03 -040046 0x06, 0xc5, // Data
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -070047 0x07, 0x14, // Name
Davide Pesavento14c56cd2020-05-21 01:44:03 -040048 0x08, 0x05,
49 0x6c, 0x6f, 0x63, 0x61, 0x6c,
50 0x08, 0x03,
51 0x6e, 0x64, 0x6e,
52 0x08, 0x06,
53 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
Alexander Afanasyev4b456282014-02-13 00:34:34 -080054 0x14, 0x04, // MetaInfo
Davide Pesavento14c56cd2020-05-21 01:44:03 -040055 0x19, 0x02, // FreshnessPeriod
56 0x27, 0x10,
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -070057 0x15, 0x08, // Content
Davide Pesavento14c56cd2020-05-21 01:44:03 -040058 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x21,
Alexander Afanasyev4b456282014-02-13 00:34:34 -080059 0x16, 0x1b, // SignatureInfo
Davide Pesavento14c56cd2020-05-21 01:44:03 -040060 0x1b, 0x01, // SignatureType
61 0x01,
62 0x1c, 0x16, // KeyLocator
63 0x07, 0x14, // Name
64 0x08, 0x04,
65 0x74, 0x65, 0x73, 0x74,
66 0x08, 0x03,
67 0x6b, 0x65, 0x79,
68 0x08, 0x07,
69 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72,
Alexander Afanasyev4b456282014-02-13 00:34:34 -080070 0x17, 0x80, // SignatureValue
Davide Pesavento14c56cd2020-05-21 01:44:03 -040071 0x2f, 0xd6, 0xf1, 0x6e, 0x80, 0x6f, 0x10, 0xbe, 0xb1, 0x6f, 0x3e, 0x31,
72 0xec, 0xe3, 0xb9, 0xea, 0x83, 0x30, 0x40, 0x03, 0xfc, 0xa0, 0x13, 0xd9,
73 0xb3, 0xc6, 0x25, 0x16, 0x2d, 0xa6, 0x58, 0x41, 0x69, 0x62, 0x56, 0xd8,
74 0xb3, 0x6a, 0x38, 0x76, 0x56, 0xea, 0x61, 0xb2, 0x32, 0x70, 0x1c, 0xb6,
75 0x4d, 0x10, 0x1d, 0xdc, 0x92, 0x8e, 0x52, 0xa5, 0x8a, 0x1d, 0xd9, 0x96,
76 0x5e, 0xc0, 0x62, 0x0b, 0xcf, 0x3a, 0x9d, 0x7f, 0xca, 0xbe, 0xa1, 0x41,
77 0x71, 0x85, 0x7a, 0x8b, 0x5d, 0xa9, 0x64, 0xd6, 0x66, 0xb4, 0xe9, 0x8d,
78 0x0c, 0x28, 0x43, 0xee, 0xa6, 0x64, 0xe8, 0x55, 0xf6, 0x1c, 0x19, 0x0b,
79 0xef, 0x99, 0x25, 0x1e, 0xdc, 0x78, 0xb3, 0xa7, 0xaa, 0x0d, 0x14, 0x58,
80 0x30, 0xe5, 0x37, 0x6a, 0x6d, 0xdb, 0x56, 0xac, 0xa3, 0xfc, 0x90, 0x7a,
81 0xb8, 0x66, 0x9c, 0x0e, 0xf6, 0xb7, 0x64, 0xd1,
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -080082};
83
Junxiao Shi81206d52017-07-23 12:43:22 +000084BOOST_AUTO_TEST_CASE(DefaultConstructor)
85{
86 Data d;
87 BOOST_CHECK_EQUAL(d.hasWire(), false);
88 BOOST_CHECK_EQUAL(d.getName(), "/");
89 BOOST_CHECK_EQUAL(d.getContentType(), tlv::ContentType_Blob);
90 BOOST_CHECK_EQUAL(d.getFreshnessPeriod(), DEFAULT_FRESHNESS_PERIOD);
Junxiao Shi7d9039b2018-04-14 15:56:28 +000091 BOOST_CHECK(!d.getFinalBlock());
Junxiao Shi81206d52017-07-23 12:43:22 +000092 BOOST_CHECK_EQUAL(d.getContent().type(), tlv::Content);
93 BOOST_CHECK_EQUAL(d.getContent().value_size(), 0);
Eric Newberrya3c8bd12020-05-15 17:27:07 -070094 BOOST_CHECK(!d.getSignatureInfo());
Davide Pesavento14c56cd2020-05-21 01:44:03 -040095 BOOST_CHECK_EQUAL(d.getSignatureType(), -1);
96 BOOST_CHECK(!d.getKeyLocator());
97 BOOST_CHECK_EQUAL(d.getSignatureValue().isValid(), false);
Junxiao Shi81206d52017-07-23 12:43:22 +000098}
99
100class DataSigningKeyFixture
101{
102protected:
103 DataSigningKeyFixture()
104 {
105 m_privKey.loadPkcs1(PRIVATE_KEY_DER, sizeof(PRIVATE_KEY_DER));
106 auto buf = m_privKey.derivePublicKey();
107 m_pubKey.loadPkcs8(buf->data(), buf->size());
108 }
109
110protected:
111 security::transform::PrivateKey m_privKey;
112 security::transform::PublicKey m_pubKey;
113
114private:
115 static const uint8_t PRIVATE_KEY_DER[632];
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -0800116};
117
Junxiao Shi81206d52017-07-23 12:43:22 +0000118const uint8_t DataSigningKeyFixture::PRIVATE_KEY_DER[] = {
119 0x30, 0x82, 0x02, 0x74, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7,
120 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x02, 0x5e, 0x30, 0x82, 0x02, 0x5a, 0x02, 0x01,
121 0x00, 0x02, 0x81, 0x81, 0x00, 0x9e, 0x06, 0x3e, 0x47, 0x85, 0xb2, 0x34, 0x37, 0xaa, 0x85, 0x47,
122 0xac, 0x03, 0x24, 0x83, 0xb5, 0x9c, 0xa8, 0x05, 0x3a, 0x24, 0x1e, 0xeb, 0x89, 0x01, 0xbb, 0xe9,
123 0x9b, 0xb2, 0xc3, 0x22, 0xac, 0x68, 0xe3, 0xf0, 0x6c, 0x02, 0xce, 0x68, 0xa6, 0xc4, 0xd0, 0xa7,
124 0x06, 0x90, 0x9c, 0xaa, 0x1b, 0x08, 0x1d, 0x8b, 0x43, 0x9a, 0x33, 0x67, 0x44, 0x6d, 0x21, 0xa3,
125 0x1b, 0x88, 0x9a, 0x97, 0x5e, 0x59, 0xc4, 0x15, 0x0b, 0xd9, 0x2c, 0xbd, 0x51, 0x07, 0x61, 0x82,
126 0xad, 0xc1, 0xb8, 0xd7, 0xbf, 0x9b, 0xcf, 0x7d, 0x24, 0xc2, 0x63, 0xf3, 0x97, 0x17, 0xeb, 0xfe,
127 0x62, 0x25, 0xba, 0x5b, 0x4d, 0x8a, 0xc2, 0x7a, 0xbd, 0x43, 0x8a, 0x8f, 0xb8, 0xf2, 0xf1, 0xc5,
128 0x6a, 0x30, 0xd3, 0x50, 0x8c, 0xc8, 0x9a, 0xdf, 0xef, 0xed, 0x35, 0xe7, 0x7a, 0x62, 0xea, 0x76,
129 0x7c, 0xbb, 0x08, 0x26, 0xc7, 0x02, 0x01, 0x11, 0x02, 0x81, 0x80, 0x04, 0xa5, 0xd4, 0xa7, 0xc0,
130 0x2a, 0xe3, 0x6b, 0x0c, 0x8b, 0x73, 0x0c, 0x96, 0xae, 0x40, 0x1b, 0xee, 0x04, 0xf1, 0x18, 0x4c,
131 0x5b, 0x43, 0x29, 0xad, 0x3a, 0x3b, 0x93, 0xa3, 0x60, 0x17, 0x9b, 0xa8, 0xbb, 0x68, 0xf4, 0x1e,
132 0x33, 0x3f, 0x50, 0x32, 0xf7, 0x13, 0xf8, 0xa9, 0xe6, 0x7d, 0x79, 0x44, 0x00, 0xde, 0x72, 0xed,
133 0xf2, 0x73, 0xfa, 0x7b, 0xae, 0x2a, 0x71, 0xc0, 0x40, 0xc8, 0x37, 0x6f, 0x38, 0xb2, 0x69, 0x1f,
134 0xa8, 0x83, 0x7b, 0x42, 0x00, 0x73, 0x46, 0xe6, 0x4c, 0x91, 0x7f, 0x13, 0x06, 0x69, 0x06, 0xd8,
135 0x3f, 0x22, 0x15, 0x75, 0xf6, 0xde, 0xcd, 0xb0, 0xbc, 0x66, 0x61, 0x91, 0x08, 0x9b, 0x2b, 0xb2,
136 0x00, 0xa9, 0x67, 0x05, 0x39, 0x40, 0xb9, 0x37, 0x85, 0x88, 0x4f, 0x76, 0x79, 0x63, 0xc0, 0x88,
137 0x3c, 0x86, 0xa8, 0x12, 0x94, 0x5f, 0xe4, 0x36, 0x3d, 0xea, 0xb9, 0x02, 0x41, 0x00, 0xb6, 0x2e,
138 0xbb, 0xcd, 0x2f, 0x3a, 0x99, 0xe0, 0xa1, 0xa5, 0x44, 0x77, 0xea, 0x0b, 0xbe, 0x16, 0x95, 0x0e,
139 0x64, 0xa7, 0x68, 0xd7, 0x4b, 0x15, 0x15, 0x23, 0xe2, 0x1e, 0x4e, 0x00, 0x2c, 0x22, 0x97, 0xae,
140 0xb0, 0x74, 0xa6, 0x99, 0xd0, 0x5d, 0xb7, 0x1b, 0x10, 0x34, 0x13, 0xd2, 0x5f, 0x6e, 0x56, 0xad,
141 0x85, 0x4a, 0xdb, 0xf0, 0x78, 0xbd, 0xf4, 0x8c, 0xb7, 0x9a, 0x3e, 0x99, 0xef, 0xb9, 0x02, 0x41,
142 0x00, 0xde, 0x0d, 0xa7, 0x48, 0x75, 0x90, 0xad, 0x11, 0xa1, 0xac, 0xee, 0xcb, 0x41, 0x81, 0xc6,
143 0xc8, 0x7f, 0xe7, 0x25, 0x94, 0xa1, 0x2a, 0x21, 0xa8, 0x57, 0xfe, 0x84, 0xf2, 0x5e, 0xb4, 0x96,
144 0x35, 0xaf, 0xef, 0x2e, 0x7a, 0xf8, 0xda, 0x3f, 0xac, 0x8a, 0x3c, 0x1c, 0x9c, 0xbd, 0x44, 0xd6,
145 0x90, 0xb5, 0xce, 0x1b, 0x12, 0xf9, 0x3b, 0x8c, 0x69, 0xf6, 0xa9, 0x02, 0x93, 0x48, 0x35, 0x0a,
146 0x7f, 0x02, 0x40, 0x6b, 0x2a, 0x8c, 0x96, 0xd0, 0x7c, 0xd2, 0xfc, 0x9b, 0x52, 0x28, 0x46, 0x89,
147 0xac, 0x8d, 0xef, 0x2a, 0x80, 0xef, 0xea, 0x01, 0x6f, 0x95, 0x93, 0xee, 0x51, 0x57, 0xd5, 0x97,
148 0x4b, 0x65, 0x41, 0x86, 0x66, 0xc2, 0x26, 0x80, 0x1e, 0x3e, 0x55, 0x3e, 0x88, 0x63, 0xe2, 0x66,
149 0x03, 0x47, 0x31, 0xd8, 0xa2, 0x4e, 0x68, 0x45, 0x24, 0x0a, 0xca, 0x17, 0x61, 0xd5, 0x69, 0xca,
150 0x78, 0xab, 0x21, 0x02, 0x41, 0x00, 0x8f, 0xae, 0x7b, 0x4d, 0x00, 0xc7, 0x06, 0x92, 0xf0, 0x24,
151 0x9a, 0x83, 0x84, 0xbd, 0x62, 0x81, 0xbc, 0x2c, 0x27, 0x60, 0x2c, 0x0c, 0x33, 0xe5, 0x66, 0x1d,
152 0x28, 0xd9, 0x10, 0x1a, 0x7f, 0x4f, 0xea, 0x4f, 0x78, 0x6d, 0xb0, 0x14, 0xbf, 0xc9, 0xff, 0x17,
153 0xd6, 0x47, 0x4d, 0x4a, 0xa8, 0xf4, 0x39, 0x67, 0x3e, 0xb1, 0xec, 0x8f, 0xf1, 0x71, 0xbd, 0xb8,
154 0xa7, 0x50, 0x3d, 0xc7, 0xf7, 0xbb, 0x02, 0x40, 0x0d, 0x85, 0x32, 0x73, 0x9f, 0x0a, 0x33, 0x2f,
155 0x4b, 0xa2, 0xbd, 0xd1, 0xb1, 0x42, 0xf0, 0x72, 0xa8, 0x7a, 0xc8, 0x15, 0x37, 0x1b, 0xde, 0x76,
156 0x70, 0xce, 0xfd, 0x69, 0x20, 0x00, 0x4d, 0xc9, 0x4f, 0x35, 0x6f, 0xd1, 0x35, 0xa1, 0x04, 0x95,
157 0x30, 0xe8, 0x3b, 0xd5, 0x03, 0x5a, 0x50, 0x21, 0x6d, 0xa0, 0x84, 0x39, 0xe9, 0x2e, 0x1e, 0xfc,
158 0xe4, 0x82, 0x43, 0x20, 0x46, 0x7d, 0x0a, 0xb6
159};
160
Davide Pesavento905d40f2020-06-09 21:33:25 -0400161BOOST_AUTO_TEST_SUITE(Encode)
162
163BOOST_AUTO_TEST_CASE(NotSigned)
Junxiao Shi81206d52017-07-23 12:43:22 +0000164{
Davide Pesavento905d40f2020-06-09 21:33:25 -0400165 Data d;
166 BOOST_CHECK_EXCEPTION(d.wireEncode(), tlv::Error, [] (const auto& e) {
167 return e.what() == "Requested wire format, but Data has not been signed"s;
168 });
169}
170
171BOOST_AUTO_TEST_CASE(Minimal)
172{
173 Data d;
174 d.setSignatureInfo(SignatureInfo(tlv::DigestSha256));
175 d.setSignatureValue(std::make_shared<Buffer>());
176 BOOST_CHECK_EQUAL(d.wireEncode(), "060D 0700 1400 1500 16031B0100 1700"_block);
177}
178
179BOOST_FIXTURE_TEST_CASE(Full, DataSigningKeyFixture)
180{
181 Data d("/local/ndn/prefix");
Junxiao Shi81206d52017-07-23 12:43:22 +0000182 d.setContentType(tlv::ContentType_Blob);
Davide Pesavento0f830802018-01-16 23:58:58 -0500183 d.setFreshnessPeriod(10_s);
Junxiao Shi81206d52017-07-23 12:43:22 +0000184 d.setContent(CONTENT1, sizeof(CONTENT1));
185
Davide Pesavento14c56cd2020-05-21 01:44:03 -0400186 SignatureInfo signatureInfo;
187 signatureInfo.setSignatureType(tlv::SignatureSha256WithRsa);
188 signatureInfo.setKeyLocator(Name("/test/key/locator"));
189 d.setSignatureInfo(signatureInfo);
Junxiao Shi81206d52017-07-23 12:43:22 +0000190
191 OBufferStream sig;
192 {
193 namespace tr = security::transform;
194
195 tr::StepSource input;
196 input >> tr::signerFilter(DigestAlgorithm::SHA256, m_privKey) >> tr::streamSink(sig);
197
198 input.write(d.getName(). wireEncode().wire(), d.getName(). wireEncode().size());
199 input.write(d.getMetaInfo().wireEncode().wire(), d.getMetaInfo().wireEncode().size());
200 input.write(d.getContent(). wire(), d.getContent(). size());
Davide Pesavento14c56cd2020-05-21 01:44:03 -0400201 input.write(signatureInfo. wireEncode().wire(), signatureInfo. wireEncode().size());
Junxiao Shi81206d52017-07-23 12:43:22 +0000202 input.end();
203 }
Davide Pesavento14c56cd2020-05-21 01:44:03 -0400204 d.setSignatureValue(sig.buf());
Junxiao Shi81206d52017-07-23 12:43:22 +0000205
206 Block dataBlock(d.wireEncode());
207 BOOST_CHECK_EQUAL_COLLECTIONS(DATA1, DATA1 + sizeof(DATA1),
208 dataBlock.begin(), dataBlock.end());
209}
210
Davide Pesavento905d40f2020-06-09 21:33:25 -0400211BOOST_AUTO_TEST_SUITE_END() // Encode
Junxiao Shi81206d52017-07-23 12:43:22 +0000212
Davide Pesavento905d40f2020-06-09 21:33:25 -0400213class DecodeFixture
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000214{
215protected:
Davide Pesavento905d40f2020-06-09 21:33:25 -0400216 DecodeFixture()
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000217 {
218 // initialize all elements to non-empty, to verify wireDecode clears them
219 d.setName("/A");
220 d.setContentType(tlv::ContentType_Key);
Davide Pesavento905d40f2020-06-09 21:33:25 -0400221 d.setFreshnessPeriod(123_s);
222 d.setFinalBlock(name::Component::fromNumber(42));
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000223 d.setContent("1504C0C1C2C3"_block);
Eric Newberrya3c8bd12020-05-15 17:27:07 -0700224 d.setSignatureInfo(SignatureInfo("160A 1B0101 1C050703080142"_block));
Davide Pesavento14c56cd2020-05-21 01:44:03 -0400225 d.setSignatureValue(fromHex("B48F1707A3BCA3CFC5F32DE51D9B46C32D7D262A21544EBDA88C3B415D637503"
226 "FC9BEF20F88202A56AF9831E0D30205FD4154B08502BCDEE860267A5C3E03D8E"
227 "A6CB74BE391C01E0A57B991B4404FC11B7D777F1B700A4B65F201118CF1840A8"
228 "30A2A7C17DB4B7A8777E58515121AF9E2498627F8475414CDFD9801B8152AD5B"));
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000229 }
230
231protected:
232 Data d;
233};
234
Davide Pesavento905d40f2020-06-09 21:33:25 -0400235BOOST_FIXTURE_TEST_SUITE(Decode, DecodeFixture)
236
237BOOST_AUTO_TEST_CASE(NotData)
238{
239 BOOST_CHECK_EXCEPTION(d.wireDecode("4202CAFE"_block), tlv::Error, [] (const auto& e) {
240 return e.what() == "Expecting Data element, but TLV has type 66"s;
241 });
242}
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000243
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000244BOOST_AUTO_TEST_CASE(Minimal)
245{
Davide Pesavento905d40f2020-06-09 21:33:25 -0400246 d.wireDecode("062C 0703(080144) 1603(1B0100) "
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000247 "1720612A79399E60304A9F701C1ECAC7956BF2F1B046E6C6F0D6C29B3FE3A29BAD76"_block);
248 BOOST_CHECK_EQUAL(d.getName(), "/D");
Davide Pesaventoef654dd2019-07-18 20:02:44 -0400249 BOOST_CHECK_EQUAL(d.getContentType(), tlv::ContentType_Blob);
250 BOOST_CHECK_EQUAL(d.getFreshnessPeriod(), 0_ms);
251 BOOST_CHECK_EQUAL(d.getFinalBlock().has_value(), false);
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000252 BOOST_CHECK_EQUAL(d.getContent().value_size(), 0);
Davide Pesavento14c56cd2020-05-21 01:44:03 -0400253 BOOST_CHECK_EQUAL(d.getSignatureType(), tlv::DigestSha256);
254 BOOST_CHECK_EQUAL(d.getKeyLocator().has_value(), false);
Eric Newberrya3c8bd12020-05-15 17:27:07 -0700255 BOOST_CHECK_EQUAL(d.getSignatureValue().value_size(), 32);
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000256
257 // encode without modification: retain original wire encoding
Davide Pesavento905d40f2020-06-09 21:33:25 -0400258 BOOST_CHECK_EQUAL(d.hasWire(), true);
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000259 BOOST_CHECK_EQUAL(d.wireEncode().value_size(), 44);
260
Davide Pesavento905d40f2020-06-09 21:33:25 -0400261 // modify then re-encode
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000262 d.setName("/E");
Davide Pesavento905d40f2020-06-09 21:33:25 -0400263 BOOST_CHECK_EQUAL(d.hasWire(), false);
Junxiao Shi72c0c642018-04-20 15:41:09 +0000264 BOOST_CHECK_EQUAL(d.wireEncode(),
Davide Pesavento905d40f2020-06-09 21:33:25 -0400265 "0630 0703080145 1400 1500 16031B0100 "
266 "1720612A79399E60304A9F701C1ECAC7956BF2F1B046E6C6F0D6C29B3FE3A29BAD76"_block);
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000267}
268
Eric Newberrya3c8bd12020-05-15 17:27:07 -0700269BOOST_AUTO_TEST_CASE(MinimalEmptyName)
270{
Davide Pesavento905d40f2020-06-09 21:33:25 -0400271 d.wireDecode("0609 0700 1603(1B0100) 1700"_block);
Eric Newberrya3c8bd12020-05-15 17:27:07 -0700272 BOOST_CHECK_EQUAL(d.getName(), "/"); // empty Name is allowed in Data
273 BOOST_CHECK_EQUAL(d.getContentType(), tlv::ContentType_Blob);
274 BOOST_CHECK_EQUAL(d.getFreshnessPeriod(), 0_ms);
275 BOOST_CHECK_EQUAL(d.getFinalBlock().has_value(), false);
276 BOOST_CHECK_EQUAL(d.getContent().value_size(), 0);
Davide Pesavento14c56cd2020-05-21 01:44:03 -0400277 BOOST_CHECK_EQUAL(d.getSignatureType(), tlv::DigestSha256);
278 BOOST_CHECK_EQUAL(d.getKeyLocator().has_value(), false);
Eric Newberrya3c8bd12020-05-15 17:27:07 -0700279 BOOST_CHECK_EQUAL(d.getSignatureValue().value_size(), 0);
280}
281
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000282BOOST_AUTO_TEST_CASE(Full)
283{
Davide Pesavento905d40f2020-06-09 21:33:25 -0400284 d.wireDecode(Block(DATA1, sizeof(DATA1)));
285 BOOST_CHECK_EQUAL(d.getName(), "/local/ndn/prefix");
286 BOOST_CHECK_EQUAL(d.getContentType(), tlv::ContentType_Blob);
287 BOOST_CHECK_EQUAL(d.getFreshnessPeriod(), 10_s);
288 BOOST_CHECK_EQUAL(d.getFinalBlock().has_value(), false);
289 BOOST_CHECK_EQUAL(std::string(reinterpret_cast<const char*>(d.getContent().value()),
290 d.getContent().value_size()), "SUCCESS!");
291 BOOST_CHECK_EQUAL(d.getSignatureType(), tlv::SignatureSha256WithRsa);
292 BOOST_REQUIRE(d.getKeyLocator().has_value());
293 BOOST_CHECK_EQUAL(d.getKeyLocator()->getName(), "/test/key/locator");
294 BOOST_CHECK_EQUAL(d.getSignatureValue().value_size(), 128);
295}
296
297BOOST_AUTO_TEST_CASE(UnrecognizedNonCriticalElements)
298{
299 d.wireDecode("063A 0703(080144) FC00 1400 FC00 1500 FC00 1603(1B0100) FC00 "
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000300 "1720612A79399E60304A9F701C1ECAC7956BF2F1B046E6C6F0D6C29B3FE3A29BAD76 FC00"_block);
301 BOOST_CHECK_EQUAL(d.getName(), "/D");
Davide Pesaventoef654dd2019-07-18 20:02:44 -0400302 BOOST_CHECK_EQUAL(d.getContentType(), tlv::ContentType_Blob);
303 BOOST_CHECK_EQUAL(d.getFreshnessPeriod(), 0_ms);
304 BOOST_CHECK_EQUAL(d.getFinalBlock().has_value(), false);
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000305 BOOST_CHECK_EQUAL(d.getContent().value_size(), 0);
Davide Pesavento14c56cd2020-05-21 01:44:03 -0400306 BOOST_CHECK_EQUAL(d.getSignatureType(), tlv::DigestSha256);
307 BOOST_CHECK_EQUAL(d.getKeyLocator().has_value(), false);
Eric Newberrya3c8bd12020-05-15 17:27:07 -0700308 BOOST_CHECK_EQUAL(d.getSignatureValue().value_size(), 32);
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000309
310 // encode without modification: retain original wire encoding
Davide Pesavento905d40f2020-06-09 21:33:25 -0400311 BOOST_CHECK_EQUAL(d.hasWire(), true);
Junxiao Shi8b753a22018-10-24 01:51:40 +0000312 BOOST_CHECK_EQUAL(d.wireEncode().value_size(), 58);
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000313
Davide Pesavento905d40f2020-06-09 21:33:25 -0400314 // modify then re-encode
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000315 d.setName("/E");
Davide Pesavento905d40f2020-06-09 21:33:25 -0400316 BOOST_CHECK_EQUAL(d.hasWire(), false);
Junxiao Shi72c0c642018-04-20 15:41:09 +0000317 BOOST_CHECK_EQUAL(d.wireEncode(),
Davide Pesavento905d40f2020-06-09 21:33:25 -0400318 "0630 0703080145 1400 1500 16031B0100 "
319 "1720612A79399E60304A9F701C1ECAC7956BF2F1B046E6C6F0D6C29B3FE3A29BAD76"_block);
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000320}
321
322BOOST_AUTO_TEST_CASE(CriticalElementOutOfOrder)
323{
Davide Pesavento905d40f2020-06-09 21:33:25 -0400324 BOOST_CHECK_EXCEPTION(d.wireDecode(
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000325 "0630 1400 0703080145 1500 16031B0100 "
326 "1720612A79399E60304A9F701C1ECAC7956BF2F1B046E6C6F0D6C29B3FE3A29BAD76"_block),
Davide Pesavento905d40f2020-06-09 21:33:25 -0400327 tlv::Error,
328 [] (const auto& e) { return e.what() == "Name element is missing or out of order"s; });
329 BOOST_CHECK_EXCEPTION(d.wireDecode(
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000330 "0630 0703080145 1500 1400 16031B0100 "
331 "1720612A79399E60304A9F701C1ECAC7956BF2F1B046E6C6F0D6C29B3FE3A29BAD76"_block),
Davide Pesavento905d40f2020-06-09 21:33:25 -0400332 tlv::Error,
333 [] (const auto& e) { return e.what() == "MetaInfo element is out of order"s; });
334 BOOST_CHECK_EXCEPTION(d.wireDecode(
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000335 "0630 0703080145 1400 16031B0100 1500 "
336 "1720612A79399E60304A9F701C1ECAC7956BF2F1B046E6C6F0D6C29B3FE3A29BAD76"_block),
Davide Pesavento905d40f2020-06-09 21:33:25 -0400337 tlv::Error,
338 [] (const auto& e) { return e.what() == "Content element is out of order"s; });
339 BOOST_CHECK_EXCEPTION(d.wireDecode(
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000340 "0630 0703080145 1400 1500 "
341 "1720612A79399E60304A9F701C1ECAC7956BF2F1B046E6C6F0D6C29B3FE3A29BAD76 16031B0100"_block),
Davide Pesavento905d40f2020-06-09 21:33:25 -0400342 tlv::Error,
343 [] (const auto& e) { return e.what() == "SignatureInfo element is out of order"s; });
344 BOOST_CHECK_EXCEPTION(d.wireDecode(
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000345 "0652 0703080145 1400 1500 16031B0100 "
346 "1720612A79399E60304A9F701C1ECAC7956BF2F1B046E6C6F0D6C29B3FE3A29BAD76"
347 "1720612A79399E60304A9F701C1ECAC7956BF2F1B046E6C6F0D6C29B3FE3A29BAD76"_block),
Davide Pesavento905d40f2020-06-09 21:33:25 -0400348 tlv::Error,
349 [] (const auto& e) { return e.what() == "SignatureValue element is out of order"s; });
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000350}
351
Davide Pesavento905d40f2020-06-09 21:33:25 -0400352BOOST_AUTO_TEST_CASE(MissingName)
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000353{
Davide Pesavento905d40f2020-06-09 21:33:25 -0400354 BOOST_CHECK_EXCEPTION(d.wireDecode("0607 16031B0100 1700"_block), tlv::Error,
355 [] (const auto& e) { return e.what() == "Name element is missing or out of order"s; });
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000356}
357
Davide Pesavento905d40f2020-06-09 21:33:25 -0400358BOOST_AUTO_TEST_CASE(MissingSignatureInfo)
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000359{
Davide Pesavento905d40f2020-06-09 21:33:25 -0400360 BOOST_CHECK_EXCEPTION(d.wireDecode("0607 0703080144 1700"_block), tlv::Error,
361 [] (const auto& e) { return e.what() == "SignatureInfo element is missing"s; });
Eric Newberrya3c8bd12020-05-15 17:27:07 -0700362}
363
Davide Pesavento905d40f2020-06-09 21:33:25 -0400364BOOST_AUTO_TEST_CASE(MissingSignatureValue)
Eric Newberrya3c8bd12020-05-15 17:27:07 -0700365{
Davide Pesavento905d40f2020-06-09 21:33:25 -0400366 BOOST_CHECK_EXCEPTION(d.wireDecode("0607 0700 16031B0100"_block), tlv::Error,
367 [] (const auto& e) { return e.what() == "SignatureValue element is missing"s; });
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000368}
369
Junxiao Shi8b753a22018-10-24 01:51:40 +0000370BOOST_AUTO_TEST_CASE(UnrecognizedNonCriticalElementBeforeName)
371{
Davide Pesavento905d40f2020-06-09 21:33:25 -0400372 BOOST_CHECK_EXCEPTION(d.wireDecode(
373 "062E FC00 0703080144 16031B0100 "
374 "1720612A79399E60304A9F701C1ECAC7956BF2F1B046E6C6F0D6C29B3FE3A29BAD76"_block),
375 tlv::Error,
376 [] (const auto& e) { return e.what() == "Name element is missing or out of order"s; });
Junxiao Shi8b753a22018-10-24 01:51:40 +0000377}
378
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000379BOOST_AUTO_TEST_CASE(UnrecognizedCriticalElement)
380{
Davide Pesavento905d40f2020-06-09 21:33:25 -0400381 BOOST_CHECK_EXCEPTION(d.wireDecode(
382 "0632 0703080145 FB00 1400 1500 16031B0100 "
383 "1720612A79399E60304A9F701C1ECAC7956BF2F1B046E6C6F0D6C29B3FE3A29BAD76"_block),
384 tlv::Error,
385 [] (const auto& e) { return e.what() == "Unrecognized element of critical type 251"s; });
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000386}
387
Davide Pesavento905d40f2020-06-09 21:33:25 -0400388BOOST_AUTO_TEST_SUITE_END() // Decode
Junxiao Shi7d9039b2018-04-14 15:56:28 +0000389
Junxiao Shi81206d52017-07-23 12:43:22 +0000390BOOST_FIXTURE_TEST_CASE(FullName, IdentityManagementFixture)
391{
392 Data d(Name("/local/ndn/prefix"));
393 d.setContentType(tlv::ContentType_Blob);
Davide Pesavento0f830802018-01-16 23:58:58 -0500394 d.setFreshnessPeriod(10_s);
Junxiao Shi81206d52017-07-23 12:43:22 +0000395 d.setContent(CONTENT1, sizeof(CONTENT1));
396 BOOST_CHECK_THROW(d.getFullName(), Data::Error); // FullName is unavailable without signing
397
398 m_keyChain.sign(d);
399 BOOST_CHECK_EQUAL(d.hasWire(), true);
400 Name fullName = d.getFullName(); // FullName is available after signing
401
402 BOOST_CHECK_EQUAL(d.getName().size() + 1, fullName.size());
403 BOOST_CHECK_EQUAL_COLLECTIONS(d.getName().begin(), d.getName().end(),
404 fullName.begin(), fullName.end() - 1);
405 BOOST_CHECK_EQUAL(fullName.get(-1).value_size(), util::Sha256::DIGEST_SIZE);
406
407 // FullName should be cached, so value() pointer points to same memory location
408 BOOST_CHECK_EQUAL(fullName.get(-1).value(), d.getFullName().get(-1).value());
409
Davide Pesavento0f830802018-01-16 23:58:58 -0500410 d.setFreshnessPeriod(100_s); // invalidates FullName
Junxiao Shi81206d52017-07-23 12:43:22 +0000411 BOOST_CHECK_THROW(d.getFullName(), Data::Error);
412
413 Data d1(Block(DATA1, sizeof(DATA1)));
414 BOOST_CHECK_EQUAL(d1.getFullName(),
415 "/local/ndn/prefix/"
416 "sha256digest=28bad4b5275bd392dbb670c75cf0b66f13f7942b21e80f55c0e86b374753a548");
417}
418
Davide Pesavento905d40f2020-06-09 21:33:25 -0400419BOOST_AUTO_TEST_CASE(SetName)
420{
421 Data d;
422 d.setName("/first");
423 BOOST_CHECK_EQUAL(d.getName(), "/first");
424 BOOST_CHECK_EQUAL(d.hasWire(), false);
425
426 d.setSignatureInfo(SignatureInfo(tlv::DigestSha256));
427 d.setSignatureValue(std::make_shared<Buffer>());
428 d.wireEncode();
429 BOOST_CHECK_EQUAL(d.hasWire(), true);
430 d.setName("/first");
431 BOOST_CHECK_EQUAL(d.getName(), "/first");
432 BOOST_CHECK_EQUAL(d.hasWire(), true);
433
434 d.setName("/second");
435 BOOST_CHECK_EQUAL(d.getName(), "/second");
436 BOOST_CHECK_EQUAL(d.hasWire(), false);
437}
438
439BOOST_AUTO_TEST_CASE(SetContentType)
440{
441 Data d;
442 d.setContentType(tlv::ContentType_Key);
443 BOOST_CHECK_EQUAL(d.getContentType(), tlv::ContentType_Key);
444 BOOST_CHECK_EQUAL(d.hasWire(), false);
445
446 d.setSignatureInfo(SignatureInfo(tlv::DigestSha256));
447 d.setSignatureValue(std::make_shared<Buffer>());
448 d.wireEncode();
449 BOOST_CHECK_EQUAL(d.hasWire(), true);
450 d.setContentType(tlv::ContentType_Key);
451 BOOST_CHECK_EQUAL(d.getContentType(), tlv::ContentType_Key);
452 BOOST_CHECK_EQUAL(d.hasWire(), true);
453
454 d.setContentType(tlv::ContentType_PrefixAnn);
455 BOOST_CHECK_EQUAL(d.getContentType(), tlv::ContentType_PrefixAnn);
456 BOOST_CHECK_EQUAL(d.hasWire(), false);
457}
458
459BOOST_AUTO_TEST_CASE(SetFreshnessPeriod)
460{
461 Data d;
462 d.setFreshnessPeriod(15_min);
463 BOOST_CHECK_EQUAL(d.getFreshnessPeriod(), 15_min);
464 BOOST_CHECK_EQUAL(d.hasWire(), false);
465
466 d.setSignatureInfo(SignatureInfo(tlv::DigestSha256));
467 d.setSignatureValue(std::make_shared<Buffer>());
468 d.wireEncode();
469 BOOST_CHECK_EQUAL(d.hasWire(), true);
470 d.setFreshnessPeriod(15_min);
471 BOOST_CHECK_EQUAL(d.getFreshnessPeriod(), 15_min);
472 BOOST_CHECK_EQUAL(d.hasWire(), true);
473
474 d.setFreshnessPeriod(1_h);
475 BOOST_CHECK_EQUAL(d.getFreshnessPeriod(), 1_h);
476 BOOST_CHECK_EQUAL(d.hasWire(), false);
477}
478
479BOOST_AUTO_TEST_CASE(SetFinalBlock)
480{
481 Data d;
482 d.setFinalBlock(name::Component("foo"));
483 BOOST_CHECK(d.getFinalBlock() == name::Component("foo"));
484 BOOST_CHECK_EQUAL(d.hasWire(), false);
485
486 d.setSignatureInfo(SignatureInfo(tlv::DigestSha256));
487 d.setSignatureValue(std::make_shared<Buffer>());
488 d.wireEncode();
489 BOOST_CHECK_EQUAL(d.hasWire(), true);
490 d.setFinalBlock(name::Component("foo"));
491 BOOST_CHECK(d.getFinalBlock() == name::Component("foo"));
492 BOOST_CHECK_EQUAL(d.hasWire(), true);
493
494 d.setFinalBlock(name::Component("bar"));
495 BOOST_CHECK(d.getFinalBlock() == name::Component("bar"));
496 BOOST_CHECK_EQUAL(d.hasWire(), false);
497}
498
499BOOST_AUTO_TEST_CASE(SetContent)
Davide Pesavento14c56cd2020-05-21 01:44:03 -0400500{
501 Data d;
502 BOOST_CHECK_EQUAL(d.getContent().type(), tlv::Content);
503 BOOST_CHECK_EQUAL(d.getContent().value_size(), 0);
504
505 const uint8_t direct[] = {0xca, 0xfe};
506 d.setContent("1502CAFE"_block); // Block overload, used directly as Content
507 BOOST_CHECK_EQUAL(d.getContent().type(), tlv::Content);
508 BOOST_CHECK_EQUAL_COLLECTIONS(d.getContent().value_begin(), d.getContent().value_end(),
509 direct, direct + sizeof(direct));
510
511 const uint8_t nested[] = {0x99, 0x02, 0xca, 0xfe};
512 d.setContent(Block(nested, sizeof(nested))); // Block overload, nested inside Content element
513 BOOST_CHECK_EQUAL(d.getContent().type(), tlv::Content);
514 BOOST_CHECK_EQUAL_COLLECTIONS(d.getContent().value_begin(), d.getContent().value_end(),
515 nested, nested + sizeof(nested));
516
517 d.setContent(nested, sizeof(nested)); // raw buffer overload
518 BOOST_CHECK_EQUAL(d.getContent().type(), tlv::Content);
519 BOOST_CHECK_EQUAL_COLLECTIONS(d.getContent().value_begin(), d.getContent().value_end(),
520 nested, nested + sizeof(nested));
521
522 d.setContent(std::make_shared<Buffer>(direct, sizeof(direct))); // ConstBufferPtr overload
523 BOOST_CHECK_EQUAL(d.getContent().type(), tlv::Content);
524 BOOST_CHECK_EQUAL_COLLECTIONS(d.getContent().value_begin(), d.getContent().value_end(),
525 direct, direct + sizeof(direct));
526
527 d.setContent(std::make_shared<Buffer>()); // ConstBufferPtr overload, empty buffer
528 BOOST_CHECK_EQUAL(d.getContent().type(), tlv::Content);
529 BOOST_CHECK_EQUAL(d.getContent().value_size(), 0);
530
531 BOOST_CHECK_THROW(d.setContent(nullptr), std::invalid_argument);
532}
533
Davide Pesavento905d40f2020-06-09 21:33:25 -0400534BOOST_AUTO_TEST_CASE(SetSignatureValue)
Davide Pesavento14c56cd2020-05-21 01:44:03 -0400535{
536 Data d;
537 BOOST_CHECK_EQUAL(d.getSignatureValue().type(), tlv::Invalid);
538
539 d.setSignatureValue(fromHex("FACADE"));
540 BOOST_CHECK_EQUAL(d.getSignatureValue().type(), tlv::SignatureValue);
541 BOOST_CHECK_EQUAL(d.getSignatureValue().value_size(), 3);
542
543 d.setSignatureValue(std::make_shared<Buffer>()); // empty buffer
544 BOOST_CHECK_EQUAL(d.getSignatureValue().type(), tlv::SignatureValue);
545 BOOST_CHECK_EQUAL(d.getSignatureValue().value_size(), 0);
546
547 BOOST_CHECK_THROW(d.setSignatureValue(nullptr), std::invalid_argument);
548}
549
Junxiao Shi81206d52017-07-23 12:43:22 +0000550BOOST_AUTO_TEST_CASE(Equality)
Alexander Afanasyevff2d08f2014-04-07 18:28:25 -0700551{
Alexander Afanasyevff2d08f2014-04-07 18:28:25 -0700552 Data a;
553 Data b;
554 BOOST_CHECK_EQUAL(a == b, true);
555 BOOST_CHECK_EQUAL(a != b, false);
556
Davide Pesavento14c56cd2020-05-21 01:44:03 -0400557 a.setName("/A");
Alexander Afanasyevff2d08f2014-04-07 18:28:25 -0700558 BOOST_CHECK_EQUAL(a == b, false);
559 BOOST_CHECK_EQUAL(a != b, true);
560
Davide Pesavento14c56cd2020-05-21 01:44:03 -0400561 b.setName("/B");
Alexander Afanasyevff2d08f2014-04-07 18:28:25 -0700562 BOOST_CHECK_EQUAL(a == b, false);
563 BOOST_CHECK_EQUAL(a != b, true);
564
Davide Pesavento14c56cd2020-05-21 01:44:03 -0400565 b.setName("/A");
Alexander Afanasyevff2d08f2014-04-07 18:28:25 -0700566 BOOST_CHECK_EQUAL(a == b, true);
567 BOOST_CHECK_EQUAL(a != b, false);
568
Davide Pesavento0f830802018-01-16 23:58:58 -0500569 a.setFreshnessPeriod(10_s);
Alexander Afanasyevff2d08f2014-04-07 18:28:25 -0700570 BOOST_CHECK_EQUAL(a == b, false);
571 BOOST_CHECK_EQUAL(a != b, true);
572
Davide Pesavento0f830802018-01-16 23:58:58 -0500573 b.setFreshnessPeriod(10_s);
Alexander Afanasyevff2d08f2014-04-07 18:28:25 -0700574 BOOST_CHECK_EQUAL(a == b, true);
575 BOOST_CHECK_EQUAL(a != b, false);
576
577 static const uint8_t someData[] = "someData";
578 a.setContent(someData, sizeof(someData));
579 BOOST_CHECK_EQUAL(a == b, false);
580 BOOST_CHECK_EQUAL(a != b, true);
581
582 b.setContent(someData, sizeof(someData));
583 BOOST_CHECK_EQUAL(a == b, true);
584 BOOST_CHECK_EQUAL(a != b, false);
585
Eric Newberrya3c8bd12020-05-15 17:27:07 -0700586 a.setSignatureInfo(SignatureInfo(tlv::SignatureSha256WithRsa));
Alexander Afanasyevff2d08f2014-04-07 18:28:25 -0700587 BOOST_CHECK_EQUAL(a == b, false);
588 BOOST_CHECK_EQUAL(a != b, true);
589
Eric Newberrya3c8bd12020-05-15 17:27:07 -0700590 b.setSignatureInfo(SignatureInfo(tlv::SignatureSha256WithRsa));
Alexander Afanasyevff2d08f2014-04-07 18:28:25 -0700591 BOOST_CHECK_EQUAL(a == b, true);
592 BOOST_CHECK_EQUAL(a != b, false);
593}
594
Junxiao Shi81206d52017-07-23 12:43:22 +0000595BOOST_AUTO_TEST_CASE(Print)
Alexander Afanasyevff2d08f2014-04-07 18:28:25 -0700596{
Junxiao Shi81206d52017-07-23 12:43:22 +0000597 Data d(Block(DATA1, sizeof(DATA1)));
598 BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(d),
Alexander Afanasyeva0c5f832014-06-19 13:27:56 -0700599 "Name: /local/ndn/prefix\n"
600 "MetaInfo: ContentType: 0, FreshnessPeriod: 10000 milliseconds\n"
601 "Content: (size: 8)\n"
Junxiao Shi605671d2017-08-26 13:41:06 +0000602 "Signature: (type: SignatureSha256WithRsa, value_length: 128)\n");
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -0800603}
604
Davide Pesaventoeee3e822016-11-26 19:19:34 +0100605BOOST_AUTO_TEST_SUITE_END() // TestData
Alexander Afanasyev0abb2da2014-01-30 18:07:57 -0800606
Spyridon Mastorakis429634f2015-02-19 17:35:33 -0800607} // namespace tests
Alexander Afanasyev0abb2da2014-01-30 18:07:57 -0800608} // namespace ndn