diff --git a/Cargo.lock b/Cargo.lock index 3d846ae..956d945 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -22,13 +22,13 @@ checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" [[package]] name = "aes" -version = "0.8.4" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +checksum = "66bd29a732b644c0431c6140f370d097879203d79b80c94a6747ba0872adaef8" dependencies = [ - "cfg-if", "cipher", - "cpufeatures 0.2.17", + "cpubits", + "cpufeatures", ] [[package]] @@ -169,11 +169,11 @@ dependencies = [ [[package]] name = "block-padding" -version = "0.3.3" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +checksum = "710f1dd022ef4e93f8a438b4ba958de7f64308434fa6a87104481645cc30068b" dependencies = [ - "generic-array", + "hybrid-array", ] [[package]] @@ -260,9 +260,9 @@ checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" [[package]] name = "cbc" -version = "0.1.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +checksum = "98db6aeaef0eeef2c1e3ce9a27b739218825dae116076352ac3777076aa22225" dependencies = [ "cipher", ] @@ -307,17 +307,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" dependencies = [ "cfg-if", - "cpufeatures 0.3.0", + "cpufeatures", "rand_core", ] [[package]] name = "cipher" -version = "0.4.4" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +checksum = "e34d8227fe1ba289043aeb13792056ff80fd6de1a9f49137a5f499de8e8c78ea" dependencies = [ - "crypto-common 0.1.7", + "crypto-common", "inout", ] @@ -464,13 +464,10 @@ dependencies = [ ] [[package]] -name = "cpufeatures" -version = "0.2.17" +name = "cpubits" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] +checksum = "5ef0c543070d296ea414df2dd7625d1b24866ce206709d8a4a424f28377f5861" [[package]] name = "cpufeatures" @@ -530,16 +527,6 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" -[[package]] -name = "crypto-common" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" -dependencies = [ - "generic-array", - "typenum", -] - [[package]] name = "crypto-common" version = "0.2.1" @@ -631,7 +618,7 @@ checksum = "4850db49bf08e663084f7fb5c87d202ef91a3907271aff24a94eb97ff039153c" dependencies = [ "block-buffer", "const-oid", - "crypto-common 0.2.1", + "crypto-common", ] [[package]] @@ -882,16 +869,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - [[package]] name = "getrandom" version = "0.2.17" @@ -1214,12 +1191,12 @@ dependencies = [ [[package]] name = "inout" -version = "0.1.4" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7" dependencies = [ "block-padding", - "generic-array", + "hybrid-array", ] [[package]] @@ -2094,7 +2071,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214" dependencies = [ "cfg-if", - "cpufeatures 0.3.0", + "cpufeatures", "digest", ] @@ -2105,7 +2082,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" dependencies = [ "cfg-if", - "cpufeatures 0.3.0", + "cpufeatures", "digest", ] diff --git a/Cargo.toml b/Cargo.toml index 8be3b5b..d9c2ab2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,13 +9,13 @@ exclude = [".github", "*.py", "AGENTS.md"] [dependencies] adler = { version = "1", optional = true } -aes = { version = "0.8", optional = true } +aes = { version = "0.9", optional = true } anyhow = "1" base64 = { version = "0.22", optional = true } block_compression = { version = "0.9", optional = true, default-features = false, features = ["bc7"] } byteorder = { version = "1.5", default-features = false, optional = true} bytes = { version = "1.11", optional = true } -cbc = { version = "0.1", optional = true } +cbc = { version = "0.2", optional = true } clap = { version = "4.5", features = ["derive"] } crc32fast = { version = "1.5", optional = true } csv = "1.3" diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cz.rs b/src/scripts/kirikiri/archive/xp3/crypt/cz.rs index d28ec9d..c86d0b2 100644 --- a/src/scripts/kirikiri/archive/xp3/crypt/cz.rs +++ b/src/scripts/kirikiri/archive/xp3/crypt/cz.rs @@ -1,6 +1,6 @@ use super::*; use aes::Aes128Dec; -use aes::cipher::{BlockDecryptMut, KeyIvInit}; +use aes::cipher::{BlockModeDecrypt, KeyIvInit}; use cbc::Decryptor; type Aes128CbcDec = Decryptor; @@ -8,7 +8,7 @@ type Aes128CbcDec = Decryptor; const CZ_MAGIC: &[u8; 4] = b"\xFD\xD7\x90\xA5"; const CZ_IV_SEED: u32 = 0xBFBFBFBF; const CZ_HEADER_KEY: &[u8; 4] = b"\x9D\x1D\x9A\xF2"; -const CZ_DEFAULT_KEY: &[u8] = b"\x91\x10\xfcuE\x8f\xb5\xe6\xfe\xac\xbaDvX\xc2\x1a"; +const CZ_DEFAULT_KEY: &[u8; 16] = b"\x91\x10\xfcuE\x8f\xb5\xe6\xfe\xac\xbaDvX\xc2\x1a"; fn cz_decrypt_int(data: &[u8], offset: usize, key: u8) -> u32 { let mut v: u32 = (data[offset] ^ key ^ CZ_HEADER_KEY[0]) as u32; @@ -71,8 +71,8 @@ impl Read for AesDecryptor { } // NoPadding for i in (0..readed).step_by(16) { - let block = &mut buf[i..i + 16]; - self.aes.decrypt_block_mut(block.into()); + let block: &mut [u8; 16] = (&mut buf[i..i + 16]).try_into().unwrap(); + self.aes.decrypt_block(block.into()); } let remaining = self.original_size - self.pos; let readed = readed.min(remaining as usize);