123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- #!/usr/bin/env bash
- #;**********************************************************************;
- # SPDX-License-Identifier: BSD-2-Clause
- #
- # Copyright (c) 2017 - 2020, Intel Corporation
- # Copyright (c) 2018 - 2020, Fraunhofer SIT sponsored by Infineon Technologies AG
- #
- # All rights reserved.
- #;**********************************************************************;
- # source the int-log-compiler-common sript
- . ${srcdir}/script/int-log-compiler-common.sh
- sanity_test
- # start simulator if needed
- if [[ ${INTEGRATION_TCTI} == "mssim" || ${INTEGRATION_TCTI} == "swtpm" ]]; then
- echo "Trying to start simulator ${INTEGRATION_TCTI}"
- try_simulator_start
- TPM20TEST_SOCKET_PORT="${SIM_PORT_DATA}"
- TPM20TEST_TCTI="${INTEGRATION_TCTI}:host=${TPM20TEST_SOCKET_ADDRESS},port=${TPM20TEST_SOCKET_PORT}"
- else
- # Device will be used.
- TPM20TEST_TCTI="${INTEGRATION_TCTI}:${TPM20TEST_DEVICE_FILE}"
- fi
- while true; do
- # Some debug prints
- echo "TPM20TEST_TCTI_NAME=${TPM20TEST_TCTI_NAME}"
- echo "TPM20TEST_DEVICE_FILE=${TPM20TEST_DEVICE_FILE}"
- echo "TPM20TEST_SOCKET_ADDRESS=${TPM20TEST_SOCKET_ADDRESS}"
- echo "TPM20TEST_SOCKET_PORT=${TPM20TEST_SOCKET_PORT}"
- echo "TPM20TEST_TCTI=${TPM20TEST_TCTI}"
- if [ "${TPM20TEST_TCTI_NAME}" != "device" ]; then
- env TPM20TEST_TCTI_NAME="${TPM20TEST_TCTI_NAME}" \
- TPM20TEST_SOCKET_ADDRESS="${TPM20TEST_SOCKET_ADDRESS}" \
- TPM20TEST_SOCKET_PORT="${TPM20TEST_SOCKET_PORT}" \
- TPM20TEST_TCTI="${TPM20TEST_TCTI}" \
- G_MESSAGES_DEBUG=all ./test/helper/tpm_startup
- if [ $? -ne 0 ]; then
- echo "TPM_StartUp failed"
- ret=99
- break
- fi
- else
- env TPM20TEST_TCTI_NAME=${TPM20TEST_TCTI_NAME} \
- TPM20TEST_DEVICE_FILE=${TPM20TEST_DEVICE_FILE} \
- G_MESSAGES_DEBUG=all ./test/helper/tpm_transientempty
- if [ $? -ne 0 ]; then
- echo "TPM transient area not empty => skipping"
- ret=99
- break
- fi
- fi
- # Certificate generation for simulator tests
- if [ "${TPM20TEST_TCTI_NAME}" != "device" ]; then
- EKPUB_FILE=${TEST_BIN}_ekpub.pem
- EKCERT_FILE=${TEST_BIN}_ekcert.crt
- EKCERT_PEM_FILE=${TEST_BIN}_ekcert.pem
- env TPM20TEST_TCTI_NAME="${TPM20TEST_TCTI_NAME}" \
- TPM20TEST_SOCKET_ADDRESS="${TPM20TEST_SOCKET_ADDRESS}" \
- TPM20TEST_SOCKET_PORT="${TPM20TEST_SOCKET_PORT}" \
- TPM20TEST_TCTI="${TPM20TEST_TCTI}" \
- TPM20TEST_DEVICE_FILE="${TPM20TEST_DEVICE_FILE}" \
- G_MESSAGES_DEBUG=all ./test/helper/tpm_getek ${EKPUB_FILE}
- if [ $? -ne 0 ]; then
- echo "TPM_getek failed"
- ret=99
- break
- fi
- EKECCPUB_FILE=${TEST_BIN}_ekeccpub.pem
- EKECCCERT_FILE=${TEST_BIN}_ekecccert.crt
- EKECCCERT_PEM_FILE=${TEST_BIN}_ekecccert.pem
- env TPM20TEST_TCTI_NAME="${TPM20TEST_TCTI_NAME}" \
- TPM20TEST_SOCKET_ADDRESS="${TPM20TEST_SOCKET_ADDRESS}" \
- TPM20TEST_SOCKET_PORT="${TPM20TEST_SOCKET_PORT}" \
- TPM20TEST_TCTI="${TPM20TEST_TCTI}" \
- TPM20TEST_DEVICE_FILE="${TPM20TEST_DEVICE_FILE}" \
- G_MESSAGES_DEBUG=all ./test/helper/tpm_getek_ecc ${EKECCPUB_FILE}
- if [ $? -ne 0 ]; then
- echo "TPM_getek_ecc failed"
- ret=99
- break
- fi
- INTERMEDCA_FILE=${TEST_BIN}_intermedecc-ca
- ROOTCA_FILE=${TEST_BIN}_root-ca
- SCRIPTDIR="$(dirname $(realpath $0))/"
- ${SCRIPTDIR}/ekca/create_ca.sh "${EKPUB_FILE}" "${EKECCPUB_FILE}" "${EKCERT_FILE}" \
- "${EKECCCERT_FILE}" "${INTERMEDCA_FILE}" "${ROOTCA_FILE}" >${TEST_BIN}_ca.log 2>&1
- if [ $? -ne 0 ]; then
- echo "ek-cert ca failed"
- ret=99
- break
- fi
- # Determine the fingerprint of the RSA EK public.
- FINGERPRINT=$(openssl pkey -pubin -inform PEM -in ${EKPUB_FILE} -outform DER | shasum -a 256 | cut -f 1 -d ' ')
- export FAPI_TEST_FINGERPRINT=" { \"hashAlg\" : \"sha256\", \"digest\" : \"${FINGERPRINT}\" }"
- openssl x509 -inform DER -in ${EKCERT_FILE} -outform PEM -out ${EKCERT_PEM_FILE}
- export FAPI_TEST_CERTIFICATE="file:${EKCERT_PEM_FILE}"
- # Determine the fingerprint of the RSA EK public.
- FINGERPRINT_ECC=$(openssl pkey -pubin -inform PEM -in ${EKECCPUB_FILE} -outform DER | shasum -a 256 | cut -f 1 -d ' ')
- export FAPI_TEST_FINGERPRINT_ECC=" { \"hashAlg\" : \"sha256\", \"digest\" : \"${FINGERPRINT_ECC}\" }"
- openssl x509 -inform DER -in ${EKECCCERT_FILE} -outform PEM -out ${EKECCCERT_PEM_FILE}
- export FAPI_TEST_CERTIFICATE_ECC="file:${EKECCCERT_PEM_FILE}"
- cat $EKCERT_FILE | \
- env TPM20TEST_TCTI_NAME="${TPM20TEST_TCTI_NAME}" \
- TPM20TEST_SOCKET_ADDRESS="${TPM20TEST_SOCKET_ADDRESS}" \
- TPM20TEST_SOCKET_PORT="${TPM20TEST_SOCKET_PORT}" \
- TPM20TEST_TCTI="${TPM20TEST_TCTI}" \
- TPM20TEST_DEVICE_FILE="${TPM20TEST_DEVICE_FILE}" \
- G_MESSAGES_DEBUG=all ./test/helper/tpm_writeekcert 1C00002
- if [ $? -ne 0 ]; then
- echo "TPM_writeekcert failed"
- ret=99
- break
- fi
- cat $EKECCCERT_FILE | \
- env TPM20TEST_TCTI_NAME="${TPM20TEST_TCTI_NAME}" \
- TPM20TEST_SOCKET_ADDRESS="${TPM20TEST_SOCKET_ADDRESS}" \
- TPM20TEST_SOCKET_PORT="${TPM20TEST_SOCKET_PORT}" \
- TPM20TEST_TCTI="${TPM20TEST_TCTI}" \
- TPM20TEST_DEVICE_FILE="${TPM20TEST_DEVICE_FILE}" \
- G_MESSAGES_DEBUG=all ./test/helper/tpm_writeekcert 1C0000A
- if [ $? -ne 0 ]; then
- echo "TPM_writeekcert failed"
- ret=99
- fi
- fi # certificate generation
- TPMSTATE_FILE1=${TEST_BIN}_state1
- TPMSTATE_FILE2=${TEST_BIN}_state2
- env TPM20TEST_TCTI_NAME="${TPM20TEST_TCTI_NAME}" \
- TPM20TEST_SOCKET_ADDRESS="${TPM20TEST_SOCKET_ADDRESS}" \
- TPM20TEST_SOCKET_PORT="${TPM20TEST_SOCKET_PORT}" \
- TPM20TEST_TCTI="${TPM20TEST_TCTI}" \
- TPM20TEST_DEVICE_FILE="${TPM20TEST_DEVICE_FILE}" \
- G_MESSAGES_DEBUG=all ./test/helper/tpm_dumpstate>${TPMSTATE_FILE1}
- if [ $? -ne 0 ]; then
- echo "Error during dumpstate"
- ret=99
- break
- fi
- echo "Execute the test script"
- if [ "${TPM20TEST_TCTI_NAME}" == "device" ]; then
- # No root certificate needed
- env TPM20TEST_TCTI_NAME="${TPM20TEST_TCTI_NAME}" \
- TPM20TEST_SOCKET_ADDRESS="${TPM20TEST_SOCKET_ADDRESS}" \
- TPM20TEST_SOCKET_PORT="${TPM20TEST_SOCKET_PORT}" \
- TPM20TEST_TCTI="${TPM20TEST_TCTI}" \
- TPM20TEST_DEVICE_FILE="${TPM20TEST_DEVICE_FILE}" \
- G_MESSAGES_DEBUG=all ${@: -1}
- else
- # Run test with generated certificate.
- env TPM20TEST_TCTI_NAME="${TPM20TEST_TCTI_NAME}" \
- TPM20TEST_SOCKET_ADDRESS="${TPM20TEST_SOCKET_ADDRESS}" \
- TPM20TEST_SOCKET_PORT="${TPM20TEST_SOCKET_PORT}" \
- TPM20TEST_TCTI="${TPM20TEST_TCTI}" \
- FAPI_TEST_ROOT_CERT=${ROOTCA_FILE}.pem \
- TPM20TEST_DEVICE_FILE="${TPM20TEST_DEVICE_FILE}" \
- G_MESSAGES_DEBUG=all ${@: -1}
- fi
- ret=$?
- echo "Script returned $ret"
- #We check the state before a reboot to see if transients and NV were chagned.
- env TPM20TEST_TCTI_NAME="${TPM20TEST_TCTI_NAME}" \
- TPM20TEST_SOCKET_ADDRESS="${TPM20TEST_SOCKET_ADDRESS}" \
- TPM20TEST_SOCKET_PORT="${TPM20TEST_SOCKET_PORT}" \
- TPM20TEST_TCTI="${TPM20TEST_TCTI}" \
- G_MESSAGES_DEBUG=all ./test/helper/tpm_dumpstate>${TPMSTATE_FILE2}
- if [ $? -ne 0 ]; then
- echo "Error during dumpstate"
- ret=99
- break
- fi
- if [ "$(cat ${TPMSTATE_FILE1})" != "$(cat ${TPMSTATE_FILE2})" ]; then
- echo "TPM changed state during test"
- echo "State before ($TPMSTATE_FILE1):"
- cat ${TPMSTATE_FILE1}
- echo "State after ($TPMSTATE_FILE2):"
- cat ${TPMSTATE_FILE2}
- ret=1
- break
- fi
- #TODO: Add a tpm-restart/reboot here
- break
- done
- if [ "${TPM20TEST_TCTI_NAME}" != "device" ]; then
- # This sleep is sadly necessary: If we kill the tabrmd w/o sleeping for a
- # second after the test finishes the simulator will die too. Bug in the
- # simulator?
- sleep 1
- # teardown
- daemon_stop ${SIM_PID_FILE}
- rm -rf ${SIM_TMP_DIR} ${SIM_PID_FILE}
- fi
- exit $ret
|