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 All
4*758e9fbaSOystein Eftevaag * 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 <stdarg.h>
12*758e9fbaSOystein Eftevaag #include <inttypes.h>
13*758e9fbaSOystein Eftevaag #include <string.h>
14*758e9fbaSOystein Eftevaag #include <stdlib.h>
15*758e9fbaSOystein Eftevaag
16*758e9fbaSOystein Eftevaag #include <setjmp.h>
17*758e9fbaSOystein Eftevaag #include <cmocka.h>
18*758e9fbaSOystein Eftevaag
19*758e9fbaSOystein Eftevaag #include "tss2_esys.h"
20*758e9fbaSOystein Eftevaag
21*758e9fbaSOystein Eftevaag #include "tss2-esys/esys_iutil.h"
22*758e9fbaSOystein Eftevaag #define LOGMODULE tests
23*758e9fbaSOystein Eftevaag #include "util/log.h"
24*758e9fbaSOystein Eftevaag #include "util/aux_util.h"
25*758e9fbaSOystein Eftevaag
26*758e9fbaSOystein Eftevaag /**
27*758e9fbaSOystein Eftevaag * This unit test looks into a set of Esys_<cmd>() functions and tests the
28*758e9fbaSOystein Eftevaag * resubmission behaviour. The ESAPI is expected to resubmit a command for a
29*758e9fbaSOystein Eftevaag * certain number of times if the TPM return RC_YIELDED. After this number of
30*758e9fbaSOystein Eftevaag * times, the ESAPI shall not try it any further but return the TPM's error.
31*758e9fbaSOystein Eftevaag * For all these resubmissions the command must be the same as before.
32*758e9fbaSOystein Eftevaag * This shall be extended to cover all functions at some point.
33*758e9fbaSOystein Eftevaag */
34*758e9fbaSOystein Eftevaag
35*758e9fbaSOystein Eftevaag #define TCTI_TPMERROR_MAGIC 0x5441455252000000ULL /* 'TAERR\0' */
36*758e9fbaSOystein Eftevaag #define TCTI_TPMERROR_VERSION 0x1
37*758e9fbaSOystein Eftevaag
38*758e9fbaSOystein Eftevaag /*
39*758e9fbaSOystein Eftevaag * Esys handles for dummy session and key objects, and initialization values for
40*758e9fbaSOystein Eftevaag * other objects, which can be used in ESAPI test calls
41*758e9fbaSOystein Eftevaag */
42*758e9fbaSOystein Eftevaag #define DUMMY_TR_HANDLE_POLICY_SESSION ESYS_TR_MIN_OBJECT
43*758e9fbaSOystein Eftevaag #define DUMMY_TR_HANDLE_KEY ESYS_TR_MIN_OBJECT+1
44*758e9fbaSOystein Eftevaag #define DUMMY_TR_HANDLE_NV_INDEX ESYS_TR_MIN_OBJECT+2
45*758e9fbaSOystein Eftevaag #define DUMMY_TR_HANDLE_HIERARCHY_OWNER ESYS_TR_MIN_OBJECT+3
46*758e9fbaSOystein Eftevaag #define DUMMY_TR_HANDLE_HIERARCHY_PLATFORM ESYS_TR_MIN_OBJECT+4
47*758e9fbaSOystein Eftevaag #define DUMMY_TR_HANDLE_PRIVACY_ADMIN ESYS_TR_MIN_OBJECT+5
48*758e9fbaSOystein Eftevaag #define DUMMY_TR_HANDLE_HMAC_SESSION ESYS_TR_MIN_OBJECT+6
49*758e9fbaSOystein Eftevaag #define DUMMY_TR_HANDLE_LOCKOUT ESYS_TR_MIN_OBJECT+7
50*758e9fbaSOystein Eftevaag #define DUMMY_IN_PUBLIC_DATA { \
51*758e9fbaSOystein Eftevaag .size = 0, \
52*758e9fbaSOystein Eftevaag .publicArea = { \
53*758e9fbaSOystein Eftevaag .type = TPM2_ALG_ECC, \
54*758e9fbaSOystein Eftevaag .nameAlg = TPM2_ALG_SHA256, \
55*758e9fbaSOystein Eftevaag .objectAttributes = (TPMA_OBJECT_USERWITHAUTH | \
56*758e9fbaSOystein Eftevaag TPMA_OBJECT_RESTRICTED | \
57*758e9fbaSOystein Eftevaag TPMA_OBJECT_SIGN_ENCRYPT | \
58*758e9fbaSOystein Eftevaag TPMA_OBJECT_FIXEDTPM | \
59*758e9fbaSOystein Eftevaag TPMA_OBJECT_FIXEDPARENT | \
60*758e9fbaSOystein Eftevaag TPMA_OBJECT_SENSITIVEDATAORIGIN), \
61*758e9fbaSOystein Eftevaag .authPolicy = { \
62*758e9fbaSOystein Eftevaag .size = 0, \
63*758e9fbaSOystein Eftevaag }, \
64*758e9fbaSOystein Eftevaag .parameters.eccDetail = { \
65*758e9fbaSOystein Eftevaag .symmetric = { \
66*758e9fbaSOystein Eftevaag .algorithm = \
67*758e9fbaSOystein Eftevaag TPM2_ALG_NULL, \
68*758e9fbaSOystein Eftevaag .keyBits.aes = \
69*758e9fbaSOystein Eftevaag 128, \
70*758e9fbaSOystein Eftevaag .mode.aes = \
71*758e9fbaSOystein Eftevaag TPM2_ALG_ECB, \
72*758e9fbaSOystein Eftevaag }, \
73*758e9fbaSOystein Eftevaag .scheme = { \
74*758e9fbaSOystein Eftevaag .scheme = \
75*758e9fbaSOystein Eftevaag TPM2_ALG_ECDSA, \
76*758e9fbaSOystein Eftevaag .details = { \
77*758e9fbaSOystein Eftevaag .ecdsa = \
78*758e9fbaSOystein Eftevaag {. \
79*758e9fbaSOystein Eftevaag hashAlg \
80*758e9fbaSOystein Eftevaag = \
81*758e9fbaSOystein Eftevaag TPM2_ALG_SHA256}}, \
82*758e9fbaSOystein Eftevaag }, \
83*758e9fbaSOystein Eftevaag .curveID = TPM2_ECC_NIST_P256, \
84*758e9fbaSOystein Eftevaag .kdf = { \
85*758e9fbaSOystein Eftevaag .scheme = TPM2_ALG_NULL, \
86*758e9fbaSOystein Eftevaag .details = {}} \
87*758e9fbaSOystein Eftevaag }, \
88*758e9fbaSOystein Eftevaag .unique.ecc = { \
89*758e9fbaSOystein Eftevaag .x = {.size = 0,.buffer = {}}, \
90*758e9fbaSOystein Eftevaag .y = {.size = 0,.buffer = {}}, \
91*758e9fbaSOystein Eftevaag }, \
92*758e9fbaSOystein Eftevaag }, \
93*758e9fbaSOystein Eftevaag }
94*758e9fbaSOystein Eftevaag
95*758e9fbaSOystein Eftevaag #define DUMMY_TPMT_PUBLIC_PARAMS { \
96*758e9fbaSOystein Eftevaag .type = TPM2_ALG_ECC, \
97*758e9fbaSOystein Eftevaag .parameters.eccDetail = { \
98*758e9fbaSOystein Eftevaag .symmetric = { \
99*758e9fbaSOystein Eftevaag .algorithm = \
100*758e9fbaSOystein Eftevaag TPM2_ALG_NULL, \
101*758e9fbaSOystein Eftevaag .keyBits.aes = \
102*758e9fbaSOystein Eftevaag 128, \
103*758e9fbaSOystein Eftevaag .mode.aes = \
104*758e9fbaSOystein Eftevaag TPM2_ALG_ECB, \
105*758e9fbaSOystein Eftevaag }, \
106*758e9fbaSOystein Eftevaag .scheme = { \
107*758e9fbaSOystein Eftevaag .scheme = \
108*758e9fbaSOystein Eftevaag TPM2_ALG_ECDSA, \
109*758e9fbaSOystein Eftevaag .details = { \
110*758e9fbaSOystein Eftevaag .ecdsa = \
111*758e9fbaSOystein Eftevaag {. \
112*758e9fbaSOystein Eftevaag hashAlg \
113*758e9fbaSOystein Eftevaag = \
114*758e9fbaSOystein Eftevaag TPM2_ALG_SHA256}}, \
115*758e9fbaSOystein Eftevaag }, \
116*758e9fbaSOystein Eftevaag .curveID = TPM2_ECC_NIST_P256, \
117*758e9fbaSOystein Eftevaag .kdf = { \
118*758e9fbaSOystein Eftevaag .scheme = TPM2_ALG_NULL, \
119*758e9fbaSOystein Eftevaag .details = {}} \
120*758e9fbaSOystein Eftevaag } \
121*758e9fbaSOystein Eftevaag }
122*758e9fbaSOystein Eftevaag
123*758e9fbaSOystein Eftevaag #define DUMMY_2B_DATA(NAME) { \
124*758e9fbaSOystein Eftevaag .size = 20, \
125*758e9fbaSOystein Eftevaag NAME = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, \
126*758e9fbaSOystein Eftevaag 11, 12, 13, 14, 15, 16, 17, 18, 19, 20} \
127*758e9fbaSOystein Eftevaag }
128*758e9fbaSOystein Eftevaag
129*758e9fbaSOystein Eftevaag #define DUMMY_2B_DATA16(NAME) { \
130*758e9fbaSOystein Eftevaag .size = 16, \
131*758e9fbaSOystein Eftevaag NAME = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, \
132*758e9fbaSOystein Eftevaag 11, 12, 13, 14, 15, 16 } \
133*758e9fbaSOystein Eftevaag }
134*758e9fbaSOystein Eftevaag
135*758e9fbaSOystein Eftevaag #define DUMMY_2B_DATA0 { \
136*758e9fbaSOystein Eftevaag .size = 0, \
137*758e9fbaSOystein Eftevaag .buffer = {}, \
138*758e9fbaSOystein Eftevaag }
139*758e9fbaSOystein Eftevaag
140*758e9fbaSOystein Eftevaag #define DUMMY_SYMMETRIC {.algorithm = TPM2_ALG_AES, \
141*758e9fbaSOystein Eftevaag .keyBits = {.aes = 128}, \
142*758e9fbaSOystein Eftevaag .mode = {.aes = TPM2_ALG_CFB} \
143*758e9fbaSOystein Eftevaag }
144*758e9fbaSOystein Eftevaag
145*758e9fbaSOystein Eftevaag #define DUMMY_TPMT_TK_AUTH { .tag = TPM2_ST_AUTH_SIGNED , .hierarchy = TPM2_RH_OWNER, .digest = {0} }
146*758e9fbaSOystein Eftevaag
147*758e9fbaSOystein Eftevaag #define DUMMY_TPMT_TK_CREATION { .tag = TPM2_ST_CREATION , .hierarchy = TPM2_RH_OWNER, .digest = {0} }
148*758e9fbaSOystein Eftevaag
149*758e9fbaSOystein Eftevaag #define DUMMY_TPMT_TK_VERIFIED { .tag = TPM2_ST_VERIFIED , .hierarchy = TPM2_RH_OWNER, .digest = {0} }
150*758e9fbaSOystein Eftevaag
151*758e9fbaSOystein Eftevaag #define DUMMY_TPMT_TK_HASHCHECK { .tag = TPM2_ST_HASHCHECK , .hierarchy = TPM2_RH_OWNER, .digest = {0} }
152*758e9fbaSOystein Eftevaag
153*758e9fbaSOystein Eftevaag #define DUMMY_RSA_DECRYPT { .scheme = TPM2_ALG_NULL }
154*758e9fbaSOystein Eftevaag
155*758e9fbaSOystein Eftevaag #define DUMMY_TPMT_SIGNATURE { \
156*758e9fbaSOystein Eftevaag .sigAlg = TPM2_ALG_RSAPSS, \
157*758e9fbaSOystein Eftevaag .signature = { \
158*758e9fbaSOystein Eftevaag .rsapss = { \
159*758e9fbaSOystein Eftevaag .hash = TPM2_ALG_SHA1, .sig= {0} \
160*758e9fbaSOystein Eftevaag } \
161*758e9fbaSOystein Eftevaag } \
162*758e9fbaSOystein Eftevaag };
163*758e9fbaSOystein Eftevaag
164*758e9fbaSOystein Eftevaag typedef struct {
165*758e9fbaSOystein Eftevaag uint64_t magic;
166*758e9fbaSOystein Eftevaag uint32_t version;
167*758e9fbaSOystein Eftevaag TSS2_TCTI_TRANSMIT_FCN transmit;
168*758e9fbaSOystein Eftevaag TSS2_TCTI_RECEIVE_FCN receive;
169*758e9fbaSOystein Eftevaag TSS2_RC(*finalize) (TSS2_TCTI_CONTEXT * tctiContext);
170*758e9fbaSOystein Eftevaag TSS2_RC(*cancel) (TSS2_TCTI_CONTEXT * tctiContext);
171*758e9fbaSOystein Eftevaag TSS2_RC(*getPollHandles) (TSS2_TCTI_CONTEXT * tctiContext,
172*758e9fbaSOystein Eftevaag TSS2_TCTI_POLL_HANDLE * handles,
173*758e9fbaSOystein Eftevaag size_t * num_handles);
174*758e9fbaSOystein Eftevaag TSS2_RC(*setLocality) (TSS2_TCTI_CONTEXT * tctiContext, uint8_t locality);
175*758e9fbaSOystein Eftevaag } TSS2_TCTI_CONTEXT_TPMERROR;
176*758e9fbaSOystein Eftevaag
177*758e9fbaSOystein Eftevaag static TSS2_RC
tcti_tpmerror_transmit(TSS2_TCTI_CONTEXT * tctiContext,size_t size,const uint8_t * buffer)178*758e9fbaSOystein Eftevaag tcti_tpmerror_transmit(TSS2_TCTI_CONTEXT * tctiContext,
179*758e9fbaSOystein Eftevaag size_t size, const uint8_t * buffer)
180*758e9fbaSOystein Eftevaag {
181*758e9fbaSOystein Eftevaag (void)(tctiContext);
182*758e9fbaSOystein Eftevaag (void)(size);
183*758e9fbaSOystein Eftevaag (void)(buffer);
184*758e9fbaSOystein Eftevaag
185*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
186*758e9fbaSOystein Eftevaag }
187*758e9fbaSOystein Eftevaag
188*758e9fbaSOystein Eftevaag const uint8_t response[] = {
189*758e9fbaSOystein Eftevaag 0x80, 0x01, /* TPM_ST_NO_SESSION */
190*758e9fbaSOystein Eftevaag 0x00, 0x00, 0x00, 0x0A, /* Response Size 10 */
191*758e9fbaSOystein Eftevaag 0x00, 0x00, 0x0F, 0xFF /* TPM_RC_TODO */
192*758e9fbaSOystein Eftevaag };
193*758e9fbaSOystein Eftevaag
194*758e9fbaSOystein Eftevaag static TSS2_RC
tcti_tpmerror_receive(TSS2_TCTI_CONTEXT * tctiContext,size_t * response_size,uint8_t * response_buffer,int32_t timeout)195*758e9fbaSOystein Eftevaag tcti_tpmerror_receive(TSS2_TCTI_CONTEXT * tctiContext,
196*758e9fbaSOystein Eftevaag size_t * response_size,
197*758e9fbaSOystein Eftevaag uint8_t * response_buffer, int32_t timeout)
198*758e9fbaSOystein Eftevaag {
199*758e9fbaSOystein Eftevaag (void)(tctiContext);
200*758e9fbaSOystein Eftevaag (void) timeout;
201*758e9fbaSOystein Eftevaag
202*758e9fbaSOystein Eftevaag *response_size = sizeof(response);
203*758e9fbaSOystein Eftevaag if (response_buffer != NULL)
204*758e9fbaSOystein Eftevaag memcpy(response_buffer, &response[0], sizeof(response));
205*758e9fbaSOystein Eftevaag
206*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
207*758e9fbaSOystein Eftevaag }
208*758e9fbaSOystein Eftevaag
209*758e9fbaSOystein Eftevaag static void
tcti_tpmerror_finalize(TSS2_TCTI_CONTEXT * tctiContext)210*758e9fbaSOystein Eftevaag tcti_tpmerror_finalize(TSS2_TCTI_CONTEXT * tctiContext)
211*758e9fbaSOystein Eftevaag {
212*758e9fbaSOystein Eftevaag (void)(tctiContext);
213*758e9fbaSOystein Eftevaag }
214*758e9fbaSOystein Eftevaag
215*758e9fbaSOystein Eftevaag static TSS2_RC
tcti_tpmerror_initialize(TSS2_TCTI_CONTEXT * tctiContext,size_t * contextSize)216*758e9fbaSOystein Eftevaag tcti_tpmerror_initialize(TSS2_TCTI_CONTEXT * tctiContext, size_t * contextSize)
217*758e9fbaSOystein Eftevaag {
218*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT_TPMERROR *tcti_tpmerror =
219*758e9fbaSOystein Eftevaag (TSS2_TCTI_CONTEXT_TPMERROR *) tctiContext;
220*758e9fbaSOystein Eftevaag
221*758e9fbaSOystein Eftevaag if (tctiContext == NULL && contextSize == NULL) {
222*758e9fbaSOystein Eftevaag return TSS2_TCTI_RC_BAD_VALUE;
223*758e9fbaSOystein Eftevaag } else if (tctiContext == NULL) {
224*758e9fbaSOystein Eftevaag *contextSize = sizeof(*tcti_tpmerror);
225*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
226*758e9fbaSOystein Eftevaag }
227*758e9fbaSOystein Eftevaag
228*758e9fbaSOystein Eftevaag /* Init TCTI context */
229*758e9fbaSOystein Eftevaag memset(tcti_tpmerror, 0, sizeof(*tcti_tpmerror));
230*758e9fbaSOystein Eftevaag TSS2_TCTI_MAGIC(tctiContext) = TCTI_TPMERROR_MAGIC;
231*758e9fbaSOystein Eftevaag TSS2_TCTI_VERSION(tctiContext) = TCTI_TPMERROR_VERSION;
232*758e9fbaSOystein Eftevaag TSS2_TCTI_TRANSMIT(tctiContext) = tcti_tpmerror_transmit;
233*758e9fbaSOystein Eftevaag TSS2_TCTI_RECEIVE(tctiContext) = tcti_tpmerror_receive;
234*758e9fbaSOystein Eftevaag TSS2_TCTI_FINALIZE(tctiContext) = tcti_tpmerror_finalize;
235*758e9fbaSOystein Eftevaag TSS2_TCTI_CANCEL(tctiContext) = NULL;
236*758e9fbaSOystein Eftevaag TSS2_TCTI_GET_POLL_HANDLES(tctiContext) = NULL;
237*758e9fbaSOystein Eftevaag TSS2_TCTI_SET_LOCALITY(tctiContext) = NULL;
238*758e9fbaSOystein Eftevaag
239*758e9fbaSOystein Eftevaag return TSS2_RC_SUCCESS;
240*758e9fbaSOystein Eftevaag }
241*758e9fbaSOystein Eftevaag
242*758e9fbaSOystein Eftevaag static int
setup(void ** state)243*758e9fbaSOystein Eftevaag setup(void **state)
244*758e9fbaSOystein Eftevaag {
245*758e9fbaSOystein Eftevaag TSS2_RC r;
246*758e9fbaSOystein Eftevaag ESYS_CONTEXT *ectx;
247*758e9fbaSOystein Eftevaag size_t size = sizeof(TSS2_TCTI_CONTEXT_TPMERROR);
248*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti = malloc(size);
249*758e9fbaSOystein Eftevaag ESYS_TR objectHandle;
250*758e9fbaSOystein Eftevaag RSRC_NODE_T *objectHandleNode = NULL;
251*758e9fbaSOystein Eftevaag
252*758e9fbaSOystein Eftevaag r = tcti_tpmerror_initialize(tcti, &size);
253*758e9fbaSOystein Eftevaag if (r)
254*758e9fbaSOystein Eftevaag return (int)r;
255*758e9fbaSOystein Eftevaag r = Esys_Initialize(&ectx, tcti, NULL);
256*758e9fbaSOystein Eftevaag if (r)
257*758e9fbaSOystein Eftevaag return (int)r;
258*758e9fbaSOystein Eftevaag
259*758e9fbaSOystein Eftevaag /* Create dummy object to enable usage of SAPI prepare functions in the tests */
260*758e9fbaSOystein Eftevaag objectHandle = DUMMY_TR_HANDLE_POLICY_SESSION;
261*758e9fbaSOystein Eftevaag r = esys_CreateResourceObject(ectx, objectHandle, &objectHandleNode);
262*758e9fbaSOystein Eftevaag if (r)
263*758e9fbaSOystein Eftevaag return (int)r;
264*758e9fbaSOystein Eftevaag objectHandleNode->rsrc.rsrcType = IESYSC_SESSION_RSRC;
265*758e9fbaSOystein Eftevaag objectHandleNode->rsrc.handle = TPM2_POLICY_SESSION_FIRST;
266*758e9fbaSOystein Eftevaag
267*758e9fbaSOystein Eftevaag objectHandle = DUMMY_TR_HANDLE_HMAC_SESSION;
268*758e9fbaSOystein Eftevaag r = esys_CreateResourceObject(ectx, objectHandle, &objectHandleNode);
269*758e9fbaSOystein Eftevaag if (r)
270*758e9fbaSOystein Eftevaag return (int)r;
271*758e9fbaSOystein Eftevaag objectHandleNode->rsrc.rsrcType = IESYSC_SESSION_RSRC;
272*758e9fbaSOystein Eftevaag objectHandleNode->rsrc.handle = TPM2_HMAC_SESSION_FIRST;
273*758e9fbaSOystein Eftevaag
274*758e9fbaSOystein Eftevaag objectHandle = DUMMY_TR_HANDLE_KEY;
275*758e9fbaSOystein Eftevaag r = esys_CreateResourceObject(ectx, objectHandle, &objectHandleNode);
276*758e9fbaSOystein Eftevaag if (r)
277*758e9fbaSOystein Eftevaag return (int)r;
278*758e9fbaSOystein Eftevaag objectHandleNode->rsrc.rsrcType = IESYSC_KEY_RSRC;
279*758e9fbaSOystein Eftevaag objectHandleNode->rsrc.handle = TPM2_TRANSIENT_FIRST;
280*758e9fbaSOystein Eftevaag
281*758e9fbaSOystein Eftevaag objectHandle = DUMMY_TR_HANDLE_HIERARCHY_OWNER;
282*758e9fbaSOystein Eftevaag r = esys_CreateResourceObject(ectx, objectHandle, &objectHandleNode);
283*758e9fbaSOystein Eftevaag if (r)
284*758e9fbaSOystein Eftevaag return (int)r;
285*758e9fbaSOystein Eftevaag objectHandleNode->rsrc.rsrcType = IESYSC_WITHOUT_MISC_RSRC;
286*758e9fbaSOystein Eftevaag objectHandleNode->rsrc.handle = TPM2_RH_OWNER;
287*758e9fbaSOystein Eftevaag
288*758e9fbaSOystein Eftevaag objectHandle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
289*758e9fbaSOystein Eftevaag r = esys_CreateResourceObject(ectx, objectHandle, &objectHandleNode);
290*758e9fbaSOystein Eftevaag if (r)
291*758e9fbaSOystein Eftevaag return (int)r;
292*758e9fbaSOystein Eftevaag objectHandleNode->rsrc.rsrcType = IESYSC_WITHOUT_MISC_RSRC;
293*758e9fbaSOystein Eftevaag objectHandleNode->rsrc.handle = TPM2_RH_PLATFORM;
294*758e9fbaSOystein Eftevaag
295*758e9fbaSOystein Eftevaag objectHandle = DUMMY_TR_HANDLE_LOCKOUT;
296*758e9fbaSOystein Eftevaag r = esys_CreateResourceObject(ectx, objectHandle, &objectHandleNode);
297*758e9fbaSOystein Eftevaag if (r)
298*758e9fbaSOystein Eftevaag return (int)r;
299*758e9fbaSOystein Eftevaag objectHandleNode->rsrc.rsrcType = IESYSC_WITHOUT_MISC_RSRC;
300*758e9fbaSOystein Eftevaag objectHandleNode->rsrc.handle = TPM2_RH_LOCKOUT;
301*758e9fbaSOystein Eftevaag
302*758e9fbaSOystein Eftevaag objectHandle = DUMMY_TR_HANDLE_NV_INDEX;
303*758e9fbaSOystein Eftevaag r = esys_CreateResourceObject(ectx, objectHandle, &objectHandleNode);
304*758e9fbaSOystein Eftevaag if (r)
305*758e9fbaSOystein Eftevaag return (int)r;
306*758e9fbaSOystein Eftevaag objectHandleNode->rsrc.rsrcType = IESYSC_WITHOUT_MISC_RSRC;
307*758e9fbaSOystein Eftevaag objectHandleNode->rsrc.handle = TPM2_NV_INDEX_FIRST;
308*758e9fbaSOystein Eftevaag
309*758e9fbaSOystein Eftevaag objectHandle = DUMMY_TR_HANDLE_PRIVACY_ADMIN;
310*758e9fbaSOystein Eftevaag r = esys_CreateResourceObject(ectx, objectHandle, &objectHandleNode);
311*758e9fbaSOystein Eftevaag if (r)
312*758e9fbaSOystein Eftevaag return (int)r;
313*758e9fbaSOystein Eftevaag objectHandleNode->rsrc.rsrcType = IESYSC_WITHOUT_MISC_RSRC;
314*758e9fbaSOystein Eftevaag objectHandleNode->rsrc.handle = TPM2_RH_ENDORSEMENT;
315*758e9fbaSOystein Eftevaag *state = (void *)ectx;
316*758e9fbaSOystein Eftevaag return 0;
317*758e9fbaSOystein Eftevaag }
318*758e9fbaSOystein Eftevaag
319*758e9fbaSOystein Eftevaag static int
teardown(void ** state)320*758e9fbaSOystein Eftevaag teardown(void **state)
321*758e9fbaSOystein Eftevaag {
322*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
323*758e9fbaSOystein Eftevaag ESYS_CONTEXT *ectx = (ESYS_CONTEXT *) * state;
324*758e9fbaSOystein Eftevaag Esys_GetTcti(ectx, &tcti);
325*758e9fbaSOystein Eftevaag Esys_Finalize(&ectx);
326*758e9fbaSOystein Eftevaag free(tcti);
327*758e9fbaSOystein Eftevaag return 0;
328*758e9fbaSOystein Eftevaag }
329*758e9fbaSOystein Eftevaag
330*758e9fbaSOystein Eftevaag static void
test_Startup(void ** state)331*758e9fbaSOystein Eftevaag test_Startup(void **state)
332*758e9fbaSOystein Eftevaag {
333*758e9fbaSOystein Eftevaag TSS2_RC r;
334*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
335*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
336*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
337*758e9fbaSOystein Eftevaag
338*758e9fbaSOystein Eftevaag TPM2_SU startupType = TPM2_SU_CLEAR;
339*758e9fbaSOystein Eftevaag r = Esys_Startup(esys_context, startupType);
340*758e9fbaSOystein Eftevaag
341*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
342*758e9fbaSOystein Eftevaag }
343*758e9fbaSOystein Eftevaag
344*758e9fbaSOystein Eftevaag static void
test_Shutdown(void ** state)345*758e9fbaSOystein Eftevaag test_Shutdown(void **state)
346*758e9fbaSOystein Eftevaag {
347*758e9fbaSOystein Eftevaag TSS2_RC r;
348*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
349*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
350*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
351*758e9fbaSOystein Eftevaag
352*758e9fbaSOystein Eftevaag TPM2_SU shutdownType = TPM2_SU_CLEAR;
353*758e9fbaSOystein Eftevaag r = Esys_Shutdown(esys_context,
354*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, ESYS_TR_NONE, shutdownType);
355*758e9fbaSOystein Eftevaag
356*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
357*758e9fbaSOystein Eftevaag }
358*758e9fbaSOystein Eftevaag
359*758e9fbaSOystein Eftevaag static void
test_SelfTest(void ** state)360*758e9fbaSOystein Eftevaag test_SelfTest(void **state)
361*758e9fbaSOystein Eftevaag {
362*758e9fbaSOystein Eftevaag TSS2_RC r;
363*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
364*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
365*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
366*758e9fbaSOystein Eftevaag
367*758e9fbaSOystein Eftevaag r = Esys_SelfTest(esys_context,
368*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, ESYS_TR_NONE, 0);
369*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
370*758e9fbaSOystein Eftevaag }
371*758e9fbaSOystein Eftevaag
372*758e9fbaSOystein Eftevaag static void
test_IncrementalSelfTest(void ** state)373*758e9fbaSOystein Eftevaag test_IncrementalSelfTest(void **state)
374*758e9fbaSOystein Eftevaag {
375*758e9fbaSOystein Eftevaag TSS2_RC r;
376*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
377*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
378*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
379*758e9fbaSOystein Eftevaag
380*758e9fbaSOystein Eftevaag TPML_ALG toTest = {0};
381*758e9fbaSOystein Eftevaag TPML_ALG *toDoList = {0} ;
382*758e9fbaSOystein Eftevaag r = Esys_IncrementalSelfTest(esys_context,
383*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
384*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
385*758e9fbaSOystein Eftevaag ESYS_TR_NONE, &toTest, &toDoList);
386*758e9fbaSOystein Eftevaag
387*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
388*758e9fbaSOystein Eftevaag }
389*758e9fbaSOystein Eftevaag
390*758e9fbaSOystein Eftevaag static void
test_GetTestResult(void ** state)391*758e9fbaSOystein Eftevaag test_GetTestResult(void **state)
392*758e9fbaSOystein Eftevaag {
393*758e9fbaSOystein Eftevaag TSS2_RC r;
394*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
395*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
396*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
397*758e9fbaSOystein Eftevaag
398*758e9fbaSOystein Eftevaag TPM2B_MAX_BUFFER *outData;
399*758e9fbaSOystein Eftevaag TPM2_RC testResult;
400*758e9fbaSOystein Eftevaag r = Esys_GetTestResult(esys_context,
401*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
402*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, &outData, &testResult);
403*758e9fbaSOystein Eftevaag
404*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
405*758e9fbaSOystein Eftevaag }
406*758e9fbaSOystein Eftevaag
407*758e9fbaSOystein Eftevaag static void
test_StartAuthSession(void ** state)408*758e9fbaSOystein Eftevaag test_StartAuthSession(void **state)
409*758e9fbaSOystein Eftevaag {
410*758e9fbaSOystein Eftevaag TSS2_RC r;
411*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
412*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
413*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
414*758e9fbaSOystein Eftevaag
415*758e9fbaSOystein Eftevaag ESYS_TR tpmKey_handle = ESYS_TR_NONE;
416*758e9fbaSOystein Eftevaag ESYS_TR bind_handle = ESYS_TR_NONE;
417*758e9fbaSOystein Eftevaag TPM2B_NONCE nonceCaller = DUMMY_2B_DATA(.buffer);
418*758e9fbaSOystein Eftevaag TPM2_SE sessionType = TPM2_SE_HMAC;
419*758e9fbaSOystein Eftevaag TPMT_SYM_DEF symmetric = {.algorithm = TPM2_ALG_AES,
420*758e9fbaSOystein Eftevaag .keyBits = {.aes = 128},
421*758e9fbaSOystein Eftevaag .mode = {.aes = TPM2_ALG_CFB}
422*758e9fbaSOystein Eftevaag };
423*758e9fbaSOystein Eftevaag TPMI_ALG_HASH authHash = TPM2_ALG_SHA1;
424*758e9fbaSOystein Eftevaag ESYS_TR sessionHandle_handle;
425*758e9fbaSOystein Eftevaag
426*758e9fbaSOystein Eftevaag r = Esys_StartAuthSession(esys_context,
427*758e9fbaSOystein Eftevaag tpmKey_handle,
428*758e9fbaSOystein Eftevaag bind_handle,
429*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
430*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
431*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
432*758e9fbaSOystein Eftevaag &nonceCaller,
433*758e9fbaSOystein Eftevaag sessionType,
434*758e9fbaSOystein Eftevaag &symmetric,
435*758e9fbaSOystein Eftevaag authHash, &sessionHandle_handle);
436*758e9fbaSOystein Eftevaag
437*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
438*758e9fbaSOystein Eftevaag }
439*758e9fbaSOystein Eftevaag
440*758e9fbaSOystein Eftevaag static void
test_PolicyRestart(void ** state)441*758e9fbaSOystein Eftevaag test_PolicyRestart(void **state)
442*758e9fbaSOystein Eftevaag {
443*758e9fbaSOystein Eftevaag TSS2_RC r;
444*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
445*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
446*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
447*758e9fbaSOystein Eftevaag
448*758e9fbaSOystein Eftevaag r = Esys_PolicyRestart(esys_context,
449*758e9fbaSOystein Eftevaag DUMMY_TR_HANDLE_POLICY_SESSION,
450*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, ESYS_TR_NONE);
451*758e9fbaSOystein Eftevaag
452*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
453*758e9fbaSOystein Eftevaag }
454*758e9fbaSOystein Eftevaag
455*758e9fbaSOystein Eftevaag static void
test_Create(void ** state)456*758e9fbaSOystein Eftevaag test_Create(void **state)
457*758e9fbaSOystein Eftevaag {
458*758e9fbaSOystein Eftevaag TSS2_RC r;
459*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
460*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
461*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
462*758e9fbaSOystein Eftevaag TPM2B_SENSITIVE_CREATE inSensitive = { 0 };
463*758e9fbaSOystein Eftevaag TPM2B_PUBLIC inPublic = DUMMY_IN_PUBLIC_DATA;
464*758e9fbaSOystein Eftevaag TPM2B_DATA outsideInfo = DUMMY_2B_DATA0;
465*758e9fbaSOystein Eftevaag TPML_PCR_SELECTION creationPCR = {
466*758e9fbaSOystein Eftevaag .count = 0,
467*758e9fbaSOystein Eftevaag };
468*758e9fbaSOystein Eftevaag TPM2B_PRIVATE *outPrivate;
469*758e9fbaSOystein Eftevaag TPM2B_PUBLIC *outPublic;
470*758e9fbaSOystein Eftevaag TPM2B_CREATION_DATA *creationData;
471*758e9fbaSOystein Eftevaag TPM2B_DIGEST *creationHash;
472*758e9fbaSOystein Eftevaag TPMT_TK_CREATION *creationTicket;
473*758e9fbaSOystein Eftevaag
474*758e9fbaSOystein Eftevaag r = Esys_Create(esys_context,
475*758e9fbaSOystein Eftevaag DUMMY_TR_HANDLE_KEY,
476*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
477*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
478*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
479*758e9fbaSOystein Eftevaag &inSensitive,
480*758e9fbaSOystein Eftevaag &inPublic,
481*758e9fbaSOystein Eftevaag &outsideInfo,
482*758e9fbaSOystein Eftevaag &creationPCR,
483*758e9fbaSOystein Eftevaag &outPrivate,
484*758e9fbaSOystein Eftevaag &outPublic, &creationData, &creationHash, &creationTicket);
485*758e9fbaSOystein Eftevaag
486*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
487*758e9fbaSOystein Eftevaag }
488*758e9fbaSOystein Eftevaag
489*758e9fbaSOystein Eftevaag static void
test_Load(void ** state)490*758e9fbaSOystein Eftevaag test_Load(void **state)
491*758e9fbaSOystein Eftevaag {
492*758e9fbaSOystein Eftevaag TSS2_RC r;
493*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
494*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
495*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
496*758e9fbaSOystein Eftevaag
497*758e9fbaSOystein Eftevaag TPM2B_PRIVATE inPrivate = DUMMY_2B_DATA(.buffer);
498*758e9fbaSOystein Eftevaag TPM2B_PUBLIC inPublic = DUMMY_IN_PUBLIC_DATA;
499*758e9fbaSOystein Eftevaag ESYS_TR objectHandle_handle;
500*758e9fbaSOystein Eftevaag r = Esys_Load(esys_context,
501*758e9fbaSOystein Eftevaag DUMMY_TR_HANDLE_KEY,
502*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
503*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
504*758e9fbaSOystein Eftevaag ESYS_TR_NONE, &inPrivate, &inPublic, &objectHandle_handle);
505*758e9fbaSOystein Eftevaag
506*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
507*758e9fbaSOystein Eftevaag }
508*758e9fbaSOystein Eftevaag
509*758e9fbaSOystein Eftevaag static void
test_LoadExternal(void ** state)510*758e9fbaSOystein Eftevaag test_LoadExternal(void **state)
511*758e9fbaSOystein Eftevaag {
512*758e9fbaSOystein Eftevaag TSS2_RC r;
513*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
514*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
515*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
516*758e9fbaSOystein Eftevaag
517*758e9fbaSOystein Eftevaag TPM2B_PUBLIC inPublic = DUMMY_IN_PUBLIC_DATA;
518*758e9fbaSOystein Eftevaag ESYS_TR objectHandle_handle;
519*758e9fbaSOystein Eftevaag r = Esys_LoadExternal(esys_context,
520*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
521*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
522*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
523*758e9fbaSOystein Eftevaag NULL, &inPublic, TPM2_RH_OWNER, &objectHandle_handle);
524*758e9fbaSOystein Eftevaag
525*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
526*758e9fbaSOystein Eftevaag }
527*758e9fbaSOystein Eftevaag
528*758e9fbaSOystein Eftevaag static void
test_ReadPublic(void ** state)529*758e9fbaSOystein Eftevaag test_ReadPublic(void **state)
530*758e9fbaSOystein Eftevaag {
531*758e9fbaSOystein Eftevaag TSS2_RC r;
532*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
533*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
534*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
535*758e9fbaSOystein Eftevaag
536*758e9fbaSOystein Eftevaag ESYS_TR objectHandle_handle = DUMMY_TR_HANDLE_KEY;
537*758e9fbaSOystein Eftevaag TPM2B_PUBLIC *outPublic;
538*758e9fbaSOystein Eftevaag TPM2B_NAME *name;
539*758e9fbaSOystein Eftevaag TPM2B_NAME *qualifiedName;
540*758e9fbaSOystein Eftevaag r = Esys_ReadPublic(esys_context,
541*758e9fbaSOystein Eftevaag objectHandle_handle,
542*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
543*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
544*758e9fbaSOystein Eftevaag ESYS_TR_NONE, &outPublic, &name, &qualifiedName);
545*758e9fbaSOystein Eftevaag
546*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
547*758e9fbaSOystein Eftevaag }
548*758e9fbaSOystein Eftevaag
549*758e9fbaSOystein Eftevaag static void
test_ActivateCredential(void ** state)550*758e9fbaSOystein Eftevaag test_ActivateCredential(void **state)
551*758e9fbaSOystein Eftevaag {
552*758e9fbaSOystein Eftevaag TSS2_RC r;
553*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
554*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
555*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
556*758e9fbaSOystein Eftevaag
557*758e9fbaSOystein Eftevaag ESYS_TR activateHandle_handle = DUMMY_TR_HANDLE_KEY;
558*758e9fbaSOystein Eftevaag ESYS_TR keyHandle_handle = DUMMY_TR_HANDLE_KEY;
559*758e9fbaSOystein Eftevaag TPM2B_ID_OBJECT credentialBlob = DUMMY_2B_DATA(.credential);
560*758e9fbaSOystein Eftevaag TPM2B_ENCRYPTED_SECRET secret = DUMMY_2B_DATA(.secret);;
561*758e9fbaSOystein Eftevaag TPM2B_DIGEST *certInfo;
562*758e9fbaSOystein Eftevaag r = Esys_ActivateCredential(esys_context,
563*758e9fbaSOystein Eftevaag activateHandle_handle,
564*758e9fbaSOystein Eftevaag keyHandle_handle,
565*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
566*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
567*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
568*758e9fbaSOystein Eftevaag &credentialBlob, &secret, &certInfo);
569*758e9fbaSOystein Eftevaag
570*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
571*758e9fbaSOystein Eftevaag }
572*758e9fbaSOystein Eftevaag
573*758e9fbaSOystein Eftevaag static void
test_MakeCredential(void ** state)574*758e9fbaSOystein Eftevaag test_MakeCredential(void **state)
575*758e9fbaSOystein Eftevaag {
576*758e9fbaSOystein Eftevaag TSS2_RC r;
577*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
578*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
579*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
580*758e9fbaSOystein Eftevaag
581*758e9fbaSOystein Eftevaag ESYS_TR handle_handle = ESYS_TR_NONE;
582*758e9fbaSOystein Eftevaag TPM2B_DIGEST credential = DUMMY_2B_DATA(.buffer);
583*758e9fbaSOystein Eftevaag TPM2B_NAME objectName = DUMMY_2B_DATA(.name);;
584*758e9fbaSOystein Eftevaag TPM2B_ID_OBJECT *credentialBlob;
585*758e9fbaSOystein Eftevaag TPM2B_ENCRYPTED_SECRET *secret;
586*758e9fbaSOystein Eftevaag r = Esys_MakeCredential(esys_context,
587*758e9fbaSOystein Eftevaag handle_handle,
588*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
589*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
590*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
591*758e9fbaSOystein Eftevaag &credential, &objectName, &credentialBlob, &secret);
592*758e9fbaSOystein Eftevaag
593*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
594*758e9fbaSOystein Eftevaag }
595*758e9fbaSOystein Eftevaag
596*758e9fbaSOystein Eftevaag static void
test_Unseal(void ** state)597*758e9fbaSOystein Eftevaag test_Unseal(void **state)
598*758e9fbaSOystein Eftevaag {
599*758e9fbaSOystein Eftevaag TSS2_RC r;
600*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
601*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
602*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
603*758e9fbaSOystein Eftevaag
604*758e9fbaSOystein Eftevaag ESYS_TR itemHandle_handle = DUMMY_TR_HANDLE_KEY;
605*758e9fbaSOystein Eftevaag TPM2B_SENSITIVE_DATA *outData;
606*758e9fbaSOystein Eftevaag r = Esys_Unseal(esys_context,
607*758e9fbaSOystein Eftevaag itemHandle_handle,
608*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD, ESYS_TR_NONE, ESYS_TR_NONE, &outData);
609*758e9fbaSOystein Eftevaag
610*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
611*758e9fbaSOystein Eftevaag }
612*758e9fbaSOystein Eftevaag
613*758e9fbaSOystein Eftevaag static void
test_ObjectChangeAuth(void ** state)614*758e9fbaSOystein Eftevaag test_ObjectChangeAuth(void **state)
615*758e9fbaSOystein Eftevaag {
616*758e9fbaSOystein Eftevaag TSS2_RC r;
617*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
618*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
619*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
620*758e9fbaSOystein Eftevaag
621*758e9fbaSOystein Eftevaag ESYS_TR objectHandle_handle = DUMMY_TR_HANDLE_KEY;
622*758e9fbaSOystein Eftevaag ESYS_TR parentHandle_handle = DUMMY_TR_HANDLE_KEY;
623*758e9fbaSOystein Eftevaag TPM2B_AUTH newAuth = DUMMY_2B_DATA(.buffer);
624*758e9fbaSOystein Eftevaag TPM2B_PRIVATE *outPrivate;
625*758e9fbaSOystein Eftevaag r = Esys_ObjectChangeAuth(esys_context,
626*758e9fbaSOystein Eftevaag objectHandle_handle,
627*758e9fbaSOystein Eftevaag parentHandle_handle,
628*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
629*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
630*758e9fbaSOystein Eftevaag ESYS_TR_NONE, &newAuth, &outPrivate);
631*758e9fbaSOystein Eftevaag
632*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
633*758e9fbaSOystein Eftevaag }
634*758e9fbaSOystein Eftevaag
635*758e9fbaSOystein Eftevaag static void
test_Duplicate(void ** state)636*758e9fbaSOystein Eftevaag test_Duplicate(void **state)
637*758e9fbaSOystein Eftevaag {
638*758e9fbaSOystein Eftevaag TSS2_RC r;
639*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
640*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
641*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
642*758e9fbaSOystein Eftevaag
643*758e9fbaSOystein Eftevaag ESYS_TR objectHandle_handle = DUMMY_TR_HANDLE_KEY;
644*758e9fbaSOystein Eftevaag ESYS_TR newParentHandle_handle = DUMMY_TR_HANDLE_KEY;
645*758e9fbaSOystein Eftevaag TPM2B_DATA encryptionKeyIn = DUMMY_2B_DATA(.buffer);
646*758e9fbaSOystein Eftevaag TPMT_SYM_DEF_OBJECT symmetricAlg = DUMMY_SYMMETRIC;
647*758e9fbaSOystein Eftevaag TPM2B_DATA *encryptionKeyOut;
648*758e9fbaSOystein Eftevaag TPM2B_PRIVATE *duplicate;
649*758e9fbaSOystein Eftevaag TPM2B_ENCRYPTED_SECRET *outSymSeed;
650*758e9fbaSOystein Eftevaag r = Esys_Duplicate(esys_context,
651*758e9fbaSOystein Eftevaag objectHandle_handle,
652*758e9fbaSOystein Eftevaag newParentHandle_handle,
653*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
654*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
655*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
656*758e9fbaSOystein Eftevaag &encryptionKeyIn,
657*758e9fbaSOystein Eftevaag &symmetricAlg,
658*758e9fbaSOystein Eftevaag &encryptionKeyOut, &duplicate, &outSymSeed);
659*758e9fbaSOystein Eftevaag
660*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
661*758e9fbaSOystein Eftevaag }
662*758e9fbaSOystein Eftevaag
663*758e9fbaSOystein Eftevaag static void
test_Rewrap(void ** state)664*758e9fbaSOystein Eftevaag test_Rewrap(void **state)
665*758e9fbaSOystein Eftevaag {
666*758e9fbaSOystein Eftevaag TSS2_RC r;
667*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
668*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
669*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
670*758e9fbaSOystein Eftevaag
671*758e9fbaSOystein Eftevaag ESYS_TR oldParent_handle = DUMMY_TR_HANDLE_KEY;
672*758e9fbaSOystein Eftevaag ESYS_TR newParent_handle = DUMMY_TR_HANDLE_KEY;
673*758e9fbaSOystein Eftevaag TPM2B_PRIVATE inDuplicate = DUMMY_2B_DATA(.buffer);
674*758e9fbaSOystein Eftevaag TPM2B_NAME name = DUMMY_2B_DATA(.name);
675*758e9fbaSOystein Eftevaag TPM2B_ENCRYPTED_SECRET inSymSeed = DUMMY_2B_DATA(.secret);
676*758e9fbaSOystein Eftevaag TPM2B_PRIVATE *outDuplicate;
677*758e9fbaSOystein Eftevaag TPM2B_ENCRYPTED_SECRET *outSymSeed;
678*758e9fbaSOystein Eftevaag r = Esys_Rewrap(esys_context,
679*758e9fbaSOystein Eftevaag oldParent_handle,
680*758e9fbaSOystein Eftevaag newParent_handle,
681*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
682*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
683*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
684*758e9fbaSOystein Eftevaag &inDuplicate,
685*758e9fbaSOystein Eftevaag &name, &inSymSeed, &outDuplicate, &outSymSeed);
686*758e9fbaSOystein Eftevaag
687*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
688*758e9fbaSOystein Eftevaag }
689*758e9fbaSOystein Eftevaag
690*758e9fbaSOystein Eftevaag static void
test_Import(void ** state)691*758e9fbaSOystein Eftevaag test_Import(void **state)
692*758e9fbaSOystein Eftevaag {
693*758e9fbaSOystein Eftevaag TSS2_RC r;
694*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
695*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
696*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
697*758e9fbaSOystein Eftevaag
698*758e9fbaSOystein Eftevaag ESYS_TR parentHandle_handle = DUMMY_TR_HANDLE_KEY;
699*758e9fbaSOystein Eftevaag TPM2B_DATA encryptionKey = DUMMY_2B_DATA(.buffer);
700*758e9fbaSOystein Eftevaag TPM2B_PUBLIC objectPublic = DUMMY_IN_PUBLIC_DATA;
701*758e9fbaSOystein Eftevaag TPM2B_PRIVATE duplicate = DUMMY_2B_DATA(.buffer);
702*758e9fbaSOystein Eftevaag TPM2B_ENCRYPTED_SECRET inSymSeed = DUMMY_2B_DATA(.secret);
703*758e9fbaSOystein Eftevaag TPMT_SYM_DEF_OBJECT symmetricAlg = DUMMY_SYMMETRIC;
704*758e9fbaSOystein Eftevaag TPM2B_PRIVATE *outPrivate;
705*758e9fbaSOystein Eftevaag r = Esys_Import(esys_context,
706*758e9fbaSOystein Eftevaag parentHandle_handle,
707*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
708*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
709*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
710*758e9fbaSOystein Eftevaag &encryptionKey,
711*758e9fbaSOystein Eftevaag &objectPublic,
712*758e9fbaSOystein Eftevaag &duplicate, &inSymSeed, &symmetricAlg, &outPrivate);
713*758e9fbaSOystein Eftevaag
714*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
715*758e9fbaSOystein Eftevaag }
716*758e9fbaSOystein Eftevaag
717*758e9fbaSOystein Eftevaag static void
test_RSA_Encrypt(void ** state)718*758e9fbaSOystein Eftevaag test_RSA_Encrypt(void **state)
719*758e9fbaSOystein Eftevaag {
720*758e9fbaSOystein Eftevaag TSS2_RC r;
721*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
722*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
723*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
724*758e9fbaSOystein Eftevaag
725*758e9fbaSOystein Eftevaag ESYS_TR keyHandle_handle = DUMMY_TR_HANDLE_KEY;
726*758e9fbaSOystein Eftevaag TPM2B_PUBLIC_KEY_RSA message = DUMMY_2B_DATA(.buffer);
727*758e9fbaSOystein Eftevaag TPMT_RSA_DECRYPT inScheme = DUMMY_RSA_DECRYPT;
728*758e9fbaSOystein Eftevaag TPM2B_DATA label = DUMMY_2B_DATA(.buffer);
729*758e9fbaSOystein Eftevaag TPM2B_PUBLIC_KEY_RSA *outData;
730*758e9fbaSOystein Eftevaag r = Esys_RSA_Encrypt(esys_context,
731*758e9fbaSOystein Eftevaag keyHandle_handle,
732*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
733*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
734*758e9fbaSOystein Eftevaag ESYS_TR_NONE, &message, &inScheme, &label, &outData);
735*758e9fbaSOystein Eftevaag
736*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
737*758e9fbaSOystein Eftevaag }
738*758e9fbaSOystein Eftevaag
739*758e9fbaSOystein Eftevaag static void
test_RSA_Decrypt(void ** state)740*758e9fbaSOystein Eftevaag test_RSA_Decrypt(void **state)
741*758e9fbaSOystein Eftevaag {
742*758e9fbaSOystein Eftevaag TSS2_RC r;
743*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
744*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
745*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
746*758e9fbaSOystein Eftevaag
747*758e9fbaSOystein Eftevaag ESYS_TR keyHandle_handle = DUMMY_TR_HANDLE_KEY;
748*758e9fbaSOystein Eftevaag TPM2B_PUBLIC_KEY_RSA cipherText = DUMMY_2B_DATA(.buffer);
749*758e9fbaSOystein Eftevaag TPMT_RSA_DECRYPT inScheme = DUMMY_RSA_DECRYPT;
750*758e9fbaSOystein Eftevaag TPM2B_DATA label = DUMMY_2B_DATA(.buffer);
751*758e9fbaSOystein Eftevaag TPM2B_PUBLIC_KEY_RSA *message;
752*758e9fbaSOystein Eftevaag r = Esys_RSA_Decrypt(esys_context,
753*758e9fbaSOystein Eftevaag keyHandle_handle,
754*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
755*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
756*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
757*758e9fbaSOystein Eftevaag &cipherText, &inScheme, &label, &message);
758*758e9fbaSOystein Eftevaag
759*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
760*758e9fbaSOystein Eftevaag }
761*758e9fbaSOystein Eftevaag
762*758e9fbaSOystein Eftevaag static void
test_ECDH_KeyGen(void ** state)763*758e9fbaSOystein Eftevaag test_ECDH_KeyGen(void **state)
764*758e9fbaSOystein Eftevaag {
765*758e9fbaSOystein Eftevaag TSS2_RC r;
766*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
767*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
768*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
769*758e9fbaSOystein Eftevaag
770*758e9fbaSOystein Eftevaag ESYS_TR keyHandle_handle = DUMMY_TR_HANDLE_KEY;
771*758e9fbaSOystein Eftevaag TPM2B_ECC_POINT *zPoint;
772*758e9fbaSOystein Eftevaag TPM2B_ECC_POINT *pubPoint;
773*758e9fbaSOystein Eftevaag r = Esys_ECDH_KeyGen(esys_context,
774*758e9fbaSOystein Eftevaag keyHandle_handle,
775*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
776*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, &zPoint, &pubPoint);
777*758e9fbaSOystein Eftevaag
778*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
779*758e9fbaSOystein Eftevaag }
780*758e9fbaSOystein Eftevaag
781*758e9fbaSOystein Eftevaag static void
test_ECDH_ZGen(void ** state)782*758e9fbaSOystein Eftevaag test_ECDH_ZGen(void **state)
783*758e9fbaSOystein Eftevaag {
784*758e9fbaSOystein Eftevaag TSS2_RC r;
785*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
786*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
787*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
788*758e9fbaSOystein Eftevaag
789*758e9fbaSOystein Eftevaag ESYS_TR keyHandle_handle = DUMMY_TR_HANDLE_KEY;
790*758e9fbaSOystein Eftevaag TPM2B_ECC_POINT inPoint = { 0 };
791*758e9fbaSOystein Eftevaag TPM2B_ECC_POINT *outPoint;
792*758e9fbaSOystein Eftevaag r = Esys_ECDH_ZGen(esys_context,
793*758e9fbaSOystein Eftevaag keyHandle_handle,
794*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
795*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, &inPoint, &outPoint);
796*758e9fbaSOystein Eftevaag
797*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
798*758e9fbaSOystein Eftevaag }
799*758e9fbaSOystein Eftevaag
800*758e9fbaSOystein Eftevaag static void
test_ECC_Parameters(void ** state)801*758e9fbaSOystein Eftevaag test_ECC_Parameters(void **state)
802*758e9fbaSOystein Eftevaag {
803*758e9fbaSOystein Eftevaag TSS2_RC r;
804*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
805*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
806*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
807*758e9fbaSOystein Eftevaag
808*758e9fbaSOystein Eftevaag TPMI_ECC_CURVE curveID = TPM2_ECC_BN_P256;
809*758e9fbaSOystein Eftevaag TPMS_ALGORITHM_DETAIL_ECC *parameters;
810*758e9fbaSOystein Eftevaag r = Esys_ECC_Parameters(esys_context,
811*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
812*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, curveID, ¶meters);
813*758e9fbaSOystein Eftevaag
814*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
815*758e9fbaSOystein Eftevaag }
816*758e9fbaSOystein Eftevaag
817*758e9fbaSOystein Eftevaag static void
test_ZGen_2Phase(void ** state)818*758e9fbaSOystein Eftevaag test_ZGen_2Phase(void **state)
819*758e9fbaSOystein Eftevaag {
820*758e9fbaSOystein Eftevaag TSS2_RC r;
821*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
822*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
823*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
824*758e9fbaSOystein Eftevaag
825*758e9fbaSOystein Eftevaag ESYS_TR keyA_handle = DUMMY_TR_HANDLE_KEY;
826*758e9fbaSOystein Eftevaag TPM2B_ECC_POINT inQsB = { 0 };
827*758e9fbaSOystein Eftevaag TPM2B_ECC_POINT inQeB = { 0 };
828*758e9fbaSOystein Eftevaag TPMI_ECC_KEY_EXCHANGE inScheme = TPM2_ALG_NULL;
829*758e9fbaSOystein Eftevaag UINT16 counter = 0;
830*758e9fbaSOystein Eftevaag TPM2B_ECC_POINT *outZ1;
831*758e9fbaSOystein Eftevaag TPM2B_ECC_POINT *outZ2;
832*758e9fbaSOystein Eftevaag r = Esys_ZGen_2Phase(esys_context,
833*758e9fbaSOystein Eftevaag keyA_handle,
834*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
835*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
836*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
837*758e9fbaSOystein Eftevaag &inQsB, &inQeB, inScheme, counter, &outZ1, &outZ2);
838*758e9fbaSOystein Eftevaag
839*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
840*758e9fbaSOystein Eftevaag }
841*758e9fbaSOystein Eftevaag
842*758e9fbaSOystein Eftevaag static void
test_EncryptDecrypt(void ** state)843*758e9fbaSOystein Eftevaag test_EncryptDecrypt(void **state)
844*758e9fbaSOystein Eftevaag {
845*758e9fbaSOystein Eftevaag TSS2_RC r;
846*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
847*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
848*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
849*758e9fbaSOystein Eftevaag
850*758e9fbaSOystein Eftevaag ESYS_TR keyHandle_handle = DUMMY_TR_HANDLE_KEY;
851*758e9fbaSOystein Eftevaag TPMI_YES_NO decrypt = 0;
852*758e9fbaSOystein Eftevaag TPMI_ALG_SYM_MODE mode = TPM2_ALG_NULL;
853*758e9fbaSOystein Eftevaag TPM2B_IV ivIn = DUMMY_2B_DATA16(.buffer);
854*758e9fbaSOystein Eftevaag TPM2B_MAX_BUFFER inData = DUMMY_2B_DATA(.buffer);
855*758e9fbaSOystein Eftevaag TPM2B_MAX_BUFFER *outData;
856*758e9fbaSOystein Eftevaag TPM2B_IV *ivOut;
857*758e9fbaSOystein Eftevaag r = Esys_EncryptDecrypt(esys_context,
858*758e9fbaSOystein Eftevaag keyHandle_handle,
859*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
860*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
861*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
862*758e9fbaSOystein Eftevaag decrypt, mode, &ivIn, &inData, &outData, &ivOut);
863*758e9fbaSOystein Eftevaag
864*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
865*758e9fbaSOystein Eftevaag }
866*758e9fbaSOystein Eftevaag
867*758e9fbaSOystein Eftevaag static void
test_EncryptDecrypt2(void ** state)868*758e9fbaSOystein Eftevaag test_EncryptDecrypt2(void **state)
869*758e9fbaSOystein Eftevaag {
870*758e9fbaSOystein Eftevaag TSS2_RC r;
871*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
872*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
873*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
874*758e9fbaSOystein Eftevaag
875*758e9fbaSOystein Eftevaag ESYS_TR keyHandle_handle = DUMMY_TR_HANDLE_KEY;
876*758e9fbaSOystein Eftevaag TPM2B_MAX_BUFFER inData = DUMMY_2B_DATA(.buffer);
877*758e9fbaSOystein Eftevaag TPMI_YES_NO decrypt = 0;
878*758e9fbaSOystein Eftevaag TPMI_ALG_SYM_MODE mode = TPM2_ALG_NULL;
879*758e9fbaSOystein Eftevaag TPM2B_IV ivIn = DUMMY_2B_DATA16(.buffer);
880*758e9fbaSOystein Eftevaag TPM2B_MAX_BUFFER *outData;
881*758e9fbaSOystein Eftevaag TPM2B_IV *ivOut;
882*758e9fbaSOystein Eftevaag r = Esys_EncryptDecrypt2(esys_context,
883*758e9fbaSOystein Eftevaag keyHandle_handle,
884*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
885*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
886*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
887*758e9fbaSOystein Eftevaag &inData, decrypt, mode, &ivIn, &outData, &ivOut);
888*758e9fbaSOystein Eftevaag
889*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
890*758e9fbaSOystein Eftevaag }
891*758e9fbaSOystein Eftevaag
892*758e9fbaSOystein Eftevaag static void
test_Hash(void ** state)893*758e9fbaSOystein Eftevaag test_Hash(void **state)
894*758e9fbaSOystein Eftevaag {
895*758e9fbaSOystein Eftevaag TSS2_RC r;
896*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
897*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
898*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
899*758e9fbaSOystein Eftevaag
900*758e9fbaSOystein Eftevaag TPM2B_MAX_BUFFER data = DUMMY_2B_DATA(.buffer);
901*758e9fbaSOystein Eftevaag TPMI_ALG_HASH hashAlg = TPM2_ALG_SHA1;
902*758e9fbaSOystein Eftevaag TPMI_RH_HIERARCHY hierarchy = TPM2_RH_OWNER;
903*758e9fbaSOystein Eftevaag TPM2B_DIGEST *outHash;
904*758e9fbaSOystein Eftevaag TPMT_TK_HASHCHECK *validation;
905*758e9fbaSOystein Eftevaag r = Esys_Hash(esys_context,
906*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
907*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
908*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
909*758e9fbaSOystein Eftevaag &data, hashAlg, hierarchy, &outHash, &validation);
910*758e9fbaSOystein Eftevaag
911*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
912*758e9fbaSOystein Eftevaag }
913*758e9fbaSOystein Eftevaag
914*758e9fbaSOystein Eftevaag static void
test_HMAC(void ** state)915*758e9fbaSOystein Eftevaag test_HMAC(void **state)
916*758e9fbaSOystein Eftevaag {
917*758e9fbaSOystein Eftevaag TSS2_RC r;
918*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
919*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
920*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
921*758e9fbaSOystein Eftevaag
922*758e9fbaSOystein Eftevaag ESYS_TR handle_handle = DUMMY_TR_HANDLE_KEY;
923*758e9fbaSOystein Eftevaag TPM2B_MAX_BUFFER buffer = DUMMY_2B_DATA(.buffer);
924*758e9fbaSOystein Eftevaag TPMI_ALG_HASH hashAlg = TPM2_ALG_SHA1;
925*758e9fbaSOystein Eftevaag TPM2B_DIGEST *outHMAC;
926*758e9fbaSOystein Eftevaag r = Esys_HMAC(esys_context,
927*758e9fbaSOystein Eftevaag handle_handle,
928*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
929*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, &buffer, hashAlg, &outHMAC);
930*758e9fbaSOystein Eftevaag
931*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
932*758e9fbaSOystein Eftevaag }
933*758e9fbaSOystein Eftevaag
934*758e9fbaSOystein Eftevaag static void
test_GetRandom(void ** state)935*758e9fbaSOystein Eftevaag test_GetRandom(void **state)
936*758e9fbaSOystein Eftevaag {
937*758e9fbaSOystein Eftevaag TSS2_RC r;
938*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
939*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
940*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
941*758e9fbaSOystein Eftevaag
942*758e9fbaSOystein Eftevaag UINT16 bytesRequested = 0;
943*758e9fbaSOystein Eftevaag TPM2B_DIGEST *randomBytes;
944*758e9fbaSOystein Eftevaag r = Esys_GetRandom(esys_context,
945*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
946*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
947*758e9fbaSOystein Eftevaag ESYS_TR_NONE, bytesRequested, &randomBytes);
948*758e9fbaSOystein Eftevaag
949*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
950*758e9fbaSOystein Eftevaag }
951*758e9fbaSOystein Eftevaag
952*758e9fbaSOystein Eftevaag static void
test_StirRandom(void ** state)953*758e9fbaSOystein Eftevaag test_StirRandom(void **state)
954*758e9fbaSOystein Eftevaag {
955*758e9fbaSOystein Eftevaag TSS2_RC r;
956*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
957*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
958*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
959*758e9fbaSOystein Eftevaag
960*758e9fbaSOystein Eftevaag TPM2B_SENSITIVE_DATA inData = DUMMY_2B_DATA(.buffer);
961*758e9fbaSOystein Eftevaag r = Esys_StirRandom(esys_context,
962*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, ESYS_TR_NONE, &inData);
963*758e9fbaSOystein Eftevaag
964*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
965*758e9fbaSOystein Eftevaag }
966*758e9fbaSOystein Eftevaag
967*758e9fbaSOystein Eftevaag static void
test_HMAC_Start(void ** state)968*758e9fbaSOystein Eftevaag test_HMAC_Start(void **state)
969*758e9fbaSOystein Eftevaag {
970*758e9fbaSOystein Eftevaag TSS2_RC r;
971*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
972*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
973*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
974*758e9fbaSOystein Eftevaag
975*758e9fbaSOystein Eftevaag ESYS_TR handle_handle = DUMMY_TR_HANDLE_KEY;
976*758e9fbaSOystein Eftevaag TPM2B_AUTH auth = DUMMY_2B_DATA(.buffer);
977*758e9fbaSOystein Eftevaag TPMI_ALG_HASH hashAlg = TPM2_ALG_SHA1;
978*758e9fbaSOystein Eftevaag ESYS_TR sequenceHandle_handle;
979*758e9fbaSOystein Eftevaag r = Esys_HMAC_Start(esys_context,
980*758e9fbaSOystein Eftevaag handle_handle,
981*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
982*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
983*758e9fbaSOystein Eftevaag ESYS_TR_NONE, &auth, hashAlg, &sequenceHandle_handle);
984*758e9fbaSOystein Eftevaag
985*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
986*758e9fbaSOystein Eftevaag }
987*758e9fbaSOystein Eftevaag
988*758e9fbaSOystein Eftevaag static void
test_HashSequenceStart(void ** state)989*758e9fbaSOystein Eftevaag test_HashSequenceStart(void **state)
990*758e9fbaSOystein Eftevaag {
991*758e9fbaSOystein Eftevaag TSS2_RC r;
992*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
993*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
994*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
995*758e9fbaSOystein Eftevaag
996*758e9fbaSOystein Eftevaag TPM2B_AUTH auth = DUMMY_2B_DATA(.buffer);
997*758e9fbaSOystein Eftevaag TPMI_ALG_HASH hashAlg = TPM2_ALG_SHA1;
998*758e9fbaSOystein Eftevaag ESYS_TR sequenceHandle_handle;
999*758e9fbaSOystein Eftevaag r = Esys_HashSequenceStart(esys_context,
1000*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1001*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1002*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1003*758e9fbaSOystein Eftevaag &auth, hashAlg, &sequenceHandle_handle);
1004*758e9fbaSOystein Eftevaag
1005*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1006*758e9fbaSOystein Eftevaag }
1007*758e9fbaSOystein Eftevaag
1008*758e9fbaSOystein Eftevaag static void
test_SequenceUpdate(void ** state)1009*758e9fbaSOystein Eftevaag test_SequenceUpdate(void **state)
1010*758e9fbaSOystein Eftevaag {
1011*758e9fbaSOystein Eftevaag TSS2_RC r;
1012*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1013*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1014*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1015*758e9fbaSOystein Eftevaag
1016*758e9fbaSOystein Eftevaag ESYS_TR sequenceHandle_handle = DUMMY_TR_HANDLE_KEY;
1017*758e9fbaSOystein Eftevaag TPM2B_MAX_BUFFER buffer = DUMMY_2B_DATA(.buffer);
1018*758e9fbaSOystein Eftevaag r = Esys_SequenceUpdate(esys_context,
1019*758e9fbaSOystein Eftevaag sequenceHandle_handle,
1020*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1021*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, &buffer);
1022*758e9fbaSOystein Eftevaag
1023*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1024*758e9fbaSOystein Eftevaag }
1025*758e9fbaSOystein Eftevaag
1026*758e9fbaSOystein Eftevaag static void
test_SequenceComplete(void ** state)1027*758e9fbaSOystein Eftevaag test_SequenceComplete(void **state)
1028*758e9fbaSOystein Eftevaag {
1029*758e9fbaSOystein Eftevaag TSS2_RC r;
1030*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1031*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1032*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1033*758e9fbaSOystein Eftevaag
1034*758e9fbaSOystein Eftevaag ESYS_TR sequenceHandle_handle = DUMMY_TR_HANDLE_KEY;
1035*758e9fbaSOystein Eftevaag TPM2B_MAX_BUFFER buffer = DUMMY_2B_DATA(.buffer);
1036*758e9fbaSOystein Eftevaag TPMI_RH_HIERARCHY hierarchy = TPM2_RH_OWNER;
1037*758e9fbaSOystein Eftevaag TPM2B_DIGEST *result;
1038*758e9fbaSOystein Eftevaag TPMT_TK_HASHCHECK *validation;
1039*758e9fbaSOystein Eftevaag r = Esys_SequenceComplete(esys_context,
1040*758e9fbaSOystein Eftevaag sequenceHandle_handle,
1041*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1042*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1043*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1044*758e9fbaSOystein Eftevaag &buffer, hierarchy, &result, &validation);
1045*758e9fbaSOystein Eftevaag
1046*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1047*758e9fbaSOystein Eftevaag }
1048*758e9fbaSOystein Eftevaag
1049*758e9fbaSOystein Eftevaag static void
test_EventSequenceComplete(void ** state)1050*758e9fbaSOystein Eftevaag test_EventSequenceComplete(void **state)
1051*758e9fbaSOystein Eftevaag {
1052*758e9fbaSOystein Eftevaag TSS2_RC r;
1053*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1054*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1055*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1056*758e9fbaSOystein Eftevaag
1057*758e9fbaSOystein Eftevaag ESYS_TR pcrHandle_handle = 16;
1058*758e9fbaSOystein Eftevaag ESYS_TR sequenceHandle_handle = DUMMY_TR_HANDLE_KEY;
1059*758e9fbaSOystein Eftevaag TPM2B_MAX_BUFFER buffer = DUMMY_2B_DATA(.buffer);
1060*758e9fbaSOystein Eftevaag TPML_DIGEST_VALUES *results;
1061*758e9fbaSOystein Eftevaag r = Esys_EventSequenceComplete(esys_context,
1062*758e9fbaSOystein Eftevaag pcrHandle_handle,
1063*758e9fbaSOystein Eftevaag sequenceHandle_handle,
1064*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1065*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1066*758e9fbaSOystein Eftevaag ESYS_TR_NONE, &buffer, &results);
1067*758e9fbaSOystein Eftevaag
1068*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1069*758e9fbaSOystein Eftevaag }
1070*758e9fbaSOystein Eftevaag
1071*758e9fbaSOystein Eftevaag static void
test_Certify(void ** state)1072*758e9fbaSOystein Eftevaag test_Certify(void **state)
1073*758e9fbaSOystein Eftevaag {
1074*758e9fbaSOystein Eftevaag TSS2_RC r;
1075*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1076*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1077*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1078*758e9fbaSOystein Eftevaag
1079*758e9fbaSOystein Eftevaag ESYS_TR objectHandle_handle = DUMMY_TR_HANDLE_KEY;
1080*758e9fbaSOystein Eftevaag ESYS_TR signHandle_handle = DUMMY_TR_HANDLE_KEY;
1081*758e9fbaSOystein Eftevaag TPM2B_DATA qualifyingData = DUMMY_2B_DATA(.buffer);
1082*758e9fbaSOystein Eftevaag TPMT_SIG_SCHEME inScheme = {.scheme = TPM2_ALG_NULL,.details = {} };
1083*758e9fbaSOystein Eftevaag TPM2B_ATTEST *certifyInfo;
1084*758e9fbaSOystein Eftevaag TPMT_SIGNATURE *signature;
1085*758e9fbaSOystein Eftevaag r = Esys_Certify(esys_context,
1086*758e9fbaSOystein Eftevaag objectHandle_handle,
1087*758e9fbaSOystein Eftevaag signHandle_handle,
1088*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1089*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1090*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1091*758e9fbaSOystein Eftevaag &qualifyingData, &inScheme, &certifyInfo, &signature);
1092*758e9fbaSOystein Eftevaag
1093*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1094*758e9fbaSOystein Eftevaag }
1095*758e9fbaSOystein Eftevaag
1096*758e9fbaSOystein Eftevaag static void
test_CertifyCreation(void ** state)1097*758e9fbaSOystein Eftevaag test_CertifyCreation(void **state)
1098*758e9fbaSOystein Eftevaag {
1099*758e9fbaSOystein Eftevaag TSS2_RC r;
1100*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1101*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1102*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1103*758e9fbaSOystein Eftevaag
1104*758e9fbaSOystein Eftevaag ESYS_TR signHandle_handle = DUMMY_TR_HANDLE_KEY;
1105*758e9fbaSOystein Eftevaag ESYS_TR objectHandle_handle = DUMMY_TR_HANDLE_KEY;
1106*758e9fbaSOystein Eftevaag TPM2B_DATA qualifyingData = DUMMY_2B_DATA(.buffer);
1107*758e9fbaSOystein Eftevaag TPM2B_DIGEST creationHash = DUMMY_2B_DATA(.buffer);
1108*758e9fbaSOystein Eftevaag TPMT_SIG_SCHEME inScheme = {.scheme = TPM2_ALG_NULL,.details = {} };
1109*758e9fbaSOystein Eftevaag TPMT_TK_CREATION creationTicket = DUMMY_TPMT_TK_CREATION;
1110*758e9fbaSOystein Eftevaag TPM2B_ATTEST *certifyInfo;
1111*758e9fbaSOystein Eftevaag TPMT_SIGNATURE *signature;
1112*758e9fbaSOystein Eftevaag r = Esys_CertifyCreation(esys_context,
1113*758e9fbaSOystein Eftevaag signHandle_handle,
1114*758e9fbaSOystein Eftevaag objectHandle_handle,
1115*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1116*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1117*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1118*758e9fbaSOystein Eftevaag &qualifyingData,
1119*758e9fbaSOystein Eftevaag &creationHash,
1120*758e9fbaSOystein Eftevaag &inScheme,
1121*758e9fbaSOystein Eftevaag &creationTicket, &certifyInfo, &signature);
1122*758e9fbaSOystein Eftevaag
1123*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1124*758e9fbaSOystein Eftevaag }
1125*758e9fbaSOystein Eftevaag
1126*758e9fbaSOystein Eftevaag static void
test_Quote(void ** state)1127*758e9fbaSOystein Eftevaag test_Quote(void **state)
1128*758e9fbaSOystein Eftevaag {
1129*758e9fbaSOystein Eftevaag TSS2_RC r;
1130*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1131*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1132*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1133*758e9fbaSOystein Eftevaag
1134*758e9fbaSOystein Eftevaag ESYS_TR signHandle_handle = DUMMY_TR_HANDLE_KEY;
1135*758e9fbaSOystein Eftevaag TPM2B_DATA qualifyingData = DUMMY_2B_DATA(.buffer);
1136*758e9fbaSOystein Eftevaag TPMT_SIG_SCHEME inScheme = {.scheme = TPM2_ALG_NULL,.details = {} };
1137*758e9fbaSOystein Eftevaag TPML_PCR_SELECTION PCRselect = { 0 };
1138*758e9fbaSOystein Eftevaag TPM2B_ATTEST *quoted;
1139*758e9fbaSOystein Eftevaag TPMT_SIGNATURE *signature;
1140*758e9fbaSOystein Eftevaag r = Esys_Quote(esys_context,
1141*758e9fbaSOystein Eftevaag signHandle_handle,
1142*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1143*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1144*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1145*758e9fbaSOystein Eftevaag &qualifyingData, &inScheme, &PCRselect, "ed, &signature);
1146*758e9fbaSOystein Eftevaag
1147*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1148*758e9fbaSOystein Eftevaag }
1149*758e9fbaSOystein Eftevaag
1150*758e9fbaSOystein Eftevaag static void
test_GetSessionAuditDigest(void ** state)1151*758e9fbaSOystein Eftevaag test_GetSessionAuditDigest(void **state)
1152*758e9fbaSOystein Eftevaag {
1153*758e9fbaSOystein Eftevaag TSS2_RC r;
1154*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1155*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1156*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1157*758e9fbaSOystein Eftevaag
1158*758e9fbaSOystein Eftevaag ESYS_TR privacyAdminHandle_handle = DUMMY_TR_HANDLE_PRIVACY_ADMIN;
1159*758e9fbaSOystein Eftevaag ESYS_TR signHandle_handle = DUMMY_TR_HANDLE_KEY;
1160*758e9fbaSOystein Eftevaag ESYS_TR sessionHandle_handle = DUMMY_TR_HANDLE_HMAC_SESSION;
1161*758e9fbaSOystein Eftevaag TPM2B_DATA qualifyingData = DUMMY_2B_DATA(.buffer);
1162*758e9fbaSOystein Eftevaag TPMT_SIG_SCHEME inScheme = {.scheme = TPM2_ALG_NULL,.details = {} };
1163*758e9fbaSOystein Eftevaag TPM2B_ATTEST *auditInfo;
1164*758e9fbaSOystein Eftevaag TPMT_SIGNATURE *signature;
1165*758e9fbaSOystein Eftevaag r = Esys_GetSessionAuditDigest(esys_context,
1166*758e9fbaSOystein Eftevaag privacyAdminHandle_handle,
1167*758e9fbaSOystein Eftevaag signHandle_handle,
1168*758e9fbaSOystein Eftevaag sessionHandle_handle,
1169*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1170*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1171*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1172*758e9fbaSOystein Eftevaag &qualifyingData,
1173*758e9fbaSOystein Eftevaag &inScheme, &auditInfo, &signature);
1174*758e9fbaSOystein Eftevaag
1175*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1176*758e9fbaSOystein Eftevaag }
1177*758e9fbaSOystein Eftevaag
1178*758e9fbaSOystein Eftevaag static void
test_GetCommandAuditDigest(void ** state)1179*758e9fbaSOystein Eftevaag test_GetCommandAuditDigest(void **state)
1180*758e9fbaSOystein Eftevaag {
1181*758e9fbaSOystein Eftevaag TSS2_RC r;
1182*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1183*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1184*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1185*758e9fbaSOystein Eftevaag
1186*758e9fbaSOystein Eftevaag ESYS_TR privacyHandle_handle = DUMMY_TR_HANDLE_PRIVACY_ADMIN;
1187*758e9fbaSOystein Eftevaag ESYS_TR signHandle_handle = DUMMY_TR_HANDLE_KEY;
1188*758e9fbaSOystein Eftevaag TPM2B_DATA qualifyingData = DUMMY_2B_DATA(.buffer);
1189*758e9fbaSOystein Eftevaag TPMT_SIG_SCHEME inScheme = {.scheme = TPM2_ALG_NULL,.details = {} };
1190*758e9fbaSOystein Eftevaag TPM2B_ATTEST *auditInfo;
1191*758e9fbaSOystein Eftevaag TPMT_SIGNATURE *signature;
1192*758e9fbaSOystein Eftevaag r = Esys_GetCommandAuditDigest(esys_context,
1193*758e9fbaSOystein Eftevaag privacyHandle_handle,
1194*758e9fbaSOystein Eftevaag signHandle_handle,
1195*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1196*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1197*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1198*758e9fbaSOystein Eftevaag &qualifyingData,
1199*758e9fbaSOystein Eftevaag &inScheme, &auditInfo, &signature);
1200*758e9fbaSOystein Eftevaag
1201*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1202*758e9fbaSOystein Eftevaag }
1203*758e9fbaSOystein Eftevaag
1204*758e9fbaSOystein Eftevaag static void
test_GetTime(void ** state)1205*758e9fbaSOystein Eftevaag test_GetTime(void **state)
1206*758e9fbaSOystein Eftevaag {
1207*758e9fbaSOystein Eftevaag TSS2_RC r;
1208*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1209*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1210*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1211*758e9fbaSOystein Eftevaag
1212*758e9fbaSOystein Eftevaag ESYS_TR privacyAdminHandle_handle = DUMMY_TR_HANDLE_PRIVACY_ADMIN;
1213*758e9fbaSOystein Eftevaag ESYS_TR signHandle_handle = DUMMY_TR_HANDLE_KEY;
1214*758e9fbaSOystein Eftevaag TPM2B_DATA qualifyingData = DUMMY_2B_DATA(.buffer);
1215*758e9fbaSOystein Eftevaag TPMT_SIG_SCHEME inScheme = {.scheme = TPM2_ALG_NULL,.details = {} };
1216*758e9fbaSOystein Eftevaag TPM2B_ATTEST *timeInfo;
1217*758e9fbaSOystein Eftevaag TPMT_SIGNATURE *signature;
1218*758e9fbaSOystein Eftevaag r = Esys_GetTime(esys_context,
1219*758e9fbaSOystein Eftevaag privacyAdminHandle_handle,
1220*758e9fbaSOystein Eftevaag signHandle_handle,
1221*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1222*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1223*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1224*758e9fbaSOystein Eftevaag &qualifyingData, &inScheme, &timeInfo, &signature);
1225*758e9fbaSOystein Eftevaag
1226*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1227*758e9fbaSOystein Eftevaag }
1228*758e9fbaSOystein Eftevaag
1229*758e9fbaSOystein Eftevaag static void
test_Commit(void ** state)1230*758e9fbaSOystein Eftevaag test_Commit(void **state)
1231*758e9fbaSOystein Eftevaag {
1232*758e9fbaSOystein Eftevaag TSS2_RC r;
1233*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1234*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1235*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1236*758e9fbaSOystein Eftevaag
1237*758e9fbaSOystein Eftevaag ESYS_TR signHandle_handle = DUMMY_TR_HANDLE_KEY;
1238*758e9fbaSOystein Eftevaag TPM2B_ECC_POINT P1 = { 0 };
1239*758e9fbaSOystein Eftevaag TPM2B_SENSITIVE_DATA s2 = DUMMY_2B_DATA(.buffer);
1240*758e9fbaSOystein Eftevaag TPM2B_ECC_PARAMETER y2 = { 0 };
1241*758e9fbaSOystein Eftevaag TPM2B_ECC_POINT *K;
1242*758e9fbaSOystein Eftevaag TPM2B_ECC_POINT *L;
1243*758e9fbaSOystein Eftevaag TPM2B_ECC_POINT *E;
1244*758e9fbaSOystein Eftevaag UINT16 counter;
1245*758e9fbaSOystein Eftevaag r = Esys_Commit(esys_context,
1246*758e9fbaSOystein Eftevaag signHandle_handle,
1247*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1248*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1249*758e9fbaSOystein Eftevaag ESYS_TR_NONE, &P1, &s2, &y2, &K, &L, &E, &counter);
1250*758e9fbaSOystein Eftevaag
1251*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1252*758e9fbaSOystein Eftevaag }
1253*758e9fbaSOystein Eftevaag
1254*758e9fbaSOystein Eftevaag static void
test_EC_Ephemeral(void ** state)1255*758e9fbaSOystein Eftevaag test_EC_Ephemeral(void **state)
1256*758e9fbaSOystein Eftevaag {
1257*758e9fbaSOystein Eftevaag TSS2_RC r;
1258*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1259*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1260*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1261*758e9fbaSOystein Eftevaag
1262*758e9fbaSOystein Eftevaag TPMI_ECC_CURVE curveID = TPM2_ECC_BN_P256;
1263*758e9fbaSOystein Eftevaag TPM2B_ECC_POINT *Q;
1264*758e9fbaSOystein Eftevaag UINT16 counter;
1265*758e9fbaSOystein Eftevaag r = Esys_EC_Ephemeral(esys_context,
1266*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1267*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, curveID, &Q, &counter);
1268*758e9fbaSOystein Eftevaag
1269*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1270*758e9fbaSOystein Eftevaag }
1271*758e9fbaSOystein Eftevaag
1272*758e9fbaSOystein Eftevaag static void
test_VerifySignature(void ** state)1273*758e9fbaSOystein Eftevaag test_VerifySignature(void **state)
1274*758e9fbaSOystein Eftevaag {
1275*758e9fbaSOystein Eftevaag TSS2_RC r;
1276*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1277*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1278*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1279*758e9fbaSOystein Eftevaag
1280*758e9fbaSOystein Eftevaag ESYS_TR keyHandle_handle = DUMMY_TR_HANDLE_KEY;
1281*758e9fbaSOystein Eftevaag TPM2B_DIGEST digest = DUMMY_2B_DATA(.buffer);
1282*758e9fbaSOystein Eftevaag TPMT_SIGNATURE signature = DUMMY_TPMT_SIGNATURE;
1283*758e9fbaSOystein Eftevaag TPMT_TK_VERIFIED *validation;
1284*758e9fbaSOystein Eftevaag r = Esys_VerifySignature(esys_context,
1285*758e9fbaSOystein Eftevaag keyHandle_handle,
1286*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1287*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1288*758e9fbaSOystein Eftevaag ESYS_TR_NONE, &digest, &signature, &validation);
1289*758e9fbaSOystein Eftevaag
1290*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1291*758e9fbaSOystein Eftevaag }
1292*758e9fbaSOystein Eftevaag
1293*758e9fbaSOystein Eftevaag static void
test_Sign(void ** state)1294*758e9fbaSOystein Eftevaag test_Sign(void **state)
1295*758e9fbaSOystein Eftevaag {
1296*758e9fbaSOystein Eftevaag TSS2_RC r;
1297*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1298*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1299*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1300*758e9fbaSOystein Eftevaag
1301*758e9fbaSOystein Eftevaag ESYS_TR keyHandle_handle = DUMMY_TR_HANDLE_KEY;
1302*758e9fbaSOystein Eftevaag TPM2B_DIGEST digest = DUMMY_2B_DATA(.buffer);
1303*758e9fbaSOystein Eftevaag TPMT_SIG_SCHEME inScheme = {.scheme = TPM2_ALG_NULL,.details = {} };
1304*758e9fbaSOystein Eftevaag TPMT_TK_HASHCHECK validation = DUMMY_TPMT_TK_HASHCHECK;
1305*758e9fbaSOystein Eftevaag TPMT_SIGNATURE *signature;
1306*758e9fbaSOystein Eftevaag r = Esys_Sign(esys_context,
1307*758e9fbaSOystein Eftevaag keyHandle_handle,
1308*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1309*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1310*758e9fbaSOystein Eftevaag ESYS_TR_NONE, &digest, &inScheme, &validation, &signature);
1311*758e9fbaSOystein Eftevaag
1312*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1313*758e9fbaSOystein Eftevaag }
1314*758e9fbaSOystein Eftevaag
1315*758e9fbaSOystein Eftevaag static void
test_SetCommandCodeAuditStatus(void ** state)1316*758e9fbaSOystein Eftevaag test_SetCommandCodeAuditStatus(void **state)
1317*758e9fbaSOystein Eftevaag {
1318*758e9fbaSOystein Eftevaag TSS2_RC r;
1319*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1320*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1321*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1322*758e9fbaSOystein Eftevaag
1323*758e9fbaSOystein Eftevaag ESYS_TR auth_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
1324*758e9fbaSOystein Eftevaag TPMI_ALG_HASH auditAlg = TPM2_ALG_SHA1;
1325*758e9fbaSOystein Eftevaag TPML_CC setList = { 0 };
1326*758e9fbaSOystein Eftevaag TPML_CC clearList = { 0 };
1327*758e9fbaSOystein Eftevaag r = Esys_SetCommandCodeAuditStatus(esys_context,
1328*758e9fbaSOystein Eftevaag auth_handle,
1329*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1330*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1331*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1332*758e9fbaSOystein Eftevaag auditAlg, &setList, &clearList);
1333*758e9fbaSOystein Eftevaag
1334*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1335*758e9fbaSOystein Eftevaag }
1336*758e9fbaSOystein Eftevaag
1337*758e9fbaSOystein Eftevaag static void
test_PCR_Extend(void ** state)1338*758e9fbaSOystein Eftevaag test_PCR_Extend(void **state)
1339*758e9fbaSOystein Eftevaag {
1340*758e9fbaSOystein Eftevaag TSS2_RC r;
1341*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1342*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1343*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1344*758e9fbaSOystein Eftevaag
1345*758e9fbaSOystein Eftevaag ESYS_TR pcrHandle_handle = 16;
1346*758e9fbaSOystein Eftevaag TPML_DIGEST_VALUES digests = { 0 };
1347*758e9fbaSOystein Eftevaag r = Esys_PCR_Extend(esys_context,
1348*758e9fbaSOystein Eftevaag pcrHandle_handle,
1349*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD, ESYS_TR_NONE, ESYS_TR_NONE, &digests);
1350*758e9fbaSOystein Eftevaag
1351*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1352*758e9fbaSOystein Eftevaag }
1353*758e9fbaSOystein Eftevaag
1354*758e9fbaSOystein Eftevaag static void
test_PCR_Event(void ** state)1355*758e9fbaSOystein Eftevaag test_PCR_Event(void **state)
1356*758e9fbaSOystein Eftevaag {
1357*758e9fbaSOystein Eftevaag TSS2_RC r;
1358*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1359*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1360*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1361*758e9fbaSOystein Eftevaag
1362*758e9fbaSOystein Eftevaag ESYS_TR pcrHandle_handle = 16;
1363*758e9fbaSOystein Eftevaag TPM2B_EVENT eventData = DUMMY_2B_DATA(.buffer);
1364*758e9fbaSOystein Eftevaag TPML_DIGEST_VALUES *digests;
1365*758e9fbaSOystein Eftevaag r = Esys_PCR_Event(esys_context,
1366*758e9fbaSOystein Eftevaag pcrHandle_handle,
1367*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1368*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, &eventData, &digests);
1369*758e9fbaSOystein Eftevaag
1370*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1371*758e9fbaSOystein Eftevaag }
1372*758e9fbaSOystein Eftevaag
1373*758e9fbaSOystein Eftevaag static void
test_PCR_Read(void ** state)1374*758e9fbaSOystein Eftevaag test_PCR_Read(void **state)
1375*758e9fbaSOystein Eftevaag {
1376*758e9fbaSOystein Eftevaag TSS2_RC r;
1377*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1378*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1379*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1380*758e9fbaSOystein Eftevaag
1381*758e9fbaSOystein Eftevaag TPML_PCR_SELECTION pcrSelectionIn = { 0 };
1382*758e9fbaSOystein Eftevaag TPML_PCR_SELECTION *pcrSelectionOut;
1383*758e9fbaSOystein Eftevaag TPML_DIGEST *pcrValues;
1384*758e9fbaSOystein Eftevaag UINT32 pcrUpdateCounter;
1385*758e9fbaSOystein Eftevaag r = Esys_PCR_Read(esys_context,
1386*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1387*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1388*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1389*758e9fbaSOystein Eftevaag &pcrSelectionIn,
1390*758e9fbaSOystein Eftevaag &pcrUpdateCounter, &pcrSelectionOut, &pcrValues);
1391*758e9fbaSOystein Eftevaag
1392*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1393*758e9fbaSOystein Eftevaag }
1394*758e9fbaSOystein Eftevaag
1395*758e9fbaSOystein Eftevaag static void
test_PCR_Allocate(void ** state)1396*758e9fbaSOystein Eftevaag test_PCR_Allocate(void **state)
1397*758e9fbaSOystein Eftevaag {
1398*758e9fbaSOystein Eftevaag TSS2_RC r;
1399*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1400*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1401*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1402*758e9fbaSOystein Eftevaag
1403*758e9fbaSOystein Eftevaag ESYS_TR authHandle_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
1404*758e9fbaSOystein Eftevaag TPML_PCR_SELECTION pcrAllocation = { 0 };
1405*758e9fbaSOystein Eftevaag TPMI_YES_NO allocationSuccess;
1406*758e9fbaSOystein Eftevaag UINT32 maxPCR;
1407*758e9fbaSOystein Eftevaag UINT32 sizeNeeded;
1408*758e9fbaSOystein Eftevaag UINT32 sizeAvailable;
1409*758e9fbaSOystein Eftevaag r = Esys_PCR_Allocate(esys_context,
1410*758e9fbaSOystein Eftevaag authHandle_handle,
1411*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1412*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1413*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1414*758e9fbaSOystein Eftevaag &pcrAllocation,
1415*758e9fbaSOystein Eftevaag &allocationSuccess,
1416*758e9fbaSOystein Eftevaag &maxPCR, &sizeNeeded, &sizeAvailable);
1417*758e9fbaSOystein Eftevaag
1418*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1419*758e9fbaSOystein Eftevaag }
1420*758e9fbaSOystein Eftevaag
1421*758e9fbaSOystein Eftevaag static void
test_PCR_SetAuthPolicy(void ** state)1422*758e9fbaSOystein Eftevaag test_PCR_SetAuthPolicy(void **state)
1423*758e9fbaSOystein Eftevaag {
1424*758e9fbaSOystein Eftevaag TSS2_RC r;
1425*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1426*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1427*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1428*758e9fbaSOystein Eftevaag
1429*758e9fbaSOystein Eftevaag ESYS_TR authHandle_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
1430*758e9fbaSOystein Eftevaag TPM2B_DIGEST authPolicy = DUMMY_2B_DATA(.buffer);
1431*758e9fbaSOystein Eftevaag TPMI_ALG_HASH hashAlg = TPM2_ALG_SHA1;
1432*758e9fbaSOystein Eftevaag TPMI_DH_PCR pcrNum = 0;
1433*758e9fbaSOystein Eftevaag r = Esys_PCR_SetAuthPolicy(esys_context,
1434*758e9fbaSOystein Eftevaag authHandle_handle,
1435*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1436*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1437*758e9fbaSOystein Eftevaag ESYS_TR_NONE, &authPolicy, hashAlg, pcrNum);
1438*758e9fbaSOystein Eftevaag
1439*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1440*758e9fbaSOystein Eftevaag }
1441*758e9fbaSOystein Eftevaag
1442*758e9fbaSOystein Eftevaag static void
test_PCR_SetAuthValue(void ** state)1443*758e9fbaSOystein Eftevaag test_PCR_SetAuthValue(void **state)
1444*758e9fbaSOystein Eftevaag {
1445*758e9fbaSOystein Eftevaag TSS2_RC r;
1446*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1447*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1448*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1449*758e9fbaSOystein Eftevaag
1450*758e9fbaSOystein Eftevaag ESYS_TR pcrHandle_handle = 16;
1451*758e9fbaSOystein Eftevaag TPM2B_DIGEST auth = DUMMY_2B_DATA(.buffer);
1452*758e9fbaSOystein Eftevaag r = Esys_PCR_SetAuthValue(esys_context,
1453*758e9fbaSOystein Eftevaag pcrHandle_handle,
1454*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1455*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, &auth);
1456*758e9fbaSOystein Eftevaag
1457*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1458*758e9fbaSOystein Eftevaag }
1459*758e9fbaSOystein Eftevaag
1460*758e9fbaSOystein Eftevaag static void
test_PCR_Reset(void ** state)1461*758e9fbaSOystein Eftevaag test_PCR_Reset(void **state)
1462*758e9fbaSOystein Eftevaag {
1463*758e9fbaSOystein Eftevaag TSS2_RC r;
1464*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1465*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1466*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1467*758e9fbaSOystein Eftevaag
1468*758e9fbaSOystein Eftevaag ESYS_TR pcrHandle_handle = 16;
1469*758e9fbaSOystein Eftevaag r = Esys_PCR_Reset(esys_context,
1470*758e9fbaSOystein Eftevaag pcrHandle_handle,
1471*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD, ESYS_TR_NONE, ESYS_TR_NONE);
1472*758e9fbaSOystein Eftevaag
1473*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1474*758e9fbaSOystein Eftevaag }
1475*758e9fbaSOystein Eftevaag
1476*758e9fbaSOystein Eftevaag static void
test_PolicySigned(void ** state)1477*758e9fbaSOystein Eftevaag test_PolicySigned(void **state)
1478*758e9fbaSOystein Eftevaag {
1479*758e9fbaSOystein Eftevaag TSS2_RC r;
1480*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1481*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1482*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1483*758e9fbaSOystein Eftevaag
1484*758e9fbaSOystein Eftevaag ESYS_TR authObject_handle = DUMMY_TR_HANDLE_KEY;
1485*758e9fbaSOystein Eftevaag ESYS_TR policySession_handle = DUMMY_TR_HANDLE_POLICY_SESSION;
1486*758e9fbaSOystein Eftevaag TPM2B_NONCE nonceTPM = DUMMY_2B_DATA(.buffer);
1487*758e9fbaSOystein Eftevaag TPM2B_DIGEST cpHashA = DUMMY_2B_DATA(.buffer);
1488*758e9fbaSOystein Eftevaag TPM2B_NONCE policyRef = DUMMY_2B_DATA(.buffer);
1489*758e9fbaSOystein Eftevaag INT32 expiration = 0;
1490*758e9fbaSOystein Eftevaag TPMT_SIGNATURE auth = DUMMY_TPMT_SIGNATURE;
1491*758e9fbaSOystein Eftevaag TPM2B_TIMEOUT *timeout;
1492*758e9fbaSOystein Eftevaag TPMT_TK_AUTH *policyTicket;
1493*758e9fbaSOystein Eftevaag r = Esys_PolicySigned(esys_context,
1494*758e9fbaSOystein Eftevaag authObject_handle,
1495*758e9fbaSOystein Eftevaag policySession_handle,
1496*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1497*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1498*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1499*758e9fbaSOystein Eftevaag &nonceTPM,
1500*758e9fbaSOystein Eftevaag &cpHashA,
1501*758e9fbaSOystein Eftevaag &policyRef,
1502*758e9fbaSOystein Eftevaag expiration, &auth, &timeout, &policyTicket);
1503*758e9fbaSOystein Eftevaag
1504*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1505*758e9fbaSOystein Eftevaag }
1506*758e9fbaSOystein Eftevaag
1507*758e9fbaSOystein Eftevaag static void
test_PolicySecret(void ** state)1508*758e9fbaSOystein Eftevaag test_PolicySecret(void **state)
1509*758e9fbaSOystein Eftevaag {
1510*758e9fbaSOystein Eftevaag TSS2_RC r;
1511*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1512*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1513*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1514*758e9fbaSOystein Eftevaag
1515*758e9fbaSOystein Eftevaag ESYS_TR authHandle_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
1516*758e9fbaSOystein Eftevaag ESYS_TR policySession_handle = DUMMY_TR_HANDLE_POLICY_SESSION;
1517*758e9fbaSOystein Eftevaag TPM2B_NONCE nonceTPM = DUMMY_2B_DATA(.buffer);
1518*758e9fbaSOystein Eftevaag TPM2B_DIGEST cpHashA = DUMMY_2B_DATA(.buffer);
1519*758e9fbaSOystein Eftevaag TPM2B_NONCE policyRef = DUMMY_2B_DATA(.buffer);
1520*758e9fbaSOystein Eftevaag INT32 expiration = 0;
1521*758e9fbaSOystein Eftevaag TPM2B_TIMEOUT *timeout;
1522*758e9fbaSOystein Eftevaag TPMT_TK_AUTH *policyTicket;
1523*758e9fbaSOystein Eftevaag r = Esys_PolicySecret(esys_context,
1524*758e9fbaSOystein Eftevaag authHandle_handle,
1525*758e9fbaSOystein Eftevaag policySession_handle,
1526*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1527*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1528*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1529*758e9fbaSOystein Eftevaag &nonceTPM,
1530*758e9fbaSOystein Eftevaag &cpHashA,
1531*758e9fbaSOystein Eftevaag &policyRef, expiration, &timeout, &policyTicket);
1532*758e9fbaSOystein Eftevaag
1533*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1534*758e9fbaSOystein Eftevaag }
1535*758e9fbaSOystein Eftevaag
1536*758e9fbaSOystein Eftevaag static void
test_PolicyTicket(void ** state)1537*758e9fbaSOystein Eftevaag test_PolicyTicket(void **state)
1538*758e9fbaSOystein Eftevaag {
1539*758e9fbaSOystein Eftevaag TSS2_RC r;
1540*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1541*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1542*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1543*758e9fbaSOystein Eftevaag
1544*758e9fbaSOystein Eftevaag ESYS_TR policySession_handle = DUMMY_TR_HANDLE_POLICY_SESSION;
1545*758e9fbaSOystein Eftevaag TPM2B_TIMEOUT timeout = DUMMY_2B_DATA(.buffer);
1546*758e9fbaSOystein Eftevaag TPM2B_DIGEST cpHashA = DUMMY_2B_DATA(.buffer);
1547*758e9fbaSOystein Eftevaag TPM2B_NONCE policyRef = DUMMY_2B_DATA(.buffer);
1548*758e9fbaSOystein Eftevaag TPM2B_NAME authName = DUMMY_2B_DATA(.name);
1549*758e9fbaSOystein Eftevaag TPMT_TK_AUTH ticket = DUMMY_TPMT_TK_AUTH;
1550*758e9fbaSOystein Eftevaag r = Esys_PolicyTicket(esys_context,
1551*758e9fbaSOystein Eftevaag policySession_handle,
1552*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1553*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1554*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1555*758e9fbaSOystein Eftevaag &timeout, &cpHashA, &policyRef, &authName, &ticket);
1556*758e9fbaSOystein Eftevaag
1557*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1558*758e9fbaSOystein Eftevaag }
1559*758e9fbaSOystein Eftevaag
1560*758e9fbaSOystein Eftevaag static void
test_PolicyOR(void ** state)1561*758e9fbaSOystein Eftevaag test_PolicyOR(void **state)
1562*758e9fbaSOystein Eftevaag {
1563*758e9fbaSOystein Eftevaag TSS2_RC r;
1564*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1565*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1566*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1567*758e9fbaSOystein Eftevaag
1568*758e9fbaSOystein Eftevaag ESYS_TR policySession_handle = DUMMY_TR_HANDLE_POLICY_SESSION;
1569*758e9fbaSOystein Eftevaag TPML_DIGEST pHashList = { 0 };
1570*758e9fbaSOystein Eftevaag r = Esys_PolicyOR(esys_context,
1571*758e9fbaSOystein Eftevaag policySession_handle,
1572*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, ESYS_TR_NONE, &pHashList);
1573*758e9fbaSOystein Eftevaag
1574*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1575*758e9fbaSOystein Eftevaag }
1576*758e9fbaSOystein Eftevaag
1577*758e9fbaSOystein Eftevaag static void
test_PolicyPCR(void ** state)1578*758e9fbaSOystein Eftevaag test_PolicyPCR(void **state)
1579*758e9fbaSOystein Eftevaag {
1580*758e9fbaSOystein Eftevaag TSS2_RC r;
1581*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1582*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1583*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1584*758e9fbaSOystein Eftevaag
1585*758e9fbaSOystein Eftevaag ESYS_TR policySession_handle = DUMMY_TR_HANDLE_POLICY_SESSION;
1586*758e9fbaSOystein Eftevaag TPM2B_DIGEST pcrDigest = DUMMY_2B_DATA(.buffer);
1587*758e9fbaSOystein Eftevaag TPML_PCR_SELECTION pcrs = { 0 };
1588*758e9fbaSOystein Eftevaag r = Esys_PolicyPCR(esys_context,
1589*758e9fbaSOystein Eftevaag policySession_handle,
1590*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1591*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, &pcrDigest, &pcrs);
1592*758e9fbaSOystein Eftevaag
1593*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1594*758e9fbaSOystein Eftevaag }
1595*758e9fbaSOystein Eftevaag
1596*758e9fbaSOystein Eftevaag static void
test_PolicyLocality(void ** state)1597*758e9fbaSOystein Eftevaag test_PolicyLocality(void **state)
1598*758e9fbaSOystein Eftevaag {
1599*758e9fbaSOystein Eftevaag TSS2_RC r;
1600*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1601*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1602*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1603*758e9fbaSOystein Eftevaag
1604*758e9fbaSOystein Eftevaag ESYS_TR policySession = DUMMY_TR_HANDLE_POLICY_SESSION;
1605*758e9fbaSOystein Eftevaag TPMA_LOCALITY locality = TPMA_LOCALITY_TPM2_LOC_ZERO;
1606*758e9fbaSOystein Eftevaag r = Esys_PolicyLocality(esys_context, policySession,
1607*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, ESYS_TR_NONE, locality);
1608*758e9fbaSOystein Eftevaag
1609*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1610*758e9fbaSOystein Eftevaag }
1611*758e9fbaSOystein Eftevaag
1612*758e9fbaSOystein Eftevaag static void
test_PolicyNV(void ** state)1613*758e9fbaSOystein Eftevaag test_PolicyNV(void **state)
1614*758e9fbaSOystein Eftevaag {
1615*758e9fbaSOystein Eftevaag TSS2_RC r;
1616*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1617*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1618*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1619*758e9fbaSOystein Eftevaag
1620*758e9fbaSOystein Eftevaag ESYS_TR authHandle_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
1621*758e9fbaSOystein Eftevaag ESYS_TR nvIndex_handle = DUMMY_TR_HANDLE_NV_INDEX;
1622*758e9fbaSOystein Eftevaag ESYS_TR policySession_handle = DUMMY_TR_HANDLE_POLICY_SESSION;
1623*758e9fbaSOystein Eftevaag TPM2B_OPERAND operandB = DUMMY_2B_DATA(.buffer);
1624*758e9fbaSOystein Eftevaag UINT16 offset = 0;
1625*758e9fbaSOystein Eftevaag TPM2_EO operation = 0;
1626*758e9fbaSOystein Eftevaag r = Esys_PolicyNV(esys_context,
1627*758e9fbaSOystein Eftevaag authHandle_handle,
1628*758e9fbaSOystein Eftevaag nvIndex_handle,
1629*758e9fbaSOystein Eftevaag policySession_handle,
1630*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1631*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, &operandB, offset, operation);
1632*758e9fbaSOystein Eftevaag
1633*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1634*758e9fbaSOystein Eftevaag }
1635*758e9fbaSOystein Eftevaag
1636*758e9fbaSOystein Eftevaag static void
test_PolicyCounterTimer(void ** state)1637*758e9fbaSOystein Eftevaag test_PolicyCounterTimer(void **state)
1638*758e9fbaSOystein Eftevaag {
1639*758e9fbaSOystein Eftevaag TSS2_RC r;
1640*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1641*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1642*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1643*758e9fbaSOystein Eftevaag
1644*758e9fbaSOystein Eftevaag ESYS_TR policySession_handle = DUMMY_TR_HANDLE_POLICY_SESSION;
1645*758e9fbaSOystein Eftevaag TPM2B_OPERAND operandB = DUMMY_2B_DATA(.buffer);
1646*758e9fbaSOystein Eftevaag UINT16 offset = 0;
1647*758e9fbaSOystein Eftevaag TPM2_EO operation = 0;
1648*758e9fbaSOystein Eftevaag r = Esys_PolicyCounterTimer(esys_context,
1649*758e9fbaSOystein Eftevaag policySession_handle,
1650*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1651*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1652*758e9fbaSOystein Eftevaag ESYS_TR_NONE, &operandB, offset, operation);
1653*758e9fbaSOystein Eftevaag
1654*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1655*758e9fbaSOystein Eftevaag }
1656*758e9fbaSOystein Eftevaag
1657*758e9fbaSOystein Eftevaag static void
test_PolicyCommandCode(void ** state)1658*758e9fbaSOystein Eftevaag test_PolicyCommandCode(void **state)
1659*758e9fbaSOystein Eftevaag {
1660*758e9fbaSOystein Eftevaag TSS2_RC r;
1661*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1662*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1663*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1664*758e9fbaSOystein Eftevaag
1665*758e9fbaSOystein Eftevaag ESYS_TR policySession_handle = DUMMY_TR_HANDLE_POLICY_SESSION;
1666*758e9fbaSOystein Eftevaag TPM2_CC code = TPM2_CC_FIRST;
1667*758e9fbaSOystein Eftevaag r = Esys_PolicyCommandCode(esys_context,
1668*758e9fbaSOystein Eftevaag policySession_handle,
1669*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, ESYS_TR_NONE, code);
1670*758e9fbaSOystein Eftevaag
1671*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1672*758e9fbaSOystein Eftevaag }
1673*758e9fbaSOystein Eftevaag
1674*758e9fbaSOystein Eftevaag static void
test_PolicyPhysicalPresence(void ** state)1675*758e9fbaSOystein Eftevaag test_PolicyPhysicalPresence(void **state)
1676*758e9fbaSOystein Eftevaag {
1677*758e9fbaSOystein Eftevaag TSS2_RC r;
1678*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1679*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1680*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1681*758e9fbaSOystein Eftevaag
1682*758e9fbaSOystein Eftevaag ESYS_TR policySession_handle = DUMMY_TR_HANDLE_POLICY_SESSION;
1683*758e9fbaSOystein Eftevaag r = Esys_PolicyPhysicalPresence(esys_context,
1684*758e9fbaSOystein Eftevaag policySession_handle,
1685*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, ESYS_TR_NONE);
1686*758e9fbaSOystein Eftevaag
1687*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1688*758e9fbaSOystein Eftevaag }
1689*758e9fbaSOystein Eftevaag
1690*758e9fbaSOystein Eftevaag static void
test_PolicyCpHash(void ** state)1691*758e9fbaSOystein Eftevaag test_PolicyCpHash(void **state)
1692*758e9fbaSOystein Eftevaag {
1693*758e9fbaSOystein Eftevaag TSS2_RC r;
1694*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1695*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1696*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1697*758e9fbaSOystein Eftevaag
1698*758e9fbaSOystein Eftevaag ESYS_TR policySession = DUMMY_TR_HANDLE_POLICY_SESSION;
1699*758e9fbaSOystein Eftevaag TPM2B_DIGEST cpHashA = DUMMY_2B_DATA(.buffer);
1700*758e9fbaSOystein Eftevaag r = Esys_PolicyCpHash(esys_context,
1701*758e9fbaSOystein Eftevaag policySession,
1702*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1703*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, &cpHashA);
1704*758e9fbaSOystein Eftevaag
1705*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1706*758e9fbaSOystein Eftevaag }
1707*758e9fbaSOystein Eftevaag
1708*758e9fbaSOystein Eftevaag static void
test_PolicyNameHash(void ** state)1709*758e9fbaSOystein Eftevaag test_PolicyNameHash(void **state)
1710*758e9fbaSOystein Eftevaag {
1711*758e9fbaSOystein Eftevaag TSS2_RC r;
1712*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1713*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1714*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1715*758e9fbaSOystein Eftevaag
1716*758e9fbaSOystein Eftevaag ESYS_TR policySession = DUMMY_TR_HANDLE_POLICY_SESSION;
1717*758e9fbaSOystein Eftevaag TPM2B_DIGEST nameHash = DUMMY_2B_DATA(.buffer);
1718*758e9fbaSOystein Eftevaag r = Esys_PolicyNameHash(esys_context,
1719*758e9fbaSOystein Eftevaag policySession,
1720*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1721*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1722*758e9fbaSOystein Eftevaag ESYS_TR_NONE, &nameHash);
1723*758e9fbaSOystein Eftevaag
1724*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1725*758e9fbaSOystein Eftevaag }
1726*758e9fbaSOystein Eftevaag
1727*758e9fbaSOystein Eftevaag static void
test_PolicyDuplicationSelect(void ** state)1728*758e9fbaSOystein Eftevaag test_PolicyDuplicationSelect(void **state)
1729*758e9fbaSOystein Eftevaag {
1730*758e9fbaSOystein Eftevaag TSS2_RC r;
1731*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1732*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1733*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1734*758e9fbaSOystein Eftevaag
1735*758e9fbaSOystein Eftevaag ESYS_TR policySession = DUMMY_TR_HANDLE_POLICY_SESSION;
1736*758e9fbaSOystein Eftevaag TPM2B_NAME objectName = DUMMY_2B_DATA(.name);
1737*758e9fbaSOystein Eftevaag TPM2B_NAME newParentName = DUMMY_2B_DATA(.name);
1738*758e9fbaSOystein Eftevaag TPMI_YES_NO includeObject = 0;
1739*758e9fbaSOystein Eftevaag r = Esys_PolicyDuplicationSelect(esys_context,
1740*758e9fbaSOystein Eftevaag policySession,
1741*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1742*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1743*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1744*758e9fbaSOystein Eftevaag &objectName,
1745*758e9fbaSOystein Eftevaag &newParentName, includeObject);
1746*758e9fbaSOystein Eftevaag
1747*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1748*758e9fbaSOystein Eftevaag }
1749*758e9fbaSOystein Eftevaag
1750*758e9fbaSOystein Eftevaag static void
test_PolicyAuthorize(void ** state)1751*758e9fbaSOystein Eftevaag test_PolicyAuthorize(void **state)
1752*758e9fbaSOystein Eftevaag {
1753*758e9fbaSOystein Eftevaag TSS2_RC r;
1754*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1755*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1756*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1757*758e9fbaSOystein Eftevaag
1758*758e9fbaSOystein Eftevaag ESYS_TR policySession_handle = DUMMY_TR_HANDLE_POLICY_SESSION;
1759*758e9fbaSOystein Eftevaag TPM2B_DIGEST approvedPolicy = DUMMY_2B_DATA(.buffer);
1760*758e9fbaSOystein Eftevaag TPM2B_NONCE policyRef = DUMMY_2B_DATA(.buffer);
1761*758e9fbaSOystein Eftevaag TPM2B_NAME keySign = DUMMY_2B_DATA(.name);
1762*758e9fbaSOystein Eftevaag TPMT_TK_VERIFIED checkTicket = DUMMY_TPMT_TK_VERIFIED;
1763*758e9fbaSOystein Eftevaag r = Esys_PolicyAuthorize(esys_context,
1764*758e9fbaSOystein Eftevaag policySession_handle,
1765*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1766*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1767*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1768*758e9fbaSOystein Eftevaag &approvedPolicy,
1769*758e9fbaSOystein Eftevaag &policyRef, &keySign, &checkTicket);
1770*758e9fbaSOystein Eftevaag
1771*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1772*758e9fbaSOystein Eftevaag }
1773*758e9fbaSOystein Eftevaag
1774*758e9fbaSOystein Eftevaag static void
test_PolicyAuthValue(void ** state)1775*758e9fbaSOystein Eftevaag test_PolicyAuthValue(void **state)
1776*758e9fbaSOystein Eftevaag {
1777*758e9fbaSOystein Eftevaag TSS2_RC r;
1778*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1779*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1780*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1781*758e9fbaSOystein Eftevaag
1782*758e9fbaSOystein Eftevaag ESYS_TR policySession_handle = DUMMY_TR_HANDLE_POLICY_SESSION;
1783*758e9fbaSOystein Eftevaag r = Esys_PolicyAuthValue(esys_context,
1784*758e9fbaSOystein Eftevaag policySession_handle,
1785*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, ESYS_TR_NONE);
1786*758e9fbaSOystein Eftevaag
1787*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1788*758e9fbaSOystein Eftevaag }
1789*758e9fbaSOystein Eftevaag
1790*758e9fbaSOystein Eftevaag static void
test_PolicyPassword(void ** state)1791*758e9fbaSOystein Eftevaag test_PolicyPassword(void **state)
1792*758e9fbaSOystein Eftevaag {
1793*758e9fbaSOystein Eftevaag TSS2_RC r;
1794*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1795*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1796*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1797*758e9fbaSOystein Eftevaag
1798*758e9fbaSOystein Eftevaag ESYS_TR policySession_handle = DUMMY_TR_HANDLE_POLICY_SESSION;
1799*758e9fbaSOystein Eftevaag r = Esys_PolicyPassword(esys_context,
1800*758e9fbaSOystein Eftevaag policySession_handle,
1801*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, ESYS_TR_NONE);
1802*758e9fbaSOystein Eftevaag
1803*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1804*758e9fbaSOystein Eftevaag }
1805*758e9fbaSOystein Eftevaag
1806*758e9fbaSOystein Eftevaag static void
test_PolicyGetDigest(void ** state)1807*758e9fbaSOystein Eftevaag test_PolicyGetDigest(void **state)
1808*758e9fbaSOystein Eftevaag {
1809*758e9fbaSOystein Eftevaag TSS2_RC r;
1810*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1811*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1812*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1813*758e9fbaSOystein Eftevaag
1814*758e9fbaSOystein Eftevaag ESYS_TR policySession_handle = DUMMY_TR_HANDLE_POLICY_SESSION;
1815*758e9fbaSOystein Eftevaag TPM2B_DIGEST *policyDigest;
1816*758e9fbaSOystein Eftevaag r = Esys_PolicyGetDigest(esys_context,
1817*758e9fbaSOystein Eftevaag policySession_handle,
1818*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1819*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, &policyDigest);
1820*758e9fbaSOystein Eftevaag
1821*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1822*758e9fbaSOystein Eftevaag }
1823*758e9fbaSOystein Eftevaag
1824*758e9fbaSOystein Eftevaag static void
test_PolicyNvWritten(void ** state)1825*758e9fbaSOystein Eftevaag test_PolicyNvWritten(void **state)
1826*758e9fbaSOystein Eftevaag {
1827*758e9fbaSOystein Eftevaag TSS2_RC r;
1828*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1829*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1830*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1831*758e9fbaSOystein Eftevaag
1832*758e9fbaSOystein Eftevaag ESYS_TR policySession_handle = DUMMY_TR_HANDLE_POLICY_SESSION;
1833*758e9fbaSOystein Eftevaag TPMI_YES_NO writtenSet = 0;
1834*758e9fbaSOystein Eftevaag r = Esys_PolicyNvWritten(esys_context,
1835*758e9fbaSOystein Eftevaag policySession_handle,
1836*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1837*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, writtenSet);
1838*758e9fbaSOystein Eftevaag
1839*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1840*758e9fbaSOystein Eftevaag }
1841*758e9fbaSOystein Eftevaag
1842*758e9fbaSOystein Eftevaag static void
test_PolicyTemplate(void ** state)1843*758e9fbaSOystein Eftevaag test_PolicyTemplate(void **state)
1844*758e9fbaSOystein Eftevaag {
1845*758e9fbaSOystein Eftevaag TSS2_RC r;
1846*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1847*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1848*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1849*758e9fbaSOystein Eftevaag
1850*758e9fbaSOystein Eftevaag ESYS_TR policySession = DUMMY_TR_HANDLE_POLICY_SESSION;
1851*758e9fbaSOystein Eftevaag TPM2B_DIGEST templateHash = DUMMY_2B_DATA(.buffer);
1852*758e9fbaSOystein Eftevaag r = Esys_PolicyTemplate(esys_context,
1853*758e9fbaSOystein Eftevaag policySession,
1854*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1855*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1856*758e9fbaSOystein Eftevaag ESYS_TR_NONE, &templateHash);
1857*758e9fbaSOystein Eftevaag
1858*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1859*758e9fbaSOystein Eftevaag }
1860*758e9fbaSOystein Eftevaag
1861*758e9fbaSOystein Eftevaag static void
test_PolicyAuthorizeNV(void ** state)1862*758e9fbaSOystein Eftevaag test_PolicyAuthorizeNV(void **state)
1863*758e9fbaSOystein Eftevaag {
1864*758e9fbaSOystein Eftevaag TSS2_RC r;
1865*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1866*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1867*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1868*758e9fbaSOystein Eftevaag
1869*758e9fbaSOystein Eftevaag ESYS_TR authHandle_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
1870*758e9fbaSOystein Eftevaag ESYS_TR nvIndex_handle = DUMMY_TR_HANDLE_NV_INDEX;
1871*758e9fbaSOystein Eftevaag ESYS_TR policySession_handle = DUMMY_TR_HANDLE_POLICY_SESSION;
1872*758e9fbaSOystein Eftevaag r = Esys_PolicyAuthorizeNV(esys_context,
1873*758e9fbaSOystein Eftevaag authHandle_handle,
1874*758e9fbaSOystein Eftevaag nvIndex_handle,
1875*758e9fbaSOystein Eftevaag policySession_handle,
1876*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD, ESYS_TR_NONE, ESYS_TR_NONE);
1877*758e9fbaSOystein Eftevaag
1878*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1879*758e9fbaSOystein Eftevaag }
1880*758e9fbaSOystein Eftevaag
1881*758e9fbaSOystein Eftevaag static void
test_CreatePrimary(void ** state)1882*758e9fbaSOystein Eftevaag test_CreatePrimary(void **state)
1883*758e9fbaSOystein Eftevaag {
1884*758e9fbaSOystein Eftevaag TSS2_RC r;
1885*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1886*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1887*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1888*758e9fbaSOystein Eftevaag
1889*758e9fbaSOystein Eftevaag ESYS_TR primaryHandle_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
1890*758e9fbaSOystein Eftevaag TPM2B_SENSITIVE_CREATE inSensitive = { 0 };
1891*758e9fbaSOystein Eftevaag TPM2B_PUBLIC inPublic = DUMMY_IN_PUBLIC_DATA;
1892*758e9fbaSOystein Eftevaag TPM2B_DATA outsideInfo = DUMMY_2B_DATA(.buffer);
1893*758e9fbaSOystein Eftevaag TPML_PCR_SELECTION creationPCR = { 0 };
1894*758e9fbaSOystein Eftevaag ESYS_TR objectHandle_handle;
1895*758e9fbaSOystein Eftevaag TPM2B_PUBLIC *outPublic;
1896*758e9fbaSOystein Eftevaag TPM2B_CREATION_DATA *creationData;
1897*758e9fbaSOystein Eftevaag TPM2B_DIGEST *creationHash;
1898*758e9fbaSOystein Eftevaag TPMT_TK_CREATION *creationTicket;
1899*758e9fbaSOystein Eftevaag r = Esys_CreatePrimary(esys_context,
1900*758e9fbaSOystein Eftevaag primaryHandle_handle,
1901*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1902*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1903*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
1904*758e9fbaSOystein Eftevaag &inSensitive,
1905*758e9fbaSOystein Eftevaag &inPublic,
1906*758e9fbaSOystein Eftevaag &outsideInfo,
1907*758e9fbaSOystein Eftevaag &creationPCR,
1908*758e9fbaSOystein Eftevaag &objectHandle_handle,
1909*758e9fbaSOystein Eftevaag &outPublic,
1910*758e9fbaSOystein Eftevaag &creationData, &creationHash, &creationTicket);
1911*758e9fbaSOystein Eftevaag
1912*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1913*758e9fbaSOystein Eftevaag }
1914*758e9fbaSOystein Eftevaag
1915*758e9fbaSOystein Eftevaag static void
test_HierarchyControl(void ** state)1916*758e9fbaSOystein Eftevaag test_HierarchyControl(void **state)
1917*758e9fbaSOystein Eftevaag {
1918*758e9fbaSOystein Eftevaag TSS2_RC r;
1919*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1920*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1921*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1922*758e9fbaSOystein Eftevaag
1923*758e9fbaSOystein Eftevaag ESYS_TR authHandle_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
1924*758e9fbaSOystein Eftevaag TPMI_RH_ENABLES enable = TPM2_RH_OWNER;
1925*758e9fbaSOystein Eftevaag TPMI_YES_NO state2 = 0;
1926*758e9fbaSOystein Eftevaag r = Esys_HierarchyControl(esys_context,
1927*758e9fbaSOystein Eftevaag authHandle_handle,
1928*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1929*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, enable, state2);
1930*758e9fbaSOystein Eftevaag
1931*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1932*758e9fbaSOystein Eftevaag }
1933*758e9fbaSOystein Eftevaag
1934*758e9fbaSOystein Eftevaag static void
test_SetPrimaryPolicy(void ** state)1935*758e9fbaSOystein Eftevaag test_SetPrimaryPolicy(void **state)
1936*758e9fbaSOystein Eftevaag {
1937*758e9fbaSOystein Eftevaag TSS2_RC r;
1938*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1939*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1940*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1941*758e9fbaSOystein Eftevaag
1942*758e9fbaSOystein Eftevaag ESYS_TR authHandle_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
1943*758e9fbaSOystein Eftevaag TPM2B_DIGEST authPolicy = DUMMY_2B_DATA(.buffer);
1944*758e9fbaSOystein Eftevaag TPMI_ALG_HASH hashAlg = TPM2_ALG_SHA1;
1945*758e9fbaSOystein Eftevaag r = Esys_SetPrimaryPolicy(esys_context,
1946*758e9fbaSOystein Eftevaag authHandle_handle,
1947*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
1948*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, &authPolicy, hashAlg);
1949*758e9fbaSOystein Eftevaag
1950*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1951*758e9fbaSOystein Eftevaag }
1952*758e9fbaSOystein Eftevaag
1953*758e9fbaSOystein Eftevaag static void
test_ChangePPS(void ** state)1954*758e9fbaSOystein Eftevaag test_ChangePPS(void **state)
1955*758e9fbaSOystein Eftevaag {
1956*758e9fbaSOystein Eftevaag TSS2_RC r;
1957*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1958*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1959*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1960*758e9fbaSOystein Eftevaag
1961*758e9fbaSOystein Eftevaag ESYS_TR authHandle_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
1962*758e9fbaSOystein Eftevaag r = Esys_ChangePPS(esys_context,
1963*758e9fbaSOystein Eftevaag authHandle_handle,
1964*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD, ESYS_TR_NONE, ESYS_TR_NONE);
1965*758e9fbaSOystein Eftevaag
1966*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1967*758e9fbaSOystein Eftevaag }
1968*758e9fbaSOystein Eftevaag
1969*758e9fbaSOystein Eftevaag static void
test_ChangeEPS(void ** state)1970*758e9fbaSOystein Eftevaag test_ChangeEPS(void **state)
1971*758e9fbaSOystein Eftevaag {
1972*758e9fbaSOystein Eftevaag TSS2_RC r;
1973*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1974*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1975*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1976*758e9fbaSOystein Eftevaag
1977*758e9fbaSOystein Eftevaag ESYS_TR authHandle_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
1978*758e9fbaSOystein Eftevaag r = Esys_ChangeEPS(esys_context,
1979*758e9fbaSOystein Eftevaag authHandle_handle,
1980*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD, ESYS_TR_NONE, ESYS_TR_NONE);
1981*758e9fbaSOystein Eftevaag
1982*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1983*758e9fbaSOystein Eftevaag }
1984*758e9fbaSOystein Eftevaag
1985*758e9fbaSOystein Eftevaag static void
test_Clear(void ** state)1986*758e9fbaSOystein Eftevaag test_Clear(void **state)
1987*758e9fbaSOystein Eftevaag {
1988*758e9fbaSOystein Eftevaag TSS2_RC r;
1989*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
1990*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
1991*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
1992*758e9fbaSOystein Eftevaag
1993*758e9fbaSOystein Eftevaag ESYS_TR authHandle_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
1994*758e9fbaSOystein Eftevaag r = Esys_Clear(esys_context,
1995*758e9fbaSOystein Eftevaag authHandle_handle,
1996*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD, ESYS_TR_NONE, ESYS_TR_NONE);
1997*758e9fbaSOystein Eftevaag
1998*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
1999*758e9fbaSOystein Eftevaag }
2000*758e9fbaSOystein Eftevaag
2001*758e9fbaSOystein Eftevaag static void
test_ClearControl(void ** state)2002*758e9fbaSOystein Eftevaag test_ClearControl(void **state)
2003*758e9fbaSOystein Eftevaag {
2004*758e9fbaSOystein Eftevaag TSS2_RC r;
2005*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2006*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2007*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2008*758e9fbaSOystein Eftevaag
2009*758e9fbaSOystein Eftevaag ESYS_TR auth_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
2010*758e9fbaSOystein Eftevaag TPMI_YES_NO disable = 0;
2011*758e9fbaSOystein Eftevaag r = Esys_ClearControl(esys_context,
2012*758e9fbaSOystein Eftevaag auth_handle,
2013*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
2014*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, disable);
2015*758e9fbaSOystein Eftevaag
2016*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2017*758e9fbaSOystein Eftevaag }
2018*758e9fbaSOystein Eftevaag
2019*758e9fbaSOystein Eftevaag static void
test_HierarchyChangeAuth(void ** state)2020*758e9fbaSOystein Eftevaag test_HierarchyChangeAuth(void **state)
2021*758e9fbaSOystein Eftevaag {
2022*758e9fbaSOystein Eftevaag TSS2_RC r;
2023*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2024*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2025*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2026*758e9fbaSOystein Eftevaag
2027*758e9fbaSOystein Eftevaag ESYS_TR authHandle_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
2028*758e9fbaSOystein Eftevaag TPM2B_AUTH newAuth = DUMMY_2B_DATA(.buffer);
2029*758e9fbaSOystein Eftevaag r = Esys_HierarchyChangeAuth(esys_context,
2030*758e9fbaSOystein Eftevaag authHandle_handle,
2031*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
2032*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, &newAuth);
2033*758e9fbaSOystein Eftevaag
2034*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2035*758e9fbaSOystein Eftevaag }
2036*758e9fbaSOystein Eftevaag
2037*758e9fbaSOystein Eftevaag static void
test_DictionaryAttackLockReset(void ** state)2038*758e9fbaSOystein Eftevaag test_DictionaryAttackLockReset(void **state)
2039*758e9fbaSOystein Eftevaag {
2040*758e9fbaSOystein Eftevaag TSS2_RC r;
2041*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2042*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2043*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2044*758e9fbaSOystein Eftevaag
2045*758e9fbaSOystein Eftevaag ESYS_TR lockHandle_handle = DUMMY_TR_HANDLE_LOCKOUT;;
2046*758e9fbaSOystein Eftevaag r = Esys_DictionaryAttackLockReset(esys_context,
2047*758e9fbaSOystein Eftevaag lockHandle_handle,
2048*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
2049*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE);
2050*758e9fbaSOystein Eftevaag
2051*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2052*758e9fbaSOystein Eftevaag }
2053*758e9fbaSOystein Eftevaag
2054*758e9fbaSOystein Eftevaag static void
test_DictionaryAttackParameters(void ** state)2055*758e9fbaSOystein Eftevaag test_DictionaryAttackParameters(void **state)
2056*758e9fbaSOystein Eftevaag {
2057*758e9fbaSOystein Eftevaag TSS2_RC r;
2058*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2059*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2060*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2061*758e9fbaSOystein Eftevaag
2062*758e9fbaSOystein Eftevaag ESYS_TR lockHandle_handle = DUMMY_TR_HANDLE_LOCKOUT;
2063*758e9fbaSOystein Eftevaag UINT32 newMaxTries = 0;
2064*758e9fbaSOystein Eftevaag UINT32 newRecoveryTime = 0;
2065*758e9fbaSOystein Eftevaag UINT32 lockoutRecovery = 0;
2066*758e9fbaSOystein Eftevaag r = Esys_DictionaryAttackParameters(esys_context,
2067*758e9fbaSOystein Eftevaag lockHandle_handle,
2068*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
2069*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
2070*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
2071*758e9fbaSOystein Eftevaag newMaxTries,
2072*758e9fbaSOystein Eftevaag newRecoveryTime, lockoutRecovery);
2073*758e9fbaSOystein Eftevaag
2074*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2075*758e9fbaSOystein Eftevaag }
2076*758e9fbaSOystein Eftevaag
2077*758e9fbaSOystein Eftevaag static void
test_PP_Commands(void ** state)2078*758e9fbaSOystein Eftevaag test_PP_Commands(void **state)
2079*758e9fbaSOystein Eftevaag {
2080*758e9fbaSOystein Eftevaag TSS2_RC r;
2081*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2082*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2083*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2084*758e9fbaSOystein Eftevaag
2085*758e9fbaSOystein Eftevaag ESYS_TR auth_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
2086*758e9fbaSOystein Eftevaag TPML_CC setList = { 0 };
2087*758e9fbaSOystein Eftevaag TPML_CC clearList = { 0 };
2088*758e9fbaSOystein Eftevaag r = Esys_PP_Commands(esys_context,
2089*758e9fbaSOystein Eftevaag auth_handle,
2090*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
2091*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, &setList, &clearList);
2092*758e9fbaSOystein Eftevaag
2093*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2094*758e9fbaSOystein Eftevaag }
2095*758e9fbaSOystein Eftevaag
2096*758e9fbaSOystein Eftevaag static void
test_SetAlgorithmSet(void ** state)2097*758e9fbaSOystein Eftevaag test_SetAlgorithmSet(void **state)
2098*758e9fbaSOystein Eftevaag {
2099*758e9fbaSOystein Eftevaag TSS2_RC r;
2100*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2101*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2102*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2103*758e9fbaSOystein Eftevaag
2104*758e9fbaSOystein Eftevaag ESYS_TR authHandle_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
2105*758e9fbaSOystein Eftevaag UINT32 algorithmSet = 0;
2106*758e9fbaSOystein Eftevaag r = Esys_SetAlgorithmSet(esys_context,
2107*758e9fbaSOystein Eftevaag authHandle_handle,
2108*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
2109*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, algorithmSet);
2110*758e9fbaSOystein Eftevaag
2111*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2112*758e9fbaSOystein Eftevaag }
2113*758e9fbaSOystein Eftevaag
2114*758e9fbaSOystein Eftevaag static void
test_FieldUpgradeStart(void ** state)2115*758e9fbaSOystein Eftevaag test_FieldUpgradeStart(void **state)
2116*758e9fbaSOystein Eftevaag {
2117*758e9fbaSOystein Eftevaag TSS2_RC r;
2118*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2119*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2120*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2121*758e9fbaSOystein Eftevaag
2122*758e9fbaSOystein Eftevaag ESYS_TR authorization_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;;
2123*758e9fbaSOystein Eftevaag ESYS_TR keyHandle_handle = DUMMY_TR_HANDLE_KEY;
2124*758e9fbaSOystein Eftevaag TPM2B_DIGEST fuDigest = DUMMY_2B_DATA(.buffer);
2125*758e9fbaSOystein Eftevaag TPMT_SIGNATURE manifestSignature = DUMMY_TPMT_SIGNATURE;
2126*758e9fbaSOystein Eftevaag r = Esys_FieldUpgradeStart(esys_context,
2127*758e9fbaSOystein Eftevaag authorization_handle,
2128*758e9fbaSOystein Eftevaag keyHandle_handle,
2129*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
2130*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
2131*758e9fbaSOystein Eftevaag ESYS_TR_NONE, &fuDigest, &manifestSignature);
2132*758e9fbaSOystein Eftevaag
2133*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2134*758e9fbaSOystein Eftevaag }
2135*758e9fbaSOystein Eftevaag
2136*758e9fbaSOystein Eftevaag static void
test_FieldUpgradeData(void ** state)2137*758e9fbaSOystein Eftevaag test_FieldUpgradeData(void **state)
2138*758e9fbaSOystein Eftevaag {
2139*758e9fbaSOystein Eftevaag TSS2_RC r;
2140*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2141*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2142*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2143*758e9fbaSOystein Eftevaag
2144*758e9fbaSOystein Eftevaag TPM2B_MAX_BUFFER fuData = DUMMY_2B_DATA(.buffer);
2145*758e9fbaSOystein Eftevaag TPMT_HA *nextDigest;
2146*758e9fbaSOystein Eftevaag TPMT_HA *firstDigest;
2147*758e9fbaSOystein Eftevaag r = Esys_FieldUpgradeData(esys_context,
2148*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
2149*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
2150*758e9fbaSOystein Eftevaag ESYS_TR_NONE, &fuData, &nextDigest, &firstDigest);
2151*758e9fbaSOystein Eftevaag
2152*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2153*758e9fbaSOystein Eftevaag }
2154*758e9fbaSOystein Eftevaag
2155*758e9fbaSOystein Eftevaag static void
test_FirmwareRead(void ** state)2156*758e9fbaSOystein Eftevaag test_FirmwareRead(void **state)
2157*758e9fbaSOystein Eftevaag {
2158*758e9fbaSOystein Eftevaag TSS2_RC r;
2159*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2160*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2161*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2162*758e9fbaSOystein Eftevaag
2163*758e9fbaSOystein Eftevaag UINT32 sequenceNumber = 0;
2164*758e9fbaSOystein Eftevaag TPM2B_MAX_BUFFER *fuData;
2165*758e9fbaSOystein Eftevaag r = Esys_FirmwareRead(esys_context,
2166*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
2167*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, sequenceNumber, &fuData);
2168*758e9fbaSOystein Eftevaag
2169*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2170*758e9fbaSOystein Eftevaag }
2171*758e9fbaSOystein Eftevaag
2172*758e9fbaSOystein Eftevaag static void
test_ContextSave(void ** state)2173*758e9fbaSOystein Eftevaag test_ContextSave(void **state)
2174*758e9fbaSOystein Eftevaag {
2175*758e9fbaSOystein Eftevaag TSS2_RC r;
2176*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2177*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2178*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2179*758e9fbaSOystein Eftevaag
2180*758e9fbaSOystein Eftevaag ESYS_TR saveHandle_handle = DUMMY_TR_HANDLE_KEY;
2181*758e9fbaSOystein Eftevaag TPMS_CONTEXT *context;
2182*758e9fbaSOystein Eftevaag r = Esys_ContextSave(esys_context, saveHandle_handle, &context);
2183*758e9fbaSOystein Eftevaag
2184*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2185*758e9fbaSOystein Eftevaag }
2186*758e9fbaSOystein Eftevaag
2187*758e9fbaSOystein Eftevaag static void
test_ContextLoad(void ** state)2188*758e9fbaSOystein Eftevaag test_ContextLoad(void **state)
2189*758e9fbaSOystein Eftevaag {
2190*758e9fbaSOystein Eftevaag TSS2_RC r;
2191*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2192*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2193*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2194*758e9fbaSOystein Eftevaag
2195*758e9fbaSOystein Eftevaag TPMS_CONTEXT context = { 0 };
2196*758e9fbaSOystein Eftevaag ESYS_TR loadedHandle_handle;
2197*758e9fbaSOystein Eftevaag
2198*758e9fbaSOystein Eftevaag context.contextBlob.size = 0x100;
2199*758e9fbaSOystein Eftevaag context.savedHandle = TPM2_TRANSIENT_FIRST;
2200*758e9fbaSOystein Eftevaag context.hierarchy = TPM2_RH_OWNER;
2201*758e9fbaSOystein Eftevaag r = Esys_ContextLoad(esys_context, &context, &loadedHandle_handle);
2202*758e9fbaSOystein Eftevaag
2203*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2204*758e9fbaSOystein Eftevaag }
2205*758e9fbaSOystein Eftevaag
2206*758e9fbaSOystein Eftevaag static void
test_FlushContext(void ** state)2207*758e9fbaSOystein Eftevaag test_FlushContext(void **state)
2208*758e9fbaSOystein Eftevaag {
2209*758e9fbaSOystein Eftevaag TSS2_RC r;
2210*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2211*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2212*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2213*758e9fbaSOystein Eftevaag
2214*758e9fbaSOystein Eftevaag ESYS_TR flushHandle_handle = DUMMY_TR_HANDLE_KEY;
2215*758e9fbaSOystein Eftevaag r = Esys_FlushContext(esys_context, flushHandle_handle);
2216*758e9fbaSOystein Eftevaag
2217*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2218*758e9fbaSOystein Eftevaag }
2219*758e9fbaSOystein Eftevaag
2220*758e9fbaSOystein Eftevaag static void
test_EvictControl(void ** state)2221*758e9fbaSOystein Eftevaag test_EvictControl(void **state)
2222*758e9fbaSOystein Eftevaag {
2223*758e9fbaSOystein Eftevaag TSS2_RC r;
2224*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2225*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2226*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2227*758e9fbaSOystein Eftevaag
2228*758e9fbaSOystein Eftevaag ESYS_TR auth_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
2229*758e9fbaSOystein Eftevaag ESYS_TR objectHandle_handle = DUMMY_TR_HANDLE_KEY;
2230*758e9fbaSOystein Eftevaag TPMI_DH_PERSISTENT persistentHandle = TPM2_PERSISTENT_FIRST;
2231*758e9fbaSOystein Eftevaag ESYS_TR newObjectHandle_handle;
2232*758e9fbaSOystein Eftevaag r = Esys_EvictControl(esys_context,
2233*758e9fbaSOystein Eftevaag auth_handle,
2234*758e9fbaSOystein Eftevaag objectHandle_handle,
2235*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
2236*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
2237*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
2238*758e9fbaSOystein Eftevaag persistentHandle, &newObjectHandle_handle);
2239*758e9fbaSOystein Eftevaag
2240*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2241*758e9fbaSOystein Eftevaag }
2242*758e9fbaSOystein Eftevaag
2243*758e9fbaSOystein Eftevaag static void
test_ReadClock(void ** state)2244*758e9fbaSOystein Eftevaag test_ReadClock(void **state)
2245*758e9fbaSOystein Eftevaag {
2246*758e9fbaSOystein Eftevaag TSS2_RC r;
2247*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2248*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2249*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2250*758e9fbaSOystein Eftevaag
2251*758e9fbaSOystein Eftevaag TPMS_TIME_INFO *currentTime;
2252*758e9fbaSOystein Eftevaag r = Esys_ReadClock(esys_context,
2253*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, ESYS_TR_NONE, ¤tTime);
2254*758e9fbaSOystein Eftevaag
2255*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2256*758e9fbaSOystein Eftevaag }
2257*758e9fbaSOystein Eftevaag
2258*758e9fbaSOystein Eftevaag static void
test_ClockSet(void ** state)2259*758e9fbaSOystein Eftevaag test_ClockSet(void **state)
2260*758e9fbaSOystein Eftevaag {
2261*758e9fbaSOystein Eftevaag TSS2_RC r;
2262*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2263*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2264*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2265*758e9fbaSOystein Eftevaag
2266*758e9fbaSOystein Eftevaag ESYS_TR auth_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
2267*758e9fbaSOystein Eftevaag UINT64 newTime = 0;
2268*758e9fbaSOystein Eftevaag r = Esys_ClockSet(esys_context,
2269*758e9fbaSOystein Eftevaag auth_handle,
2270*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD, ESYS_TR_NONE, ESYS_TR_NONE, newTime);
2271*758e9fbaSOystein Eftevaag
2272*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2273*758e9fbaSOystein Eftevaag }
2274*758e9fbaSOystein Eftevaag
2275*758e9fbaSOystein Eftevaag static void
test_ClockRateAdjust(void ** state)2276*758e9fbaSOystein Eftevaag test_ClockRateAdjust(void **state)
2277*758e9fbaSOystein Eftevaag {
2278*758e9fbaSOystein Eftevaag TSS2_RC r;
2279*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2280*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2281*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2282*758e9fbaSOystein Eftevaag
2283*758e9fbaSOystein Eftevaag ESYS_TR auth_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
2284*758e9fbaSOystein Eftevaag TPM2_CLOCK_ADJUST rateAdjust = 0;
2285*758e9fbaSOystein Eftevaag r = Esys_ClockRateAdjust(esys_context,
2286*758e9fbaSOystein Eftevaag auth_handle,
2287*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
2288*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, rateAdjust);
2289*758e9fbaSOystein Eftevaag
2290*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2291*758e9fbaSOystein Eftevaag }
2292*758e9fbaSOystein Eftevaag
2293*758e9fbaSOystein Eftevaag static void
test_GetCapability(void ** state)2294*758e9fbaSOystein Eftevaag test_GetCapability(void **state)
2295*758e9fbaSOystein Eftevaag {
2296*758e9fbaSOystein Eftevaag TSS2_RC r;
2297*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2298*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2299*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2300*758e9fbaSOystein Eftevaag
2301*758e9fbaSOystein Eftevaag TPM2_CAP capability = 0;
2302*758e9fbaSOystein Eftevaag UINT32 property = 0;
2303*758e9fbaSOystein Eftevaag UINT32 propertyCount = 0;
2304*758e9fbaSOystein Eftevaag TPMS_CAPABILITY_DATA *capabilityData;
2305*758e9fbaSOystein Eftevaag TPMI_YES_NO moreData;
2306*758e9fbaSOystein Eftevaag r = Esys_GetCapability(esys_context,
2307*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
2308*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
2309*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
2310*758e9fbaSOystein Eftevaag capability,
2311*758e9fbaSOystein Eftevaag property, propertyCount, &moreData, &capabilityData);
2312*758e9fbaSOystein Eftevaag
2313*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2314*758e9fbaSOystein Eftevaag }
2315*758e9fbaSOystein Eftevaag
2316*758e9fbaSOystein Eftevaag static void
test_TestParms(void ** state)2317*758e9fbaSOystein Eftevaag test_TestParms(void **state)
2318*758e9fbaSOystein Eftevaag {
2319*758e9fbaSOystein Eftevaag TSS2_RC r;
2320*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2321*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2322*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2323*758e9fbaSOystein Eftevaag
2324*758e9fbaSOystein Eftevaag TPMT_PUBLIC_PARMS parameters = DUMMY_TPMT_PUBLIC_PARAMS;
2325*758e9fbaSOystein Eftevaag r = Esys_TestParms(esys_context,
2326*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, ESYS_TR_NONE, ¶meters);
2327*758e9fbaSOystein Eftevaag
2328*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2329*758e9fbaSOystein Eftevaag }
2330*758e9fbaSOystein Eftevaag
2331*758e9fbaSOystein Eftevaag static void
test_NV_DefineSpace(void ** state)2332*758e9fbaSOystein Eftevaag test_NV_DefineSpace(void **state)
2333*758e9fbaSOystein Eftevaag {
2334*758e9fbaSOystein Eftevaag TSS2_RC r;
2335*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2336*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2337*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2338*758e9fbaSOystein Eftevaag
2339*758e9fbaSOystein Eftevaag ESYS_TR authHandle_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
2340*758e9fbaSOystein Eftevaag TPM2B_AUTH auth = DUMMY_2B_DATA(.buffer);
2341*758e9fbaSOystein Eftevaag TPM2B_NV_PUBLIC publicInfo = {
2342*758e9fbaSOystein Eftevaag .size = 0,
2343*758e9fbaSOystein Eftevaag .nvPublic = {
2344*758e9fbaSOystein Eftevaag .nvIndex = TPM2_NV_INDEX_FIRST,
2345*758e9fbaSOystein Eftevaag .nameAlg = TPM2_ALG_SHA1,
2346*758e9fbaSOystein Eftevaag .attributes = (TPMA_NV_PPWRITE |
2347*758e9fbaSOystein Eftevaag TPMA_NV_AUTHWRITE |
2348*758e9fbaSOystein Eftevaag 1 << TPMA_NV_TPM2_NT_SHIFT |
2349*758e9fbaSOystein Eftevaag TPMA_NV_WRITE_STCLEAR |
2350*758e9fbaSOystein Eftevaag TPMA_NV_PPREAD |
2351*758e9fbaSOystein Eftevaag TPMA_NV_AUTHREAD | TPMA_NV_PLATFORMCREATE),
2352*758e9fbaSOystein Eftevaag .authPolicy = {
2353*758e9fbaSOystein Eftevaag .size = 0,
2354*758e9fbaSOystein Eftevaag .buffer = {},
2355*758e9fbaSOystein Eftevaag },
2356*758e9fbaSOystein Eftevaag .dataSize = 32,
2357*758e9fbaSOystein Eftevaag }
2358*758e9fbaSOystein Eftevaag };
2359*758e9fbaSOystein Eftevaag ESYS_TR nvHandle_handle;
2360*758e9fbaSOystein Eftevaag r = Esys_NV_DefineSpace(esys_context,
2361*758e9fbaSOystein Eftevaag authHandle_handle,
2362*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
2363*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
2364*758e9fbaSOystein Eftevaag ESYS_TR_NONE, &auth, &publicInfo, &nvHandle_handle);
2365*758e9fbaSOystein Eftevaag
2366*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2367*758e9fbaSOystein Eftevaag }
2368*758e9fbaSOystein Eftevaag
2369*758e9fbaSOystein Eftevaag static void
test_NV_UndefineSpace(void ** state)2370*758e9fbaSOystein Eftevaag test_NV_UndefineSpace(void **state)
2371*758e9fbaSOystein Eftevaag {
2372*758e9fbaSOystein Eftevaag TSS2_RC r;
2373*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2374*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2375*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2376*758e9fbaSOystein Eftevaag
2377*758e9fbaSOystein Eftevaag ESYS_TR authHandle_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
2378*758e9fbaSOystein Eftevaag ESYS_TR nvIndex_handle = DUMMY_TR_HANDLE_NV_INDEX;
2379*758e9fbaSOystein Eftevaag r = Esys_NV_UndefineSpace(esys_context,
2380*758e9fbaSOystein Eftevaag authHandle_handle,
2381*758e9fbaSOystein Eftevaag nvIndex_handle,
2382*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD, ESYS_TR_NONE, ESYS_TR_NONE);
2383*758e9fbaSOystein Eftevaag
2384*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2385*758e9fbaSOystein Eftevaag }
2386*758e9fbaSOystein Eftevaag
2387*758e9fbaSOystein Eftevaag static void
test_NV_UndefineSpaceSpecial(void ** state)2388*758e9fbaSOystein Eftevaag test_NV_UndefineSpaceSpecial(void **state)
2389*758e9fbaSOystein Eftevaag {
2390*758e9fbaSOystein Eftevaag TSS2_RC r;
2391*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2392*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2393*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2394*758e9fbaSOystein Eftevaag
2395*758e9fbaSOystein Eftevaag ESYS_TR nvIndex_handle = DUMMY_TR_HANDLE_NV_INDEX;
2396*758e9fbaSOystein Eftevaag ESYS_TR platform_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
2397*758e9fbaSOystein Eftevaag r = Esys_NV_UndefineSpaceSpecial(esys_context,
2398*758e9fbaSOystein Eftevaag nvIndex_handle,
2399*758e9fbaSOystein Eftevaag platform_handle,
2400*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
2401*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD, ESYS_TR_NONE);
2402*758e9fbaSOystein Eftevaag
2403*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2404*758e9fbaSOystein Eftevaag }
2405*758e9fbaSOystein Eftevaag
2406*758e9fbaSOystein Eftevaag static void
test_NV_ReadPublic(void ** state)2407*758e9fbaSOystein Eftevaag test_NV_ReadPublic(void **state)
2408*758e9fbaSOystein Eftevaag {
2409*758e9fbaSOystein Eftevaag TSS2_RC r;
2410*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2411*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2412*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2413*758e9fbaSOystein Eftevaag
2414*758e9fbaSOystein Eftevaag ESYS_TR nvIndex_handle = DUMMY_TR_HANDLE_NV_INDEX;
2415*758e9fbaSOystein Eftevaag TPM2B_NV_PUBLIC *nvPublic;
2416*758e9fbaSOystein Eftevaag TPM2B_NAME *nvName;
2417*758e9fbaSOystein Eftevaag r = Esys_NV_ReadPublic(esys_context,
2418*758e9fbaSOystein Eftevaag nvIndex_handle,
2419*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
2420*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, &nvPublic, &nvName);
2421*758e9fbaSOystein Eftevaag
2422*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2423*758e9fbaSOystein Eftevaag }
2424*758e9fbaSOystein Eftevaag
2425*758e9fbaSOystein Eftevaag static void
test_NV_Write(void ** state)2426*758e9fbaSOystein Eftevaag test_NV_Write(void **state)
2427*758e9fbaSOystein Eftevaag {
2428*758e9fbaSOystein Eftevaag TSS2_RC r;
2429*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2430*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2431*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2432*758e9fbaSOystein Eftevaag
2433*758e9fbaSOystein Eftevaag ESYS_TR authHandle_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
2434*758e9fbaSOystein Eftevaag ESYS_TR nvIndex_handle = DUMMY_TR_HANDLE_NV_INDEX;
2435*758e9fbaSOystein Eftevaag TPM2B_MAX_NV_BUFFER data = DUMMY_2B_DATA(.buffer);
2436*758e9fbaSOystein Eftevaag UINT16 offset = 0;
2437*758e9fbaSOystein Eftevaag r = Esys_NV_Write(esys_context,
2438*758e9fbaSOystein Eftevaag authHandle_handle,
2439*758e9fbaSOystein Eftevaag nvIndex_handle,
2440*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
2441*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, &data, offset);
2442*758e9fbaSOystein Eftevaag
2443*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2444*758e9fbaSOystein Eftevaag }
2445*758e9fbaSOystein Eftevaag
2446*758e9fbaSOystein Eftevaag static void
test_NV_Increment(void ** state)2447*758e9fbaSOystein Eftevaag test_NV_Increment(void **state)
2448*758e9fbaSOystein Eftevaag {
2449*758e9fbaSOystein Eftevaag TSS2_RC r;
2450*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2451*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2452*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2453*758e9fbaSOystein Eftevaag
2454*758e9fbaSOystein Eftevaag ESYS_TR authHandle_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
2455*758e9fbaSOystein Eftevaag ESYS_TR nvIndex_handle = DUMMY_TR_HANDLE_NV_INDEX;
2456*758e9fbaSOystein Eftevaag r = Esys_NV_Increment(esys_context,
2457*758e9fbaSOystein Eftevaag authHandle_handle,
2458*758e9fbaSOystein Eftevaag nvIndex_handle,
2459*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD, ESYS_TR_NONE, ESYS_TR_NONE);
2460*758e9fbaSOystein Eftevaag
2461*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2462*758e9fbaSOystein Eftevaag }
2463*758e9fbaSOystein Eftevaag
2464*758e9fbaSOystein Eftevaag static void
test_NV_Extend(void ** state)2465*758e9fbaSOystein Eftevaag test_NV_Extend(void **state)
2466*758e9fbaSOystein Eftevaag {
2467*758e9fbaSOystein Eftevaag TSS2_RC r;
2468*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2469*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2470*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2471*758e9fbaSOystein Eftevaag
2472*758e9fbaSOystein Eftevaag ESYS_TR authHandle_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
2473*758e9fbaSOystein Eftevaag ESYS_TR nvIndex_handle = DUMMY_TR_HANDLE_NV_INDEX;
2474*758e9fbaSOystein Eftevaag TPM2B_MAX_NV_BUFFER data = DUMMY_2B_DATA(.buffer);
2475*758e9fbaSOystein Eftevaag r = Esys_NV_Extend(esys_context,
2476*758e9fbaSOystein Eftevaag authHandle_handle,
2477*758e9fbaSOystein Eftevaag nvIndex_handle,
2478*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD, ESYS_TR_NONE, ESYS_TR_NONE, &data);
2479*758e9fbaSOystein Eftevaag
2480*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2481*758e9fbaSOystein Eftevaag }
2482*758e9fbaSOystein Eftevaag
2483*758e9fbaSOystein Eftevaag static void
test_NV_SetBits(void ** state)2484*758e9fbaSOystein Eftevaag test_NV_SetBits(void **state)
2485*758e9fbaSOystein Eftevaag {
2486*758e9fbaSOystein Eftevaag TSS2_RC r;
2487*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2488*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2489*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2490*758e9fbaSOystein Eftevaag
2491*758e9fbaSOystein Eftevaag ESYS_TR authHandle_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
2492*758e9fbaSOystein Eftevaag ESYS_TR nvIndex_handle = DUMMY_TR_HANDLE_NV_INDEX;
2493*758e9fbaSOystein Eftevaag UINT64 bits = 0;
2494*758e9fbaSOystein Eftevaag r = Esys_NV_SetBits(esys_context,
2495*758e9fbaSOystein Eftevaag authHandle_handle,
2496*758e9fbaSOystein Eftevaag nvIndex_handle,
2497*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD, ESYS_TR_NONE, ESYS_TR_NONE, bits);
2498*758e9fbaSOystein Eftevaag
2499*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2500*758e9fbaSOystein Eftevaag }
2501*758e9fbaSOystein Eftevaag
2502*758e9fbaSOystein Eftevaag static void
test_NV_WriteLock(void ** state)2503*758e9fbaSOystein Eftevaag test_NV_WriteLock(void **state)
2504*758e9fbaSOystein Eftevaag {
2505*758e9fbaSOystein Eftevaag TSS2_RC r;
2506*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2507*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2508*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2509*758e9fbaSOystein Eftevaag
2510*758e9fbaSOystein Eftevaag ESYS_TR authHandle_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
2511*758e9fbaSOystein Eftevaag ESYS_TR nvIndex_handle = DUMMY_TR_HANDLE_NV_INDEX;
2512*758e9fbaSOystein Eftevaag r = Esys_NV_WriteLock(esys_context,
2513*758e9fbaSOystein Eftevaag authHandle_handle,
2514*758e9fbaSOystein Eftevaag nvIndex_handle,
2515*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD, ESYS_TR_NONE, ESYS_TR_NONE);
2516*758e9fbaSOystein Eftevaag
2517*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2518*758e9fbaSOystein Eftevaag }
2519*758e9fbaSOystein Eftevaag
2520*758e9fbaSOystein Eftevaag static void
test_NV_GlobalWriteLock(void ** state)2521*758e9fbaSOystein Eftevaag test_NV_GlobalWriteLock(void **state)
2522*758e9fbaSOystein Eftevaag {
2523*758e9fbaSOystein Eftevaag TSS2_RC r;
2524*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2525*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2526*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2527*758e9fbaSOystein Eftevaag
2528*758e9fbaSOystein Eftevaag ESYS_TR authHandle_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
2529*758e9fbaSOystein Eftevaag r = Esys_NV_GlobalWriteLock(esys_context,
2530*758e9fbaSOystein Eftevaag authHandle_handle,
2531*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD, ESYS_TR_NONE, ESYS_TR_NONE);
2532*758e9fbaSOystein Eftevaag
2533*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2534*758e9fbaSOystein Eftevaag }
2535*758e9fbaSOystein Eftevaag
2536*758e9fbaSOystein Eftevaag static void
test_NV_Read(void ** state)2537*758e9fbaSOystein Eftevaag test_NV_Read(void **state)
2538*758e9fbaSOystein Eftevaag {
2539*758e9fbaSOystein Eftevaag TSS2_RC r;
2540*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2541*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2542*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2543*758e9fbaSOystein Eftevaag
2544*758e9fbaSOystein Eftevaag ESYS_TR authHandle_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
2545*758e9fbaSOystein Eftevaag ESYS_TR nvIndex_handle = DUMMY_TR_HANDLE_NV_INDEX;
2546*758e9fbaSOystein Eftevaag UINT16 size = 0;
2547*758e9fbaSOystein Eftevaag UINT16 offset = 0;
2548*758e9fbaSOystein Eftevaag TPM2B_MAX_NV_BUFFER *data;
2549*758e9fbaSOystein Eftevaag r = Esys_NV_Read(esys_context,
2550*758e9fbaSOystein Eftevaag authHandle_handle,
2551*758e9fbaSOystein Eftevaag nvIndex_handle,
2552*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
2553*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, size, offset, &data);
2554*758e9fbaSOystein Eftevaag
2555*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2556*758e9fbaSOystein Eftevaag }
2557*758e9fbaSOystein Eftevaag
2558*758e9fbaSOystein Eftevaag static void
test_NV_ReadLock(void ** state)2559*758e9fbaSOystein Eftevaag test_NV_ReadLock(void **state)
2560*758e9fbaSOystein Eftevaag {
2561*758e9fbaSOystein Eftevaag TSS2_RC r;
2562*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2563*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2564*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2565*758e9fbaSOystein Eftevaag
2566*758e9fbaSOystein Eftevaag ESYS_TR authHandle_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
2567*758e9fbaSOystein Eftevaag ESYS_TR nvIndex_handle = DUMMY_TR_HANDLE_NV_INDEX;
2568*758e9fbaSOystein Eftevaag r = Esys_NV_ReadLock(esys_context,
2569*758e9fbaSOystein Eftevaag authHandle_handle,
2570*758e9fbaSOystein Eftevaag nvIndex_handle,
2571*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD, ESYS_TR_NONE, ESYS_TR_NONE);
2572*758e9fbaSOystein Eftevaag
2573*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2574*758e9fbaSOystein Eftevaag }
2575*758e9fbaSOystein Eftevaag
2576*758e9fbaSOystein Eftevaag static void
test_NV_ChangeAuth(void ** state)2577*758e9fbaSOystein Eftevaag test_NV_ChangeAuth(void **state)
2578*758e9fbaSOystein Eftevaag {
2579*758e9fbaSOystein Eftevaag TSS2_RC r;
2580*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2581*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2582*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2583*758e9fbaSOystein Eftevaag
2584*758e9fbaSOystein Eftevaag ESYS_TR nvIndex_handle = DUMMY_TR_HANDLE_NV_INDEX;
2585*758e9fbaSOystein Eftevaag TPM2B_AUTH newAuth = DUMMY_2B_DATA(.buffer);
2586*758e9fbaSOystein Eftevaag r = Esys_NV_ChangeAuth(esys_context,
2587*758e9fbaSOystein Eftevaag nvIndex_handle,
2588*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
2589*758e9fbaSOystein Eftevaag ESYS_TR_NONE, ESYS_TR_NONE, &newAuth);
2590*758e9fbaSOystein Eftevaag
2591*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2592*758e9fbaSOystein Eftevaag }
2593*758e9fbaSOystein Eftevaag
2594*758e9fbaSOystein Eftevaag static void
test_NV_Certify(void ** state)2595*758e9fbaSOystein Eftevaag test_NV_Certify(void **state)
2596*758e9fbaSOystein Eftevaag {
2597*758e9fbaSOystein Eftevaag TSS2_RC r;
2598*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2599*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2600*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2601*758e9fbaSOystein Eftevaag
2602*758e9fbaSOystein Eftevaag ESYS_TR signHandle_handle = DUMMY_TR_HANDLE_KEY;
2603*758e9fbaSOystein Eftevaag ESYS_TR authHandle_handle = DUMMY_TR_HANDLE_HIERARCHY_PLATFORM;
2604*758e9fbaSOystein Eftevaag ESYS_TR nvIndex_handle = DUMMY_TR_HANDLE_NV_INDEX;
2605*758e9fbaSOystein Eftevaag TPM2B_DATA qualifyingData = DUMMY_2B_DATA(.buffer);
2606*758e9fbaSOystein Eftevaag TPMT_SIG_SCHEME inScheme = {.scheme = TPM2_ALG_NULL,.details = {} };
2607*758e9fbaSOystein Eftevaag UINT16 size = 0;
2608*758e9fbaSOystein Eftevaag UINT16 offset = 0;
2609*758e9fbaSOystein Eftevaag TPM2B_ATTEST *certifyInfo;
2610*758e9fbaSOystein Eftevaag TPMT_SIGNATURE *signature;
2611*758e9fbaSOystein Eftevaag r = Esys_NV_Certify(esys_context,
2612*758e9fbaSOystein Eftevaag signHandle_handle,
2613*758e9fbaSOystein Eftevaag authHandle_handle,
2614*758e9fbaSOystein Eftevaag nvIndex_handle,
2615*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
2616*758e9fbaSOystein Eftevaag ESYS_TR_PASSWORD,
2617*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
2618*758e9fbaSOystein Eftevaag &qualifyingData,
2619*758e9fbaSOystein Eftevaag &inScheme, size, offset, &certifyInfo, &signature);
2620*758e9fbaSOystein Eftevaag
2621*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2622*758e9fbaSOystein Eftevaag }
2623*758e9fbaSOystein Eftevaag
2624*758e9fbaSOystein Eftevaag static void
test_Vendor_TCG_Test(void ** state)2625*758e9fbaSOystein Eftevaag test_Vendor_TCG_Test(void **state)
2626*758e9fbaSOystein Eftevaag {
2627*758e9fbaSOystein Eftevaag TSS2_RC r;
2628*758e9fbaSOystein Eftevaag TSS2_TCTI_CONTEXT *tcti;
2629*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys_context = (ESYS_CONTEXT *) * state;
2630*758e9fbaSOystein Eftevaag Esys_GetTcti(esys_context, &tcti);
2631*758e9fbaSOystein Eftevaag
2632*758e9fbaSOystein Eftevaag TPM2B_DATA inputData = DUMMY_2B_DATA(.buffer);
2633*758e9fbaSOystein Eftevaag TPM2B_DATA *outputData;
2634*758e9fbaSOystein Eftevaag r = Esys_Vendor_TCG_Test(esys_context,
2635*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
2636*758e9fbaSOystein Eftevaag ESYS_TR_NONE,
2637*758e9fbaSOystein Eftevaag ESYS_TR_NONE, &inputData, &outputData);
2638*758e9fbaSOystein Eftevaag
2639*758e9fbaSOystein Eftevaag assert_int_equal(r, 0x0FFF);
2640*758e9fbaSOystein Eftevaag }
2641*758e9fbaSOystein Eftevaag
2642*758e9fbaSOystein Eftevaag int
main(int argc,char * argv[])2643*758e9fbaSOystein Eftevaag main(int argc, char *argv[])
2644*758e9fbaSOystein Eftevaag {
2645*758e9fbaSOystein Eftevaag const struct CMUnitTest tests[] = {
2646*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_Startup, setup, teardown),
2647*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_Shutdown, setup, teardown),
2648*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_SelfTest, setup, teardown),
2649*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_IncrementalSelfTest, setup,
2650*758e9fbaSOystein Eftevaag teardown),
2651*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_GetTestResult, setup, teardown),
2652*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_StartAuthSession, setup, teardown),
2653*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PolicyRestart, setup, teardown),
2654*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_Create, setup, teardown),
2655*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_Load, setup, teardown),
2656*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_LoadExternal, setup, teardown),
2657*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_ReadPublic, setup, teardown),
2658*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_ActivateCredential, setup,
2659*758e9fbaSOystein Eftevaag teardown),
2660*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_MakeCredential, setup, teardown),
2661*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_Unseal, setup, teardown),
2662*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_ObjectChangeAuth, setup, teardown),
2663*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_Duplicate, setup, teardown),
2664*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_Rewrap, setup, teardown),
2665*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_Import, setup, teardown),
2666*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_RSA_Encrypt, setup, teardown),
2667*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_RSA_Decrypt, setup, teardown),
2668*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_ECDH_KeyGen, setup, teardown),
2669*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_ECDH_ZGen, setup, teardown),
2670*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_ECC_Parameters, setup, teardown),
2671*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_ZGen_2Phase, setup, teardown),
2672*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_EncryptDecrypt, setup, teardown),
2673*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_EncryptDecrypt2, setup, teardown),
2674*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_Hash, setup, teardown),
2675*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_HMAC, setup, teardown),
2676*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_GetRandom, setup, teardown),
2677*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_StirRandom, setup, teardown),
2678*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_HMAC_Start, setup, teardown),
2679*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_HashSequenceStart, setup,
2680*758e9fbaSOystein Eftevaag teardown),
2681*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_SequenceUpdate, setup, teardown),
2682*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_SequenceComplete, setup, teardown),
2683*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_EventSequenceComplete, setup,
2684*758e9fbaSOystein Eftevaag teardown),
2685*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_Certify, setup, teardown),
2686*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_CertifyCreation, setup, teardown),
2687*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_Quote, setup, teardown),
2688*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_GetSessionAuditDigest, setup,
2689*758e9fbaSOystein Eftevaag teardown),
2690*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_GetCommandAuditDigest, setup,
2691*758e9fbaSOystein Eftevaag teardown),
2692*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_GetTime, setup, teardown),
2693*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_Commit, setup, teardown),
2694*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_EC_Ephemeral, setup, teardown),
2695*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_VerifySignature, setup, teardown),
2696*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_Sign, setup, teardown),
2697*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_SetCommandCodeAuditStatus, setup,
2698*758e9fbaSOystein Eftevaag teardown),
2699*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PCR_Extend, setup, teardown),
2700*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PCR_Event, setup, teardown),
2701*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PCR_Read, setup, teardown),
2702*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PCR_Allocate, setup, teardown),
2703*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PCR_SetAuthPolicy, setup,
2704*758e9fbaSOystein Eftevaag teardown),
2705*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PCR_SetAuthValue, setup, teardown),
2706*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PCR_Reset, setup, teardown),
2707*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PolicySigned, setup, teardown),
2708*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PolicySecret, setup, teardown),
2709*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PolicyTicket, setup, teardown),
2710*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PolicyOR, setup, teardown),
2711*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PolicyPCR, setup, teardown),
2712*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PolicyLocality, setup, teardown),
2713*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PolicyNV, setup, teardown),
2714*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PolicyCounterTimer, setup,
2715*758e9fbaSOystein Eftevaag teardown),
2716*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PolicyCommandCode, setup,
2717*758e9fbaSOystein Eftevaag teardown),
2718*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PolicyPhysicalPresence, setup,
2719*758e9fbaSOystein Eftevaag teardown),
2720*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PolicyCpHash, setup, teardown),
2721*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PolicyNameHash, setup, teardown),
2722*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PolicyDuplicationSelect, setup,
2723*758e9fbaSOystein Eftevaag teardown),
2724*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PolicyAuthorize, setup, teardown),
2725*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PolicyAuthValue, setup, teardown),
2726*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PolicyPassword, setup, teardown),
2727*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PolicyGetDigest, setup, teardown),
2728*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PolicyNvWritten, setup, teardown),
2729*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PolicyTemplate, setup, teardown),
2730*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PolicyAuthorizeNV, setup,
2731*758e9fbaSOystein Eftevaag teardown),
2732*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_CreatePrimary, setup, teardown),
2733*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_HierarchyControl, setup, teardown),
2734*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_SetPrimaryPolicy, setup, teardown),
2735*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_ChangePPS, setup, teardown),
2736*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_ChangeEPS, setup, teardown),
2737*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_Clear, setup, teardown),
2738*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_ClearControl, setup, teardown),
2739*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_HierarchyChangeAuth, setup,
2740*758e9fbaSOystein Eftevaag teardown),
2741*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_DictionaryAttackLockReset, setup,
2742*758e9fbaSOystein Eftevaag teardown),
2743*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_DictionaryAttackParameters, setup,
2744*758e9fbaSOystein Eftevaag teardown),
2745*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_PP_Commands, setup, teardown),
2746*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_SetAlgorithmSet, setup, teardown),
2747*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_FieldUpgradeStart, setup,
2748*758e9fbaSOystein Eftevaag teardown),
2749*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_FieldUpgradeData, setup, teardown),
2750*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_FirmwareRead, setup, teardown),
2751*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_ContextSave, setup, teardown),
2752*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_ContextLoad, setup, teardown),
2753*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_FlushContext, setup, teardown),
2754*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_EvictControl, setup, teardown),
2755*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_ReadClock, setup, teardown),
2756*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_ClockSet, setup, teardown),
2757*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_ClockRateAdjust, setup, teardown),
2758*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_GetCapability, setup, teardown),
2759*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_TestParms, setup, teardown),
2760*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_NV_DefineSpace, setup, teardown),
2761*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_NV_UndefineSpace, setup, teardown),
2762*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_NV_UndefineSpaceSpecial, setup,
2763*758e9fbaSOystein Eftevaag teardown),
2764*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_NV_ReadPublic, setup, teardown),
2765*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_NV_Write, setup, teardown),
2766*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_NV_Increment, setup, teardown),
2767*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_NV_Extend, setup, teardown),
2768*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_NV_SetBits, setup, teardown),
2769*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_NV_WriteLock, setup, teardown),
2770*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_NV_GlobalWriteLock, setup,
2771*758e9fbaSOystein Eftevaag teardown),
2772*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_NV_Read, setup, teardown),
2773*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_NV_ReadLock, setup, teardown),
2774*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_NV_ChangeAuth, setup, teardown),
2775*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_NV_Certify, setup, teardown),
2776*758e9fbaSOystein Eftevaag cmocka_unit_test_setup_teardown(test_Vendor_TCG_Test, setup, teardown),
2777*758e9fbaSOystein Eftevaag };
2778*758e9fbaSOystein Eftevaag return cmocka_run_group_tests(tests, NULL, NULL);
2779*758e9fbaSOystein Eftevaag }
2780