183
obj_encdata_get_pcr_atcreation(TSS_HENCDATA hEncData, UINT32 *size, BYTE **data)
185
struct tsp_object *obj;
186
struct tr_encdata_obj *encdata;
187
TSS_RESULT result = TSS_SUCCESS;
189
if ((obj = obj_list_get_obj(&encdata_list, hEncData)) == NULL)
190
return TSPERR(TSS_E_INVALID_HANDLE);
192
encdata = (struct tr_encdata_obj *)obj->data;
194
if ((obj->flags & TSS_OBJ_FLAG_PCRS) == FALSE) {
198
*data = calloc_tspi(obj->tspContext, sizeof(TCPA_DIGEST));
200
LogError("malloc of %zd bytes failed.", sizeof(TCPA_DIGEST));
201
result = TSPERR(TSS_E_OUTOFMEMORY);
204
*size = sizeof(TCPA_DIGEST);
205
memcpy(*data, &encdata->pcrInfo.digestAtCreation,
206
sizeof(TCPA_DIGEST));
210
obj_list_put(&encdata_list);
216
obj_encdata_get_pcr_atrelease(TSS_HENCDATA hEncData, UINT32 *size, BYTE **data)
218
struct tsp_object *obj;
219
struct tr_encdata_obj *encdata;
220
TSS_RESULT result = TSS_SUCCESS;
222
if ((obj = obj_list_get_obj(&encdata_list, hEncData)) == NULL)
223
return TSPERR(TSS_E_INVALID_HANDLE);
225
encdata = (struct tr_encdata_obj *)obj->data;
227
if ((obj->flags & TSS_OBJ_FLAG_PCRS) == FALSE) {
231
*data = calloc_tspi(obj->tspContext, sizeof(TCPA_DIGEST));
233
LogError("malloc of %zd bytes failed.", sizeof(TCPA_DIGEST));
234
result = TSPERR(TSS_E_OUTOFMEMORY);
237
*size = sizeof(TCPA_DIGEST);
238
memcpy(*data, &encdata->pcrInfo.digestAtRelease,
239
sizeof(TCPA_DIGEST));
243
obj_list_put(&encdata_list);
249
obj_encdata_get_pcr_selection(TSS_HENCDATA hEncData, UINT32 *size, BYTE **data)
251
struct tsp_object *obj;
252
struct tr_encdata_obj *encdata;
253
TSS_RESULT result = TSS_SUCCESS;
255
if ((obj = obj_list_get_obj(&encdata_list, hEncData)) == NULL)
256
return TSPERR(TSS_E_INVALID_HANDLE);
258
encdata = (struct tr_encdata_obj *)obj->data;
260
if ((obj->flags & TSS_OBJ_FLAG_PCRS) == FALSE) {
264
if (encdata->pcrInfo.pcrSelection.sizeOfSelect == 0) {
268
*data = calloc_tspi(obj->tspContext,
269
encdata->pcrInfo.pcrSelection.sizeOfSelect);
271
LogError("malloc of %d bytes failed.",
272
encdata->pcrInfo.pcrSelection.sizeOfSelect);
273
result = TSPERR(TSS_E_OUTOFMEMORY);
276
*size = encdata->pcrInfo.pcrSelection.sizeOfSelect;
277
memcpy(*data, encdata->pcrInfo.pcrSelection.pcrSelect, *size);
282
obj_list_put(&encdata_list);
288
obj_encdata_set_pcr_info(TSS_HENCDATA hEncData, BYTE *info_blob)
290
struct tsp_object *obj;
291
struct tr_encdata_obj *encdata;
295
if ((obj = obj_list_get_obj(&encdata_list, hEncData)) == NULL)
296
return TSPERR(TSS_E_INVALID_HANDLE);
298
encdata = (struct tr_encdata_obj *)obj->data;
300
free(encdata->pcrInfo.pcrSelection.pcrSelect);
303
result = Trspi_UnloadBlob_PCR_INFO(&offset, info_blob, &encdata->pcrInfo);
170
obj_encdata_get_pcr_digest(TSS_HENCDATA hEncData,
171
TSS_FLAG pcrInfoType,
176
struct tsp_object *obj;
177
struct tr_encdata_obj *encdata;
178
TSS_RESULT result = TSS_SUCCESS;
182
if ((obj = obj_list_get_obj(&encdata_list, hEncData)) == NULL)
183
return TSPERR(TSS_E_INVALID_HANDLE);
185
encdata = (struct tr_encdata_obj *)obj->data;
187
if (pcrInfoType != encdata->pcrInfoType) {
188
result = TSPERR(TSS_E_INVALID_OBJ_ACCESS);
192
switch (pcrInfoType) {
193
case TSS_PCRS_STRUCT_INFO:
194
if (dir == TSS_TSPATTRIB_ENCDATAPCR_DIGEST_ATCREATION)
195
digest = &encdata->pcrInfo.info11.digestAtCreation;
196
else if (dir == TSS_TSPATTRIB_ENCDATAPCR_DIGEST_ATRELEASE)
197
digest = &encdata->pcrInfo.info11.digestAtRelease;
199
result = TSPERR(TSS_E_BAD_PARAMETER);
203
case TSS_PCRS_STRUCT_INFO_LONG:
204
if (dir == TSS_TSPATTRIB_ENCDATAPCRLONG_DIGEST_ATCREATION)
205
digest = &encdata->pcrInfo.infolong.digestAtCreation;
206
else if (dir == TSS_TSPATTRIB_ENCDATAPCRLONG_DIGEST_ATRELEASE)
207
digest = &encdata->pcrInfo.infolong.digestAtRelease;
209
result = TSPERR(TSS_E_BAD_PARAMETER);
214
result = TSPERR(TSS_E_INVALID_OBJ_ACCESS);
218
*size = sizeof(TPM_DIGEST);
220
if ((*data = calloc_tspi(obj->tspContext, *size)) == NULL) {
221
LogError("malloc of %u bytes failed.", *size);
223
result = TSPERR(TSS_E_OUTOFMEMORY);
228
Trspi_LoadBlob_DIGEST(&offset, *data, digest);
230
obj_list_put(&encdata_list);
236
obj_encdata_get_pcr_locality(TSS_HENCDATA hEncData, TSS_FLAG dir, UINT32 *locality)
238
struct tsp_object *obj;
239
struct tr_encdata_obj *encdata;
240
TSS_RESULT result = TSS_SUCCESS;
242
if ((obj = obj_list_get_obj(&encdata_list, hEncData)) == NULL)
243
return TSPERR(TSS_E_INVALID_HANDLE);
245
encdata = (struct tr_encdata_obj *)obj->data;
247
if (encdata->pcrInfoType == TSS_PCRS_STRUCT_INFO_LONG) {
248
if (dir == TSS_TSPATTRIB_ENCDATAPCRLONG_LOCALITY_ATCREATION)
249
*locality = encdata->pcrInfo.infolong.localityAtCreation;
250
else if (dir == TSS_TSPATTRIB_ENCDATAPCRLONG_LOCALITY_ATRELEASE)
251
*locality = encdata->pcrInfo.infolong.localityAtRelease;
253
result = TSPERR(TSS_E_BAD_PARAMETER);
255
result = TSPERR(TSS_E_INVALID_OBJ_ACCESS);
257
obj_list_put(&encdata_list);
263
obj_encdata_get_pcr_selection(TSS_HENCDATA hEncData,
264
TSS_FLAG pcrInfoType,
269
struct tsp_object *obj;
270
struct tr_encdata_obj *encdata;
271
TSS_RESULT result = TSS_SUCCESS;
272
TPM_PCR_SELECTION *selection = NULL;
275
if ((obj = obj_list_get_obj(&encdata_list, hEncData)) == NULL)
276
return TSPERR(TSS_E_INVALID_HANDLE);
278
encdata = (struct tr_encdata_obj *)obj->data;
280
if (pcrInfoType != encdata->pcrInfoType) {
281
result = TSPERR(TSS_E_INVALID_OBJ_ACCESS);
285
switch (pcrInfoType) {
286
case TSS_PCRS_STRUCT_INFO:
287
if (dir == TSS_TSPATTRIB_ENCDATAPCR_SELECTION)
288
selection = &encdata->pcrInfo.info11.pcrSelection;
290
case TSS_PCRS_STRUCT_INFO_LONG:
291
if (dir == TSS_TSPATTRIB_ENCDATAPCRLONG_CREATION_SELECTION)
292
selection = &encdata->pcrInfo.infolong.creationPCRSelection;
293
else if (dir == TSS_TSPATTRIB_ENCDATAPCRLONG_RELEASE_SELECTION)
294
selection = &encdata->pcrInfo.infolong.releasePCRSelection;
296
result = TSPERR(TSS_E_INTERNAL_ERROR);
301
result = TSPERR(TSS_E_INVALID_OBJ_ACCESS);
305
*size = sizeof(UINT16) + selection->sizeOfSelect;
307
if ((*data = calloc_tspi(obj->tspContext, *size)) == NULL) {
308
LogError("malloc of %u bytes failed.", *size);
310
result = TSPERR(TSS_E_OUTOFMEMORY);
315
Trspi_LoadBlob_PCR_SELECTION(&offset, *data, selection);
317
obj_list_put(&encdata_list);
323
obj_encdata_set_pcr_info(TSS_HENCDATA hEncData, UINT32 pcrInfoType, BYTE *info_blob)
325
struct tsp_object *obj;
326
struct tr_encdata_obj *encdata;
327
TSS_RESULT result = TSS_SUCCESS;
330
if ((obj = obj_list_get_obj(&encdata_list, hEncData)) == NULL)
331
return TSPERR(TSS_E_INVALID_HANDLE);
333
encdata = (struct tr_encdata_obj *)obj->data;
335
switch (pcrInfoType) {
336
case TSS_PCRS_STRUCT_INFO_LONG:
337
result = Trspi_UnloadBlob_PCR_INFO_LONG(&offset, info_blob,
338
&encdata->pcrInfo.infolong);
340
case TSS_PCRS_STRUCT_INFO:
341
result = Trspi_UnloadBlob_PCR_INFO(&offset, info_blob,
342
&encdata->pcrInfo.info11);
345
result = TSPERR(TSS_E_INVALID_OBJ_ACCESS);
349
encdata->pcrInfoType = pcrInfoType;
351
/* XXX are we using this anywhere? */
304
352
obj->flags |= TSS_OBJ_FLAG_PCRS;
306
354
obj_list_put(&encdata_list);
314
362
struct tsp_object *obj;
315
363
struct tr_encdata_obj *encdata;
319
return TSPERR(TSS_E_BAD_PARAMETER);
364
TSS_RESULT result = TSS_SUCCESS;
321
366
if ((obj = obj_list_get_obj(&encdata_list, hEncData)) == NULL)
322
367
return TSPERR(TSS_E_INVALID_HANDLE);
324
369
encdata = (struct tr_encdata_obj *)obj->data;
326
encdata->encryptedDataLength = size;
327
memcpy(encdata->encryptedData, data, size);
371
free(encdata->encryptedData);
372
encdata->encryptedData = NULL;
373
encdata->encryptedDataLength = 0;
376
if ((encdata->encryptedData = malloc(size)) == NULL) {
377
LogError("malloc of %u bytes failed.", size);
378
result = TSPERR(TSS_E_OUTOFMEMORY);
381
encdata->encryptedDataLength = size;
382
memcpy(encdata->encryptedData, data, size);
329
386
obj_list_put(&encdata_list);
335
encdata_free(struct tr_encdata_obj *encdata)
392
encdata_free(void *data)
337
free(encdata->pcrInfo.pcrSelection.pcrSelect);
394
struct tr_encdata_obj *encdata = (struct tr_encdata_obj *)data;
396
free(encdata->encryptedData);
398
switch (encdata->pcrInfoType) {
399
case TSS_PCRS_STRUCT_INFO:
400
free(encdata->pcrInfo.info11.pcrSelection.pcrSelect);
402
case TSS_PCRS_STRUCT_INFO_LONG:
403
free(encdata->pcrInfo.infolong.creationPCRSelection.pcrSelect);
404
free(encdata->pcrInfo.infolong.releasePCRSelection.pcrSelect);
407
/* no PCR data was set */