| // Copyright 2023 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_H_ |
| #define LIBARC_ATTESTATION_LIB_MANAGER_H_ |
| |
| #include <memory> |
| #include <utility> |
| #include <vector> |
| |
| #include <base/threading/thread.h> |
| #include <brillo/secure_blob.h> |
| #include <libarc-attestation/lib/manager_base.h> |
| #include <libarc-attestation/lib/interface.h> |
| #include <libarc-attestation/lib/provisioner.h> |
| #include <libarc-attestation/lib/version_attester.h> |
| |
| namespace arc_attestation { |
| |
| // ArcAttestationManager is a singleton class that service all API calls. |
| class ArcAttestationManager : public ArcAttestationManagerBase { |
| public: |
| ArcAttestationManager(); |
| ~ArcAttestationManager() override = default; |
| |
| void Setup() override; |
| AndroidStatus ProvisionDkCert(bool blocking) override; |
| AndroidStatus GetDkCertChain(std::vector<brillo::Blob>& cert_out) override; |
| AndroidStatus SignWithP256Dk(const brillo::Blob& input, |
| brillo::Blob& signature) override; |
| AndroidStatus QuoteCrOSBlob(const brillo::Blob& challenge, |
| brillo::Blob& output) override; |
| |
| Provisioner* GetProvisionerForTesting() { return provisioner_.get(); } |
| |
| VersionAttester* GetVersionAttesterForTesting() { |
| return version_attester_.get(); |
| } |
| |
| private: |
| // All library operations run on this thread. |
| std::unique_ptr<base::Thread> library_thread_; |
| // Task runner for the library thread. |
| scoped_refptr<base::SingleThreadTaskRunner> library_task_runner_; |
| // The provisioner for provisioning the certs. Caller can assume this is |
| // always available after the constructor. |
| std::unique_ptr<Provisioner> provisioner_; |
| // Version Attester deals with quoting the OS version. |
| std::unique_ptr<VersionAttester> version_attester_; |
| }; |
| |
| } // namespace arc_attestation |
| |
| #endif // LIBARC_ATTESTATION_LIB_MANAGER_H_ |