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
7 #ifdef HAVE_CONFIG_H
8 #include <config.h>
9 #endif
10
11 #include <stdlib.h>
12
13 #include "tss2_esys.h"
14
15 #include "esys_iutil.h"
16 #define LOGMODULE test
17 #include "util/log.h"
18 #include "util/aux_util.h"
19
20 /** Test the ESAPI commands HashSequenceStart, SequenceUpdate,
21 * and EventSequenceComplete.
22 *
23 * Tested ESAPI commands:
24 * - Esys_EventSequenceComplete() (M)
25 * - Esys_HashSequenceStart() (M)
26 * - Esys_SequenceUpdate() (M)
27 *
28 * @param[in,out] esys_context The ESYS_CONTEXT.
29 * @retval EXIT_FAILURE
30 * @retval EXIT_SUCCESS
31 */
32
33 int
test_esys_event_sequence_complete(ESYS_CONTEXT * esys_context)34 test_esys_event_sequence_complete(ESYS_CONTEXT * esys_context)
35 {
36 TSS2_RC r;
37
38 TPM2B_AUTH auth = {.size = 20,
39 .buffer={10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
40 20, 21, 22, 23, 24, 25, 26, 27, 28, 29}};
41
42 TPMI_ALG_HASH hashAlg = TPM2_ALG_NULL; /**< enforce event Sequence */
43 ESYS_TR sequenceHandle_handle;
44 TPML_DIGEST_VALUES *results = NULL;
45
46 r = Esys_HashSequenceStart(esys_context,
47 ESYS_TR_NONE,
48 ESYS_TR_NONE,
49 ESYS_TR_NONE,
50 &auth,
51 hashAlg,
52 &sequenceHandle_handle
53 );
54 goto_if_error(r, "Error: HashSequenceStart", error);
55
56 TPM2B_MAX_BUFFER buffer = {.size = 20,
57 .buffer={10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
58 20, 21, 22, 23, 24, 25, 26, 27, 28, 29}};
59
60 r = Esys_TR_SetAuth(esys_context, sequenceHandle_handle, &auth);
61 goto_if_error(r, "Error esys TR_SetAuth ", error);
62
63 r = Esys_SequenceUpdate(esys_context,
64 sequenceHandle_handle,
65 ESYS_TR_PASSWORD,
66 ESYS_TR_NONE,
67 ESYS_TR_NONE,
68 &buffer
69 );
70 goto_if_error(r, "Error: SequenceUpdate", error);
71
72 ESYS_TR pcrHandle_handle = 16;
73
74 r = Esys_EventSequenceComplete (
75 esys_context,
76 pcrHandle_handle,
77 sequenceHandle_handle,
78 ESYS_TR_PASSWORD,
79 ESYS_TR_PASSWORD,
80 ESYS_TR_NONE,
81 &buffer,
82 &results);
83 goto_if_error(r, "Error: EventSequenceComplete", error);
84
85 Esys_Free(results);
86 return EXIT_SUCCESS;
87
88 error:
89 Esys_Free(results);
90 return EXIT_FAILURE;
91 }
92
93 int
test_invoke_esapi(ESYS_CONTEXT * esys_context)94 test_invoke_esapi(ESYS_CONTEXT * esys_context) {
95 return test_esys_event_sequence_complete(esys_context);
96 }
97