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
+3 -2
View File
@@ -1,7 +1,7 @@
//! Cryptographic and compression primitives used by the Android protector.
use aes::Aes256;
use aes::cipher::{Block, BlockDecrypt, KeyInit};
use aes::cipher::{BlockCipherDecrypt, KeyInit};
const RECORD_SIZE: usize = 0x5c;
@@ -582,7 +582,8 @@ pub fn transform_segment(
for chunk in transformed[..aligned_size].chunks_exact_mut(16) {
let mut ciphertext = [0_u8; 16];
ciphertext.copy_from_slice(chunk);
cipher.decrypt_block(Block::<Aes256>::from_mut_slice(chunk));
// chunk is exactly one block (chunks_exact_mut(16)).
cipher.decrypt_block(chunk.try_into().expect("chunk is one block"));
for (byte, prior) in chunk.iter_mut().zip(previous) {
*byte ^= prior;
}