3
* Licensed Materials - Property of IBM
5
* trousers - An open source TCG Software Stack
7
* (C) Copyright International Business Machines Corp. 2004-2006
16
#include <sys/types.h>
20
#include "trousers/tss.h"
21
#include "trousers/trousers.h"
22
#include "trousers_types.h"
23
#include "trousers_types.h"
24
#include "spi_utils.h"
25
#include "capabilities.h"
31
internal_GetCap(TSS_HCONTEXT tspContext, TSS_FLAG capArea, UINT32 subCap,
32
UINT32 * respSize, BYTE ** respData)
35
TSS_VERSION v = INTERNAL_CAP_VERSION;
36
TSS_BOOL bValue = FALSE;
40
case TSS_TSPCAP_VERSION:
41
if ((*respData = calloc_tspi(tspContext, sizeof(TSS_VERSION))) == NULL) {
42
LogError("malloc of %zd bytes failed", sizeof(TSS_VERSION));
43
return TSPERR(TSS_E_OUTOFMEMORY);
46
Trspi_LoadBlob_TSS_VERSION(&offset, *respData, v);
52
*respSize = sizeof(TSS_BOOL);
53
bValue = INTERNAL_CAP_TSP_ALG_RSA;
56
*respSize = sizeof(TSS_BOOL);
57
bValue = INTERNAL_CAP_TSP_ALG_AES;
60
*respSize = sizeof(TSS_BOOL);
61
bValue = INTERNAL_CAP_TSP_ALG_SHA;
64
*respSize = sizeof(TSS_BOOL);
65
bValue = INTERNAL_CAP_TSP_ALG_HMAC;
68
*respSize = sizeof(TSS_BOOL);
69
bValue = INTERNAL_CAP_TSP_ALG_DES;
72
*respSize = sizeof(TSS_BOOL);
73
bValue = INTERNAL_CAP_TSP_ALG_3DES;
76
*respSize = sizeof(UINT32);
77
u32value = INTERNAL_CAP_TSP_ALG_DEFAULT;
79
case TSS_ALG_DEFAULT_SIZE:
80
*respSize = sizeof(UINT32);
81
u32value = INTERNAL_CAP_TSP_ALG_DEFAULT_SIZE;
84
LogError("Unknown TSP subCap: %u", subCap);
85
return TSPERR(TSS_E_BAD_PARAMETER);
88
if ((*respData = calloc_tspi(tspContext, *respSize)) == NULL) {
89
LogError("malloc of %u bytes failed", *respSize);
90
return TSPERR(TSS_E_OUTOFMEMORY);
93
if (*respSize == sizeof(TSS_BOOL))
94
*(TSS_BOOL *)respData = bValue;
96
*(UINT32 *)respData = u32value;
98
case TSS_TSPCAP_PERSSTORAGE:
99
if ((*respData = calloc_tspi(tspContext, sizeof(TSS_BOOL))) == NULL) {
100
LogError("malloc of %zd bytes failed", sizeof(TSS_BOOL));
101
return TSPERR(TSS_E_OUTOFMEMORY);
104
*respSize = sizeof(TSS_BOOL);
105
(*respData)[0] = INTERNAL_CAP_TSP_PERSSTORAGE;
107
case TSS_TSPCAP_RETURNVALUE_INFO:
108
if (subCap != TSS_TSPCAP_PROP_RETURNVALUE_INFO)
109
return TSPERR(TSS_E_BAD_PARAMETER);
111
if ((*respData = calloc_tspi(tspContext, sizeof(UINT32))) == NULL) {
112
LogError("malloc of %zd bytes failed", sizeof(UINT32));
113
return TSPERR(TSS_E_OUTOFMEMORY);
116
*respSize = sizeof(UINT32);
117
*(UINT32 *)(*respData) = INTERNAL_CAP_TSP_RETURNVALUE_INFO;
119
case TSS_TSPCAP_PLATFORM_INFO:
121
case TSS_TSPCAP_PLATFORM_TYPE:
122
if ((*respData = calloc_tspi(tspContext, sizeof(UINT32))) == NULL) {
123
LogError("malloc of %zd bytes failed", sizeof(UINT32));
124
return TSPERR(TSS_E_OUTOFMEMORY);
127
*respSize = sizeof(UINT32);
128
*(UINT32 *)(*respData) = INTERNAL_CAP_TSP_PLATFORM_TYPE;
130
case TSS_TSPCAP_PLATFORM_VERSION:
131
if ((*respData = calloc_tspi(tspContext, sizeof(UINT32))) == NULL) {
132
LogError("malloc of %zd bytes failed", sizeof(UINT32));
133
return TSPERR(TSS_E_OUTOFMEMORY);
136
*respSize = sizeof(UINT32);
137
*(UINT32 *)(*respData) = INTERNAL_CAP_TSP_PLATFORM_VERSION;
140
return TSPERR(TSS_E_BAD_PARAMETER);
142
case TSS_TSPCAP_MANUFACTURER:
144
case TSS_TSPCAP_PROP_MANUFACTURER_ID:
145
if ((*respData = calloc_tspi(tspContext, sizeof(UINT32))) == NULL) {
146
LogError("malloc of %zd bytes failed", sizeof(UINT32));
147
return TSPERR(TSS_E_OUTOFMEMORY);
150
*respSize = sizeof(UINT32);
151
*(UINT32 *)(*respData) = INTERNAL_CAP_MANUFACTURER_ID;
153
case TSS_TSPCAP_PROP_MANUFACTURER_STR:
155
BYTE str[] = INTERNAL_CAP_MANUFACTURER_STR;
157
if ((*respData = calloc_tspi(tspContext,
158
INTERNAL_CAP_MANUFACTURER_STR_LEN)) == NULL) {
159
LogError("malloc of %d bytes failed",
160
INTERNAL_CAP_MANUFACTURER_STR_LEN);
161
return TSPERR(TSS_E_OUTOFMEMORY);
164
*respSize = INTERNAL_CAP_MANUFACTURER_STR_LEN;
165
memcpy(*respData, str, INTERNAL_CAP_MANUFACTURER_STR_LEN);
169
return TSPERR(TSS_E_BAD_PARAMETER);
172
return TSPERR(TSS_E_BAD_PARAMETER);