Upgrade dependencies to latest stable

zip 0.6.6 -> 8.6.0 (the 0.6 line is unmaintained), aes 0.8 -> 0.9
(BlockCipherDecrypt trait replaces BlockDecrypt), sha2 0.10 -> 0.11
(Array no longer formats as hex; local hex_digest helpers). Outputs are
byte-identical across the upgrade: full golden corpus and Android corpus
sidecars all pass.
This commit is contained in:
2026-09-02 03:19:06 +08:00
parent d3dd1a8ff8
commit cbfacbc31f
8 changed files with 222 additions and 120 deletions
+12 -3
View File
@@ -108,7 +108,7 @@ pub fn restore_so_file(input: &Path, dest: &Path, verbose: bool) -> Result<Optio
pub fn content_identity(data: &[u8]) -> String {
let mut digest = Sha256::new();
digest.update(data);
format!("{:x}", digest.finalize())
hex_digest(&digest.finalize())
}
/// Restore an il2cpp metadata blob (Android seeded permutation first, then the
@@ -217,7 +217,7 @@ pub fn restore_package(
for index in 0..archive.len() {
let (name, is_dir) = {
let entry = archive.by_index(index)?;
(entry.enclosed_name().map(PathBuf::from), entry.is_dir())
(entry.enclosed_name(), entry.is_dir())
};
if is_dir {
continue;
@@ -256,7 +256,7 @@ pub fn restore_package(
for nested_index in 0..nested_archive.len() {
let (entry_name, is_dir) = {
let entry = nested_archive.by_index(nested_index)?;
(entry.enclosed_name().map(PathBuf::from), entry.is_dir())
(entry.enclosed_name(), entry.is_dir())
};
if !is_dir {
let Some(entry_name) = entry_name else {
@@ -430,3 +430,12 @@ fn extract_entry(
std::fs::write(&destination, &output)?;
Ok(destination)
}
/// Lowercase hex of a digest output (sha2 0.11's `Array` no longer formats as
/// hex directly).
fn hex_digest(data: &[u8]) -> String {
let mut out = String::with_capacity(data.len() * 2);
for byte in data {
out.push_str(&format!("{byte:02x}"));
}
out
}