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