#!/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 key blocks..." # Firmware key block - 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 key block - 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}