---
name: "Tspi_Context_UnregisterKey"
section: "3"
platform: "linux"
package: "libtspi-dev"
version: "0.3.15-0.4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Tspi_Context_UnregisterKey"
---

# Tspi\_Context\_UnregisterKey(3)

unregister a key from the persistent storage device.

## NAME

Tspi\_Context\_UnregisterKey - unregister a key from the persistent storage device.

## SYNOPSIS

```
#include <tss/platform.h>
#include <tss/tcpa_defines.h>
#include <tss/tcpa_typedef.h>
#include <tss/tcpa_struct.h>
#include <tss/tss_typedef.h>
#include <tss/tss_structs.h>
#include <tss/tspi.h>

TSS_RESULT Tspi_Context_UnregisterKey(TSS_HCONTEXT hContext, TSS_FLAG  persistentStorageType,
                                      TSS_UUID     uuidKey,  TSS_HKEY* phKey);
```

## DESCRIPTION

**TSS\_Context\_UnregisterKey**   provides the capabilities of the TSS Core Service or TSS Service Provider

## PARAMETERS

### hContext

The handle of the context object.

### persistentStorageType

Flag indicating the persistent storage.

### uuidKey

The UUID of the key to be removed from the persistent storage.

### phKey

Recieves the handle of a key object containing the information from the archive.

### pulRespDataLength

Recieves the length (in bytes) of the prgbRespData parameter.

### prgbRespData

On successful completion of the command, this parameter points to the buffer containing the actual data of the specified capability. The handle of the object to be destroyed

## RETURN CODES

**Tspi\_Context\_UnregisterKey** returns TSS\_SUCCESS on success, otherwise one of the following values are returned:

- TSS\_E\_INVALID\_HANDLE - the parameter *hContext* is an invalid parameter.

  - TSS\_E\_PS\_KEY\_NOTFOUND - the parameter *uuidKey* is an invalid UUID.

  - TSS\_E\_INTERNAL\_ERROR - An error occurred internal to the TSS.

  ## EXAMPLE

```
#include <trousers/tss.h>
int
main(void)
{
	TSS_FLAGS	initFlags = ...;
	TSS_HKEY	hKey, hSRK;
	TSS_UUID	keyUUID = {...};
	// Create a TSP handle
	result = Tspi_Context_Create(&hContext);
	if (result != TSS_SUCCESS)
		Error_Path();
	// Connect to the TCSD
	result = Tspi_Context_Connect(hContext, GLOBALSERVER);
	if (result != TSS_SUCCESS)
		Error_Path();
	// Create the Key Object
	result = Tspi_Context_CreateObject(hContext,
			TSS_OBJECT_TYPE_RSAKEY,
			initFlags, &hKey);
	if (result != TSS_SUCCESS)
		Error_Path();
	// Load parent Key by UUID
	result = Tspi_Context_LoadKeyByUUID(hContext, TSS_PS_TYPE_SYSTEM,
			SRK_UUID, &hSRK);
	if (result != TSS_SUCCESS)
		Error_Path();
	// Do policy/secret handling here
	result = Tspi_Key_CreateKey(hKey, hSRK, 0);
	if (result != TSS_SUCCESS)
		Error_Path();
	// Register the Key in System PS (on the TCSD's platform)
	result = Tspi_Context_RegisterKey(hContext, hKey, TSS_PS_TYPE_SYSTEM,
			keyUUID, TSS_PS_TYPE_SYSTEM,
			SRK_UUID);
	if (result != TSS_SUCCESS)
		Error_Path();
	/* ...
	 *
	 * Use the key as needed, exiting the program if necessary, reloading
	 * the key using Tspi_Context_LoadKeyByUUID() after each restart. Once
	 * the key is no longer useful, unregister it from system PS as part
	 * of clean up.
	 */
	// Unregister the Key
	result = Tspi_Context_UnregisterKey(hContext, TSS_PS_TYPE_SYSTEM,
			migratableSignUUID, &hKey);
	if (result != TSS_SUCCESS)
		Error_Path();
	// exit, discarding hKey
}
```

## CONFORMING TO

**Tspi\_Context\_UnregisterKey** conforms to the Trusted Computing Group Software Specification version 1.1 Golden

## SEE ALSO

[**Tspi\_Key\_CreateKey**(3)](/Tspi_Key_CreateKey/3.md), [**Tspi\_Context\_RegisterKey**(3)](/Tspi_Context_RegisterKey/3.md).
