mirror of https://github.com/wolfSSL/wolfTPM.git
Added new API `wolfTPM2_GetHandles` to get list of handles from the TPM capabilities. ZD 17328
parent
b676415d18
commit
e078e15f56
|
@ -194,6 +194,12 @@ int TPM2_Wrapper_TestArgs(void* userCtx, int argc, char *argv[])
|
|||
caps.mfgStr, caps.mfg, caps.vendorStr, caps.fwVerMajor,
|
||||
caps.fwVerMinor, caps.fwVerVendor, caps.fips140_2, caps.cc_eal4);
|
||||
|
||||
/* List the active persistent handles */
|
||||
rc = wolfTPM2_GetHandles(PERSISTENT_FIRST, NULL);
|
||||
if (rc >= 0) {
|
||||
printf("Found %d persistent handles\n", rc);
|
||||
}
|
||||
|
||||
if (resetTPM) {
|
||||
/* reset all content on TPM and reseed */
|
||||
rc = wolfTPM2_Clear(&dev);
|
||||
|
|
13
src/tpm2.c
13
src/tpm2.c
|
@ -844,7 +844,8 @@ TPM_RC TPM2_GetCapability(GetCapability_In* in, GetCapability_Out* out)
|
|||
TPM2_Packet_ParseU32(&packet, &out->capabilityData.capability);
|
||||
|
||||
switch (out->capabilityData.capability) {
|
||||
case TPM_CAP_TPM_PROPERTIES: {
|
||||
case TPM_CAP_TPM_PROPERTIES:
|
||||
{
|
||||
TPML_TAGGED_TPM_PROPERTY* prop =
|
||||
&out->capabilityData.data.tpmProperties;
|
||||
TPM2_Packet_ParseU32(&packet, &prop->count);
|
||||
|
@ -856,6 +857,16 @@ TPM_RC TPM2_GetCapability(GetCapability_In* in, GetCapability_Out* out)
|
|||
}
|
||||
break;
|
||||
}
|
||||
case TPM_CAP_HANDLES:
|
||||
{
|
||||
TPML_HANDLE* handles =
|
||||
&out->capabilityData.data.handles;
|
||||
TPM2_Packet_ParseU32(&packet, &handles->count);
|
||||
for (i=0; i<(int)handles->count; i++) {
|
||||
TPM2_Packet_ParseU32(&packet, &handles->handle[i]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
#ifdef DEBUG_WOLFTPM
|
||||
printf("Unknown capability type 0x%x\n",
|
||||
|
|
|
@ -749,6 +749,42 @@ int wolfTPM2_GetCapabilities(WOLFTPM2_DEV* dev, WOLFTPM2_CAPS* cap)
|
|||
return wolfTPM2_GetCapabilities_NoDev(cap);
|
||||
}
|
||||
|
||||
int wolfTPM2_GetHandles(TPM_HANDLE handle, TPML_HANDLE* handles)
|
||||
{
|
||||
int rc;
|
||||
GetCapability_In in;
|
||||
GetCapability_Out out;
|
||||
#ifdef DEBUG_WOLFTPM
|
||||
UINT32 i;
|
||||
#endif
|
||||
|
||||
/* Get Capability TPM_CAP_HANDLES - PCR */
|
||||
XMEMSET(&in, 0, sizeof(in));
|
||||
in.capability = TPM_CAP_HANDLES;
|
||||
in.property = handle;
|
||||
in.propertyCount = MAX_CAP_HANDLES;
|
||||
rc = TPM2_GetCapability(&in, &out);
|
||||
if (rc != TPM_RC_SUCCESS) {
|
||||
#ifdef DEBUG_WOLFTPM
|
||||
printf("TPM2_GetCapability handles failed 0x%x: %s\n", rc,
|
||||
TPM2_GetRCString(rc));
|
||||
#endif
|
||||
return rc;
|
||||
}
|
||||
if (handles != NULL) {
|
||||
/* optionally return handles count/list */
|
||||
XMEMCPY(handles, &out.capabilityData.data.handles, sizeof(TPML_HANDLE));
|
||||
}
|
||||
handles = &out.capabilityData.data.handles;
|
||||
#ifdef DEBUG_WOLFTPM
|
||||
printf("Handles Cap: Start 0x%x, Count %d\n", handle, handles->count);
|
||||
for (i=0; i<handles->count; i++) {
|
||||
printf("\tHandle 0x%x\n", handles->handle[i]);
|
||||
}
|
||||
#endif
|
||||
return handles->count;
|
||||
}
|
||||
|
||||
int wolfTPM2_UnsetAuth(WOLFTPM2_DEV* dev, int index)
|
||||
{
|
||||
TPM2_AUTH_SESSION* session;
|
||||
|
|
|
@ -323,7 +323,7 @@ WOLFTPM_API int wolfTPM2_SelfTest(WOLFTPM2_DEV* dev);
|
|||
|
||||
/*!
|
||||
\ingroup wolfTPM2_Wrappers
|
||||
\brief Reported the available TPM capabilities
|
||||
\brief Reports the available TPM capabilities
|
||||
|
||||
\return TPM_RC_SUCCESS: successful
|
||||
\return TPM_RC_FAILURE: generic failure (check TPM IO communication and TPM return code)
|
||||
|
@ -351,6 +351,31 @@ WOLFTPM_API int wolfTPM2_SelfTest(WOLFTPM2_DEV* dev);
|
|||
*/
|
||||
WOLFTPM_API int wolfTPM2_GetCapabilities(WOLFTPM2_DEV* dev, WOLFTPM2_CAPS* caps);
|
||||
|
||||
|
||||
/*!
|
||||
\ingroup wolfTPM2_Wrappers
|
||||
\brief Gets a list of handles
|
||||
|
||||
\return 0 or great: successful, count of handles
|
||||
\return TPM_RC_FAILURE: generic failure (check TPM IO communication and TPM return code)
|
||||
\return BAD_FUNC_ARG: check the provided arguments
|
||||
|
||||
\param handle handle to start from (example: PCR_FIRST, NV_INDEX_FIRST, HMAC_SESSION_FIRST, POLICY_SESSION_FIRST, PERMANENT_FIRST, TRANSIENT_FIRST or PERSISTENT_FIRST)
|
||||
\param handles pointer to TPML_HANDLE to return handle results (optional)
|
||||
|
||||
_Example_
|
||||
\code
|
||||
int persistent_handle_count;
|
||||
|
||||
// get count of persistent handles
|
||||
persistent_handle_count = wolfTPM2_GetHandles(&dev, PERSISTENT_FIRST, NULL);
|
||||
\endcode
|
||||
|
||||
\sa wolfTPM2_GetCapabilities
|
||||
*/
|
||||
WOLFTPM_API int wolfTPM2_GetHandles(TPM_HANDLE handle, TPML_HANDLE* handles);
|
||||
|
||||
|
||||
/*!
|
||||
\ingroup wolfTPM2_Wrappers
|
||||
\brief Clears one of the TPM Authorization slots, pointed by its index number
|
||||
|
|
Loading…
Reference in New Issue