xref: /rkbin/tools/fit-sign.sh (revision 8385bc167340c8b87af098621d7312a8a120a56d)
188d46662SJoseph Chen#!/bin/bash
288d46662SJoseph Chen#
388d46662SJoseph Chen# Copyright (c) 2024 Rockchip Electronics Co., Ltd
488d46662SJoseph Chen#
588d46662SJoseph Chen# SPDX-License-Identifier: GPL-2.0
688d46662SJoseph Chen#
788d46662SJoseph Chenset -e
888d46662SJoseph Chen
988d46662SJoseph ChenSIGN_DIR=".fit_sign"
1088d46662SJoseph ChenSIGN_OUTPUT="${SIGN_DIR}/output"
1188d46662SJoseph ChenUNPACK_UBOOT="${SIGN_DIR}/unpack_uboot"
1288d46662SJoseph ChenUNPACK_LOADER="${SIGN_DIR}/unpack_loader"
1388d46662SJoseph ChenTOOLS=$(cd `dirname $0`; pwd)
1488d46662SJoseph Chen# tools
1588d46662SJoseph ChenTOOL_MKIMAGE=${TOOLS}/mkimage
1688d46662SJoseph ChenTOOL_FIT_UNPACK=${TOOLS}/fit-unpack.sh
1788d46662SJoseph ChenTOOL_FIT_CHECK_SIGN=${TOOLS}/fit_check_sign
1888d46662SJoseph ChenTOOL_RK_SIGN=${TOOLS}/rk_sign_tool
1988d46662SJoseph ChenTOOL_BOOT_MERGER=${TOOLS}/boot_merger
2088d46662SJoseph Chen# offset
2188d46662SJoseph ChenOFFS_DATA=0x1200
2288d46662SJoseph Chen# placeholder address
2388d46662SJoseph ChenFDT_ADDR_PLACEHOLDER="0xffffff00"
2488d46662SJoseph ChenKERNEL_ADDR_PLACEHOLDER="0xffffff01"
2588d46662SJoseph ChenRAMDISK_ADDR_PLACEHOLDER="0xffffff02"
2688d46662SJoseph Chen# key
2788d46662SJoseph ChenSIGNATURE_KEY_NODE="/signature/key-dev"
2888d46662SJoseph Chen# dtb
2988d46662SJoseph ChenSPL_DTB="${UNPACK_LOADER}/u-boot-spl.dtb"
3088d46662SJoseph ChenUBOOT_DTB="${UNPACK_UBOOT}/fdt"
3188d46662SJoseph ChenUBOOT_DTB_ORIG="${UNPACK_UBOOT}/fdt_orig"
3288d46662SJoseph Chen# uboot
3388d46662SJoseph ChenITS_UBOOT="${UNPACK_UBOOT}/image.its"
3488d46662SJoseph ChenITB_UBOOT="${UNPACK_UBOOT}/image.itb"
3588d46662SJoseph ChenIMG_UBOOT="${SIGN_OUTPUT}/uboot.img"
3688d46662SJoseph Chen# rollback & version
3788d46662SJoseph Chendeclare -A ROLLBACK_PARAMS
3888d46662SJoseph Chendeclare -A VERSION_PARAMS
3988d46662SJoseph Chen
4088d46662SJoseph Chen# All required tools:
4188d46662SJoseph Chen#
4288d46662SJoseph Chen#    ├── boot_merger
4388d46662SJoseph Chen#    ├── fit_check_sign
4488d46662SJoseph Chen#    ├── fit-unpack.sh
4588d46662SJoseph Chen#    ├── mkimage
4688d46662SJoseph Chen#    ├── rk_sign_tool
4788d46662SJoseph Chen#    └── setting.ini
4888d46662SJoseph Chen
4988d46662SJoseph Chenfunction filt_val()
5088d46662SJoseph Chen{
5188d46662SJoseph Chen	sed -n "/${1}=/s/${1}=//p" $2 | tr -d '\r' | tr -d '"'
5288d46662SJoseph Chen}
5388d46662SJoseph Chen
5488d46662SJoseph Chenfunction help()
5588d46662SJoseph Chen{
5688d46662SJoseph Chen	echo
5788d46662SJoseph Chen	echo "Usage:"
5888d46662SJoseph Chen	echo "    $0 [args]"
5988d46662SJoseph Chen	echo
6088d46662SJoseph Chen	echo "Args:"
6188d46662SJoseph Chen	echo "    --key-dir                  <dir>                         | Mandatory"
6288d46662SJoseph Chen	echo "    --src-dir                  <dir>                         | Mandatory"
6388d46662SJoseph Chen	echo "    --out-dir                  <dir>                         | Mandatory"
6488d46662SJoseph Chen	echo "    --burn-key-hash                                          | Optional"
6588d46662SJoseph Chen	echo "    --rollback-index           <image1 n1> <image2 n2> ...   | Optional"
6688d46662SJoseph Chen	echo "    --version                  <image1 n1> <image2 n2> ...   | Optional"
6788d46662SJoseph Chen	echo ""
6888d46662SJoseph Chen	echo "Example:"
6988d46662SJoseph Chen	echo "    $0 --key-dir keys/ --src-dir src/ --out-dir output/  --version uboot.img 1 boot.img 3  --rollback-index uboot.img 3 boot.img 5"
7088d46662SJoseph Chen	echo
7188d46662SJoseph Chen}
7288d46662SJoseph Chen
7388d46662SJoseph Chenfunction arg_check_decimal()
7488d46662SJoseph Chen{
7588d46662SJoseph Chen	if [ -z $1 ]; then
7688d46662SJoseph Chen		help
7788d46662SJoseph Chen		exit 1
7888d46662SJoseph Chen	fi
7988d46662SJoseph Chen
8088d46662SJoseph Chen	DECIMAL=`echo $1 |sed 's/[0-9]//g'`
8188d46662SJoseph Chen	if [ ! -z ${DECIMAL} ]; then
8288d46662SJoseph Chen		echo "ERROR: $1 is not decimal integer"
8388d46662SJoseph Chen		help
8488d46662SJoseph Chen		exit 1
8588d46662SJoseph Chen	fi
8688d46662SJoseph Chen}
8788d46662SJoseph Chen
8888d46662SJoseph Chenfunction process_args()
8988d46662SJoseph Chen{
9088d46662SJoseph Chen	while [ $# -gt 0 ]; do
9188d46662SJoseph Chen		case $1 in
9288d46662SJoseph Chen			--key-dir)
9388d46662SJoseph Chen				ARG_KEY_DIR=$2
9488d46662SJoseph Chen				RSA_PRI_KEY="${ARG_KEY_DIR}/dev.key"
9588d46662SJoseph Chen				RSA_PUB_KEY="${ARG_KEY_DIR}/dev.pubkey"
9688d46662SJoseph Chen				RSA_CRT_KEY="${ARG_KEY_DIR}/dev.crt"
9788d46662SJoseph Chen				check_dir_exist $2
9888d46662SJoseph Chen				check_rsa_keys $2
9988d46662SJoseph Chen				shift 2
10088d46662SJoseph Chen				;;
10188d46662SJoseph Chen			--src-dir)
10288d46662SJoseph Chen				ARG_SRC_DIR=$2
10388d46662SJoseph Chen				check_dir_exist $2
10488d46662SJoseph Chen				SIGN_CFG_DIR="${ARG_SRC_DIR}/fit_signcfg/"
10588d46662SJoseph Chen				SIGN_CONFIG="${ARG_SRC_DIR}/fit_signcfg/sign.readonly_config"
10688d46662SJoseph Chen				shift 2
10788d46662SJoseph Chen				;;
10888d46662SJoseph Chen			--out-dir)
10988d46662SJoseph Chen				ARG_OUTPUT_DIR=$2
11088d46662SJoseph Chen				check_dir_exist $2
11188d46662SJoseph Chen				shift 2
11288d46662SJoseph Chen				;;
11388d46662SJoseph Chen			--rollback-index)
11488d46662SJoseph Chen				shift 1
11588d46662SJoseph Chen				for arg in "$@"; do
11688d46662SJoseph Chen					FILE_NAME="${1%.img}"
11788d46662SJoseph Chen					arg_check_decimal $2
11888d46662SJoseph Chen					ROLLBACK_PARAMS["${FILE_NAME}"]="$2"
11988d46662SJoseph Chen					if [[ $3 == *"--"* || -z $3 ]]; then
12088d46662SJoseph Chen						shift 2
12188d46662SJoseph Chen						break;
12288d46662SJoseph Chen					fi
12388d46662SJoseph Chen					shift 2
12488d46662SJoseph Chen				done
12588d46662SJoseph Chen				;;
12688d46662SJoseph Chen			--version)
12788d46662SJoseph Chen				shift 1
12888d46662SJoseph Chen				for arg in "$@"; do
12988d46662SJoseph Chen					FILE_NAME="${1%.img}"
13088d46662SJoseph Chen					arg_check_decimal $2
13188d46662SJoseph Chen					VERSION_PARAMS["${FILE_NAME}"]="$2"
13288d46662SJoseph Chen					if [[ $3 == *"--"* || -z $3 ]]; then
13388d46662SJoseph Chen						shift 2
13488d46662SJoseph Chen						break;
13588d46662SJoseph Chen					fi
13688d46662SJoseph Chen					shift 2
13788d46662SJoseph Chen				done
13888d46662SJoseph Chen				;;
13988d46662SJoseph Chen			--burn-key-hash)
14088d46662SJoseph Chen				ARG_BURN_KEY_HASH="y"
14188d46662SJoseph Chen				shift 1
14288d46662SJoseph Chen				;;
14388d46662SJoseph Chen			*)
14488d46662SJoseph Chen				help
14588d46662SJoseph Chen				exit 1
14688d46662SJoseph Chen				;;
14788d46662SJoseph Chen		esac
14888d46662SJoseph Chen	done
14988d46662SJoseph Chen
15088d46662SJoseph Chen	if [ -z "${ARG_KEY_DIR}" ] || [ -z "${ARG_SRC_DIR}" ] || [ -z "${ARG_OUTPUT_DIR}" ]; then
15188d46662SJoseph Chen		help
15288d46662SJoseph Chen		exit 1
15388d46662SJoseph Chen	fi
15488d46662SJoseph Chen}
15588d46662SJoseph Chen
15688d46662SJoseph Chenfunction check_dir_exist()
15788d46662SJoseph Chen{
15888d46662SJoseph Chen	if [ ! -d $1 ]; then
15988d46662SJoseph Chen		echo "ERROR: No $1 directory"
16088d46662SJoseph Chen		exit 1
16188d46662SJoseph Chen	fi
16288d46662SJoseph Chen}
16388d46662SJoseph Chen
16488d46662SJoseph Chenfunction check_file_exist()
16588d46662SJoseph Chen{
16688d46662SJoseph Chen	if [ ! -f $1 ]; then
16788d46662SJoseph Chen		echo "ERROR: No $1"
16888d46662SJoseph Chen		exit 1
16988d46662SJoseph Chen	fi
17088d46662SJoseph Chen}
17188d46662SJoseph Chen
17288d46662SJoseph Chenfunction check_its()
17388d46662SJoseph Chen{
17488d46662SJoseph Chen	cat $1 | while read LINE
17588d46662SJoseph Chen	do
17688d46662SJoseph Chen		FILE=`echo ${LINE} | sed -n "/incbin/p" | awk -F '"' '{ printf $2 }' | tr -d ' '`
17788d46662SJoseph Chen		if [ ! -f ${FILE} ]; then
17888d46662SJoseph Chen			echo "ERROR: ${FILE} not exist"
17988d46662SJoseph Chen			exit 1
18088d46662SJoseph Chen		fi
18188d46662SJoseph Chen	done
18288d46662SJoseph Chen}
18388d46662SJoseph Chen
18488d46662SJoseph Chenfunction check_rsa_algo()
18588d46662SJoseph Chen{
18688d46662SJoseph Chen	if grep -q '^CONFIG_FIT_ENABLE_RSA4096_SUPPORT=y' ${SIGN_CONFIG} ; then
18788d46662SJoseph Chen		RSA_ALGO="rsa4096"
18888d46662SJoseph Chen	else
18988d46662SJoseph Chen		RSA_ALGO="rsa2048"
19088d46662SJoseph Chen	fi
19188d46662SJoseph Chen
19288d46662SJoseph Chen	if ! grep -q ${RSA_ALGO} $1 ; then
19388d46662SJoseph Chen		echo "ERROR: Wrong rsa 'algo' in its file. It should be ${RSA_ALGO}."
19488d46662SJoseph Chen		exit 1
19588d46662SJoseph Chen	fi
19688d46662SJoseph Chen}
19788d46662SJoseph Chen
19888d46662SJoseph Chenfunction check_rsa_keys()
19988d46662SJoseph Chen{
20088d46662SJoseph Chen	if [ ! -f ${RSA_PRI_KEY} ]; then
20188d46662SJoseph Chen		echo "ERROR: No ${RSA_PRI_KEY} "
20288d46662SJoseph Chen		exit 1
20388d46662SJoseph Chen	elif [ ! -f ${RSA_PUB_KEY} ]; then
20488d46662SJoseph Chen		echo "ERROR: No ${RSA_PUB_KEY} "
20588d46662SJoseph Chen		exit 1
20688d46662SJoseph Chen	elif [ ! -f ${RSA_CRT_KEY} ]; then
20788d46662SJoseph Chen		echo "ERROR: No ${RSA_CRT_KEY} "
20888d46662SJoseph Chen		exit 1
20988d46662SJoseph Chen	fi
21088d46662SJoseph Chen}
21188d46662SJoseph Chen
21288d46662SJoseph Chenfunction sign_loader()
21388d46662SJoseph Chen{
21488d46662SJoseph Chen	echo
21588d46662SJoseph Chen	echo "==================== sign loader ===================="
21688d46662SJoseph Chen	cp ${INI_PATH} ${UNPACK_LOADER}/
21788d46662SJoseph Chen	INI_PATH=`find ${UNPACK_LOADER}/ -name 'MINIALL.ini'`
21888d46662SJoseph Chen	sed -i "s|PATH=|PATH=${SIGN_OUTPUT}\/|g" ${INI_PATH}
21988d46662SJoseph Chen
22088d46662SJoseph Chen	# code471
22188d46662SJoseph Chen	DDR=`grep "Path1=bin/[^ ]*_ddr_" ${INI_PATH} | tr -d ' '`
22288d46662SJoseph Chen	if [ ! -z ${DDR} ]; then
22388d46662SJoseph Chen		DDR=${DDR/*=/}
22488d46662SJoseph Chen		NEW_DDR=`find ${UNPACK_LOADER}/ -name '*ddr*bin' | head -n 1`
22588d46662SJoseph Chen		echo "${DDR} ${NEW_DDR}"
22688d46662SJoseph Chen		sed -i "s|${DDR}|${NEW_DDR}|g" ${INI_PATH}
22788d46662SJoseph Chen	fi
22888d46662SJoseph Chen	# code472
22988d46662SJoseph Chen	USBPLUG=`grep "Path1=bin/[^ ]*_usbplug_" ${INI_PATH} | tr -d ' '`
23088d46662SJoseph Chen	if [ ! -z ${USBPLUG} ]; then
23188d46662SJoseph Chen		USBPLUG=${USBPLUG/*=/}
23288d46662SJoseph Chen		NEW_USBPLUG=`find ${UNPACK_LOADER}/ -name '*usbplug*bin' | head -n 1`
23388d46662SJoseph Chen		echo "${USBPLUG} ${NEW_USBPLUG}"
23488d46662SJoseph Chen		sed -i "s|${USBPLUG}|${NEW_USBPLUG}|g" ${INI_PATH}
23588d46662SJoseph Chen	fi
23688d46662SJoseph Chen	# FlashData
23788d46662SJoseph Chen	FlashData=`grep "FlashData=bin/[^ ]*_ddr_" ${INI_PATH} | tr -d ' '`
23888d46662SJoseph Chen	if [ ! -z ${FlashData} ]; then
23988d46662SJoseph Chen		FlashData=${FlashData/*=/}
24088d46662SJoseph Chen		NEW_FlashData=`find ${UNPACK_LOADER}/ -name '*FlashData*bin' | head -n 1`
24188d46662SJoseph Chen		echo "${FlashData} ${NEW_FlashData}"
24288d46662SJoseph Chen		sed -i "s|${FlashData}|${NEW_FlashData}|g" ${INI_PATH}
24388d46662SJoseph Chen	fi
24488d46662SJoseph Chen	# FlashBoot
24588d46662SJoseph Chen	FlashBoot=`grep "FlashBoot=bin/[^ ]*_spl_" ${INI_PATH} | tr -d ' '`
24688d46662SJoseph Chen	if [ ! -z ${FlashBoot} ]; then
24788d46662SJoseph Chen		FlashBoot=${FlashBoot/*=/}
24888d46662SJoseph Chen		NEW_FlashBoot=`find ${UNPACK_LOADER}/ -name '*FlashBoot*bin' | head -n 1`
24988d46662SJoseph Chen		echo "${FlashBoot} ${NEW_FlashBoot}"
25088d46662SJoseph Chen		sed -i "s|${FlashBoot}|${NEW_FlashBoot}|g" ${INI_PATH}
25188d46662SJoseph Chen	fi
25288d46662SJoseph Chen	# FlashBoost
25388d46662SJoseph Chen	FlashBoost=`grep "FlashBoost=bin/[^ ]*_boost_" ${INI_PATH} | tr -d ' '`
25488d46662SJoseph Chen	if [ ! -z ${FlashBoost} ]; then
25588d46662SJoseph Chen		FlashBoost=${FlashBoost/*=/}
25688d46662SJoseph Chen		NEW_FlashBoot=`find ${UNPACK_LOADER}/ -name '*FlashBoost*bin' | head -n 1`
25788d46662SJoseph Chen		echo "${FlashBoost} ${NEW_FlashBoot}"
25888d46662SJoseph Chen		sed -i "s|${FlashBoost}|${NEW_FlashBoot}|g" ${INI_PATH}
25988d46662SJoseph Chen	fi
26088d46662SJoseph Chen
26188d46662SJoseph Chen	${TOOL_BOOT_MERGER} ${INI_PATH}
26288d46662SJoseph Chen
26388d46662SJoseph Chen	# chip name
26488d46662SJoseph Chen	CHIP_PATTERN='^CONFIG_ROCKCHIP_[R,P][X,V,K][0-9ESXB]{1,5}'
26588d46662SJoseph Chen	RKCHIP=`egrep -o ${CHIP_PATTERN} ${SIGN_CONFIG}`
26688d46662SJoseph Chen	RKCHIP=${RKCHIP##*_}
26788d46662SJoseph Chen	CHIP_NAME=`filt_val "CONFIG_CHIP_NAME" ${SIGN_CONFIG}`
26888d46662SJoseph Chen	if [ -z "${CHIP_NAME}" ]; then
26988d46662SJoseph Chen		CHIP_NAME=${RKCHIP}
27088d46662SJoseph Chen	fi
27188d46662SJoseph Chen
27288d46662SJoseph Chen	# sign
27388d46662SJoseph Chen	${TOOL_RK_SIGN} cc --chip ${CHIP_NAME: 2: 6}
27488d46662SJoseph Chen	${TOOL_RK_SIGN} lk --key ${RSA_PRI_KEY} --pubkey ${RSA_PUB_KEY}
27588d46662SJoseph Chen	if ls ${SIGN_OUTPUT}/*loader*.bin >/dev/null 2>&1 ; then
27688d46662SJoseph Chen		${TOOL_RK_SIGN} sl --loader ${SIGN_OUTPUT}/*loader*.bin
277*8385bc16SXuhui Lin	elif ls ${SIGN_OUTPUT}/MiniLoaderAll.bin >/dev/null 2>&1 ; then
278*8385bc16SXuhui Lin		${TOOL_RK_SIGN} sl --loader ${SIGN_OUTPUT}/MiniLoaderAll.bin
27988d46662SJoseph Chen	fi
28088d46662SJoseph Chen	if ls ${SIGN_OUTPUT}/*download*.bin >/dev/null 2>&1 ; then
28188d46662SJoseph Chen		${TOOL_RK_SIGN} sl --loader ${SIGN_OUTPUT}/*download*.bin
28288d46662SJoseph Chen	fi
28388d46662SJoseph Chen	if ls ${SIGN_OUTPUT}/*idblock*.img >/dev/null 2>&1 ; then
28488d46662SJoseph Chen		${TOOL_RK_SIGN} sb --idb ${SIGN_OUTPUT}/*idblock*.img
28588d46662SJoseph Chen	fi
28688d46662SJoseph Chen}
28788d46662SJoseph Chen
28888d46662SJoseph Chenfunction sign_uboot()
28988d46662SJoseph Chen{
29088d46662SJoseph Chen	ARG_ROLLBACK_IDX_UBOOT=${ROLLBACK_PARAMS["uboot"]:-0}
29188d46662SJoseph Chen	ARG_VER_UBOOT=${VERSION_PARAMS["uboot"]:-0}
29288d46662SJoseph Chen
29388d46662SJoseph Chen	echo
29488d46662SJoseph Chen	echo "==================== sign uboot.img: version=${ARG_VER_UBOOT}, rollback-index=${ARG_ROLLBACK_IDX_UBOOT} ===================="
29588d46662SJoseph Chen	if ! grep -q '^CONFIG_SPL_FIT_SIGNATURE=y' ${SIGN_CONFIG} ; then
29688d46662SJoseph Chen		echo "ERROR: CONFIG_SPL_FIT_SIGNATURE is disabled"
29788d46662SJoseph Chen		exit 1
29888d46662SJoseph Chen	fi
29988d46662SJoseph Chen	# spl dtb
30088d46662SJoseph Chen	FlashBoot=`find ${UNPACK_LOADER}/ -name '*FlashBoot*bin' | head -n 1`
30188d46662SJoseph Chen	TOTALSIZE=`fdtdump -s ${FlashBoot} | grep totalsize | awk '{ print $4 }' | tr -d "()"`
30288d46662SJoseph Chen	OFFSET=`fdtdump -s ${FlashBoot} | head -1 | awk -F ":" '{ print $2 }' | sed "s/ found fdt at offset //g" | tr -d " "`
30388d46662SJoseph Chen	if [ -z ${OFFSET}  ]; then
30488d46662SJoseph Chen		echo "ERROR: invalid ${FlashBoot} , unable to find fdt blob"
30588d46662SJoseph Chen	fi
30688d46662SJoseph Chen	OFFSET=`printf %d ${OFFSET} ` # hex -> dec
30788d46662SJoseph Chen
30888d46662SJoseph Chen	dd if=${FlashBoot} of=${SPL_DTB} bs=1 skip=${OFFSET} count=${TOTALSIZE} >/dev/null 2>&1
30988d46662SJoseph Chen
31088d46662SJoseph Chen	# rollback-index
31188d46662SJoseph Chen	if grep -q '^CONFIG_SPL_FIT_ROLLBACK_PROTECT=y' ${SIGN_CONFIG} ; then
31288d46662SJoseph Chen		ARG_SPL_ROLLBACK_PROTECT="y"
31388d46662SJoseph Chen		if [ ${ARG_ROLLBACK_IDX_UBOOT} -eq 0 ]; then
31488d46662SJoseph Chen			echo "ERROR: No arg \"--rollback-index uboot.img <n>\""
31588d46662SJoseph Chen			exit 1
31688d46662SJoseph Chen		fi
31788d46662SJoseph Chen	fi
31888d46662SJoseph Chen
31988d46662SJoseph Chen	if [ "${ARG_SPL_ROLLBACK_PROTECT}" == "y" ]; then
32088d46662SJoseph Chen		VERSION=`grep 'rollback-index' ${ITS_UBOOT} | awk -F '=' '{ printf $2 }' | tr -d ' '`
32188d46662SJoseph Chen		sed -i "s/rollback-index = ${VERSION}/rollback-index = <${ARG_ROLLBACK_IDX_UBOOT}>;/g" ${ITS_UBOOT}
32288d46662SJoseph Chen	fi
32388d46662SJoseph Chen
32488d46662SJoseph Chen	if ! fdtget -l ${UBOOT_DTB} /signature >/dev/null 2>&1 ; then
32588d46662SJoseph Chen		${TOOL_MKIMAGE} -f ${ITS_UBOOT} -k ${ARG_KEY_DIR} -K ${UBOOT_DTB} -E -p ${OFFS_DATA} -r ${ITB_UBOOT} -v ${ARG_VER_UBOOT}
32688d46662SJoseph Chen		echo "## Adding RSA public key into ${UBOOT_DTB}"
32788d46662SJoseph Chen	fi
32888d46662SJoseph Chen
32988d46662SJoseph Chen	if fdtget -l ${SPL_DTB} /signature >/dev/null 2>&1 ; then
33088d46662SJoseph Chen		fdtput -r ${SPL_DTB} /signature
33188d46662SJoseph Chen	fi
33288d46662SJoseph Chen
33388d46662SJoseph Chen	# sign
33488d46662SJoseph Chen	${TOOL_MKIMAGE} -f ${ITS_UBOOT} -k ${ARG_KEY_DIR} -K ${SPL_DTB} -E -p ${OFFS_DATA} -r ${ITB_UBOOT} -v ${ARG_VER_UBOOT}
33588d46662SJoseph Chen
33688d46662SJoseph Chen	# burn-key-hash
33788d46662SJoseph Chen	if [ "${ARG_BURN_KEY_HASH}" == "y" ]; then
33888d46662SJoseph Chen		if grep -q '^CONFIG_SPL_FIT_HW_CRYPTO=y' ${SIGN_CONFIG} ; then
33988d46662SJoseph Chen			fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} burn-key-hash 0x1
34088d46662SJoseph Chen		else
34188d46662SJoseph Chen			echo "ERROR: --burn-key-hash requires CONFIG_SPL_FIT_HW_CRYPTO=y"
34288d46662SJoseph Chen			exit 1
34388d46662SJoseph Chen		fi
34488d46662SJoseph Chen	fi
34588d46662SJoseph Chen
34688d46662SJoseph Chen	# rollback-index read back check
34788d46662SJoseph Chen	if [ "${ARG_SPL_ROLLBACK_PROTECT}" == "y" ]; then
34888d46662SJoseph Chen		VERSION=`fdtget -ti ${ITB_UBOOT} /configurations/conf rollback-index`
34988d46662SJoseph Chen		if [ "${VERSION}" != "${ARG_ROLLBACK_IDX_UBOOT}" ]; then
35088d46662SJoseph Chen			echo "ERROR: Failed to set rollback-index for ${ITB_UBOOT}";
35188d46662SJoseph Chen			exit 1
35288d46662SJoseph Chen		fi
35388d46662SJoseph Chen	else
35488d46662SJoseph Chen		if [ ! -z "${ARG_ROLLBACK_IDX_UBOOT}" ]; then
35588d46662SJoseph Chen			echo "WARNING: ignore \"--rollback-index uboot.img ${ARG_ROLLBACK_IDX_UBOOT}\" due to CONFIG_SPL_FIT_ROLLBACK_PROTECT=n"
35688d46662SJoseph Chen			echo
35788d46662SJoseph Chen		fi
35888d46662SJoseph Chen	fi
35988d46662SJoseph Chen
36088d46662SJoseph Chen	# burn-key-hash read back check
36188d46662SJoseph Chen	if [ "${ARG_BURN_KEY_HASH}" == "y" ]; then
36288d46662SJoseph Chen		if [ "`fdtget -ti ${SPL_DTB} ${SIGNATURE_KEY_NODE} burn-key-hash`" != "1" ]; then
36388d46662SJoseph Chen			echo "ERROR: Failed to set burn-key-hash for ${SPL_DTB}";
36488d46662SJoseph Chen			exit 1
36588d46662SJoseph Chen		fi
36688d46662SJoseph Chen	fi
36788d46662SJoseph Chen
36888d46662SJoseph Chen	# host check signature
36988d46662SJoseph Chen	${TOOL_FIT_CHECK_SIGN} -f ${ITB_UBOOT} -k ${SPL_DTB} -s
37088d46662SJoseph Chen
37188d46662SJoseph Chen	# minimize u-boot-spl.dtb: clear as 0 but not remove property.
37288d46662SJoseph Chen	if grep -q '^CONFIG_SPL_FIT_HW_CRYPTO=y' ${SIGN_CONFIG} ; then
37388d46662SJoseph Chen		fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,r-squared 0x0
37488d46662SJoseph Chen		if grep -q '^CONFIG_SPL_ROCKCHIP_CRYPTO_V1=y' ${SIGN_CONFIG} ; then
37588d46662SJoseph Chen			fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0
37688d46662SJoseph Chen			fdtput -r ${SPL_DTB} ${SIGNATURE_KEY_NODE}/hash@np
37788d46662SJoseph Chen		else
37888d46662SJoseph Chen			fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0
37988d46662SJoseph Chen			fdtput -r ${SPL_DTB} ${SIGNATURE_KEY_NODE}/hash@c
38088d46662SJoseph Chen		fi
38188d46662SJoseph Chen	else
38288d46662SJoseph Chen		fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0
38388d46662SJoseph Chen		fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0
38488d46662SJoseph Chen		fdtput -tx ${SPL_DTB} ${SIGNATURE_KEY_NODE} rsa,exponent-BN 0x0
38588d46662SJoseph Chen		fdtput -r ${SPL_DTB} ${SIGNATURE_KEY_NODE}/hash@c
38688d46662SJoseph Chen		fdtput -r ${SPL_DTB} ${SIGNATURE_KEY_NODE}/hash@np
38788d46662SJoseph Chen	fi
38888d46662SJoseph Chen
38988d46662SJoseph Chen	# repack spl
39088d46662SJoseph Chen	dd if=${SPL_DTB} of=${FlashBoot} bs=${OFFSET} seek=1 >/dev/null 2>&1
39188d46662SJoseph Chen
39288d46662SJoseph Chen	if [ "${ARG_BURN_KEY_HASH}" == "y" ]; then
39388d46662SJoseph Chen		echo "## ${SPL_DTB}: burn-key-hash=1"
39488d46662SJoseph Chen	fi
39588d46662SJoseph Chen
39688d46662SJoseph Chen	ITB_MAX_NUM=`sed -n "/CONFIG_SPL_FIT_IMAGE_MULTIPLE/p" ${SIGN_CONFIG} | awk -F "=" '{ print $2 }'`
39788d46662SJoseph Chen	ITB_MAX_KB=`sed  -n "/CONFIG_SPL_FIT_IMAGE_KB/p" ${SIGN_CONFIG} | awk -F "=" '{ print $2 }'`
39888d46662SJoseph Chen	ITB_MAX_BS=$((ITB_MAX_KB*1024))
39988d46662SJoseph Chen	ITB_BS=`ls -l ${ITB_UBOOT} | awk '{ print $5 }'`
40088d46662SJoseph Chen
40188d46662SJoseph Chen	if [ ${ITB_BS} -gt ${ITB_MAX_BS} ]; then
40288d46662SJoseph Chen		echo "ERROR: pack uboot.img failed! ${ITB_UBOOT} actual: ${ITB_BS} bytes, max limit: ${ITB_MAX_BS} bytes"
40388d46662SJoseph Chen		exit 1
40488d46662SJoseph Chen	fi
40588d46662SJoseph Chen
40688d46662SJoseph Chen	for ((i = 0; i < ${ITB_MAX_NUM}; i++));
40788d46662SJoseph Chen	do
40888d46662SJoseph Chen		cat ${ITB_UBOOT} >> ${IMG_UBOOT}
40988d46662SJoseph Chen		truncate -s %${ITB_MAX_KB}K ${IMG_UBOOT}
41088d46662SJoseph Chen	done
41188d46662SJoseph Chen}
41288d46662SJoseph Chen
41388d46662SJoseph Chenfunction sign_fit()
41488d46662SJoseph Chen{
41588d46662SJoseph Chen	SRC_FILE="$1.img"
41688d46662SJoseph Chen	UNPACK_DIR="${SIGN_DIR}/unpack_$1"
41788d46662SJoseph Chen	ITS_FILE="${UNPACK_DIR}/image.its"
41888d46662SJoseph Chen	ITB_FILE="${UNPACK_DIR}/image.itb"
41988d46662SJoseph Chen	IMG_FILE="${SIGN_OUTPUT}/${SRC_FILE}"
42088d46662SJoseph Chen	ARG_VERSION=${VERSION_PARAMS["$1"]:-0}
42188d46662SJoseph Chen	ARG_ROLLBACK_IDX=${ROLLBACK_PARAMS["$1"]:-0}
42288d46662SJoseph Chen
42388d46662SJoseph Chen	echo
42488d46662SJoseph Chen	echo "==================== sign ${SRC_FILE}: version=${ARG_VERSION}, rollback-index=${ARG_ROLLBACK_IDX} ===================="
42588d46662SJoseph Chen	cp ${UBOOT_DTB_ORIG} ${UBOOT_DTB}
42688d46662SJoseph Chen	rm -rf ${UNPACK_DIR}
42788d46662SJoseph Chen	${TOOL_FIT_UNPACK} -f ${ARG_SRC_DIR}/${SRC_FILE} -o ${UNPACK_DIR}
42888d46662SJoseph Chen	check_rsa_algo ${ITS_FILE}
42988d46662SJoseph Chen
43088d46662SJoseph Chen	if ! grep -q '^CONFIG_FIT_SIGNATURE=y' ${SIGN_CONFIG} ; then
43188d46662SJoseph Chen		echo "ERROR: CONFIG_FIT_SIGNATURE is disabled"
43288d46662SJoseph Chen		exit 1
43388d46662SJoseph Chen	fi
43488d46662SJoseph Chen
43588d46662SJoseph Chen	# ARG_ROLLBACK_IDX default value is 0.
43688d46662SJoseph Chen	if grep -q '^CONFIG_FIT_ROLLBACK_PROTECT=y' ${SIGN_CONFIG} ; then
43788d46662SJoseph Chen		ARG_ROLLBACK_PROTECT="y"
43888d46662SJoseph Chen		if ! grep -q '^CONFIG_OPTEE_CLIENT=y' ${SIGN_CONFIG} ; then
43988d46662SJoseph Chen			if [ ${ARG_ROLLBACK_IDX} -gt 0 ]; then
44088d46662SJoseph Chen				echo "ERROR: Don't support \"--rollback-index ${SRC_FILE} <n>\" due to CONFIG_FIT_ROLLBACK_PROTECT=y but CONFIG_OPTEE_CLIENT=n"
44188d46662SJoseph Chen				exit 1
44288d46662SJoseph Chen			fi
44388d46662SJoseph Chen		else
44488d46662SJoseph Chen			if [ ${ARG_ROLLBACK_IDX} -eq 0 ]; then
44588d46662SJoseph Chen				echo "ERROR: No arg \"--rollback-index ${SRC_FILE} <n>\""
44688d46662SJoseph Chen				exit 1
44788d46662SJoseph Chen			fi
44888d46662SJoseph Chen		fi
44988d46662SJoseph Chen	else
45088d46662SJoseph Chen		if [ ${ARG_ROLLBACK_IDX} -gt 0 ]; then
45188d46662SJoseph Chen			echo "WARNING: ignore \"--rollback-index ${SRC_FILE} ${ARG_ROLLBACK_IDX}\" due to CONFIG_FIT_ROLLBACK_PROTECT=n"
45288d46662SJoseph Chen			echo
45388d46662SJoseph Chen		fi
45488d46662SJoseph Chen	fi
45588d46662SJoseph Chen
45688d46662SJoseph Chen	# Limit as same.
45788d46662SJoseph Chen	if [ -z "${PREV_ARG_ROLLBACK_IDX}" ]; then
45888d46662SJoseph Chen		PREV_ARG_ROLLBACK_IDX=${ARG_ROLLBACK_IDX}
45988d46662SJoseph Chen	else
46088d46662SJoseph Chen		if [ "${PREV_ARG_ROLLBACK_IDX}" != "${ARG_ROLLBACK_IDX}" ]; then
46188d46662SJoseph Chen			echo "ERROR: ${SRC_FILE} rollback version should be the same as previous: ${PREV_ARG_ROLLBACK_IDX}"
46288d46662SJoseph Chen			exit 1
46388d46662SJoseph Chen		fi
46488d46662SJoseph Chen	fi
46588d46662SJoseph Chen
46688d46662SJoseph Chen	# fixup for non-thunderboot
46788d46662SJoseph Chen	FDT_ADDR_R=`filt_val "fdt_addr_r" ${SIGN_CONFIG}`
46888d46662SJoseph Chen	KERNEL_ADDR_R=`filt_val "kernel_addr_r" ${SIGN_CONFIG}`
46988d46662SJoseph Chen	RAMDISK_ADDR_R=`filt_val "ramdisk_addr_r" ${SIGN_CONFIG}`
47088d46662SJoseph Chen	sed -i "s/${FDT_ADDR_PLACEHOLDER}/${FDT_ADDR_R}/g"         ${ITS_FILE}
47188d46662SJoseph Chen	sed -i "s/${KERNEL_ADDR_PLACEHOLDER}/${KERNEL_ADDR_R}/g"   ${ITS_FILE}
47288d46662SJoseph Chen	sed -i "s/${RAMDISK_ADDR_PLACEHOLDER}/${RAMDISK_ADDR_R}/g" ${ITS_FILE}
47388d46662SJoseph Chen
47488d46662SJoseph Chen	if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then
47588d46662SJoseph Chen		VERSION=`grep 'rollback-index' ${ITS_FILE} | awk -F '=' '{ printf $2 }' | tr -d ' '`
47688d46662SJoseph Chen		sed -i "s/rollback-index = ${VERSION}/rollback-index = <${ARG_ROLLBACK_IDX}>;/g" ${ITS_FILE}
47788d46662SJoseph Chen	fi
47888d46662SJoseph Chen
47988d46662SJoseph Chen	# sign
48088d46662SJoseph Chen	${TOOL_MKIMAGE} -f ${ITS_FILE} -k ${ARG_KEY_DIR} -K ${UBOOT_DTB} -E -p ${OFFS_DATA} -r ${ITB_FILE} -v ${ARG_VERSION}
48188d46662SJoseph Chen
48288d46662SJoseph Chen	# rollback-index read back check
48388d46662SJoseph Chen	if [ "${ARG_ROLLBACK_PROTECT}" == "y" ]; then
48488d46662SJoseph Chen		VERSION=`fdtget -ti ${ITB_FILE} /configurations/conf rollback-index`
48588d46662SJoseph Chen		if [ "${VERSION}" != "${ARG_ROLLBACK_IDX}" ]; then
48688d46662SJoseph Chen			echo "ERROR: Failed to set rollback-index for ${ITB_FILE}";
48788d46662SJoseph Chen			exit 1
48888d46662SJoseph Chen		fi
48988d46662SJoseph Chen	fi
49088d46662SJoseph Chen
49188d46662SJoseph Chen	# host check signature
49288d46662SJoseph Chen	${TOOL_FIT_CHECK_SIGN} -f ${ITB_FILE} -k ${UBOOT_DTB}
49388d46662SJoseph Chen
49488d46662SJoseph Chen	# minimize u-boot.dtb: clearn as 0 but not remove property.
49588d46662SJoseph Chen	if grep -q '^CONFIG_FIT_HW_CRYPTO=y' ${SIGN_CONFIG} ; then
49688d46662SJoseph Chen		fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,r-squared 0x0
49788d46662SJoseph Chen		if grep -q '^CONFIG_ROCKCHIP_CRYPTO_V1=y' ${SIGN_CONFIG} ; then
49888d46662SJoseph Chen			fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0
49988d46662SJoseph Chen		else
50088d46662SJoseph Chen			fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0
50188d46662SJoseph Chen		fi
50288d46662SJoseph Chen	else
50388d46662SJoseph Chen		fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,c 0x0
50488d46662SJoseph Chen		fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,np 0x0
50588d46662SJoseph Chen		fdtput -tx ${UBOOT_DTB} ${SIGNATURE_KEY_NODE} rsa,exponent-BN 0x0
50688d46662SJoseph Chen	fi
50788d46662SJoseph Chen	fdtput -r ${UBOOT_DTB} ${SIGNATURE_KEY_NODE}/hash@c
50888d46662SJoseph Chen	fdtput -r ${UBOOT_DTB} ${SIGNATURE_KEY_NODE}/hash@np
50988d46662SJoseph Chen
51088d46662SJoseph Chen	cp ${ITB_FILE} ${IMG_FILE}
51188d46662SJoseph Chen}
51288d46662SJoseph Chen
51388d46662SJoseph Chenfunction unpack_loader_uboot()
51488d46662SJoseph Chen{
51588d46662SJoseph Chen	echo
51688d46662SJoseph Chen	echo "==================== unpack files ===================="
51788d46662SJoseph Chen	# unpack loader
51888d46662SJoseph Chen	rm -rf ${UNPACK_LOADER}/ && mkdir -p ${UNPACK_LOADER}/
51988d46662SJoseph Chen	${TOOL_BOOT_MERGER} unpack -i ${LOADER_NAME} -o ${UNPACK_LOADER}/
52088d46662SJoseph Chen
52188d46662SJoseph Chen	# csum spl
52288d46662SJoseph Chen	FlashBoot=`find ${UNPACK_LOADER}/ -name '*FlashBoot*bin' | head -n 1`
52388d46662SJoseph Chen	SIZE=`grep 'spl_size=' ${SIGN_CONFIG} | awk -F "=" '{print $2}'`
52488d46662SJoseph Chen	dd if=${FlashBoot} of=${UNPACK_LOADER}/u-boot-spl-nodtb.bin bs=1 skip=0 count=${SIZE} >/dev/null 2>&1
52588d46662SJoseph Chen	CSUM1=`grep 'spl_sha256sum=' ${SIGN_CONFIG} | awk -F "=" '{print $2}'`
52688d46662SJoseph Chen	CSUM2=`sha256sum ${UNPACK_LOADER}/u-boot-spl-nodtb.bin | awk '{ print $1 }'`
52788d46662SJoseph Chen	if [ "${CSUM1}" != "${CSUM2}" ]; then
52888d46662SJoseph Chen		echo "ERROR: SHA256 checksum is not match:"
52988d46662SJoseph Chen		echo "    ${CSUM1}: ${LOADER_NAME}/"
53088d46662SJoseph Chen		echo "    ${CSUM2}: ${SIGN_CONFIG} history"
53188d46662SJoseph Chen		echo
53288d46662SJoseph Chen		echo "Build info of ${SIGN_CONFIG}:"
53388d46662SJoseph Chen		echo "    ${BUILD}"
53488d46662SJoseph Chen		echo
53588d46662SJoseph Chen		exit 1
53688d46662SJoseph Chen	fi
53788d46662SJoseph Chen
53888d46662SJoseph Chen	# unpack uboot.img
53988d46662SJoseph Chen	rm -rf ${UNPACK_UBOOT}/
54088d46662SJoseph Chen	${TOOL_FIT_UNPACK} -f ${ARG_SRC_DIR}/uboot.img -o ${UNPACK_UBOOT}
54188d46662SJoseph Chen
54288d46662SJoseph Chen	# csum uboot
54388d46662SJoseph Chen	CSUM1=`grep 'uboot_sha256sum=' ${SIGN_CONFIG} | awk -F "=" '{print $2}'`
54488d46662SJoseph Chen	CSUM2=`sha256sum ${UNPACK_UBOOT}/uboot | awk '{ print $1 }'`
54588d46662SJoseph Chen	BUILD=`grep 'BUILD:' ${SIGN_CONFIG}`
54688d46662SJoseph Chen	if [ "${CSUM1}" != "${CSUM2}" ]; then
54788d46662SJoseph Chen		echo "ERROR: SHA256 checksum is not match:"
54888d46662SJoseph Chen		echo "    ${CSUM1}: uboot in ${ARG_SRC_DIR}/uboot.img"
54988d46662SJoseph Chen		echo "    ${CSUM2}: in ${SIGN_CONFIG}"
55088d46662SJoseph Chen		echo
55188d46662SJoseph Chen		echo "Build info of ${SIGN_CONFIG}:"
55288d46662SJoseph Chen		echo "    ${BUILD}"
55388d46662SJoseph Chen		echo
55488d46662SJoseph Chen		exit 1
55588d46662SJoseph Chen	fi
55688d46662SJoseph Chen
55788d46662SJoseph Chen	check_rsa_algo ${ITS_UBOOT}
55888d46662SJoseph Chen	if fdtget -l ${UBOOT_DTB} /signature >/dev/null 2>&1 ; then
55988d46662SJoseph Chen		fdtput -r ${UBOOT_DTB} /signature
56088d46662SJoseph Chen	fi
56188d46662SJoseph Chen	cp ${UBOOT_DTB} ${UBOOT_DTB_ORIG}
56288d46662SJoseph Chen}
56388d46662SJoseph Chen
56488d46662SJoseph Chenfunction prepare()
56588d46662SJoseph Chen{
56688d46662SJoseph Chen	if [ ! -d ${SIGN_CFG_DIR} ]; then
56788d46662SJoseph Chen		echo "ERROR: No ${SIGN_CFG_DIR} directory"
56888d46662SJoseph Chen		exit 1
56988d46662SJoseph Chen	fi
57088d46662SJoseph Chen	if [ ! -f ${SIGN_CONFIG} ]; then
57188d46662SJoseph Chen		echo "ERROR: No ${SIGN_CONFIG} file"
57288d46662SJoseph Chen		exit 1
57388d46662SJoseph Chen	fi
57488d46662SJoseph Chen	if [ ! -f ${ARG_SRC_DIR}/uboot.img ]; then
57588d46662SJoseph Chen		echo "ERROR: No ${ARG_SRC_DIR}/uboot.img file"
57688d46662SJoseph Chen		exit 1
57788d46662SJoseph Chen	fi
57888d46662SJoseph Chen	INI_PATH=`find ${SIGN_CFG_DIR} -name 'MINIALL.ini' | head -n 1`
57988d46662SJoseph Chen	if [ -z "${INI_PATH}" ]; then
58088d46662SJoseph Chen		echo "ERROR: No platform MINIALL.ini file"
58188d46662SJoseph Chen		exit 1
58288d46662SJoseph Chen	fi
58388d46662SJoseph Chen	LOADER_NAME=`find ${ARG_SRC_DIR} -name '*loader*bin' | head -n 1`
58488d46662SJoseph Chen	if [ -z "${LOADER_NAME}" ]; then
58588d46662SJoseph Chen		LOADER_NAME=`find ${ARG_SRC_DIR} -name '*download*.bin' | head -n 1`
58688d46662SJoseph Chen	fi
58788d46662SJoseph Chen	if [ -z "${LOADER_NAME}" ]; then
588*8385bc16SXuhui Lin		LOADER_NAME=`find ${ARG_SRC_DIR} -name 'MiniLoaderAll.bin' | head -n 1`
589*8385bc16SXuhui Lin	fi
590*8385bc16SXuhui Lin	if [ -z "${LOADER_NAME}" ]; then
59188d46662SJoseph Chen		echo "ERROR: No platform loader or download found"
59288d46662SJoseph Chen		exit 1
59388d46662SJoseph Chen	fi
59488d46662SJoseph Chen
59588d46662SJoseph Chen	rm -rf ${SIGN_DIR} && mkdir -p ${SIGN_OUTPUT}
59688d46662SJoseph Chen}
59788d46662SJoseph Chen
59888d46662SJoseph Chenfunction finish()
59988d46662SJoseph Chen{
60088d46662SJoseph Chen	echo
60188d46662SJoseph Chen	echo "Rollback-Index:"
60288d46662SJoseph Chen	for FILE in ${SIGN_OUTPUT}/*.img; do
60315257973SJoseph Chen		if file $(realpath ${FILE}) | grep -q 'Device Tree Blob' ; then
60488d46662SJoseph Chen			VERSION=`fdtget -ti ${FILE} /configurations/conf rollback-index`
60588d46662SJoseph Chen			NAME=`basename ${FILE}`
60688d46662SJoseph Chen			echo "    - ${NAME}=${VERSION}"
60788d46662SJoseph Chen		fi
60888d46662SJoseph Chen	done
60988d46662SJoseph Chen	echo
61088d46662SJoseph Chen	echo "OK. Signed images are ready in ${ARG_OUTPUT_DIR}:"
61188d46662SJoseph Chen	ls ${SIGN_OUTPUT}
61288d46662SJoseph Chen	mv ${SIGN_OUTPUT}/* ${ARG_OUTPUT_DIR}/
61388d46662SJoseph Chen	rm -rf ${SIGN_DIR}/ data2sign*
61488d46662SJoseph Chen	echo
61588d46662SJoseph Chen}
61688d46662SJoseph Chen
61788d46662SJoseph Chenfunction main()
61888d46662SJoseph Chen{
61988d46662SJoseph Chen	prepare
62088d46662SJoseph Chen	unpack_loader_uboot
62188d46662SJoseph Chen
62288d46662SJoseph Chen	for FILE in ${ARG_SRC_DIR}/*.img; do
62388d46662SJoseph Chen		if echo ${FILE} | grep -q "uboot.img"; then
62488d46662SJoseph Chen			continue;
62588d46662SJoseph Chen		fi
62615257973SJoseph Chen		if file $(realpath ${FILE}) | grep -q 'Device Tree Blob' ; then
62788d46662SJoseph Chen			FILE=$(basename "${FILE}" .img)
62888d46662SJoseph Chen			sign_fit ${FILE}
62988d46662SJoseph Chen		fi
63088d46662SJoseph Chen	done
63188d46662SJoseph Chen
63288d46662SJoseph Chen	sign_uboot
63388d46662SJoseph Chen	sign_loader
63488d46662SJoseph Chen	finish
63588d46662SJoseph Chen}
63688d46662SJoseph Chen
63788d46662SJoseph Chenprocess_args $*
63888d46662SJoseph Chenmain
639