blob: 2410fe3436e1cf8ecad54788f504164e0a3fe565 [file] [log] [blame]
Juergen Repp731135d2018-03-27 14:43:03 +02001/*******************************************************************************
2 * Copyright 2017-2018, Fraunhofer SIT sponsored by Infineon Technologies AG
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright notice,
12 * this list of conditions and the following disclaimer in the documentation
13 * and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
25 * THE POSSIBILITY OF SUCH DAMAGE.
26 *******************************************************************************/
27
28#include "tss2_esys.h"
29
30#include "esys_iutil.h"
31#define LOGMODULE test
32#include "util/log.h"
33
Juergen Repp920d7cd2018-04-12 10:09:46 +020034/*
35 * Test the basic commands for PCR processing: Esys_PCR_Extend, Esys_PCR_Read,
36 * Esys_PCR_Reset, Esys_PCR_Event, and Esys_PCR_Allocate
37 */
Juergen Repp731135d2018-03-27 14:43:03 +020038
39int
40test_invoke_esapi(ESYS_CONTEXT * esys_context)
41{
42 uint32_t r = 0;
43
Juergen Repp920d7cd2018-04-12 10:09:46 +020044 ESYS_TR pcrHandle_handle = 16;
Juergen Repp731135d2018-03-27 14:43:03 +020045 TPML_DIGEST_VALUES digests
46 = {
47 .count = 1,
48 .digests = {
49 {
50 .hashAlg = TPM2_ALG_SHA1,
51 .digest = {
Juergen Repp920d7cd2018-04-12 10:09:46 +020052 .sha1 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
53 11, 12, 13, 14, 15, 16, 17, 18, 19}
Juergen Repp731135d2018-03-27 14:43:03 +020054 }
55 },
56 }};
57
Juergen Repp920d7cd2018-04-12 10:09:46 +020058 r = Esys_PCR_Extend(
Juergen Repp731135d2018-03-27 14:43:03 +020059 esys_context,
60 pcrHandle_handle,
Juergen Repp731135d2018-03-27 14:43:03 +020061 ESYS_TR_PASSWORD,
Juergen Repp731135d2018-03-27 14:43:03 +020062 ESYS_TR_NONE,
63 ESYS_TR_NONE,
64 &digests
65 );
66 goto_if_error(r, "Error: PCR_Extend", error);
67
Juergen Repp920d7cd2018-04-12 10:09:46 +020068 TPML_PCR_SELECTION pcrSelectionIn = {
69 .count = 2,
70 .pcrSelections = {
71 { .hash = TPM2_ALG_SHA1,
72 .sizeofSelect = 3,
Schwarzmeier Ricardo (IFAG CCS ESS D SW A)cf4bd782018-05-28 13:59:23 +020073 .pcrSelect = { 01, 00, 03},
Juergen Repp920d7cd2018-04-12 10:09:46 +020074 },
75 { .hash = TPM2_ALG_SHA256,
76 .sizeofSelect = 3,
Schwarzmeier Ricardo (IFAG CCS ESS D SW A)cf4bd782018-05-28 13:59:23 +020077 .pcrSelect = { 01, 00, 03}
Juergen Repp920d7cd2018-04-12 10:09:46 +020078 },
79 }
80 };
81 UINT32 pcrUpdateCounter;
82 TPML_PCR_SELECTION *pcrSelectionOut;
83 TPML_DIGEST *pcrValues;
84
85 r = Esys_PCR_Read(
86 esys_context,
87 ESYS_TR_NONE,
88 ESYS_TR_NONE,
89 ESYS_TR_NONE,
90 &pcrSelectionIn,
91 &pcrUpdateCounter,
92 &pcrSelectionOut,
93 &pcrValues);
94 goto_if_error(r, "Error: PCR_Read", error);
95
96 r = Esys_PCR_Reset(
97 esys_context,
98 pcrHandle_handle,
99 ESYS_TR_PASSWORD,
100 ESYS_TR_NONE,
101 ESYS_TR_NONE);
102
103 goto_if_error(r, "Error: PCR_Reset", error);
104
105 TPM2B_EVENT eventData = { .size = 20,
106 .buffer={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
107 1, 2, 3, 4, 5, 6, 7, 8, 9}};
108 TPML_DIGEST_VALUES *digestsEvent;
109
110 r = Esys_PCR_Event(
111 esys_context,
112 pcrHandle_handle,
113 ESYS_TR_PASSWORD,
114 ESYS_TR_NONE,
115 ESYS_TR_NONE,
116 &eventData,
117 &digestsEvent);
118
119 goto_if_error(r, "Error: PCR_Reset", error);
120
121 TPMI_YES_NO allocationSuccess;
122 UINT32 maxPCR;
123 UINT32 sizeNeeded;
124 UINT32 sizeAvailable;
125
126 r = Esys_PCR_Allocate(
127 esys_context,
128 ESYS_TR_RH_PLATFORM,
129 ESYS_TR_PASSWORD,
130 ESYS_TR_NONE,
131 ESYS_TR_NONE,
132 &pcrSelectionIn,
133 &allocationSuccess,
134 &maxPCR,
135 &sizeNeeded,
136 &sizeAvailable);
137
138 goto_if_error(r, "Error: PCR_Allocate", error);
139
Juergen Repp731135d2018-03-27 14:43:03 +0200140 return 0;
141
142 error:
143 return 1;
144
145}