diff --git a/tools/firmware-utils/src/buffalo-enc.c b/tools/firmware-utils/src/buffalo-enc.c index 59b66ab930..794659eb41 100644 --- a/tools/firmware-utils/src/buffalo-enc.c +++ b/tools/firmware-utils/src/buffalo-enc.c @@ -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 set product name to \n" " -v set version to \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;