blob: 77d477d3d344a5483b01dda9492ad7e8e6e88205 [file] [log] [blame]
Yingdi Yu38317e52015-07-22 13:58:02 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
3 * Copyright (c) 2013-2016 Regents of the University of California.
4 *
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
22#ifndef NDN_CXX_SECURITY_TRANSFORM_HEX_DECODE_HPP
23#define NDN_CXX_SECURITY_TRANSFORM_HEX_DECODE_HPP
24
25#include "transform-base.hpp"
26
27namespace ndn {
28namespace security {
29namespace transform {
30
31/**
32 * @brief The module to perform hexadecimal decoding transformation.
33 *
34 * For example, if the input is a string "012345", the output will be
35 * a byte stream: 0x01, 0x23, 0x45.
36 *
37 * If the total length of input is not even (2n + 1), the module will throw Error.
38 */
39class HexDecode : public Transform
40{
41public:
42 /**
43 * @brief Create a hex decoding module
44 */
45 HexDecode();
46
47private:
48 /**
49 * @brief Decode data @p buf, and write the result into output buffer directly.
50 *
51 * @return number of input bytes that are accepted
52 */
53 virtual size_t
54 convert(const uint8_t* buf, size_t size) final;
55
56 /**
57 * @throws Error if pending byte exists.
58 */
59 virtual void
60 finalize() final;
61
62 /**
63 * @return results of decoding concatenation of @p oddByte and @p hex.
64 */
65 unique_ptr<Transform::OBuffer>
66 toBytes(const uint8_t* hex, size_t hexLen);
67
68private:
69 bool m_hasOddByte;
70 uint8_t m_oddByte;
71};
72
73unique_ptr<Transform>
74hexDecode();
75
76} // namespace transform
77} // namespace security
78} // namespace ndn
79
80#endif // NDN_CXX_SECURITY_TRANSFORM_HEX_DECODE_HPP