#!/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-hashing2"
SWTPM_DEV_NAME="/dev/${VTPM_NAME}"
TPM_PATH="$(mktemp -d)" || exit 1
STATE_FILE=$TPM_PATH/tpm-00.permall
VOLATILE_STATE_FILE=$TPM_PATH/tpm-00.volatilestate
SWTPM_CMD_UNIX_PATH=${TPM_PATH}/unix-cmd.sock
SWTPM_CTRL_UNIX_PATH=${TPM_PATH}/unix-ctrl.sock
SWTPM_INTERFACE=${SWTPM_INTERFACE:-cuse}

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}"

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: ${SWTPM_INTERFACE} TPM initialization failed."
	exit 1
fi

sleep 0.5

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}" '\x00\xC1\x00\x00\x00\x0C\x00\x00\x00\x99\x00\x01')
exp=' 00 c4 00 00 00 0a 00 00 00 00'
if [ "$RES" != "$exp" ]; then
	echo "Error: Did not get expected result from TPM_Startup(ST_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 flag 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: Hash command did not work."
	exit 1
fi

# Read PCR 17
RES=$(swtpm_cmd_tx "${SWTPM_INTERFACE}" '\x00\xC1\x00\x00\x00\x0E\x00\x00\x00\x15\x00\x00\x00\x11')
exp=' 00 c4 00 00 00 1e 00 00 00 00 97 e9 76 e4 f2 2c d6 d2 4a fd 21 20 85 ad 7a 86 64 7f 2a e5'
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 flag 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

# We expect the same results for the TPM_ResetEstablishment command
for ((l = 0; l <= 2; l++)); do
	# Set locality
	if ! run_swtpm_ioctl "${SWTPM_INTERFACE}" -l "$l"; then
		echo "Error: Could not choose locality $l"
		exit 1
	fi
	# Have to use external echo command
	RES=$(swtpm_cmd_tx "${SWTPM_INTERFACE}" '\x00\xC1\x00\x00\x00\x0a\x40\x00\x00\x0b')
	exp=' 00 c4 00 00 00 0a 00 00 00 3d'
	if [ "$RES" != "$exp" ]; then
		echo "Error: Could reset TPM establishment bit in locality $l using command"
		echo "expected: $exp"
		echo "received: $RES"
		exit 1
	fi
done

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

RES=$(swtpm_cmd_tx "${SWTPM_INTERFACE}" '\x00\xC1\x00\x00\x00\x0a\x40\x00\x00\x0b')
exp=' 00 c4 00 00 00 0a 00 00 00 00'
if [ "$RES" != "$exp" ]; then
	echo "Error: Could reset TPM establishment bit in locality 3 using command"
	echo "expected: $exp"
	echo "received: $RES"
	exit 1
fi

# Check the TPM Established bit after the reset
RES=$(run_swtpm_ioctl "${SWTPM_INTERFACE}" -e)
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
RES=$(swtpm_cmd_tx "${SWTPM_INTERFACE}" '\x00\xC1\x00\x00\x00\x0E\x00\x00\x00\x15\x00\x00\x00\x11')
exp=' 00 c4 00 00 00 1e 00 00 00 00 d8 0e 7a 7b 3c 37 88 7d b4 c2 88 08 1d a7 53 f6 4b 11 3a 9c'
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

if wait_process_gone ${SWTPM_PID} 4; 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
