esys-act-set-timeout.int.c 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /* SPDX-License-Identifier: BSD-2-Clause */
  2. /*******************************************************************************
  3. * Copyright (c) 2020, Intel Corporation
  4. * All rights reserved.
  5. *******************************************************************************/
  6. #ifdef HAVE_CONFIG_H
  7. #include <config.h>
  8. #endif
  9. #include <stdlib.h>
  10. #include "tss2_esys.h"
  11. #include "esys_iutil.h"
  12. #include "test-esys.h"
  13. #define LOGMODULE test
  14. #include "util/log.h"
  15. #include "util/aux_util.h"
  16. /** Test of the ESAPI function Esys_ACT_SetTimeout.
  17. *
  18. * Tested ESAPI commands:
  19. * - Esys_ACT_SetTimeout() (M)
  20. * - Esys_StartAuthSession()
  21. * - Esys_FlushContext()
  22. *
  23. * Used compiler defines: TEST_SESSION
  24. *
  25. * @param[in,out] esys_context The ESYS_CONTEXT.
  26. * @retval EXIT_FAILURE
  27. * @retval EXIT_SUCCESS
  28. */
  29. int
  30. test_esys_act_set_timeout(ESYS_CONTEXT * esys_context)
  31. {
  32. TSS2_RC r;
  33. ESYS_TR session = ESYS_TR_NONE;
  34. TPMT_SYM_DEF symmetric = {.algorithm = TPM2_ALG_AES,
  35. .keyBits = {.aes = 128},
  36. .mode = {.aes = TPM2_ALG_CFB}
  37. };
  38. TPMA_SESSION sessionAttributes = TPMA_SESSION_CONTINUESESSION |
  39. TPMA_SESSION_AUDIT;
  40. TPM2B_NONCE nonceCaller = {
  41. .size = 20,
  42. .buffer = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
  43. 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}
  44. };
  45. r = Esys_StartAuthSession(esys_context, ESYS_TR_NONE, ESYS_TR_NONE,
  46. ESYS_TR_NONE, ESYS_TR_NONE, ESYS_TR_NONE,
  47. &nonceCaller,
  48. TPM2_SE_HMAC, &symmetric, TPM2_ALG_SHA256,
  49. &session);
  50. goto_if_error(r, "Error: During initialization of session", error);
  51. r = Esys_TRSess_SetAttributes(esys_context, session, sessionAttributes, 0xFF);
  52. goto_if_error(r, "Error: TRSess_SetAttributes", error);
  53. ESYS_TR ACT_handle = ESYS_TR_RH_ACT(0); /* pick first Auth timer */
  54. r = Esys_ACT_SetTimeout(esys_context, ACT_handle,
  55. session, ESYS_TR_NONE, ESYS_TR_NONE, 32);
  56. goto_if_error(r, "Error: Clear", error);
  57. r = Esys_FlushContext(esys_context, session);
  58. goto_if_error(r, "Error: FlushContext", error);
  59. return EXIT_SUCCESS;
  60. error:
  61. if (session != ESYS_TR_NONE) {
  62. if (Esys_FlushContext(esys_context, session) != TSS2_RC_SUCCESS) {
  63. LOG_ERROR("Cleanup session failed.");
  64. }
  65. }
  66. /* If the TPM doesn't support it return skip */
  67. if (r == TPM2_RC_COMMAND_CODE)
  68. return EXIT_SKIP;
  69. else
  70. return EXIT_FAILURE;
  71. }
  72. int
  73. test_invoke_esys(ESYS_CONTEXT * esys_context) {
  74. return test_esys_act_set_timeout(esys_context);
  75. }