blob: 203716f743acf1a545aebd241db3ecfc9cefbf54 [file] [log] [blame]
Yingdi Yu38317e52015-07-22 13:58:02 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Davide Pesavento8aad3722017-09-16 20:57:28 -04002/*
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
Davide Pesavento8aad3722017-09-16 20:57:28 -040047 ~Base64Decode();
Yingdi Yu38317e52015-07-22 13:58:02 -070048
Davide Pesavento8aad3722017-09-16 20:57:28 -040049private:
Yingdi Yu38317e52015-07-22 13:58:02 -070050 /**
51 * @brief Read partial transformation results into output buffer and write them into next module.
52 */
Davide Pesavento57c07df2016-12-11 18:41:45 -050053 void
Yingdi Yu38317e52015-07-22 13:58:02 -070054 preTransform() final;
55
56 /**
57 * @brief Decode data @p buf in base64 format
58 *
59 * @return number of bytes that have been accepted by the converter
60 */
Davide Pesavento57c07df2016-12-11 18:41:45 -050061 size_t
Yingdi Yu38317e52015-07-22 13:58:02 -070062 convert(const uint8_t* buf, size_t size) final;
63
64 /**
65 * @brief Finalize base64 decoding
66 *
67 * This method with read all decoding results from the converter and write them into next module.
68 */
Davide Pesavento57c07df2016-12-11 18:41:45 -050069 void
Yingdi Yu38317e52015-07-22 13:58:02 -070070 finalize() final;
71
72 /**
73 * @brief Try to fill partial decoding result into output buffer.
74 */
75 void
76 fillOutputBuffer();
77
78private:
79 class Impl;
Davide Pesavento794f6872017-05-15 23:33:38 -040080 const unique_ptr<Impl> m_impl;
Yingdi Yu38317e52015-07-22 13:58:02 -070081};
82
83unique_ptr<Transform>
84base64Decode(bool expectNewlineEvery64Bytes = true);
85
86} // namespace transform
87} // namespace security
88} // namespace ndn
89
90#endif // NDN_CXX_SECURITY_TRANSFORM_BASE64_DECODE_HPP