1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
=head1 NAME
TPMLIB_Process - process a TPM command
=head1 LIBRARY
TPM library (libtpms, -ltpms)
=head1 SYNOPSIS
B<#include <libtpms/tpm_library.h>>
B<#include <libtpms/tpm_error.h>>
B<TPM_RESULT TPMLIB_Process(unsigned char> **I<respbuffer>B<,
uint32_t> *I<resp_size>B<,
uint32_t> *I<respbufsize>B<,
unsigned char> *I<command>B<,
uint32_t> I<command_size>B<);>
=head1 DESCRIPTION
The B<TPMLIB_Process()> function is used to send TPM commands to the TPM
and receive the results.
The I<command> parameter provides the buffer for the TPM command and
the I<command_size> the number of valid TPM command bytes within that buffer.
The I<respbuffer> is a pointer to a buffer where the TPM will return its
result. If no buffer is given (I<respbuffer> is NULL), the TPM will
allocate a buffer. The parameter I<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
I<TPMLIB_GetTPMProperty()> API and parameter I<TPMPROP_TPM_BUFFER_MAX> for
getting the maximum size.
The user must indicate the size of a provided buffer with the I<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
I<respbufsize>. The returned buffer is only subject to size restrictions
as explained for I<TPM_Malloc()>.
=head1 ERRORS
=over 4
=item B<TPM_SUCCESS>
The function completed successfully.
=item B<TPM_FAIL>
General failure.
=back
For a complete list of TPM error codes please consult the include file
B<libtpms/tpm_error.h>
=head1 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;
}
=head1 SEE ALSO
B<TPMLIB_MainInit>(3), B<TPMLIB_Terminate>(3), B<TPMLIB_RegisterCallbacks>(3)
B<TPMLIB_GetTPMProperty>(3), B<TPMLIB_Malloc>(3), B<TPMLIB_Realloc>(3)
=cut
|