---
name: "TPMLIB_Process"
section: "3"
platform: "linux"
package: "libtpms"
version: "0.10.2-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/TPMLIB_Process"
---

# TPMLIB\_Process(3)

process a TPM command

## NAME

TPMLIB\_Process     - process a TPM command

## LIBRARY

TPM library (libtpms, -ltpms)

## SYNOPSIS

**#include \<libtpms/tpm\_library.h**\>

**#include \<libtpms/tpm\_error.h**\>

**TPM\_RESULT TPMLIB\_Process(unsigned char** \*\**respbuffer***,**\
                           **uint32\_t** \**resp\_size***,**\
                           **uint32\_t** \**respbufsize***,**\
                           **unsigned char** \**command***,**\
                           **uint32\_t** *command\_size***);**

## DESCRIPTION

The **TPMLIB\_Process()** function is used to send TPM commands to the TPM and receive the results.

The *command* parameter provides the buffer for the TPM command and  the *command\_size* the number of valid TPM command bytes within that buffer.

The *respbuffer* is a pointer to a buffer where the TPM will return its result. If no buffer is given (*respbuffer* is NULL), the TPM will allocate a buffer. The parameter *resp\_size* returns the number of valid TPM response bytes in the buffer. The number of valid bytes in the response is guaranteed to not exceed the maximum I/O buffer size. Use the ***TPMLIB\_GetTPMProperty()*** API and parameter *TPMPROP\_TPM\_BUFFER\_MAX* for getting the maximum size. The user must indicate the size of a provided buffer with the *respbufsize* parameter. If the  buffer is not big enough for the response, the TPM will free the provided buffer and allocate one of sufficient size and adapt *respbufsize*. The returned buffer is only subject to size restrictions as explained for ***TPM\_Malloc()***.

## ERRORS

- **TPM\_SUCCESS**

  The function completed successfully.

- **TPM\_FAIL**

  General failure.

For a complete list of TPM error codes please consult the include file **libtpms/tpm\_error.h**

## EXAMPLE

```
 #include <stdio.h>
 #include <libtpms/tpm_types.h>
 #include <libtpms/tpm_library.h>
 #include <libtpms/tpm_error.h>
 static unsigned char TPM_Startup_ST_CLEAR[] = {
     0x00, 0xC1, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x99,
     0x00, TPM_ST_CLEAR
 };
 int main(void) {
     TPM_RESULT res;
     unsigned char *respbuffer = NULL;
     uint32_t resp_size = 0;
     uint32_t respbufsize = 0;
     unsigned char *command;
     uint32_t command_size;
     [...]
     if (TPMLIB_MainInit() != TPM_SUCCESS) {
          fprintf(stderr, "Could not start the TPM.\n");
          return 1;
     }
     [...]
     /* build TPM command */
     command = TPM_Startup_ST_CLEAR;
     command_size = sizeof(TPM_Startup_ST_CLEAR);
     [...]
     res = TPMLIB_Process(&respbuffer, &resp_size,
                          &respbufsize,
                          command, command_size);
     [...]
     TPMLIB_Terminate();
     return 0;
 }
```

## SEE ALSO

[**TPMLIB\_MainInit**(3)](/TPMLIB_MainInit/3.md), [**TPMLIB\_Terminate**(3)](/TPMLIB_Terminate/3.md), [**TPMLIB\_RegisterCallbacks**(3)](/TPMLIB_RegisterCallbacks/3.md) [**TPMLIB\_GetTPMProperty**(3)](/TPMLIB_GetTPMProperty/3.md), **TPMLIB\_Malloc**(3), **TPMLIB\_Realloc**(3)
