xref: /aosp_15_r20/external/tpm2-tss/test/integration/esys-clear.int.c (revision 758e9fba6fc9adbf15340f70c73baee7b168b1c9)
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 of the ESAPI function Esys_Clear.
21  *
22  * Tested ESAPI commands:
23  *  - Esys_Clear() (M)
24  *  - Esys_FlushContext() (M)
25  *  - Esys_StartAuthSession() (M)
26  *
27  * Used compiler defines: TEST_SESSION
28  *
29  * @param[in,out] esys_context The ESYS_CONTEXT.
30  * @retval EXIT_FAILURE
31  * @retval EXIT_SUCCESS
32  */
33 
34 int
test_esys_clear(ESYS_CONTEXT * esys_context)35 test_esys_clear(ESYS_CONTEXT * esys_context)
36 {
37     TSS2_RC r;
38 
39 #ifdef TEST_SESSION
40     ESYS_TR session = ESYS_TR_NONE;
41     TPMT_SYM_DEF symmetric = {.algorithm = TPM2_ALG_AES,
42                               .keyBits = {.aes = 128},
43                               .mode = {.aes = TPM2_ALG_CFB}
44     };
45     TPMA_SESSION sessionAttributes;
46     TPM2B_NONCE nonceCaller = {
47         .size = 20,
48         .buffer = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
49                    11, 12, 13, 14, 15, 16, 17, 18, 19, 20}
50     };
51 
52     memset(&sessionAttributes, 0, sizeof sessionAttributes);
53 
54     r = Esys_StartAuthSession(esys_context, ESYS_TR_NONE, ESYS_TR_NONE,
55                               ESYS_TR_NONE, ESYS_TR_NONE, ESYS_TR_NONE,
56                               &nonceCaller,
57                               TPM2_SE_HMAC, &symmetric, TPM2_ALG_SHA1,
58                               &session);
59 
60     goto_if_error(r, "Error: During initialization of session", error);
61 #endif /* TEST_SESSION */
62 
63     ESYS_TR authHandle_handle = ESYS_TR_RH_PLATFORM;
64 
65     r = Esys_Clear(esys_context,
66                    authHandle_handle,
67 #ifdef TEST_SESSION
68                    session,
69 #else
70                    ESYS_TR_PASSWORD,
71 #endif
72                    ESYS_TR_NONE,
73                    ESYS_TR_NONE
74                    );
75     goto_if_error(r, "Error: Clear", error);
76 
77 #ifdef TEST_SESSION
78     r = Esys_FlushContext(esys_context, session);
79     goto_if_error(r, "Error: FlushContext", error);
80 #endif
81 
82     return EXIT_SUCCESS;
83 
84  error:
85 
86 #ifdef TEST_SESSION
87     if (session != ESYS_TR_NONE) {
88         if (Esys_FlushContext(esys_context, session) != TSS2_RC_SUCCESS) {
89             LOG_ERROR("Cleanup session failed.");
90         }
91     }
92 #endif
93 
94     return EXIT_FAILURE;
95 }
96 
97 int
test_invoke_esapi(ESYS_CONTEXT * esys_context)98 test_invoke_esapi(ESYS_CONTEXT * esys_context) {
99     return test_esys_clear(esys_context);
100 }
101