Upstream version 11.40.277.0
[platform/framework/web/crosswalk.git] / src / chromeos / dbus / cryptohome_client.h
1 // Copyright (c) 2012 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.
4
5 #ifndef CHROMEOS_DBUS_CRYPTOHOME_CLIENT_H_
6 #define CHROMEOS_DBUS_CRYPTOHOME_CLIENT_H_
7
8 #include <string>
9 #include <vector>
10
11 #include "base/basictypes.h"
12 #include "base/callback.h"
13 #include "chromeos/attestation/attestation_constants.h"
14 #include "chromeos/chromeos_export.h"
15 #include "chromeos/dbus/dbus_client.h"
16 #include "chromeos/dbus/dbus_method_call_status.h"
17
18 namespace cryptohome {
19
20 class AccountIdentifier;
21 class AddKeyRequest;
22 class AuthorizationRequest;
23 class BaseReply;
24 class CheckKeyRequest;
25 class FlushAndSignBootAttributesRequest;
26 class GetBootAttributeRequest;
27 class GetKeyDataRequest;
28 class MountRequest;
29 class RemoveKeyRequest;
30 class SetBootAttributeRequest;
31 class UpdateKeyRequest;
32
33 } // namespace cryptohome
34
35 namespace chromeos {
36
37 // CryptohomeClient is used to communicate with the Cryptohome service.
38 // All method should be called from the origin thread (UI thread) which
39 // initializes the DBusThreadManager instance.
40 class CHROMEOS_EXPORT CryptohomeClient : public DBusClient {
41  public:
42   // A callback to handle AsyncCallStatus signals.
43   typedef base::Callback<void(int async_id,
44                               bool return_status,
45                               int return_code)>
46       AsyncCallStatusHandler;
47   // A callback to handle AsyncCallStatusWithData signals.
48   typedef base::Callback<void(int async_id,
49                               bool return_status,
50                               const std::string& data)>
51       AsyncCallStatusWithDataHandler;
52   // A callback to handle responses of AsyncXXX methods.
53   typedef base::Callback<void(int async_id)> AsyncMethodCallback;
54   // A callback for GetSystemSalt().
55   typedef base::Callback<void(
56       DBusMethodCallStatus call_status,
57       const std::vector<uint8>& system_salt)> GetSystemSaltCallback;
58   // A callback for WaitForServiceToBeAvailable().
59   typedef base::Callback<void(bool service_is_ready)>
60       WaitForServiceToBeAvailableCallback;
61   // A callback to handle responses of Pkcs11GetTpmTokenInfo method.  The result
62   // of the D-Bus call is in |call_status|.  On success, |label| holds the
63   // PKCS #11 token label.  This is not useful in practice to identify a token
64   // but may be meaningful to a user.  The |user_pin| can be used with the
65   // C_Login PKCS #11 function but is not necessary because tokens are logged in
66   // for the duration of a signed-in session.  The |slot| corresponds to a
67   // CK_SLOT_ID for the PKCS #11 API and reliably identifies the token for the
68   // duration of the signed-in session.
69   typedef base::Callback<void(
70       DBusMethodCallStatus call_status,
71       const std::string& label,
72       const std::string& user_pin,
73       int slot)> Pkcs11GetTpmTokenInfoCallback;
74   // A callback for methods which return both a bool result and data.
75   typedef base::Callback<void(DBusMethodCallStatus call_status,
76                               bool result,
77                               const std::string& data)> DataMethodCallback;
78
79   // A callback for methods which return both a bool and a protobuf as reply.
80   typedef base::Callback<
81       void(DBusMethodCallStatus call_status,
82            bool result,
83            const cryptohome::BaseReply& reply)> ProtobufMethodCallback;
84
85   virtual ~CryptohomeClient();
86
87   // Factory function, creates a new instance and returns ownership.
88   // For normal usage, access the singleton via DBusThreadManager::Get().
89   static CryptohomeClient* Create();
90
91   // Returns the sanitized |username| that the stub implementation would return.
92   static std::string GetStubSanitizedUsername(const std::string& username);
93
94   // Sets AsyncCallStatus signal handlers.
95   // |handler| is called when results for AsyncXXX methods are returned.
96   // Cryptohome service will process the calls in a first-in-first-out manner
97   // when they are made in parallel.
98   virtual void SetAsyncCallStatusHandlers(
99       const AsyncCallStatusHandler& handler,
100       const AsyncCallStatusWithDataHandler& data_handler) = 0;
101
102   // Resets AsyncCallStatus signal handlers.
103   virtual void ResetAsyncCallStatusHandlers() = 0;
104
105   // Runs the callback as soon as the service becomes available.
106   virtual void WaitForServiceToBeAvailable(
107       const WaitForServiceToBeAvailableCallback& callback) = 0;
108
109   // Calls IsMounted method and returns true when the call succeeds.
110   virtual void IsMounted(const BoolDBusMethodCallback& callback) = 0;
111
112   // Calls Unmount method and returns true when the call succeeds.
113   // This method blocks until the call returns.
114   virtual bool Unmount(bool* success) = 0;
115
116   // Calls AsyncCheckKey method.  |callback| is called after the method call
117   // succeeds.
118   virtual void AsyncCheckKey(const std::string& username,
119                              const std::string& key,
120                              const AsyncMethodCallback& callback) = 0;
121
122   // Calls AsyncMigrateKey method.  |callback| is called after the method call
123   // succeeds.
124   virtual void AsyncMigrateKey(const std::string& username,
125                                const std::string& from_key,
126                                const std::string& to_key,
127                                const AsyncMethodCallback& callback) = 0;
128
129   // Calls AsyncRemove method.  |callback| is called after the method call
130   // succeeds.
131   virtual void AsyncRemove(const std::string& username,
132                            const AsyncMethodCallback& callback) = 0;
133
134   // Calls GetSystemSalt method.  |callback| is called after the method call
135   // succeeds.
136   virtual void GetSystemSalt(const GetSystemSaltCallback& callback) = 0;
137
138   // Calls GetSanitizedUsername method.  |callback| is called after the method
139   // call succeeds.
140   virtual void GetSanitizedUsername(
141       const std::string& username,
142       const StringDBusMethodCallback& callback) = 0;
143
144   // Same as GetSanitizedUsername() but blocks until a reply is received, and
145   // returns the sanitized username synchronously. Returns an empty string if
146   // the method call fails.
147   // This may only be called in situations where blocking the UI thread is
148   // considered acceptable (e.g. restarting the browser after a crash or after
149   // a flag change).
150   virtual std::string BlockingGetSanitizedUsername(
151       const std::string& username) = 0;
152
153   // Calls the AsyncMount method to asynchronously mount the cryptohome for
154   // |username|, using |key| to unlock it. For supported |flags|, see the
155   // documentation of AsyncMethodCaller::AsyncMount().
156   // |callback| is called after the method call succeeds.
157   virtual void AsyncMount(const std::string& username,
158                           const std::string& key,
159                           int flags,
160                           const AsyncMethodCallback& callback) = 0;
161
162   // Calls the AsyncAddKey method to asynchronously add another |new_key| for
163   // |username|, using |key| to unlock it first.
164   // |callback| is called after the method call succeeds.
165   virtual void AsyncAddKey(const std::string& username,
166                            const std::string& key,
167                            const std::string& new_key,
168                            const AsyncMethodCallback& callback) = 0;
169
170   // Calls AsyncMountGuest method.  |callback| is called after the method call
171   // succeeds.
172   virtual void AsyncMountGuest(const AsyncMethodCallback& callback) = 0;
173
174   // Calls the AsyncMount method to asynchronously mount the cryptohome for
175   // |public_mount_id|. For supported |flags|, see the documentation of
176   // AsyncMethodCaller::AsyncMount().  |callback| is called after the method
177   // call succeeds.
178   virtual void AsyncMountPublic(const std::string& public_mount_id,
179                                 int flags,
180                                 const AsyncMethodCallback& callback) = 0;
181
182   // Calls TpmIsReady method.
183   virtual void TpmIsReady(const BoolDBusMethodCallback& callback) = 0;
184
185   // Calls TpmIsEnabled method.
186   virtual void TpmIsEnabled(const BoolDBusMethodCallback& callback) = 0;
187
188   // Calls TpmIsEnabled method and returns true when the call succeeds.
189   // This method blocks until the call returns.
190   // TODO(hashimoto): Remove this method. crbug.com/141006
191   virtual bool CallTpmIsEnabledAndBlock(bool* enabled) = 0;
192
193   // Calls TpmGetPassword method.
194   virtual void TpmGetPassword(const StringDBusMethodCallback& callback) = 0;
195
196   // Calls TpmIsOwned method.
197   virtual void TpmIsOwned(const BoolDBusMethodCallback& callback) = 0;
198
199   // Calls TpmIsOwned method and returns true when the call succeeds.
200   // This method blocks until the call returns.
201   // TODO(hashimoto): Remove this method. crbug.com/141012
202   virtual bool CallTpmIsOwnedAndBlock(bool* owned) = 0;
203
204   // Calls TpmIsBeingOwned method.
205   virtual void TpmIsBeingOwned(const BoolDBusMethodCallback& callback) = 0;
206
207   // Calls TpmIsBeingOwned method and returns true when the call succeeds.
208   // This method blocks until the call returns.
209   // TODO(hashimoto): Remove this method. crbug.com/141011
210   virtual bool CallTpmIsBeingOwnedAndBlock(bool* owning) = 0;
211
212   // Calls TpmCanAttemptOwnership method.
213   // This method tells the service that it is OK to attempt ownership.
214   virtual void TpmCanAttemptOwnership(
215       const VoidDBusMethodCallback& callback) = 0;
216
217   // Calls TpmClearStoredPasswordMethod.
218   virtual void TpmClearStoredPassword(
219       const VoidDBusMethodCallback& callback) = 0;
220
221   // Calls TpmClearStoredPassword method and returns true when the call
222   // succeeds.  This method blocks until the call returns.
223   // TODO(hashimoto): Remove this method. crbug.com/141010
224   virtual bool CallTpmClearStoredPasswordAndBlock() = 0;
225
226   // Calls Pkcs11IsTpmTokenReady method.
227   virtual void Pkcs11IsTpmTokenReady(
228       const BoolDBusMethodCallback& callback) = 0;
229
230   // Calls Pkcs11GetTpmTokenInfo method.  This method is deprecated, you should
231   // use Pkcs11GetTpmTokenInfoForUser instead.  On success |callback| will
232   // receive PKCS #11 token information for the token associated with the user
233   // who originally signed in (i.e. PKCS #11 slot 0).
234   virtual void Pkcs11GetTpmTokenInfo(
235       const Pkcs11GetTpmTokenInfoCallback& callback) = 0;
236
237   // Calls Pkcs11GetTpmTokenInfoForUser method.  On success |callback| will
238   // receive PKCS #11 token information for the user identified by |user_email|.
239   // The |user_email| must be a canonical email address as returned by
240   // user_manager::User::email().
241   virtual void Pkcs11GetTpmTokenInfoForUser(
242       const std::string& user_email,
243       const Pkcs11GetTpmTokenInfoCallback& callback) = 0;
244
245   // Calls InstallAttributesGet method and returns true when the call succeeds.
246   // This method blocks until the call returns.
247   // The original content of |value| is lost.
248   virtual bool InstallAttributesGet(const std::string& name,
249                                     std::vector<uint8>* value,
250                                     bool* successful) = 0;
251
252   // Calls InstallAttributesSet method and returns true when the call succeeds.
253   // This method blocks until the call returns.
254   virtual bool InstallAttributesSet(const std::string& name,
255                                     const std::vector<uint8>& value,
256                                     bool* successful) = 0;
257
258   // Calls InstallAttributesFinalize method and returns true when the call
259   // succeeds.  This method blocks until the call returns.
260   virtual bool InstallAttributesFinalize(bool* successful) = 0;
261
262   // Calls InstallAttributesIsReady method.
263   virtual void InstallAttributesIsReady(
264       const BoolDBusMethodCallback& callback) = 0;
265
266   // Calls InstallAttributesIsInvalid method and returns true when the call
267   // succeeds.  This method blocks until the call returns.
268   virtual bool InstallAttributesIsInvalid(bool* is_invalid) = 0;
269
270   // Calls InstallAttributesIsFirstInstall method and returns true when the call
271   // succeeds. This method blocks until the call returns.
272   virtual bool InstallAttributesIsFirstInstall(bool* is_first_install) = 0;
273
274   // Calls the TpmAttestationIsPrepared dbus method.  The callback is called
275   // when the operation completes.
276   virtual void TpmAttestationIsPrepared(
277         const BoolDBusMethodCallback& callback) = 0;
278
279   // Calls the TpmAttestationIsEnrolled dbus method.  The callback is called
280   // when the operation completes.
281   virtual void TpmAttestationIsEnrolled(
282         const BoolDBusMethodCallback& callback) = 0;
283
284   // Asynchronously creates an attestation enrollment request.  The callback
285   // will be called when the dbus call completes.  When the operation completes,
286   // the AsyncCallStatusWithDataHandler signal handler is called.  The data that
287   // is sent with the signal is an enrollment request to be sent to the Privacy
288   // CA of type |pca_type|.  The enrollment is completed by calling
289   // AsyncTpmAttestationEnroll.
290   virtual void AsyncTpmAttestationCreateEnrollRequest(
291       chromeos::attestation::PrivacyCAType pca_type,
292       const AsyncMethodCallback& callback) = 0;
293
294   // Asynchronously finishes an attestation enrollment operation.  The callback
295   // will be called when the dbus call completes.  When the operation completes,
296   // the AsyncCallStatusHandler signal handler is called.  |pca_response| is the
297   // response to the enrollment request emitted by the Privacy CA of type
298   // |pca_type|.
299   virtual void AsyncTpmAttestationEnroll(
300       chromeos::attestation::PrivacyCAType pca_type,
301       const std::string& pca_response,
302       const AsyncMethodCallback& callback) = 0;
303
304   // Asynchronously creates an attestation certificate request according to
305   // |certificate_profile|.  Some profiles require that the |user_id| of the
306   // currently active user and an identifier of the |request_origin| be
307   // provided.  |callback| will be called when the dbus call completes.  When
308   // the operation completes, the AsyncCallStatusWithDataHandler signal handler
309   // is called.  The data that is sent with the signal is a certificate request
310   // to be sent to the Privacy CA of type |pca_type|.  The certificate request
311   // is completed by calling AsyncTpmAttestationFinishCertRequest.  The
312   // |user_id| will not be included in the certificate request for the Privacy
313   // CA.
314   virtual void AsyncTpmAttestationCreateCertRequest(
315       chromeos::attestation::PrivacyCAType pca_type,
316       attestation::AttestationCertificateProfile certificate_profile,
317       const std::string& user_id,
318       const std::string& request_origin,
319       const AsyncMethodCallback& callback) = 0;
320
321   // Asynchronously finishes a certificate request operation.  The callback will
322   // be called when the dbus call completes.  When the operation completes, the
323   // AsyncCallStatusWithDataHandler signal handler is called.  The data that is
324   // sent with the signal is a certificate chain in PEM format.  |pca_response|
325   // is the response to the certificate request emitted by the Privacy CA.
326   // |key_type| determines whether the certified key is to be associated with
327   // the current user.  |key_name| is a name for the key.  If |key_type| is
328   // KEY_USER, a |user_id| must be provided.  Otherwise |user_id| is ignored.
329   // For normal GAIA users the |user_id| is a canonical email address.
330   virtual void AsyncTpmAttestationFinishCertRequest(
331       const std::string& pca_response,
332       attestation::AttestationKeyType key_type,
333       const std::string& user_id,
334       const std::string& key_name,
335       const AsyncMethodCallback& callback) = 0;
336
337   // Checks if an attestation key already exists.  If the key specified by
338   // |key_type| and |key_name| exists, then the result sent to the callback will
339   // be true.  If |key_type| is KEY_USER, a |user_id| must be provided.
340   // Otherwise |user_id| is ignored.  For normal GAIA users the |user_id| is a
341   // canonical email address.
342   virtual void TpmAttestationDoesKeyExist(
343       attestation::AttestationKeyType key_type,
344       const std::string& user_id,
345       const std::string& key_name,
346       const BoolDBusMethodCallback& callback) = 0;
347
348   // Gets the attestation certificate for the key specified by |key_type| and
349   // |key_name|.  |callback| will be called when the operation completes.  If
350   // the key does not exist the callback |result| parameter will be false.  If
351   // |key_type| is KEY_USER, a |user_id| must be provided.  Otherwise |user_id|
352   // is ignored.  For normal GAIA users the |user_id| is a canonical email
353   // address.
354   virtual void TpmAttestationGetCertificate(
355       attestation::AttestationKeyType key_type,
356       const std::string& user_id,
357       const std::string& key_name,
358       const DataMethodCallback& callback) = 0;
359
360   // Gets the public key for the key specified by |key_type| and |key_name|.
361   // |callback| will be called when the operation completes.  If the key does
362   // not exist the callback |result| parameter will be false.  If |key_type| is
363   // KEY_USER, a |user_id| must be provided.  Otherwise |user_id| is ignored.
364   // For normal GAIA users the |user_id| is a canonical email address.
365   virtual void TpmAttestationGetPublicKey(
366       attestation::AttestationKeyType key_type,
367       const std::string& user_id,
368       const std::string& key_name,
369       const DataMethodCallback& callback) = 0;
370
371   // Asynchronously registers an attestation key with the current user's
372   // PKCS #11 token.  The |callback| will be called when the dbus call
373   // completes.  When the operation completes, the AsyncCallStatusHandler signal
374   // handler is called.  |key_type| and |key_name| specify the key to register.
375   // If |key_type| is KEY_USER, a |user_id| must be provided.  Otherwise
376   // |user_id| is ignored.  For normal GAIA users the |user_id| is a canonical
377   // email address.
378   virtual void TpmAttestationRegisterKey(
379       attestation::AttestationKeyType key_type,
380       const std::string& user_id,
381       const std::string& key_name,
382       const AsyncMethodCallback& callback) = 0;
383
384   // Asynchronously signs an enterprise challenge with the key specified by
385   // |key_type| and |key_name|.  |domain| and |device_id| will be included in
386   // the challenge response.  |options| control how the challenge response is
387   // generated.  |challenge| must be a valid enterprise attestation challenge.
388   // The |callback| will be called when the dbus call completes.  When the
389   // operation completes, the AsyncCallStatusWithDataHandler signal handler is
390   // called.  If |key_type| is KEY_USER, a |user_id| must be provided.
391   // Otherwise |user_id| is ignored.  For normal GAIA users the |user_id| is a
392   // canonical email address.
393   virtual void TpmAttestationSignEnterpriseChallenge(
394       attestation::AttestationKeyType key_type,
395       const std::string& user_id,
396       const std::string& key_name,
397       const std::string& domain,
398       const std::string& device_id,
399       attestation::AttestationChallengeOptions options,
400       const std::string& challenge,
401       const AsyncMethodCallback& callback) = 0;
402
403   // Asynchronously signs a simple challenge with the key specified by
404   // |key_type| and |key_name|.  |challenge| can be any set of arbitrary bytes.
405   // A nonce will be appended to the challenge before signing; this method
406   // cannot be used to sign arbitrary data.  The |callback| will be called when
407   // the dbus call completes.  When the operation completes, the
408   // AsyncCallStatusWithDataHandler signal handler is called.  If |key_type| is
409   // KEY_USER, a |user_id| must be provided.  Otherwise |user_id| is ignored.
410   // For normal GAIA users the |user_id| is a canonical email address.
411   virtual void TpmAttestationSignSimpleChallenge(
412       attestation::AttestationKeyType key_type,
413       const std::string& user_id,
414       const std::string& key_name,
415       const std::string& challenge,
416       const AsyncMethodCallback& callback) = 0;
417
418   // Gets the payload associated with the key specified by |key_type| and
419   // |key_name|.  The |callback| will be called when the operation completes.
420   // If the key does not exist the callback |result| parameter will be false.
421   // If no payload has been set for the key the callback |result| parameter will
422   // be true and the |data| parameter will be empty.  If |key_type| is
423   // KEY_USER, a |user_id| must be provided.  Otherwise |user_id| is ignored.
424   // For normal GAIA users the |user_id| is a canonical email address.
425   virtual void TpmAttestationGetKeyPayload(
426       attestation::AttestationKeyType key_type,
427       const std::string& user_id,
428       const std::string& key_name,
429       const DataMethodCallback& callback) = 0;
430
431   // Sets the |payload| associated with the key specified by |key_type| and
432   // |key_name|.  The |callback| will be called when the operation completes.
433   // If the operation succeeds, the callback |result| parameter will be true.
434   // If |key_type| is KEY_USER, a |user_id| must be provided.  Otherwise
435   // |user_id| is ignored.  For normal GAIA users the |user_id| is a canonical
436   // email address.
437   virtual void TpmAttestationSetKeyPayload(
438       attestation::AttestationKeyType key_type,
439       const std::string& user_id,
440       const std::string& key_name,
441       const std::string& payload,
442       const BoolDBusMethodCallback& callback) = 0;
443
444   // Deletes certified keys as specified by |key_type| and |key_prefix|.  The
445   // |callback| will be called when the operation completes.  If the operation
446   // succeeds, the callback |result| parameter will be true.  If |key_type| is
447   // KEY_USER, a |user_id| must be provided.  Otherwise |user_id| is ignored.
448   // For normal GAIA users the |user_id| is a canonical email address.  All keys
449   // where the key name has a prefix matching |key_prefix| will be deleted.  All
450   // meta-data associated with the key, including certificates, will also be
451   // deleted.
452   virtual void TpmAttestationDeleteKeys(
453       attestation::AttestationKeyType key_type,
454       const std::string& user_id,
455       const std::string& key_prefix,
456       const BoolDBusMethodCallback& callback) = 0;
457
458   // Asynchronously calls the GetKeyDataEx method. |callback| will be invoked
459   // with the reply protobuf.
460   // GetKeyDataEx returns information about the key specified in |request|. At
461   // present, this does not include any secret information and the call should
462   // not be authenticated (|auth| should be empty).
463   virtual void GetKeyDataEx(
464       const cryptohome::AccountIdentifier& id,
465       const cryptohome::AuthorizationRequest& auth,
466       const cryptohome::GetKeyDataRequest& request,
467       const ProtobufMethodCallback& callback) = 0;
468
469   // Asynchronously calls CheckKeyEx method. |callback| is called after method
470   // call, and with reply protobuf.
471   // CheckKeyEx just checks if authorization information is valid.
472   virtual void CheckKeyEx(
473       const cryptohome::AccountIdentifier& id,
474       const cryptohome::AuthorizationRequest& auth,
475       const cryptohome::CheckKeyRequest& request,
476       const ProtobufMethodCallback& callback) = 0;
477
478   // Asynchronously calls MountEx method. |callback| is called after method
479   // call, and with reply protobuf.
480   // MountEx attempts to mount home dir using given authorization, and can
481   // create new home dir if necessary values are specified in |request|.
482   virtual void MountEx(
483       const cryptohome::AccountIdentifier& id,
484       const cryptohome::AuthorizationRequest& auth,
485       const cryptohome::MountRequest& request,
486       const ProtobufMethodCallback& callback) = 0;
487
488   // Asynchronously calls AddKeyEx method. |callback| is called after method
489   // call, and with reply protobuf.
490   // AddKeyEx adds another key to the given key set. |request| also defines
491   // behavior in case when key with specified label already exist.
492   virtual void AddKeyEx(
493       const cryptohome::AccountIdentifier& id,
494       const cryptohome::AuthorizationRequest& auth,
495       const cryptohome::AddKeyRequest& request,
496       const ProtobufMethodCallback& callback) = 0;
497
498   // Asynchronously calls UpdateKeyEx method. |callback| is called after method
499   // call, and with reply protobuf. Reply will contain MountReply extension.
500   // UpdateKeyEx replaces key used for authorization, without affecting any
501   // other keys. If specified at home dir creation time, new key may have
502   // to be signed and/or encrypted.
503   virtual void UpdateKeyEx(
504       const cryptohome::AccountIdentifier& id,
505       const cryptohome::AuthorizationRequest& auth,
506       const cryptohome::UpdateKeyRequest& request,
507       const ProtobufMethodCallback& callback) = 0;
508
509   // Asynchronously calls RemoveKeyEx method. |callback| is called after method
510   // call, and with reply protobuf.
511   // RemoveKeyEx removes key from the given key set.
512   virtual void RemoveKeyEx(const cryptohome::AccountIdentifier& id,
513                            const cryptohome::AuthorizationRequest& auth,
514                            const cryptohome::RemoveKeyRequest& request,
515                            const ProtobufMethodCallback& callback) = 0;
516
517   // Asynchronously calls GetBootAttribute method. |callback| is called after
518   // method call, and with reply protobuf.
519   // GetBootAttribute gets the value of the specified boot attribute.
520   virtual void GetBootAttribute(
521       const cryptohome::GetBootAttributeRequest& request,
522       const ProtobufMethodCallback& callback) = 0;
523
524   // Asynchronously calls SetBootAttribute method. |callback| is called after
525   // method call, and with reply protobuf.
526   // SetBootAttribute sets the value of the specified boot attribute. The value
527   // won't be available unitl FlushAndSignBootAttributes() is called.
528   virtual void SetBootAttribute(
529       const cryptohome::SetBootAttributeRequest& request,
530       const ProtobufMethodCallback& callback) = 0;
531
532   // Asynchronously calls FlushAndSignBootAttributes method. |callback| is
533   // called after method call, and with reply protobuf.
534   // FlushAndSignBootAttributes makes all pending boot attribute settings
535   // available, and have them signed by a special TPM key. This method always
536   // fails after any user, publuc, or guest session starts.
537   virtual void FlushAndSignBootAttributes(
538       const cryptohome::FlushAndSignBootAttributesRequest& request,
539       const ProtobufMethodCallback& callback) = 0;
540
541  protected:
542   // Create() should be used instead.
543   CryptohomeClient();
544
545  private:
546   DISALLOW_COPY_AND_ASSIGN(CryptohomeClient);
547 };
548
549 }  // namespace chromeos
550
551 #endif  // CHROMEOS_DBUS_CRYPTOHOME_CLIENT_H_