| // Copyright 2022 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef U2FD_U2FHID_SERVICE_IMPL_H_ |
| #define U2FD_U2FHID_SERVICE_IMPL_H_ |
| |
| #include "u2fd/u2fhid_service.h" |
| |
| #include <functional> |
| #include <memory> |
| #include <optional> |
| |
| #include <attestation/proto_bindings/interface.pb.h> |
| #include <brillo/dbus/dbus_method_response.h> |
| #include <metrics/metrics_library.h> |
| #include <session_manager/dbus-proxies.h> |
| |
| #include "u2fd/client/user_state.h" |
| #include "u2fd/u2f_msg_handler.h" |
| #include "u2fd/u2fhid.h" |
| #include "u2fd/uhid_device.h" |
| |
| namespace u2f { |
| |
| // U2F HID service. Initialized by U2F Daemon. |
| class U2fHidServiceImpl : public U2fHidService { |
| public: |
| U2fHidServiceImpl(bool enable_corp_protocol, |
| bool legacy_kh_fallback, |
| uint32_t vendor_id, |
| uint32_t product_id); |
| U2fHidServiceImpl(const U2fHidServiceImpl&) = delete; |
| U2fHidServiceImpl& operator=(const U2fHidServiceImpl&) = delete; |
| |
| ~U2fHidServiceImpl() override {} |
| |
| bool InitializeDBusProxies(dbus::Bus* bus) override; |
| |
| bool CreateU2fHid(bool allow_g2f_attestation, |
| bool include_g2f_allowlisting_data, |
| std::function<void()> request_user_presence, |
| UserState* user_state, |
| org::chromium::SessionManagerInterfaceProxy* sm_proxy, |
| MetricsLibraryInterface* metrics) override; |
| |
| // Returns a certified copy of the G2F certificate from attestationd, or |
| // std::nullopt on error. The size of the G2F certificate is variable, and |
| // must be specified in |g2f_cert_size|. |
| std::optional<attestation::GetCertifiedNvIndexReply> GetCertifiedG2fCert( |
| int g2f_cert_size) override; |
| |
| TpmVendorCommandProxy* tpm_proxy() override { return &tpm_proxy_; } |
| |
| private: |
| const bool enable_corp_protocol_; |
| const bool legacy_kh_fallback_; |
| |
| // Virtual USB Device ID |
| const uint32_t vendor_id_; |
| const uint32_t product_id_; |
| |
| TpmVendorCommandProxy tpm_proxy_; |
| dbus::ObjectProxy* attestation_proxy_; // Not Owned. |
| |
| // Virtual USB Device |
| std::unique_ptr<U2fHid> u2fhid_; |
| std::unique_ptr<U2fMessageHandler> u2f_msg_handler_; |
| }; |
| |
| } // namespace u2f |
| |
| #endif // U2FD_U2FHID_SERVICE_IMPL_H_ |