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