blob: fabd22c8a60a391818e908a0c8257abb1de6ca30 [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/*
Alexander Afanasyev4c9a3d52017-01-03 17:45:19 -08003 * Copyright (c) 2013-2017 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
Alexander Afanasyev09c613f2014-01-29 00:23:58 -080022#include "data.hpp"
Alexander Afanasyev258ec2b2014-05-14 16:15:37 -070023#include "encoding/buffer-stream.hpp"
Alexander Afanasyevadc71842017-01-26 22:17:58 -050024#include "security/signature-sha256-with-rsa.hpp"
Davide Pesaventoc2e12b42017-07-09 20:35:09 -040025#include "security/transform/private-key.hpp"
26#include "security/transform/public-key.hpp"
27#include "security/transform/signer-filter.hpp"
28#include "security/transform/step-source.hpp"
29#include "security/transform/stream-sink.hpp"
30#include "security/verification-helpers.hpp"
Junxiao Shi6938e342017-07-25 21:56:58 +000031#include "util/sha256.hpp"
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -080032
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -070033#include "boost-test.hpp"
Alexander Afanasyeve4f8c3b2016-06-23 16:03:48 -070034#include "identity-management-fixture.hpp"
Junxiao Shi81206d52017-07-23 12:43:22 +000035#include <boost/lexical_cast.hpp>
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -070036
Alexander Afanasyev0abb2da2014-01-30 18:07:57 -080037namespace ndn {
Spyridon Mastorakis429634f2015-02-19 17:35:33 -080038namespace tests {
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -080039
40BOOST_AUTO_TEST_SUITE(TestData)
41
Junxiao Shi81206d52017-07-23 12:43:22 +000042const uint8_t CONTENT1[] = {0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x21};
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -080043
Junxiao Shi81206d52017-07-23 12:43:22 +000044const uint8_t DATA1[] = {
450x06, 0xc5, // Data
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -070046 0x07, 0x14, // Name
47 0x08, 0x05,
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -080048 0x6c, 0x6f, 0x63, 0x61, 0x6c,
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -070049 0x08, 0x03,
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -080050 0x6e, 0x64, 0x6e,
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -070051 0x08, 0x06,
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -080052 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
Alexander Afanasyev4b456282014-02-13 00:34:34 -080053 0x14, 0x04, // MetaInfo
54 0x19, 0x02, // FreshnessPeriod
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -070055 0x27, 0x10,
56 0x15, 0x08, // Content
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -080057 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x21,
Alexander Afanasyev4b456282014-02-13 00:34:34 -080058 0x16, 0x1b, // SignatureInfo
59 0x1b, 0x01, // SignatureType
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -070060 0x01,
Alexander Afanasyev4b456282014-02-13 00:34:34 -080061 0x1c, 0x16, // KeyLocator
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -070062 0x07, 0x14, // Name
63 0x08, 0x04,
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -080064 0x74, 0x65, 0x73, 0x74,
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -070065 0x08, 0x03,
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -080066 0x6b, 0x65, 0x79,
Alexander Afanasyevb1db7c62014-04-03 14:57:25 -070067 0x08, 0x07,
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -080068 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72,
Alexander Afanasyev4b456282014-02-13 00:34:34 -080069 0x17, 0x80, // SignatureValue
Alexander Afanasyevdfa52c42014-04-24 21:10:11 -070070 0x2f, 0xd6, 0xf1, 0x6e, 0x80, 0x6f, 0x10, 0xbe, 0xb1, 0x6f, 0x3e, 0x31, 0xec,
71 0xe3, 0xb9, 0xea, 0x83, 0x30, 0x40, 0x03, 0xfc, 0xa0, 0x13, 0xd9, 0xb3, 0xc6,
72 0x25, 0x16, 0x2d, 0xa6, 0x58, 0x41, 0x69, 0x62, 0x56, 0xd8, 0xb3, 0x6a, 0x38,
73 0x76, 0x56, 0xea, 0x61, 0xb2, 0x32, 0x70, 0x1c, 0xb6, 0x4d, 0x10, 0x1d, 0xdc,
74 0x92, 0x8e, 0x52, 0xa5, 0x8a, 0x1d, 0xd9, 0x96, 0x5e, 0xc0, 0x62, 0x0b, 0xcf,
75 0x3a, 0x9d, 0x7f, 0xca, 0xbe, 0xa1, 0x41, 0x71, 0x85, 0x7a, 0x8b, 0x5d, 0xa9,
76 0x64, 0xd6, 0x66, 0xb4, 0xe9, 0x8d, 0x0c, 0x28, 0x43, 0xee, 0xa6, 0x64, 0xe8,
77 0x55, 0xf6, 0x1c, 0x19, 0x0b, 0xef, 0x99, 0x25, 0x1e, 0xdc, 0x78, 0xb3, 0xa7,
78 0xaa, 0x0d, 0x14, 0x58, 0x30, 0xe5, 0x37, 0x6a, 0x6d, 0xdb, 0x56, 0xac, 0xa3,
79 0xfc, 0x90, 0x7a, 0xb8, 0x66, 0x9c, 0x0e, 0xf6, 0xb7, 0x64, 0xd1
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -080080};
81
Junxiao Shi81206d52017-07-23 12:43:22 +000082// ---- constructor, encode, decode ----
83
84BOOST_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);
91 BOOST_CHECK_EQUAL(d.getFinalBlockId(), name::Component());
92 BOOST_CHECK_EQUAL(d.getContent().type(), tlv::Content);
93 BOOST_CHECK_EQUAL(d.getContent().value_size(), 0);
94 BOOST_CHECK(!d.getSignature());
95}
96
97class DataSigningKeyFixture
98{
99protected:
100 DataSigningKeyFixture()
101 {
102 m_privKey.loadPkcs1(PRIVATE_KEY_DER, sizeof(PRIVATE_KEY_DER));
103 auto buf = m_privKey.derivePublicKey();
104 m_pubKey.loadPkcs8(buf->data(), buf->size());
105 }
106
107protected:
108 security::transform::PrivateKey m_privKey;
109 security::transform::PublicKey m_pubKey;
110
111private:
112 static const uint8_t PRIVATE_KEY_DER[632];
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -0800113};
114
Junxiao Shi81206d52017-07-23 12:43:22 +0000115const uint8_t DataSigningKeyFixture::PRIVATE_KEY_DER[] = {
116 0x30, 0x82, 0x02, 0x74, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7,
117 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x82, 0x02, 0x5e, 0x30, 0x82, 0x02, 0x5a, 0x02, 0x01,
118 0x00, 0x02, 0x81, 0x81, 0x00, 0x9e, 0x06, 0x3e, 0x47, 0x85, 0xb2, 0x34, 0x37, 0xaa, 0x85, 0x47,
119 0xac, 0x03, 0x24, 0x83, 0xb5, 0x9c, 0xa8, 0x05, 0x3a, 0x24, 0x1e, 0xeb, 0x89, 0x01, 0xbb, 0xe9,
120 0x9b, 0xb2, 0xc3, 0x22, 0xac, 0x68, 0xe3, 0xf0, 0x6c, 0x02, 0xce, 0x68, 0xa6, 0xc4, 0xd0, 0xa7,
121 0x06, 0x90, 0x9c, 0xaa, 0x1b, 0x08, 0x1d, 0x8b, 0x43, 0x9a, 0x33, 0x67, 0x44, 0x6d, 0x21, 0xa3,
122 0x1b, 0x88, 0x9a, 0x97, 0x5e, 0x59, 0xc4, 0x15, 0x0b, 0xd9, 0x2c, 0xbd, 0x51, 0x07, 0x61, 0x82,
123 0xad, 0xc1, 0xb8, 0xd7, 0xbf, 0x9b, 0xcf, 0x7d, 0x24, 0xc2, 0x63, 0xf3, 0x97, 0x17, 0xeb, 0xfe,
124 0x62, 0x25, 0xba, 0x5b, 0x4d, 0x8a, 0xc2, 0x7a, 0xbd, 0x43, 0x8a, 0x8f, 0xb8, 0xf2, 0xf1, 0xc5,
125 0x6a, 0x30, 0xd3, 0x50, 0x8c, 0xc8, 0x9a, 0xdf, 0xef, 0xed, 0x35, 0xe7, 0x7a, 0x62, 0xea, 0x76,
126 0x7c, 0xbb, 0x08, 0x26, 0xc7, 0x02, 0x01, 0x11, 0x02, 0x81, 0x80, 0x04, 0xa5, 0xd4, 0xa7, 0xc0,
127 0x2a, 0xe3, 0x6b, 0x0c, 0x8b, 0x73, 0x0c, 0x96, 0xae, 0x40, 0x1b, 0xee, 0x04, 0xf1, 0x18, 0x4c,
128 0x5b, 0x43, 0x29, 0xad, 0x3a, 0x3b, 0x93, 0xa3, 0x60, 0x17, 0x9b, 0xa8, 0xbb, 0x68, 0xf4, 0x1e,
129 0x33, 0x3f, 0x50, 0x32, 0xf7, 0x13, 0xf8, 0xa9, 0xe6, 0x7d, 0x79, 0x44, 0x00, 0xde, 0x72, 0xed,
130 0xf2, 0x73, 0xfa, 0x7b, 0xae, 0x2a, 0x71, 0xc0, 0x40, 0xc8, 0x37, 0x6f, 0x38, 0xb2, 0x69, 0x1f,
131 0xa8, 0x83, 0x7b, 0x42, 0x00, 0x73, 0x46, 0xe6, 0x4c, 0x91, 0x7f, 0x13, 0x06, 0x69, 0x06, 0xd8,
132 0x3f, 0x22, 0x15, 0x75, 0xf6, 0xde, 0xcd, 0xb0, 0xbc, 0x66, 0x61, 0x91, 0x08, 0x9b, 0x2b, 0xb2,
133 0x00, 0xa9, 0x67, 0x05, 0x39, 0x40, 0xb9, 0x37, 0x85, 0x88, 0x4f, 0x76, 0x79, 0x63, 0xc0, 0x88,
134 0x3c, 0x86, 0xa8, 0x12, 0x94, 0x5f, 0xe4, 0x36, 0x3d, 0xea, 0xb9, 0x02, 0x41, 0x00, 0xb6, 0x2e,
135 0xbb, 0xcd, 0x2f, 0x3a, 0x99, 0xe0, 0xa1, 0xa5, 0x44, 0x77, 0xea, 0x0b, 0xbe, 0x16, 0x95, 0x0e,
136 0x64, 0xa7, 0x68, 0xd7, 0x4b, 0x15, 0x15, 0x23, 0xe2, 0x1e, 0x4e, 0x00, 0x2c, 0x22, 0x97, 0xae,
137 0xb0, 0x74, 0xa6, 0x99, 0xd0, 0x5d, 0xb7, 0x1b, 0x10, 0x34, 0x13, 0xd2, 0x5f, 0x6e, 0x56, 0xad,
138 0x85, 0x4a, 0xdb, 0xf0, 0x78, 0xbd, 0xf4, 0x8c, 0xb7, 0x9a, 0x3e, 0x99, 0xef, 0xb9, 0x02, 0x41,
139 0x00, 0xde, 0x0d, 0xa7, 0x48, 0x75, 0x90, 0xad, 0x11, 0xa1, 0xac, 0xee, 0xcb, 0x41, 0x81, 0xc6,
140 0xc8, 0x7f, 0xe7, 0x25, 0x94, 0xa1, 0x2a, 0x21, 0xa8, 0x57, 0xfe, 0x84, 0xf2, 0x5e, 0xb4, 0x96,
141 0x35, 0xaf, 0xef, 0x2e, 0x7a, 0xf8, 0xda, 0x3f, 0xac, 0x8a, 0x3c, 0x1c, 0x9c, 0xbd, 0x44, 0xd6,
142 0x90, 0xb5, 0xce, 0x1b, 0x12, 0xf9, 0x3b, 0x8c, 0x69, 0xf6, 0xa9, 0x02, 0x93, 0x48, 0x35, 0x0a,
143 0x7f, 0x02, 0x40, 0x6b, 0x2a, 0x8c, 0x96, 0xd0, 0x7c, 0xd2, 0xfc, 0x9b, 0x52, 0x28, 0x46, 0x89,
144 0xac, 0x8d, 0xef, 0x2a, 0x80, 0xef, 0xea, 0x01, 0x6f, 0x95, 0x93, 0xee, 0x51, 0x57, 0xd5, 0x97,
145 0x4b, 0x65, 0x41, 0x86, 0x66, 0xc2, 0x26, 0x80, 0x1e, 0x3e, 0x55, 0x3e, 0x88, 0x63, 0xe2, 0x66,
146 0x03, 0x47, 0x31, 0xd8, 0xa2, 0x4e, 0x68, 0x45, 0x24, 0x0a, 0xca, 0x17, 0x61, 0xd5, 0x69, 0xca,
147 0x78, 0xab, 0x21, 0x02, 0x41, 0x00, 0x8f, 0xae, 0x7b, 0x4d, 0x00, 0xc7, 0x06, 0x92, 0xf0, 0x24,
148 0x9a, 0x83, 0x84, 0xbd, 0x62, 0x81, 0xbc, 0x2c, 0x27, 0x60, 0x2c, 0x0c, 0x33, 0xe5, 0x66, 0x1d,
149 0x28, 0xd9, 0x10, 0x1a, 0x7f, 0x4f, 0xea, 0x4f, 0x78, 0x6d, 0xb0, 0x14, 0xbf, 0xc9, 0xff, 0x17,
150 0xd6, 0x47, 0x4d, 0x4a, 0xa8, 0xf4, 0x39, 0x67, 0x3e, 0xb1, 0xec, 0x8f, 0xf1, 0x71, 0xbd, 0xb8,
151 0xa7, 0x50, 0x3d, 0xc7, 0xf7, 0xbb, 0x02, 0x40, 0x0d, 0x85, 0x32, 0x73, 0x9f, 0x0a, 0x33, 0x2f,
152 0x4b, 0xa2, 0xbd, 0xd1, 0xb1, 0x42, 0xf0, 0x72, 0xa8, 0x7a, 0xc8, 0x15, 0x37, 0x1b, 0xde, 0x76,
153 0x70, 0xce, 0xfd, 0x69, 0x20, 0x00, 0x4d, 0xc9, 0x4f, 0x35, 0x6f, 0xd1, 0x35, 0xa1, 0x04, 0x95,
154 0x30, 0xe8, 0x3b, 0xd5, 0x03, 0x5a, 0x50, 0x21, 0x6d, 0xa0, 0x84, 0x39, 0xe9, 0x2e, 0x1e, 0xfc,
155 0xe4, 0x82, 0x43, 0x20, 0x46, 0x7d, 0x0a, 0xb6
156};
157
158BOOST_FIXTURE_TEST_CASE(Encode, DataSigningKeyFixture)
159{
160 // manual data packet creation for now
161
162 Data d(Name("/local/ndn/prefix"));
163 d.setContentType(tlv::ContentType_Blob);
164 d.setFreshnessPeriod(time::seconds(10));
165 d.setContent(CONTENT1, sizeof(CONTENT1));
166
167 Block signatureInfo(tlv::SignatureInfo);
168 // SignatureType
169 signatureInfo.push_back(makeNonNegativeIntegerBlock(tlv::SignatureType, tlv::SignatureSha256WithRsa));
170 // KeyLocator
171 {
172 KeyLocator keyLocator;
173 keyLocator.setName("/test/key/locator");
174 signatureInfo.push_back(keyLocator.wireEncode());
175 }
176 signatureInfo.encode();
177
178 // SignatureValue
179 OBufferStream os;
180 tlv::writeVarNumber(os, tlv::SignatureValue);
181
182 OBufferStream sig;
183 {
184 namespace tr = security::transform;
185
186 tr::StepSource input;
187 input >> tr::signerFilter(DigestAlgorithm::SHA256, m_privKey) >> tr::streamSink(sig);
188
189 input.write(d.getName(). wireEncode().wire(), d.getName(). wireEncode().size());
190 input.write(d.getMetaInfo().wireEncode().wire(), d.getMetaInfo().wireEncode().size());
191 input.write(d.getContent(). wire(), d.getContent(). size());
192 input.write(signatureInfo. wire(), signatureInfo. size());
193 input.end();
194 }
195 auto buf = sig.buf();
196 tlv::writeVarNumber(os, buf->size());
197 os.write(reinterpret_cast<const char*>(buf->data()), buf->size());
198
199 Block signatureValue(os.buf());
200 Signature signature(signatureInfo, signatureValue);
201 d.setSignature(signature);
202
203 Block dataBlock(d.wireEncode());
204 BOOST_CHECK_EQUAL_COLLECTIONS(DATA1, DATA1 + sizeof(DATA1),
205 dataBlock.begin(), dataBlock.end());
206}
207
208BOOST_FIXTURE_TEST_CASE(Decode, DataSigningKeyFixture)
209{
210 Block dataBlock(DATA1, sizeof(DATA1));
211 Data d(dataBlock);
212
213 BOOST_CHECK_EQUAL(d.getName().toUri(), "/local/ndn/prefix");
214 BOOST_CHECK_EQUAL(d.getContentType(), static_cast<uint32_t>(tlv::ContentType_Blob));
215 BOOST_CHECK_EQUAL(d.getFreshnessPeriod(), time::seconds(10));
216 BOOST_CHECK_EQUAL(std::string(reinterpret_cast<const char*>(d.getContent().value()),
217 d.getContent().value_size()), "SUCCESS!");
218 BOOST_CHECK_EQUAL(d.getSignature().getType(), tlv::SignatureSha256WithRsa);
219
220 Block block = d.getSignature().getInfo();
221 block.parse();
222 KeyLocator keyLocator(block.get(tlv::KeyLocator));
223 BOOST_CHECK_EQUAL(keyLocator.getName().toUri(), "/test/key/locator");
224
225 BOOST_CHECK(security::verifySignature(d, m_pubKey));
226}
227
228BOOST_FIXTURE_TEST_CASE(FullName, IdentityManagementFixture)
229{
230 Data d(Name("/local/ndn/prefix"));
231 d.setContentType(tlv::ContentType_Blob);
232 d.setFreshnessPeriod(time::seconds(10));
233 d.setContent(CONTENT1, sizeof(CONTENT1));
234 BOOST_CHECK_THROW(d.getFullName(), Data::Error); // FullName is unavailable without signing
235
236 m_keyChain.sign(d);
237 BOOST_CHECK_EQUAL(d.hasWire(), true);
238 Name fullName = d.getFullName(); // FullName is available after signing
239
240 BOOST_CHECK_EQUAL(d.getName().size() + 1, fullName.size());
241 BOOST_CHECK_EQUAL_COLLECTIONS(d.getName().begin(), d.getName().end(),
242 fullName.begin(), fullName.end() - 1);
243 BOOST_CHECK_EQUAL(fullName.get(-1).value_size(), util::Sha256::DIGEST_SIZE);
244
245 // FullName should be cached, so value() pointer points to same memory location
246 BOOST_CHECK_EQUAL(fullName.get(-1).value(), d.getFullName().get(-1).value());
247
248 d.setFreshnessPeriod(time::seconds(100)); // invalidates FullName
249 BOOST_CHECK_THROW(d.getFullName(), Data::Error);
250
251 Data d1(Block(DATA1, sizeof(DATA1)));
252 BOOST_CHECK_EQUAL(d1.getFullName(),
253 "/local/ndn/prefix/"
254 "sha256digest=28bad4b5275bd392dbb670c75cf0b66f13f7942b21e80f55c0e86b374753a548");
255}
256
257// ---- operators ----
258
259BOOST_AUTO_TEST_CASE(Equality)
Alexander Afanasyevff2d08f2014-04-07 18:28:25 -0700260{
261 using namespace time;
262
263 Data a;
264 Data b;
265 BOOST_CHECK_EQUAL(a == b, true);
266 BOOST_CHECK_EQUAL(a != b, false);
267
268 a.setName("ndn:/A");
269 BOOST_CHECK_EQUAL(a == b, false);
270 BOOST_CHECK_EQUAL(a != b, true);
271
272 b.setName("ndn:/B");
273 BOOST_CHECK_EQUAL(a == b, false);
274 BOOST_CHECK_EQUAL(a != b, true);
275
276 b.setName("ndn:/A");
277 BOOST_CHECK_EQUAL(a == b, true);
278 BOOST_CHECK_EQUAL(a != b, false);
279
280 a.setFreshnessPeriod(seconds(10));
281 BOOST_CHECK_EQUAL(a == b, false);
282 BOOST_CHECK_EQUAL(a != b, true);
283
284 b.setFreshnessPeriod(seconds(10));
285 BOOST_CHECK_EQUAL(a == b, true);
286 BOOST_CHECK_EQUAL(a != b, false);
287
288 static const uint8_t someData[] = "someData";
289 a.setContent(someData, sizeof(someData));
290 BOOST_CHECK_EQUAL(a == b, false);
291 BOOST_CHECK_EQUAL(a != b, true);
292
293 b.setContent(someData, sizeof(someData));
294 BOOST_CHECK_EQUAL(a == b, true);
295 BOOST_CHECK_EQUAL(a != b, false);
296
297 a.setSignature(SignatureSha256WithRsa());
298 BOOST_CHECK_EQUAL(a == b, false);
299 BOOST_CHECK_EQUAL(a != b, true);
300
301 b.setSignature(SignatureSha256WithRsa());
302 BOOST_CHECK_EQUAL(a == b, true);
303 BOOST_CHECK_EQUAL(a != b, false);
304}
305
Junxiao Shi81206d52017-07-23 12:43:22 +0000306BOOST_AUTO_TEST_CASE(Print)
Alexander Afanasyevff2d08f2014-04-07 18:28:25 -0700307{
Junxiao Shi81206d52017-07-23 12:43:22 +0000308 Data d(Block(DATA1, sizeof(DATA1)));
309 BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(d),
Alexander Afanasyeva0c5f832014-06-19 13:27:56 -0700310 "Name: /local/ndn/prefix\n"
311 "MetaInfo: ContentType: 0, FreshnessPeriod: 10000 milliseconds\n"
312 "Content: (size: 8)\n"
Junxiao Shi605671d2017-08-26 13:41:06 +0000313 "Signature: (type: SignatureSha256WithRsa, value_length: 128)\n");
Alexander Afanasyev5fa9e9a2013-12-24 19:45:07 -0800314}
315
Davide Pesaventoeee3e822016-11-26 19:19:34 +0100316BOOST_AUTO_TEST_SUITE_END() // TestData
Alexander Afanasyev0abb2da2014-01-30 18:07:57 -0800317
Spyridon Mastorakis429634f2015-02-19 17:35:33 -0800318} // namespace tests
Alexander Afanasyev0abb2da2014-01-30 18:07:57 -0800319} // namespace ndn