// This file was extracted from the TCG Published
// Trusted Platform Module Library
// Part 4: Supporting Routines
// Family "2.0"
// Level 00 Revision 01.16
// October 30, 2014
#ifndef TCP_TPM_PROTOCOL_H
#define TCP_TPM_PROTOCOL_H
//
// TPM Commands. All commands acknowledge processing by returning a UINT32 == 0 except where
// noted
//
#define TPM_SIGNAL_POWER_ON 1
#define TPM_SIGNAL_POWER_OFF 2
#define TPM_SIGNAL_PHYS_PRES_ON 3
#define TPM_SIGNAL_PHYS_PRES_OFF 4
#define TPM_SIGNAL_HASH_START 5
#define TPM_SIGNAL_HASH_DATA 6
// {UINT32 BufferSize, BYTE[BufferSize] Buffer}
#define TPM_SIGNAL_HASH_END 7
#define TPM_SEND_COMMAND 8
// {BYTE Locality, UINT32 InBufferSize, BYTE[InBufferSize] InBuffer} ->
// {UINT32 OutBufferSize, BYTE[OutBufferSize] OutBuffer}
#define TPM_SIGNAL_CANCEL_ON 9
#define TPM_SIGNAL_CANCEL_OFF 10
#define TPM_SIGNAL_NV_ON 11
#define TPM_SIGNAL_NV_OFF 12
#define TPM_SIGNAL_KEY_CACHE_ON 13
#define TPM_SIGNAL_KEY_CACHE_OFF 14
#define TPM_REMOTE_HANDSHAKE 15
#define TPM_SET_ALTERNATIVE_RESULT 16
#define TPM_SIGNAL_RESET 17
#define TPM_SESSION_END 20
#define TPM_STOP 21
#define TPM_GET_COMMAND_RESPONSE_SIZES 25
#define TPM_TEST_FAILURE_MODE 30
enum TpmEndPointInfo
{
tpmPlatformAvailable = 0x01,
tpmUsesTbs = 0x02,
tpmInRawMode = 0x04,
tpmSupportsPP = 0x08
};
// Existing RPC interface type definitions retained so that the implementation
// can be re-used
typedef struct
{
unsigned long BufferSize;
unsigned char *Buffer;
} _IN_BUFFER;
typedef unsigned char *_OUTPUT_BUFFER;
typedef struct
{
uint32_t BufferSize;
_OUTPUT_BUFFER Buffer;
} _OUT_BUFFER;
//** TPM Command Function Prototypes
void _rpc__Signal_PowerOn(BOOL isReset);
void _rpc__Signal_PowerOff();
void _rpc__ForceFailureMode();
void _rpc__Signal_PhysicalPresenceOn();
void _rpc__Signal_PhysicalPresenceOff();
void _rpc__Signal_Hash_Start();
void _rpc__Signal_Hash_Data(
_IN_BUFFER input
);
void _rpc__Signal_HashEnd();
void _rpc__Send_Command(
unsigned char locality,
_IN_BUFFER request,
_OUT_BUFFER *response
);
void _rpc__Signal_CancelOn();
void _rpc__Signal_CancelOff();
void _rpc__Signal_NvOn();
void _rpc__Signal_NvOff();
BOOL _rpc__InjectEPS(
const char* seed,
int seedSize
);
//
// start the TPM server on the indicated socket. The TPM is single-threaded and will accept connections
// first-come-first-served. Once a connection is dropped another client can connect.
//
BOOL TpmServer(SOCKET ServerSocket);
#endif