xref: /aosp_15_r20/external/tpm2-tss/test/integration/fapi-pcr-test.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 #include <stdio.h>
13 #include <string.h>
14 #include <inttypes.h>
15 
16 #include "tss2_fapi.h"
17 
18 #include "test-fapi.h"
19 #define LOGMODULE test
20 #include "util/log.h"
21 #include "util/aux_util.h"
22 
23 #define EVENT_SIZE 10
24 
25 /* This is a list of expected value from the test. Possible returns (for different PCR bank
26    configurations) are concatenated into a long string and the test uses strstr() to find a match.*/
27 const char *log_exp[] = {
28 "[\n\
29   {\n\
30     \"recnum\":1,\n\
31     \"pcr\":16,\n\
32     \"digests\":[\n\
33       {\n\
34         \"hashAlg\":\"SHA1\",\n\
35         \"digest\":\"494179714a6cd627239dfededf2de9ef994caf03\"\n\
36       },\n\
37       {\n\
38         \"hashAlg\":\"SHA256\",\n\
39         \"digest\":\"1f825aa2f0020ef7cf91dfa30da4668d791c5d4824fc8e41354b89ec05795ab3\"\n\
40       },\n\
41       {\n\
42         \"hashAlg\":\"SHA384\",\n\
43         \"digest\":\"182e95266adff49059e706c61483478fe0688150c8d08b95fab5cfde961f12d903aaf44104af4ce72ba6a4bf20302b2e\"\n\
44       },\n\
45       {\n\
46         \"hashAlg\":\"SHA512\",\n\
47         \"digest\":\"0f89ee1fcb7b0a4f7809d1267a029719004c5a5e5ec323a7c3523a20974f9a3f202f56fadba4cd9e8d654ab9f2e96dc5c795ea176fa20ede8d854c342f903533\"\n\
48       }\n\
49     ],\n\
50     \"type\":\"tss2\",\n\
51     \"sub_event\":{\n\
52       \"data\":\"00010203040506070809\",\n\
53       \"event\":{\n\
54         \"test\":\"myfile\"\n\
55       }\n\
56     }\n\
57   }\n\
58 ]",
59 "[\n\
60   {\n\
61     \"recnum\":1,\n\
62     \"pcr\":16,\n\
63     \"digests\":[\n\
64       {\n\
65         \"hashAlg\":\"SHA1\",\n\
66         \"digest\":\"494179714a6cd627239dfededf2de9ef994caf03\"\n\
67       },\n\
68       {\n\
69         \"hashAlg\":\"SHA256\",\n\
70         \"digest\":\"1f825aa2f0020ef7cf91dfa30da4668d791c5d4824fc8e41354b89ec05795ab3\"\n\
71       },\n\
72       {\n\
73         \"hashAlg\":\"SHA384\",\n\
74         \"digest\":\"182e95266adff49059e706c61483478fe0688150c8d08b95fab5cfde961f12d903aaf44104af4ce72ba6a4bf20302b2e\"\n\
75       }\n\
76     ],\n\
77     \"type\":\"tss2\",\n\
78     \"sub_event\":{\n\
79       \"data\":\"00010203040506070809\",\n\
80       \"event\":{\n\
81         \"test\":\"myfile\"\n\
82       }\n\
83     }\n\
84   }\n\
85 ]",
86 "[\n\
87   {\n\
88     \"recnum\":1,\n\
89     \"pcr\":16,\n\
90     \"digests\":[\n\
91       {\n\
92         \"hashAlg\":\"SHA1\",\n\
93         \"digest\":\"494179714a6cd627239dfededf2de9ef994caf03\"\n\
94       },\n\
95       {\n\
96         \"hashAlg\":\"SHA256\",\n\
97         \"digest\":\"1f825aa2f0020ef7cf91dfa30da4668d791c5d4824fc8e41354b89ec05795ab3\"\n\
98       }\n\
99     ],\n\
100     \"type\":\"tss2\",\n\
101     \"sub_event\":{\n\
102       \"data\":\"00010203040506070809\",\n\
103       \"event\":{\n\
104         \"test\":\"myfile\"\n\
105       }\n\
106     }\n\
107   }\n\
108 ]",
109 "[\n\
110   {\n\
111     \"recnum\":1,\n\
112     \"pcr\":16,\n\
113     \"digests\":[\n\
114       {\n\
115         \"hashAlg\":\"SHA1\",\n\
116         \"digest\":\"494179714a6cd627239dfededf2de9ef994caf03\"\n\
117       }\n\
118     ],\n\
119     \"type\":\"tss2\",\n\
120     \"sub_event\":{\n\
121       \"data\":\"00010203040506070809\",\n\
122       \"event\":{\n\
123         \"test\":\"myfile\"\n\
124       }\n\
125     }\n\
126   }\n\
127 ]",
128 "[\n\
129   {\n\
130     \"recnum\":1,\n\
131     \"pcr\":16,\n\
132     \"digests\":[\n\
133       {\n\
134         \"hashAlg\":\"SHA256\",\n\
135         \"digest\":\"1f825aa2f0020ef7cf91dfa30da4668d791c5d4824fc8e41354b89ec05795ab3\"\n\
136       }\n\
137     ],\n\
138     \"type\":\"tss2\",\n\
139     \"sub_event\":{\n\
140       \"data\":\"00010203040506070809\",\n\
141       \"event\":{\n\
142         \"test\":\"myfile\"\n\
143       }\n\
144     }\n\
145   }\n\
146 ]" };
147 
148 /** Test the FAPI function FAPI_PcrExtend and Read.
149  *
150  * Tested FAPI commands:
151  *  - Fapi_Provision()
152  *  - Fapi_PcrExtend()
153  *  - Fapi_PcrRead()
154  *  - Fapi_Delete()
155  *
156  * @param[in,out] context The FAPI_CONTEXT.
157  * @retval EXIT_FAILURE
158  * @retval EXIT_SUCCESS
159  */
160 int
test_fapi_pcr_test(FAPI_CONTEXT * context)161 test_fapi_pcr_test(FAPI_CONTEXT *context)
162 {
163     TSS2_RC r;
164     size_t i;
165     uint8_t data[EVENT_SIZE] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
166     size_t pcr_digest_size;
167     uint8_t *pcr_digest = NULL;
168     char *log = NULL;
169 
170     r = Fapi_Provision(context, NULL, NULL, NULL);
171     goto_if_error(r, "Error Fapi_Provision", error);
172 
173     r = pcr_reset(context, 16);
174     goto_if_error(r, "Error pcr_reset", error);
175 
176     r = Fapi_PcrExtend(context, 16, data, EVENT_SIZE, "{ \"test\": \"myfile\" }");
177     goto_if_error(r, "Error Fapi_PcrExtend", error);
178 
179     r = Fapi_PcrRead(context, 16, &pcr_digest,
180                      &pcr_digest_size, &log);
181     goto_if_error(r, "Error Fapi_PcrRead", error);
182 
183     for (i = 0; i < ( sizeof(log_exp) / sizeof(log_exp[0]) ); i++)
184         if (strcmp(log_exp[i], log) == 0)
185             break;
186     if (i >= 3) {
187         LOG_ERROR("Log mismatch. Received: %s", log);
188         goto error;
189     }
190 
191     fprintf(stderr, "\n\Event Log:\n%s\n", log);
192 
193     SAFE_FREE(pcr_digest);
194     SAFE_FREE(log);
195     r = pcr_reset(context, 16);
196     goto_if_error(r, "Error pcr_reset", error);
197 
198     r = Fapi_PcrRead(context, 16, &pcr_digest,
199                      &pcr_digest_size, &log);
200     goto_if_error(r, "Error Fapi_PcrRead", error);
201 
202     r = Fapi_Delete(context, "/HS/SRK");
203     goto_if_error(r, "Error Fapi_Delete", error);
204 
205     SAFE_FREE(pcr_digest);
206     SAFE_FREE(log);
207     return EXIT_SUCCESS;
208 
209 error:
210     Fapi_Delete(context, "/HS/SRK");
211     SAFE_FREE(pcr_digest);
212     SAFE_FREE(log);
213     return EXIT_FAILURE;
214 }
215 
216 int
test_invoke_fapi(FAPI_CONTEXT * context)217 test_invoke_fapi(FAPI_CONTEXT *context)
218 {
219     return test_fapi_pcr_test(context);
220 }
221