1a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn//
2a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn// Copyright (C) 2016 The Android Open Source Project
3a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn//
4a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn// Licensed under the Apache License, Version 2.0 (the "License");
5a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn// you may not use this file except in compliance with the License.
6a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn// You may obtain a copy of the License at
7a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn//
8a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn//      http://www.apache.org/licenses/LICENSE-2.0
9a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn//
10a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn// Unless required by applicable law or agreed to in writing, software
11a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn// distributed under the License is distributed on an "AS IS" BASIS,
12a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn// See the License for the specific language governing permissions and
14a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn// limitations under the License.
15a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn//
16a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn
17a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn#ifndef TPM_MANAGER_CLIENT_TPM_NVRAM_BINDER_PROXY_H_
18a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn#define TPM_MANAGER_CLIENT_TPM_NVRAM_BINDER_PROXY_H_
19a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn
20a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn#include <base/macros.h>
21a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn
22a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn#include "android/tpm_manager/ITpmNvram.h"
23a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn#include "tpm_manager/common/export.h"
24a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn#include "tpm_manager/common/tpm_nvram_interface.h"
25a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn
26a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahnnamespace tpm_manager {
27a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn
28a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn// An implementation of TpmNvramInterface that forwards requests to tpm_managerd
29a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn// using Binder.
30a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahnclass TPM_MANAGER_EXPORT TpmNvramBinderProxy : public TpmNvramInterface {
31a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn public:
32a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn  TpmNvramBinderProxy() = default;
33a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn  explicit TpmNvramBinderProxy(android::tpm_manager::ITpmNvram* binder);
34a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn  ~TpmNvramBinderProxy() override = default;
35a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn
36a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn  // Initializes the client. Returns true on success.
37a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn  bool Initialize();
38a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn
39a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn  // TpmNvramInterface methods. All assume a message loop and binder watcher
40a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn  // have already been configured elsewhere.
41a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn  void DefineSpace(const DefineSpaceRequest& request,
42a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn                   const DefineSpaceCallback& callback) override;
43a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn  void DestroySpace(const DestroySpaceRequest& request,
44a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn                    const DestroySpaceCallback& callback) override;
45a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn  void WriteSpace(const WriteSpaceRequest& request,
46a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn                  const WriteSpaceCallback& callback) override;
47a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn  void ReadSpace(const ReadSpaceRequest& request,
48a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn                 const ReadSpaceCallback& callback) override;
49a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn  void LockSpace(const LockSpaceRequest& request,
50a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn                 const LockSpaceCallback& callback) override;
51a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn  void ListSpaces(const ListSpacesRequest& request,
52a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn                  const ListSpacesCallback& callback) override;
53a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn  void GetSpaceInfo(const GetSpaceInfoRequest& request,
54a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn                    const GetSpaceInfoCallback& callback) override;
55a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn
56a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn private:
57a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn  android::sp<android::tpm_manager::ITpmNvram> default_binder_;
58a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn  android::tpm_manager::ITpmNvram* binder_ = nullptr;
59a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn
60a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn  DISALLOW_COPY_AND_ASSIGN(TpmNvramBinderProxy);
61a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn};
62a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn
63a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn}  // namespace tpm_manager
64a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn
65a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn#endif  // TPM_MANAGER_CLIENT_TPM_NVRAM_BINDER_PROXY_H_
66