blob: 8025c37d11dddeb01572486ceed98f58efd2befa [file] [log] [blame]
Yingdi Yu38317e52015-07-22 13:58:02 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Davide Pesaventoa84f4642017-08-23 16:14:51 -04002/*
Davide Pesavento765abc92021-12-27 00:44:04 -05003 * Copyright (c) 2013-2021 Regents of the University of California.
Yingdi Yu38317e52015-07-22 13:58:02 -07004 *
5 * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
6 *
7 * 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.
20 */
21
Davide Pesavento7e780642018-11-24 15:51:34 -050022#include "ndn-cxx/security/transform/hex-encode.hpp"
23#include "ndn-cxx/security/transform/buffer-source.hpp"
24#include "ndn-cxx/security/transform/step-source.hpp"
25#include "ndn-cxx/security/transform/stream-sink.hpp"
26#include "ndn-cxx/encoding/buffer-stream.hpp"
Yingdi Yu38317e52015-07-22 13:58:02 -070027
Davide Pesavento7e780642018-11-24 15:51:34 -050028#include "tests/boost-test.hpp"
Yingdi Yu38317e52015-07-22 13:58:02 -070029
30namespace ndn {
31namespace security {
32namespace transform {
33namespace tests {
34
35BOOST_AUTO_TEST_SUITE(Security)
36BOOST_AUTO_TEST_SUITE(Transform)
37BOOST_AUTO_TEST_SUITE(TestHexEncode)
38
39BOOST_AUTO_TEST_CASE(Basic)
40{
Davide Pesavento765abc92021-12-27 00:44:04 -050041 const uint8_t in[] = {
Yingdi Yu38317e52015-07-22 13:58:02 -070042 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
43 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
44 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
45 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
46 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
47 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
48 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
49 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
50 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
51 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
52 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
53 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
54 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
55 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
56 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
57 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
58 };
Davide Pesavento765abc92021-12-27 00:44:04 -050059 const std::string out =
Yingdi Yu38317e52015-07-22 13:58:02 -070060 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
61 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
62 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
63 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f";
64
65 OBufferStream os;
Davide Pesavento765abc92021-12-27 00:44:04 -050066 bufferSource(in) >> hexEncode() >> streamSink(os);
Yingdi Yu38317e52015-07-22 13:58:02 -070067
68 ConstBufferPtr buf1 = os.buf();
69 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), buf1->begin(), buf1->end());
70}
71
72BOOST_AUTO_TEST_CASE(UpperCase)
73{
Davide Pesavento765abc92021-12-27 00:44:04 -050074 const uint8_t in[] = {
Yingdi Yu38317e52015-07-22 13:58:02 -070075 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
76 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
77 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
78 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
79 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
80 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
81 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
82 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
83 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
84 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
85 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
86 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
87 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
88 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
89 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
90 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
91 };
Davide Pesavento765abc92021-12-27 00:44:04 -050092 const std::string out =
Yingdi Yu38317e52015-07-22 13:58:02 -070093 "000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F"
94 "000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F"
95 "000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F"
96 "000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F";
97
98 OBufferStream os;
Davide Pesavento765abc92021-12-27 00:44:04 -050099 bufferSource(in) >> hexEncode(true) >> streamSink(os);
Yingdi Yu38317e52015-07-22 13:58:02 -0700100
101 ConstBufferPtr buf1 = os.buf();
102 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), buf1->begin(), buf1->end());
103}
104
105BOOST_AUTO_TEST_CASE(StepByStep)
106{
Davide Pesavento765abc92021-12-27 00:44:04 -0500107 const uint8_t in[] = {
Yingdi Yu38317e52015-07-22 13:58:02 -0700108 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
109 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
110 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
111 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
112 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
113 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
114 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
115 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
116 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
117 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
118 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
119 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
120 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
121 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
122 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
123 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
124 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
125 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
126 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
127 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
128 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
129 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
130 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
131 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
132 };
Davide Pesavento765abc92021-12-27 00:44:04 -0500133 const std::string out =
Yingdi Yu38317e52015-07-22 13:58:02 -0700134 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
135 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
136 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
137 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
138 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
139 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
140 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
141 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
142 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
143 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
144 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
145 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f";
146
147 OBufferStream os;
148 StepSource source;
149 source >> hexEncode() >> streamSink(os);
Davide Pesavento765abc92021-12-27 00:44:04 -0500150 source.write({in, 64}); // complete chunk
151 source.write({in + 64, 32}); // first half of a chunk
152 source.write({in + 96, 32}); // second half of a chunk
153 source.write({in + 128, 20}); // front of a chunk
154 source.write({in + 148, 20}); // middle of a chunk
155 source.write({in + 168, 24}); // end of a chunk
156 source.write({in + 192, 63}); // odd number of bytes
157 source.write({in + 255, 85}); // one and half chunk
158 source.write({in + 340, 44}); // remaining part
Yingdi Yu38317e52015-07-22 13:58:02 -0700159 source.end();
160
161 ConstBufferPtr buf1 = os.buf();
162 BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), buf1->begin(), buf1->end());
163}
164
165BOOST_AUTO_TEST_CASE(EmptyInput)
166{
167 OBufferStream os;
168 StepSource source;
169 source >> hexEncode() >> streamSink(os);
170 source.end();
Davide Pesavento765abc92021-12-27 00:44:04 -0500171
Yingdi Yu38317e52015-07-22 13:58:02 -0700172 BOOST_CHECK_EQUAL(os.buf()->size(), 0);
173}
174
175BOOST_AUTO_TEST_SUITE_END() // TestHexEncode
176BOOST_AUTO_TEST_SUITE_END() // Transform
177BOOST_AUTO_TEST_SUITE_END() // Security
178
179} // namespace tests
180} // namespace transform
181} // namespace security
182} // namespace ndn