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