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