blob: 4476169d268c694d8a5bf8d0a86fd1024e83326d [file] [log] [blame]
Vadim Bendebury56797522015-05-20 10:32:25 -07001// This file was extracted from the TCG Published
2// Trusted Platform Module Library
3// Part 4: Supporting Routines
4// Family "2.0"
5// Level 00 Revision 01.16
6// October 30, 2014
7
8#ifndef TCP_TPM_PROTOCOL_H
9#define TCP_TPM_PROTOCOL_H
10//
11// TPM Commands. All commands acknowledge processing by returning a UINT32 == 0 except where
12// noted
13//
14#define TPM_SIGNAL_POWER_ON 1
15#define TPM_SIGNAL_POWER_OFF 2
16#define TPM_SIGNAL_PHYS_PRES_ON 3
17#define TPM_SIGNAL_PHYS_PRES_OFF 4
18#define TPM_SIGNAL_HASH_START 5
19#define TPM_SIGNAL_HASH_DATA 6
20 // {UINT32 BufferSize, BYTE[BufferSize] Buffer}
21#define TPM_SIGNAL_HASH_END 7
22#define TPM_SEND_COMMAND 8
23 // {BYTE Locality, UINT32 InBufferSize, BYTE[InBufferSize] InBuffer} ->
24 // {UINT32 OutBufferSize, BYTE[OutBufferSize] OutBuffer}
25#define TPM_SIGNAL_CANCEL_ON 9
26#define TPM_SIGNAL_CANCEL_OFF 10
27#define TPM_SIGNAL_NV_ON 11
28#define TPM_SIGNAL_NV_OFF 12
29#define TPM_SIGNAL_KEY_CACHE_ON 13
30#define TPM_SIGNAL_KEY_CACHE_OFF 14
31#define TPM_REMOTE_HANDSHAKE 15
32#define TPM_SET_ALTERNATIVE_RESULT 16
33#define TPM_SIGNAL_RESET 17
34#define TPM_SESSION_END 20
35#define TPM_STOP 21
36#define TPM_GET_COMMAND_RESPONSE_SIZES 25
37#define TPM_TEST_FAILURE_MODE 30
38enum TpmEndPointInfo
39{
40 tpmPlatformAvailable = 0x01,
41 tpmUsesTbs = 0x02,
42 tpmInRawMode = 0x04,
43 tpmSupportsPP = 0x08
44};
45// Existing RPC interface type definitions retained so that the implementation
46// can be re-used
47typedef struct
48{
49 unsigned long BufferSize;
50 unsigned char *Buffer;
51} _IN_BUFFER;
52typedef unsigned char *_OUTPUT_BUFFER;
53typedef struct
54{
55 uint32_t BufferSize;
56 _OUTPUT_BUFFER Buffer;
57} _OUT_BUFFER;
58//** TPM Command Function Prototypes
59void _rpc__Signal_PowerOn(BOOL isReset);
60void _rpc__Signal_PowerOff();
61void _rpc__ForceFailureMode();
62void _rpc__Signal_PhysicalPresenceOn();
63void _rpc__Signal_PhysicalPresenceOff();
64void _rpc__Signal_Hash_Start();
65void _rpc__Signal_Hash_Data(
66 _IN_BUFFER input
67);
68void _rpc__Signal_HashEnd();
69void _rpc__Send_Command(
70 unsigned char locality,
71 _IN_BUFFER request,
72 _OUT_BUFFER *response
73);
74void _rpc__Signal_CancelOn();
75void _rpc__Signal_CancelOff();
76void _rpc__Signal_NvOn();
77void _rpc__Signal_NvOff();
78BOOL _rpc__InjectEPS(
79 const char* seed,
80 int seedSize
81);
82//
83// start the TPM server on the indicated socket. The TPM is single-threaded and will accept connections
84// first-come-first-served. Once a connection is dropped another client can connect.
85//
86BOOL TpmServer(SOCKET ServerSocket);
87#endif