#!/usr/bin/env python3 import sys import os import struct import argparse from utils.config import * from utils.toc_common import * import json from json.decoder import JSONDecodeError # Define Version constant for each separate tool #0.01.000 Initial version #0.02.000 added checksum for integrity # passed ASSET_TYPE as a flag and used this placeholder for checksum TOOL_VERSION ="0.02.000" EXIT_WITH_ERROR = 1 #OUTPUT_FILE = 'build/assets-rev-b0.bin' ASSET_ID = "APPASSET" ASSET_VER = 1 CHECK_SUM = 0x00 HBK0_KEY = 'utils/key/hbk1.bin' PROV_KEY = 'utils/key/oem_prov_asset.bin' ENC_KEY = 'utils/key/oem_enc_asset.bin' # DO NOT Alter the sequence of the following items in the list as it determines # the bit position in the final value OPTIONS = ['ENCRYPTED_ASSETS','TEST_MODE'] OPTION_FLAGS = 0x00 def read_asset_config(cfgFile): f = open(cfgFile, 'r') try: cfg = json.load(f) except JSONDecodeError as e: print("ERROR in JSON file.") print(str(e)) sys.exit(EXIT_WITH_ERROR) except ValueError as v: print("ERROR in JSON file:") print(str(v)) sys.exit(EXIT_WITH_ERROR) except: print("ERROR: Unknown error loading JSON file") sys.exit(EXIT_WITH_ERROR) f.close() return cfg def create_package(outFile): print('Creating Assets Package...') with open(outFile, 'wb') as f: f.write(ASSET_ID.encode('utf8')) f.write(struct.pack("H", ASSET_VER)) f.write(struct.pack("H", CHECK_SUM)) f.write(struct.pack("I", OPTION_FLAGS)) with open(HBK0_KEY, 'rb') as i: f.write(i.read()) with open(PROV_KEY, 'rb') as i: f.write(i.read()) f.write(('\0' * 48).encode('utf8')) with open(ENC_KEY, 'rb') as i: f.write(i.read()) f.write(('\0' * 48).encode('utf8')) def decodeFlags(assetFlags): print('') print('Provisioning Options:') for option in OPTIONS: fill = 20 - len(option) label = option + (fill * ' ') if assetFlags & (1<