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. 2004-2006 8 * 9 */ 10 11 12#include <stdlib.h> 13#include <stdio.h> 14#include <string.h> 15#include <inttypes.h> 16 17#include "trousers/tss.h" 18#include "trousers_types.h" 19#include "tcs_tsp.h" 20#include "tcsps.h" 21#include "tcs_utils.h" 22#include "tcs_int_literals.h" 23#include "capabilities.h" 24#include "tcslog.h" 25#include "req_mgr.h" 26#include "tcsd_wrap.h" 27#include "tcsd.h" 28 29 30TSS_RESULT 31TCSP_UnBind_Internal(TCS_CONTEXT_HANDLE hContext, /* in */ 32 TCS_KEY_HANDLE keyHandle, /* in */ 33 UINT32 inDataSize, /* in */ 34 BYTE * inData, /* in */ 35 TPM_AUTH * privAuth, /* in, out */ 36 UINT32 * outDataSize, /* out */ 37 BYTE ** outData) /* out */ 38{ 39 UINT32 paramSize; 40 TSS_RESULT result; 41 UINT64 offset = 0; 42 TCPA_KEY_HANDLE keySlot; 43 BYTE txBlob[TSS_TPM_TXBLOB_SIZE]; 44 45 LogDebug("Entering TCSI_UnBind"); 46 if ((result = ctx_verify_context(hContext))) 47 goto done; 48 49 if (privAuth != NULL) { 50 LogDebug("Auth Used"); 51 if ((result = auth_mgr_check(hContext, &privAuth->AuthHandle))) 52 goto done; 53 } else { 54 LogDebug("No Auth"); 55 } 56 57 LogDebugFn("calling ensureKeyIsLoaded for TCS handle 0x%x", keyHandle); 58 if ((result = ensureKeyIsLoaded(hContext, keyHandle, &keySlot))) 59 goto done; 60 61 if ((result = tpm_rqu_build(TPM_ORD_UnBind, &offset, txBlob, keySlot, inDataSize, inData, 62 privAuth, NULL))) 63 return result; 64 65 if ((result = req_mgr_submit_req(txBlob))) 66 goto done; 67 68 result = UnloadBlob_Header(txBlob, ¶mSize); 69 if (!result) { 70 result = tpm_rsp_parse(TPM_ORD_UnBind, txBlob, paramSize, outDataSize, outData, 71 privAuth, NULL); 72 } 73 74done: 75 auth_mgr_release_auth(privAuth, NULL, hContext); 76 return result; 77} 78 79