blob: 23ca9aafbc795c7f826cf3be50464b534e0933f6 [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-decode.hpp"
Yingdi Yu38317e52015-07-22 13:58:02 -070023
Davide Pesavento7e780642018-11-24 15:51:34 -050024#include "ndn-cxx/encoding/buffer-stream.hpp"
25#include "ndn-cxx/security/transform/buffer-source.hpp"
26#include "ndn-cxx/security/transform/step-source.hpp"
27#include "ndn-cxx/security/transform/stream-sink.hpp"
28
29#include "tests/boost-test.hpp"
Yingdi Yu38317e52015-07-22 13:58:02 -070030
31namespace ndn {
32namespace security {
33namespace transform {
34namespace tests {
35
36BOOST_AUTO_TEST_SUITE(Security)
37BOOST_AUTO_TEST_SUITE(Transform)
38BOOST_AUTO_TEST_SUITE(TestHexDecode)
39
40BOOST_AUTO_TEST_CASE(Basic)
41{
Davide Pesavento765abc92021-12-27 00:44:04 -050042 const std::string in =
Yingdi Yu38317e52015-07-22 13:58:02 -070043 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
44 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
45 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
46 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f";
Davide Pesavento765abc92021-12-27 00:44:04 -050047 const uint8_t out[] = {
Yingdi Yu38317e52015-07-22 13:58:02 -070048 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 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
59 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
60 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
61 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
62 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
63 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
64 };
65
66 OBufferStream os;
67 bufferSource(in) >> hexDecode() >> streamSink(os);
68
69 ConstBufferPtr buf1 = os.buf();
70 BOOST_CHECK_EQUAL_COLLECTIONS(out, out + sizeof(out), buf1->begin(), buf1->end());
71}
72
73BOOST_AUTO_TEST_CASE(UpperCase)
74{
Davide Pesavento765abc92021-12-27 00:44:04 -050075 const std::string in =
Yingdi Yu38317e52015-07-22 13:58:02 -070076 "000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F"
77 "000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F"
78 "000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F"
79 "000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F";
Davide Pesavento765abc92021-12-27 00:44:04 -050080 const uint8_t out[] = {
Yingdi Yu38317e52015-07-22 13:58:02 -070081 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 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
92 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
93 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
94 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
95 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
96 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
97 };
98
99 OBufferStream os;
100 bufferSource(in) >> hexDecode() >> streamSink(os);
101
102 ConstBufferPtr buf1 = os.buf();
103 BOOST_CHECK_EQUAL_COLLECTIONS(out, out + sizeof(out), buf1->begin(), buf1->end());
104}
105
106BOOST_AUTO_TEST_CASE(MixCase)
107{
Davide Pesavento765abc92021-12-27 00:44:04 -0500108 const std::string in =
Yingdi Yu38317e52015-07-22 13:58:02 -0700109 "000102030405060708090a0b0c0d0e0f"
110 "101112131415161718191a1b1c1d1e1f"
111 "202122232425262728292a2b2c2d2e2f"
112 "303132333435363738393a3b3c3d3e3f"
113 "404142434445464748494a4b4c4d4e4f"
114 "505152535455565758595a5b5c5d5e5f"
115 "606162636465666768696a6b6c6d6e6f"
116 "707172737475767778797a7b7c7d7e7f"
117 "808182838485868788898a8b8c8d8e8f"
118 "909192939495969798999a9b9c9d9e9f"
119 "a0a1a2a3a4a5a6a7a8a9aaabacadaeaf"
120 "b0b1b2b3b4b5b6b7b8b9babbbcbdbebf"
121 "c0c1c2c3c4c5c6c7c8c9cacbcccdcecf"
122 "d0d1d2d3d4d5d6d7d8d9dadbdcdddedf"
123 "e0e1e2e3e4e5e6e7e8e9eaebecedeeef"
124 "f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff"
125 "000102030405060708090A0B0C0D0E0F"
126 "101112131415161718191A1B1C1D1E1F"
127 "202122232425262728292A2B2C2D2E2F"
128 "303132333435363738393A3B3C3D3E3F"
129 "404142434445464748494A4B4C4D4E4F"
130 "505152535455565758595A5B5C5D5E5F"
131 "606162636465666768696A6B6C6D6E6F"
132 "707172737475767778797A7B7C7D7E7F"
133 "808182838485868788898A8B8C8D8E8F"
134 "909192939495969798999A9B9C9D9E9F"
135 "A0A1A2A3A4A5A6A7A8A9AAABACADAEAF"
136 "B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF"
137 "C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF"
138 "D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF"
139 "E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF"
140 "F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF"
141 "aaabacadaeafaAaBaCaD"
142 "babbbcbdbebfbAbBbCbD"
143 "cacbcccdcecfcAcBcCcD"
144 "dadbdcdddedfdAdBdCdD"
145 "eaebecedeeefeAeBeCeD"
146 "fafbfcfdfefffAfBfCfD"
147 "AaAbAcAdAeAfAAABACAD"
148 "BaBbBcBdBeBfBABBBCBD"
149 "CaCbCcCdCeCfCACBCCCD"
150 "DaDbDcDdDeDfDADBDCDD";
Davide Pesavento765abc92021-12-27 00:44:04 -0500151 const uint8_t out[] = {
Yingdi Yu38317e52015-07-22 13:58:02 -0700152 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
153 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
154 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
155 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
156 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
157 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
158 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
159 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
160 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
161 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,
162 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
163 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
164 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
165 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
166 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
167 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF,
168 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
169 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
170 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
171 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
172 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
173 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
174 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
175 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
176 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
177 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,
178 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
179 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
180 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
181 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
182 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
183 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF,
184 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xAA, 0xAB, 0xAC, 0xAD,
185 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xBA, 0xBB, 0xBC, 0xBD,
186 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xCA, 0xCB, 0xCC, 0xCD,
187 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xDA, 0xDB, 0xDC, 0xDD,
188 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xEA, 0xEB, 0xEC, 0xED,
189 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, 0xFA, 0xFB, 0xFC, 0xFD,
190 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xAA, 0xAB, 0xAC, 0xAD,
191 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xBA, 0xBB, 0xBC, 0xBD,
192 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xCA, 0xCB, 0xCC, 0xCD,
193 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xDA, 0xDB, 0xDC, 0xDD
194 };
195
196 OBufferStream os;
197 bufferSource(in) >> hexDecode() >> streamSink(os);
198
199 ConstBufferPtr buf1 = os.buf();
200 BOOST_CHECK_EQUAL_COLLECTIONS(out, out + sizeof(out), buf1->begin(), buf1->end());
201}
202
Yingdi Yu38317e52015-07-22 13:58:02 -0700203BOOST_AUTO_TEST_CASE(StepByStep)
204{
Davide Pesavento765abc92021-12-27 00:44:04 -0500205 const std::string in =
Yingdi Yu38317e52015-07-22 13:58:02 -0700206 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
207 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
208 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
209 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
210 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
211 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
212 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
213 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
214 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
215 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
216 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
217 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f";
Davide Pesavento765abc92021-12-27 00:44:04 -0500218 const uint8_t out[] = {
Yingdi Yu38317e52015-07-22 13:58:02 -0700219 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
220 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
221 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
222 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
223 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
224 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
225 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
226 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
227 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
228 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
229 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
230 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
231 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
232 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
233 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
234 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
235 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
236 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
237 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
238 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
239 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
240 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
241 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
242 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
243 };
244
Davide Pesavento765abc92021-12-27 00:44:04 -0500245 auto input = reinterpret_cast<const uint8_t*>(in.data());
Yingdi Yu38317e52015-07-22 13:58:02 -0700246 OBufferStream os;
247 StepSource source;
248 source >> hexDecode() >> streamSink(os);
Davide Pesavento765abc92021-12-27 00:44:04 -0500249 source.write({input, 128}); // complete chunk
250 source.write({input + 128, 64}); // first half of a chunk
251 source.write({input + 192, 64}); // second half of a chunk
252 source.write({input + 256, 127}); // odd number of byets
253 source.write({input + 383, 192}); // one and half chunk
254 source.write({input + 575, 193}); // remaining part
Yingdi Yu38317e52015-07-22 13:58:02 -0700255 source.end();
256
257 ConstBufferPtr buf1 = os.buf();
258 BOOST_CHECK_EQUAL_COLLECTIONS(out, out + sizeof(out), buf1->begin(), buf1->end());
259}
260
261BOOST_AUTO_TEST_CASE(OddByte)
262{
Davide Pesavento765abc92021-12-27 00:44:04 -0500263 const std::string in1 = "0001020304050";
Yingdi Yu38317e52015-07-22 13:58:02 -0700264 OBufferStream os1;
Davide Pesavento765abc92021-12-27 00:44:04 -0500265 BOOST_CHECK_THROW(bufferSource(in1) >> hexDecode() >> streamSink(os1), transform::Error);
Yingdi Yu38317e52015-07-22 13:58:02 -0700266
Davide Pesavento765abc92021-12-27 00:44:04 -0500267 const std::string in2 = "0001020304xy";
Yingdi Yu38317e52015-07-22 13:58:02 -0700268 OBufferStream os2;
Davide Pesavento765abc92021-12-27 00:44:04 -0500269 BOOST_CHECK_THROW(bufferSource(in2) >> hexDecode() >> streamSink(os2), transform::Error);
Yingdi Yu38317e52015-07-22 13:58:02 -0700270}
271
272BOOST_AUTO_TEST_CASE(EmptyInput)
273{
274 OBufferStream os;
275 StepSource source;
276 source >> hexDecode() >> streamSink(os);
277 source.end();
Davide Pesavento765abc92021-12-27 00:44:04 -0500278
Yingdi Yu38317e52015-07-22 13:58:02 -0700279 BOOST_CHECK_EQUAL(os.buf()->size(), 0);
280}
281
282BOOST_AUTO_TEST_SUITE_END() // TestHexDecode
283BOOST_AUTO_TEST_SUITE_END() // Transform
284BOOST_AUTO_TEST_SUITE_END() // Security
285
286} // namespace tests
287} // namespace transform
288} // namespace security
289} // namespace ndn