aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2015-10-12 13:11:03 +0000
committerFelix Fietkau <nbd@openwrt.org>2015-10-12 13:11:03 +0000
commit27ab75563d258bb7958622bff7e5919cba804c05 (patch)
tree60a6d39a945c0100c77056f9c8386528903b0512 /tools
parentf701c1365435ef3bb316bc304c3d287872b597aa (diff)
downloadmaster-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')
-rw-r--r--tools/firmware-utils/src/buffalo-enc.c11
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;