Home | History | Annotate | Download | only in tests
      1 #!/bin/bash
      2 
      3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
      4 # Use of this source code is governed by a BSD-style license that can be
      5 # found in the LICENSE file.
      6 
      7 # Generate test cases for use for the RSA verify benchmark.
      8 
      9 set -e
     10 
     11 # Load common constants and variables.
     12 . "$(dirname "$0")/common.sh"
     13 
     14 # Use a different directory for fuzzing test cases.
     15 TESTKEY_DIR=${TESTKEY_DIR:-$(realpath  ${SCRIPT_DIR}/../tests/testkeys)}
     16 TESTCASE_DIR=${BUILD_DIR}/fuzz_testcases
     17 TEST_IMAGE_FILE=${TESTCASE_DIR}/testimage
     18 TEST_IMAGE_SIZE=500000
     19 TEST_BOOTLOADER_FILE=${TESTCASE_DIR}/testbootloader
     20 TEST_BOOTLOADER_SIZE=50000
     21 TEST_CONFIG_FILE=${TESTCASE_DIR}/testconfig
     22 # Config size must < 4096
     23 TEST_CONFIG_SIZE=3000
     24 
     25 function generate_fuzzing_images {
     26   echo "Generating key blocks..."
     27   # Firmware key block - RSA8192/SHA512 root key, RSA4096/SHA512 firmware
     28   # signing key.
     29   ${FUTILITY} vbutil_keyblock \
     30     --pack ${TESTCASE_DIR}/firmware.keyblock \
     31     --datapubkey ${TESTKEY_DIR}/key_rsa4096.sha512.vbpubk \
     32     --signprivate ${TESTKEY_DIR}/key_rsa8192.sha1.vbprivk
     33 
     34   # Kernel key block - RSA4096/SHA512 kernel signing subkey, RSA4096/SHA512
     35   # kernel signing key.
     36   ${FUTILITY} vbutil_keyblock \
     37     --pack ${TESTCASE_DIR}/kernel.keyblock \
     38     --datapubkey ${TESTKEY_DIR}/key_rsa4096.sha512.vbpubk \
     39     --signprivate ${TESTKEY_DIR}/key_rsa4096.sha1.vbprivk \
     40     --flags 15
     41 
     42   echo "Generating signed firmware test image..."
     43   ${FUTILITY} vbutil_firmware \
     44     --vblock ${TESTCASE_DIR}/firmware.vblock \
     45     --keyblock ${TESTCASE_DIR}/firmware.keyblock\
     46     --signprivate ${TESTKEY_DIR}/key_rsa4096.sha256.vbprivk \
     47     --version 1 \
     48     --fv  $1 \
     49     --kernelkey ${TESTKEY_DIR}/key_rsa4096.sha512.vbpubk
     50   # TODO(gauravsh): ALso test with (optional) flags.
     51   cp ${TESTKEY_DIR}/key_rsa8192.sha512.vbpubk ${TESTCASE_DIR}/root_key.vbpubk
     52 
     53   echo "Generating signed kernel test image..."
     54   ${FUTILITY} vbutil_kernel \
     55     --pack ${TESTCASE_DIR}/kernel.vblock.image \
     56     --keyblock ${TESTCASE_DIR}/kernel.keyblock \
     57     --signprivate ${TESTKEY_DIR}/key_rsa4096.sha256.vbprivk \
     58     --version 1 \
     59     --vmlinuz ${TEST_IMAGE_FILE} \
     60     --bootloader ${TEST_BOOTLOADER_FILE} \
     61     --config ${TEST_CONFIG_FILE}
     62   # TODO(gauravsh): Also test with (optional) padding.
     63   cp ${TESTKEY_DIR}/key_rsa4096.sha512.vbpubk \
     64     ${TESTCASE_DIR}/firmware_key.vbpubk
     65 }
     66 
     67 function pre_work {
     68   # Generate a file to serve as random bytes for firmware/kernel contents.
     69   # NOTE: The kernel and config file can't really be random, but the bootloader
     70   # can. That's probably close enough.
     71   echo "Generating test image file..."
     72   dd if=/dev/urandom of=${TEST_IMAGE_FILE} bs=${TEST_IMAGE_SIZE} count=1
     73   echo "Generating test bootloader file..."
     74   # TODO(gauravsh): Use a valid bootloader here?
     75   dd if=/dev/urandom of=${TEST_BOOTLOADER_FILE} bs=${TEST_BOOTLOADER_SIZE} \
     76     count=1
     77   echo "Generating test config file..."
     78   # TODO(gauravsh): Use a valid config file here?
     79   dd if=/dev/urandom of=${TEST_CONFIG_FILE} bs=${TEST_CONFIG_SIZE} count=1
     80 }
     81 
     82 mkdir -p ${TESTCASE_DIR}
     83 pre_work
     84 check_test_keys
     85 generate_fuzzing_images ${TEST_IMAGE_FILE}
     86 
     87