xref: /aosp_15_r20/external/tpm2-tss/test/integration/esys-clear-control.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 #include "test-esapi.h"
17 #define LOGMODULE test
18 #include "util/log.h"
19 #include "util/aux_util.h"
20 
21 /** Test the ESAPI function Esys_ClearControl.
22  *
23  * The clear command will be disabled and with Esys_Clear it will
24  * be checked whether clear is disabled.
25  *
26  * Tested ESAPI commands:
27  *  - Esys_Clear() (M)
28  *  - Esys_ClearControl() (M)
29  *
30  * *\b Note: platform authorization needed.
31  *
32  * @param[in,out] esys_context The ESYS_CONTEXT.
33  * @retval EXIT_FAILURE
34  * @retval EXIT_SUCCESS
35  */
36 int
test_esys_clear_control(ESYS_CONTEXT * esys_context)37 test_esys_clear_control(ESYS_CONTEXT * esys_context)
38 {
39     TSS2_RC r;
40     int failure_return = EXIT_FAILURE;
41 
42     ESYS_TR auth_handle = ESYS_TR_RH_PLATFORM;
43     TPMI_YES_NO disable = TPM2_YES;
44 
45     r = Esys_ClearControl(
46         esys_context,
47         auth_handle,
48         ESYS_TR_PASSWORD,
49         ESYS_TR_NONE,
50         ESYS_TR_NONE,
51         disable);
52 
53     if ((r & ~TPM2_RC_N_MASK) == TPM2_RC_BAD_AUTH ||
54         (r & ~TPM2_RC_N_MASK) == TPM2_RC_HIERARCHY) {
55         /* Platform authorization not possible test will be skipped */
56         LOG_WARNING("Platform authorization not possible.");
57         failure_return =  EXIT_SKIP;
58         goto error;
59     }
60 
61     goto_if_error(r, "Error: ClearControl", error);
62 
63     r = Esys_Clear (
64         esys_context,
65         auth_handle,
66         ESYS_TR_PASSWORD,
67         ESYS_TR_NONE,
68         ESYS_TR_NONE);
69     goto_error_if_not_failed(r, "Error: ClockSet", error);
70 
71     disable = TPM2_NO;
72 
73     r = Esys_ClearControl(
74         esys_context,
75         auth_handle,
76         ESYS_TR_PASSWORD,
77         ESYS_TR_NONE,
78         ESYS_TR_NONE,
79         disable);
80 
81     goto_if_error(r, "Error: ClearControl", error);
82 
83     return EXIT_SUCCESS;
84 
85  error:
86     return failure_return;
87 }
88 
89 int
test_invoke_esapi(ESYS_CONTEXT * esys_context)90 test_invoke_esapi(ESYS_CONTEXT * esys_context) {
91     return test_esys_clear_control(esys_context);
92 }
93