blob: 13a2410bd18cd5d1e238a092e5a824f2b51baf42 [file] [log] [blame]
Zhiyi Zhang3e62a832015-07-20 18:36:31 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Davide Pesavento88a0d812017-08-19 21:31:42 -04002/*
3 * Copyright (c) 2013-2017 Regents of the University of California.
Zhiyi Zhang3e62a832015-07-20 18:36:31 -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 * @author Zhiyi Zhang <dreamerbarrychang@gmail.com>
22 */
23#ifndef NDN_CXX_SECURITY_SAFE_BAG_HPP
24#define NDN_CXX_SECURITY_SAFE_BAG_HPP
25
26#include "../common.hpp"
27#include "../data.hpp"
Davide Pesavento88a0d812017-08-19 21:31:42 -040028#include "../encoding/block.hpp"
Zhiyi Zhang3e62a832015-07-20 18:36:31 -070029#include "../encoding/buffer.hpp"
Zhiyi Zhang3e62a832015-07-20 18:36:31 -070030#include "security-common.hpp"
31
32namespace ndn {
33namespace security {
34
35/** @brief a secured container for sensitive information(certificate, private key)
36 */
37class SafeBag
38{
39public:
40 /**
41 * @brief Create a new empty SafeBag object
42 */
43 SafeBag();
44
45 /**
46 * @brief Create a new SafeBag object from the block
47 */
48 explicit
49 SafeBag(const Block& wire);
50
51 /**
52 * @brief Create a new Safe object with the given certificate and private key
53 *
54 * @param certificate A reference to the certificate data packet
55 * @param encryptedKeyBag A reference to the Buffer of private key in PKCS#8
56 */
57 SafeBag(const Data& certificate,
58 const Buffer& encryptedKeyBag);
59
60 /**
61 * @brief Create a new Safe object with the given certificate and private key
62 *
63 * @param certificate A reference to the certificate data packet
64 * @param encryptedKey A reference to the uint8_t* of private key in PKCS#8
65 * @param encryptedKeyLen The length of the encryptedKey
66 */
67 SafeBag(const Data& certificate,
68 const uint8_t* encryptedKey,
69 size_t encryptedKeyLen);
70
71public:
72 /**
73 * @brief Fast encoding or block size estimation
74 */
75 template<encoding::Tag TAG>
76 size_t
77 wireEncode(EncodingImpl<TAG>& encoder) const;
78
79 /**
80 * @brief Encode to a wire format
81 */
82 const Block&
83 wireEncode() const;
84
85 /**
86 * @brief Decode the input from wire format
87 */
88 void
89 wireDecode(const Block& wire);
90
91public:
92 /**
93 * @brief Get the certificate data packet from safe bag
94 */
95 const Data&
96 getCertificate() const
97 {
98 return m_certificate;
99 }
100
101 /**
102 * @brief Get the private key in PKCS#8 from safe bag
103 */
104 const Buffer&
105 getEncryptedKeyBag() const
106 {
107 return m_encryptedKeyBag;
108 }
109
110private:
111 Data m_certificate;
112 Buffer m_encryptedKeyBag;
113
114 mutable Block m_wire;
115};
116
Davide Pesavento88a0d812017-08-19 21:31:42 -0400117NDN_CXX_DECLARE_WIRE_ENCODE_INSTANTIATIONS(SafeBag);
118
Zhiyi Zhang3e62a832015-07-20 18:36:31 -0700119} // namespace security
120} // namespace ndn
121
122#endif // NDN_CXX_SECURITY_SAFE_BAG_HPP