| // Copyright 2022 The ChromiumOS Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef LIBHWSEC_BACKEND_TPM2_BACKEND_H_ |
| #define LIBHWSEC_BACKEND_TPM2_BACKEND_H_ |
| |
| #include <memory> |
| |
| #include <libstorage/platform/platform.h> |
| #include <trunks/command_transceiver.h> |
| #include <trunks/trunks_factory.h> |
| |
| #include "libhwsec/backend/backend.h" |
| #include "libhwsec/backend/pinweaver_manager/pinweaver_manager_impl.h" |
| #include "libhwsec/backend/tpm2/attestation.h" |
| #include "libhwsec/backend/tpm2/config.h" |
| #include "libhwsec/backend/tpm2/da_mitigation.h" |
| #include "libhwsec/backend/tpm2/deriving.h" |
| #include "libhwsec/backend/tpm2/encryption.h" |
| #include "libhwsec/backend/tpm2/event_management.h" |
| #include "libhwsec/backend/tpm2/key_management.h" |
| #include "libhwsec/backend/tpm2/pinweaver.h" |
| #include "libhwsec/backend/tpm2/random.h" |
| #include "libhwsec/backend/tpm2/recovery_crypto.h" |
| #include "libhwsec/backend/tpm2/ro_data.h" |
| #include "libhwsec/backend/tpm2/sealing.h" |
| #include "libhwsec/backend/tpm2/session_management.h" |
| #include "libhwsec/backend/tpm2/signature_sealing.h" |
| #include "libhwsec/backend/tpm2/signing.h" |
| #include "libhwsec/backend/tpm2/state.h" |
| #include "libhwsec/backend/tpm2/storage.h" |
| #include "libhwsec/backend/tpm2/trunks_context.h" |
| #include "libhwsec/backend/tpm2/u2f.h" |
| #include "libhwsec/backend/tpm2/vendor.h" |
| #include "libhwsec/backend/tpm2/version_attestation.h" |
| #include "libhwsec/middleware/middleware_derivative.h" |
| #include "libhwsec/proxy/proxy.h" |
| |
| #ifndef BUILD_LIBHWSEC |
| #error "Don't include this file outside libhwsec!" |
| #endif |
| |
| namespace hwsec { |
| |
| class BackendTpm2 : public Backend { |
| public: |
| BackendTpm2(Proxy& proxy, |
| MiddlewareDerivative middleware_derivative, |
| const base::FilePath& pw_hash_tree_dir, |
| Metrics* metrics); |
| |
| ~BackendTpm2() override; |
| |
| StateTpm2& GetStateTpm2() { return state_; } |
| DAMitigationTpm2& GetDAMitigationTpm2() { return da_mitigation_; } |
| StorageTpm2& GetStorageTpm2() { return storage_; } |
| RoDataTpm2& GetRoDataTpm2() { return ro_data_; } |
| SealingTpm2& GetSealingTpm2() { return sealing_; } |
| SignatureSealingTpm2& GetSignatureSealingTpm2() { return signature_sealing_; } |
| DerivingTpm2& GetDerivingTpm2() { return deriving_; } |
| EncryptionTpm2& GetEncryptionTpm2() { return encryption_; } |
| SigningTpm2& GetSigningTpm2() { return signing_; } |
| KeyManagementTpm2& GetKeyManagementTpm2() { return key_management_; } |
| SessionManagementTpm2& GetSessionManagementTpm2() { |
| return session_management_; |
| } |
| ConfigTpm2& GetConfigTpm2() { return config_; } |
| RandomTpm2& GetRandomTpm2() { return random_; } |
| PinWeaverTpm2& GetPinWeaverTpm2() { return pinweaver_; } |
| PinWeaverManager& GetPinWeaverManagerTpm2() { return pinweaver_manager_; } |
| VendorTpm2& GetVendorTpm2() { return vendor_; } |
| RecoveryCryptoTpm2& GetRecoveryCryptoTpm2() { return recovery_crypto_; } |
| U2fTpm2& GetU2fTpm2() { return u2f_; } |
| AttestationTpm2& GetAttestationTpm2() { return attestation_; } |
| VersionAttestationTpm2& GetVersionAttestationTpm2() { |
| return version_attestation_; |
| } |
| |
| void set_middleware_derivative_for_test( |
| MiddlewareDerivative middleware_derivative) { |
| middleware_derivative_ = middleware_derivative; |
| } |
| |
| private: |
| State* GetState() override { return &state_; } |
| DAMitigation* GetDAMitigation() override { return &da_mitigation_; } |
| Storage* GetStorage() override { return &storage_; } |
| RoData* GetRoData() override { return &ro_data_; } |
| Sealing* GetSealing() override { return &sealing_; } |
| SignatureSealing* GetSignatureSealing() override { |
| return &signature_sealing_; |
| } |
| Deriving* GetDeriving() override { return &deriving_; } |
| Encryption* GetEncryption() override { return &encryption_; } |
| Signing* GetSigning() override { return &signing_; } |
| KeyManagement* GetKeyManagement() override { return &key_management_; } |
| SessionManagement* GetSessionManagement() override { |
| return &session_management_; |
| } |
| Config* GetConfig() override { return &config_; } |
| Random* GetRandom() override { return &random_; } |
| PinWeaver* GetPinWeaver() override { return &pinweaver_; } |
| PinWeaverManager* GetPinWeaverManager() override { |
| return &pinweaver_manager_; |
| } |
| Vendor* GetVendor() override { return &vendor_; } |
| RecoveryCrypto* GetRecoveryCrypto() override { return &recovery_crypto_; } |
| U2f* GetU2f() override { return &u2f_; } |
| Attestation* GetAttestation() override { return &attestation_; } |
| VersionAttestation* GetVersionAttestation() override { |
| return &version_attestation_; |
| } |
| EventManagement* GetEventManagement() override { return &event_management_; } |
| |
| Proxy& proxy_; |
| org::chromium::TpmManagerProxyInterface& tpm_manager_; |
| org::chromium::TpmNvramProxyInterface& tpm_nvram_; |
| crossystem::Crossystem& crossystem_; |
| libstorage::Platform& platform_; |
| |
| MiddlewareDerivative middleware_derivative_; |
| |
| TrunksContext context_; |
| |
| StateTpm2 state_; |
| DAMitigationTpm2 da_mitigation_; |
| SessionManagementTpm2 session_management_; |
| ConfigTpm2 config_; |
| StorageTpm2 storage_; |
| KeyManagementTpm2 key_management_; |
| SealingTpm2 sealing_; |
| SignatureSealingTpm2 signature_sealing_; |
| DerivingTpm2 deriving_; |
| EncryptionTpm2 encryption_; |
| SigningTpm2 signing_; |
| RandomTpm2 random_; |
| PinWeaverTpm2 pinweaver_; |
| PinWeaverManagerImpl pinweaver_manager_; |
| RecoveryCryptoTpm2 recovery_crypto_; |
| U2fTpm2 u2f_; |
| AttestationTpm2 attestation_; |
| RoDataTpm2 ro_data_; |
| VendorTpm2 vendor_; |
| VersionAttestationTpm2 version_attestation_; |
| EventManagementTpm2 event_management_; |
| }; |
| |
| } // namespace hwsec |
| |
| #endif // LIBHWSEC_BACKEND_TPM2_BACKEND_H_ |