I assume it's a PC decompressed format (don't remember who said that to me). If there are headers or hashes, I have no example of that.
The ps4 exports for ff7 are around 10MB of crypto blob . Inside I'm sure its just PC save(s). You might want to check this if you can for the ps4 version.
Thank you I had a patch for hyne but i was not able to test locally due to the missing file
Nice work on the PSV / VMP signing! (both hyne and bc will support this at their release version 1.10.0, how did we end up at the same version.)
Notes on your psv/ vmp object:
- IV is the same for both formats.
- PSV support for type 2 (check for a 0x2C @ byte 0x38) is not needed FF8 saves can not find its way in to this format It is only for PS2 Saves exported from a PS3 Look for 0x14 in byte 0x38 to be sure you have the correct format when loading a save
- The Signing algorithm is the same for both VMP and PSV formats only the key and the data sent to be signed is changed. (i use one
function todo both signatures)
- The Sha1 object added from dots-tb's work is not needed you can use QCryptographicHash to generated this hash instead (I'm using it to generate MD5 sums for the pc rerelease already so why include another object? ).
- The AES object can be stripped down a bit as we will never use some functions (
my aes.c)
- For non FF8 PSV exports (if you support this) Some additional work is needed. You should write a size and preview size data (0x40 and 0x5C get the same data its 00 20 00 by default and is the block size * 0x2000) you can refer to my
fix_psv_header function for how i am doing it.
- PSV names matter ALOT they must match the internal name stored in the file (starting at 0x64) the name is done like this
QString name = ff7->region(s).mid(0, 12);
name.append(QTextCodec::codecForName("Shift-JIS")->fromUnicode(ff7->region(s).mid(12)).toHex().toUpper());