blob: 07ceb6e72927232bc42ceef548c989d9d8256e1c [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/**
Davide Pesavento5ee8ec02018-09-01 19:06:12 -040032 * @brief The back-end implementation of an in-memory TPM.
Yingdi Yu0b60e7a2015-07-16 21:05:11 -070033 */
Davide Pesavento5ee8ec02018-09-01 19:06:12 -040034class BackEndMem final : public BackEnd
Yingdi Yu0b60e7a2015-07-16 21:05:11 -070035{
36public:
Yingdi Yufe4733a2015-10-22 14:24:12 -070037 /**
Davide Pesavento5ee8ec02018-09-01 19:06:12 -040038 * @brief Create memory-based TPM backend.
39 *
40 * @param location Not used (required by the TPM registration interface).
Yingdi Yufe4733a2015-10-22 14:24:12 -070041 */
Yingdi Yu0b60e7a2015-07-16 21:05:11 -070042 explicit
Yingdi Yufe4733a2015-10-22 14:24:12 -070043 BackEndMem(const std::string& location = "");
Yingdi Yu0b60e7a2015-07-16 21:05:11 -070044
Davide Pesavento5ee8ec02018-09-01 19:06:12 -040045 ~BackEndMem() final;
Yingdi Yu0b60e7a2015-07-16 21:05:11 -070046
Yingdi Yufe4733a2015-10-22 14:24:12 -070047 static const std::string&
48 getScheme();
49
Yingdi Yu0b60e7a2015-07-16 21:05:11 -070050private: // inherited from tpm::BackEnd
Yingdi Yu0b60e7a2015-07-16 21:05:11 -070051 bool
52 doHasKey(const Name& keyName) const final;
53
Yingdi Yu0b60e7a2015-07-16 21:05:11 -070054 unique_ptr<KeyHandle>
55 doGetKeyHandle(const Name& keyName) const final;
56
Yingdi Yu0b60e7a2015-07-16 21:05:11 -070057 unique_ptr<KeyHandle>
58 doCreateKey(const Name& identityName, const KeyParams& params) final;
59
Yingdi Yu0b60e7a2015-07-16 21:05:11 -070060 void
61 doDeleteKey(const Name& keyName) final;
62
Yingdi Yu0b60e7a2015-07-16 21:05:11 -070063 ConstBufferPtr
64 doExportKey(const Name& keyName, const char* pw, size_t pwLen) final;
65
Yingdi Yu0b60e7a2015-07-16 21:05:11 -070066 void
67 doImportKey(const Name& keyName, const uint8_t* buf, size_t size, const char* pw, size_t pwLen) final;
68
69private:
70 class Impl;
Davide Pesavento794f6872017-05-15 23:33:38 -040071 const unique_ptr<Impl> m_impl;
Yingdi Yu0b60e7a2015-07-16 21:05:11 -070072};
73
74} // namespace tpm
75} // namespace security
76} // namespace ndn
77
78#endif // NDN_SECURITY_TPM_BACK_END_MEM_HPP