|
|
@@ -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;
|