|
|
|
@ -34,6 +34,7 @@ static unsigned char seed = 'O';
|
|
|
|
|
static char *product;
|
|
|
|
|
static char *version;
|
|
|
|
|
static int do_decrypt;
|
|
|
|
|
static int offset;
|
|
|
|
|
|
|
|
|
|
void usage(int status)
|
|
|
|
|
{
|
|
|
|
@ -52,6 +53,7 @@ void usage(int status)
|
|
|
|
|
" -p <product> set product name to <product>\n"
|
|
|
|
|
" -v <version> set version to <version>\n"
|
|
|
|
|
" -h show this screen\n"
|
|
|
|
|
" -O Offset of encrypted data in file (decryption)\n"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
exit(status);
|
|
|
|
@ -87,7 +89,7 @@ static int decrypt_file(void)
|
|
|
|
|
ep.key = (unsigned char *) crypt_key;
|
|
|
|
|
ep.longstate = longstate;
|
|
|
|
|
|
|
|
|
|
err = decrypt_buf(&ep, buf, src_len);
|
|
|
|
|
err = decrypt_buf(&ep, buf + offset, src_len - offset);
|
|
|
|
|
if (err) {
|
|
|
|
|
ERR("unable to decrypt '%s'", ifname);
|
|
|
|
|
goto out;
|
|
|
|
@ -100,7 +102,7 @@ static int decrypt_file(void)
|
|
|
|
|
printf("Data len\t: %u\n", ep.datalen);
|
|
|
|
|
printf("Checksum\t: 0x%08x\n", ep.csum);
|
|
|
|
|
|
|
|
|
|
err = write_buf_to_file(ofname, buf, ep.datalen);
|
|
|
|
|
err = write_buf_to_file(ofname, buf + offset, ep.datalen);
|
|
|
|
|
if (err) {
|
|
|
|
|
ERR("unable to write to file '%s'", ofname);
|
|
|
|
|
goto out;
|
|
|
|
@ -239,7 +241,7 @@ int main(int argc, char *argv[])
|
|
|
|
|
while ( 1 ) {
|
|
|
|
|
int c;
|
|
|
|
|
|
|
|
|
|
c = getopt(argc, argv, "adi:m:o:hlp:v:k:r:s:");
|
|
|
|
|
c = getopt(argc, argv, "adi:m:o:hlp:v:k:O:r:s:");
|
|
|
|
|
if (c == -1)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
@ -271,6 +273,9 @@ int main(int argc, char *argv[])
|
|
|
|
|
case 's':
|
|
|
|
|
seed = strtoul(optarg, NULL, 16);
|
|
|
|
|
break;
|
|
|
|
|
case 'O':
|
|
|
|
|
offset = strtoul(optarg, NULL, 0);
|
|
|
|
|
break;
|
|
|
|
|
case 'h':
|
|
|
|
|
usage(EXIT_SUCCESS);
|
|
|
|
|
break;
|
|
|
|
|