From 3063f4e1fa5468f3108b557c96cdcf6321add76f Mon Sep 17 00:00:00 2001 From: Fabrice Bellamy Date: Thu, 22 Jan 2026 00:20:18 +0100 Subject: [PATCH] Fix #20 --- src-tauri/src/fido/mod.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src-tauri/src/fido/mod.rs b/src-tauri/src/fido/mod.rs index 6f841ae..6c746e4 100644 --- a/src-tauri/src/fido/mod.rs +++ b/src-tauri/src/fido/mod.rs @@ -98,9 +98,18 @@ pub(crate) fn get_credentials(pin: String) -> Result, Stri let device = FidoKeyHidFactory::create(&cfg) .map_err(|e| format!("Failed to connect to FIDO device: {:?}", e))?; - let rps = device - .credential_management_enumerate_rps(Some(&pin)) - .map_err(|e| format!("Failed to enumerate Relying Parties: {:?}", e))?; + let rps = match device.credential_management_enumerate_rps(Some(&pin)) { + Ok(rps) => rps, + Err(e) => { + // CTAP2_ERR_NO_CREDENTIALS (0x2E) means no credentials exist - return empty list + let err_str = format!("{:?}", e); + if err_str.contains("0x2E") || err_str.contains("NO_CREDENTIALS") { + log::info!("No credentials stored on device (CTAP2_ERR_NO_CREDENTIALS)"); + return Ok(Vec::new()); + } + return Err(format!("Failed to enumerate Relying Parties: {:?}", e)); + } + }; let mut all_credentials = Vec::new();