Git · dadoum.zone
Repositories
Help
Report an Issue
apple-crates
Code
Commits
Branches
Tags
Search
Tree:
a74924e
Branches
Tags
main
apple-crates
aps
src
windows_signer.rs
Refactor and unify a lot of things for another project and implement airdrop support
Dadoum
commited
a74924e
at 2026-10-25 22:15:58
windows_signer.rs
Blame
History
Raw
mod constants; use crate::activation::sign_sha1; use crate::{ActivationSignature, ActivationSigner}; use constants::{CERTIFICATE_AUTHORITY_CHAIN, IDENTITIES, PUBLIC_EXPONENT}; use rsa::rand_core::{OsRng, RngCore}; use rsa::{BigUint, RsaPrivateKey}; /// Signs activation requests using the embedded Windows activation identities. pub struct WindowsActivationSigner { private_key: RsaPrivateKey, certificate_chain: Vec<u8>, } impl WindowsActivationSigner { /// Selects one of the ten identities, as Apple's Windows client does. pub fn new() -> Self { let identity = &IDENTITIES[OsRng.next_u32() as usize % IDENTITIES.len()]; let private_key = RsaPrivateKey::from_p_q( BigUint::from_bytes_be(&identity.p), BigUint::from_bytes_be(&identity.q), PUBLIC_EXPONENT.into(), ) .expect("embedded activation primes must form a valid RSA key"); WindowsActivationSigner { private_key, certificate_chain: [identity.certificate, CERTIFICATE_AUTHORITY_CHAIN].concat(), } } } impl Default for WindowsActivationSigner { fn default() -> Self { WindowsActivationSigner::new() } } impl ActivationSigner for WindowsActivationSigner { type Error = rsa::Error; fn sign(&self, activation_info_xml: &[u8]) -> Result<ActivationSignature, Self::Error> { Ok(ActivationSignature { signature: sign_sha1(&self.private_key, activation_info_xml)?, certificate_chain: self.certificate_chain.clone(), }) } }