33
edits
Changes
Sponsored by splatsave, world's first ver 8 save tool.
| 0x88D90
| Introduced new look-up table and now shuffles twice, before and after encryption. Content is presumably still the same as Ver 3.
|-
| 8
| 4.3.1
| 0x88D90
| Introduced additional encryption for each shuffle blocks. Shuffling now uses bit reversed/flipped CRC32 checksum as seed. Content is still the same as Ver 3.
|}
by <code>Cmn::SaveDataFactory::Impl::IEncodedAllAccessor::createKey</code>.
1/16 of body size and smaller than 1/8 of body size (or total remaining size,
in case the remaining size is smaller than 1/8 of body size). When the
remaining size is smaller than 1/16 of body size, it is added as the size of
the last block. The body size for version 8, despite following the same general principal, goes an extra step to make sure that all the generated block sizes are multiple of 0x10, for the added "shuffle encryption" purpose. The game then uses <code>sead::PtrArrayImpl::shuffle</code> with the same previous <code>sead::Random</code> object to complete the shuffle. While in version 4 and 7, the shuffling is done by simply copying over the block buffers, the version 8 save creates more <code>sead::Random</code> objects for each block, initialized with the respective block size. The game uses these <code>sead::Random</code> objects to generate the IV used for block encryption, and then chains the object into <code>Cmn::SaveDataFactory::Impl::IEncodedAllAccessor::createKey</code>, the same key generation function used in "whole-body" encryption, to create the encryption key. Lastly, all the blocks are encrypted into their shuffled position with the existing AES-128 CBC algorithm.
== File Structure ==