| #!/bin/bash -u |
| # |
| # Copyright (c) 2012 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. |
| # |
| # This tests that vblocks using pre-3.0 versions of vb2_fw_preamble |
| # and vb2_kernel_preamble will still verify (or not) correctly. We |
| # need to keep the old versions around to make sure that we can still |
| # sign images in the ways that existing devices can validate. |
| |
| # Load common constants and variables for tests. |
| . "$(dirname "$0")/common.sh" |
| |
| if [ "${1:---some}" == "--all" ] ; then |
| # all algs |
| algs="0 1 2 3 4 5 6 7 8 9 10 11" |
| else |
| # just the algs we use |
| algs="4 7 11" |
| fi |
| |
| # output directories |
| PREAMBLE_DIR="${SCRIPT_DIR}/preamble_tests" |
| DATADIR="${PREAMBLE_DIR}/data" |
| V2DIR="${PREAMBLE_DIR}/preamble_v2x" |
| |
| tests=0 |
| errs=0 |
| |
| # Check the firmware results |
| for d in $algs; do |
| for r in $algs; do |
| for rr in $algs; do |
| if [ "$r" = "$rr" ]; then |
| what="verify" |
| cmp="-ne" |
| else |
| what="reject" |
| cmp="-eq" |
| fi |
| : $(( tests++ )) |
| echo -n "${what} fw_${d}_${r}.vblock with root_${rr}.vbpubk ... " |
| "${FUTILITY}" vbutil_firmware \ |
| --verify "${V2DIR}/fw_${d}_${r}.vblock" \ |
| --signpubkey "${DATADIR}/root_${rr}.vbpubk" \ |
| --fv "${DATADIR}/FWDATA" >/dev/null 2>&1 |
| if [ "$?" "$cmp" 0 ]; then |
| echo -e "${COL_RED}FAILED${COL_STOP}" |
| : $(( errs++ )) |
| else |
| echo -e "${COL_GREEN}PASSED${COL_STOP}" |
| fi |
| done |
| done |
| done |
| |
| |
| # Check the kernel results |
| for d in $algs; do |
| for r in $algs; do |
| for rr in $algs; do |
| if [ "$r" = "$rr" ]; then |
| what="verify" |
| cmp="-ne" |
| else |
| what="reject" |
| cmp="-eq" |
| fi |
| : $(( tests++ )) |
| echo -n "${what} kern_${d}_${r}.vblock with root_${rr}.vbpubk ... " |
| "${FUTILITY}" vbutil_kernel \ |
| --verify "${V2DIR}/kern_${d}_${r}.vblock" \ |
| --signpubkey "${DATADIR}/root_${rr}.vbpubk" >/dev/null 2>&1 |
| if [ "$?" "$cmp" 0 ]; then |
| echo -e "${COL_RED}FAILED${COL_STOP}" |
| : $(( errs++ )) |
| else |
| echo -e "${COL_GREEN}PASSED${COL_STOP}" |
| fi |
| done |
| done |
| done |
| |
| |
| # Check the kernel results |
| for d in $algs; do |
| for r in $algs; do |
| : $(( tests++ )) |
| echo -n "verify kern_${d}_${r}.vblock with hash only ... " |
| "${FUTILITY}" vbutil_kernel \ |
| --verify "${V2DIR}/kern_${d}_${r}.vblock" >/dev/null 2>&1 |
| if [ "$?" -ne 0 ]; then |
| echo -e "${COL_RED}FAILED${COL_STOP}" |
| : $(( errs++ )) |
| else |
| echo -e "${COL_GREEN}PASSED${COL_STOP}" |
| fi |
| done |
| done |
| |
| |
| # Summary |
| ME=$(basename "$0") |
| if [ "$errs" -ne 0 ]; then |
| echo -e "${COL_RED}${ME}: ${errs}/${tests} tests failed${COL_STOP}" |
| exit 1 |
| fi |
| happy "${ME}: All ${tests} tests passed" |
| exit 0 |