| // Copyright 2018 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef ATTESTATION_COMMON_TPM_UTILITY_COMMON_H_ |
| #define ATTESTATION_COMMON_TPM_UTILITY_COMMON_H_ |
| |
| #include "attestation/common/tpm_utility.h" |
| |
| #include <memory> |
| #include <string> |
| #include <unordered_set> |
| |
| #include <base/macros.h> |
| #include <tpm_manager/client/tpm_manager_utility.h> |
| |
| namespace attestation { |
| |
| // A TpmUtility implementation for version-independent functions. |
| class TpmUtilityCommon : public TpmUtility { |
| public: |
| TpmUtilityCommon(); |
| // Testing constructor. |
| explicit TpmUtilityCommon( |
| tpm_manager::TpmManagerUtility* tpm_manager_utility); |
| TpmUtilityCommon(const TpmUtilityCommon&) = delete; |
| TpmUtilityCommon& operator=(const TpmUtilityCommon&) = delete; |
| |
| ~TpmUtilityCommon() override; |
| |
| // TpmUtility methods. |
| bool Initialize() override; |
| bool IsTpmReady() override; |
| bool RemoveOwnerDependency() override; |
| bool IsPCR0Valid() override; |
| |
| protected: |
| // Gets the endorsement password from tpm_managerd. Returns false if the |
| // password is not available. |
| bool GetEndorsementPassword(std::string* password); |
| |
| // Gets the owner password from tpm_managerd. Returns false if the password is |
| // not available. |
| bool GetOwnerPassword(std::string* password); |
| |
| // Caches various TPM state including owner / endorsement passwords. On |
| // success, fields like is_ready_ and owner_password_ will be populated. |
| // Returns true on success. |
| bool CacheTpmState(); |
| |
| private: |
| void BuildValidPCR0Values(); |
| |
| protected: |
| virtual std::string GetPCRValueForMode(const std::string& mode) = 0; |
| |
| bool is_ready_{false}; |
| std::string endorsement_password_; |
| std::string owner_password_; |
| std::string delegate_blob_; |
| std::string delegate_secret_; |
| |
| std::unordered_set<std::string> valid_pcr0_values_; |
| |
| tpm_manager::TpmManagerUtility* tpm_manager_utility_; |
| |
| // For testing purpose. |
| template <typename T> |
| friend class TpmUtilityCommonTest; |
| }; |
| |
| } // namespace attestation |
| |
| #endif // ATTESTATION_COMMON_TPM_UTILITY_COMMON_H_ |