11#! /bin/bash
22#
3- # Copyright (c) 2015, NVIDIA CORPORATION. All rights reserved.
3+ # Copyright (c) 2015-2016 , NVIDIA CORPORATION. All rights reserved.
44#
55# This program is free software; you can redistribute it and/or modify it
66# under the terms and conditions of the GNU General Public License,
1717# See file CREDITS for list of people who contributed to this
1818# project.
1919#
20+
21+ Usage ()
22+ {
23+ cat << EOF
24+ Usage: ./sign.sh <soc> <boot_image> <rsa_priv_key>
25+ Where,
26+ soc: tegra124, tegra210
27+ boot_image: image generated by cbootimage,
28+ priv_key: rsa key file in .pem format.
29+ EOF
30+ exit 1;
31+ }
32+
2033set -e
21- IMAGE_FILE=$1
22- KEY_FILE=$2
34+
35+ soc=$1 # tegra124, tegra210
36+ if [[ " ${soc} " = tegra124 ]]; then
37+ bl_block_offset=16384; # emmc: 16384, spi_flash: 32768: default: emmc
38+ bct_signed_offset=1712;
39+ bct_signed_length=6480;
40+ elif [[ " ${soc} " = tegra210 ]]; then
41+ bl_block_offset=32768; # emmc: 16384, spi_flash: 32768: default: spi
42+ bct_signed_offset=1296;
43+ bct_signed_length=8944;
44+ else
45+ echo " Error: Invalid target device: soc = $soc " ;
46+ Usage;
47+ fi ;
48+ bct_length=$(( $bct_signed_offset + $bct_signed_length )) ;
49+
50+ # more error check
51+ if [ $# -lt 3 ]; then
52+ echo " Error: Missing parameter(s)" ;
53+ Usage;
54+ fi ;
55+
56+ #
57+ # In case to add more parameters in the future, we keep the last two as
58+ # IMAGE_FILE and KEY_FILE
59+ #
60+ argv=($@ );
61+ IMAGE_FILE=${argv[$#-2]} ;
62+ KEY_FILE=${argv[$#-1]} ;
2363TARGET_IMAGE=$IMAGE_FILE
2464CONFIG_FILE=config.tmp
2565
@@ -33,15 +73,15 @@ MV=mv
3373XXD=xxd
3474CUT=cut
3575
36- echo " Get rid of all temporary files: *.sig, *.tosig, *.tmp *.mod"
37- $RM -f * .sig * .tosig * .tmp * .mod
76+ echo " Sign ${soc} ${IMAGE_FILE} with key ${KEY_FILE} "
3877
3978echo " Get bl length "
4079BL_LENGTH=` $BCT_DUMP $IMAGE_FILE | grep " Bootloader\[0\].Length" \
4180 | awk -F ' ' ' {print $4}' | awk -F ' ;' ' {print $1}' `
4281
4382echo " Extract bootloader to $IMAGE_FILE .bl.tosig, length $BL_LENGTH "
44- $DD bs=1 skip=32768 if=$IMAGE_FILE of=$IMAGE_FILE .bl.tosig count=$BL_LENGTH
83+ $DD bs=1 skip=${bl_block_offset} if=$IMAGE_FILE of=$IMAGE_FILE .bl.tosig \
84+ count=$BL_LENGTH
4585
4686echo " Calculate rsa signature for bootloader and save to $IMAGE_FILE .bl.sig"
4787$OPENSSL dgst -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 \
@@ -50,10 +90,11 @@ $OPENSSL dgst -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 \
5090echo " Update bootloader's rsa signature, aes hash and bct's aes hash"
5191echo " RsaPssSigBlFile = $IMAGE_FILE .bl.sig;" > $CONFIG_FILE
5292echo " RehashBl;" >> $CONFIG_FILE
53- $CBOOTIMAGE -s tegra210 -u $CONFIG_FILE $IMAGE_FILE $IMAGE_FILE .tmp
93+ $CBOOTIMAGE -s ${soc} -u $CONFIG_FILE $IMAGE_FILE $IMAGE_FILE .tmp
5494
5595echo " Extract the part of bct which needs to be rsa signed"
56- $DD bs=1 if=$IMAGE_FILE .tmp of=$IMAGE_FILE .bct.tosig count=8944 skip=1296
96+ $DD bs=1 if=$IMAGE_FILE .tmp of=$IMAGE_FILE .bct.tosig skip=${bct_signed_offset} \
97+ count=${bct_signed_length}
5798
5899echo " Calculate rsa signature for bct and save to $IMAGE_FILE .bct.sig"
59100$OPENSSL dgst -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 \
@@ -70,4 +111,13 @@ $XXD -r -p -l 256 $KEY_FILE.mod.tmp $KEY_FILE.mod.bin
70111echo " Update bct's rsa signature and modulus"
71112echo " RsaPssSigBctFile = $IMAGE_FILE .bct.sig;" > $CONFIG_FILE
72113echo " RsaKeyModulusFile = $KEY_FILE .mod.bin;" >> $CONFIG_FILE
73- $CBOOTIMAGE -s tegra210 -u $CONFIG_FILE $IMAGE_FILE .tmp $TARGET_IMAGE
114+ echo " "
115+ $CBOOTIMAGE -s ${soc} -u $CONFIG_FILE $IMAGE_FILE .tmp $TARGET_IMAGE
116+
117+ echo " "
118+ $DD bs=1 if=$TARGET_IMAGE of=${soc} .bct count=${bct_length}
119+ echo " "
120+ echo " Signed bct ${soc} .bct has been successfully generated!" ;
121+
122+ # echo "Get rid of all temporary files: *.sig, *.tosig, *.tmp, *.mod, *.mod.bin"
123+ $RM -f * .sig * .tosig * .tmp * .mod * .mod.bin
0 commit comments