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 22TSS_RESULT 23TCSP_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 57done: 58 auth_mgr_release_auth(ownerAuth, NULL, hContext); 59 60 return result; 61} 62 63TSS_RESULT 64TCSP_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 104done: 105 return result; 106} 107 108TSS_RESULT 109TCSP_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 155done: 156 auth_mgr_release_auth(privAuth, NULL, hContext); 157 158 return result; 159} 160