Skip to main content

urma_node/platform/
service_sid.rs

1//! The per-service SID Windows derives from a service name: SHA-1 over the
2//! upper-cased UTF-16LE name, read as five little-endian sub-authorities.
3use sha1::{Digest, Sha1};
4
5pub fn service_sid(name: &str) -> String {
6    let mut hasher = Sha1::new();
7    for unit in name.to_uppercase().encode_utf16() {
8        hasher.update(unit.to_le_bytes());
9    }
10    let digest = hasher.finalize();
11    let parts: Vec<String> = digest
12        .as_chunks::<4>()
13        .0
14        .iter()
15        .map(|chunk| u32::from_le_bytes(*chunk).to_string())
16        .collect();
17    format!("S-1-5-80-{}", parts.join("-"))
18}