From 663be090c03dd3c0114350c53fef4aef9f9743da Mon Sep 17 00:00:00 2001 From: Anton Lazarev <22821309+antonok-edm@users.noreply.github.com> Date: Thu, 30 May 2024 17:51:39 -0700 Subject: [PATCH 1/2] Add FIDO alliance page (#69) * add fido alliance page * add CtapReport --- macros/src/spec.rs | 6 ++++++ src/descriptor.rs | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/macros/src/spec.rs b/macros/src/spec.rs index fd78d26..798e4a0 100644 --- a/macros/src/spec.rs +++ b/macros/src/spec.rs @@ -176,6 +176,7 @@ pub fn try_resolve_constant(key_name: String, path: String) -> Option { ("usage_page", "DIGITIZER") => Some(0x0D), ("usage_page", "ALPHANUMERIC_DISPLAY") => Some(0x14), ("usage_page", "BARCODE_SCANNER") => Some(0x8C), + ("usage_page", "FIDO_ALLIANCE") => Some(0xF1D0), ("usage_page", "VENDOR_DEFINED_START") => Some(0xFF00), ("usage_page", "VENDOR_DEFINED_END") => Some(0xFFFF), @@ -228,6 +229,11 @@ pub fn try_resolve_constant(key_name: String, path: String) -> Option { ("usage", "GRAPHIC_EQUALIZER") => Some(0x06), ("usage", "AC_PAN") => Some(0x0238), + // FIDO Alliance usage_page + ("usage", "U2F_AUTHENTICATOR_DEVICE") => Some(0x1), + ("usage", "INPUT_REPORT_DATA") => Some(0x20), + ("usage", "OUTPUT_REPORT_DATA") => Some(0x21), + (_, _) => None, } } diff --git a/src/descriptor.rs b/src/descriptor.rs index c1a8e0c..833c680 100644 --- a/src/descriptor.rs +++ b/src/descriptor.rs @@ -978,3 +978,21 @@ impl From for SystemControlKey { } } } + +/// CtapReport describes a report and its companion descriptor that can be +/// used to present a FIDO-compatible authenticator device to the host. +#[gen_hid_descriptor( + (collection = APPLICATION, usage_page = FIDO_ALLIANCE, usage = U2F_AUTHENTICATOR_DEVICE) = { + (usage = INPUT_REPORT_DATA, logical_min = 0x0) = { + #[item_settings data,variable,absolute] data_in=input; + }; + (usage = OUTPUT_REPORT_DATA, logical_min = 0x0) = { + #[item_settings data,variable,absolute] data_out=output; + }; + } +)] +#[allow(dead_code)] +pub struct CtapReport { + pub data_in: [u8; 64], + pub data_out: [u8; 64], +} From 76325c3c9368ce314c59630de5833de800955b7b Mon Sep 17 00:00:00 2001 From: Boris Faure Date: Tue, 16 Jul 2024 04:46:24 +0200 Subject: [PATCH 2/2] Derive Default, Eq and PartialEq for the reports (#66) There was already a default implementation for KeyboardReport but it can be derived as well. Also derive Eq & PartialEq to be able to know if 2 reports are different. --- macros/src/lib.rs | 2 +- src/descriptor.rs | 11 ----------- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/macros/src/lib.rs b/macros/src/lib.rs index 6c2ae43..85dadab 100644 --- a/macros/src/lib.rs +++ b/macros/src/lib.rs @@ -229,7 +229,7 @@ pub fn gen_hid_descriptor(args: TokenStream, input: TokenStream) -> TokenStream let (descriptor, fields) = output; let mut out = quote! { - #[derive(Debug, Clone, Copy)] + #[derive(Debug, Clone, Copy, Default, Eq, PartialEq)] #[repr(C, packed)] #decl diff --git a/src/descriptor.rs b/src/descriptor.rs index 833c680..7b6ea62 100644 --- a/src/descriptor.rs +++ b/src/descriptor.rs @@ -83,17 +83,6 @@ pub struct KeyboardReport { pub keycodes: [u8; 6], } -impl KeyboardReport { - pub const fn default() -> Self { - Self { - modifier: 0, - reserved: 0, - leds: 0, - keycodes: [0u8; 6], - } - } -} - /// KeyboardUsage describes the key codes to be used in implementing a USB keyboard. /// /// The usage type of all key codes is Selectors, except for the modifier keys