blob: ea69b8da3cb2af219bc62cea27b0660407a94698 [file] [log] [blame]
Yingdi Yu38317e52015-07-22 13:58:02 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
Davide Pesavento794f6872017-05-15 23:33:38 -04003 * Copyright (c) 2013-2017 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
22#ifndef NDN_CXX_SECURITY_TRANSFORM_BASE64_DECODE_HPP
23#define NDN_CXX_SECURITY_TRANSFORM_BASE64_DECODE_HPP
24
25#include "transform-base.hpp"
26
27namespace ndn {
28namespace security {
29namespace transform {
30
31/**
32 * @brief The module to perform Base64 decoding transformation.
33 */
34class Base64Decode : public Transform
35{
36public:
37 /**
38 * @brief Create a base64 decoding module
39 *
40 * @p expectNewlineEvery64Bytes if true, expect newline after every 64 bytes, otherwise expect
41 * all input to be in a single line. Output is undefined if input
42 * does not conform to the requirement.
43 */
44 explicit
45 Base64Decode(bool expectNewlineEvery64Bytes = true);
46
47private:
48
49 /**
50 * @brief Read partial transformation results into output buffer and write them into next module.
51 */
Davide Pesavento57c07df2016-12-11 18:41:45 -050052 void
Yingdi Yu38317e52015-07-22 13:58:02 -070053 preTransform() final;
54
55 /**
56 * @brief Decode data @p buf in base64 format
57 *
58 * @return number of bytes that have been accepted by the converter
59 */
Davide Pesavento57c07df2016-12-11 18:41:45 -050060 size_t
Yingdi Yu38317e52015-07-22 13:58:02 -070061 convert(const uint8_t* buf, size_t size) final;
62
63 /**
64 * @brief Finalize base64 decoding
65 *
66 * This method with read all decoding results from the converter and write them into next module.
67 */
Davide Pesavento57c07df2016-12-11 18:41:45 -050068 void
Yingdi Yu38317e52015-07-22 13:58:02 -070069 finalize() final;
70
71 /**
72 * @brief Try to fill partial decoding result into output buffer.
73 */
74 void
75 fillOutputBuffer();
76
77private:
78 class Impl;
Davide Pesavento794f6872017-05-15 23:33:38 -040079 const unique_ptr<Impl> m_impl;
Yingdi Yu38317e52015-07-22 13:58:02 -070080};
81
82unique_ptr<Transform>
83base64Decode(bool expectNewlineEvery64Bytes = true);
84
85} // namespace transform
86} // namespace security
87} // namespace ndn
88
89#endif // NDN_CXX_SECURITY_TRANSFORM_BASE64_DECODE_HPP