/** @file Public API for the Tcg Core library to perform the lowest level TCG Data encoding. (TCG Storage Architecture Core Specification, Version 2.01, Revision 1.00, https://trustedcomputinggroup.org/tcg-storage-architecture-core-specification/) Check http://trustedcomputinggroup.org for latest specification updates. Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _TCG_CORE_H_ #define _TCG_CORE_H_ #include #define ERROR_CHECK(arg) \ { \ TCG_RESULT ret = (arg); \ if (ret != TcgResultSuccess) { \ DEBUG ((DEBUG_INFO, "ERROR_CHECK failed at %a:%u\n", __FILE__, DEBUG_LINE_NUMBER)); \ return ret; \ } \ } #define METHOD_STATUS_ERROR_CHECK(arg, failRet) \ if ((arg) != TCG_METHOD_STATUS_CODE_SUCCESS) { \ DEBUG ((DEBUG_INFO, "Method Status error: 0x%02X (%a)\n", arg, TcgMethodStatusString(arg))); \ return (failRet); \ } #define NULL_CHECK(arg) \ do { \ if ((arg) == NULL) { \ DEBUG ((DEBUG_INFO, "NULL_CHECK(%a) failed at %a:%u\n", #arg, __FILE__, DEBUG_LINE_NUMBER)); \ return TcgResultFailureNullPointer; \ } \ } while (0) #pragma pack(1) /** Tcg result codes. The result code indicates if the Tcg function call was successful or not **/ typedef enum { // // This is the return result upon successful completion of a Tcg function call // TcgResultSuccess, // // This is the return "catchall" result for the failure of a Tcg function call // TcgResultFailure, // // This is the return result if a required parameter was Null for a Tcg function call // TcgResultFailureNullPointer, // // This is the return result if a required buffersize was 0 for a Tcg function call // TcgResultFailureZeroSize, // // This is the return result if a Tcg function call was executed out of order. // For instance, starting a Tcg subpacket before starting its Tcg packet. // TcgResultFailureInvalidAction, // // This is the return result if the buffersize provided is not big enough to add a requested Tcg encoded item. // TcgResultFailureBufferTooSmall, // // This is the return result for a Tcg parse function if the end of the parsed Buffer is reached, yet Data is still attempted to be retrieved. // For instance, attempting to retrieve another Tcg token from the Buffer after it has reached the end of the Tcg subpacket payload. // TcgResultFailureEndBuffer, // // This is the return result for a Tcg parse function if the Tcg Token item requested is not the expected type. // For instance, the caller requested to receive an integer and the Tcg token was a byte sequence. // TcgResultFailureInvalidType, } TCG_RESULT; // // Structure that is used to build the Tcg ComPacket. It contains the start Buffer pointer and the current position of the // Tcg ComPacket, current Tcg Packet and Tcg SubPacket. This structure must be initialized // by calling tcgInitTcgCreateStruct before it is used as parameter to any other Tcg function. // This structure should NOT be directly modified by the client of this library. // // NOTE: WE MAY MAKE THIS AN ABSTRACT STRUCTURE WITH A DEFINED SIZE AND KEEP THE VARIABLES // INTERNAL AND ONLY KNOWN TO THE TCG LIBRARY // // tcgInitTcgCreateStruct // typedef struct { // // Buffer allocated and freed by the client of the Tcg library. // This is the Buffer that shall contain the final Tcg encoded compacket. // VOID *Buffer; // // Size of the Buffer provided. // UINT32 BufferSize; // // Pointer to the start of the Tcg ComPacket. It should point to a location within Buffer. // TCG_COM_PACKET *ComPacket; // // Current Tcg Packet that is being created. It should point to a location within Buffer. // TCG_PACKET *CurPacket; // // Current Tcg SubPacket that is being created. It should point to a location within Buffer. // TCG_SUB_PACKET *CurSubPacket; // // Flag used to indicate if the Buffer of the structure should be filled out. // This is intended to be used to support a use-case where the client of library // can perform all the desired tcg calls to determine what the actual Size of the final compacket will be. // Then the client can allocate the required Buffer Size and re-run the tcg calls. // THIS MAY NOT BE IMPLEMENTED... REQUIRES MORE THOUGHT BECAUSE YOU CANNOT SOLVE ISSUE FOR RECEIVE // BOOLEAN DryRun; } TCG_CREATE_STRUCT; // // Structure that is used to parse the Tcg response received. It contains the response Buffer pointer // and the current position of the Tcg ComPacket, current Tcg Packet and Tcg SubPacket being parsed. // This structure must be initialized by calling tcgInitTcgParseStruct before it is used as parameter to any other Tcg parse function. // This structure should NOT be directly modified by the client of this library. // // NOTE: WE MAY MAKE THIS AN ABSTRACT STRUCTURE WITH A DEFINED SIZE AND KEEP THE VARIABLES // INTERNAL AND ONLY KNOWN TO THE TCG LIBRARY // // @sa tcgInitTcgParseStruct // typedef struct { // // Buffer allocated and freed by the client of the Tcg library. // This is the Buffer that contains the Tcg response to decode/parse. // const VOID *Buffer; // // Size of the Buffer provided. // UINT32 BufferSize; // // Pointer to the start of the Tcg ComPacket. It should point to a location within Buffer. // TCG_COM_PACKET *ComPacket; // // Current Tcg Packet that is being created. It should point to a location within Buffer. // TCG_PACKET *CurPacket; // // Current Tcg SubPacket that is being created. It should point to a location within Buffer. // TCG_SUB_PACKET *CurSubPacket; // // Current pointer within the current subpacket payload. // UINT8 *CurPtr; } TCG_PARSE_STRUCT; // // Structure that is used to represent a Tcg Token that is retrieved by Tcg parse functions. // typedef struct { // // Describes the type of Tcg token the Hdr start points to. // TCG_TOKEN_TYPE Type; // // Pointer to the beginning of the Header of the Tcg token // UINT8 *HdrStart; } TCG_TOKEN; /** Required to be called before calling any other Tcg functions with the TCG_CREATE_STRUCT. Initializes the packet variables to NULL. Additionally, the buffer will be memset. @param[in/out] CreateStruct Structure to initialize @param[in] Buffer Buffer allocated by client of library. It will contain the Tcg encoded packet. This cannot be null. @param[in] BufferSize Size of buffer provided. It cannot be 0. **/ TCG_RESULT EFIAPI TcgInitTcgCreateStruct ( TCG_CREATE_STRUCT *CreateStruct, VOID *Buffer, UINT32 BufferSize ); /** Encodes the ComPacket header to the data structure. @param[in/out] CreateStruct Structure to initialize @param[in] ComId ComID of the Tcg ComPacket. @param[in] ComIdExtension ComID Extension of the Tcg ComPacket. **/ TCG_RESULT EFIAPI TcgStartComPacket ( TCG_CREATE_STRUCT *CreateStruct, UINT16 ComId, UINT16 ComIdExtension ); /** Starts a new ComPacket in the Data structure. @param[in/out] CreateStruct Structure used to add Tcg Packet @param[in] Tsn Packet Tper session number @param[in] Hsn Packet Host session number @param[in] SeqNumber Packet Sequence Number @param[in] AckType Packet Acknowledge Type @param[in] Ack Packet Acknowledge **/ TCG_RESULT EFIAPI TcgStartPacket ( TCG_CREATE_STRUCT *CreateStruct, UINT32 Tsn, UINT32 Hsn, UINT32 SeqNumber, UINT16 AckType, UINT32 Ack ); /** Starts a new SubPacket in the Data structure. @param[in/out] CreateStruct Structure used to start Tcg SubPacket @param[in] Kind SubPacket kind **/ TCG_RESULT EFIAPI TcgStartSubPacket ( TCG_CREATE_STRUCT *CreateStruct, UINT16 Kind ); /** Ends the current SubPacket in the Data structure. This function will also perform the 4-byte padding required for Subpackets. @param[in/out] CreateStruct Structure used to end the current Tcg SubPacket **/ TCG_RESULT EFIAPI TcgEndSubPacket ( TCG_CREATE_STRUCT *CreateStruct ); /** Ends the current Packet in the Data structure. @param[in/out] CreateStruct Structure used to end the current Tcg Packet **/ TCG_RESULT EFIAPI TcgEndPacket ( TCG_CREATE_STRUCT *CreateStruct ); /** Ends the ComPacket in the Data structure and ret @param[in/out] CreateStruct Structure used to end the Tcg ComPacket @param[in/out] Size Describes the Size of the entire ComPacket (Header and payload). Filled out by function. **/ TCG_RESULT EFIAPI TcgEndComPacket ( TCG_CREATE_STRUCT *CreateStruct, UINT32 *Size ); /** Adds a single raw token byte to the Data structure. @param[in/out] CreateStruct Structure used to add the byte @param [in] Byte Byte to add **/ TCG_RESULT EFIAPI TcgAddRawByte ( TCG_CREATE_STRUCT *CreateStruct, UINT8 Byte ); /** Adds the Data parameter as a byte sequence to the Data structure. @param [in/out] CreateStruct Structure used to add the byte sequence @param[in] Data Byte sequence that will be encoded and copied into Data structure @param[in] DataSize Length of Data provided @param[in] Continued TRUE if byte sequence is continued or FALSE if the Data contains the entire byte sequence to be encoded **/ TCG_RESULT EFIAPI TcgAddByteSequence ( TCG_CREATE_STRUCT *CreateStruct, const VOID *Data, UINT32 DataSize, BOOLEAN Continued ); /** Adds an arbitrary-Length integer to the Data structure. The integer will be encoded using the shortest possible atom. @param[in/out] CreateStruct Structure used to add the integer @param[in] Data Integer in host byte order that will be encoded and copied into Data structure @param[in] DataSize Length in bytes of the Data provided @param[in] SignedInteger TRUE if the integer is signed or FALSE if the integer is unsigned **/ TCG_RESULT EFIAPI TcgAddInteger ( TCG_CREATE_STRUCT *CreateStruct, const VOID *Data, UINT32 DataSize, BOOLEAN SignedInteger ); /** Adds an 8-bit unsigned integer to the Data structure. @param[in/out] CreateStruct Structure used to add the integer @param[in] Value Integer Value to add **/ TCG_RESULT EFIAPI TcgAddUINT8 ( TCG_CREATE_STRUCT *CreateStruct, UINT8 Value ); /** Adds a 16-bit unsigned integer to the Data structure. @param[in/out] CreateStruct Structure used to add the integer @param[in] Value Integer Value to add **/ TCG_RESULT EFIAPI TcgAddUINT16 ( TCG_CREATE_STRUCT *CreateStruct, UINT16 Value ); /** Adds a 32-bit unsigned integer to the Data structure. @param[in/out] CreateStruct Structure used to add the integer @param[in] Value Integer Value to add **/ TCG_RESULT EFIAPI TcgAddUINT32 ( TCG_CREATE_STRUCT *CreateStruct, UINT32 Value ); /** Adds a 64-bit unsigned integer to the Data structure. @param[in/out] CreateStruct Structure used to add the integer @param[in] Value Integer Value to add **/ TCG_RESULT EFIAPI TcgAddUINT64 ( TCG_CREATE_STRUCT *CreateStruct, UINT64 Value ); /** Adds a BOOLEAN to the Data structure. @param[in/out] CreateStruct Structure used to add the integer @param[in] Value BOOLEAN Value to add **/ TCG_RESULT EFIAPI TcgAddBOOLEAN ( TCG_CREATE_STRUCT *CreateStruct, BOOLEAN Value ); /** Add tcg uid info. @param [in/out] CreateStruct Structure used to add the integer @param Uid Input uid info. @retval return the action result. **/ TCG_RESULT EFIAPI TcgAddTcgUid ( TCG_CREATE_STRUCT *CreateStruct, TCG_UID Uid ); /** Adds a Start List token to the Data structure. @param[in/out] CreateStruct Structure used to add the token **/ TCG_RESULT EFIAPI TcgAddStartList ( TCG_CREATE_STRUCT *CreateStruct ); /** Adds an End List token to the Data structure. @param [in/out] CreateStruct Structure used to add the token **/ TCG_RESULT EFIAPI TcgAddEndList ( TCG_CREATE_STRUCT *CreateStruct ); /** Adds a Start Name token to the Data structure. @param[in/out] CreateStruct Structure used to add the token **/ TCG_RESULT EFIAPI TcgAddStartName ( TCG_CREATE_STRUCT *CreateStruct ); /** Adds an End Name token to the Data structure. @param [in/out] CreateStruct Structure used to add the token **/ TCG_RESULT EFIAPI TcgAddEndName ( TCG_CREATE_STRUCT *CreateStruct ); /** Adds a Call token to the Data structure. @param [in/out] CreateStruct Structure used to add the token **/ TCG_RESULT EFIAPI TcgAddCall ( TCG_CREATE_STRUCT *CreateStruct ); /** Adds an End of Data token to the Data structure. @param[in/out] CreateStruct Structure used to add the token **/ TCG_RESULT EFIAPI TcgAddEndOfData ( TCG_CREATE_STRUCT *CreateStruct ); /** Adds an End of Session token to the Data structure. @param [in/out] CreateStruct Structure used to add the token **/ TCG_RESULT EFIAPI TcgAddEndOfSession ( TCG_CREATE_STRUCT *CreateStruct ); /** Adds a Start Transaction token to the Data structure. @param [in/out] CreateStruct Structure used to add the token **/ TCG_RESULT EFIAPI TcgAddStartTransaction ( TCG_CREATE_STRUCT *CreateStruct ); /** Adds an End Transaction token to the Data structure. @param[in/out] CreateStruct Structure used to add the token **/ TCG_RESULT EFIAPI TcgAddEndTransaction ( TCG_CREATE_STRUCT *CreateStruct ); /** Initial the tcg parse structure. @param ParseStruct Input parse structure. @param Buffer Input buffer data. @param BufferSize Input buffer size. @retval return the action result. **/ TCG_RESULT EFIAPI TcgInitTcgParseStruct ( TCG_PARSE_STRUCT *ParseStruct, const VOID *Buffer, UINT32 BufferSize ); /** Get next token info. @param ParseStruct Input parse structure info. @param TcgToken return the tcg token info. @retval return the action result. **/ TCG_RESULT EFIAPI TcgGetNextToken ( TCG_PARSE_STRUCT *ParseStruct, TCG_TOKEN *TcgToken ); /** Get next token Type. @param ParseStruct Input parse structure. @param Type Input the type need to check. @retval return the action result. **/ TCG_RESULT EFIAPI TcgGetNextTokenType ( TCG_PARSE_STRUCT *ParseStruct, TCG_TOKEN_TYPE Type ); /** Get atom info. @param TcgToken Input token info. @param HeaderLength return the header length. @param DataLength return the data length. @param ByteOrInt return the atom Type. @param SignOrCont return the sign or count info. @retval return the action result. **/ TCG_RESULT EFIAPI TcgGetAtomInfo ( const TCG_TOKEN *TcgToken, UINT32 *HeaderLength, UINT32 *DataLength, UINT8 *ByteOrInt, UINT8 *SignOrCont ); /** Get token byte sequence. @param TcgToken Input token info. @param Length Input the length info. @retval Return the value data. **/ UINT8 * EFIAPI TcgGetTokenByteSequence ( const TCG_TOKEN *TcgToken, UINT32 *Length ); /** Get token specified value. @param TcgToken Input token info. @param Value return the value. @retval return the action result. **/ TCG_RESULT EFIAPI TcgGetTokenUINT64 ( const TCG_TOKEN *TcgToken, UINT64 *Value ); /** Get next specify value. @param ParseStruct Input parse structure. @param Value Return value. @retval return the action result. **/ TCG_RESULT EFIAPI TcgGetNextUINT8 ( TCG_PARSE_STRUCT *ParseStruct, UINT8 *Value ); /** Get next specify value. @param ParseStruct Input parse structure. @param Value Return value. @retval return the action result. **/ TCG_RESULT EFIAPI TcgGetNextUINT16 ( TCG_PARSE_STRUCT *ParseStruct, UINT16 *Value ); /** Get next specify value. @param ParseStruct Input parse structure. @param Value Return value. @retval return the action result. **/ TCG_RESULT EFIAPI TcgGetNextUINT32 ( TCG_PARSE_STRUCT *ParseStruct, UINT32 *Value ); /** Get next specify value. @param ParseStruct Input parse structure. @param Value Return value. @retval return the action result. **/ TCG_RESULT EFIAPI TcgGetNextUINT64 ( TCG_PARSE_STRUCT *ParseStruct, UINT64 *Value ); /** Get next specify value. @param ParseStruct Input parse structure. @param Value Return value. @retval return the action result. **/ TCG_RESULT EFIAPI TcgGetNextBOOLEAN ( TCG_PARSE_STRUCT *ParseStruct, BOOLEAN *Value ); /** Get next tcg uid info. @param ParseStruct Input parse structure. @param Uid Get the uid info. @retval return the action result. **/ TCG_RESULT EFIAPI TcgGetNextTcgUid ( TCG_PARSE_STRUCT *ParseStruct, TCG_UID *Uid ); /** Get next byte sequence. @param ParseStruct Input parse structure. @param Data return the data. @param Length return the length. @retval return the action result. **/ TCG_RESULT EFIAPI TcgGetNextByteSequence ( TCG_PARSE_STRUCT *ParseStruct, const VOID **Data, UINT32 *Length ); /** Get next start list. @param ParseStruct Input parse structure. @retval return the action result. **/ TCG_RESULT EFIAPI TcgGetNextStartList ( TCG_PARSE_STRUCT *ParseStruct ); /** Get next end list. @param ParseStruct Input parse structure. @retval return the action result. **/ TCG_RESULT EFIAPI TcgGetNextEndList ( TCG_PARSE_STRUCT *ParseStruct ); /** Get next start name. @param ParseStruct Input parse structure. @retval return the action result. **/ TCG_RESULT EFIAPI TcgGetNextStartName ( TCG_PARSE_STRUCT *ParseStruct ); /** Get next end name. @param ParseStruct Input parse structure. @retval return the action result. **/ TCG_RESULT EFIAPI TcgGetNextEndName ( TCG_PARSE_STRUCT *ParseStruct ); /** Get next call. @param ParseStruct Input parse structure. @retval return the action result. **/ TCG_RESULT EFIAPI TcgGetNextCall ( TCG_PARSE_STRUCT *ParseStruct ); /** Get next end data. @param ParseStruct Input parse structure. @retval return the action result. **/ TCG_RESULT EFIAPI TcgGetNextEndOfData ( TCG_PARSE_STRUCT *ParseStruct ); /** Get next end of session. @param ParseStruct Input parse structure. @retval return the action result. **/ TCG_RESULT EFIAPI TcgGetNextEndOfSession ( TCG_PARSE_STRUCT *ParseStruct ); /** Get next start transaction. @param ParseStruct Input parse structure. @retval return the action result. **/ TCG_RESULT EFIAPI TcgGetNextStartTransaction ( TCG_PARSE_STRUCT *ParseStruct ); /** Get next end transaction. @param ParseStruct Input parse structure. @retval return the action result. **/ TCG_RESULT EFIAPI TcgGetNextEndTransaction ( TCG_PARSE_STRUCT *ParseStruct ); // end of parse functions typedef BOOLEAN (EFIAPI *TCG_LEVEL0_ENUM_CALLBACK)( const TCG_LEVEL0_DISCOVERY_HEADER *DiscoveryHeader, TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER *Feature, UINTN FeatureSize, // includes header VOID *Context ); /** Adds call token and method Header (invoking id, and method id). @param CreateStruct The input create structure. @param InvokingId Invoking id. @param MethodId Method id. **/ TCG_RESULT EFIAPI TcgStartMethodCall ( TCG_CREATE_STRUCT *CreateStruct, TCG_UID InvokingId, TCG_UID MethodId ); /** Adds START LIST token. @param CreateStruct The input create structure. **/ TCG_RESULT EFIAPI TcgStartParameters ( TCG_CREATE_STRUCT *CreateStruct ); /** Adds END LIST token. @param CreateStruct The input create structure. **/ TCG_RESULT EFIAPI TcgEndParameters ( TCG_CREATE_STRUCT *CreateStruct ); /** Adds END Data token and method list. @param CreateStruct The input create structure. **/ TCG_RESULT EFIAPI TcgEndMethodCall ( TCG_CREATE_STRUCT *CreateStruct ); /** Adds Start Session call to the data structure. This creates the entire ComPacket structure and returns the size of the entire compacket in the size parameter. @param [in/out] CreateStruct Structure used to add the start session call @param [in/out] Size Describes the size of the entire ComPacket (header and payload). Filled out by function. @param [in] ComId ComID for the ComPacket @param [in] ComIdExtension Extended ComID for the ComPacket @param [in] HostSessionId Host Session ID @param [in] SpId Security Provider to start session with @param [in] Write Write option for start session. TRUE = start session requests write access @param [in] HostChallengeLength Length of the host challenge. Length should be 0 if hostChallenge is NULL @param [in] HostChallenge Host challenge for Host Signing Authority. If NULL, then no Host Challenge shall be sent. @param [in] HostSigningAuthority Host Signing Authority used for start session. If NULL, then no Host Signing Authority shall be sent. **/ TCG_RESULT EFIAPI TcgCreateStartSession ( TCG_CREATE_STRUCT *CreateStruct, UINT32 *Size, UINT16 ComId, UINT16 ComIdExtension, UINT32 HostSessionId, TCG_UID SpId, BOOLEAN Write, UINT32 HostChallengeLength, const VOID *HostChallenge, TCG_UID HostSigningAuthority ); /** Creates ComPacket with a Method call that sets the PIN column for the row specified. This assumes a start session has already been opened with the desired SP. @param [in/out] CreateStruct Structure used to add method call. @param [in/out] Size Describes the size of the entire ComPacket (header and payload). Filled out by function. @param [in] ComId ComID for the ComPacket @param [in] ComIdExtension Extended ComID for the ComPacket @param [in] TperSession Tper Session ID for the Packet @param [in] HostSession Host Session ID for the Packet @param [in] SidRow UID of row of current SP to set PIN column @param [in] Password value of PIN to set @param [in] PasswordSize Size of PIN **/ TCG_RESULT EFIAPI TcgCreateSetCPin ( TCG_CREATE_STRUCT *CreateStruct, UINT32 *Size, UINT16 ComId, UINT16 ComIdExtension, UINT32 TperSession, UINT32 HostSession, TCG_UID SidRow, const VOID *Password, UINT32 PasswordSize ); /** Creates ComPacket with a Method call that sets the "Enabled" column for the row specified using the value specified. This assumes a start session has already been opened with the desired SP. @param [in/out] CreateStruct Structure used to add method call @param [in/out] Size Describes the size of the entire ComPacket (header and payload). Filled out by function. @param [in] ComId ComID for the ComPacket @param [in] ComIdExtension Extended ComID for the ComPacket @param [in] TperSession Tper Session ID for the Packet @param [in] HostSession Host Session ID for the Packet @param [in] AuthorityUid Authority UID to modify the "Enabled" column for @param [in] Enabled Value to set the "Enabled" column to **/ TCG_RESULT EFIAPI TcgSetAuthorityEnabled ( TCG_CREATE_STRUCT *CreateStruct, UINT32 *Size, UINT16 ComId, UINT16 ComIdExtension, UINT32 TperSession, UINT32 HostSession, TCG_UID AuthorityUid, BOOLEAN Enabled ); /** Creates ComPacket with EndSession. This assumes a start session has already been opened. @param [in/out] CreateStruct Structure used to add Endsession @param [in/out] Size Describes the size of the entire ComPacket (header and payload). Filled out by function. @param [in] ComId ComID for the ComPacket @param [in] ComIdExtension Extended ComID for the ComPacket @param [in] HostSessionId Host Session ID for the Packet @param [in] TpSessionId Tper Session ID for the Packet **/ TCG_RESULT EFIAPI TcgCreateEndSession ( TCG_CREATE_STRUCT *CreateStruct, UINT32 *Size, UINT16 ComId, UINT16 ComIdExtension, UINT32 HostSessionId, UINT32 TpSessionId ); /** Retrieves human-readable token type name. @param[in] Type Token type to retrieve **/ CHAR8 * EFIAPI TcgTokenTypeString ( TCG_TOKEN_TYPE Type ); /** Returns the method status of the current subpacket. Does not affect the current position in the ComPacket. In other words, it can be called whenever you have a valid SubPacket. @param [in/out] ParseStruct Structure used to parse received TCG response @param [in/out] MethodStatus Method status retrieved of the current SubPacket **/ TCG_RESULT EFIAPI TcgGetMethodStatus ( const TCG_PARSE_STRUCT *ParseStruct, UINT8 *MethodStatus ); /** Returns a human-readable string representing a method status return code. @param[in] MethodStatus Method status to translate to a string @retval return the string info. **/ CHAR8 * EFIAPI TcgMethodStatusString ( UINT8 MethodStatus ); /** Retrieves the comID and Extended comID of the ComPacket in the Tcg response. It is intended to be used to confirm the received Tcg response is intended for user that received it. @param [in] ParseStruct Structure used to parse received TCG response. @param [in/out] ComId comID retrieved from received ComPacket. @param [in/out] ComIdExtension Extended comID retrieved from received ComPacket **/ TCG_RESULT EFIAPI TcgGetComIds ( const TCG_PARSE_STRUCT *ParseStruct, UINT16 *ComId, UINT16 *ComIdExtension ); /** Checks if the ComIDs of the response match the expected values. @param[in] ParseStruct Structure used to parse received TCG response @param[in] ExpectedComId Expected comID @param[in] ExpectedComIdExtension Expected extended comID **/ TCG_RESULT EFIAPI TcgCheckComIds ( const TCG_PARSE_STRUCT *ParseStruct, UINT16 ExpectedComId, UINT16 ExpectedComIdExtension ); /** Parses the Sync Session response contained in the parseStruct to retrieve Tper session ID. If the Sync Session response parameters do not match the comID, extended ComID and host session ID then a failure is returned. @param[in/out] ParseStruct Structure used to parse received TCG response, contains Sync Session response. @param[in] ComId Expected ComID that is compared to actual ComID of response @param[in] ComIdExtension Expected Extended ComID that is compared to actual Extended ComID of response @param[in] HostSessionId Expected Host Session ID that is compared to actual Host Session ID of response @param[in/out] TperSessionId Tper Session ID retrieved from the Sync Session response. **/ TCG_RESULT EFIAPI TcgParseSyncSession ( const TCG_PARSE_STRUCT *ParseStruct, UINT16 ComId, UINT16 ComIdExtension, UINT32 HostSessionId, UINT32 *TperSessionId ); /** Create set ace. @param CreateStruct Input create structure. @param Size size info. @param ComId ComId info. @param ComIdExtension ComId extension info. @param TperSession Tper session data. @param HostSession Host session data. @param AceRow Ace row info. @param Authority1 Authority 1 info. @param LogicalOperator Logical operator info. @param Authority2 Authority 2 info. @retval Return the action result. **/ TCG_RESULT EFIAPI TcgCreateSetAce ( TCG_CREATE_STRUCT *CreateStruct, UINT32 *Size, UINT16 ComId, UINT16 ComIdExtension, UINT32 TperSession, UINT32 HostSession, TCG_UID AceRow, TCG_UID Authority1, BOOLEAN LogicalOperator, TCG_UID Authority2 ); /** Enum level 0 discovery. @param DiscoveryHeader Discovery header. @param Callback Callback function. @param Context The context for the function. @retval return true if the callback return TRUE, else return FALSE. **/ BOOLEAN EFIAPI TcgEnumLevel0Discovery ( const TCG_LEVEL0_DISCOVERY_HEADER *DiscoveryHeader, TCG_LEVEL0_ENUM_CALLBACK Callback, VOID *Context ); /** Get Feature code from the header. @param DiscoveryHeader The discovery header. @param FeatureCode return the Feature code. @param FeatureSize return the Feature size. @retval return the Feature code data. **/ TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER * EFIAPI TcgGetFeature ( const TCG_LEVEL0_DISCOVERY_HEADER *DiscoveryHeader, UINT16 FeatureCode, UINTN *FeatureSize ); /** Determines if the protocol provided is part of the provided supported protocol list. @param[in] ProtocolList Supported protocol list to investigate @param[in] Protocol Protocol value to determine if supported @return TRUE = protocol is supported, FALSE = protocol is not supported **/ BOOLEAN EFIAPI TcgIsProtocolSupported ( const TCG_SUPPORTED_SECURITY_PROTOCOLS *ProtocolList, UINT16 Protocol ); /** Determines if the Locking Feature "Locked" bit is set in the level 0 discovery response. @param[in] Discovery Level 0 discovery response @return TRUE = Locked is set, FALSE = Locked is false **/ BOOLEAN EFIAPI TcgIsLocked ( const TCG_LEVEL0_DISCOVERY_HEADER *Discovery ); #pragma pack() #endif // _TCG_CORE_H_