1#!/bin/bash 2 3# Copyright 2014 The ChromiumOS Authors 4# Use of this source code is governed by a BSD-style license that can be 5# found in the LICENSE file. 6# 7# End-to-end test for vboot2 kernel verification 8 9# Load common constants and variables. 10. "$(dirname "$0")/common.sh" 11 12set -e 13 14CGPT=${BIN_DIR}/cgpt 15 16echo 'Creating test kernel' 17 18# Run tests in a dedicated directory for easy cleanup or debugging. 19DIR="${TEST_DIR}/load_kernel_test_dir" 20[ -d "$DIR" ] || mkdir -p "$DIR" 21echo "Testing kernel verification in $DIR" 22cd "$DIR" 23 24# Dummy kernel data 25echo "hi there" > "dummy_config.txt" 26dd if=/dev/urandom bs=16384 count=1 of="dummy_bootloader.bin" 27dd if=/dev/urandom bs=32768 count=1 of="dummy_kernel.bin" 28 29# Pack kernel data key using original vboot utilities. 30"${FUTILITY}" vbutil_key --pack datakey.test \ 31 --key "${TESTKEY_DIR}/key_rsa2048.keyb" --algorithm 4 32 33# Keyblock with kernel data key is signed by kernel subkey 34# Flags=21 means dev=0 rec=0 minios=0 35"${FUTILITY}" vbutil_keyblock --pack keyblock.test \ 36 --datapubkey datakey.test \ 37 --flags 21 \ 38 --signprivate "${SCRIPT_DIR}/devkeys/kernel_subkey.vbprivk" 39 40# Kernel preamble is signed with the kernel data key 41"${FUTILITY}" vbutil_kernel \ 42 --pack "kernel.test" \ 43 --keyblock "keyblock.test" \ 44 --signprivate "${TESTKEY_DIR}/key_rsa2048.sha256.vbprivk" \ 45 --version 1 \ 46 --arch arm \ 47 --vmlinuz "dummy_kernel.bin" \ 48 --config "dummy_config.txt" 49 50echo 'Verifying test kernel' 51 52# Verify the kernel 53"${FUTILITY}" vbutil_kernel \ 54 --verify "kernel.test" \ 55 --signpubkey "${SCRIPT_DIR}/devkeys/kernel_subkey.vbpubk" 56 57happy 'Kernel verification succeeded' 58 59# Now create a dummy disk image 60echo 'Creating test disk image' 61dd if=/dev/zero of=disk.test bs=1024 count=1024 62${CGPT} create disk.test 63${CGPT} add -i 1 -S 1 -P 1 -b 64 -s 960 -t kernel -l kernelA disk.test 64${CGPT} show disk.test 65 66# And insert the kernel into it 67dd if=kernel.test of=disk.test bs=512 seek=64 conv=notrunc 68 69# And verify it using futility 70echo 'Verifying test disk image' 71"${BUILD_RUN}/tests/verify_kernel" disk.test \ 72 "${SCRIPT_DIR}/devkeys/kernel_subkey.vbpubk" 73 74happy 'Image verification succeeded' 75