#!/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}"