From 80240674b463295e9eb7b012c1273c870bf1bce4 Mon Sep 17 00:00:00 2001 From: Alfie Fresta Date: Tue, 3 Mar 2026 09:43:42 +0000 Subject: [PATCH] feat(ble): Support FIDO2 for BLE transport, chooses best protocol available --- .../src/transport/ble/btleplug/manager.rs | 61 +++++++++++++++++++ libwebauthn/src/transport/ble/channel.rs | 4 +- 2 files changed, 63 insertions(+), 2 deletions(-) diff --git a/libwebauthn/src/transport/ble/btleplug/manager.rs b/libwebauthn/src/transport/ble/btleplug/manager.rs index 1a87fe9b..677de75f 100644 --- a/libwebauthn/src/transport/ble/btleplug/manager.rs +++ b/libwebauthn/src/transport/ble/btleplug/manager.rs @@ -49,6 +49,11 @@ impl SupportedRevisions { } } } + + pub fn select_best(&self) -> Option { + self.select_protocol(FidoProtocol::FIDO2) + .or_else(|| self.select_protocol(FidoProtocol::U2F)) + } } async fn on_peripheral_service_data( @@ -241,3 +246,59 @@ async fn discover_services(peripheral: &Peripheral) -> Result BleChannel<'a> { let (ux_update_sender, _) = broadcast::channel(16); let revision = revisions - .select_protocol(FidoProtocol::U2F) + .select_best() .ok_or(Error::Transport(TransportError::NegotiationFailed))?; let connection = btleplug::connect(&device.btleplug_device.peripheral, &revision) .await