blob: 3e4ca99299352ed14af724e318c9aa05bc2618e1 [file] [log] [blame]
#!/bin/bash
# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Generate test cases for use for the RSA verify benchmark.
set -e
# Load common constants and variables.
. "$(dirname "$0")/common.sh"
# Use a different directory for fuzzing test cases.
TESTKEY_DIR=${TESTKEY_DIR:-$(realpath "${SCRIPT_DIR}"/../tests/testkeys)}
TESTCASE_DIR=${BUILD_DIR}/fuzz_testcases
TEST_IMAGE_FILE=${TESTCASE_DIR}/testimage
TEST_IMAGE_SIZE=500000
TEST_BOOTLOADER_FILE=${TESTCASE_DIR}/testbootloader
TEST_BOOTLOADER_SIZE=50000
TEST_CONFIG_FILE=${TESTCASE_DIR}/testconfig
# Config size must < 4096
TEST_CONFIG_SIZE=3000
function generate_fuzzing_images {
echo "Generating keyblocks..."
# Firmware keyblock - RSA8192/SHA512 root key, RSA4096/SHA512 firmware
# signing key.
"${FUTILITY}" vbutil_keyblock \
--pack "${TESTCASE_DIR}/firmware.keyblock" \
--datapubkey "${TESTKEY_DIR}/key_rsa4096.sha512.vbpubk" \
--signprivate "${TESTKEY_DIR}/key_rsa8192.sha1.vbprivk"
# Kernel keyblock - RSA4096/SHA512 kernel signing subkey, RSA4096/SHA512
# kernel signing key.
"${FUTILITY}" vbutil_keyblock \
--pack "${TESTCASE_DIR}/kernel.keyblock" \
--datapubkey "${TESTKEY_DIR}/key_rsa4096.sha512.vbpubk" \
--signprivate "${TESTKEY_DIR}/key_rsa4096.sha1.vbprivk" \
--flags 15
echo "Generating signed firmware test image..."
"${FUTILITY}" vbutil_firmware \
--vblock "${TESTCASE_DIR}/firmware.vblock" \
--keyblock "${TESTCASE_DIR}/firmware.keyblock" \
--signprivate "${TESTKEY_DIR}/key_rsa4096.sha256.vbprivk" \
--version 1 \
--fv "$1" \
--kernelkey "${TESTKEY_DIR}/key_rsa4096.sha512.vbpubk"
# TODO(gauravsh): ALso test with (optional) flags.
cp "${TESTKEY_DIR}/key_rsa8192.sha512.vbpubk" \
"${TESTCASE_DIR}/root_key.vbpubk"
echo "Generating signed kernel test image..."
"${FUTILITY}" vbutil_kernel \
--pack "${TESTCASE_DIR}/kernel.vblock.image" \
--keyblock "${TESTCASE_DIR}/kernel.keyblock" \
--signprivate "${TESTKEY_DIR}/key_rsa4096.sha256.vbprivk" \
--version 1 \
--vmlinuz "${TEST_IMAGE_FILE}" \
--bootloader "${TEST_BOOTLOADER_FILE}" \
--config "${TEST_CONFIG_FILE}"
# TODO(gauravsh): Also test with (optional) padding.
cp "${TESTKEY_DIR}/key_rsa4096.sha512.vbpubk" \
"${TESTCASE_DIR}/firmware_key.vbpubk"
}
function pre_work {
# Generate a file to serve as random bytes for firmware/kernel contents.
# NOTE: The kernel and config file can't really be random, but the bootloader
# can. That's probably close enough.
echo "Generating test image file..."
dd if=/dev/urandom of="${TEST_IMAGE_FILE}" bs="${TEST_IMAGE_SIZE}" count=1
echo "Generating test bootloader file..."
# TODO(gauravsh): Use a valid bootloader here?
dd if=/dev/urandom of="${TEST_BOOTLOADER_FILE}" bs="${TEST_BOOTLOADER_SIZE}" \
count=1
echo "Generating test config file..."
# TODO(gauravsh): Use a valid config file here?
dd if=/dev/urandom of="${TEST_CONFIG_FILE}" bs="${TEST_CONFIG_SIZE}" count=1
}
mkdir -p "${TESTCASE_DIR}"
pre_work
check_test_keys
generate_fuzzing_images "${TEST_IMAGE_FILE}"