| // Copyright 2024 The ChromiumOS Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef LIBARC_ATTESTATION_LIB_MANAGER_BASE_H_ | |
| #define LIBARC_ATTESTATION_LIB_MANAGER_BASE_H_ | |
| #include <memory> | |
| #include <utility> | |
| #include <vector> | |
| #include <brillo/secure_blob.h> | |
| #include <libarc-attestation/lib/interface.h> | |
| namespace arc_attestation { | |
| class ARC_ATTESTATION_EXPORT ArcAttestationManagerBase { | |
| public: | |
| ArcAttestationManagerBase() = default; | |
| virtual ~ArcAttestationManagerBase() = default; | |
| // Setup the threading and other variables. | |
| virtual void Setup() = 0; | |
| // Provision the Device Key certificate chain. | |
| virtual AndroidStatus ProvisionDkCert(bool blocking) = 0; | |
| // Retrieve the Device Key certs. | |
| virtual AndroidStatus GetDkCertChain(std::vector<brillo::Blob>& cert_out) = 0; | |
| // Sign with the device key. | |
| virtual AndroidStatus SignWithP256Dk(const brillo::Blob& input, | |
| brillo::Blob& signature) = 0; | |
| // Quote the ChromeOS specific blob for ARC Attestation. | |
| virtual AndroidStatus QuoteCrOSBlob(const brillo::Blob& challenge, | |
| brillo::Blob& output) = 0; | |
| }; | |
| class ARC_ATTESTATION_EXPORT ArcAttestationManagerSingleton { | |
| public: | |
| // Retrieve the singleton. | |
| // This is not thread safe and should only be accessed from the API functions | |
| // because the caller is required to call these functions without | |
| // overlapping. | |
| static ArcAttestationManagerSingleton* Get(); | |
| static ArcAttestationManagerSingleton* CreateForTesting(); | |
| static void DestroyForTesting(); | |
| void SetManagerForTesting(std::unique_ptr<ArcAttestationManagerBase> manager); | |
| ArcAttestationManagerBase* manager(); | |
| private: | |
| // The global singleton instance of attestation interface. | |
| static ArcAttestationManagerSingleton* g_instance; | |
| // Private constructor because it's singleton. | |
| ArcAttestationManagerSingleton(); | |
| // Setup the manager. | |
| void Setup(); | |
| // The manager instance. | |
| std::unique_ptr<ArcAttestationManagerBase> manager_; | |
| }; | |
| } // namespace arc_attestation | |
| #endif // LIBARC_ATTESTATION_LIB_MANAGER_BASE_H_ |