Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
google
GitHub Repository: google/crosvm
Path: blob/main/devices/src/usb/backend/fido_backend/fido_provider.rs
5394 views
1
// Copyright 2024 The ChromiumOS Authors
2
// Use of this source code is governed by a BSD-style license that can be
3
// found in the LICENSE file.
4
5
use std::fs::File;
6
use std::sync::Arc;
7
8
use sync::Mutex;
9
10
use crate::usb::backend::device::BackendDeviceType;
11
use crate::usb::backend::device::DeviceState;
12
use crate::usb::backend::error::Error;
13
use crate::usb::backend::error::Result;
14
use crate::usb::backend::fido_backend::fido_device::FidoDevice;
15
use crate::usb::backend::fido_backend::fido_passthrough::FidoPassthroughDevice;
16
use crate::usb::backend::utils::UsbUtilEventHandler;
17
use crate::utils::EventHandler;
18
use crate::utils::EventLoop;
19
20
/// Utility function to attach a security key device to the backend provider. It initializes a
21
/// `FidoPassthroughDevice` and returns it with its `EventHandler` to the backend.
22
pub fn attach_security_key(
23
hidraw: File,
24
event_loop: Arc<EventLoop>,
25
device_state: DeviceState,
26
) -> Result<(Arc<Mutex<BackendDeviceType>>, Arc<dyn EventHandler>)> {
27
let device =
28
FidoDevice::new(hidraw, event_loop.clone()).map_err(Error::CreateFidoBackendDevice)?;
29
let passthrough_device =
30
FidoPassthroughDevice::new(Arc::new(Mutex::new(device)), device_state, event_loop)
31
.map_err(Error::CreateFidoBackendDevice)?;
32
let device_impl = BackendDeviceType::FidoDevice(passthrough_device);
33
let arc_mutex_device = Arc::new(Mutex::new(device_impl));
34
35
let event_handler: Arc<dyn EventHandler> = Arc::new(UsbUtilEventHandler {
36
device: arc_mutex_device.clone(),
37
});
38
39
Ok((arc_mutex_device, event_handler))
40
}
41
42