aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/netgear-encrypted-factory.py
diff options
context:
space:
mode:
authorWenli Looi <wlooi@ucalgary.ca>2023-03-30 22:27:11 +0000
committerDaniel Golle <daniel@makrotopia.org>2023-07-13 12:05:28 +0100
commit977ee439d7068e405361322013e9a2114bfefcda (patch)
tree45f519f8cc792cbf56981131f70b46da4335bf8c /scripts/netgear-encrypted-factory.py
parentb7fac1bf8c6f975607427734f85318c69aacaeb6 (diff)
downloadupstream-977ee439d7068e405361322013e9a2114bfefcda.tar.gz
upstream-977ee439d7068e405361322013e9a2114bfefcda.tar.bz2
upstream-977ee439d7068e405361322013e9a2114bfefcda.zip
image: add additional fields to Netgear encrypted image
These fields are used for EAX12 and EX6250v2 series, and perhaps other devices. Compatibility is preserved with the WAX202 and WAX206. In addition, adds the related vars to DEVICE_VARS so that the variables work correctly with multiple devices. References in GPL source: https://www.downloads.netgear.com/files/GPL/EAX12_EAX11v2_EAX15v2_GPL_V1.0.3.34_src.tar.gz * tools/imgencoder/src/gj_enc.c Contains code that generates the encrypted image. Signed-off-by: Wenli Looi <wlooi@ucalgary.ca> (cherry picked from commit 0a1ebccc8702cadc50bc096f1e185472f3927786)
Diffstat (limited to 'scripts/netgear-encrypted-factory.py')
-rwxr-xr-xscripts/netgear-encrypted-factory.py15
1 files changed, 13 insertions, 2 deletions
diff --git a/scripts/netgear-encrypted-factory.py b/scripts/netgear-encrypted-factory.py
index b6bb72f3b8..40cfd9df0d 100755
--- a/scripts/netgear-encrypted-factory.py
+++ b/scripts/netgear-encrypted-factory.py
@@ -14,6 +14,8 @@ def main():
parser.add_argument('--model', type=str, required=True)
parser.add_argument('--region', type=str, required=True)
parser.add_argument('--version', type=str, required=True)
+ parser.add_argument('--hw-id-list', type=str)
+ parser.add_argument('--model-list', type=str)
parser.add_argument('--encryption-block-size', type=str, required=True)
parser.add_argument('--openssl-bin', type=str, required=True)
parser.add_argument('--key', type=str, required=True)
@@ -26,6 +28,10 @@ def main():
assert (encryption_block_size > 0 and encryption_block_size % 16 ==
0), 'Encryption block size must be a multiple of the AES block size (16)'
+ hw_id_list = args.hw_id_list.split(';') if args.hw_id_list else []
+ model_list = args.model_list.split(';') if args.model_list else []
+ hw_info = ';'.join(hw_id_list + model_list)
+
image = open(args.input_file, 'rb').read()
image_enc = []
for i in range(0, len(image), encryption_block_size):
@@ -45,13 +51,18 @@ def main():
image_enc = b''.join(image_enc)
image_with_header = struct.pack(
- '>32s32s64s64s64s256s12sII',
+ '>32s32s64s64sIBBB13s200s100s12sII',
args.model.encode('ascii'),
args.region.encode('ascii'),
args.version.encode('ascii'),
b'Thu Jan 1 00:00:00 1970', # static date for reproducibility
+ 0, # product hw model
+ 0, # model index
+ len(hw_id_list),
+ len(model_list),
+ b'', # reserved
+ hw_info.encode('ascii'),
b'', # reserved
- b'', # RSA signature - omitted for now
b'encrpted_img',
len(image_enc),
encryption_block_size,