1
2 /*
3 * Licensed Materials - Property of IBM
4 *
5 * trousers - An open source TCG Software Stack
6 *
7 * (C) Copyright International Business Machines Corp. 2004-2006
8 *
9 */
10
11
12 #include <stdlib.h>
13 #include <stdio.h>
14 #include <string.h>
15 #include <unistd.h>
16 #include <sys/types.h>
17 #include <sys/stat.h>
18 #include <sys/mman.h>
19 #include <fcntl.h>
20 #include <errno.h>
21
22 #include "trousers/tss.h"
23 #include "trousers_types.h"
24 #include "tcs_tsp.h"
25 #include "tcs_utils.h"
26 #include "tcslog.h"
27
28
29 TSS_RESULT
UnloadBlob_STORED_DATA(UINT64 * offset,BYTE * blob,TCPA_STORED_DATA * data)30 UnloadBlob_STORED_DATA(UINT64 *offset, BYTE *blob, TCPA_STORED_DATA *data)
31 {
32 if (!data) {
33 UINT32 size;
34
35 UnloadBlob_VERSION(offset, blob, NULL);
36
37 UnloadBlob_UINT32(offset, &size, blob);
38
39 if (size > 0)
40 UnloadBlob(offset, size, blob, NULL);
41
42 UnloadBlob_UINT32(offset, &size, blob);
43
44 if (size > 0)
45 UnloadBlob(offset, size, blob, NULL);
46
47 return TSS_SUCCESS;
48 }
49
50 UnloadBlob_VERSION(offset, blob, (TPM_VERSION *)&data->ver);
51
52 UnloadBlob_UINT32(offset, &data->sealInfoSize, blob);
53
54 if (data->sealInfoSize > 0) {
55 data->sealInfo = (BYTE *)calloc(1, data->sealInfoSize);
56 if (data->sealInfo == NULL) {
57 LogError("malloc of %u bytes failed.", data->sealInfoSize);
58 data->sealInfoSize = 0;
59 return TCSERR(TSS_E_OUTOFMEMORY);
60 }
61 UnloadBlob(offset, data->sealInfoSize, blob, data->sealInfo);
62 } else {
63 data->sealInfo = NULL;
64 }
65
66 UnloadBlob_UINT32(offset, &data->encDataSize, blob);
67
68 if (data->encDataSize > 0) {
69 data->encData = (BYTE *)calloc(1, data->encDataSize);
70 if (data->encData == NULL) {
71 LogError("malloc of %u bytes failed.", data->encDataSize);
72 data->encDataSize = 0;
73 free(data->sealInfo);
74 data->sealInfo = NULL;
75 data->sealInfoSize = 0;
76 return TCSERR(TSS_E_OUTOFMEMORY);
77 }
78 UnloadBlob(offset, data->encDataSize, blob, data->encData);
79 } else {
80 data->encData = NULL;
81 }
82
83 return TSS_SUCCESS;
84 }
85