1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROMEOS_DBUS_FAKE_CRYPTOHOME_CLIENT_H_
6 #define CHROMEOS_DBUS_FAKE_CRYPTOHOME_CLIENT_H_
10 #include "base/basictypes.h"
11 #include "base/memory/weak_ptr.h"
12 #include "chromeos/dbus/cryptohome_client.h"
16 class CHROMEOS_EXPORT FakeCryptohomeClient : public CryptohomeClient {
18 FakeCryptohomeClient();
19 virtual ~FakeCryptohomeClient();
21 virtual void Init(dbus::Bus* bus) override;
22 virtual void SetAsyncCallStatusHandlers(
23 const AsyncCallStatusHandler& handler,
24 const AsyncCallStatusWithDataHandler& data_handler) override;
25 virtual void ResetAsyncCallStatusHandlers() override;
26 virtual void WaitForServiceToBeAvailable(
27 const WaitForServiceToBeAvailableCallback& callback) override;
28 virtual void IsMounted(const BoolDBusMethodCallback& callback) override;
29 virtual bool Unmount(bool* success) override;
30 virtual void AsyncCheckKey(const std::string& username,
31 const std::string& key,
32 const AsyncMethodCallback& callback) override;
33 virtual void AsyncMigrateKey(const std::string& username,
34 const std::string& from_key,
35 const std::string& to_key,
36 const AsyncMethodCallback& callback) override;
37 virtual void AsyncRemove(const std::string& username,
38 const AsyncMethodCallback& callback) override;
39 virtual void GetSystemSalt(const GetSystemSaltCallback& callback) override;
40 virtual void GetSanitizedUsername(
41 const std::string& username,
42 const StringDBusMethodCallback& callback) override;
43 virtual std::string BlockingGetSanitizedUsername(
44 const std::string& username) override;
45 virtual void AsyncMount(const std::string& username,
46 const std::string& key,
48 const AsyncMethodCallback& callback) override;
49 virtual void AsyncAddKey(const std::string& username,
50 const std::string& key,
51 const std::string& new_key,
52 const AsyncMethodCallback& callback) override;
53 virtual void AsyncMountGuest(const AsyncMethodCallback& callback) override;
54 virtual void AsyncMountPublic(const std::string& public_mount_id,
56 const AsyncMethodCallback& callback) override;
57 virtual void TpmIsReady(const BoolDBusMethodCallback& callback) override;
58 virtual void TpmIsEnabled(const BoolDBusMethodCallback& callback) override;
59 virtual bool CallTpmIsEnabledAndBlock(bool* enabled) override;
60 virtual void TpmGetPassword(
61 const StringDBusMethodCallback& callback) override;
62 virtual void TpmIsOwned(const BoolDBusMethodCallback& callback) override;
63 virtual bool CallTpmIsOwnedAndBlock(bool* owned) override;
64 virtual void TpmIsBeingOwned(const BoolDBusMethodCallback& callback) override;
65 virtual bool CallTpmIsBeingOwnedAndBlock(bool* owning) override;
66 virtual void TpmCanAttemptOwnership(
67 const VoidDBusMethodCallback& callback) override;
68 virtual void TpmClearStoredPassword(
69 const VoidDBusMethodCallback& callback) override;
70 virtual bool CallTpmClearStoredPasswordAndBlock() override;
71 virtual void Pkcs11IsTpmTokenReady(
72 const BoolDBusMethodCallback& callback) override;
73 virtual void Pkcs11GetTpmTokenInfo(
74 const Pkcs11GetTpmTokenInfoCallback& callback) override;
75 virtual void Pkcs11GetTpmTokenInfoForUser(
76 const std::string& username,
77 const Pkcs11GetTpmTokenInfoCallback& callback) override;
78 virtual bool InstallAttributesGet(const std::string& name,
79 std::vector<uint8>* value,
80 bool* successful) override;
81 virtual bool InstallAttributesSet(const std::string& name,
82 const std::vector<uint8>& value,
83 bool* successful) override;
84 virtual bool InstallAttributesFinalize(bool* successful) override;
85 virtual void InstallAttributesIsReady(
86 const BoolDBusMethodCallback& callback) override;
87 virtual bool InstallAttributesIsInvalid(bool* is_invalid) override;
88 virtual bool InstallAttributesIsFirstInstall(bool* is_first_install) override;
89 virtual void TpmAttestationIsPrepared(
90 const BoolDBusMethodCallback& callback) override;
91 virtual void TpmAttestationIsEnrolled(
92 const BoolDBusMethodCallback& callback) override;
93 virtual void AsyncTpmAttestationCreateEnrollRequest(
94 chromeos::attestation::PrivacyCAType pca_type,
95 const AsyncMethodCallback& callback) override;
96 virtual void AsyncTpmAttestationEnroll(
97 chromeos::attestation::PrivacyCAType pca_type,
98 const std::string& pca_response,
99 const AsyncMethodCallback& callback) override;
100 virtual void AsyncTpmAttestationCreateCertRequest(
101 chromeos::attestation::PrivacyCAType pca_type,
102 attestation::AttestationCertificateProfile certificate_profile,
103 const std::string& user_id,
104 const std::string& request_origin,
105 const AsyncMethodCallback& callback) override;
106 virtual void AsyncTpmAttestationFinishCertRequest(
107 const std::string& pca_response,
108 attestation::AttestationKeyType key_type,
109 const std::string& user_id,
110 const std::string& key_name,
111 const AsyncMethodCallback& callback) override;
112 virtual void TpmAttestationDoesKeyExist(
113 attestation::AttestationKeyType key_type,
114 const std::string& user_id,
115 const std::string& key_name,
116 const BoolDBusMethodCallback& callback) override;
117 virtual void TpmAttestationGetCertificate(
118 attestation::AttestationKeyType key_type,
119 const std::string& user_id,
120 const std::string& key_name,
121 const DataMethodCallback& callback) override;
122 virtual void TpmAttestationGetPublicKey(
123 attestation::AttestationKeyType key_type,
124 const std::string& user_id,
125 const std::string& key_name,
126 const DataMethodCallback& callback) override;
127 virtual void TpmAttestationRegisterKey(
128 attestation::AttestationKeyType key_type,
129 const std::string& user_id,
130 const std::string& key_name,
131 const AsyncMethodCallback& callback) override;
132 virtual void TpmAttestationSignEnterpriseChallenge(
133 attestation::AttestationKeyType key_type,
134 const std::string& user_id,
135 const std::string& key_name,
136 const std::string& domain,
137 const std::string& device_id,
138 attestation::AttestationChallengeOptions options,
139 const std::string& challenge,
140 const AsyncMethodCallback& callback) override;
141 virtual void TpmAttestationSignSimpleChallenge(
142 attestation::AttestationKeyType key_type,
143 const std::string& user_id,
144 const std::string& key_name,
145 const std::string& challenge,
146 const AsyncMethodCallback& callback) override;
147 virtual void TpmAttestationGetKeyPayload(
148 attestation::AttestationKeyType key_type,
149 const std::string& user_id,
150 const std::string& key_name,
151 const DataMethodCallback& callback) override;
152 virtual void TpmAttestationSetKeyPayload(
153 attestation::AttestationKeyType key_type,
154 const std::string& user_id,
155 const std::string& key_name,
156 const std::string& payload,
157 const BoolDBusMethodCallback& callback) override;
158 virtual void TpmAttestationDeleteKeys(
159 attestation::AttestationKeyType key_type,
160 const std::string& user_id,
161 const std::string& key_prefix,
162 const BoolDBusMethodCallback& callback) override;
163 virtual void GetKeyDataEx(
164 const cryptohome::AccountIdentifier& id,
165 const cryptohome::AuthorizationRequest& auth,
166 const cryptohome::GetKeyDataRequest& request,
167 const ProtobufMethodCallback& callback) override;
168 virtual void CheckKeyEx(
169 const cryptohome::AccountIdentifier& id,
170 const cryptohome::AuthorizationRequest& auth,
171 const cryptohome::CheckKeyRequest& request,
172 const ProtobufMethodCallback& callback) override;
173 virtual void MountEx(
174 const cryptohome::AccountIdentifier& id,
175 const cryptohome::AuthorizationRequest& auth,
176 const cryptohome::MountRequest& request,
177 const ProtobufMethodCallback& callback) override;
178 virtual void AddKeyEx(
179 const cryptohome::AccountIdentifier& id,
180 const cryptohome::AuthorizationRequest& auth,
181 const cryptohome::AddKeyRequest& request,
182 const ProtobufMethodCallback& callback) override;
183 virtual void UpdateKeyEx(
184 const cryptohome::AccountIdentifier& id,
185 const cryptohome::AuthorizationRequest& auth,
186 const cryptohome::UpdateKeyRequest& request,
187 const ProtobufMethodCallback& callback) override;
188 virtual void RemoveKeyEx(const cryptohome::AccountIdentifier& id,
189 const cryptohome::AuthorizationRequest& auth,
190 const cryptohome::RemoveKeyRequest& request,
191 const ProtobufMethodCallback& callback) override;
192 virtual void GetBootAttribute(
193 const cryptohome::GetBootAttributeRequest& request,
194 const ProtobufMethodCallback& callback) override;
195 virtual void SetBootAttribute(
196 const cryptohome::SetBootAttributeRequest& request,
197 const ProtobufMethodCallback& callback) override;
198 virtual void FlushAndSignBootAttributes(
199 const cryptohome::FlushAndSignBootAttributesRequest& request,
200 const ProtobufMethodCallback& callback) override;
202 // Changes the behavior of WaitForServiceToBeAvailable(). This method runs
203 // pending callbacks if is_available is true.
204 void SetServiceIsAvailable(bool is_available);
206 // Sets the unmount result of Unmount() call.
207 void set_unmount_result(bool result) {
208 unmount_result_= result;
211 // Sets the system salt which will be returned from GetSystemSalt(). By
212 // default, GetSystemSalt() returns the value generated by
213 // GetStubSystemSalt().
214 void set_system_salt(const std::vector<uint8>& system_salt) {
215 system_salt_ = system_salt;
218 // Returns the stub system salt as raw bytes. (not as a string encoded in the
219 // format used by SystemSaltGetter::ConvertRawSaltToHexString()).
220 static std::vector<uint8> GetStubSystemSalt();
223 void ReturnProtobufMethodCallback(
224 const cryptohome::BaseReply& reply,
225 const ProtobufMethodCallback& callback);
227 // Posts tasks which return fake results to the UI thread.
228 void ReturnAsyncMethodResult(const AsyncMethodCallback& callback,
231 // This method is used to implement ReturnAsyncMethodResult.
232 void ReturnAsyncMethodResultInternal(const AsyncMethodCallback& callback,
235 bool service_is_available_;
237 AsyncCallStatusHandler async_call_status_handler_;
238 AsyncCallStatusWithDataHandler async_call_status_data_handler_;
239 int tpm_is_ready_counter_;
240 bool unmount_result_;
241 std::vector<uint8> system_salt_;
243 std::vector<WaitForServiceToBeAvailableCallback>
244 pending_wait_for_service_to_be_available_callbacks_;
246 // A stub store for InstallAttributes, mapping an attribute name to the
247 // associated data blob. Used to implement InstallAttributesSet and -Get.
248 std::map<std::string, std::vector<uint8> > install_attrs_;
250 base::WeakPtrFactory<FakeCryptohomeClient> weak_ptr_factory_;
252 DISALLOW_COPY_AND_ASSIGN(FakeCryptohomeClient);
255 } // namespace chromeos
257 #endif // CHROMEOS_DBUS_FAKE_CRYPTOHOME_CLIENT_H_