From 7bdf653209efcff264dd47b12b882d55f3a0776b Mon Sep 17 00:00:00 2001 From: Alfie Fresta Date: Mon, 21 Jul 2025 18:51:10 +0100 Subject: [PATCH] Bump version of libwebauthn --- .../Cargo.lock | 31 +++++++++++++------ .../Cargo.toml | 2 +- .../src/credential_service/hybrid.rs | 2 +- .../src/credential_service/usb.rs | 22 +++++++------ 4 files changed, 35 insertions(+), 22 deletions(-) diff --git a/xyz-iinuwa-credential-manager-portal-gtk/Cargo.lock b/xyz-iinuwa-credential-manager-portal-gtk/Cargo.lock index 522af907..79979596 100644 --- a/xyz-iinuwa-credential-manager-portal-gtk/Cargo.lock +++ b/xyz-iinuwa-credential-manager-portal-gtk/Cargo.lock @@ -795,6 +795,12 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + [[package]] name = "crypto-bigint" version = "0.5.5" @@ -1635,9 +1641,13 @@ dependencies = [ [[package]] name = "half" -version = "1.8.3" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b43ede17f21864e81be2fa654110bf1e793774238d86ef8555c37e6519c0403" +checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" +dependencies = [ + "cfg-if", + "crunchy", +] [[package]] name = "hash32" @@ -1927,8 +1937,8 @@ dependencies = [ [[package]] name = "libwebauthn" -version = "0.1.2" -source = "git+https://github.com/linux-credentials/libwebauthn?rev=e73c76b5826801907340396b0fd9bd7dfb0f5760#e73c76b5826801907340396b0fd9bd7dfb0f5760" +version = "0.2.1" +source = "git+https://github.com/linux-credentials/libwebauthn?rev=34f8a59cb1634175b8baf866e6d30d1869f5a221#34f8a59cb1634175b8baf866e6d30d1869f5a221" dependencies = [ "aes", "async-trait", @@ -1954,10 +1964,11 @@ dependencies = [ "num_enum", "p256", "rand 0.8.5", + "rustls", "serde", "serde-indexed 0.2.0", "serde_bytes", - "serde_cbor", + "serde_cbor_2", "serde_derive", "serde_repr", "sha2", @@ -2977,10 +2988,10 @@ dependencies = [ ] [[package]] -name = "serde_cbor" -version = "0.11.2" +name = "serde_cbor_2" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" +checksum = "34aec2709de9078e077090abd848e967abab63c9fb3fdb5d4799ad359d8d482c" dependencies = [ "half", "serde", @@ -3112,9 +3123,9 @@ checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" [[package]] name = "snow" -version = "0.10.0-beta.2" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c689cc478c547a02061bbf874efca827c63ef1112ad396957411326742dccc8" +checksum = "599b506ccc4aff8cf7844bc42cf783009a434c1e26c964432560fb6d6ad02d82" dependencies = [ "aes-gcm", "blake2", diff --git a/xyz-iinuwa-credential-manager-portal-gtk/Cargo.toml b/xyz-iinuwa-credential-manager-portal-gtk/Cargo.toml index aafff1e3..c9645335 100644 --- a/xyz-iinuwa-credential-manager-portal-gtk/Cargo.toml +++ b/xyz-iinuwa-credential-manager-portal-gtk/Cargo.toml @@ -20,7 +20,7 @@ serde_json = "1.0.140" tracing = "0.1.41" tracing-subscriber = "0.3" zbus = { version = "5.5.0", default-features = false, features = ["blocking-api", "tokio"] } -libwebauthn = { git = "https://github.com/linux-credentials/libwebauthn", rev = "e73c76b5826801907340396b0fd9bd7dfb0f5760" } +libwebauthn = { git = "https://github.com/linux-credentials/libwebauthn", rev = "34f8a59cb1634175b8baf866e6d30d1869f5a221" } async-trait = "0.1.88" tokio = { version = "1.45.0", features = ["rt-multi-thread"] } futures-lite = "2.6.0" diff --git a/xyz-iinuwa-credential-manager-portal-gtk/src/credential_service/hybrid.rs b/xyz-iinuwa-credential-manager-portal-gtk/src/credential_service/hybrid.rs index ee3b5042..4ab69184 100644 --- a/xyz-iinuwa-credential-manager-portal-gtk/src/credential_service/hybrid.rs +++ b/xyz-iinuwa-credential-manager-portal-gtk/src/credential_service/hybrid.rs @@ -50,7 +50,7 @@ impl HybridHandler for InternalHybridHandler { }; tokio::spawn(async move { let mut channel = match device.channel().await { - Ok((channel, _)) => channel, + Ok(channel) => channel, Err(e) => { tracing::error!("Failed to open hybrid channel: {:?}", e); panic!(); diff --git a/xyz-iinuwa-credential-manager-portal-gtk/src/credential_service/usb.rs b/xyz-iinuwa-credential-manager-portal-gtk/src/credential_service/usb.rs index 8aa2675e..31c20dab 100644 --- a/xyz-iinuwa-credential-manager-portal-gtk/src/credential_service/usb.rs +++ b/xyz-iinuwa-credential-manager-portal-gtk/src/credential_service/usb.rs @@ -8,11 +8,12 @@ use libwebauthn::{ proto::CtapError, transport::{ hid::{channel::HidChannelHandle, HidDevice}, - Device, + Channel, Device, }, webauthn::{Error as WebAuthnError, WebAuthn}, - UxUpdate, + UvUpdate, }; +use tokio::sync::broadcast; use tokio::sync::mpsc::{self, Receiver, Sender, WeakSender}; use tracing::{debug, warn}; @@ -84,7 +85,7 @@ impl InProcessUsbHandler { let dev = device.clone(); let res = match device.channel().await { - Ok((ref mut channel, _)) => { + Ok(ref mut channel) => { let cancel_handle = channel.get_handle(); stx.send((idx, dev, cancel_handle)).await.unwrap(); drop(stx); @@ -292,10 +293,11 @@ async fn handle_events( Err(err) => { tracing::error!("Failed to open channel to USB authenticator, cannot receive user verification events: {:?}", err); } - Ok((mut channel, state_rx)) => { + Ok(mut channel) => { let signal_tx2 = signal_tx.clone().downgrade(); + let ux_updates_rx = channel.get_ux_update_receiver(); tokio::spawn(async move { - handle_usb_updates(&signal_tx2, state_rx).await; + handle_usb_updates(&signal_tx2, ux_updates_rx).await; debug!("Reached end of USB update task"); }); tracing::debug!( @@ -527,15 +529,15 @@ impl From for UsbState { async fn handle_usb_updates( signal_tx: &WeakSender>, - mut state_rx: Receiver, + mut state_rx: broadcast::Receiver, ) { - while let Some(msg) = state_rx.recv().await { + while let Ok(msg) = state_rx.recv().await { let signal_tx = match signal_tx.upgrade() { Some(tx) => tx, None => break, }; match msg { - UxUpdate::UvRetry { attempts_left } => { + UvUpdate::UvRetry { attempts_left } => { if let Err(err) = signal_tx .send(Ok(UsbUvMessage::NeedsUserVerification { attempts_left })) .await @@ -543,7 +545,7 @@ async fn handle_usb_updates( tracing::error!("Authenticator requested user verficiation, but we cannot relay the message to credential service: {:?}", err); } } - UxUpdate::PinRequired(pin_update) => { + UvUpdate::PinRequired(pin_update) => { let (pin_tx, mut pin_rx) = mpsc::channel(1); if let Err(err) = signal_tx .send(Ok(UsbUvMessage::NeedsPin { @@ -562,7 +564,7 @@ async fn handle_usb_updates( None => tracing::debug!("Pin channel closed before receiving pin from client."), } } - UxUpdate::PresenceRequired => { + UvUpdate::PresenceRequired => { if let Err(err) = signal_tx.send(Ok(UsbUvMessage::NeedsUserPresence)).await { tracing::error!("Authenticator requested user presence, but we cannot relay the message to the credential service: {:?}", err); }