Home | History | Annotate | Download | only in tests
      1 #!/bin/bash -u
      2 #
      3 # Copyright (c) 2012 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 # This tests that vblocks using pre-3.0 versions of VbFirmwarePreambleHeader
      8 # and VbKernelPreambleHeader will still verify (or not) correctly. We need to
      9 # keep the old versions around to make sure that we can still sign images in
     10 # the ways that existing devices can validate.
     11 
     12 # Load common constants and variables for tests.
     13 . "$(dirname "$0")/common.sh"
     14 
     15 if [ "${1:---some}" == "--all" ] ; then
     16     # all algs
     17     algs="0 1 2 3 4 5 6 7 8 9 10 11"
     18 else
     19     # just the algs we use
     20     algs="4 7 11"
     21 fi
     22 
     23 # output directories
     24 PREAMBLE_DIR="${SCRIPT_DIR}/preamble_tests"
     25 DATADIR="${PREAMBLE_DIR}/data"
     26 V2DIR="${PREAMBLE_DIR}/preamble_v2x"
     27 
     28 tests=0
     29 errs=0
     30 
     31 # Check the firmware results
     32 for d in $algs; do
     33   for r in $algs; do
     34     for rr in $algs; do
     35       if [ "$r" = "$rr" ]; then
     36         what="verify"
     37         cmp="-ne"
     38       else
     39         what="reject"
     40         cmp="-eq"
     41       fi
     42       : $(( tests++ ))
     43       echo -n "${what} fw_${d}_${r}.vblock with root_${rr}.vbpubk ... "
     44       "${FUTILITY}" vbutil_firmware \
     45         --verify "${V2DIR}/fw_${d}_${r}.vblock" \
     46         --signpubkey "${DATADIR}/root_${rr}.vbpubk" \
     47         --fv "${DATADIR}/FWDATA" >/dev/null 2>&1
     48       if [ "$?" "$cmp" 0 ]; then
     49         echo -e "${COL_RED}FAILED${COL_STOP}"
     50         : $(( errs++ ))
     51       else
     52         echo -e "${COL_GREEN}PASSED${COL_STOP}"
     53       fi
     54     done
     55   done
     56 done
     57 
     58 
     59 # Check the kernel results
     60 for d in $algs; do
     61   for r in $algs; do
     62     for rr in $algs; do
     63       if [ "$r" = "$rr" ]; then
     64         what="verify"
     65         cmp="-ne"
     66       else
     67         what="reject"
     68         cmp="-eq"
     69       fi
     70       : $(( tests++ ))
     71       echo -n "${what} kern_${d}_${r}.vblock with root_${rr}.vbpubk ... "
     72       "${FUTILITY}" vbutil_kernel \
     73         --verify "${V2DIR}/kern_${d}_${r}.vblock" \
     74         --signpubkey "${DATADIR}/root_${rr}.vbpubk" >/dev/null 2>&1
     75       if [ "$?" "$cmp" 0 ]; then
     76         echo -e "${COL_RED}FAILED${COL_STOP}"
     77         : $(( errs++ ))
     78       else
     79         echo -e "${COL_GREEN}PASSED${COL_STOP}"
     80       fi
     81     done
     82   done
     83 done
     84 
     85 
     86 # Check the kernel results
     87 for d in $algs; do
     88   for r in $algs; do
     89       : $(( tests++ ))
     90       echo -n "verify kern_${d}_${r}.vblock with hash only ... "
     91       "${FUTILITY}" vbutil_kernel \
     92           --verify "${V2DIR}/kern_${d}_${r}.vblock" >/dev/null 2>&1
     93       if [ "$?" -ne 0 ]; then
     94         echo -e "${COL_RED}FAILED${COL_STOP}"
     95         : $(( errs++ ))
     96       else
     97         echo -e "${COL_GREEN}PASSED${COL_STOP}"
     98       fi
     99   done
    100 done
    101 
    102 
    103 # Summary
    104 ME=$(basename "$0")
    105 if [ "$errs" -ne 0 ]; then
    106   echo -e "${COL_RED}${ME}: ${errs}/${tests} tests failed${COL_STOP}"
    107   exit 1
    108 fi
    109 happy "${ME}: All ${tests} tests passed"
    110 exit 0
    111