blob: 92c1905ff0b0cdac8122b810c6651df5df602e19 [file] [log] [blame]
Yingdi Yud12fb972015-08-01 17:38:49 -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 Yud12fb972015-08-01 17:38:49 -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_HMAC_FILTER_HPP
23#define NDN_CXX_SECURITY_TRANSFORM_HMAC_FILTER_HPP
24
25#include "transform-base.hpp"
26#include "../security-common.hpp"
27
28namespace ndn {
29namespace security {
30namespace transform {
31
32/**
33 * @brief The module to generate HMAC for input data.
34 */
35class HmacFilter : public Transform
36{
37public:
Yingdi Yud12fb972015-08-01 17:38:49 -070038 /**
Davide Pesavento9219f582017-09-17 13:58:29 -040039 * @brief Create a module to generate HMAC using digest algorithm @p algo and key @p key
Yingdi Yud12fb972015-08-01 17:38:49 -070040 * @pre @p key must not be nullptr, and @p size must be a positive integer.
41 */
42 HmacFilter(DigestAlgorithm algo, const uint8_t* key, size_t keyLen);
43
Davide Pesavento8aad3722017-09-16 20:57:28 -040044 ~HmacFilter();
45
Yingdi Yud12fb972015-08-01 17:38:49 -070046private:
47 /**
Davide Pesavento9219f582017-09-17 13:58:29 -040048 * @brief Write data @p buf into HMAC signer
Yingdi Yud12fb972015-08-01 17:38:49 -070049 *
50 * @return The number of bytes that are actually accepted
51 */
Davide Pesavento57c07df2016-12-11 18:41:45 -050052 size_t
Yingdi Yud12fb972015-08-01 17:38:49 -070053 convert(const uint8_t* buf, size_t size) final;
54
55 /**
56 * @brief Finalize HMAC calculation and write the HMAC into next module.
57 */
Davide Pesavento57c07df2016-12-11 18:41:45 -050058 void
Yingdi Yud12fb972015-08-01 17:38:49 -070059 finalize() final;
60
61private:
62 class Impl;
Davide Pesavento794f6872017-05-15 23:33:38 -040063 const unique_ptr<Impl> m_impl;
Yingdi Yud12fb972015-08-01 17:38:49 -070064};
65
66unique_ptr<Transform>
67hmacFilter(DigestAlgorithm algo, const uint8_t* key, size_t keyLen);
68
69} // namespace transform
70} // namespace security
71} // namespace ndn
72
73#endif // NDN_CXX_SECURITY_TRANSFORM_HMAC_FILTER_HPP