ptformat: Decrypt ptf files exported from ptx sessions

This commit is contained in:
Damien Zammit 2016-08-02 22:20:24 +10:00
parent 480e0b2a5f
commit 3cda7bcbfb
2 changed files with 29 additions and 0 deletions

View File

@ -234,6 +234,12 @@ PTFFormat::load(std::string path, int64_t targetsr) {
unxor10();
}
// Special case when ptx is exported to ptf in PT
if (v == 3) {
version = 11;
unxor_ptx_to_ptf();
}
if (version == 0 || version == 5 || version == 7) {
/* Haven't detected version yet so decipher */
j = 0;
@ -306,6 +312,28 @@ PTFFormat::unxor10(void)
}
}
void
PTFFormat::unxor_ptx_to_ptf(void)
{
unsigned char keyy[16] = { 0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70,
0x80,0x90,0xa0,0xb0,0xc0,0xd0,0xe0,0xf0
};
uint64_t j;
uint8_t i;
for (i = 0, j = 0x10; j < len; j++,i++) {
ptfunxored[j] ^= keyy[i];
if ((j % 16) == 0) {
i = 0;
if (ptfunxored[j] % 2 == 0) {
ptfunxored[j]++;
} else {
ptfunxored[j]--;
}
}
}
}
int
PTFFormat::parse(void) {
if (version == 5) {

View File

@ -119,6 +119,7 @@ private:
bool foundin(std::string haystack, std::string needle);
int parse(void);
void unxor10(void);
void unxor_ptx_to_ptf(void);
void setrates(void);
void parse5header(void);
void parse7header(void);