gen_fuzz_test_cases.sh 3.1 KB

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