1 //
2 // Copyright (C) 2015 The Android Open Source Project
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //      http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16 
17 #ifndef ATTESTATION_CLIENT_DBUS_PROXY_H_
18 #define ATTESTATION_CLIENT_DBUS_PROXY_H_
19 
20 #include "attestation/common/attestation_interface.h"
21 
22 #include <string>
23 
24 #include <base/memory/ref_counted.h>
25 #include <dbus/bus.h>
26 #include <dbus/object_proxy.h>
27 
28 namespace attestation {
29 
30 // An implementation of AttestationInterface that forwards requests over D-Bus.
31 // Usage:
32 //   std::unique_ptr<AttestationInterface> attestation = new DBusProxy();
33 //   attestation->Initialize();
34 //   attestation->CreateGoogleAttestedKey(...);
35 class DBusProxy : public AttestationInterface {
36  public:
37   DBusProxy();
38   virtual ~DBusProxy();
39 
40   // AttestationInterface methods.
41   bool Initialize() override;
42   void CreateGoogleAttestedKey(
43       const CreateGoogleAttestedKeyRequest& request,
44       const CreateGoogleAttestedKeyCallback& callback) override;
45   void GetKeyInfo(const GetKeyInfoRequest& request,
46                   const GetKeyInfoCallback& callback) override;
47   void GetEndorsementInfo(const GetEndorsementInfoRequest& request,
48                           const GetEndorsementInfoCallback& callback) override;
49   void GetAttestationKeyInfo(
50       const GetAttestationKeyInfoRequest& request,
51       const GetAttestationKeyInfoCallback& callback) override;
52   void ActivateAttestationKey(
53       const ActivateAttestationKeyRequest& request,
54       const ActivateAttestationKeyCallback& callback) override;
55   void CreateCertifiableKey(
56       const CreateCertifiableKeyRequest& request,
57       const CreateCertifiableKeyCallback& callback) override;
58   void Decrypt(const DecryptRequest& request,
59                const DecryptCallback& callback) override;
60   void Sign(const SignRequest& request, const SignCallback& callback) override;
61   void RegisterKeyWithChapsToken(
62       const RegisterKeyWithChapsTokenRequest& request,
63       const RegisterKeyWithChapsTokenCallback& callback) override;
64 
65   // Useful for testing.
set_object_proxy(dbus::ObjectProxy * object_proxy)66   void set_object_proxy(dbus::ObjectProxy* object_proxy) {
67     object_proxy_ = object_proxy;
68   }
69 
70  private:
71   scoped_refptr<dbus::Bus> bus_;
72   dbus::ObjectProxy* object_proxy_;
73 };
74 
75 }  // namespace attestation
76 
77 #endif  // ATTESTATION_CLIENT_DBUS_PROXY_H_
78