You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.0 KiB
77 lines
2.0 KiB
#!/bin/bash -eux |
|
# Copyright (c) 2014 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. |
|
|
|
me=${0##*/} |
|
TMP="$me.tmp" |
|
|
|
# Work in scratch directory |
|
cd "$OUTDIR" |
|
|
|
DEVKEYS=${SRCDIR}/tests/devkeys |
|
TESTKEYS=${SRCDIR}/tests/testkeys |
|
|
|
echo 'Creating test kernel' |
|
|
|
# Dummy kernel data |
|
echo "hi there" > ${TMP}.config.txt |
|
dd if=/dev/urandom bs=16384 count=1 of=${TMP}.bootloader.bin |
|
dd if=/dev/urandom bs=32768 count=1 of=${TMP}.kernel.bin |
|
|
|
# Pack kernel data key using original vboot utilities. |
|
${FUTILITY} vbutil_key --pack ${TMP}.datakey.test \ |
|
--key ${TESTKEYS}/key_rsa2048.keyb --algorithm 4 |
|
|
|
# Keyblock with kernel data key is signed by kernel subkey |
|
# Flags=5 means dev=0 rec=0 |
|
${FUTILITY} vbutil_keyblock --pack ${TMP}.keyblock.test \ |
|
--datapubkey ${TMP}.datakey.test \ |
|
--flags 5 \ |
|
--signprivate ${DEVKEYS}/kernel_subkey.vbprivk |
|
|
|
# Kernel preamble is signed with the kernel data key |
|
${FUTILITY} vbutil_kernel \ |
|
--pack ${TMP}.kernel.test \ |
|
--keyblock ${TMP}.keyblock.test \ |
|
--signprivate ${TESTKEYS}/key_rsa2048.sha256.vbprivk \ |
|
--version 1 \ |
|
--arch arm \ |
|
--vmlinuz ${TMP}.kernel.bin \ |
|
--bootloader ${TMP}.bootloader.bin \ |
|
--config ${TMP}.config.txt |
|
|
|
echo 'Verifying test kernel' |
|
|
|
# Verify the kernel |
|
${FUTILITY} show ${TMP}.kernel.test \ |
|
--publickey ${DEVKEYS}/kernel_subkey.vbpubk \ |
|
| egrep 'Signature.*valid' |
|
|
|
echo 'Test kernel blob looks good' |
|
|
|
# Mess up the padding, make sure it fails. |
|
rc=0 |
|
${FUTILITY} show ${TMP}.kernel.test \ |
|
--pad 0x100 \ |
|
--publickey ${DEVKEYS}/kernel_subkey.vbpubk \ |
|
|| rc=$? |
|
[ $rc -ne 0 ] |
|
[ $rc -lt 128 ] |
|
|
|
echo 'Invalid args are invalid' |
|
|
|
# Look waaaaaay off the end of the file, make sure it fails. |
|
rc=0 |
|
${FUTILITY} show ${TMP}.kernel.test \ |
|
--pad 0x100000 \ |
|
--publickey ${DEVKEYS}/kernel_subkey.vbpubk \ |
|
|| rc=$? |
|
[ $rc -ne 0 ] |
|
[ $rc -lt 128 ] |
|
|
|
echo 'Really invalid args are still invalid' |
|
|
|
# cleanup |
|
rm -rf ${TMP}* |
|
exit 0
|
|
|