From c3649a2def02c41d837ae1f79dda729ccb91e677 Mon Sep 17 00:00:00 2001 From: Igor Pashev Date: Sun, 25 Nov 2012 14:36:20 +0000 Subject: Imported Upstream version 0.3.9 --- src/tspi/tsp_get_flags.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/tspi/tsp_get_flags.c (limited to 'src/tspi/tsp_get_flags.c') diff --git a/src/tspi/tsp_get_flags.c b/src/tspi/tsp_get_flags.c new file mode 100644 index 0000000..f974052 --- /dev/null +++ b/src/tspi/tsp_get_flags.c @@ -0,0 +1,67 @@ + +/* + * Licensed Materials - Property of IBM + * + * trousers - An open source TCG Software Stack + * + * (C) Copyright International Business Machines Corp. 2004-2006 + * + */ + + +#include +#include +#include +#include +#include +#include +#include + +#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); +} -- cgit v1.2.3