From 27de2210ecb5119522348a7a274b99840e0c287e Mon Sep 17 00:00:00 2001 From: nab138 Date: Thu, 5 Feb 2026 18:16:21 -0500 Subject: [PATCH] start implimenting cert stuff --- Cargo.lock | 11 +++++++++++ isideload/Cargo.toml | 4 +++- isideload/src/anisette/remote_v3/mod.rs | 5 ++--- isideload/src/sideload/certificate.rs | 6 ++++++ isideload/src/sideload/mod.rs | 2 +- isideload/src/util/keyring_storage.rs | 0 isideload/src/util/mod.rs | 3 +++ isideload/src/util/storage.rs | 21 +++++++++++++++++++++ 8 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 isideload/src/sideload/certificate.rs create mode 100644 isideload/src/util/keyring_storage.rs create mode 100644 isideload/src/util/storage.rs diff --git a/Cargo.lock b/Cargo.lock index 5bbea23..1d69ccd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -968,6 +968,7 @@ dependencies = [ "hex", "hmac", "idevice", + "keyring", "pbkdf2", "plist", "plist-macro", @@ -1033,6 +1034,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "keyring" +version = "3.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eebcc3aff044e5944a8fbaf69eb277d11986064cba30c468730e8b9909fb551c" +dependencies = [ + "log", + "zeroize", +] + [[package]] name = "lazy_static" version = "1.5.0" diff --git a/isideload/Cargo.toml b/isideload/Cargo.toml index 5a74e0d..9af6964 100644 --- a/isideload/Cargo.toml +++ b/isideload/Cargo.toml @@ -11,8 +11,9 @@ keywords = ["ios", "sideload"] readme = "../README.md" [features] -default = ["install"] +default = ["install", "keyring-storage"] install = ["dep:idevice"] +keyring-storage = ["keyring"] [dependencies] idevice = { version = "0.1.52", optional = true } @@ -39,3 +40,4 @@ cbc = { version = "0.2.0-rc.3", features = ["alloc"] } aes = "0.9.0-rc.4" aes-gcm = "0.11.0-rc.3" tokio = "1.49.0" +keyring = { version = "3.6.3", optional = true } diff --git a/isideload/src/anisette/remote_v3/mod.rs b/isideload/src/anisette/remote_v3/mod.rs index 1677544..3665a81 100644 --- a/isideload/src/anisette/remote_v3/mod.rs +++ b/isideload/src/anisette/remote_v3/mod.rs @@ -20,7 +20,7 @@ use crate::auth::grandslam::GrandSlam; use crate::util::plist::PlistDataExtract; use futures_util::{SinkExt, StreamExt}; -pub const DEFAULT_ANISETTE_V3_URL: &str = "https://ani.sidestore.io"; +pub const DEFAULT_ANISETTE_V3_URL: &str = "https://ani.stikstore.app"; pub struct RemoteV3AnisetteProvider { pub state: Option, @@ -127,8 +127,7 @@ impl AnisetteProvider for RemoteV3AnisetteProvider { Ok(data) } AnisetteHeaders::GetHeadersError { message } => { - Err(report!("Failed to get anisette headers") - .attach(message)) + Err(report!("Failed to get anisette headers").attach(message)) } } } diff --git a/isideload/src/sideload/certificate.rs b/isideload/src/sideload/certificate.rs new file mode 100644 index 0000000..c56d52b --- /dev/null +++ b/isideload/src/sideload/certificate.rs @@ -0,0 +1,6 @@ +pub struct CertificateIdentity { + pub machine_id: String, + pub machine_name: String, +} + +impl CertificateIdentity {} diff --git a/isideload/src/sideload/mod.rs b/isideload/src/sideload/mod.rs index eb0af97..ecf254f 100644 --- a/isideload/src/sideload/mod.rs +++ b/isideload/src/sideload/mod.rs @@ -8,6 +8,7 @@ use crate::dev::teams::TeamsApi; use crate::dev::{developer_session::DeveloperSession, devices::DevicesApi}; use crate::util::device::IdeviceInfo; +pub mod certificate; pub mod config; pub use config::{SideloadConfiguration, TeamSelection}; @@ -18,7 +19,6 @@ pub async fn sideload_app( config: &SideloadConfiguration, ) -> Result<(), Report> { let device_info = IdeviceInfo::from_device(device_provider).await?; - let teams = dev_session.list_teams().await?; let team = match teams.len() { 0 => { diff --git a/isideload/src/util/keyring_storage.rs b/isideload/src/util/keyring_storage.rs new file mode 100644 index 0000000..e69de29 diff --git a/isideload/src/util/mod.rs b/isideload/src/util/mod.rs index b6f59a8..41d1f65 100644 --- a/isideload/src/util/mod.rs +++ b/isideload/src/util/mod.rs @@ -1,2 +1,5 @@ pub mod device; +#[cfg(feature = "keyring-storage")] +pub mod keyring_storage; pub mod plist; +pub mod storage; diff --git a/isideload/src/util/storage.rs b/isideload/src/util/storage.rs new file mode 100644 index 0000000..109d554 --- /dev/null +++ b/isideload/src/util/storage.rs @@ -0,0 +1,21 @@ +use base64::prelude::*; +use rootcause::prelude::*; + +pub trait SideloadingStorage: Send + Sync { + fn store(&self, key: &str, value: &str) -> Result<(), Report>; + fn retrieve(&self, key: &str) -> Result, Report>; + + fn store_data(&self, key: &str, value: &[u8]) -> Result<(), Report> { + let encoded = BASE64_STANDARD.encode(value); + self.store(key, &encoded) + } + + fn retrieve_data(&self, key: &str) -> Result>, Report> { + if let Some(encoded) = self.retrieve(key)? { + let decoded = BASE64_STANDARD.decode(&encoded)?; + Ok(Some(decoded)) + } else { + Ok(None) + } + } +}