From f20e4611b0e2305262b91e4d52dd07d7bef1e1f0 Mon Sep 17 00:00:00 2001 From: lifegpc Date: Wed, 3 Jun 2026 00:01:26 +0800 Subject: [PATCH] Update sha3 to 0.12.0 --- Cargo.lock | 23 ++++++++++++++++++-- Cargo.toml | 5 +++-- src/scripts/kirikiri/archive/xp3/crypt/cx.rs | 9 ++++---- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 95968cd..7dcbae1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1704,6 +1704,7 @@ dependencies = [ "sha1", "sha2", "sha3", + "shake", "siphasher", "stylua", "tendril", @@ -2342,12 +2343,24 @@ dependencies = [ [[package]] name = "sha3" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be176f1a57ce4e3d31c1a166222d9768de5954f811601fb7ca06fc8203905ce1" +checksum = "bc9bad02c26382724b2d2692c6f179285e4b54eeecd7968f52a50059c3c11759" dependencies = [ "digest 0.11.3", "keccak", + "sponge-cursor", +] + +[[package]] +name = "shake" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09057cb2149ad4cbd2da1e26b351f9a4c354219421229c69c3063e6f61947c4a" +dependencies = [ + "digest 0.11.3", + "keccak", + "sponge-cursor", ] [[package]] @@ -2400,6 +2413,12 @@ dependencies = [ "serde_core", ] +[[package]] +name = "sponge-cursor" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a0219bd7d979d58245a4f41f695e1ac9f8befdffadd7f61f1bae9e39abc6620" + [[package]] name = "stable_deref_trait" version = "1.2.1" diff --git a/Cargo.toml b/Cargo.toml index 2e98cad..0ed8577 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -60,7 +60,8 @@ serde_json = "1" serde_yaml_ng = "0.10" sha1 = { version = "0.11", optional = true } sha2 = { version = "0.11", optional = true } -sha3 = { version = "0.11", optional = true } +sha3 = { version = "0.12", optional = true } +shake = { version = "0.1", optional = true } siphasher = { version = "1.0", optional = true } stylua = { version = "2.1", optional = true, default-features = false} tendril = { version = "0.5", optional = true } @@ -106,7 +107,7 @@ hexen-haus = ["dep:memchr", "utils-str"] hexen-haus-arc = ["hexen-haus"] hexen-haus-img = ["hexen-haus", "image"] kirikiri = ["emote-psb", "fancy-regex", "flate2", "json", "dep:lz4", "utils-escape"] -kirikiri-arc = ["kirikiri", "dep:adler", "dep:aes", "dep:argon2", "dep:base64", "dep:blake2", "dep:bytes", "dep:cbc", "dep:chacha20", "chacha20/legacy", "chacha20/xchacha", "dep:fastcdc", "flate2", "dep:hex", "dep:int-enum", "dep:md5", "dep:memchr", "msg_tool_macro/kirikiri-arc", "dep:msg_tool_xp3data", "dep:parse-size", "dep:pelite", "serde/rc", "dep:sha2", "dep:sha3", "dep:siphasher", "utils-case-insensitive-string", "utils-lzss", "utils-serde-base64bytes", "utils-simple-pack", "zopfli", "zstd"] +kirikiri-arc = ["kirikiri", "dep:adler", "dep:aes", "dep:argon2", "dep:base64", "dep:blake2", "dep:bytes", "dep:cbc", "dep:chacha20", "chacha20/legacy", "chacha20/xchacha", "dep:fastcdc", "flate2", "dep:hex", "dep:int-enum", "dep:md5", "dep:memchr", "msg_tool_macro/kirikiri-arc", "dep:msg_tool_xp3data", "dep:parse-size", "dep:pelite", "serde/rc", "dep:sha2", "dep:sha3", "dep:shake", "dep:siphasher", "utils-case-insensitive-string", "utils-lzss", "utils-serde-base64bytes", "utils-simple-pack", "zopfli", "zstd"] kirikiri-img = ["kirikiri", "image", "dep:libtlg-rs"] musica = [] musica-arc = ["musica", "dep:crc32fast", "flate2", "dep:include-flate", "utils-blowfish", "utils-rc4", "utils-serde-base64bytes", "utils-xored-stream"] diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx.rs b/src/scripts/kirikiri/archive/xp3/crypt/cx.rs index 109cb76..1663868 100644 --- a/src/scripts/kirikiri/archive/xp3/crypt/cx.rs +++ b/src/scripts/kirikiri/archive/xp3/crypt/cx.rs @@ -10,8 +10,8 @@ use chacha20::cipher::array::Array; use chacha20::hchacha; use msg_tool_macro::{MyDebug, StructUnpack}; use serde::{Deserializer, de}; -use sha3::digest::XofReader; -use sha3::{Sha3_224, Shake256}; +use sha3::Sha3_224; +use shake::Shake256; use std::collections::HashSet; use std::ops::{Deref, DerefMut, Index}; use std::path::PathBuf; @@ -3244,6 +3244,7 @@ impl HxKeys { use anyhow::Error; use argon2::{self, Algorithm, Argon2, Version}; use sha3::Digest; + use shake::digest::XofReader; // workaround for seed = defaults (if cxdec:word_10081744 == 'f') // consider make .keyPackages[].key.seed nullable // @@ -3298,8 +3299,8 @@ impl HxKeys { let mut ctrlblk_pa = vec![0u8; 0x1000]; // cx->ControlBlock, partA let mut ctrlblk_pb = vec![0u8; 0x1000]; // cx->ControlBlock, partB let mut state = Shake256::default(); - sha3::digest::Update::update(&mut state, &lower_key_full); - let mut reader = sha3::digest::ExtendableOutput::finalize_xof(state); + shake::digest::Update::update(&mut state, &lower_key_full); + let mut reader = shake::digest::ExtendableOutput::finalize_xof(state); reader.read(&mut ctrlblk_pa); reader.read(&mut ctrlblk_pb); if (params.flags & 1) == 1 {