1d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson#!/bin/bash -eu
2d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson#
3d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
4d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson# Use of this source code is governed by a BSD-style license that can be
5d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson# found in the LICENSE file.
6d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson#
7d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson# This generates the pre-change test data used to ensure that modifications to
8d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson# VbFirmwarePreambleHeader and VbKernelPreambleHeader will not break the
9d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson# signing tools for older releases. This was run *before* any modifications, so
10d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson# be sure to revert the repo back to the correct point if you need to run it
11d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson# again.
12d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson
13d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson
14d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson# Load common constants and variables for tests.
15d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson. "$(dirname "$0")/common.sh"
16d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson
17d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson# Load routines to generate keypairs
18d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson. "${ROOT_DIR}/scripts/keygeneration/common.sh"
19d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson
20d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson# all algs
21d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardsonalgs="0 1 2 3 4 5 6 7 8 9 10 11"
22d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson
23d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson# output directories
24d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill RichardsonPREAMBLE_DIR="${SCRIPT_DIR}/preamble_tests"
25d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill RichardsonDATADIR="${PREAMBLE_DIR}/data"
26d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill RichardsonV2DIR="${PREAMBLE_DIR}/preamble_v2x"
27d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson
28d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardsonfor d in "${PREAMBLE_DIR}" "${DATADIR}" "${V2DIR}"; do
29d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson  [ -d "$d" ] || mkdir -p "$d"
30d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardsondone
31d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson
32d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson
33d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson# generate a bunch of data keys
34d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardsonfor d in $algs; do
35d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson  make_pair "${DATADIR}/data_$d" "$d"
36d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardsondone
37d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson
38d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson# generate a bunch of root keys
39d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardsonfor r in $algs; do
40d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson  make_pair "${DATADIR}/root_$r" "$r"
41d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardsondone
42d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson
43d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson# generate keyblocks using all possible combinations
44d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardsonfor d in $algs; do
45d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson  for r in $algs; do
46d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson     make_keyblock "${DATADIR}/kb_${d}_${r}" 15 \
47d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson       "${DATADIR}/data_$d" "${DATADIR}/root_$r"
48d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson  done
49d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardsondone
50d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson
51d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson# make a dummy kernel key because we have to have one (crosbug.com/27142)
52d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardsonmake_pair "${DATADIR}/dummy_0" 0
53d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson
54d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson# and a few more dummy files just because (crosbug.com/23548)
55d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardsonecho "hi there" > "${DATADIR}/dummy_config.txt"
56d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardsondd if=/dev/urandom bs=32768 count=1 of="${DATADIR}/dummy_bootloader.bin"
57d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson
58d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson# make some fake data
59d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardsondd if=/dev/urandom of="${DATADIR}/FWDATA" bs=32768 count=1
60d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardsondd if=/dev/urandom of="${DATADIR}/KERNDATA" bs=32768 count=1
61d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson
62d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson
63d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson# Now sign the firmware and kernel data in all the possible ways using the
64d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson# pre-change tools.
65d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardsonfor d in $algs; do
66d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson  for r in $algs; do
67d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson      vbutil_firmware --vblock "${V2DIR}/fw_${d}_${r}.vblock" \
68d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson        --keyblock "${DATADIR}/kb_${d}_${r}.keyblock" \
69d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson        --signprivate "${DATADIR}/data_${d}.vbprivk" \
70d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson        --version 1 \
71d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson        --kernelkey "${DATADIR}/dummy_0.vbpubk" \
72d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson        --fv "${DATADIR}/FWDATA"
73d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson     vbutil_kernel --pack "${V2DIR}/kern_${d}_${r}.vblock" \
74d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson       --keyblock "${DATADIR}/kb_${d}_${r}.keyblock" \
75d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson       --signprivate "${DATADIR}/data_${d}.vbprivk" \
76d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson       --version 1 \
77d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson       --arch arm \
78d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson       --vmlinuz "${DATADIR}/KERNDATA" \
79d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson       --bootloader "${DATADIR}/dummy_bootloader.bin" \
80d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson       --config "${DATADIR}/dummy_config.txt"
81d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson  done
82d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardsondone
83d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson
84d355d9b6aff489fe3f04b9dd9090ccba7dde48faBill Richardson
85