support big-endian pr2 files
This commit is contained in:
+19
-6
@@ -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());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user