3
* The Initial Developer of the Original Code is Intel Corporation.
4
* Portions created by Intel Corporation are Copyright (C) 2007 Intel Corporation.
7
* This program is free software; you can redistribute it and/or modify
8
* it under the terms of the Common Public License as published by
9
* IBM Corporation; either version 1 of the License, or (at your option)
12
* This program is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
* Common Public License for more details.
17
* You should have received a copy of the Common Public License
18
* along with this program; if not, a copy can be viewed at
19
* http://www.opensource.org/licenses/cpl1.0.php.
21
* trousers - An open source TCG Software Stack
23
* Author: james.xu@intel.com Rossey.liu@intel.com
32
#include "trousers/tss.h"
33
#include "trousers_types.h"
36
#include "tcs_utils.h"
37
#include "tcs_int_literals.h"
38
#include "capabilities.h"
41
#include "tcsd_wrap.h"
45
TCSP_NV_DefineOrReleaseSpace_Internal(TCS_CONTEXT_HANDLE hContext, /* in */
46
UINT32 cPubInfoSize, /* in */
47
BYTE* pPubInfo, /* in */
48
TPM_ENCAUTH encAuth, /* in */
49
TPM_AUTH* pAuth) /* in, out */
54
BYTE txBlob[TSS_TPM_TXBLOB_SIZE];
57
if ((result = ctx_verify_context(hContext)))
61
if ((result = auth_mgr_check(hContext, &pAuth->AuthHandle)))
65
if ((result = tpm_rqu_build(TPM_ORD_NV_DefineSpace, &offset, txBlob, cPubInfoSize, pPubInfo,
66
TPM_ENCAUTH_SIZE, encAuth.authdata, pAuth)))
69
LogDebug("req_mgr_submit_req (oldOffset=%" PRIu64 ")", offset);
70
if ((result = req_mgr_submit_req(txBlob)))
73
result = UnloadBlob_Header(txBlob, ¶mSize);
74
LogDebug("UnloadBlob (paramSize=%u) result=%u", paramSize, result);
76
result = tpm_rsp_parse(TPM_ORD_NV_DefineSpace, txBlob, paramSize, pAuth);
79
LogDebug("Leaving DefineSpace with result:%u", result);
80
auth_mgr_release_auth(pAuth, NULL, hContext);
85
TCSP_NV_WriteValue_Internal(TCS_CONTEXT_HANDLE hContext, /* in */
86
TSS_NV_INDEX hNVStore, /* in */
87
UINT32 offset, /* in */
88
UINT32 ulDataLength, /* in */
89
BYTE * rgbDataToWrite, /* in */
90
TPM_AUTH * privAuth) /* in, out */
95
BYTE txBlob[TSS_TPM_TXBLOB_SIZE];
98
if ( (result = ctx_verify_context(hContext)))
101
if ((result = auth_mgr_check(hContext, &privAuth->AuthHandle)))
105
if ((result = tpm_rqu_build(TPM_ORD_NV_WriteValue, &off_set, txBlob, hNVStore, offset,
106
ulDataLength, rgbDataToWrite, privAuth)))
109
LogDebug("req_mgr_submit_req (oldOffset=%" PRIu64 ")", off_set);
110
if ((result = req_mgr_submit_req(txBlob)))
113
result = UnloadBlob_Header(txBlob, ¶mSize);
114
LogDebug("UnloadBlob (paramSize=%u) result=%u", paramSize, result);
116
result = tpm_rsp_parse(TPM_ORD_NV_WriteValue, txBlob, paramSize, privAuth);
119
LogDebug("Leaving NVWriteValue with result:%u", result);
120
auth_mgr_release_auth(privAuth, NULL, hContext);
125
TCSP_NV_WriteValueAuth_Internal(TCS_CONTEXT_HANDLE hContext, /* in */
126
TSS_NV_INDEX hNVStore, /* in */
127
UINT32 offset, /* in */
128
UINT32 ulDataLength, /* in */
129
BYTE * rgbDataToWrite, /* in */
130
TPM_AUTH * NVAuth) /* in, out */
135
BYTE txBlob[TSS_TPM_TXBLOB_SIZE];
138
if ((result = ctx_verify_context(hContext)))
140
if ((result = auth_mgr_check(hContext, &NVAuth->AuthHandle)))
143
if ((result = tpm_rqu_build(TPM_ORD_NV_WriteValueAuth, &off_set, txBlob, hNVStore, offset,
144
ulDataLength, rgbDataToWrite, NVAuth)))
147
LogDebug("req_mgr_submit_req (oldOffset=%" PRIu64 ")", off_set);
148
if ((result = req_mgr_submit_req(txBlob)))
151
result = UnloadBlob_Header(txBlob, ¶mSize);
152
LogDebug("UnloadBlob (paramSize=%u) result=%u", paramSize, result);
154
result = tpm_rsp_parse(TPM_ORD_NV_WriteValueAuth, txBlob, paramSize, NVAuth);
157
LogDebug("Leaving NVWriteValueAuth with result:%u", result);
158
auth_mgr_release_auth(NVAuth, NULL, hContext);
163
TCSP_NV_ReadValue_Internal(TCS_CONTEXT_HANDLE hContext, /* in */
164
TSS_NV_INDEX hNVStore, /* in */
165
UINT32 offset, /* in */
166
UINT32 * pulDataLength, /* in, out */
167
TPM_AUTH * privAuth, /* in, out */
168
BYTE ** rgbDataRead) /* out */
173
BYTE txBlob[TSS_TPM_TXBLOB_SIZE];
176
if ((result = ctx_verify_context(hContext)))
180
if ((result = auth_mgr_check(hContext, &privAuth->AuthHandle)))
184
if ((result = tpm_rqu_build(TPM_ORD_NV_ReadValue, &off_set, txBlob, hNVStore, offset,
185
*pulDataLength, privAuth)))
188
LogDebug("req_mgr_submit_req (oldOffset=%" PRIu64 ")", off_set);
189
if ((result = req_mgr_submit_req(txBlob)))
192
result = UnloadBlob_Header(txBlob, ¶mSize);
193
LogDebug("UnloadBlob (paramSize=%u) result=%u", paramSize, result);
195
result = tpm_rsp_parse(TPM_ORD_NV_ReadValue, txBlob, paramSize, pulDataLength,
196
rgbDataRead, privAuth, NULL);
199
LogDebug("Leaving NVReadValue with result:%u", result);
200
auth_mgr_release_auth(privAuth, NULL, hContext);
205
TCSP_NV_ReadValueAuth_Internal(TCS_CONTEXT_HANDLE hContext, /* in */
206
TSS_NV_INDEX hNVStore, /* in */
207
UINT32 offset, /* in */
208
UINT32 * pulDataLength, /* in, out */
209
TPM_AUTH * NVAuth, /* in, out */
210
BYTE ** rgbDataRead) /* out */
215
BYTE txBlob[TSS_TPM_TXBLOB_SIZE];
218
if ((result = ctx_verify_context(hContext)))
220
if ((result = auth_mgr_check(hContext, &NVAuth->AuthHandle)))
223
if ((result = tpm_rqu_build(TPM_ORD_NV_ReadValueAuth, &off_set, txBlob, hNVStore, offset,
224
*pulDataLength, NVAuth)))
227
LogDebug("req_mgr_submit_req (oldOffset=%" PRIu64 ")", off_set);
228
if ((result = req_mgr_submit_req(txBlob)))
231
result = UnloadBlob_Header(txBlob, ¶mSize);
232
LogDebug("UnloadBlob (paramSize=%u) result=%u", paramSize, result);
234
result = tpm_rsp_parse(TPM_ORD_NV_ReadValueAuth, txBlob, paramSize, pulDataLength,
235
rgbDataRead, NVAuth, NULL);
238
LogDebug("Leaving NVReadValueAuth with result:%u", result);
239
auth_mgr_release_auth(NVAuth, NULL, hContext);