// 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