| .\" Process this file with |
| .\" groff -man -Tascii foo.1 |
| .\" |
| .TH Tss2_Tcti_Cmd_Init 3 "MAY 2020" "TPM2 Software Stack" |
| .SH NAME |
| Tss2_Tcti_Cmd_Init \- Initialization function for the Cmd TCTI library. |
| .SH SYNOPSIS |
| .B #include <tss2/tss2_tcti_cmd.h> |
| .sp |
| .BI "TSS2_RC Tss2_Tcti_Cmd_Init (TSS2_TCTI_CONTEXT " "*tctiContext" ", size_t " "*contextSize" ", const char " "*conf" ");" |
| .sp |
| The |
| .BR Tss2_Tcti_Cmd_Init () |
| function initializes a TCTI context used to communicate with a subprocess specified in the conf string. |
| TCTI send and receives utilize the sub-process's stdio and stdout respectively. |
| .SH DESCRIPTION |
| .BR Tss2_Tcti_Cmd_Init () |
| attempts to initialize a caller allocated |
| .I tcti_context |
| of size |
| .I size |
| using caller provided configuration string |
| .I conf |
| \&. Since the |
| .I tcti_context |
| must be a caller allocated buffer, the caller needs to know the buffer size |
| required by the TCTI library. The minimum size of this context can be |
| discovered by providing |
| .BR NULL |
| for the |
| .I tcti_context |
| and a non- |
| .BR NULL |
| .I size |
| parameter. The initialization function will then populate the |
| .I size |
| parameter with the minimum size of the |
| .I tcti_context |
| buffer. The caller must then allocate a buffer of this size (or larger) and |
| call |
| .B Tss2_Tcti_Cmd_Init () |
| again providing the newly allocated |
| .I tcti_context |
| and the size of this context in the |
| .I size |
| parameter. This pattern is common to all TCTI initialization functions. We |
| provide an example of this pattern using the |
| .BR Tss2_Tcti_Cmd_Init () |
| function in the section titled |
| .B EXAMPLE. |
| .sp |
| The |
| .I conf |
| parameter is a C string used to configure the TCTI context. This |
| configuration string is the command used for popen(3). The conf string |
| cannot be NULL for this TCTI. |
| .sp |
| Once initialized, the TCTI context returned exposes the Trusted Computing |
| Group (TCG) defined API for the lowest level communication with the TPM. |
| Using this API the caller can exchange (send / receive) TPM2 command and |
| response buffers with a service that can excahnge TPM2 command and response |
| buffers. In nearly all cases however, the caller will initialize a context |
| using this function before passing the context to a higher level API like |
| the System API (SAPI), Enhanced System API (ESAPI) or Feature API (FAPI) |
| and then never touch it again. |
| .sp |
| For a more thorough discussion of the TCTI API see the \*(lqTSS System Level |
| API and TPM Command Transmission Interface Specification\*(rq as published by |
| the TCG: |
| \%https://trustedcomputinggroup.org/tss-system-level-api-tpm-command-transmission-interface-specification/ |
| .SH RETURN VALUE |
| A successful call to |
| .BR Tss2_Tcti_Cmd_Init () |
| will return |
| .B TSS2_RC_SUCCESS. |
| An unsuccessful call will produce a response code described in section |
| .B ERRORS. |
| .SH ERRORS |
| .B TSS2_TCTI_RC_BAD_VALUE |
| is returned if both the |
| .I tcti_context |
| and the |
| .I size |
| parameters are NULL, or if the |
| .I config |
| parameter is NULL. |
| .SH EXAMPLE |
| .sp |
| TCTI initialization fragment: |
| .sp |
| .nf |
| #include <inttypes.h> |
| #include <stdlib.h> |
| #include <stdio.h> |
| #include <tcti/tcti_mssim.h> |
| |
| TSS2_RC rc; |
| TSS2_TCTI_CONTEXT *tcti_context; |
| size_t size; |
| const char *conf = "XXX TODO SAMPLE" |
| |
| rc = Tss2_Tcti_Cmd_Init (NULL, &size, NULL); |
| if (rc != TSS2_RC_SUCCESS) { |
| fprintf (stderr, "Failed to get allocation size for mssim TCTI " |
| " context: 0x%" PRIx32 "\n", rc); |
| exit (EXIT_FAILURE); |
| } |
| tcti_context = calloc (1, size); |
| if (tcti_context == NULL) { |
| fprintf (stderr, "Allocation for TCTI context failed: %s\n", |
| strerror (errno)); |
| exit (EXIT_FAILURE); |
| } |
| rc = Tss2_Tcti_Cmd_Init (&tcti_context, &size, conf); |
| if (rc != TSS2_RC_SUCCESS) { |
| fprintf (stderr, "Failed to initialize mssim TCTI context: " |
| "0x%" PRIx32 "\n", rc); |
| free (tcti_context); |
| exit (EXIT_FAILURE); |
| } |
| .fi |