mirror of
https://gitea.tendokyu.moe/beerpsi/icf-reader.git
synced 2026-09-22 22:38:03 +03:00
d00b5d2a96d123061e7d53e73b19b88269c74ced
icf-reader
Tools for decoding, decrypting and encrypting ICFs
Usage
Usage: icf-reader.exe <COMMAND>
Commands:
encrypt Fixes some common ICF errors, then encrypt the given ICF
decrypt Decrypts the given ICF
decode Decodes the given ICF (optionally to a JSON file)
encode Encodes a JSON file from the decode subcommand to an ICF
help Print this message or the help of the given subcommand(s)
Options:
-h, --help Print help
Encrypting the ICF will also correct CRC checksums, so worrying about the correct checksum is not needed.
Creating an ICF file from JSON
The JSON file is an array of IcfData, which follows the format below:
interface Version {
major: number;
minor: number;
build: number;
}
interface IcfInnerData {
type: "System" | "App",
id: string, // Must be 3 characters for "System" and 4 characters for "App"
version: Version,
required_system_version: Version,
datetime: string, // ISO8601 string yyyy-MM-dd'T'HH:mm:ss
is_prerelease: boolean,
}
interface IcfOptionData {
type: "Option",
option_id: string, // Must be 4 characters
datetime: string, // ISO8601 string yyyy-MM-dd'T'HH:mm:ss
is_prerelease: boolean,
}
interface IcfPatchData {
type: "Patch",
sequence_number: number, // Incremented for every patch, starting from 1
source_version: Version,
source_datetime: string, // ISO8601 string yyyy-MM-dd'T'HH:mm:ss
source_required_system_version: Version,
target_version: Version,
target_datetime: string, // ISO8601 string yyyy-MM-dd'T'HH:mm:ss
target_required_system_version: Version,
is_prerelease: boolean,
}
type IcfData = IcfInnerData | IcfOptionData | IcfPatchData;
At least one entry of type System and App must be specified.
When done, create your ICF using icf-reader.exe encode input.json output.icf.
Building
ICF_KEY=<key> ICF_IV=<iv> cargo build --release
ls target/release/icf-reader.exe
Languages
Rust
100%