esys-event-sequence-complete.int.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /* SPDX-License-Identifier: BSD-2-Clause */
  2. /*******************************************************************************
  3. * Copyright 2017-2018, Fraunhofer SIT sponsored by Infineon Technologies AG
  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. #define LOGMODULE test
  13. #include "util/log.h"
  14. #include "util/aux_util.h"
  15. /** Test the ESYS commands HashSequenceStart, SequenceUpdate,
  16. * and EventSequenceComplete.
  17. *
  18. * Tested ESYS commands:
  19. * - Esys_EventSequenceComplete() (M)
  20. * - Esys_HashSequenceStart() (M)
  21. * - Esys_SequenceUpdate() (M)
  22. *
  23. * @param[in,out] esys_context The ESYS_CONTEXT.
  24. * @retval EXIT_FAILURE
  25. * @retval EXIT_SUCCESS
  26. */
  27. int
  28. test_esys_event_sequence_complete(ESYS_CONTEXT * esys_context)
  29. {
  30. TSS2_RC r;
  31. TPM2B_AUTH auth = {.size = 20,
  32. .buffer={10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
  33. 20, 21, 22, 23, 24, 25, 26, 27, 28, 29}};
  34. TPMI_ALG_HASH hashAlg = TPM2_ALG_NULL; /**< enforce event Sequence */
  35. ESYS_TR sequenceHandle_handle;
  36. TPML_DIGEST_VALUES *results = NULL;
  37. r = Esys_HashSequenceStart(esys_context,
  38. ESYS_TR_NONE,
  39. ESYS_TR_NONE,
  40. ESYS_TR_NONE,
  41. &auth,
  42. hashAlg,
  43. &sequenceHandle_handle
  44. );
  45. goto_if_error(r, "Error: HashSequenceStart", error);
  46. TPM2B_MAX_BUFFER buffer = {.size = 20,
  47. .buffer={10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
  48. 20, 21, 22, 23, 24, 25, 26, 27, 28, 29}};
  49. r = Esys_TR_SetAuth(esys_context, sequenceHandle_handle, &auth);
  50. goto_if_error(r, "Error esys TR_SetAuth ", error);
  51. r = Esys_SequenceUpdate(esys_context,
  52. sequenceHandle_handle,
  53. ESYS_TR_PASSWORD,
  54. ESYS_TR_NONE,
  55. ESYS_TR_NONE,
  56. &buffer
  57. );
  58. goto_if_error(r, "Error: SequenceUpdate", error);
  59. ESYS_TR pcrHandle_handle = 16;
  60. r = Esys_EventSequenceComplete (
  61. esys_context,
  62. pcrHandle_handle,
  63. sequenceHandle_handle,
  64. ESYS_TR_PASSWORD,
  65. ESYS_TR_PASSWORD,
  66. ESYS_TR_NONE,
  67. &buffer,
  68. &results);
  69. goto_if_error(r, "Error: EventSequenceComplete", error);
  70. Esys_Free(results);
  71. return EXIT_SUCCESS;
  72. error:
  73. Esys_Free(results);
  74. return EXIT_FAILURE;
  75. }
  76. int
  77. test_invoke_esys(ESYS_CONTEXT * esys_context) {
  78. return test_esys_event_sequence_complete(esys_context);
  79. }