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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « scripts/keygeneration/create_new_keys.sh ('k') | scripts/keygeneration/key.versions » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #!/bin/bash
2 # Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 # Script to increment kernel subkey and datakey for firmware updates.
7 # Used when revving versions for a firmware update.
8
9 # Load common constants and variables.
10 . "$(dirname "$0")/common.sh"
11
12 # Abort on errors.
13 set -e
14
15 # File to read current versions from.
16 VERSION_FILE="key.versions"
17
18 # ARGS: <version_type>
19 get_version() {
20 local version_type=$1
21 version=$(sed -n "s#^${version_type}=\(.*\)#\1#pg" ${VERSION_FILE})
22 echo $version
23 }
24
25 # Make backups of existing keys and keyblocks that will be revved.
26 # Backup format:
27 # for keys: <key_name>.v<version>
28 # for keyblocks: <keyblock_name>.v<datakey version>.v<subkey version>
29 # Args: SUBKEY_VERSION DATAKEY_VERSION
30 backup_existing_kernel_keys() {
31 subkey_version=$1
32 datakey_version=$2
33 # --no-clobber to prevent accidentally overwriting existing
34 # backups.
35 mv --no-clobber kernel_subkey.vbprivk{,".v${subkey_version}"}
36 mv --no-clobber kernel_subkey.vbpubk{,".v${subkey_version}"}
37 mv --no-clobber kernel_data_key.vbprivk{,".v${datakey_version}"}
38 mv --no-clobber kernel_data_key.vbpubk{,".v${datakey_version}"}
39 mv --no-clobber kernel.keyblock{,".v${datakey_version}.v${subkey_version}"}
40 }
41
42 # Write new key version file with the updated key versions.
43 # Args: FIRMWARE_KEY_VERSION FIRMWARE_VERSION KERNEL_KEY_VERSION KERNEL_VERSION
44 write_updated_version_file() {
45 local firmware_key_version=$1
46 local firmware_version=$2
47 local kernel_key_version=$3
48 local kernel_version=$4
49
50 cat > ${VERSION_FILE} <<EOF
51 firmware_key_version=${firmware_key_version}
52 firmware_version=${firmware_version}
53 kernel_key_version=${kernel_key_version}
54 kernel_version=${kernel_version}
55 EOF
56 }
57
58
59 main() {
60 current_fkey_version=$(get_version "firmware_key_version")
61 # Firmware version is the kernel subkey version.
62 current_ksubkey_version=$(get_version "firmware_version")
63 # Kernel data key version is the kernel key version.
64 current_kdatakey_version=$(get_version "kernel_key_version")
65 current_kernel_version=$(get_version "kernel_version")
66
67 cat <<EOF
68 Current Firmware key version: ${current_fkey_version}
69 Current Firmware version: ${current_ksubkey_version}
70 Current Kernel key version: ${current_kdatakey_version}
71 Current Kernel version: ${current_kernel_version}
72 EOF
73
74 backup_existing_kernel_keys $current_ksubkey_version $current_kdatakey_version
75
76 new_ksubkey_version=$(( current_ksubkey_version + 1 ))
77 new_kdatakey_version=$(( current_kdatakey_version + 1 ))
78
79 if [ $new_kdatakey_version -gt 65535 ] || [ $new_kdatakey_version -gt 65535 ];
80 then
81 echo "Version overflow!"
82 exit 1
83 fi
84
85 cat <<EOF
86 Generating new kernel subkey, data keys and new kernel keyblock.
87
88 New Firmware version (due to kernel subkey change): ${new_ksubkey_version}.
89 New Kernel key version (due to kernel datakey change): ${new_kdatakey_version}.
90 EOF
91 make_pair kernel_subkey $KERNEL_SUBKEY_ALGOID $new_ksubkey_version
92 make_pair kernel_data_key $KERNEL_DATAKEY_ALGOID $new_kdatakey_version
93 make_keyblock kernel $KERNEL_KEYBLOCK_MODE kernel_data_key kernel_subkey
94
95 write_updated_version_file $current_fkey_version $new_ksubkey_version \
96 $new_kdatakey_version $current_kernel_version
97 }
98
99 main $@
OLDNEW
« 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