blob: 51a2672ef9c1446978bc9c9e176ee81595c73a92 [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 Pesavento47ce2ee2023-05-09 01:33:33 -04003 * Copyright (c) 2013-2023 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
Davide Pesavento47ce2ee2023-05-09 01:33:33 -040031namespace ndn::tests {
32
33using namespace ndn::security::transform;
Yingdi Yu38317e52015-07-22 13:58:02 -070034
35BOOST_AUTO_TEST_SUITE(Security)
36BOOST_AUTO_TEST_SUITE(Transform)
37BOOST_AUTO_TEST_SUITE(TestHexDecode)
38
39BOOST_AUTO_TEST_CASE(Basic)
40{
Davide Pesavento765abc92021-12-27 00:44:04 -050041 const std::string in =
Yingdi Yu38317e52015-07-22 13:58:02 -070042 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
43 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
44 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
45 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f";
Davide Pesavento765abc92021-12-27 00:44:04 -050046 const uint8_t out[] = {
Yingdi Yu38317e52015-07-22 13:58:02 -070047 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
48 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
49 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
50 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
51 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
52 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
53 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
54 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
55 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
56 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
57 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
58 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
59 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
60 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
61 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
62 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
63 };
64
65 OBufferStream os;
66 bufferSource(in) >> hexDecode() >> streamSink(os);
67
68 ConstBufferPtr buf1 = os.buf();
69 BOOST_CHECK_EQUAL_COLLECTIONS(out, out + sizeof(out), buf1->begin(), buf1->end());
70}
71
72BOOST_AUTO_TEST_CASE(UpperCase)
73{
Davide Pesavento765abc92021-12-27 00:44:04 -050074 const std::string in =
Yingdi Yu38317e52015-07-22 13:58:02 -070075 "000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F"
76 "000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F"
77 "000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F"
78 "000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F";
Davide Pesavento765abc92021-12-27 00:44:04 -050079 const uint8_t out[] = {
Yingdi Yu38317e52015-07-22 13:58:02 -070080 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
81 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
82 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
83 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
84 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
85 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
86 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
87 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
88 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
89 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
90 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
91 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
92 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
93 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
94 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
95 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
96 };
97
98 OBufferStream os;
99 bufferSource(in) >> hexDecode() >> streamSink(os);
100
101 ConstBufferPtr buf1 = os.buf();
102 BOOST_CHECK_EQUAL_COLLECTIONS(out, out + sizeof(out), buf1->begin(), buf1->end());
103}
104
105BOOST_AUTO_TEST_CASE(MixCase)
106{
Davide Pesavento765abc92021-12-27 00:44:04 -0500107 const std::string in =
Yingdi Yu38317e52015-07-22 13:58:02 -0700108 "000102030405060708090a0b0c0d0e0f"
109 "101112131415161718191a1b1c1d1e1f"
110 "202122232425262728292a2b2c2d2e2f"
111 "303132333435363738393a3b3c3d3e3f"
112 "404142434445464748494a4b4c4d4e4f"
113 "505152535455565758595a5b5c5d5e5f"
114 "606162636465666768696a6b6c6d6e6f"
115 "707172737475767778797a7b7c7d7e7f"
116 "808182838485868788898a8b8c8d8e8f"
117 "909192939495969798999a9b9c9d9e9f"
118 "a0a1a2a3a4a5a6a7a8a9aaabacadaeaf"
119 "b0b1b2b3b4b5b6b7b8b9babbbcbdbebf"
120 "c0c1c2c3c4c5c6c7c8c9cacbcccdcecf"
121 "d0d1d2d3d4d5d6d7d8d9dadbdcdddedf"
122 "e0e1e2e3e4e5e6e7e8e9eaebecedeeef"
123 "f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff"
124 "000102030405060708090A0B0C0D0E0F"
125 "101112131415161718191A1B1C1D1E1F"
126 "202122232425262728292A2B2C2D2E2F"
127 "303132333435363738393A3B3C3D3E3F"
128 "404142434445464748494A4B4C4D4E4F"
129 "505152535455565758595A5B5C5D5E5F"
130 "606162636465666768696A6B6C6D6E6F"
131 "707172737475767778797A7B7C7D7E7F"
132 "808182838485868788898A8B8C8D8E8F"
133 "909192939495969798999A9B9C9D9E9F"
134 "A0A1A2A3A4A5A6A7A8A9AAABACADAEAF"
135 "B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF"
136 "C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF"
137 "D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF"
138 "E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF"
139 "F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF"
140 "aaabacadaeafaAaBaCaD"
141 "babbbcbdbebfbAbBbCbD"
142 "cacbcccdcecfcAcBcCcD"
143 "dadbdcdddedfdAdBdCdD"
144 "eaebecedeeefeAeBeCeD"
145 "fafbfcfdfefffAfBfCfD"
146 "AaAbAcAdAeAfAAABACAD"
147 "BaBbBcBdBeBfBABBBCBD"
148 "CaCbCcCdCeCfCACBCCCD"
149 "DaDbDcDdDeDfDADBDCDD";
Davide Pesavento765abc92021-12-27 00:44:04 -0500150 const uint8_t out[] = {
Yingdi Yu38317e52015-07-22 13:58:02 -0700151 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
152 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
153 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
154 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
155 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
156 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
157 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
158 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
159 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
160 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,
161 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
162 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
163 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
164 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
165 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
166 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF,
167 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
168 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
169 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
170 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
171 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
172 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
173 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
174 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
175 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
176 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,
177 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
178 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
179 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
180 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
181 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
182 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF,
183 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xAA, 0xAB, 0xAC, 0xAD,
184 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xBA, 0xBB, 0xBC, 0xBD,
185 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xCA, 0xCB, 0xCC, 0xCD,
186 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xDA, 0xDB, 0xDC, 0xDD,
187 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xEA, 0xEB, 0xEC, 0xED,
188 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, 0xFA, 0xFB, 0xFC, 0xFD,
189 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xAA, 0xAB, 0xAC, 0xAD,
190 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xBA, 0xBB, 0xBC, 0xBD,
191 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xCA, 0xCB, 0xCC, 0xCD,
192 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xDA, 0xDB, 0xDC, 0xDD
193 };
194
195 OBufferStream os;
196 bufferSource(in) >> hexDecode() >> streamSink(os);
197
198 ConstBufferPtr buf1 = os.buf();
199 BOOST_CHECK_EQUAL_COLLECTIONS(out, out + sizeof(out), buf1->begin(), buf1->end());
200}
201
Yingdi Yu38317e52015-07-22 13:58:02 -0700202BOOST_AUTO_TEST_CASE(StepByStep)
203{
Davide Pesavento765abc92021-12-27 00:44:04 -0500204 const std::string in =
Yingdi Yu38317e52015-07-22 13:58:02 -0700205 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
206 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
207 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
208 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
209 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
210 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
211 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
212 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
213 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
214 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
215 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f"
216 "000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f";
Davide Pesavento765abc92021-12-27 00:44:04 -0500217 const uint8_t out[] = {
Yingdi Yu38317e52015-07-22 13:58:02 -0700218 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
219 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 };
243
Davide Pesavento765abc92021-12-27 00:44:04 -0500244 auto input = reinterpret_cast<const uint8_t*>(in.data());
Yingdi Yu38317e52015-07-22 13:58:02 -0700245 OBufferStream os;
246 StepSource source;
247 source >> hexDecode() >> streamSink(os);
Davide Pesavento765abc92021-12-27 00:44:04 -0500248 source.write({input, 128}); // complete chunk
249 source.write({input + 128, 64}); // first half of a chunk
250 source.write({input + 192, 64}); // second half of a chunk
251 source.write({input + 256, 127}); // odd number of byets
252 source.write({input + 383, 192}); // one and half chunk
253 source.write({input + 575, 193}); // remaining part
Yingdi Yu38317e52015-07-22 13:58:02 -0700254 source.end();
255
256 ConstBufferPtr buf1 = os.buf();
257 BOOST_CHECK_EQUAL_COLLECTIONS(out, out + sizeof(out), buf1->begin(), buf1->end());
258}
259
260BOOST_AUTO_TEST_CASE(OddByte)
261{
Davide Pesavento765abc92021-12-27 00:44:04 -0500262 const std::string in1 = "0001020304050";
Yingdi Yu38317e52015-07-22 13:58:02 -0700263 OBufferStream os1;
Davide Pesavento47ce2ee2023-05-09 01:33:33 -0400264 BOOST_CHECK_THROW(bufferSource(in1) >> hexDecode() >> streamSink(os1), Error);
Yingdi Yu38317e52015-07-22 13:58:02 -0700265
Davide Pesavento765abc92021-12-27 00:44:04 -0500266 const std::string in2 = "0001020304xy";
Yingdi Yu38317e52015-07-22 13:58:02 -0700267 OBufferStream os2;
Davide Pesavento47ce2ee2023-05-09 01:33:33 -0400268 BOOST_CHECK_THROW(bufferSource(in2) >> hexDecode() >> streamSink(os2), Error);
Yingdi Yu38317e52015-07-22 13:58:02 -0700269}
270
271BOOST_AUTO_TEST_CASE(EmptyInput)
272{
273 OBufferStream os;
274 StepSource source;
275 source >> hexDecode() >> streamSink(os);
276 source.end();
Davide Pesavento765abc92021-12-27 00:44:04 -0500277
Yingdi Yu38317e52015-07-22 13:58:02 -0700278 BOOST_CHECK_EQUAL(os.buf()->size(), 0);
279}
280
281BOOST_AUTO_TEST_SUITE_END() // TestHexDecode
282BOOST_AUTO_TEST_SUITE_END() // Transform
283BOOST_AUTO_TEST_SUITE_END() // Security
284
Davide Pesavento47ce2ee2023-05-09 01:33:33 -0400285} // namespace ndn::tests