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