blob: fc67cf8928667c72c344b9e4549624f0739e572c [file] [log] [blame] [edit]
// 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_TPM1_BACKEND_H_
#define LIBHWSEC_BACKEND_TPM1_BACKEND_H_
#include <memory>
#include <optional>
#include "libhwsec/backend/backend.h"
#include "libhwsec/backend/pinweaver_manager/pinweaver_manager_impl.h"
#include "libhwsec/backend/tpm1/attestation.h"
#include "libhwsec/backend/tpm1/config.h"
#include "libhwsec/backend/tpm1/da_mitigation.h"
#include "libhwsec/backend/tpm1/deriving.h"
#include "libhwsec/backend/tpm1/encryption.h"
#include "libhwsec/backend/tpm1/key_management.h"
#include "libhwsec/backend/tpm1/pinweaver.h"
#include "libhwsec/backend/tpm1/random.h"
#include "libhwsec/backend/tpm1/recovery_crypto.h"
#include "libhwsec/backend/tpm1/ro_data.h"
#include "libhwsec/backend/tpm1/sealing.h"
#include "libhwsec/backend/tpm1/signature_sealing.h"
#include "libhwsec/backend/tpm1/signing.h"
#include "libhwsec/backend/tpm1/state.h"
#include "libhwsec/backend/tpm1/storage.h"
#include "libhwsec/backend/tpm1/tss_helper.h"
#include "libhwsec/backend/tpm1/u2f.h"
#include "libhwsec/backend/tpm1/vendor.h"
#include "libhwsec/backend/tpm1/version_attestation.h"
#include "libhwsec/middleware/middleware_derivative.h"
#ifndef BUILD_LIBHWSEC
#error "Don't include this file outside libhwsec!"
#endif
namespace hwsec {
class BackendTpm1 : public Backend {
public:
BackendTpm1(Proxy& proxy, MiddlewareDerivative middleware_derivative);
~BackendTpm1() override;
TssHelper& GetTssHelper() { return tss_helper_; }
StateTpm1& GetStateTpm1() { return state_; }
DAMitigationTpm1& GetDAMitigationTpm1() { return da_mitigation_; }
StorageTpm1& GetStorageTpm1() { return storage_; }
RoDataTpm1& GetRoDataTpm1() { return ro_data_; }
SealingTpm1& GetSealingTpm1() { return sealing_; }
SignatureSealingTpm1& GetSignatureSealingTpm1() { return signature_sealing_; }
DerivingTpm1& GetDerivingTpm1() { return deriving_; }
EncryptionTpm1& GetEncryptionTpm1() { return encryption_; }
SigningTpm1& GetSigningTpm1() { return signing_; }
KeyManagementTpm1& GetKeyManagementTpm1() { return key_management_; }
ConfigTpm1& GetConfigTpm1() { return config_; }
RandomTpm1& GetRandomTpm1() { return random_; }
PinWeaverTpm1& GetPinWeaverTpm1() { return pinweaver_; }
VendorTpm1& GetVendorTpm1() { return vendor_; }
RecoveryCryptoTpm1& GetRecoveryCryptoTpm1() { return recovery_crypto_; }
U2fTpm1& GetU2fTpm1() { return u2f_; }
AttestationTpm1& GetAttestationTpm1() { return attestation_; }
VersionAttestationTpm1& GetVersionAttestationTpm1() {
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 nullptr; }
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 nullptr; }
Proxy& proxy_;
org::chromium::TpmManagerProxyInterface& tpm_manager_;
org::chromium::TpmNvramProxyInterface& tpm_nvram_;
overalls::Overalls& overalls_;
crossystem::Crossystem& crossystem_;
MiddlewareDerivative middleware_derivative_;
TssHelper tss_helper_;
StateTpm1 state_;
DAMitigationTpm1 da_mitigation_;
StorageTpm1 storage_;
ConfigTpm1 config_;
RandomTpm1 random_;
KeyManagementTpm1 key_management_;
SealingTpm1 sealing_;
DerivingTpm1 deriving_;
SignatureSealingTpm1 signature_sealing_;
EncryptionTpm1 encryption_;
SigningTpm1 signing_;
PinWeaverTpm1 pinweaver_;
PinWeaverManagerImpl pinweaver_manager_;
VendorTpm1 vendor_;
RecoveryCryptoTpm1 recovery_crypto_;
U2fTpm1 u2f_;
AttestationTpm1 attestation_;
VersionAttestationTpm1 version_attestation_;
RoDataTpm1 ro_data_;
};
} // namespace hwsec
#endif // LIBHWSEC_BACKEND_TPM1_BACKEND_H_