image: add additional fields to Netgear encrypted image
authorWenli Looi <wlooi@ucalgary.ca>
Thu, 30 Mar 2023 22:27:11 +0000 (22:27 +0000)
committerDaniel Golle <daniel@makrotopia.org>
Thu, 13 Jul 2023 11:05:28 +0000 (12:05 +0100)
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)

include/image-commands.mk
scripts/netgear-encrypted-factory.py
target/linux/mediatek/image/Makefile
target/linux/ramips/image/Makefile

index 1d694850195457f826a975044a43a2674d6c1af2..dc6ee6e7c160c0935c3d72fb26b88c4ebcf4b028 100644 (file)
@@ -423,6 +423,8 @@ define Build/netgear-encrypted-factory
                --output-file $@ \
                --model $(NETGEAR_ENC_MODEL) \
                --region $(NETGEAR_ENC_REGION) \
+               $(if $(NETGEAR_ENC_HW_ID_LIST),--hw-id-list "$(NETGEAR_ENC_HW_ID_LIST)") \
+               $(if $(NETGEAR_ENC_MODEL_LIST),--model-list "$(NETGEAR_ENC_MODEL_LIST)") \
                --version V1.0.0.0.$(shell cat $(VERSION_DIST)| sed -e 's/[[:space:]]/-/g').$(firstword $(subst -, ,$(REVISION))) \
                --encryption-block-size 0x20000 \
                --openssl-bin "$(STAGING_DIR_HOST)/bin/openssl" \
index b6bb72f3b87ebda5aa70da0d9969029644e47cbe..40cfd9df0d2e0e8c9a3b14e79f9ff39a6bea9fe5 100755 (executable)
@@ -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,
index 97164428e05c9ec29f1a0a9b17121256326b0c62..d4f79ec97499bdf17e8e4ed1874467f393e3b768 100644 (file)
@@ -6,6 +6,8 @@
 include $(TOPDIR)/rules.mk
 include $(INCLUDE_DIR)/image.mk
 
+DEVICE_VARS += NETGEAR_ENC_MODEL NETGEAR_ENC_REGION NETGEAR_ENC_HW_ID_LIST NETGEAR_ENC_MODEL_LIST
+
 loadaddr-$(CONFIG_TARGET_mediatek_mt7622) := 0x44000000
 loadaddr-$(CONFIG_TARGET_mediatek_mt7623) := 0x80008000
 loadaddr-$(CONFIG_TARGET_mediatek_mt7629) := 0x40008000
@@ -22,6 +24,10 @@ define Device/Default
   KERNEL_LOADADDR = $(loadaddr-y)
   FILESYSTEMS := squashfs
   DEVICE_DTS_DIR := $(DTS_DIR)
+  NETGEAR_ENC_MODEL :=
+  NETGEAR_ENC_REGION :=
+  NETGEAR_ENC_HW_ID_LIST :=
+  NETGEAR_ENC_MODEL_LIST :=
   IMAGES := sysupgrade.bin
   IMAGE/sysupgrade.bin := append-kernel | pad-to 128k | append-rootfs | \
        pad-rootfs | append-metadata
index c080456e7a7527818bca15054260cfcd1bcbf015..265e9fb5e0c33aa403bb7678452ef11544b2ee33 100644 (file)
@@ -7,6 +7,7 @@ include $(INCLUDE_DIR)/image.mk
 
 DEVICE_VARS += LOADER_TYPE LOADER_FLASH_OFFS LZMA_TEXT_START
 DEVICE_VARS += NETGEAR_BOARD_ID NETGEAR_HW_ID
+DEVICE_VARS += NETGEAR_ENC_MODEL NETGEAR_ENC_REGION NETGEAR_ENC_HW_ID_LIST NETGEAR_ENC_MODEL_LIST
 DEVICE_VARS += BUFFALO_TAG_PLATFORM BUFFALO_TAG_VERSION BUFFALO_TAG_MINOR
 DEVICE_VARS += SEAMA_SIGNATURE SEAMA_MTDBLOCK
 DEVICE_VARS += SERCOMM_HWNAME SERCOMM_HWID SERCOMM_HWVER SERCOMM_SWVER
@@ -179,6 +180,10 @@ define Device/Default
   SOC := $(DEFAULT_SOC)
   DEVICE_DTS_DIR := ../dts
   DEVICE_DTS = $$(SOC)_$(1)
+  NETGEAR_ENC_MODEL :=
+  NETGEAR_ENC_REGION :=
+  NETGEAR_ENC_HW_ID_LIST :=
+  NETGEAR_ENC_MODEL_LIST :=
   IMAGES := sysupgrade.bin
   COMPILE :=
   sysupgrade_bin := append-kernel | append-rootfs | pad-rootfs