1caa4789868ef23a8edce96cdc6421e6fa67edcd6Gaurav Shah#!/bin/bash
2caa4789868ef23a8edce96cdc6421e6fa67edcd6Gaurav Shah
3caa4789868ef23a8edce96cdc6421e6fa67edcd6Gaurav Shah# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
4caa4789868ef23a8edce96cdc6421e6fa67edcd6Gaurav Shah# Use of this source code is governed by a BSD-style license that can be
5caa4789868ef23a8edce96cdc6421e6fa67edcd6Gaurav Shah# found in the LICENSE file.
6caa4789868ef23a8edce96cdc6421e6fa67edcd6Gaurav Shah
7caa4789868ef23a8edce96cdc6421e6fa67edcd6Gaurav Shah# Standalone version of cros_resign_image.sh script from
8aa22a5dea505e23516063829fa43a34db3ae412fGaurav Shah# chromeos/src/scripts/bin/ for use on signing servers.
9caa4789868ef23a8edce96cdc6421e6fa67edcd6Gaurav Shah
10536eaaaee738b660652906848ba37474a1a4219aGaurav Shah# Both the cgpt tool and vbutil_kernel should be in the system path.
11536eaaaee738b660652906848ba37474a1a4219aGaurav Shah
120c4c9bac3c390445066f08010a753ce76ccb4a5eGaurav Shah# Load common constants and variables.
130c4c9bac3c390445066f08010a753ce76ccb4a5eGaurav Shah. "$(dirname "$0")/common.sh"
140c4c9bac3c390445066f08010a753ce76ccb4a5eGaurav Shah
15536eaaaee738b660652906848ba37474a1a4219aGaurav Shah# Abort on error
16536eaaaee738b660652906848ba37474a1a4219aGaurav Shahset -e
17caa4789868ef23a8edce96cdc6421e6fa67edcd6Gaurav Shah
18caa4789868ef23a8edce96cdc6421e6fa67edcd6Gaurav Shah# Check arguments
198ae7b0e41a1252f98e6662a298efb97624431c44Gaurav Shahif [ $# -lt 4 ] || [ $# -gt 5 ] ; then
208ae7b0e41a1252f98e6662a298efb97624431c44Gaurav Shah  echo "usage: $PROG src_bin dst_bin kernel_datakey kernel_keyblock [version]"
21caa4789868ef23a8edce96cdc6421e6fa67edcd6Gaurav Shah  exit 1
22caa4789868ef23a8edce96cdc6421e6fa67edcd6Gaurav Shahfi
23caa4789868ef23a8edce96cdc6421e6fa67edcd6Gaurav Shah
24caa4789868ef23a8edce96cdc6421e6fa67edcd6Gaurav Shah# Make sure the tools we need are available.
258ae7b0e41a1252f98e6662a298efb97624431c44Gaurav Shahfor prereqs in vbutil_kernel cgpt;
268ae7b0e41a1252f98e6662a298efb97624431c44Gaurav Shahdo
278ae7b0e41a1252f98e6662a298efb97624431c44Gaurav Shah  type -P "${prereqs}" &>/dev/null || \
288ae7b0e41a1252f98e6662a298efb97624431c44Gaurav Shah    { echo "${prereqs} tool not found."; exit 1; }
298ae7b0e41a1252f98e6662a298efb97624431c44Gaurav Shahdone
308ae7b0e41a1252f98e6662a298efb97624431c44Gaurav Shah
318ae7b0e41a1252f98e6662a298efb97624431c44Gaurav ShahSRC_BIN=$1
328ae7b0e41a1252f98e6662a298efb97624431c44Gaurav ShahDST_BIN=$2
338ae7b0e41a1252f98e6662a298efb97624431c44Gaurav ShahKERNEL_DATAKEY=$3
348ae7b0e41a1252f98e6662a298efb97624431c44Gaurav ShahKERNEL_KEYBLOCK=$4
358ae7b0e41a1252f98e6662a298efb97624431c44Gaurav ShahVERSION=$5
368ae7b0e41a1252f98e6662a298efb97624431c44Gaurav Shah
378ae7b0e41a1252f98e6662a298efb97624431c44Gaurav Shahif [ -z $VERSION ]; then
388ae7b0e41a1252f98e6662a298efb97624431c44Gaurav Shah  VERSION=1
398ae7b0e41a1252f98e6662a298efb97624431c44Gaurav Shahfi
408ae7b0e41a1252f98e6662a298efb97624431c44Gaurav Shahecho "Using kernel version: $VERSION"
418ae7b0e41a1252f98e6662a298efb97624431c44Gaurav Shah
420c4c9bac3c390445066f08010a753ce76ccb4a5eGaurav Shahtemp_kimage=$(make_temp_file)
438ae7b0e41a1252f98e6662a298efb97624431c44Gaurav Shahextract_image_partition ${SRC_BIN} 2 ${temp_kimage}
448ae7b0e41a1252f98e6662a298efb97624431c44Gaurav Shahupdated_kimage=$(make_temp_file)
458ae7b0e41a1252f98e6662a298efb97624431c44Gaurav Shah
468ae7b0e41a1252f98e6662a298efb97624431c44Gaurav Shahvbutil_kernel --repack "${updated_kimage}" \
478ae7b0e41a1252f98e6662a298efb97624431c44Gaurav Shah  --keyblock "${KERNEL_KEYBLOCK}" \
488ae7b0e41a1252f98e6662a298efb97624431c44Gaurav Shah  --signprivate "${KERNEL_DATAKEY}" \
498ae7b0e41a1252f98e6662a298efb97624431c44Gaurav Shah  --version "${VERSION}" \
50caa4789868ef23a8edce96cdc6421e6fa67edcd6Gaurav Shah  --oldblob "${temp_kimage}"
51caa4789868ef23a8edce96cdc6421e6fa67edcd6Gaurav Shah
52caa4789868ef23a8edce96cdc6421e6fa67edcd6Gaurav Shah# Create a copy of the input image and put in the new vblock
538ae7b0e41a1252f98e6662a298efb97624431c44Gaurav Shahcp "${SRC_BIN}" "${DST_BIN}"
548ae7b0e41a1252f98e6662a298efb97624431c44Gaurav Shahreplace_image_partition ${DST_BIN} 2 ${updated_kimage}
558ae7b0e41a1252f98e6662a298efb97624431c44Gaurav Shahecho "New signed image was output to ${DST_BIN}"
56caa4789868ef23a8edce96cdc6421e6fa67edcd6Gaurav Shah
57