# SPDX-License-Identifier: BSD-3-Clause

source helpers.sh

cleanup() {
  rm -f audit_session.ctx hmac_session.ctx
  shut_down
}
trap cleanup EXIT

start_up

declare -A alg_hashes=(
  ["sha1"]="f1d2d2f924e986ac86fdf7b36c94bcdf32beec15"
  ["sha256"]="6ea40aa7267bb71251c1de1c3605a3df759b86b22fa9f62aa298d4197cd88a38"
  ["sha384"]="ecf669bad80a9b2b267d8671bd7d012d92e8cd30fd28d88dcdbcc2ddffbb995c7f226011ac24ae92dcfb493e0a5ecf89"
  ["sha512"]="18b7381f36cdf5dd7c0b64835e0bf5041a52a38e3c3f4cbabcc4099d52590bf9916808138de511fb172cb64fcc11601f07d114f03e95e3d5ceacb330ce0f856a"
  ["sm3_256"]="2b14a1fc49869413b0beb707069cffc0c6b0a51f3fedb9ce072c80709652b3ae"
)

digests=""
# test a single algorithm based on what is supported
for alg in `tpm2 getcap pcrs | grep sha |awk {'print $2'} | awk -F: {'print $1'}`; do

  hash=${alg_hashes[$alg]}

  if [ ! -z $digests ]; then
      digests="$digests,"
  fi

  digests="$digests$alg=$hash"

  tpm2 pcrextend 9:$alg=$hash

done;

#
# To keep things simple, compound specifications are just done with
# the supported sha1 algorithms to guarantee the command to succeed.
#
tpm2 pcrextend 8:$digests

# Extend a PCR for all supported banks like in the previous test but
# try extending two PCR in the same command.
tpm2 pcrextend 8:$digests 9:$digests

# Over-length hash should fail
if tpm2 pcrextend 8:$digests,sha1=${alg_hashes["sha256"]}; then
    echo "tpm2 pcrextend with over-length hash didn't fail!"
    exit 1
else
    true
fi

tpm2 startauthsession -Q --session hmac_session.ctx --hmac 
tpm2 startauthsession -Q --session audit_session.ctx --audit
tpm2 pcrextend -S audit_session.ctx -P session:hmac_session.ctx \
               16:sha256=b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c

exit 0
