diff options
author | Felix Fietkau <nbd@openwrt.org> | 2015-10-12 13:11:03 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2015-10-12 13:11:03 +0000 |
commit | 27ab75563d258bb7958622bff7e5919cba804c05 (patch) | |
tree | 60a6d39a945c0100c77056f9c8386528903b0512 /tools/firmware-utils/src/buffalo-enc.c | |
parent | f701c1365435ef3bb316bc304c3d287872b597aa (diff) | |
download | master-187ad058-27ab75563d258bb7958622bff7e5919cba804c05.tar.gz master-187ad058-27ab75563d258bb7958622bff7e5919cba804c05.tar.bz2 master-187ad058-27ab75563d258bb7958622bff7e5919cba804c05.zip |
firmware-utils/buffalo-enc: add support for decrypting data with an offset
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@47185 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'tools/firmware-utils/src/buffalo-enc.c')
-rw-r--r-- | tools/firmware-utils/src/buffalo-enc.c | 11 |
1 files changed, 8 insertions, 3 deletions
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 <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; |