Skip to content

Commit ea1e03d

Browse files
jimmzhangnvswarren
authored andcommitted
sign.sh: Add more features
1. Use parameter <soc> to specify boot image type. ie, tegra124, tegra210. Previouly sign.sh can only sign for tegra210 boot image. 2. Automatically generate signed bct, ie, tegra124.bct, tegra210.bct. A signed bct is needed when flashing target. Command syntax: $ ./sign.sh <soc> <bootimage> <rsa_key> Example: $ ./sign.sh tegra124 t124.img rsa_priv.pem Signed-off-by: Jimmy Zhang <jimmzhang@nvidia.com> Signed-off-by: Stephen Warren <swarren@nvidia.com>
1 parent efe19b2 commit ea1e03d

1 file changed

Lines changed: 59 additions & 9 deletions

File tree

samples/sign.sh

Lines changed: 59 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
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,
@@ -17,9 +17,49 @@
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+
2033
set -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]};
2363
TARGET_IMAGE=$IMAGE_FILE
2464
CONFIG_FILE=config.tmp
2565

@@ -33,15 +73,15 @@ MV=mv
3373
XXD=xxd
3474
CUT=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

3978
echo "Get bl length "
4079
BL_LENGTH=`$BCT_DUMP $IMAGE_FILE | grep "Bootloader\[0\].Length"\
4180
| awk -F ' ' '{print $4}' | awk -F ';' '{print $1}'`
4281

4382
echo "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

4686
echo "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 \
5090
echo "Update bootloader's rsa signature, aes hash and bct's aes hash"
5191
echo "RsaPssSigBlFile = $IMAGE_FILE.bl.sig;" > $CONFIG_FILE
5292
echo "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

5595
echo "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

5899
echo "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
70111
echo "Update bct's rsa signature and modulus"
71112
echo "RsaPssSigBctFile = $IMAGE_FILE.bct.sig;" > $CONFIG_FILE
72113
echo "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

Comments
 (0)