support big-endian pr2 files

This commit is contained in:
Martin Michelsen
2023-08-22 12:05:06 -07:00
parent c944c7bca0
commit 99a8ab3a21
+19 -6
View File
@@ -686,9 +686,13 @@ int main(int argc, char** argv) {
} }
data.resize((data.size() + 3) & (~3)); data.resize((data.size() + 3) & (~3));
StringReader r(data); StringReader r(data);
pr2_expected_size = r.get_u32l(); pr2_expected_size = big_endian ? r.get_u32b() : r.get_u32l();
PSOV2Encryption crypt(r.get_u32l()); PSOV2Encryption crypt(big_endian ? r.get_u32b() : r.get_u32l());
crypt.decrypt(data.data() + 8, data.size() - 8); if (big_endian) {
crypt.encrypt_big_endian(data.data() + 8, data.size() - 8);
} else {
crypt.decrypt(data.data() + 8, data.size() - 8);
}
data = data.substr(8); data = data.substr(8);
} }
@@ -745,11 +749,20 @@ int main(int argc, char** argv) {
size_t orig_size = data.size(); size_t orig_size = data.size();
data.resize((data.size() + 3) & (~3)); data.resize((data.size() + 3) & (~3));
PSOV2Encryption crypt(pr2_seed); PSOV2Encryption crypt(pr2_seed);
crypt.encrypt(data.data(), data.size()); if (big_endian) {
crypt.encrypt_big_endian(data.data(), data.size());
} else {
crypt.encrypt(data.data(), data.size());
}
data.resize(orig_size); data.resize(orig_size);
StringWriter w; StringWriter w;
w.put_u32l(input_bytes); if (big_endian) {
w.put_u32l(pr2_seed); w.put_u32b(input_bytes);
w.put_u32b(pr2_seed);
} else {
w.put_u32l(input_bytes);
w.put_u32l(pr2_seed);
}
w.write(data); w.write(data);
data = std::move(w.str()); data = std::move(w.str());
} }