xref: /optee_os/ta/pkcs11/scripts/verify-helpers.sh (revision 5dfe80d66268ad8f7602ce28047a1d4d04ae2c1d)
1*5dfe80d6SVesa Jääskeläinen#!/bin/bash
2*5dfe80d6SVesa Jääskeläinen# SPDX-License-Identifier: BSD-2-Clause
3*5dfe80d6SVesa Jääskeläinen
4*5dfe80d6SVesa JääskeläinenSHOW_DETAILS=1
5*5dfe80d6SVesa JääskeläinenERRORS=""
6*5dfe80d6SVesa Jääskeläinenbasepath="$(dirname $(dirname $(readlink -f "$0")))"
7*5dfe80d6SVesa Jääskeläinen
8*5dfe80d6SVesa Jääskeläinendetails () [[ ${SHOW_DETAILS} -ne 0 ]]
9*5dfe80d6SVesa Jääskeläinen
10*5dfe80d6SVesa Jääskeläinenverify_enum () {
11*5dfe80d6SVesa Jääskeläinen  PREFIX=$1
12*5dfe80d6SVesa Jääskeläinen  SYMBOL_LIST="$(grep PKCS11\_$PREFIX\_ ${basepath}/include/pkcs11_ta.h | cut -f2 | cut '-d ' -f1)"
13*5dfe80d6SVesa Jääskeläinen  details && echo -e "\e[4m${PREFIX}\e[0m"
14*5dfe80d6SVesa Jääskeläinen  details && echo ""
15*5dfe80d6SVesa Jääskeläinen  details && echo -e "symbol\tuses\tstatus"
16*5dfe80d6SVesa Jääskeläinen  for symbol in $SYMBOL_LIST ; do
17*5dfe80d6SVesa Jääskeläinen    details && echo -n "$symbol"
18*5dfe80d6SVesa Jääskeläinen    COUNT="$(grep ${symbol} ${basepath}/src/* | wc -l)"
19*5dfe80d6SVesa Jääskeläinen    details && echo -n -e "\t${COUNT}\t"
20*5dfe80d6SVesa Jääskeläinen    PRESENT="$(grep PKCS11_ID.*\($symbol.*\) ${basepath}/src/pkcs11_helpers.c | wc -l)"
21*5dfe80d6SVesa Jääskeläinen    if [ ${PRESENT} -ne 0 ] ; then
22*5dfe80d6SVesa Jääskeläinen      details && echo -e "\e[32mOK\e[0m"
23*5dfe80d6SVesa Jääskeläinen    elif [ $COUNT -eq 0 ] ; then
24*5dfe80d6SVesa Jääskeläinen      details && echo -e "\e[33mmissing but unused\e[0m"
25*5dfe80d6SVesa Jääskeläinen    else
26*5dfe80d6SVesa Jääskeläinen      details && echo -e "\e[31mMISSING!\e[0m"
27*5dfe80d6SVesa Jääskeläinen      ERRORS+=" ${symbol}"
28*5dfe80d6SVesa Jääskeläinen    fi
29*5dfe80d6SVesa Jääskeläinen  done
30*5dfe80d6SVesa Jääskeläinen  details && echo ""
31*5dfe80d6SVesa Jääskeläinen}
32*5dfe80d6SVesa Jääskeläinen
33*5dfe80d6SVesa Jääskeläinenverify_define () {
34*5dfe80d6SVesa Jääskeläinen  PREFIX=$1
35*5dfe80d6SVesa Jääskeläinen  SYMBOL_LIST="$(grep PKCS11\_$PREFIX\_ ${basepath}/include/pkcs11_ta.h | grep ^#define | cut '-d ' -f2 | cut -f1)"
36*5dfe80d6SVesa Jääskeläinen  details && echo -e "\e[4m${PREFIX}\e[0m"
37*5dfe80d6SVesa Jääskeläinen  details && echo ""
38*5dfe80d6SVesa Jääskeläinen  details && echo -e "symbol\tuses\tstatus"
39*5dfe80d6SVesa Jääskeläinen  for symbol in $SYMBOL_LIST ; do
40*5dfe80d6SVesa Jääskeläinen    details && echo -n "$symbol"
41*5dfe80d6SVesa Jääskeläinen    COUNT="$(grep ${symbol} ${basepath}/src/* | wc -l)"
42*5dfe80d6SVesa Jääskeläinen    details && echo -n -e "\t${COUNT}\t"
43*5dfe80d6SVesa Jääskeläinen    PRESENT="$(grep PKCS11_ID.*\($symbol.*\) ${basepath}/src/pkcs11_helpers.c | wc -l)"
44*5dfe80d6SVesa Jääskeläinen    if [ ${PRESENT} -ne 0 ] ; then
45*5dfe80d6SVesa Jääskeläinen      details && echo -e "\e[32mOK\e[0m"
46*5dfe80d6SVesa Jääskeläinen    elif [ $COUNT -eq 0 ] ; then
47*5dfe80d6SVesa Jääskeläinen      details && echo -e "\e[33mmissing but unused\e[0m"
48*5dfe80d6SVesa Jääskeläinen    else
49*5dfe80d6SVesa Jääskeläinen      details && echo -e "\e[31mMISSING!\e[0m"
50*5dfe80d6SVesa Jääskeläinen      ERRORS+=" ${symbol}"
51*5dfe80d6SVesa Jääskeläinen    fi
52*5dfe80d6SVesa Jääskeläinen  done
53*5dfe80d6SVesa Jääskeläinen  details && echo ""
54*5dfe80d6SVesa Jääskeläinen}
55*5dfe80d6SVesa Jääskeläinen
56*5dfe80d6SVesa Jääskeläinenusage() {
57*5dfe80d6SVesa Jääskeläinen  SCR=$(basename "$0")
58*5dfe80d6SVesa Jääskeläinen  echo "Usage: $SCR		Verify that helpers are up to date"
59*5dfe80d6SVesa Jääskeläinen  echo "       $SCR --quiet	Only print errors"
60*5dfe80d6SVesa Jääskeläinen  echo "       $SCR --help		This help"
61*5dfe80d6SVesa Jääskeläinen  echo ""
62*5dfe80d6SVesa Jääskeläinen  echo "Verification checks that all PKCS11_* enums or defines from \
63*5dfe80d6SVesa Jääskeläineninclude/pkcs11_ta.h are either present in src/pkcs11_helpers.c or not used at \
64*5dfe80d6SVesa Jääskeläinenall."
65*5dfe80d6SVesa Jääskeläinen  exit 1
66*5dfe80d6SVesa Jääskeläinen}
67*5dfe80d6SVesa Jääskeläinen
68*5dfe80d6SVesa Jääskeläinenwhile [[ $# -gt 0 ]]; do
69*5dfe80d6SVesa Jääskeläinen  arg="$1"
70*5dfe80d6SVesa Jääskeläinen  shift
71*5dfe80d6SVesa Jääskeläinen
72*5dfe80d6SVesa Jääskeläinen  case $arg in
73*5dfe80d6SVesa Jääskeläinen    -q|--quiet)
74*5dfe80d6SVesa Jääskeläinen      SHOW_DETAILS=0
75*5dfe80d6SVesa Jääskeläinen      ;;
76*5dfe80d6SVesa Jääskeläinen    -h|--help)
77*5dfe80d6SVesa Jääskeläinen      usage
78*5dfe80d6SVesa Jääskeläinen      ;;
79*5dfe80d6SVesa Jääskeläinen    *)
80*5dfe80d6SVesa Jääskeläinen      echo "error: invalid argument: ${arg}" 1>&2
81*5dfe80d6SVesa Jääskeläinen      exit 1
82*5dfe80d6SVesa Jääskeläinen  esac
83*5dfe80d6SVesa Jääskeläinendone
84*5dfe80d6SVesa Jääskeläinen
85*5dfe80d6SVesa Jääskeläinen# check that symbols exists
86*5dfe80d6SVesa Jääskeläinenverify_enum CKA
87*5dfe80d6SVesa Jääskeläinenverify_define CKFS
88*5dfe80d6SVesa Jääskeläinenverify_define CKFT
89*5dfe80d6SVesa Jääskeläinenverify_define CKFSS
90*5dfe80d6SVesa Jääskeläinenverify_enum CKS
91*5dfe80d6SVesa Jääskeläinenverify_enum CKR
92*5dfe80d6SVesa Jääskeläinenverify_enum CKO
93*5dfe80d6SVesa Jääskeläinenverify_enum CKK
94*5dfe80d6SVesa Jääskeläinen
95*5dfe80d6SVesa Jääskeläinenif [ -n "${ERRORS}" ] ; then
96*5dfe80d6SVesa Jääskeläinen  SCR=$(basename "$0")
97*5dfe80d6SVesa Jääskeläinen  for symbol in $ERRORS ; do
98*5dfe80d6SVesa Jääskeläinen    echo "${SCR}: error: missing symbol ${symbol} in ${basepath}/src/pkcs11_helpers.c" 1>&2
99*5dfe80d6SVesa Jääskeläinen  done
100*5dfe80d6SVesa Jääskeläinen  exit 1
101*5dfe80d6SVesa Jääskeläinenfi
102*5dfe80d6SVesa Jääskeläinen
103*5dfe80d6SVesa Jääskeläinenexit 0
104