Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(480)

Unified Diff: scripts/keygeneration/increment_kernel_subkey_and_key.sh

Issue 6824059: Add a script to increment kernel subkey and data key. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/vboot_reference.git@master
Patch Set: add overflow check Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « scripts/keygeneration/create_new_keys.sh ('k') | scripts/keygeneration/key.versions » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: scripts/keygeneration/increment_kernel_subkey_and_key.sh
diff --git a/scripts/keygeneration/increment_kernel_subkey_and_key.sh b/scripts/keygeneration/increment_kernel_subkey_and_key.sh
new file mode 100755
index 0000000000000000000000000000000000000000..36d30c8cb32905516095e1f757610f450a049227
--- /dev/null
+++ b/scripts/keygeneration/increment_kernel_subkey_and_key.sh
@@ -0,0 +1,99 @@
+#!/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.
+. "$(dirname "$0")/common.sh"
+
+# Abort on errors.
+set -e
+
+# File to read current versions from.
+VERSION_FILE="key.versions"
+
+# ARGS: <version_type>
+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: <key_name>.v<version>
+# for keyblocks: <keyblock_name>.v<datakey version>.v<subkey version>
+# 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}"}
+ mv --no-clobber kernel_subkey.vbpubk{,".v${subkey_version}"}
+ mv --no-clobber kernel_data_key.vbprivk{,".v${datakey_version}"}
+ mv --no-clobber kernel_data_key.vbpubk{,".v${datakey_version}"}
+ mv --no-clobber kernel.keyblock{,".v${datakey_version}.v${subkey_version}"}
+}
+
+# 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} <<EOF
+firmware_key_version=${firmware_key_version}
+firmware_version=${firmware_version}
+kernel_key_version=${kernel_key_version}
+kernel_version=${kernel_version}
+EOF
+}
+
+
+main() {
+ current_fkey_version=$(get_version "firmware_key_version")
+ # Firmware version is the kernel subkey version.
+ current_ksubkey_version=$(get_version "firmware_version")
+ # Kernel data key version is the kernel key version.
+ current_kdatakey_version=$(get_version "kernel_key_version")
+ current_kernel_version=$(get_version "kernel_version")
+
+ cat <<EOF
+Current Firmware key version: ${current_fkey_version}
+Current Firmware version: ${current_ksubkey_version}
+Current Kernel key version: ${current_kdatakey_version}
+Current Kernel version: ${current_kernel_version}
+EOF
+
+ backup_existing_kernel_keys $current_ksubkey_version $current_kdatakey_version
+
+ new_ksubkey_version=$(( current_ksubkey_version + 1 ))
+ new_kdatakey_version=$(( current_kdatakey_version + 1 ))
+
+ if [ $new_kdatakey_version -gt 65535 ] || [ $new_kdatakey_version -gt 65535 ];
+ then
+ echo "Version overflow!"
+ exit 1
+ fi
+
+ cat <<EOF
+Generating new kernel subkey, data keys and new kernel keyblock.
+
+New Firmware version (due to kernel subkey change): ${new_ksubkey_version}.
+New Kernel key version (due to kernel datakey change): ${new_kdatakey_version}.
+EOF
+ make_pair kernel_subkey $KERNEL_SUBKEY_ALGOID $new_ksubkey_version
+ make_pair kernel_data_key $KERNEL_DATAKEY_ALGOID $new_kdatakey_version
+ make_keyblock kernel $KERNEL_KEYBLOCK_MODE kernel_data_key kernel_subkey
+
+ write_updated_version_file $current_fkey_version $new_ksubkey_version \
+ $new_kdatakey_version $current_kernel_version
+}
+
+main $@
« no previous file with comments | « scripts/keygeneration/create_new_keys.sh ('k') | scripts/keygeneration/key.versions » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698