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