/* * Licensed Materials - Property of IBM * * trousers - An open source TCG Software Stack * * (C) Copyright International Business Machines Corp. 2004-2006 * */ #include <stdlib.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/mman.h> #include <errno.h> #include "trousers/tss.h" #include "trousers/trousers.h" #include "trousers_types.h" #include "trousers_types.h" #include "spi_utils.h" #include "capabilities.h" #include "tsplog.h" #include "obj.h" TSS_RESULT get_tpm_flags(TSS_HCONTEXT tspContext, TSS_HTPM hTPM, UINT32 *volFlags, UINT32 *nonVolFlags) { TCPA_DIGEST digest; TPM_AUTH auth; TCPA_VERSION version; TSS_RESULT result; TSS_HPOLICY hPolicy; Trspi_HashCtx hashCtx; if ((result = obj_tpm_get_policy(hTPM, TSS_POLICY_USAGE, &hPolicy))) return result; /* do an owner authorized get capability call */ result = Trspi_HashInit(&hashCtx, TSS_HASH_SHA1); result |= Trspi_Hash_UINT32(&hashCtx, TPM_ORD_GetCapabilityOwner); if ((result |= Trspi_HashFinal(&hashCtx, digest.digest))) return result; if ((result = secret_PerformAuth_OIAP(hTPM, TPM_ORD_GetCapabilityOwner, hPolicy, FALSE, &digest, &auth))) return result; if ((result = TCS_API(tspContext)->GetCapabilityOwner(tspContext, &auth, &version, nonVolFlags, volFlags))) return result; result = Trspi_HashInit(&hashCtx, TSS_HASH_SHA1); result |= Trspi_Hash_UINT32(&hashCtx, result); result |= Trspi_Hash_UINT32(&hashCtx, TPM_ORD_GetCapabilityOwner); result |= Trspi_Hash_VERSION(&hashCtx, (TSS_VERSION *)&version); result |= Trspi_Hash_UINT32(&hashCtx, *nonVolFlags); result |= Trspi_Hash_UINT32(&hashCtx, *volFlags); if ((result |= Trspi_HashFinal(&hashCtx, digest.digest))) return result; return obj_policy_validate_auth_oiap(hPolicy, &digest, &auth); } |