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. 2007
8 *
9 */
10
11
12 #include <stdlib.h>
13 #include <stdio.h>
14 #include <string.h>
15
16 #include "trousers/tss.h"
17 #include "trousers_types.h"
18 #include "tcs_utils.h"
19 #include "tcslog.h"
20 #include "req_mgr.h"
21
22 TSS_RESULT
TCSP_SetOrdinalAuditStatus_Internal(TCS_CONTEXT_HANDLE hContext,TPM_AUTH * ownerAuth,UINT32 ulOrdinal,TSS_BOOL bAuditState)23 TCSP_SetOrdinalAuditStatus_Internal(TCS_CONTEXT_HANDLE hContext, /* in */
24 TPM_AUTH *ownerAuth, /* in/out */
25 UINT32 ulOrdinal, /* in */
26 TSS_BOOL bAuditState) /* in */
27 {
28 TSS_RESULT result;
29 UINT64 offset = 0;
30 UINT32 paramSize;
31 BYTE txBlob[TSS_TPM_TXBLOB_SIZE];
32
33 LogDebugFn("Enter");
34
35 if ((result = ctx_verify_context(hContext)))
36 return result;
37
38 if ((result = auth_mgr_check(hContext, &ownerAuth->AuthHandle)))
39 return result;
40
41 if ((result = tpm_rqu_build(TPM_ORD_SetOrdinalAuditStatus, &offset, txBlob, ulOrdinal,
42 bAuditState, ownerAuth)))
43 goto done;
44
45 if ((result = req_mgr_submit_req(txBlob)))
46 goto done;
47
48 offset = 10;
49 result = UnloadBlob_Header(txBlob, ¶mSize);
50
51 if (!result) {
52 result = tpm_rsp_parse(TPM_ORD_SetOrdinalAuditStatus, txBlob, paramSize, ownerAuth);
53 }
54
55 LogResult("SetOrdinalAuditStatus", result);
56
57 done:
58 auth_mgr_release_auth(ownerAuth, NULL, hContext);
59
60 return result;
61 }
62
63 TSS_RESULT
TCSP_GetAuditDigest_Internal(TCS_CONTEXT_HANDLE hContext,UINT32 startOrdinal,TPM_DIGEST * auditDigest,UINT32 * counterValueSize,BYTE ** counterValue,TSS_BOOL * more,UINT32 * ordSize,UINT32 ** ordList)64 TCSP_GetAuditDigest_Internal(TCS_CONTEXT_HANDLE hContext, /* in */
65 UINT32 startOrdinal, /* in */
66 TPM_DIGEST *auditDigest, /* out */
67 UINT32 *counterValueSize, /* out */
68 BYTE **counterValue, /* out */
69 TSS_BOOL *more, /* out */
70 UINT32 *ordSize, /* out */
71 UINT32 **ordList) /* out */
72 {
73 TSS_RESULT result;
74 UINT64 offset = 0;
75 UINT32 paramSize;
76 BYTE txBlob[TSS_TPM_TXBLOB_SIZE];
77
78 LogDebugFn("Enter");
79
80 if ((result = ctx_verify_context(hContext)))
81 return result;
82
83 if ((result = tpm_rqu_build(TPM_ORD_GetAuditDigest, &offset, txBlob, startOrdinal, NULL)))
84 return result;
85
86 if ((result = req_mgr_submit_req(txBlob)))
87 goto done;
88
89 result = UnloadBlob_Header(txBlob, ¶mSize);
90 if (!result) {
91 if ((result = tpm_rsp_parse(TPM_ORD_GetAuditDigest, txBlob, paramSize, auditDigest,
92 counterValueSize, counterValue, more, ordSize,
93 ordList)))
94 goto done;
95
96 /* ordSize is returned from the TPM as the number of bytes in ordList
97 so ordSize needs to be converted to comply with the TSS spec which
98 returns the number of ordinals contained in ordList */
99 *ordSize = *ordSize / sizeof(UINT32);
100 }
101
102 LogResult("GetAuditDigest", result);
103
104 done:
105 return result;
106 }
107
108 TSS_RESULT
TCSP_GetAuditDigestSigned_Internal(TCS_CONTEXT_HANDLE hContext,TCS_KEY_HANDLE keyHandle,TSS_BOOL closeAudit,TPM_NONCE antiReplay,TPM_AUTH * privAuth,UINT32 * counterValueSize,BYTE ** counterValue,TPM_DIGEST * auditDigest,TPM_DIGEST * ordinalDigest,UINT32 * sigSize,BYTE ** sig)109 TCSP_GetAuditDigestSigned_Internal(TCS_CONTEXT_HANDLE hContext, /* in */
110 TCS_KEY_HANDLE keyHandle, /* in */
111 TSS_BOOL closeAudit, /* in */
112 TPM_NONCE antiReplay, /* in */
113 TPM_AUTH *privAuth, /* in/out */
114 UINT32 *counterValueSize, /* out */
115 BYTE **counterValue, /* out */
116 TPM_DIGEST *auditDigest, /* out */
117 TPM_DIGEST *ordinalDigest, /* out */
118 UINT32 *sigSize, /* out */
119 BYTE **sig) /* out */
120 {
121 TSS_RESULT result;
122 TCPA_KEY_HANDLE keySlot;
123 UINT64 offset = 0;//, old_offset;
124 UINT32 paramSize;
125 BYTE txBlob[TSS_TPM_TXBLOB_SIZE];
126
127 LogDebugFn("Enter");
128
129 if ((result = ctx_verify_context(hContext)))
130 return result;
131
132 if (privAuth != NULL)
133 if ((result = auth_mgr_check(hContext, &privAuth->AuthHandle)))
134 return result;
135
136 if ((result = ensureKeyIsLoaded(hContext, keyHandle, &keySlot)))
137 goto done;
138
139 if ((result = tpm_rqu_build(TPM_ORD_GetAuditDigestSigned, &offset, txBlob, keySlot,
140 closeAudit, antiReplay.nonce, privAuth)))
141 goto done;
142
143 if ((result = req_mgr_submit_req(txBlob)))
144 goto done;
145
146 result = UnloadBlob_Header(txBlob, ¶mSize);
147 if (!result) {
148 result = tpm_rsp_parse(TPM_ORD_GetAuditDigestSigned, txBlob, paramSize,
149 counterValueSize, counterValue, auditDigest, ordinalDigest,
150 sigSize, sig, privAuth);
151 }
152
153 LogResult("GetAuditDigestSigned", result);
154
155 done:
156 auth_mgr_release_auth(privAuth, NULL, hContext);
157
158 return result;
159 }
160