| // 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 LIBHWSEC_BACKEND_ATTESTATION_H_ | |
| #define LIBHWSEC_BACKEND_ATTESTATION_H_ | |
| #include <string> | |
| #include <attestation/proto_bindings/attestation_ca.pb.h> | |
| #include <attestation/proto_bindings/database.pb.h> | |
| #include <brillo/secure_blob.h> | |
| #include "libhwsec/status.h" | |
| #include "libhwsec/structures/key.h" | |
| #include "libhwsec/structures/operation_policy.h" | |
| namespace hwsec { | |
| class Attestation { | |
| public: | |
| struct CertifyKeyResult { | |
| std::string certify_info; | |
| std::string signature; | |
| }; | |
| struct CreateIdentityResult { | |
| attestation::IdentityKey identity_key; | |
| attestation::IdentityBinding identity_binding; | |
| }; | |
| // Gets attestation::TpmVersion | |
| virtual StatusOr<attestation::TpmVersion> GetTpmVersion() = 0; | |
| // Quotes the |device_configs| with |key|. The |key| must be a restricted | |
| // signing key. | |
| virtual StatusOr<attestation::Quote> Quote(DeviceConfigs device_configs, | |
| Key key) = 0; | |
| // Checks if |quote| is valid for a single device config specified by | |
| // |device_configs|. | |
| virtual StatusOr<bool> IsQuoted(DeviceConfigs device_configs, | |
| const attestation::Quote& quote) = 0; | |
| // Create a key with |key_type|, |key_usage|, and |restriction|, and | |
| // certifies it by |identity_key| with |external_data|. When | |
| // |endorsement_auth| is kEndorsementAuth, the key is created as a virtual | |
| // endorsement key (vEK). | |
| virtual StatusOr<attestation::CertifiedKey> CreateCertifiedKey( | |
| Key identity_key, | |
| attestation::KeyType key_type, | |
| attestation::KeyUsage key_usage, | |
| KeyRestriction restriction, | |
| EndorsementAuth endorsement_auth, | |
| const std::string& external_data) = 0; | |
| // Creates identity of |key_type| type, which contains | |
| // attestation::IdentityKey and attestation::IdentityBinding. | |
| virtual StatusOr<CreateIdentityResult> CreateIdentity( | |
| attestation::KeyType key_type) = 0; | |
| // Activates an attestation identity key.|identity_key| of |key_type| with | |
| // the |encrypted_certificate| provided by the Attestation CA. | |
| virtual StatusOr<brillo::SecureBlob> ActivateIdentity( | |
| attestation::KeyType key_type, | |
| Key identity_key, | |
| const attestation::EncryptedIdentityCredential& | |
| encrypted_certificate) = 0; | |
| // Finalizes the enrollment preparation. For example, in case of TPM, this | |
| // would remove the owner dependency of attestation. | |
| virtual Status FinalizeEnrollmentPreparation() = 0; | |
| protected: | |
| Attestation() = default; | |
| ~Attestation() = default; | |
| }; | |
| } // namespace hwsec | |
| #endif // LIBHWSEC_BACKEND_ATTESTATION_H_ |