mirror of
https://gitea.tendokyu.moe/beerpsi/icf-reader.git
synced 2024-11-27 17:00:48 +01:00
Read, edit, decrypt and encrypt install configuration files (ICFs)
src | ||
.gitignore | ||
Cargo.lock | ||
Cargo.toml | ||
LICENSE | ||
README.md |
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
}
interface IcfOptionData {
type: "Option",
app_id: string, // Does not go into the ICF, so can be anything, but must be specified
option_id: string, // Must be 4 characters
required_system_version: Version, // Can be zeroed out, e.g. { major: 0, minor: 0, build: 0 }
datetime: string, // ISO8601 string yyyy-MM-dd'T'HH:mm:ss
}
interface IcfPatchData {
type: "Patch",
id: string, // Does not go into the ICF, so can be anything, but must be specified
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,
}
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