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