| // 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_VENDOR_H_ |
| #define LIBHWSEC_BACKEND_VENDOR_H_ |
| |
| #include <cstdint> |
| |
| #include <brillo/secure_blob.h> |
| |
| #include "libhwsec/status.h" |
| #include "libhwsec/structures/ifx_info.h" |
| |
| namespace hwsec { |
| |
| // Vendor provide the vendor specific commands. |
| class Vendor { |
| public: |
| struct RwVersion { |
| uint32_t epoch; |
| uint32_t major; |
| uint32_t minor; |
| }; |
| |
| enum class GscType { |
| kNotGsc, |
| kCr50, |
| kTi50, |
| }; |
| |
| // Gets the family. |
| virtual StatusOr<uint32_t> GetFamily() = 0; |
| |
| // Gets the spec level. |
| virtual StatusOr<uint64_t> GetSpecLevel() = 0; |
| |
| // Gets the manufacturer. |
| virtual StatusOr<uint32_t> GetManufacturer() = 0; |
| |
| // Gets the TPM model. |
| virtual StatusOr<uint32_t> GetTpmModel() = 0; |
| |
| // Gets the TPM firmware version. |
| virtual StatusOr<uint64_t> GetFirmwareVersion() = 0; |
| |
| // Gets the vendor specific string. |
| virtual StatusOr<brillo::Blob> GetVendorSpecific() = 0; |
| |
| // Gets the TPM fingerprint. |
| virtual StatusOr<int32_t> GetFingerprint() = 0; |
| |
| // Gets the TPM GSC type. |
| virtual StatusOr<GscType> GetGscType() = 0; |
| |
| // Is the SRK ROCA vulnerable or not. |
| virtual StatusOr<bool> IsSrkRocaVulnerable() = 0; |
| |
| // Gets the lookup key for Remote Server Unlock. |
| virtual StatusOr<brillo::Blob> GetRsuDeviceId() = 0; |
| |
| // Gets the IFX upgrade information. |
| virtual StatusOr<IFXFieldUpgradeInfo> GetIFXFieldUpgradeInfo() = 0; |
| |
| // Declares the TPM firmware is stable. |
| virtual Status DeclareTpmFirmwareStable() = 0; |
| |
| // Gets the GSC RW version. |
| virtual StatusOr<RwVersion> GetRwVersion() = 0; |
| |
| // Sends the raw |command|. |
| virtual StatusOr<brillo::Blob> SendRawCommand( |
| const brillo::Blob& command) = 0; |
| |
| protected: |
| Vendor() = default; |
| ~Vendor() = default; |
| }; |
| |
| } // namespace hwsec |
| |
| #endif // LIBHWSEC_BACKEND_VENDOR_H_ |