ARZL

LZRA (ARZL in big-endian) is a compression and encoding format used on PS Vita. It is used for example to store files used by the SKBL like the NSKBL and some Tzs modules. It is also used on GIM texture data used by /sce_sys/right/right.suprx.

Naming
It might be similar to LZMA. See.

There is a typo in SKBL functions names where it is named ARLZ instead of ARZL.

Header
ARZL header is simply the string "ARZL" (41 52 5A 4C).

Encoding
To encode data into ARZL: 1) Apply ARM filter. See . 2) ARZL encode

Decoding
To decode ARZL data: 1) ARZL decode. See SKBL. 2) Remove ARM filter. See and SKBL.

ARM Filter
ARZL encoded/decoded data is not the raw data but filtered data. It is applied an ARM filter for efficient compression, rather than obfuscation.

Although there are three versions of the ARM filters, the basic operation is the same. The filter is just bit swaps as well as some deterministic changes using information from the offset.

Version 1
ARM filter version 1 is the same as version 0 except that the offset information is added instead of subtracted.

Version 2
ARM filter version 2 is the same as version 0 but in addition, there is an additional operation to swap two nibbles in certain conditions. The condition is found through a learning process and may be overfitted.

Tools
TODO