fint-log-compiler.sh 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. #!/usr/bin/env bash
  2. #;**********************************************************************;
  3. # SPDX-License-Identifier: BSD-2-Clause
  4. #
  5. # Copyright (c) 2017 - 2020, Intel Corporation
  6. # Copyright (c) 2018 - 2020, Fraunhofer SIT sponsored by Infineon Technologies AG
  7. #
  8. # All rights reserved.
  9. #;**********************************************************************;
  10. # source the int-log-compiler-common sript
  11. . ${srcdir}/script/int-log-compiler-common.sh
  12. sanity_test
  13. # start simulator if needed
  14. if [[ ${INTEGRATION_TCTI} == "mssim" || ${INTEGRATION_TCTI} == "swtpm" ]]; then
  15. echo "Trying to start simulator ${INTEGRATION_TCTI}"
  16. try_simulator_start
  17. TPM20TEST_SOCKET_PORT="${SIM_PORT_DATA}"
  18. TPM20TEST_TCTI="${INTEGRATION_TCTI}:host=${TPM20TEST_SOCKET_ADDRESS},port=${TPM20TEST_SOCKET_PORT}"
  19. else
  20. # Device will be used.
  21. TPM20TEST_TCTI="${INTEGRATION_TCTI}:${TPM20TEST_DEVICE_FILE}"
  22. fi
  23. while true; do
  24. # Some debug prints
  25. echo "TPM20TEST_TCTI_NAME=${TPM20TEST_TCTI_NAME}"
  26. echo "TPM20TEST_DEVICE_FILE=${TPM20TEST_DEVICE_FILE}"
  27. echo "TPM20TEST_SOCKET_ADDRESS=${TPM20TEST_SOCKET_ADDRESS}"
  28. echo "TPM20TEST_SOCKET_PORT=${TPM20TEST_SOCKET_PORT}"
  29. echo "TPM20TEST_TCTI=${TPM20TEST_TCTI}"
  30. if [ "${TPM20TEST_TCTI_NAME}" != "device" ]; then
  31. env TPM20TEST_TCTI_NAME="${TPM20TEST_TCTI_NAME}" \
  32. TPM20TEST_SOCKET_ADDRESS="${TPM20TEST_SOCKET_ADDRESS}" \
  33. TPM20TEST_SOCKET_PORT="${TPM20TEST_SOCKET_PORT}" \
  34. TPM20TEST_TCTI="${TPM20TEST_TCTI}" \
  35. G_MESSAGES_DEBUG=all ./test/helper/tpm_startup
  36. if [ $? -ne 0 ]; then
  37. echo "TPM_StartUp failed"
  38. ret=99
  39. break
  40. fi
  41. else
  42. env TPM20TEST_TCTI_NAME=${TPM20TEST_TCTI_NAME} \
  43. TPM20TEST_DEVICE_FILE=${TPM20TEST_DEVICE_FILE} \
  44. G_MESSAGES_DEBUG=all ./test/helper/tpm_transientempty
  45. if [ $? -ne 0 ]; then
  46. echo "TPM transient area not empty => skipping"
  47. ret=99
  48. break
  49. fi
  50. fi
  51. # Certificate generation for simulator tests
  52. if [ "${TPM20TEST_TCTI_NAME}" != "device" ]; then
  53. EKPUB_FILE=${TEST_BIN}_ekpub.pem
  54. EKCERT_FILE=${TEST_BIN}_ekcert.crt
  55. EKCERT_PEM_FILE=${TEST_BIN}_ekcert.pem
  56. env TPM20TEST_TCTI_NAME="${TPM20TEST_TCTI_NAME}" \
  57. TPM20TEST_SOCKET_ADDRESS="${TPM20TEST_SOCKET_ADDRESS}" \
  58. TPM20TEST_SOCKET_PORT="${TPM20TEST_SOCKET_PORT}" \
  59. TPM20TEST_TCTI="${TPM20TEST_TCTI}" \
  60. TPM20TEST_DEVICE_FILE="${TPM20TEST_DEVICE_FILE}" \
  61. G_MESSAGES_DEBUG=all ./test/helper/tpm_getek ${EKPUB_FILE}
  62. if [ $? -ne 0 ]; then
  63. echo "TPM_getek failed"
  64. ret=99
  65. break
  66. fi
  67. EKECCPUB_FILE=${TEST_BIN}_ekeccpub.pem
  68. EKECCCERT_FILE=${TEST_BIN}_ekecccert.crt
  69. EKECCCERT_PEM_FILE=${TEST_BIN}_ekecccert.pem
  70. env TPM20TEST_TCTI_NAME="${TPM20TEST_TCTI_NAME}" \
  71. TPM20TEST_SOCKET_ADDRESS="${TPM20TEST_SOCKET_ADDRESS}" \
  72. TPM20TEST_SOCKET_PORT="${TPM20TEST_SOCKET_PORT}" \
  73. TPM20TEST_TCTI="${TPM20TEST_TCTI}" \
  74. TPM20TEST_DEVICE_FILE="${TPM20TEST_DEVICE_FILE}" \
  75. G_MESSAGES_DEBUG=all ./test/helper/tpm_getek_ecc ${EKECCPUB_FILE}
  76. if [ $? -ne 0 ]; then
  77. echo "TPM_getek_ecc failed"
  78. ret=99
  79. break
  80. fi
  81. INTERMEDCA_FILE=${TEST_BIN}_intermedecc-ca
  82. ROOTCA_FILE=${TEST_BIN}_root-ca
  83. SCRIPTDIR="$(dirname $(realpath $0))/"
  84. ${SCRIPTDIR}/ekca/create_ca.sh "${EKPUB_FILE}" "${EKECCPUB_FILE}" "${EKCERT_FILE}" \
  85. "${EKECCCERT_FILE}" "${INTERMEDCA_FILE}" "${ROOTCA_FILE}" >${TEST_BIN}_ca.log 2>&1
  86. if [ $? -ne 0 ]; then
  87. echo "ek-cert ca failed"
  88. ret=99
  89. break
  90. fi
  91. # Determine the fingerprint of the RSA EK public.
  92. FINGERPRINT=$(openssl pkey -pubin -inform PEM -in ${EKPUB_FILE} -outform DER | shasum -a 256 | cut -f 1 -d ' ')
  93. export FAPI_TEST_FINGERPRINT=" { \"hashAlg\" : \"sha256\", \"digest\" : \"${FINGERPRINT}\" }"
  94. openssl x509 -inform DER -in ${EKCERT_FILE} -outform PEM -out ${EKCERT_PEM_FILE}
  95. export FAPI_TEST_CERTIFICATE="file:${EKCERT_PEM_FILE}"
  96. # Determine the fingerprint of the RSA EK public.
  97. FINGERPRINT_ECC=$(openssl pkey -pubin -inform PEM -in ${EKECCPUB_FILE} -outform DER | shasum -a 256 | cut -f 1 -d ' ')
  98. export FAPI_TEST_FINGERPRINT_ECC=" { \"hashAlg\" : \"sha256\", \"digest\" : \"${FINGERPRINT_ECC}\" }"
  99. openssl x509 -inform DER -in ${EKECCCERT_FILE} -outform PEM -out ${EKECCCERT_PEM_FILE}
  100. export FAPI_TEST_CERTIFICATE_ECC="file:${EKECCCERT_PEM_FILE}"
  101. cat $EKCERT_FILE | \
  102. env TPM20TEST_TCTI_NAME="${TPM20TEST_TCTI_NAME}" \
  103. TPM20TEST_SOCKET_ADDRESS="${TPM20TEST_SOCKET_ADDRESS}" \
  104. TPM20TEST_SOCKET_PORT="${TPM20TEST_SOCKET_PORT}" \
  105. TPM20TEST_TCTI="${TPM20TEST_TCTI}" \
  106. TPM20TEST_DEVICE_FILE="${TPM20TEST_DEVICE_FILE}" \
  107. G_MESSAGES_DEBUG=all ./test/helper/tpm_writeekcert 1C00002
  108. if [ $? -ne 0 ]; then
  109. echo "TPM_writeekcert failed"
  110. ret=99
  111. break
  112. fi
  113. cat $EKECCCERT_FILE | \
  114. env TPM20TEST_TCTI_NAME="${TPM20TEST_TCTI_NAME}" \
  115. TPM20TEST_SOCKET_ADDRESS="${TPM20TEST_SOCKET_ADDRESS}" \
  116. TPM20TEST_SOCKET_PORT="${TPM20TEST_SOCKET_PORT}" \
  117. TPM20TEST_TCTI="${TPM20TEST_TCTI}" \
  118. TPM20TEST_DEVICE_FILE="${TPM20TEST_DEVICE_FILE}" \
  119. G_MESSAGES_DEBUG=all ./test/helper/tpm_writeekcert 1C0000A
  120. if [ $? -ne 0 ]; then
  121. echo "TPM_writeekcert failed"
  122. ret=99
  123. fi
  124. fi # certificate generation
  125. TPMSTATE_FILE1=${TEST_BIN}_state1
  126. TPMSTATE_FILE2=${TEST_BIN}_state2
  127. env TPM20TEST_TCTI_NAME="${TPM20TEST_TCTI_NAME}" \
  128. TPM20TEST_SOCKET_ADDRESS="${TPM20TEST_SOCKET_ADDRESS}" \
  129. TPM20TEST_SOCKET_PORT="${TPM20TEST_SOCKET_PORT}" \
  130. TPM20TEST_TCTI="${TPM20TEST_TCTI}" \
  131. TPM20TEST_DEVICE_FILE="${TPM20TEST_DEVICE_FILE}" \
  132. G_MESSAGES_DEBUG=all ./test/helper/tpm_dumpstate>${TPMSTATE_FILE1}
  133. if [ $? -ne 0 ]; then
  134. echo "Error during dumpstate"
  135. ret=99
  136. break
  137. fi
  138. echo "Execute the test script"
  139. if [ "${TPM20TEST_TCTI_NAME}" == "device" ]; then
  140. # No root certificate needed
  141. env TPM20TEST_TCTI_NAME="${TPM20TEST_TCTI_NAME}" \
  142. TPM20TEST_SOCKET_ADDRESS="${TPM20TEST_SOCKET_ADDRESS}" \
  143. TPM20TEST_SOCKET_PORT="${TPM20TEST_SOCKET_PORT}" \
  144. TPM20TEST_TCTI="${TPM20TEST_TCTI}" \
  145. TPM20TEST_DEVICE_FILE="${TPM20TEST_DEVICE_FILE}" \
  146. G_MESSAGES_DEBUG=all ${@: -1}
  147. else
  148. # Run test with generated certificate.
  149. env TPM20TEST_TCTI_NAME="${TPM20TEST_TCTI_NAME}" \
  150. TPM20TEST_SOCKET_ADDRESS="${TPM20TEST_SOCKET_ADDRESS}" \
  151. TPM20TEST_SOCKET_PORT="${TPM20TEST_SOCKET_PORT}" \
  152. TPM20TEST_TCTI="${TPM20TEST_TCTI}" \
  153. FAPI_TEST_ROOT_CERT=${ROOTCA_FILE}.pem \
  154. TPM20TEST_DEVICE_FILE="${TPM20TEST_DEVICE_FILE}" \
  155. G_MESSAGES_DEBUG=all ${@: -1}
  156. fi
  157. ret=$?
  158. echo "Script returned $ret"
  159. #We check the state before a reboot to see if transients and NV were chagned.
  160. env TPM20TEST_TCTI_NAME="${TPM20TEST_TCTI_NAME}" \
  161. TPM20TEST_SOCKET_ADDRESS="${TPM20TEST_SOCKET_ADDRESS}" \
  162. TPM20TEST_SOCKET_PORT="${TPM20TEST_SOCKET_PORT}" \
  163. TPM20TEST_TCTI="${TPM20TEST_TCTI}" \
  164. G_MESSAGES_DEBUG=all ./test/helper/tpm_dumpstate>${TPMSTATE_FILE2}
  165. if [ $? -ne 0 ]; then
  166. echo "Error during dumpstate"
  167. ret=99
  168. break
  169. fi
  170. if [ "$(cat ${TPMSTATE_FILE1})" != "$(cat ${TPMSTATE_FILE2})" ]; then
  171. echo "TPM changed state during test"
  172. echo "State before ($TPMSTATE_FILE1):"
  173. cat ${TPMSTATE_FILE1}
  174. echo "State after ($TPMSTATE_FILE2):"
  175. cat ${TPMSTATE_FILE2}
  176. ret=1
  177. break
  178. fi
  179. #TODO: Add a tpm-restart/reboot here
  180. break
  181. done
  182. if [ "${TPM20TEST_TCTI_NAME}" != "device" ]; then
  183. # This sleep is sadly necessary: If we kill the tabrmd w/o sleeping for a
  184. # second after the test finishes the simulator will die too. Bug in the
  185. # simulator?
  186. sleep 1
  187. # teardown
  188. daemon_stop ${SIM_PID_FILE}
  189. rm -rf ${SIM_TMP_DIR} ${SIM_PID_FILE}
  190. fi
  191. exit $ret