aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-12 03:27:04 +0900
committernsfisis <nsfisis@gmail.com>2026-05-12 03:27:04 +0900
commit7266045d40e4126767244510541f5f4764ee8afe (patch)
tree60647571aef063023908657614b9b8c94eca4922 /crates/shirabe
parentac242b9ec64e7487a048954a22078db90ce6a155 (diff)
downloadphp-shirabe-7266045d40e4126767244510541f5f4764ee8afe.tar.gz
php-shirabe-7266045d40e4126767244510541f5f4764ee8afe.tar.zst
php-shirabe-7266045d40e4126767244510541f5f4764ee8afe.zip
feat(port): port Keys.php
Diffstat (limited to 'crates/shirabe')
-rw-r--r--crates/shirabe/src/self_update/keys.rs28
1 files changed, 28 insertions, 0 deletions
diff --git a/crates/shirabe/src/self_update/keys.rs b/crates/shirabe/src/self_update/keys.rs
index a1d30ff..b1da7b5 100644
--- a/crates/shirabe/src/self_update/keys.rs
+++ b/crates/shirabe/src/self_update/keys.rs
@@ -1 +1,29 @@
//! ref: composer/src/Composer/SelfUpdate/Keys.php
+
+use anyhow::Result;
+use regex::Regex;
+use shirabe_php_shim::hash;
+
+pub struct Keys;
+
+impl Keys {
+ pub fn fingerprint(path: &str) -> Result<String> {
+ let content = std::fs::read_to_string(path)?;
+ let re = Regex::new(r"\s").unwrap();
+ let cleaned = re.replace_all(&content, "");
+ let hash = hash("sha256", &cleaned).to_uppercase();
+
+ Ok([
+ &hash[0..8],
+ &hash[8..16],
+ &hash[16..24],
+ &hash[24..32],
+ "",
+ &hash[32..40],
+ &hash[40..48],
+ &hash[48..56],
+ &hash[56..64],
+ ]
+ .join(" "))
+ }
+}