3
* Licensed Materials - Property of IBM
5
* trousers - An open source TCG Software Stack
7
* (C) Copyright International Business Machines Corp. 2004-2006
17
#include "trousers/tss.h"
18
#include "trousers_types.h"
20
#include "tcs_utils.h"
21
#include "tcs_int_literals.h"
22
#include "capabilities.h"
24
#include "tcsd_wrap.h"
26
#include "tcs_utils.h"
27
#include "rpc_tcstp_tcs.h"
31
tcs_wrap_Extend(struct tcsd_thread_data *data)
33
TCS_CONTEXT_HANDLE hContext;
37
TCPA_DIGEST outDigest;
39
if (getData(TCSD_PACKET_TYPE_UINT32, 0, &hContext, 0, &data->comm))
40
return TCSERR(TSS_E_INTERNAL_ERROR);
42
LogDebugFn("thread %zd context %x", THREAD_ID, hContext);
44
if (getData(TCSD_PACKET_TYPE_UINT32, 1, &pcrIndex, 0, &data->comm))
45
return TCSERR(TSS_E_INTERNAL_ERROR);
46
if (getData(TCSD_PACKET_TYPE_DIGEST, 2, &inDigest, 0, &data->comm))
47
return TCSERR(TSS_E_INTERNAL_ERROR);
49
MUTEX_LOCK(tcsp_lock);
51
result = TCSP_Extend_Internal(hContext, pcrIndex, inDigest, &outDigest);
53
MUTEX_UNLOCK(tcsp_lock);
55
if (result == TSS_SUCCESS) {
56
initData(&data->comm, 1);
57
if (setData(TCSD_PACKET_TYPE_DIGEST, 0, &outDigest, 0, &data->comm)) {
58
return TCSERR(TSS_E_INTERNAL_ERROR);
61
initData(&data->comm, 0);
63
data->comm.hdr.u.result = result;
68
tcs_wrap_PcrRead(struct tcsd_thread_data *data)
70
TCS_CONTEXT_HANDLE hContext;
75
if (getData(TCSD_PACKET_TYPE_UINT32, 0, &hContext, 0, &data->comm))
76
return TCSERR(TSS_E_INTERNAL_ERROR);
78
LogDebugFn("thread %zd context %x", THREAD_ID, hContext);
80
if (getData(TCSD_PACKET_TYPE_UINT32, 1, &pcrIndex, 0, &data->comm))
81
return TCSERR(TSS_E_INTERNAL_ERROR);
83
MUTEX_LOCK(tcsp_lock);
85
result = TCSP_PcrRead_Internal(hContext, pcrIndex, &digest);
87
MUTEX_UNLOCK(tcsp_lock);
89
if (result == TSS_SUCCESS) {
90
initData(&data->comm, 1);
91
if (setData(TCSD_PACKET_TYPE_DIGEST, 0, &digest, 0, &data->comm)) {
92
return TCSERR(TSS_E_INTERNAL_ERROR);
95
initData(&data->comm, 0);
97
data->comm.hdr.u.result = result;
102
tcs_wrap_PcrReset(struct tcsd_thread_data *data)
104
TCS_CONTEXT_HANDLE hContext;
105
UINT32 pcrDataSizeIn;
109
if (getData(TCSD_PACKET_TYPE_UINT32, 0, &hContext, 0, &data->comm))
110
return TCSERR(TSS_E_INTERNAL_ERROR);
112
LogDebugFn("thread %zd context %x", THREAD_ID, hContext);
114
if (getData(TCSD_PACKET_TYPE_UINT32, 1, &pcrDataSizeIn, 0, &data->comm))
115
return TCSERR(TSS_E_INTERNAL_ERROR);
117
pcrDataIn = (BYTE *)malloc(pcrDataSizeIn);
118
if (pcrDataIn == NULL) {
119
LogError("malloc of %u bytes failed.", pcrDataSizeIn);
120
return TCSERR(TSS_E_OUTOFMEMORY);
122
if (getData(TCSD_PACKET_TYPE_PBYTE, 2, pcrDataIn, pcrDataSizeIn, &data->comm)) {
124
return TCSERR(TSS_E_INTERNAL_ERROR);
127
MUTEX_LOCK(tcsp_lock);
129
result = TCSP_PcrReset_Internal(hContext, pcrDataSizeIn, pcrDataIn);
131
MUTEX_UNLOCK(tcsp_lock);
134
initData(&data->comm, 0);
135
data->comm.hdr.u.result = result;