xref: /aosp_15_r20/external/tpm2-tss/test/integration/esys-clockset.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_ClockSet and Esys_ReadClock.
22  *
23  *\b Note: platform authorization needed.
24  *
25  * Tested ESAPI commands:
26  *  - Esys_ClockRateAdjust() (M)
27  *  - Esys_ClockSet() (M)
28  *  - Esys_ReadClock() (M)
29  *
30  * @param[in,out] esys_context The ESYS_CONTEXT.
31  * @retval EXIT_FAILURE
32  * @retval EXIT_SKIP
33  * @retval EXIT_SUCCESS
34  */
35 int
test_esys_clockset(ESYS_CONTEXT * esys_context)36 test_esys_clockset(ESYS_CONTEXT * esys_context)
37 {
38 
39     TSS2_RC r;
40     int failure_return = EXIT_FAILURE;
41 
42     ESYS_TR auth_handle = ESYS_TR_RH_OWNER;
43     TPMS_TIME_INFO *currentTime;
44 
45     r = Esys_ReadClock(esys_context,
46                        ESYS_TR_NONE,
47                        ESYS_TR_NONE,
48                        ESYS_TR_NONE,
49                        &currentTime);
50     goto_if_error(r, "Error: ReadClock", error);
51 
52     UINT64 newTime = currentTime->clockInfo.clock + 010000;
53 
54     r = Esys_ClockSet(esys_context,
55                       auth_handle,
56                       ESYS_TR_PASSWORD,
57                       ESYS_TR_NONE,
58                       ESYS_TR_NONE,
59                       newTime
60                       );
61 
62     if ((r & ~TPM2_RC_N_MASK) == TPM2_RC_BAD_AUTH) {
63         /* Platform authorization not possible test will be skipped */
64         LOG_WARNING("Platform authorization not possible.");
65         failure_return = EXIT_SKIP;
66         goto error;
67     }
68 
69     goto_if_error(r, "Error: ClockSet", error);
70 
71     r = Esys_ClockRateAdjust(esys_context,
72                              auth_handle,
73                              ESYS_TR_PASSWORD,
74                              ESYS_TR_NONE,
75                              ESYS_TR_NONE,
76                              TPM2_CLOCK_MEDIUM_FASTER);
77     goto_if_error(r, "Error: ClockRateAdjust", error);
78 
79     r = Esys_ClockRateAdjust(esys_context,
80                              auth_handle,
81                              ESYS_TR_PASSWORD,
82                              ESYS_TR_NONE,
83                              ESYS_TR_NONE,
84                              TPM2_CLOCK_MEDIUM_SLOWER);
85     goto_if_error(r, "Error: ClockRateAdjust", error);
86 
87 
88     return EXIT_SUCCESS;
89 
90  error:
91     return failure_return;
92 }
93 
94 int
test_invoke_esapi(ESYS_CONTEXT * esys_context)95 test_invoke_esapi(ESYS_CONTEXT * esys_context) {
96     return test_esys_clockset(esys_context);
97 }
98