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