| // 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_VERSION_ATTESTER_H_ | |
| #define LIBARC_ATTESTATION_LIB_VERSION_ATTESTER_H_ | |
| #include <memory> | |
| #include <string> | |
| #include <brillo/secure_blob.h> | |
| #include <libarc-attestation/lib/interface.h> | |
| #include <libarc-attestation/lib/provisioner.h> | |
| #include <libarc_attestation/proto_bindings/arc_attestation_blob.pb.h> | |
| #include <libhwsec/factory/factory_impl.h> | |
| #include <libhwsec/frontend/attestation/frontend.h> | |
| namespace arc_attestation { | |
| // VersionAttester is in charge of attesting the version of the device. | |
| // This is usually done through libhwsec. | |
| class VersionAttester { | |
| public: | |
| explicit VersionAttester(Provisioner* provisioner); | |
| ~VersionAttester() = default; | |
| // This will provide an attestation blob. | |
| // This must be called on the library thread from AttestationInterface. | |
| AndroidStatus QuoteCrOSBlob(const brillo::Blob& challenge, | |
| brillo::Blob& output); | |
| void SetHwsecFactoryForTesting(hwsec::Factory* hwsec_factory) { | |
| hwsec_factory_ = hwsec_factory; | |
| } | |
| private: | |
| // Setup the libhwsec factory. | |
| bool InitHwsec(); | |
| // Provisioner to access the certificates. | |
| Provisioner* provisioner_; | |
| // The instance of hwsec factory for accessing hwsec in production. | |
| std::unique_ptr<hwsec::FactoryImpl> default_hwsec_factory_; | |
| // The instance of hwsec factory actually used, usually the same as | |
| // default_hwsec_factory_, but can be overridden for testing. | |
| hwsec::Factory* hwsec_factory_; | |
| // The instance of hwsec frontend used. | |
| std::unique_ptr<const hwsec::ArcAttestationFrontend> hwsec_frontend_; | |
| }; | |
| } // namespace arc_attestation | |
| #endif // LIBARC_ATTESTATION_LIB_VERSION_ATTESTER_H_ |