| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROMEOS_DBUS_TPM_MANAGER_TPM_MANAGER_CLIENT_H_ |
| #define CHROMEOS_DBUS_TPM_MANAGER_TPM_MANAGER_CLIENT_H_ |
| |
| #include "base/component_export.h" |
| #include "base/functional/callback.h" |
| #include "base/observer_list_types.h" |
| #include "chromeos/dbus/tpm_manager/tpm_manager.pb.h" |
| |
| namespace dbus { |
| class Bus; |
| } |
| |
| namespace chromeos { |
| |
| // TpmManagerClient is used to communicate with the org.chromium.TpmManager |
| // service. All method should be called from the origin thread (UI thread) which |
| // initializes the DBusThreadManager instance. |
| // For more information, please see |
| // "chromium/src/third_party/cros_system_api/dbus/tpm_manager" for detailed |
| // definitions of the D-Bus methods and their arguments. |
| class COMPONENT_EXPORT(CHROMEOS_DBUS_TPM_MANAGER) TpmManagerClient { |
| public: |
| class Observer : public base::CheckedObserver { |
| public: |
| virtual void OnOwnershipTaken() = 0; |
| }; |
| |
| public: |
| // Callbacks of the D-Bus methods. |
| using GetTpmNonsensitiveStatusCallback = base::OnceCallback<void( |
| const ::tpm_manager::GetTpmNonsensitiveStatusReply&)>; |
| using GetVersionInfoCallback = |
| base::OnceCallback<void(const ::tpm_manager::GetVersionInfoReply&)>; |
| using GetSupportedFeaturesCallback = |
| base::OnceCallback<void(const ::tpm_manager::GetSupportedFeaturesReply&)>; |
| using GetDictionaryAttackInfoCallback = base::OnceCallback<void( |
| const ::tpm_manager::GetDictionaryAttackInfoReply&)>; |
| using TakeOwnershipCallback = |
| base::OnceCallback<void(const ::tpm_manager::TakeOwnershipReply&)>; |
| using ClearStoredOwnerPasswordCallback = base::OnceCallback<void( |
| const ::tpm_manager::ClearStoredOwnerPasswordReply&)>; |
| using ClearTpmCallback = |
| base::OnceCallback<void(const ::tpm_manager::ClearTpmReply&)>; |
| |
| // Interface with testing functionality. Accessed through GetTestInterface(), |
| // only implemented in the fake implementation. |
| class TestInterface { |
| public: |
| // Gets a mutable reply that is returned when `GetTpmNonsensitiveStatus()` |
| // is called. |
| virtual ::tpm_manager::GetTpmNonsensitiveStatusReply* |
| mutable_nonsensitive_status_reply() = 0; |
| // Sets how many times the `GetTpmNonsensitiveStatus()` returns D-Bus error |
| // before it works normally. |
| virtual void set_non_nonsensitive_status_dbus_error_count(int count) = 0; |
| // Gets a mutable reply that is returned when `GetVersionInfo()` is called. |
| virtual ::tpm_manager::GetVersionInfoReply* |
| mutable_version_info_reply() = 0; |
| // Gets a mutable reply that is returned when `GetSupportedFeatures()` is |
| // called. |
| virtual ::tpm_manager::GetSupportedFeaturesReply* |
| mutable_supported_features_reply() = 0; |
| // Gets a mutable reply that is returned when `GetDictionaryAttackInfo()` is |
| // called. |
| virtual ::tpm_manager::GetDictionaryAttackInfoReply* |
| mutable_dictionary_attack_info_reply() = 0; |
| // Gets the count of `TakeOwnership()` being called. |
| virtual int take_ownership_count() const = 0; |
| // Gets the count of `ClearStoredOwnerPassword()` being called. |
| virtual int clear_stored_owner_password_count() const = 0; |
| // Gets the count of `ClearTpm()` being called. |
| virtual int clear_tpm_count() const = 0; |
| // Emits ownership taken signal. |
| virtual void EmitOwnershipTakenSignal() = 0; |
| }; |
| |
| // Not copyable or movable. |
| TpmManagerClient(const TpmManagerClient&) = delete; |
| TpmManagerClient& operator=(const TpmManagerClient&) = delete; |
| TpmManagerClient(TpmManagerClient&&) = delete; |
| TpmManagerClient& operator=(TpmManagerClient&&) = delete; |
| |
| // Creates and initializes the global instance. |bus| must not be null. |
| static void Initialize(dbus::Bus* bus); |
| |
| // Creates and initializes a fake global instance if not already created. |
| static void InitializeFake(); |
| |
| // Destroys the global instance. |
| static void Shutdown(); |
| |
| // Returns the global instance which may be null if not initialized. |
| static TpmManagerClient* Get(); |
| |
| // Queries the assorted TPM statuses that tpm manager can tell, e.g., TPM |
| // ownership status, the presence of the owner password, the capability of |
| // resetting dictionary attack lockout; for the complete list of the returned |
| // statuses, see `GetTpmNonsensitiveStatusReply`. |
| virtual void GetTpmNonsensitiveStatus( |
| const ::tpm_manager::GetTpmNonsensitiveStatusRequest& request, |
| GetTpmNonsensitiveStatusCallback callback) = 0; |
| // Queries the detailed TPM version information; for the complete list of the |
| // entries, see `GetVersionInfoReply`. |
| virtual void GetVersionInfo( |
| const ::tpm_manager::GetVersionInfoRequest& request, |
| GetVersionInfoCallback callback) = 0; |
| // Queries the features that TPM supports; for the complete list of the |
| // entries, see `GetSupportedFeaturesReply`. |
| virtual void GetSupportedFeatures( |
| const ::tpm_manager::GetSupportedFeaturesRequest& request, |
| GetSupportedFeaturesCallback callback) = 0; |
| // Queries the dictionary lockout information of TPM's dictionary attack |
| // protection, The reply contains the related information, including the |
| // current dictionary attack counter, and the flag if the TPM is in the |
| // lockout state. |
| virtual void GetDictionaryAttackInfo( |
| const ::tpm_manager::GetDictionaryAttackInfoRequest& request, |
| GetDictionaryAttackInfoCallback callback) = 0; |
| // Triggers TPM initialization process by tpm manager. |
| virtual void TakeOwnership(const ::tpm_manager::TakeOwnershipRequest& request, |
| TakeOwnershipCallback callback) = 0; |
| // Requests tpm manager to attempt to wipe the TPM owner password from its |
| // on-disk database. |
| virtual void ClearStoredOwnerPassword( |
| const ::tpm_manager::ClearStoredOwnerPasswordRequest& request, |
| ClearStoredOwnerPasswordCallback callback) = 0; |
| // Requests tpm manager to clear TPM after reboot. |
| virtual void ClearTpm(const ::tpm_manager::ClearTpmRequest& request, |
| ClearTpmCallback callback) = 0; |
| |
| // Adds an observer. |
| virtual void AddObserver(Observer* observer) = 0; |
| // Removes an observer. |
| virtual void RemoveObserver(Observer* observer) = 0; |
| |
| // Returns an interface for testing (fake only), or returns nullptr. |
| virtual TestInterface* GetTestInterface() = 0; |
| |
| protected: |
| // Initialize/Shutdown should be used instead. |
| TpmManagerClient(); |
| virtual ~TpmManagerClient(); |
| }; |
| |
| } // namespace chromeos |
| |
| #endif // CHROMEOS_DBUS_TPM_MANAGER_TPM_MANAGER_CLIENT_H_ |