Просмотр исходного кода

firmware-utils/buffalo-enc: add support for decrypting data with an offset

Signed-off-by: Felix Fietkau <[email protected]>

SVN-Revision: 47185
Felix Fietkau 10 лет назад
Родитель
Сommit
772e2c0a77
1 измененных файлов с 8 добавлено и 3 удалено
  1. 8 3
      tools/firmware-utils/src/buffalo-enc.c

+ 8 - 3
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;