| Index: bin/cros_resign_image.sh
|
| diff --git a/bin/cros_resign_image.sh b/bin/cros_resign_image.sh
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..d6709ef20e73059eec83a0bb17385bcea250ec01
|
| --- /dev/null
|
| +++ b/bin/cros_resign_image.sh
|
| @@ -0,0 +1,96 @@
|
| +#!/bin/bash
|
| +
|
| +# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +# Script to resign the kernel partition generated in the output of build_image
|
| +# with keys of our choosing.
|
| +
|
| +# Load common constants. This should be the first executable line.
|
| +# The path to common.sh should be relative to your script's location.
|
| +. "$(dirname "$0")/../common.sh"
|
| +
|
| +. "$(dirname "$0")/../chromeos-common.sh" # for partoffset and partsize
|
| +
|
| +locate_gpt
|
| +
|
| +DEFINE_string from "chromiumos_image.bin" \
|
| + "Input file name of Chrome OS image to re-sign."
|
| +DEFINE_string datakey "" \
|
| + "Private Kernel Data Key (.vbprivk) to use for re-signing."
|
| +DEFINE_string keyblock "" \
|
| + "Kernel Keyblock (.keyblock) to use for generating the vblock"
|
| +DEFINE_string to "" \
|
| + "Output file name for the re-signed image."
|
| +DEFINE_string vsubkey "" \
|
| + "(Optional) Public Kernel SubKey (.vbpubk) to use for testing verification."
|
| +DEFINE_string vbutil_dir "" \
|
| + "(Optional) Path to directory containing vboot utility binaries"
|
| +DEFINE_integer bootflags 0 \
|
| + "(Optional) Boot flags to use for verifying the output image"
|
| +
|
| +# Parse command line
|
| +FLAGS "$@" || exit 1
|
| +eval set -- "${FLAGS_ARGV}"
|
| +
|
| +# Abort on error
|
| +set -e
|
| +
|
| +if [ -z $FLAGS_from ] || [ ! -f $FLAGS_from ] ; then
|
| + echo "Error: invalid flag --from"
|
| + exit 1
|
| +fi
|
| +
|
| +if [ -z $FLAGS_datakey ] || [ ! -f $FLAGS_datakey ] ; then
|
| + echo "Error: invalid kernel data key"
|
| + exit 1
|
| +fi
|
| +
|
| +if [ -z $FLAGS_keyblock ] || [ ! -f $FLAGS_keyblock ] ; then
|
| + echo "Error: invalid kernel keyblock"
|
| + exit 1
|
| +fi
|
| +
|
| +if [ -z $FLAGS_to ]; then
|
| + echo "Error: invalid flag --to"
|
| + exit 1
|
| +fi
|
| +
|
| +sector_size=512 # sector size in bytes
|
| +num_sectors_vb=128 # number of sectors in kernel verification blob
|
| +koffset="$(partoffset ${FLAGS_from} 2)"
|
| +ksize="$(partsize ${FLAGS_from} 2)"
|
| +
|
| +echo "Re-signing image ${FLAGS_from} and outputting ${FLAGS_to}"
|
| +temp_kimage=$(mktemp)
|
| +trap "rm -f ${temp_kimage}" EXIT
|
| +temp_out_vb=$(mktemp)
|
| +trap "rm -f ${temp_out_vb}" EXIT
|
| +
|
| +# Grab the kernel image in preparation for resigning
|
| +dd if="${FLAGS_from}" of="${temp_kimage}" skip=$koffset bs=$sector_size \
|
| + count=$ksize
|
| +${FLAGS_vbutil_dir}vbutil_kernel \
|
| + --repack "${temp_out_vb}" \
|
| + --vblockonly \
|
| + --keyblock "${FLAGS_keyblock}" \
|
| + --signprivate "${FLAGS_datakey}" \
|
| + --oldblob "${temp_kimage}"
|
| +
|
| +# Create a copy of the input image and put in the new vblock
|
| +cp "${FLAGS_from}" "${FLAGS_to}"
|
| +dd if="${temp_out_vb}" of="${FLAGS_to}" seek=$koffset bs=$sector_size \
|
| + count=$num_sectors_vb conv=notrunc
|
| +
|
| +# Only test verification if the public subkey was passed in.
|
| +if [ ! -z $FLAGS_vsubkey ]; then
|
| + ${FLAGS_vbutil_dir}load_kernel_test "${FLAGS_to}" "${FLAGS_vsubkey}" \
|
| + ${FLAGS_bootflags}
|
| +fi
|
| +
|
| +echo "New signed image was output to ${FLAGS_to}"
|
| +
|
| +# Clean up temporary files
|
| +rm -f ${temp_kimage}
|
| +rm -f ${temp_out_vb}
|
|
|