From adc81774b04cb41bfe3f8b09aa99648d02950ee0 Mon Sep 17 00:00:00 2001 From: nab138 Date: Sat, 14 Feb 2026 15:07:31 -0500 Subject: [PATCH] Windows fix --- isideload/src/sideload/sideloader.rs | 3 ++- isideload/src/util/keyring_storage.rs | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/isideload/src/sideload/sideloader.rs b/isideload/src/sideload/sideloader.rs index 7efcf14..5501e38 100644 --- a/isideload/src/sideload/sideloader.rs +++ b/isideload/src/sideload/sideloader.rs @@ -78,7 +78,8 @@ impl Sideloader { self.storage.as_ref(), &self.max_certs_behavior, ) - .await?; + .await + .context("Failed to retrieve certificate identity")?; let mut app = Application::new(app_path)?; let special = app.get_special_app(); diff --git a/isideload/src/util/keyring_storage.rs b/isideload/src/util/keyring_storage.rs index 0ebaa34..2b7a78a 100644 --- a/isideload/src/util/keyring_storage.rs +++ b/isideload/src/util/keyring_storage.rs @@ -43,4 +43,22 @@ impl SideloadingStorage for KeyringStorage { Err(e) => Err(e.into()), } } + + // Linux doesn't seem to properly retrive binary secrets, so we don't use this implementation and instead let it fall back to base64 encoding. + // Windows fails to store the base64 encoded data because it is too long. + #[cfg(target_os = "windows")] + fn store_data(&self, key: &str, value: &[u8]) -> Result<(), Report> { + Entry::new(&self.service_name, key)?.set_secret(value)?; + Ok(()) + } + + #[cfg(target_os = "windows")] + fn retrieve_data(&self, key: &str) -> Result>, Report> { + let entry = Entry::new(&self.service_name, key)?; + match entry.get_secret() { + Ok(secret) => Ok(Some(secret)), + Err(keyring::Error::NoEntry) => Ok(None), + Err(e) => Err(e.into()), + } + } }