#!/bin/bash # Copyright (c) 2011 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 increment kernel subkey and datakey for firmware updates. # Used when revving versions for a firmware update. # Load common constants and variables. . "${0%/*}"/common.sh # Abort on errors. set -e if [ $# -ne 1 ]; then cat < Increments the kernel subkey, data key and firmware version in the specified keyset. EOF exit 1 fi KEY_DIR=$1 # File to read current versions from. VERSION_FILE="key.versions" # ARGS: get_version() { local version_type=$1 version=$(sed -n "s#^${version_type}=\(.*\)#\1#pg" ${VERSION_FILE}) echo $version } # Make backups of existing keys and keyblocks that will be revved. # Backup format: # for keys: .v.vb{pub|priv}k # for keyblocks: .v.v.keyblock # Args: SUBKEY_VERSION DATAKEY_VERSION backup_existing_kernel_keys() { subkey_version=$1 datakey_version=$2 # --no-clobber to prevent accidentally overwriting existing # backups. mv --no-clobber kernel_subkey.{vbprivk,"v${subkey_version}.vbprivk"} mv --no-clobber kernel_subkey.{vbpubk,"v${subkey_version}.vbpubk"} mv --no-clobber kernel_data_key.{vbprivk,"v${datakey_version}.vbprivk"} mv --no-clobber kernel_data_key.{vbpubk,"v${datakey_version}.vbpubk"} mv --no-clobber kernel.{keyblock,"v${datakey_version}.v${subkey_version}.keyblock"} } # Write new key version file with the updated key versions. # Args: FIRMWARE_KEY_VERSION FIRMWARE_VERSION KERNEL_KEY_VERSION KERNEL_VERSION write_updated_version_file() { local firmware_key_version=$1 local firmware_version=$2 local kernel_key_version=$3 local kernel_version=$4 cat > ${VERSION_FILE} <