diff --git a/Cargo.lock b/Cargo.lock index bb0bdba..4206463 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1438,8 +1438,8 @@ dependencies = [ "memchr", "mozjpeg", "msg-tool-jpegxl-sys", - "msg_tool_build", "msg_tool_macro", + "msg_tool_xp3data", "num_cpus", "overf", "parse-size", @@ -1479,6 +1479,14 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "msg_tool_xp3data" +version = "0.3.1" +dependencies = [ + "msg_tool_build", + "zstd", +] + [[package]] name = "nasm-rs" version = "0.3.2" diff --git a/Cargo.toml b/Cargo.toml index 9174fff..5a9019f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -38,6 +38,7 @@ markup5ever_rcdom = { version = "0.38", optional = true } memchr = { version = "2.7", optional = true } mozjpeg = { version = "0.10", optional = true } msg_tool_macro = { path = "./msg_tool_macro" } +msg_tool_xp3data = { path = "./msg_tool_xp3data", optional = true } num_cpus = "1.17" overf = "0.1" parse-size = { version = "1.1", optional = true } @@ -93,7 +94,7 @@ hexen-haus = ["memchr", "utils-str"] hexen-haus-arc = ["hexen-haus"] hexen-haus-img = ["hexen-haus", "image"] kirikiri = ["emote-psb", "fancy-regex", "flate2", "json", "lz4", "utils-escape"] -kirikiri-arc = ["kirikiri", "adler", "bytes", "fastcdc", "flate2", "include-flate", "int-enum", "msg_tool_build/kirikiri-arc", "parse-size", "sha2", "utils-serde-base64bytes", "utils-simple-pack", "zopfli", "zstd"] +kirikiri-arc = ["kirikiri", "adler", "bytes", "fastcdc", "flate2", "int-enum", "msg_tool_xp3data", "parse-size", "sha2", "utils-serde-base64bytes", "utils-simple-pack", "zopfli", "zstd"] kirikiri-img = ["kirikiri", "image", "libtlg-rs"] musica = [] musica-arc = ["musica", "crc32fast", "flate2", "include-flate", "utils-blowfish", "utils-rc4", "utils-serde-base64bytes", "utils-xored-stream"] @@ -115,7 +116,7 @@ image-jxl = ["image", "jpegxl-sys"] image-webp = ["webp"] lossless-audio = ["utils-pcm"] audio-flac = ["libflac-sys", "utils-pcm"] -unstable = ["msg_tool_macro/unstable"] +unstable = ["msg_tool_macro/unstable", "msg_tool_xp3data?/unstable"] jieba = ["jieba-rs"] emote-psb = ["dep:emote-psb", "adler", "lz4"] # utils feature @@ -136,5 +137,4 @@ utils-xored-stream = [] windows-sys = { version = "0.61", features = ["Win32_Globalization", "Win32_System_Diagnostics_Debug"] } [build-dependencies] -msg_tool_build = { path = "./msg_tool_build", optional = true } parse-size = "1.1" diff --git a/build.rs b/build.rs index 4444e0a..ff77807 100644 --- a/build.rs +++ b/build.rs @@ -10,18 +10,4 @@ fn main() { println!("cargo:rustc-link-arg=/STACK:{}", stack_size); #[cfg(target_env = "gnu")] println!("cargo:rustc-link-arg=-Wl,-z,stack-size={}", stack_size); - #[cfg(feature = "kirikiri-arc")] - { - let source_dir = std::path::PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap()); - let crypt_json_path = source_dir.join("src/scripts/kirikiri/archive/xp3/crypt.json"); - let outdir = std::path::PathBuf::from(std::env::var("OUT_DIR").unwrap()); - let level = std::env::var("MSG_TOOL_KIRIKIRI_ARC_GEN_LEVEL").unwrap_or("22".to_string()); - println!("cargo:rerun-if-env-changed=OUT_DIR"); - println!("cargo:rerun-if-changed={}", crypt_json_path.display()); - let level = level - .parse::() - .expect("MSG_TOOL_KIRIKIRI_ARC_GEN_LEVEL must be a valid integer"); - println!("cargo:rerun-if-env-changed=MSG_TOOL_KIRIKIRI_ARC_GEN_LEVEL"); - msg_tool_build::kr_arc::gen_cx_cb(&crypt_json_path, &outdir, level).unwrap(); - } } diff --git a/msg_tool_build/Cargo.toml b/msg_tool_build/Cargo.toml index 0eea8d9..6e7c08b 100644 --- a/msg_tool_build/Cargo.toml +++ b/msg_tool_build/Cargo.toml @@ -11,8 +11,9 @@ json = { version = "0.12", optional = true } zstd = { version = "0.13", optional = true } [features] -kirikiri-arc = ["json", "simple-pack"] +kirikiri-arc = ["json", "simple-pack", "zstd"] simple-pack = ["zstd"] +unstable = [] [package.metadata.docs.rs] all-features = true diff --git a/msg_tool_build/src/kr_arc.rs b/msg_tool_build/src/kr_arc.rs index f3ac7f9..d0af62e 100644 --- a/msg_tool_build/src/kr_arc.rs +++ b/msg_tool_build/src/kr_arc.rs @@ -1,6 +1,26 @@ use crate::simple_pack::SimplePack; use std::path::Path; +/// Generate crypt.json.zst from crypt.json with minimum format +pub fn gen_crypt + ?Sized, D: AsRef + ?Sized>( + json_path: &P, + outdir: &D, + level: i32, +) -> std::io::Result<()> { + let p = json_path.as_ref(); + let json_data = std::fs::read_to_string(p)?; + let json = json::parse(&json_data) + .map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidData, e))?; + let out_data = json::stringify(json); + let out_path = outdir.as_ref().join("crypt.json.zst"); + let mut out_file = std::io::BufWriter::new(std::fs::File::create(out_path)?); + let level = if level >= 0 && level <= 22 { level } else { 22 }; + let mut encoder = zstd::stream::write::Encoder::new(&mut out_file, level)?; + std::io::copy(&mut out_data.as_bytes(), &mut encoder)?; + encoder.finish()?; + Ok(()) +} + /// Pack all binary files in cx_cb into a single archive. pub fn gen_cx_cb + ?Sized, D: AsRef + ?Sized>( json_path: &P, @@ -8,11 +28,7 @@ pub fn gen_cx_cb + ?Sized, D: AsRef + ?Sized>( level: i32, ) -> std::io::Result<()> { let p = json_path.as_ref(); - let pb = p - .parent() - .unwrap_or_else(|| Path::new("")) - .join("crypt") - .join("cx_cb"); + let pb = p.parent().unwrap_or_else(|| Path::new("")).join("cx_cb"); let json_data = std::fs::read_to_string(p)?; let json = json::parse(&json_data) .map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidData, e))?; diff --git a/msg_tool_build/src/lib.rs b/msg_tool_build/src/lib.rs index e30515c..c82e323 100644 --- a/msg_tool_build/src/lib.rs +++ b/msg_tool_build/src/lib.rs @@ -1,3 +1,4 @@ +#![cfg_attr(any(docsrs, feature = "unstable"), feature(doc_cfg))] #[cfg(feature = "kirikiri-arc")] pub mod kr_arc; #[cfg(feature = "simple-pack")] diff --git a/msg_tool_xp3data/.gitignore b/msg_tool_xp3data/.gitignore new file mode 100644 index 0000000..1e7caa9 --- /dev/null +++ b/msg_tool_xp3data/.gitignore @@ -0,0 +1,2 @@ +Cargo.lock +target/ diff --git a/msg_tool_xp3data/Cargo.toml b/msg_tool_xp3data/Cargo.toml new file mode 100644 index 0000000..332500a --- /dev/null +++ b/msg_tool_xp3data/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "msg_tool_xp3data" +version = "0.3.1" +edition = "2024" +repository = "https://github.com/lifegpc/msg-tool" +description = "XP3 data for the msg-tool project." +license = "GPL-3.0-or-later" + +[lib] +path = "lib.rs" + +[dependencies] +zstd = "0.13" + +[features] +unstable = ["msg_tool_build/unstable"] + +[package.metadata.docs.rs] +all-features = true + +[build-dependencies] +msg_tool_build = { path = "../msg_tool_build", features = ["kirikiri-arc"] } diff --git a/msg_tool_xp3data/build.rs b/msg_tool_xp3data/build.rs new file mode 100644 index 0000000..59477e3 --- /dev/null +++ b/msg_tool_xp3data/build.rs @@ -0,0 +1,23 @@ +fn main() { + let source_dir = std::path::PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap()); + let crypt_json_path = source_dir.join("crypt.json"); + let outdir = std::path::PathBuf::from(std::env::var("OUT_DIR").unwrap()); + let level = std::env::var("MSG_TOOL_KIRIKIRI_ARC_GEN_LEVEL").unwrap_or("22".to_string()); + println!("cargo:rerun-if-env-changed=OUT_DIR"); + println!("cargo:rerun-if-changed={}", crypt_json_path.display()); + println!( + "cargo:rerun-if-changed={}", + source_dir.join("cx_cb").display() + ); + let level = level + .parse::() + .expect("MSG_TOOL_KIRIKIRI_ARC_GEN_LEVEL must be a valid integer"); + println!("cargo:rerun-if-env-changed=MSG_TOOL_KIRIKIRI_ARC_GEN_LEVEL"); + msg_tool_build::kr_arc::gen_cx_cb(&crypt_json_path, &outdir, level).unwrap(); + let level = std::env::var("MSG_TOOL_KIRIKIRI_CRYPT_COMPRESS_LEVEL").unwrap_or("22".to_string()); + let level = level + .parse::() + .expect("MSG_TOOL_KIRIKIRI_CRYPT_COMPRESS_LEVEL must be a valid integer"); + println!("cargo:rerun-if-env-changed=MSG_TOOL_KIRIKIRI_CRYPT_COMPRESS_LEVEL"); + msg_tool_build::kr_arc::gen_crypt(&crypt_json_path, &outdir, level).unwrap(); +} diff --git a/src/scripts/kirikiri/archive/xp3/crypt.json b/msg_tool_xp3data/crypt.json similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt.json rename to msg_tool_xp3data/crypt.json diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/9nine_ep1.bin b/msg_tool_xp3data/cx_cb/9nine_ep1.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/9nine_ep1.bin rename to msg_tool_xp3data/cx_cb/9nine_ep1.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/9nine_ep1_sekai.bin b/msg_tool_xp3data/cx_cb/9nine_ep1_sekai.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/9nine_ep1_sekai.bin rename to msg_tool_xp3data/cx_cb/9nine_ep1_sekai.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/akuratsu.bin b/msg_tool_xp3data/cx_cb/akuratsu.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/akuratsu.bin rename to msg_tool_xp3data/cx_cb/akuratsu.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/bakuretsu.bin b/msg_tool_xp3data/cx_cb/bakuretsu.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/bakuretsu.bin rename to msg_tool_xp3data/cx_cb/bakuretsu.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/chikan.bin b/msg_tool_xp3data/cx_cb/chikan.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/chikan.bin rename to msg_tool_xp3data/cx_cb/chikan.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/comyu.bin b/msg_tool_xp3data/cx_cb/comyu.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/comyu.bin rename to msg_tool_xp3data/cx_cb/comyu.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/concerto.bin b/msg_tool_xp3data/cx_cb/concerto.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/concerto.bin rename to msg_tool_xp3data/cx_cb/concerto.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/corona1.bin b/msg_tool_xp3data/cx_cb/corona1.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/corona1.bin rename to msg_tool_xp3data/cx_cb/corona1.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/deepone.bin b/msg_tool_xp3data/cx_cb/deepone.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/deepone.bin rename to msg_tool_xp3data/cx_cb/deepone.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/erohon.bin b/msg_tool_xp3data/cx_cb/erohon.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/erohon.bin rename to msg_tool_xp3data/cx_cb/erohon.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/fate_hollow.bin b/msg_tool_xp3data/cx_cb/fate_hollow.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/fate_hollow.bin rename to msg_tool_xp3data/cx_cb/fate_hollow.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/grisaia_steam.bin b/msg_tool_xp3data/cx_cb/grisaia_steam.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/grisaia_steam.bin rename to msg_tool_xp3data/cx_cb/grisaia_steam.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/grisaia_vol2.bin b/msg_tool_xp3data/cx_cb/grisaia_vol2.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/grisaia_vol2.bin rename to msg_tool_xp3data/cx_cb/grisaia_vol2.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/grisaia_vol5.bin b/msg_tool_xp3data/cx_cb/grisaia_vol5.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/grisaia_vol5.bin rename to msg_tool_xp3data/cx_cb/grisaia_vol5.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/haruiro.bin b/msg_tool_xp3data/cx_cb/haruiro.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/haruiro.bin rename to msg_tool_xp3data/cx_cb/haruiro.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/hataraku.bin b/msg_tool_xp3data/cx_cb/hataraku.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/hataraku.bin rename to msg_tool_xp3data/cx_cb/hataraku.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/haze_man.bin b/msg_tool_xp3data/cx_cb/haze_man.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/haze_man.bin rename to msg_tool_xp3data/cx_cb/haze_man.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/hello_lady_new.bin b/msg_tool_xp3data/cx_cb/hello_lady_new.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/hello_lady_new.bin rename to msg_tool_xp3data/cx_cb/hello_lady_new.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/hello_lady_super.bin b/msg_tool_xp3data/cx_cb/hello_lady_super.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/hello_lady_super.bin rename to msg_tool_xp3data/cx_cb/hello_lady_super.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/hinekuremono.bin b/msg_tool_xp3data/cx_cb/hinekuremono.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/hinekuremono.bin rename to msg_tool_xp3data/cx_cb/hinekuremono.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/hitozuma.bin b/msg_tool_xp3data/cx_cb/hitozuma.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/hitozuma.bin rename to msg_tool_xp3data/cx_cb/hitozuma.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/imouto.bin b/msg_tool_xp3data/cx_cb/imouto.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/imouto.bin rename to msg_tool_xp3data/cx_cb/imouto.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/jasch.bin b/msg_tool_xp3data/cx_cb/jasch.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/jasch.bin rename to msg_tool_xp3data/cx_cb/jasch.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/karakara.bin b/msg_tool_xp3data/cx_cb/karakara.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/karakara.bin rename to msg_tool_xp3data/cx_cb/karakara.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/karakara2.bin b/msg_tool_xp3data/cx_cb/karakara2.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/karakara2.bin rename to msg_tool_xp3data/cx_cb/karakara2.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/karenai.bin b/msg_tool_xp3data/cx_cb/karenai.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/karenai.bin rename to msg_tool_xp3data/cx_cb/karenai.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/karenai_dl.bin b/msg_tool_xp3data/cx_cb/karenai_dl.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/karenai_dl.bin rename to msg_tool_xp3data/cx_cb/karenai_dl.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/kemono.bin b/msg_tool_xp3data/cx_cb/kemono.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/kemono.bin rename to msg_tool_xp3data/cx_cb/kemono.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/kinomino.bin b/msg_tool_xp3data/cx_cb/kinomino.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/kinomino.bin rename to msg_tool_xp3data/cx_cb/kinomino.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/koiga.bin b/msg_tool_xp3data/cx_cb/koiga.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/koiga.bin rename to msg_tool_xp3data/cx_cb/koiga.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/loca_love.bin b/msg_tool_xp3data/cx_cb/loca_love.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/loca_love.bin rename to msg_tool_xp3data/cx_cb/loca_love.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/love_laby.bin b/msg_tool_xp3data/cx_cb/love_laby.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/love_laby.bin rename to msg_tool_xp3data/cx_cb/love_laby.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/mahoutsukai.bin b/msg_tool_xp3data/cx_cb/mahoutsukai.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/mahoutsukai.bin rename to msg_tool_xp3data/cx_cb/mahoutsukai.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/maitetsu_en.bin b/msg_tool_xp3data/cx_cb/maitetsu_en.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/maitetsu_en.bin rename to msg_tool_xp3data/cx_cb/maitetsu_en.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/momoiro_en.bin b/msg_tool_xp3data/cx_cb/momoiro_en.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/momoiro_en.bin rename to msg_tool_xp3data/cx_cb/momoiro_en.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/natsuzora.bin b/msg_tool_xp3data/cx_cb/natsuzora.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/natsuzora.bin rename to msg_tool_xp3data/cx_cb/natsuzora.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/nekogami.bin b/msg_tool_xp3data/cx_cb/nekogami.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/nekogami.bin rename to msg_tool_xp3data/cx_cb/nekogami.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/nidaime.bin b/msg_tool_xp3data/cx_cb/nidaime.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/nidaime.bin rename to msg_tool_xp3data/cx_cb/nidaime.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/oreto5nin.bin b/msg_tool_xp3data/cx_cb/oreto5nin.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/oreto5nin.bin rename to msg_tool_xp3data/cx_cb/oreto5nin.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/otome.bin b/msg_tool_xp3data/cx_cb/otome.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/otome.bin rename to msg_tool_xp3data/cx_cb/otome.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/riajuu.bin b/msg_tool_xp3data/cx_cb/riajuu.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/riajuu.bin rename to msg_tool_xp3data/cx_cb/riajuu.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/sabbat.bin b/msg_tool_xp3data/cx_cb/sabbat.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/sabbat.bin rename to msg_tool_xp3data/cx_cb/sabbat.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/sakura.bin b/msg_tool_xp3data/cx_cb/sakura.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/sakura.bin rename to msg_tool_xp3data/cx_cb/sakura.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/seiin.bin b/msg_tool_xp3data/cx_cb/seiin.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/seiin.bin rename to msg_tool_xp3data/cx_cb/seiin.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/shiniyuku.bin b/msg_tool_xp3data/cx_cb/shiniyuku.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/shiniyuku.bin rename to msg_tool_xp3data/cx_cb/shiniyuku.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/shogunsama.bin b/msg_tool_xp3data/cx_cb/shogunsama.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/shogunsama.bin rename to msg_tool_xp3data/cx_cb/shogunsama.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/shogunsama_fd.bin b/msg_tool_xp3data/cx_cb/shogunsama_fd.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/shogunsama_fd.bin rename to msg_tool_xp3data/cx_cb/shogunsama_fd.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/shugaten.bin b/msg_tool_xp3data/cx_cb/shugaten.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/shugaten.bin rename to msg_tool_xp3data/cx_cb/shugaten.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/suisei.bin b/msg_tool_xp3data/cx_cb/suisei.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/suisei.bin rename to msg_tool_xp3data/cx_cb/suisei.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/tenshin.bin b/msg_tool_xp3data/cx_cb/tenshin.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/tenshin.bin rename to msg_tool_xp3data/cx_cb/tenshin.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/towazugatari.bin b/msg_tool_xp3data/cx_cb/towazugatari.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/towazugatari.bin rename to msg_tool_xp3data/cx_cb/towazugatari.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/ushinawareta.bin b/msg_tool_xp3data/cx_cb/ushinawareta.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/ushinawareta.bin rename to msg_tool_xp3data/cx_cb/ushinawareta.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/wagamama.bin b/msg_tool_xp3data/cx_cb/wagamama.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/wagamama.bin rename to msg_tool_xp3data/cx_cb/wagamama.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/wagamama_en.bin b/msg_tool_xp3data/cx_cb/wagamama_en.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/wagamama_en.bin rename to msg_tool_xp3data/cx_cb/wagamama_en.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/wagamama_oc.bin b/msg_tool_xp3data/cx_cb/wagamama_oc.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/wagamama_oc.bin rename to msg_tool_xp3data/cx_cb/wagamama_oc.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/walpurgis.bin b/msg_tool_xp3data/cx_cb/walpurgis.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/walpurgis.bin rename to msg_tool_xp3data/cx_cb/walpurgis.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/yomibito.bin b/msg_tool_xp3data/cx_cb/yomibito.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/yomibito.bin rename to msg_tool_xp3data/cx_cb/yomibito.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/yuugu.bin b/msg_tool_xp3data/cx_cb/yuugu.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/yuugu.bin rename to msg_tool_xp3data/cx_cb/yuugu.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/yuugu2.bin b/msg_tool_xp3data/cx_cb/yuugu2.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/yuugu2.bin rename to msg_tool_xp3data/cx_cb/yuugu2.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/zecchou.bin b/msg_tool_xp3data/cx_cb/zecchou.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/zecchou.bin rename to msg_tool_xp3data/cx_cb/zecchou.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/zettai.bin b/msg_tool_xp3data/cx_cb/zettai.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/zettai.bin rename to msg_tool_xp3data/cx_cb/zettai.bin diff --git a/src/scripts/kirikiri/archive/xp3/crypt/cx_cb/zutto.bin b/msg_tool_xp3data/cx_cb/zutto.bin similarity index 100% rename from src/scripts/kirikiri/archive/xp3/crypt/cx_cb/zutto.bin rename to msg_tool_xp3data/cx_cb/zutto.bin diff --git a/msg_tool_xp3data/lib.rs b/msg_tool_xp3data/lib.rs new file mode 100644 index 0000000..a6a289c --- /dev/null +++ b/msg_tool_xp3data/lib.rs @@ -0,0 +1,14 @@ +#![cfg_attr(any(docsrs, feature = "unstable"), feature(doc_cfg))] +use std::io::Read; + +/// Control Block data for CxEncryption packed with SimplePack. +pub const CX_CB_DATA: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/cx_cb.pck")); +const CRYPT_DATA: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/crypt.json.zst")); + +/// Get the crypt.json data as a string. +pub fn get_crypt_data() -> String { + let mut decoder = zstd::stream::read::Decoder::new(CRYPT_DATA).unwrap(); + let mut out = String::new(); + decoder.read_to_string(&mut out).unwrap(); + out +} diff --git a/src/scripts/kirikiri/archive/xp3/crypt/mod.rs b/src/scripts/kirikiri/archive/xp3/crypt/mod.rs index 2fb5409..3d0aef8 100644 --- a/src/scripts/kirikiri/archive/xp3/crypt/mod.rs +++ b/src/scripts/kirikiri/archive/xp3/crypt/mod.rs @@ -8,6 +8,7 @@ use crate::utils::encoding::*; use crate::utils::serde_base64bytes::*; use crate::utils::simple_pack::*; use anyhow::Result; +use msg_tool_xp3data::*; use serde::Deserialize; use std::collections::{BTreeMap, HashMap}; use std::io::{Read, Seek, SeekFrom}; @@ -162,12 +163,9 @@ impl Schema { } } -include_flate::flate!(static CRYPT_DATA: str from "src/scripts/kirikiri/archive/xp3/crypt.json" with zstd); -const CX_CB_DATA: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/cx_cb.pck")); - lazy_static::lazy_static! { static ref CRYPT_SCHEMA: BTreeMap = { - serde_json::from_str(&CRYPT_DATA).expect("Failed to parse crypt.json") + serde_json::from_str(&get_crypt_data()).expect("Failed to parse crypt.json") }; static ref ALIAS_TABLE: HashMap = { let mut table = HashMap::new();