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