blob: 5a40de4cba443919fe106de4e28cd680ba4cf573 [file] [log] [blame]
Yingdi Yu0b60e7a2015-07-16 21:05:11 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Junxiao Shi68b53852018-07-25 13:56:38 -06002/*
3 * Copyright (c) 2013-2018 Regents of the University of California.
Yingdi Yu0b60e7a2015-07-16 21:05:11 -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_SECURITY_TPM_BACK_END_MEM_HPP
23#define NDN_SECURITY_TPM_BACK_END_MEM_HPP
24
25#include "back-end.hpp"
26
27namespace ndn {
28namespace security {
29namespace tpm {
30
31/**
32 * @brief The back-end implementation of in-memory TPM.
33 */
34class BackEndMem : public BackEnd
35{
36public:
Yingdi Yufe4733a2015-10-22 14:24:12 -070037 /**
38 * @brief Create memory-based TPM backend
39 * @param location Not used (required by the TPM-registration interface)
40 */
Yingdi Yu0b60e7a2015-07-16 21:05:11 -070041 explicit
Yingdi Yufe4733a2015-10-22 14:24:12 -070042 BackEndMem(const std::string& location = "");
Yingdi Yu0b60e7a2015-07-16 21:05:11 -070043
44 ~BackEndMem() override;
45
Yingdi Yufe4733a2015-10-22 14:24:12 -070046 static const std::string&
47 getScheme();
48
Yingdi Yu0b60e7a2015-07-16 21:05:11 -070049private: // inherited from tpm::BackEnd
50
51 /**
52 * @return True if a key with name @p keyName exists in TPM.
53 */
54 bool
55 doHasKey(const Name& keyName) const final;
56
57 /**
58 * @return The handle of a key with name @p keyName, or nullptr if the key does not exist
59 */
60 unique_ptr<KeyHandle>
61 doGetKeyHandle(const Name& keyName) const final;
62
63 /**
64 * @brief Create key for @p identityName according to @p params.
65 *
66 * The created key is named as: /<identityName>/[keyId]/KEY
67 * The key name is set in the returned KeyHandle.
68 * If the key with the same name is created, the old one will be removed.
69 * The behavior of using KeyHandler of removed key is undefined.
70 *
71 * @return The handle of the created key.
72 */
73 unique_ptr<KeyHandle>
74 doCreateKey(const Name& identityName, const KeyParams& params) final;
75
76 /**
77 * @brief Delete a key with name @p keyName.
78 *
Yingdi Yufe4733a2015-10-22 14:24:12 -070079 * @throw Error the deletion failed
Yingdi Yu0b60e7a2015-07-16 21:05:11 -070080 */
81 void
82 doDeleteKey(const Name& keyName) final;
83
84 /**
85 * @return A private key with name @p keyName in encrypted PKCS #8 format using password @p pw
Yingdi Yufe4733a2015-10-22 14:24:12 -070086 * @throw Error the key cannot be exported, e.g., not enough privilege
Yingdi Yu0b60e7a2015-07-16 21:05:11 -070087 */
88 ConstBufferPtr
89 doExportKey(const Name& keyName, const char* pw, size_t pwLen) final;
90
91 /**
92 * @brief Import a private key in encrypted PKCS #8 format
93 *
94 * @param keyName The name of imported private key
95 * @param buf Pointer to the key in encrypted PKCS #8 format
96 * @param size The size of the key in encrypted PKCS #8 format
97 * @param pw The password to decrypt the key
98 * @param pwLen The length of password
Yingdi Yufe4733a2015-10-22 14:24:12 -070099 * @throw Error import failed
Yingdi Yu0b60e7a2015-07-16 21:05:11 -0700100 */
101 void
102 doImportKey(const Name& keyName, const uint8_t* buf, size_t size, const char* pw, size_t pwLen) final;
103
104private:
105 class Impl;
Davide Pesavento794f6872017-05-15 23:33:38 -0400106 const unique_ptr<Impl> m_impl;
Yingdi Yu0b60e7a2015-07-16 21:05:11 -0700107};
108
109} // namespace tpm
110} // namespace security
111} // namespace ndn
112
113#endif // NDN_SECURITY_TPM_BACK_END_MEM_HPP