1 /** @file 2 Public API for the Tcg Core library to perform the lowest level TCG Data encoding. 3 4 Copyright (c) 2016, Intel Corporation. All rights reserved.<BR> 5 This program and the accompanying materials 6 are licensed and made available under the terms and conditions of the BSD License 7 which accompanies this distribution. The full text of the license may be found at 8 http://opensource.org/licenses/bsd-license.php 9 10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12 13 **/ 14 15 #ifndef _TCG_CORE_H_ 16 #define _TCG_CORE_H_ 17 18 #include <IndustryStandard/TcgStorageCore.h> 19 20 #define ERROR_CHECK(arg) \ 21 { \ 22 TCG_RESULT ret = (arg); \ 23 if (ret != TcgResultSuccess) { \ 24 DEBUG ((DEBUG_INFO, "ERROR_CHECK failed at %s:%u\n", __FILE__, __LINE__)); \ 25 return ret; \ 26 } \ 27 } 28 29 #define METHOD_STATUS_ERROR_CHECK(arg, failRet) \ 30 if ((arg) != TCG_METHOD_STATUS_CODE_SUCCESS) { \ 31 DEBUG ((DEBUG_INFO, "Method Status error: 0x%02X (%s)\n", arg, TcgMethodStatusString(arg))); \ 32 return (failRet); \ 33 } 34 35 #define NULL_CHECK(arg) \ 36 do { \ 37 if ((arg) == NULL) { \ 38 DEBUG ((DEBUG_INFO, "NULL_CHECK(%s) failed at %s:%u\n", #arg, __FILE__, __LINE__)); \ 39 return TcgResultFailureNullPointer; \ 40 } \ 41 } while (0) 42 43 #pragma pack(1) 44 45 /** 46 Tcg result codes. 47 48 The result code indicates if the Tcg function call was successful or not 49 **/ 50 typedef enum { 51 // 52 // This is the return result upon successful completion of a Tcg function call 53 // 54 TcgResultSuccess, 55 56 // 57 // This is the return "catchall" result for the failure of a Tcg function call 58 // 59 TcgResultFailure, 60 61 // 62 // This is the return result if a required parameter was Null for a Tcg function call 63 // 64 TcgResultFailureNullPointer, 65 66 // 67 // This is the return result if a required buffersize was 0 for a Tcg function call 68 // 69 TcgResultFailureZeroSize, 70 71 // 72 // This is the return result if a Tcg function call was executed out of order. 73 // For instance, starting a Tcg subpacket before starting its Tcg packet. 74 // 75 TcgResultFailureInvalidAction, 76 77 // 78 // This is the return result if the buffersize provided is not big enough to add a requested Tcg encoded item. 79 // 80 TcgResultFailureBufferTooSmall, 81 82 // 83 // 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. 84 // For instance, attempting to retrieve another Tcg token from the Buffer after it has reached the end of the Tcg subpacket payload. 85 // 86 TcgResultFailureEndBuffer, 87 88 // 89 // This is the return result for a Tcg parse function if the Tcg Token item requested is not the expected type. 90 // For instance, the caller requested to receive an integer and the Tcg token was a byte sequence. 91 // 92 TcgResultFailureInvalidType, 93 } TCG_RESULT; 94 95 // 96 // Structure that is used to build the Tcg ComPacket. It contains the start Buffer pointer and the current position of the 97 // Tcg ComPacket, current Tcg Packet and Tcg SubPacket. This structure must be initialized 98 // by calling tcgInitTcgCreateStruct before it is used as parameter to any other Tcg function. 99 // This structure should NOT be directly modified by the client of this library. 100 // 101 // NOTE: WE MAY MAKE THIS AN ABSTRACT STRUCTURE WITH A DEFINED SIZE AND KEEP THE VARIABLES 102 // INTERNAL AND ONLY KNOWN TO THE TCG LIBRARY 103 // 104 // tcgInitTcgCreateStruct 105 // 106 typedef struct { 107 // 108 // Buffer allocated and freed by the client of the Tcg library. 109 // This is the Buffer that shall contain the final Tcg encoded compacket. 110 // 111 VOID *Buffer; 112 113 // 114 // Size of the Buffer provided. 115 // 116 UINT32 BufferSize; 117 118 // 119 //Pointer to the start of the Tcg ComPacket. It should point to a location within Buffer. 120 // 121 TCG_COM_PACKET *ComPacket; 122 123 // 124 // Current Tcg Packet that is being created. It should point to a location within Buffer. 125 // 126 TCG_PACKET *CurPacket; 127 128 // 129 // Current Tcg SubPacket that is being created. It should point to a location within Buffer. 130 // 131 TCG_SUB_PACKET *CurSubPacket; 132 133 // 134 // Flag used to indicate if the Buffer of the structure should be filled out. 135 // This is intended to be used to support a use-case where the client of library 136 // can perform all the desired tcg calls to determine what the actual Size of the final compacket will be. 137 // Then the client can allocate the required Buffer Size and re-run the tcg calls. 138 // THIS MAY NOT BE IMPLEMENTED... REQUIRES MORE THOUGHT BECAUSE YOU CANNOT SOLVE ISSUE FOR RECEIVE 139 // 140 BOOLEAN DryRun; 141 } TCG_CREATE_STRUCT; 142 143 // 144 // Structure that is used to parse the Tcg response received. It contains the response Buffer pointer 145 // and the current position of the Tcg ComPacket, current Tcg Packet and Tcg SubPacket being parsed. 146 // This structure must be initialized by calling tcgInitTcgParseStruct before it is used as parameter to any other Tcg parse function. 147 // This structure should NOT be directly modified by the client of this library. 148 // 149 // NOTE: WE MAY MAKE THIS AN ABSTRACT STRUCTURE WITH A DEFINED SIZE AND KEEP THE VARIABLES 150 // INTERNAL AND ONLY KNOWN TO THE TCG LIBRARY 151 // 152 // @sa tcgInitTcgParseStruct 153 // 154 typedef struct { 155 // 156 // Buffer allocated and freed by the client of the Tcg library. 157 // This is the Buffer that contains the Tcg response to decode/parse. 158 // 159 const VOID* Buffer; 160 161 // 162 //Size of the Buffer provided. 163 // 164 UINT32 BufferSize; 165 166 // 167 // Pointer to the start of the Tcg ComPacket. It should point to a location within Buffer. 168 // 169 TCG_COM_PACKET *ComPacket; 170 171 // 172 // Current Tcg Packet that is being created. It should point to a location within Buffer. 173 // 174 TCG_PACKET *CurPacket; 175 176 // 177 // Current Tcg SubPacket that is being created. It should point to a location within Buffer. 178 // 179 TCG_SUB_PACKET *CurSubPacket; 180 181 // 182 // Current pointer within the current subpacket payload. 183 // 184 UINT8 *CurPtr; 185 } TCG_PARSE_STRUCT ; 186 187 188 // 189 // Structure that is used to represent a Tcg Token that is retrieved by Tcg parse functions. 190 // 191 typedef struct { 192 // 193 // Describes the type of Tcg token the Hdr start points to. 194 // 195 TCG_TOKEN_TYPE Type; 196 197 // 198 // Pointer to the beginning of the Header of the Tcg token 199 // 200 UINT8 *HdrStart; 201 } TCG_TOKEN ; 202 203 /** 204 205 Required to be called before calling any other Tcg functions with the TCG_CREATE_STRUCT. 206 Initializes the packet variables to NULL. Additionally, the buffer will be memset. 207 208 @param[in/out] CreateStruct Structure to initialize 209 @param[in] Buffer Buffer allocated by client of library. It will contain the Tcg encoded packet. This cannot be null. 210 @param[in] BufferSize Size of buffer provided. It cannot be 0. 211 212 **/ 213 TCG_RESULT 214 EFIAPI 215 TcgInitTcgCreateStruct( 216 TCG_CREATE_STRUCT *CreateStruct, 217 VOID *Buffer, 218 UINT32 BufferSize 219 ); 220 221 222 /** 223 224 Encodes the ComPacket header to the data structure. 225 226 @param[in/out] CreateStruct Structure to initialize 227 @param[in] ComId ComID of the Tcg ComPacket. 228 @param[in] ComIdExtension ComID Extension of the Tcg ComPacket. 229 230 **/ 231 TCG_RESULT 232 EFIAPI 233 TcgStartComPacket( 234 TCG_CREATE_STRUCT *CreateStruct, 235 UINT16 ComId, 236 UINT16 ComIdExtension 237 ); 238 239 240 /** 241 242 Starts a new ComPacket in the Data structure. 243 244 @param[in/out] CreateStruct Structure used to add Tcg Packet 245 @param[in] Tsn Packet Tper session number 246 @param[in] Hsn Packet Host session number 247 @param[in] SeqNumber Packet Sequence Number 248 @param[in] AckType Packet Acknowledge Type 249 @param[in] Ack Packet Acknowledge 250 251 **/ 252 TCG_RESULT 253 EFIAPI 254 TcgStartPacket( 255 TCG_CREATE_STRUCT *CreateStruct, 256 UINT32 Tsn, 257 UINT32 Hsn, 258 UINT32 SeqNumber, 259 UINT16 AckType, 260 UINT32 Ack 261 ); 262 263 /** 264 265 Starts a new SubPacket in the Data structure. 266 267 @param[in/out] CreateStruct Structure used to start Tcg SubPacket 268 @param[in] Kind SubPacket kind 269 270 **/ 271 TCG_RESULT 272 EFIAPI 273 TcgStartSubPacket( 274 TCG_CREATE_STRUCT *CreateStruct, 275 UINT16 Kind 276 ); 277 278 279 /** 280 281 Ends the current SubPacket in the Data structure. This function will also perform the 4-byte padding 282 required for Subpackets. 283 284 @param[in/out] CreateStruct Structure used to end the current Tcg SubPacket 285 286 **/ 287 TCG_RESULT 288 EFIAPI 289 TcgEndSubPacket( 290 TCG_CREATE_STRUCT *CreateStruct 291 ); 292 293 294 /** 295 296 Ends the current Packet in the Data structure. 297 298 @param[in/out] CreateStruct Structure used to end the current Tcg Packet 299 300 **/ 301 TCG_RESULT 302 EFIAPI 303 TcgEndPacket( 304 TCG_CREATE_STRUCT *CreateStruct 305 ); 306 307 308 /** 309 310 Ends the ComPacket in the Data structure and ret 311 312 @param[in/out] CreateStruct Structure used to end the Tcg ComPacket 313 @param[in/out] Size Describes the Size of the entire ComPacket (Header and payload). Filled out by function. 314 315 **/ 316 TCG_RESULT 317 EFIAPI 318 TcgEndComPacket( 319 TCG_CREATE_STRUCT *CreateStruct, 320 UINT32 *Size 321 ); 322 323 /** 324 Adds a single raw token byte to the Data structure. 325 326 @param[in/out] CreateStruct Structure used to add the byte 327 @param [in] Byte Byte to add 328 329 **/ 330 TCG_RESULT 331 EFIAPI 332 TcgAddRawByte( 333 TCG_CREATE_STRUCT *CreateStruct, 334 UINT8 Byte 335 ); 336 337 338 /** 339 340 Adds the Data parameter as a byte sequence to the Data structure. 341 342 @param [in/out] CreateStruct Structure used to add the byte sequence 343 @param[in] Data Byte sequence that will be encoded and copied into Data structure 344 @param[in] DataSize Length of Data provided 345 @param[in] Continued TRUE if byte sequence is continued or 346 FALSE if the Data contains the entire byte sequence to be encoded 347 348 **/ 349 TCG_RESULT 350 EFIAPI 351 TcgAddByteSequence( 352 TCG_CREATE_STRUCT *CreateStruct, 353 const VOID *Data, 354 UINT32 DataSize, 355 BOOLEAN Continued 356 ); 357 358 359 /** 360 361 Adds an arbitrary-Length integer to the Data structure. 362 363 The integer will be encoded using the shortest possible atom. 364 365 @param[in/out] CreateStruct Structure used to add the integer 366 @param[in] Data Integer in host byte order that will be encoded and copied into Data structure 367 @param[in] DataSize Length in bytes of the Data provided 368 @param[in] SignedInteger TRUE if the integer is signed or FALSE if the integer is unsigned 369 370 **/ 371 TCG_RESULT 372 EFIAPI 373 TcgAddInteger( 374 TCG_CREATE_STRUCT *CreateStruct, 375 const VOID *Data, 376 UINT32 DataSize, 377 BOOLEAN SignedInteger 378 ); 379 380 381 /** 382 Adds an 8-bit unsigned integer to the Data structure. 383 384 @param[in/out] CreateStruct Structure used to add the integer 385 @param[in] Value Integer Value to add 386 387 **/ 388 TCG_RESULT 389 EFIAPI 390 TcgAddUINT8( 391 TCG_CREATE_STRUCT *CreateStruct, 392 UINT8 Value 393 ); 394 395 /** 396 397 Adds a 16-bit unsigned integer to the Data structure. 398 399 @param[in/out] CreateStruct Structure used to add the integer 400 @param[in] Value Integer Value to add 401 402 **/ 403 TCG_RESULT 404 EFIAPI 405 TcgAddUINT16 ( 406 TCG_CREATE_STRUCT *CreateStruct, 407 UINT16 Value 408 ); 409 410 /** 411 412 Adds a 32-bit unsigned integer to the Data structure. 413 414 @param[in/out] CreateStruct Structure used to add the integer 415 @param[in] Value Integer Value to add 416 417 **/ 418 TCG_RESULT 419 EFIAPI 420 TcgAddUINT32( 421 TCG_CREATE_STRUCT *CreateStruct, 422 UINT32 Value 423 ); 424 425 426 /** 427 428 Adds a 64-bit unsigned integer to the Data structure. 429 430 @param[in/out] CreateStruct Structure used to add the integer 431 @param[in] Value Integer Value to add 432 433 **/ 434 TCG_RESULT 435 EFIAPI 436 TcgAddUINT64( 437 TCG_CREATE_STRUCT *CreateStruct, 438 UINT64 Value 439 ); 440 441 /** 442 Adds a BOOLEAN to the Data structure. 443 444 @param[in/out] CreateStruct Structure used to add the integer 445 @param[in] Value BOOLEAN Value to add 446 447 **/ 448 TCG_RESULT 449 EFIAPI 450 TcgAddBOOLEAN( 451 TCG_CREATE_STRUCT *CreateStruct, 452 BOOLEAN Value 453 ); 454 455 /** 456 Add tcg uid info. 457 458 @param [in/out] CreateStruct Structure used to add the integer 459 @param Uid Input uid info. 460 461 @retval return the action result. 462 463 **/ 464 TCG_RESULT 465 EFIAPI 466 TcgAddTcgUid( 467 TCG_CREATE_STRUCT *CreateStruct, 468 TCG_UID Uid 469 ); 470 471 /** 472 Adds a Start List token to the Data structure. 473 474 @param[in/out] CreateStruct Structure used to add the token 475 476 **/ 477 TCG_RESULT 478 EFIAPI 479 TcgAddStartList( 480 TCG_CREATE_STRUCT *CreateStruct 481 ); 482 483 484 /** 485 486 Adds an End List token to the Data structure. 487 488 @param [in/out] CreateStruct Structure used to add the token 489 490 **/ 491 TCG_RESULT 492 EFIAPI 493 TcgAddEndList( 494 TCG_CREATE_STRUCT *CreateStruct 495 ); 496 497 498 /** 499 Adds a Start Name token to the Data structure. 500 501 @param[in/out] CreateStruct Structure used to add the token 502 503 **/ 504 TCG_RESULT 505 EFIAPI 506 TcgAddStartName( 507 TCG_CREATE_STRUCT *CreateStruct 508 ); 509 510 511 /** 512 513 Adds an End Name token to the Data structure. 514 515 @param [in/out] CreateStruct Structure used to add the token 516 517 **/ 518 TCG_RESULT 519 EFIAPI 520 TcgAddEndName( 521 TCG_CREATE_STRUCT *CreateStruct 522 ); 523 524 525 /** 526 Adds a Call token to the Data structure. 527 528 @param [in/out] CreateStruct Structure used to add the token 529 530 **/ 531 TCG_RESULT 532 EFIAPI 533 TcgAddCall( 534 TCG_CREATE_STRUCT *CreateStruct 535 ); 536 537 538 /** 539 540 Adds an End of Data token to the Data structure. 541 542 @param[in/out] CreateStruct Structure used to add the token 543 544 **/ 545 TCG_RESULT 546 EFIAPI 547 TcgAddEndOfData( 548 TCG_CREATE_STRUCT *CreateStruct 549 ); 550 551 552 /** 553 554 Adds an End of Session token to the Data structure. 555 556 @param [in/out] CreateStruct Structure used to add the token 557 558 **/ 559 TCG_RESULT 560 EFIAPI 561 TcgAddEndOfSession( 562 TCG_CREATE_STRUCT *CreateStruct 563 ); 564 565 566 /** 567 Adds a Start Transaction token to the Data structure. 568 569 @param [in/out] CreateStruct Structure used to add the token 570 571 **/ 572 TCG_RESULT 573 EFIAPI 574 TcgAddStartTransaction( 575 TCG_CREATE_STRUCT *CreateStruct 576 ); 577 578 579 /** 580 Adds an End Transaction token to the Data structure. 581 582 @param[in/out] CreateStruct Structure used to add the token 583 584 **/ 585 TCG_RESULT 586 EFIAPI 587 TcgAddEndTransaction( 588 TCG_CREATE_STRUCT *CreateStruct 589 ); 590 591 /** 592 Initial the tcg parse stucture. 593 594 @param ParseStruct Input parse structure. 595 @param Buffer Input buffer data. 596 @param BufferSize Input buffer size. 597 598 @retval return the action result. 599 600 **/ 601 TCG_RESULT 602 EFIAPI 603 TcgInitTcgParseStruct( 604 TCG_PARSE_STRUCT *ParseStruct, 605 const VOID *Buffer, 606 UINT32 BufferSize 607 ); 608 609 /** 610 Get next token info. 611 612 @param ParseStruct Input parse structure info. 613 @param TcgToken return the tcg token info. 614 615 @retval return the action result. 616 617 **/ 618 TCG_RESULT 619 EFIAPI 620 TcgGetNextToken( 621 TCG_PARSE_STRUCT *ParseStruct, 622 TCG_TOKEN *TcgToken 623 ); 624 625 /** 626 Get next token Type. 627 628 @param ParseStruct Input parse structure. 629 @param Type Input the type need to check. 630 631 @retval return the action result. 632 633 **/ 634 TCG_RESULT 635 EFIAPI 636 TcgGetNextTokenType( 637 TCG_PARSE_STRUCT *ParseStruct, 638 TCG_TOKEN_TYPE Type 639 ); 640 641 /** 642 Get atom info. 643 644 @param TcgToken Input token info. 645 @param HeaderLength return the header length. 646 @param DataLength return the data length. 647 @param ByteOrInt return the atom Type. 648 @param SignOrCont return the sign or count info. 649 650 @retval return the action result. 651 652 **/ 653 TCG_RESULT 654 EFIAPI 655 TcgGetAtomInfo( 656 const TCG_TOKEN *TcgToken, 657 UINT32 *HeaderLength, 658 UINT32 *DataLength, 659 UINT8 *ByteOrInt, 660 UINT8 *SignOrCont 661 ); 662 663 /** 664 Get token byte sequence. 665 666 @param TcgToken Input token info. 667 @param Length Input the length info. 668 669 @retval Return the value data. 670 671 **/ 672 UINT8* 673 EFIAPI 674 TcgGetTokenByteSequence( 675 const TCG_TOKEN *TcgToken, 676 UINT32 *Length 677 ); 678 679 /** 680 Get token specified value. 681 682 @param TcgToken Input token info. 683 @param Value return the value. 684 685 @retval return the action result. 686 687 **/ 688 TCG_RESULT 689 EFIAPI 690 TcgGetTokenUINT64( 691 const TCG_TOKEN *TcgToken, 692 UINT64 *Value 693 ); 694 695 696 /** 697 Get next specify value. 698 699 @param ParseStruct Input parse structure. 700 @param Value Return vlaue. 701 702 @retval return the action result. 703 704 **/ 705 TCG_RESULT 706 EFIAPI 707 TcgGetNextUINT8( 708 TCG_PARSE_STRUCT *ParseStruct, 709 UINT8 *Value 710 ); 711 712 713 /** 714 Get next specify value. 715 716 @param ParseStruct Input parse structure. 717 @param Value Return vlaue. 718 719 @retval return the action result. 720 721 **/ 722 TCG_RESULT 723 EFIAPI 724 TcgGetNextUINT16( 725 TCG_PARSE_STRUCT *ParseStruct, 726 UINT16 *Value 727 ); 728 729 /** 730 Get next specify value. 731 732 @param ParseStruct Input parse structure. 733 @param Value Return vlaue. 734 735 @retval return the action result. 736 737 **/ 738 TCG_RESULT 739 EFIAPI 740 TcgGetNextUINT32( 741 TCG_PARSE_STRUCT *ParseStruct, 742 UINT32 *Value 743 ); 744 745 /** 746 Get next specify value. 747 748 @param ParseStruct Input parse structure. 749 @param Value Return vlaue. 750 751 @retval return the action result. 752 753 **/ 754 TCG_RESULT 755 EFIAPI 756 TcgGetNextUINT64( 757 TCG_PARSE_STRUCT *ParseStruct, 758 UINT64 *Value 759 ); 760 761 /** 762 Get next specify value. 763 764 @param ParseStruct Input parse structure. 765 @param Value Return vlaue. 766 767 @retval return the action result. 768 769 **/ 770 TCG_RESULT 771 EFIAPI 772 TcgGetNextBOOLEAN( 773 TCG_PARSE_STRUCT *ParseStruct, 774 BOOLEAN *Value 775 ); 776 777 /** 778 Get next tcg uid info. 779 780 @param ParseStruct Input parse structure. 781 @param Uid Get the uid info. 782 783 @retval return the action result. 784 785 **/ 786 TCG_RESULT 787 EFIAPI 788 TcgGetNextTcgUid( 789 TCG_PARSE_STRUCT *ParseStruct, 790 TCG_UID *Uid 791 ); 792 793 /** 794 Get next byte sequence. 795 796 @param ParseStruct Input parse structure. 797 @param Data return the data. 798 @param Length return the length. 799 800 @retval return the action result. 801 802 **/ 803 TCG_RESULT 804 EFIAPI 805 TcgGetNextByteSequence( 806 TCG_PARSE_STRUCT *ParseStruct, 807 const VOID **Data, 808 UINT32 *Length 809 ); 810 811 /** 812 Get next start list. 813 814 @param ParseStruct Input parse structure. 815 816 @retval return the action result. 817 818 **/ 819 TCG_RESULT 820 EFIAPI 821 TcgGetNextStartList( 822 TCG_PARSE_STRUCT *ParseStruct 823 ); 824 825 /** 826 Get next end list. 827 828 @param ParseStruct Input parse structure. 829 830 @retval return the action result. 831 832 **/ 833 TCG_RESULT 834 EFIAPI 835 TcgGetNextEndList( 836 TCG_PARSE_STRUCT *ParseStruct 837 ); 838 839 /** 840 Get next start name. 841 842 @param ParseStruct Input parse structure. 843 844 @retval return the action result. 845 846 **/ 847 TCG_RESULT 848 EFIAPI 849 TcgGetNextStartName( 850 TCG_PARSE_STRUCT *ParseStruct 851 ); 852 853 /** 854 Get next end name. 855 856 @param ParseStruct Input parse structure. 857 858 @retval return the action result. 859 860 **/ 861 TCG_RESULT 862 EFIAPI 863 TcgGetNextEndName( 864 TCG_PARSE_STRUCT *ParseStruct 865 ); 866 867 /** 868 Get next call. 869 870 @param ParseStruct Input parse structure. 871 872 @retval return the action result. 873 874 **/ 875 TCG_RESULT 876 EFIAPI 877 TcgGetNextCall( 878 TCG_PARSE_STRUCT *ParseStruct 879 ); 880 881 /** 882 Get next end data. 883 884 @param ParseStruct Input parse structure. 885 886 @retval return the action result. 887 888 **/ 889 TCG_RESULT 890 EFIAPI 891 TcgGetNextEndOfData( 892 TCG_PARSE_STRUCT *ParseStruct 893 ); 894 895 /** 896 Get next end of session. 897 898 @param ParseStruct Input parse structure. 899 900 @retval return the action result. 901 902 **/ 903 TCG_RESULT 904 EFIAPI 905 TcgGetNextEndOfSession( 906 TCG_PARSE_STRUCT *ParseStruct 907 ); 908 909 /** 910 Get next start transaction. 911 912 @param ParseStruct Input parse structure. 913 914 @retval return the action result. 915 916 **/ 917 TCG_RESULT 918 EFIAPI 919 TcgGetNextStartTransaction( 920 TCG_PARSE_STRUCT *ParseStruct 921 ); 922 923 /** 924 Get next end transaction. 925 926 @param ParseStruct Input parse structure. 927 928 @retval return the action result. 929 930 **/ 931 TCG_RESULT 932 EFIAPI 933 TcgGetNextEndTransaction( 934 TCG_PARSE_STRUCT *ParseStruct 935 ); 936 937 // end of parse functions 938 939 940 typedef 941 BOOLEAN 942 (EFIAPI* TCG_LEVEL0_ENUM_CALLBACK) ( 943 const TCG_LEVEL0_DISCOVERY_HEADER *DiscoveryHeader, 944 TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER *Feature, 945 UINTN FeatureSize, // includes header 946 VOID *Context 947 ); 948 949 /** 950 Adds call token and method Header (invoking id, and method id). 951 952 @param CreateStruct The input create structure. 953 @param InvokingId Invoking id. 954 @param MethodId Method id. 955 956 **/ 957 TCG_RESULT 958 EFIAPI 959 TcgStartMethodCall( 960 TCG_CREATE_STRUCT *CreateStruct, 961 TCG_UID InvokingId, 962 TCG_UID MethodId 963 ); 964 965 /** 966 Adds START LIST token. 967 968 @param CreateStruct The input create structure. 969 970 **/ 971 TCG_RESULT 972 EFIAPI 973 TcgStartParameters( 974 TCG_CREATE_STRUCT *CreateStruct 975 ); 976 977 /** 978 Adds END LIST token. 979 980 @param CreateStruct The input create structure. 981 982 **/ 983 TCG_RESULT 984 EFIAPI 985 TcgEndParameters( 986 TCG_CREATE_STRUCT *CreateStruct 987 ); 988 989 /** 990 Adds END Data token and method list. 991 992 @param CreateStruct The input create structure. 993 994 **/ 995 TCG_RESULT 996 EFIAPI 997 TcgEndMethodCall( 998 TCG_CREATE_STRUCT *CreateStruct 999 ); 1000 1001 /** 1002 1003 Adds Start Session call to the data structure. This creates the entire ComPacket structure and 1004 returns the size of the entire compacket in the size parameter. 1005 1006 @param [in/out] CreateStruct Structure used to add the start session call 1007 @param [in/out] Size Describes the size of the entire ComPacket (header and payload). Filled out by function. 1008 @param [in] ComId ComID for the ComPacket 1009 @param [in] ComIdExtension Extended ComID for the ComPacket 1010 @param [in] HostSessionId Host Session ID 1011 @param [in] SpId Security Provider to start session with 1012 @param [in] Write Write option for start session. TRUE = start session requests write access 1013 @param [in] HostChallengeLength Length of the host challenge. Length should be 0 if hostChallenge is NULL 1014 @param [in] HostChallenge Host challenge for Host Signing Authority. If NULL, then no Host Challenge shall be sent. 1015 @param [in] HostSigningAuthority Host Signing Authority used for start session. If NULL, then no Host Signing Authority shall be sent. 1016 1017 **/ 1018 TCG_RESULT 1019 EFIAPI 1020 TcgCreateStartSession( 1021 TCG_CREATE_STRUCT *CreateStruct, 1022 UINT32 *Size, 1023 UINT16 ComId, 1024 UINT16 ComIdExtension, 1025 UINT32 HostSessionId, 1026 TCG_UID SpId, 1027 BOOLEAN Write, 1028 UINT32 HostChallengeLength, 1029 const VOID *HostChallenge, 1030 TCG_UID HostSigningAuthority 1031 ); 1032 1033 /** 1034 Creates ComPacket with a Method call that sets the PIN column for the row specified. 1035 This assumes a start session has already been opened with the desired SP. 1036 1037 @param [in/out] CreateStruct Structure used to add method call. 1038 @param [in/out] Size Describes the size of the entire ComPacket (header and payload). Filled out by function. 1039 @param [in] ComId ComID for the ComPacket 1040 @param [in] ComIdExtension Extended ComID for the ComPacket 1041 @param [in] TperSession Tper Session ID for the Packet 1042 @param [in] HostSession Host Session ID for the Packet 1043 @param [in] SidRow UID of row of current SP to set PIN column 1044 @param [in] Password value of PIN to set 1045 @param [in] PasswordSize Size of PIN 1046 1047 **/ 1048 TCG_RESULT 1049 EFIAPI 1050 TcgCreateSetCPin( 1051 TCG_CREATE_STRUCT *CreateStruct, 1052 UINT32 *Size, 1053 UINT16 ComId, 1054 UINT16 ComIdExtension, 1055 UINT32 TperSession, 1056 UINT32 HostSession, 1057 TCG_UID SidRow, 1058 const VOID *Password, 1059 UINT32 PasswordSize 1060 ); 1061 1062 /** 1063 Creates ComPacket with a Method call that sets the "Enabled" column for the row specified using the value specified. 1064 This assumes a start session has already been opened with the desired SP. 1065 1066 @param [in/out] CreateStruct Structure used to add method call 1067 @param [in/out] Size Describes the size of the entire ComPacket (header and payload). Filled out by function. 1068 @param [in] ComId ComID for the ComPacket 1069 @param [in] ComIdExtension Extended ComID for the ComPacket 1070 @param [in] TperSession Tper Session ID for the Packet 1071 @param [in] HostSession Host Session ID for the Packet 1072 @param [in] AuthorityUid Authority UID to modify the "Enabled" column for 1073 @param [in] Enabled Value to set the "Enabled" column to 1074 1075 **/ 1076 TCG_RESULT 1077 EFIAPI 1078 TcgSetAuthorityEnabled( 1079 TCG_CREATE_STRUCT *CreateStruct, 1080 UINT32 *Size, 1081 UINT16 ComId, 1082 UINT16 ComIdExtension, 1083 UINT32 TperSession, 1084 UINT32 HostSession, 1085 TCG_UID AuthorityUid, 1086 BOOLEAN Enabled 1087 ); 1088 1089 /** 1090 1091 Creates ComPacket with EndSession. 1092 This assumes a start session has already been opened. 1093 1094 @param [in/out] CreateStruct Structure used to add Endsession 1095 @param [in/out] Size Describes the size of the entire ComPacket (header and payload). Filled out by function. 1096 @param [in] ComId ComID for the ComPacket 1097 @param [in] ComIdExtension Extended ComID for the ComPacket 1098 @param [in] HostSessionId Host Session ID for the Packet 1099 @param [in] TpSessionId Tper Session ID for the Packet 1100 1101 **/ 1102 TCG_RESULT 1103 EFIAPI 1104 TcgCreateEndSession( 1105 TCG_CREATE_STRUCT *CreateStruct, 1106 UINT32 *Size, 1107 UINT16 ComId, 1108 UINT16 ComIdExtension, 1109 UINT32 HostSessionId, 1110 UINT32 TpSessionId 1111 ); 1112 1113 1114 /** 1115 1116 Retrieves human-readable token type name. 1117 1118 @param[in] Type Token type to retrieve 1119 1120 **/ 1121 CHAR8* 1122 EFIAPI 1123 TcgTokenTypeString( 1124 TCG_TOKEN_TYPE Type 1125 ); 1126 1127 /** 1128 Returns the method status of the current subpacket. Does not affect the current position 1129 in the ComPacket. In other words, it can be called whenever you have a valid SubPacket. 1130 1131 @param [in/out] ParseStruct Structure used to parse received TCG response 1132 @param [in/out] MethodStatus Method status retrieved of the current SubPacket 1133 1134 **/ 1135 TCG_RESULT 1136 EFIAPI 1137 TcgGetMethodStatus( 1138 const TCG_PARSE_STRUCT *ParseStruct, 1139 UINT8 *MethodStatus 1140 ); 1141 1142 /** 1143 Returns a human-readable string representing a method status return code. 1144 1145 @param[in] MethodStatus Method status to translate to a string 1146 1147 1148 @retval return the string info. 1149 **/ 1150 CHAR8* 1151 EFIAPI 1152 TcgMethodStatusString( 1153 UINT8 MethodStatus 1154 ); 1155 1156 1157 /** 1158 Retrieves the comID and Extended comID of the ComPacket in the Tcg response. 1159 It is intended to be used to confirm the received Tcg response is intended for user that received it. 1160 1161 @param [in] ParseStruct Structure used to parse received TCG response. 1162 @param [in/out] ComId comID retrieved from received ComPacket. 1163 @param [in/out] ComIdExtension Extended comID retrieved from received ComPacket 1164 1165 **/ 1166 TCG_RESULT 1167 EFIAPI 1168 TcgGetComIds( 1169 const TCG_PARSE_STRUCT *ParseStruct, 1170 UINT16 *ComId, 1171 UINT16 *ComIdExtension 1172 ); 1173 1174 /** 1175 Checks if the ComIDs of the response match the expected values. 1176 1177 @param[in] ParseStruct Structure used to parse received TCG response 1178 @param[in] ExpectedComId Expected comID 1179 @param[in] ExpectedComIdExtension Expected extended comID 1180 1181 **/ 1182 TCG_RESULT 1183 EFIAPI 1184 TcgCheckComIds( 1185 const TCG_PARSE_STRUCT *ParseStruct, 1186 UINT16 ExpectedComId, 1187 UINT16 ExpectedComIdExtension 1188 ); 1189 1190 /** 1191 Parses the Sync Session response contained in the parseStruct to retrieve Tper session ID. If the Sync Session response 1192 parameters do not match the comID, extended ComID and host session ID then a failure is returned. 1193 1194 @param[in/out] ParseStruct Structure used to parse received TCG response, contains Sync Session response. 1195 @param[in] ComId Expected ComID that is compared to actual ComID of response 1196 @param[in] ComIdExtension Expected Extended ComID that is compared to actual Extended ComID of response 1197 @param[in] HostSessionId Expected Host Session ID that is compared to actual Host Session ID of response 1198 @param[in/out] TperSessionId Tper Session ID retrieved from the Sync Session response. 1199 1200 **/ 1201 TCG_RESULT 1202 EFIAPI 1203 TcgParseSyncSession( 1204 const TCG_PARSE_STRUCT *ParseStruct, 1205 UINT16 ComId, 1206 UINT16 ComIdExtension, 1207 UINT32 HostSessionId, 1208 UINT32 *TperSessionId 1209 ); 1210 1211 /** 1212 Create set ace. 1213 1214 @param CreateStruct Input create structure. 1215 @param Size size info. 1216 @param ComId ComId info. 1217 @param ComIdExtension ComId extension info. 1218 @param TperSession Tper session data. 1219 @param HostSession Host session data. 1220 @param AceRow Ace row info. 1221 @param Authority1 Authority 1 info. 1222 @param LogicalOperator Logiccal operator info. 1223 @param Authority2 Authority 2 info. 1224 1225 @retval Return the action result. 1226 1227 **/ 1228 TCG_RESULT 1229 EFIAPI 1230 TcgCreateSetAce( 1231 TCG_CREATE_STRUCT *CreateStruct, 1232 UINT32 *Size, 1233 UINT16 ComId, 1234 UINT16 ComIdExtension, 1235 UINT32 TperSession, 1236 UINT32 HostSession, 1237 TCG_UID AceRow, 1238 TCG_UID Authority1, 1239 BOOLEAN LogicalOperator, 1240 TCG_UID Authority2 1241 ); 1242 1243 /** 1244 Enum level 0 discovery. 1245 1246 @param DiscoveryHeader Discovery header. 1247 @param Callback Callback function. 1248 @param Context The context for the function. 1249 1250 @retval return true if the callback return TRUE, else return FALSE. 1251 1252 **/ 1253 BOOLEAN 1254 EFIAPI 1255 TcgEnumLevel0Discovery( 1256 const TCG_LEVEL0_DISCOVERY_HEADER *DiscoveryHeader, 1257 TCG_LEVEL0_ENUM_CALLBACK Callback, 1258 VOID *Context 1259 ); 1260 1261 /** 1262 Get Feature code from the header. 1263 1264 @param DiscoveryHeader The discovery header. 1265 @param FeatureCode reutrn the Feature code. 1266 @param FeatureSize return the Feature size. 1267 1268 @retval return the Feature code data. 1269 **/ 1270 TCG_LEVEL0_FEATURE_DESCRIPTOR_HEADER* 1271 EFIAPI 1272 TcgGetFeature( 1273 const TCG_LEVEL0_DISCOVERY_HEADER *DiscoveryHeader, 1274 UINT16 FeatureCode, 1275 UINTN *FeatureSize 1276 ); 1277 1278 /** 1279 Determines if the protocol provided is part of the provided supported protocol list. 1280 1281 @param[in] ProtocolList Supported protocol list to investigate 1282 @param[in] Protocol Protocol value to determine if supported 1283 1284 @return TRUE = protocol is supported, FALSE = protocol is not supported 1285 **/ 1286 BOOLEAN 1287 EFIAPI 1288 TcgIsProtocolSupported( 1289 const TCG_SUPPORTED_SECURITY_PROTOCOLS *ProtocolList, 1290 UINT16 Protocol 1291 ); 1292 1293 /** 1294 Determines if the Locking Feature "Locked" bit is set in the level 0 discovery response. 1295 1296 @param[in] Discovery Level 0 discovery response 1297 1298 @return TRUE = Locked is set, FALSE = Locked is false 1299 1300 **/ 1301 BOOLEAN 1302 EFIAPI 1303 TcgIsLocked( 1304 const TCG_LEVEL0_DISCOVERY_HEADER *Discovery 1305 ); 1306 1307 #pragma pack() 1308 1309 1310 #endif // _TCG_CORE_H_ 1311