#!/bin/bash

# For the license, see the LICENSE file in the root directory.
#set -x

ROOT=${abs_top_builddir:-$(pwd)/..}
TESTDIR=${abs_top_testdir:-$(dirname "$0")}

VTPM_NAME="vtpm-test-tpm2-hashing2"
SWTPM_DEV_NAME="/dev/${VTPM_NAME}"
TPM_PATH="$(mktemp -d)" || exit 1
STATE_FILE=$TPM_PATH/tpm2-00.permall
VOLATILE_STATE_FILE=$TPM_PATH/tpm2-00.volatilestate
SWTPM_INTERFACE=${SWTPM_INTERFACE:-cuse}
SWTPM_CMD_UNIX_PATH=${TPM_PATH}/unix-cmd.sock
SWTPM_CTRL_UNIX_PATH=${TPM_PATH}/unix-ctrl.sock

function cleanup()
{
	pid=${SWTPM_PID}
	if [ -n "$pid" ]; then
		kill_quiet -9 "$pid"
	fi
	rm -rf "$TPM_PATH"
}

trap "cleanup" EXIT

[ "${SWTPM_INTERFACE}" == "cuse" ] && source "${TESTDIR}/test_cuse"
source "${TESTDIR}/common"

rm -f "$STATE_FILE" "$VOLATILE_STATE_FILE" 2>/dev/null

TPM_PATH=$TPM_PATH run_swtpm "${SWTPM_INTERFACE}" --tpm2

display_processes_by_name "$SWTPM"

if ! kill_quiet -0 "${SWTPM_PID}"; then
	echo "Error: ${SWTPM_INTERFACE} TPM did not start."
	exit 1
fi

# Init the TPM
if ! run_swtpm_ioctl "${SWTPM_INTERFACE}" -i; then
	echo "Error: Could not initialize the ${SWTPM_INTERFACE} TPM."
	exit 1
fi

if ! kill_quiet -0 "${SWTPM_PID}" 2>/dev/null; then
	echo "Error: ${SWTPM_INTERFACE} TPM not running anymore after INIT."
	exit 1
fi

# Startup the TPM
RES=$(swtpm_cmd_tx "${SWTPM_INTERFACE}" '\x80\x01\x00\x00\x00\x0c\x00\x00\x01\x44\x00\x00')
exp=' 80 01 00 00 00 0a 00 00 00 00'
if [ "$RES" != "$exp" ]; then
	echo "Error: Did not get expected result from TPM2_Startup(SU_Clear)"
	echo "expected: $exp"
	echo "received: $RES"
	exit 1
fi

# Check the TPM Established bit before the hashing
if ! RES=$(run_swtpm_ioctl "${SWTPM_INTERFACE}" -e); then
	echo "Error: Could not get the TPM Established bit from the ${SWTPM_INTERFACE} TPM."
	exit 1
fi

exp='tpmEstablished is 0'
if [ "$RES" != "$exp" ]; then
	echo "Error (1): TPM Established flag has wrong value."
	echo "expected: $exp"
	echo "received: $RES"
	exit 1
fi

if ! run_swtpm_ioctl "${SWTPM_INTERFACE}" -h 1234; then
	echo "Error: The hash command failed."
	exit 1
fi

# Read PCR 17
#                                                     length         CC            count       hashalg         sz
RES=$(swtpm_cmd_tx "${SWTPM_INTERFACE}" '\x80\x01\x00\x00\x00\x14\x00\x00\x01\x7e\x00\x00\x00\x01\x00\x0b\x03\x00\x00\x02')
# disregard the update counter using a regex comparison
exp=' 80 01 00 00 00 3e 00 00 00 00 00 00 00 .. 00 00 00 01 00 0b 03 00 00 02 00 00 00 01 00 20 fc a5 d6 49 bf b0 c9 22 fd 33 0f 79 b2 00 43 28 9d af d6 0d 01 a4 c4 37 3c f2 8a db 56 c9 b4 54'
if ! [[ $RES =~ ^${exp}$ ]]; then
	echo "Error: (1) Did not get expected result from TPM_PCRRead(17)"
	echo "expected: $exp"
	echo "received: $RES"
	exit 1
fi

# Check the TPM Established bit after the hashing
if ! RES=$(run_swtpm_ioctl "${SWTPM_INTERFACE}" -e); then
	echo "Error: Could not get the TPM Established bit from the ${SWTPM_INTERFACE} TPM."
	exit 1
fi

exp='tpmEstablished is 1'
if [ "$RES" != "$exp" ]; then
	echo "Error (2): TPM Established flag has wrong value."
	echo "expected: $exp"
	echo "received: $RES"
	exit 1
fi

# Reset the establishment bit; we switch to locality 0 and reset via locality 3
if ! run_swtpm_ioctl "${SWTPM_INTERFACE}" -l 0; then
	echo "Error: Could not set locality 0"
	exit 1
fi

for ((l = 0; l <= 2; l++)); do
	# Resetting via locality 2 must fail
	if ERR="$(run_swtpm_ioctl "${SWTPM_INTERFACE}" -r "$l" 2>&1)"; then
		echo "Error: Could reset the establishment bit via locality $l"
		exit 1
	fi
	exp="TPM result from PTM_RESET_TPMESTABLISHED: 0x3d"
	if [ "$ERR" != "$exp" ]; then
		echo "Error: Unexpected error message"
		echo "Received: $ERR"
		echo "Expected: $exp"
		exit 1
	fi
done

# Resetting via locality 3 must work
if ! run_swtpm_ioctl "${SWTPM_INTERFACE}" -r 3; then
	echo "Error: Could not reset the establishment bit via locality 3"
	exit 1
fi

# Check the TPM Established bit after the reset
if ! RES=$(run_swtpm_ioctl "${SWTPM_INTERFACE}" -e); then
	echo "Error: Could not get the TPM Established bit from the ${SWTPM_INTERFACE} TPM."
	exit 1
fi

exp='tpmEstablished is 0'
if [ "$RES" != "$exp" ]; then
	echo "Error (3): TPM Established flag has wrong value."
	echo "expected: $exp"
	echo "received: $RES"
	exit 1
fi

# Read from a file
dd if=/dev/zero bs=1024 count=1024 2>/dev/null| \
	run_swtpm_ioctl "${SWTPM_INTERFACE}" -h -

# Read PCR 17
#                                                     length         CC            count       hashalg         sz
RES=$(swtpm_cmd_tx "${SWTPM_INTERFACE}" '\x80\x01\x00\x00\x00\x14\x00\x00\x01\x7e\x00\x00\x00\x01\x00\x0b\x03\x00\x00\x02')
# disregard the update counter using a regex comparison
exp=' 80 01 00 00 00 3e 00 00 00 00 00 00 00 .. 00 00 00 01 00 0b 03 00 00 02 00 00 00 01 00 20 27 7e de f1 02 56 46 5d 8e 71 65 38 3f d3 63 c9 8a be 89 e2 90 2e 4d 3a 2b 3a 30 80 2f 28 af 19'
if ! [[ $RES =~ ^${exp}$ ]]; then
	echo "Error: (2) Did not get expected result from TPM_PCRRead(17)"
	echo "expected: $exp"
	echo "received: $RES"
	exit 1
fi

if ! run_swtpm_ioctl "${SWTPM_INTERFACE}" -s; then
	echo "Error: Could not shut down the ${SWTPM_INTERFACE} TPM."
	exit 1
fi

sleep 0.5

if kill_quiet -0 "${SWTPM_PID}" 2>/dev/null; then
	echo "Error: ${SWTPM_INTERFACE} TPM should not be running anymore."
	exit 1
fi

if [ ! -e "$STATE_FILE" ]; then
	echo "Error: TPM state file $STATE_FILE does not exist."
	exit 1
fi

echo "OK"

exit 0
