| Trusted Platform Module Library |
| Part 2: Structures |
| Family “2.0” |
| Level 00 Revision 00.99 |
| October 31, 2013 |
| |
| Contact: admin@trustedcomputinggroup.org |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| TCG |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| Licenses and Notices |
| 1. Copyright Licenses: |
| |
| |
| Trusted Computing Group (TCG) grants to the user of the source code in this specification (the |
| “Source Code”) a worldwide, irrevocable, nonexclusive, royalty free, copyright license to |
| reproduce, create derivative works, distribute, display and perform the Source Code and |
| derivative works thereof, and to grant others the rights granted herein. |
| |
| |
| |
| The TCG grants to the user of the other parts of the specification (other than the Source Code) |
| the rights to reproduce, distribute, display, and perform the specification solely for the purpose of |
| developing products based on such documents. |
| |
| 2. Source Code Distribution Conditions: |
| |
| |
| Redistributions of Source Code must retain the above copyright licenses, this list of conditions |
| and the following disclaimers. |
| |
| |
| |
| Redistributions in binary form must reproduce the above copyright licenses, this list of conditions |
| and the following disclaimers in the documentation and/or other materials provided with the |
| distribution. |
| |
| 3. Disclaimers: |
| |
| |
| THE COPYRIGHT LICENSES SET FORTH ABOVE DO NOT REPRESENT ANY FORM OF |
| LICENSE OR WAIVER, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE, WITH |
| RESPECT TO PATENT RIGHTS HELD BY TCG MEMBERS (OR OTHER THIRD PARTIES) |
| THAT MAY BE NECESSARY TO IMPLEMENT THIS SPECIFICATION OR OTHERWISE. |
| Contact TCG Administration (admin@trustedcomputinggroup.org) for information on specification |
| licensing rights available through TCG membership agreements. |
| |
| |
| |
| THIS SPECIFICATION IS PROVIDED "AS IS" WITH NO EXPRESS OR IMPLIED WARRANTIES |
| WHATSOEVER, INCLUDING ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR A |
| PARTICULAR PURPOSE, ACCURACY, COMPLETENESS, OR NONINFRINGEMENT OF |
| INTELLECTUAL PROPERTY RIGHTS, OR ANY WARRANTY OTHERWISE ARISING OUT OF |
| ANY PROPOSAL, SPECIFICATION OR SAMPLE. |
| |
| |
| |
| Without limitation, TCG and its members and licensors disclaim all liability, including liability for |
| infringement of any proprietary rights, relating to use of information in this specification and to the |
| implementation of this specification, and TCG disclaims all liability for cost of procurement of |
| substitute goods or services, lost profits, loss of use, loss of data or any incidental, consequential, |
| direct, indirect, or special damages, whether under contract, tort, warranty or otherwise, arising in |
| any way out of use or reliance upon this specification or any information herein. |
| |
| Any marks and brands contained herein are the property of their respective owners. |
| |
| Page ii |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| CONTENTS |
| 1 |
| |
| Scope .................................................................................................................................................... 1 |
| |
| 2 |
| |
| Terms and definitions ............................................................................................................................ 1 |
| |
| 3 |
| |
| Symbols and abbreviated terms ............................................................................................................ 1 |
| |
| 4 |
| |
| Notation ................................................................................................................................................. 1 |
| 4.1 |
| Introduction ................................................................................................................................ 1 |
| 4.2 |
| Named Constants ...................................................................................................................... 2 |
| 4.3 |
| Data Type Aliases (typedefs) .................................................................................................... 3 |
| 4.4 |
| Enumerations............................................................................................................................. 3 |
| 4.5 |
| Interface Type ............................................................................................................................ 4 |
| 4.6 |
| Arrays ........................................................................................................................................ 5 |
| 4.7 |
| Structure Definitions .................................................................................................................. 6 |
| 4.8 |
| Conditional Types ...................................................................................................................... 7 |
| 4.9 |
| Unions........................................................................................................................................ 8 |
| 4.9.1 |
| Introduction...................................................................................................................... 8 |
| 4.9.2 |
| Union Definition ............................................................................................................... 8 |
| 4.9.3 |
| Union Instance ................................................................................................................ 9 |
| 4.9.4 |
| Union Selector Definition ............................................................................................... 10 |
| 4.10 Bit Field Definitions .................................................................................................................. 11 |
| 4.11 Parameter Limits ..................................................................................................................... 11 |
| 4.12 Enumeration Macro ................................................................................................................. 13 |
| 4.13 Size Checking .......................................................................................................................... 13 |
| 4.14 Data Direction .......................................................................................................................... 14 |
| 4.15 Structure Validations ............................................................................................................... 14 |
| 4.16 Name Prefix Convention .......................................................................................................... 14 |
| 4.17 Data Alignment ........................................................................................................................ 15 |
| 4.18 Parameter Unmarshaling Errors .............................................................................................. 15 |
| |
| 5 |
| |
| Base Types ......................................................................................................................................... 17 |
| 5.1 |
| Primitive Types ........................................................................................................................ 17 |
| 5.2 |
| Miscellaneous Types ............................................................................................................... 17 |
| |
| 6 |
| |
| Constants ............................................................................................................................................ 18 |
| 6.1 |
| TPM_SPEC (Specification Version Values) ............................................................................ 18 |
| 6.2 |
| TPM_GENERATED ................................................................................................................. 18 |
| 6.3 |
| TPM_ALG_ID .......................................................................................................................... 19 |
| 6.4 |
| TPM_ECC_CURVE ................................................................................................................. 22 |
| 6.5 |
| TPM_CC (Command Codes) .................................................................................................. 22 |
| 6.5.1 |
| Format ........................................................................................................................... 22 |
| 6.5.2 |
| Description .................................................................................................................... 23 |
| 6.5.3 |
| TPM_CC Listing ............................................................................................................ 24 |
| 6.6 |
| TPM_RC (Response Codes) ................................................................................................... 28 |
| 6.6.1 |
| Description .................................................................................................................... 28 |
| 6.6.2 |
| Response Code Formats .............................................................................................. 29 |
| 6.6.3 |
| TPM_RC Values ........................................................................................................... 32 |
| 6.7 |
| TPM_CLOCK_ADJUST ........................................................................................................... 37 |
| 6.8 |
| TPM_EO (EA Arithmetic Operands) ........................................................................................ 37 |
| 6.9 |
| TPM_ST (Structure Tags) ....................................................................................................... 38 |
| 6.10 TPM_SU (Startup Type) .......................................................................................................... 40 |
| 6.11 TPM_SE (Session Type) ......................................................................................................... 40 |
| 6.12 TPM_CAP (Capabilities) .......................................................................................................... 41 |
| 6.13 TPM_PT (Property Tag) .......................................................................................................... 41 |
| 6.14 TPM_PT_PCR (PCR Property Tag) ........................................................................................ 47 |
| 6.15 TPM_PS (Platform Specific) .................................................................................................... 49 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page iii |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 7 |
| |
| Handles ............................................................................................................................................... 50 |
| 7.1 |
| Introduction .............................................................................................................................. 50 |
| 7.2 |
| TPM_HT (Handle Types) ......................................................................................................... 50 |
| 7.3 |
| Persistent Handle Sub-ranges................................................................................................. 51 |
| 7.4 |
| TPM_RH (Permanent Handles)............................................................................................... 52 |
| 7.5 |
| TPM_HC (Handle Value Constants) ....................................................................................... 53 |
| |
| 8 |
| |
| Attribute Structures .............................................................................................................................. 55 |
| 8.1 |
| Description ............................................................................................................................... 55 |
| 8.2 |
| TPMA_ALGORITHM ............................................................................................................... 55 |
| 8.3 |
| TPMA_OBJECT (Object Attributes) ........................................................................................ 55 |
| 8.3.1 |
| Introduction.................................................................................................................... 55 |
| 8.3.2 |
| Structure Definition ........................................................................................................ 56 |
| 8.3.3 |
| Attribute Descriptions .................................................................................................... 57 |
| 8.3.3.1 |
| Introduction ............................................................................................................ 57 |
| 8.3.3.2 |
| Bit[1] – fixedTPM ................................................................................................... 57 |
| 8.3.3.3 |
| Bit[2] – stClear ....................................................................................................... 58 |
| 8.3.3.4 |
| Bit[4] – fixedParent ................................................................................................ 58 |
| 8.3.3.5 |
| Bit[5] – sensitiveDataOrigin ................................................................................... 58 |
| 8.3.3.6 |
| Bit[6] – userWithAuth............................................................................................. 59 |
| 8.3.3.7 |
| Bit[7] – adminWithPolicy........................................................................................ 59 |
| 8.3.3.8 |
| Bit[10] – noDA ....................................................................................................... 59 |
| 8.3.3.9 |
| Bit[11] – encryptedDuplication .............................................................................. 60 |
| 8.3.3.10 |
| Bit[16] – restricted ................................................................................................. 60 |
| 8.3.3.11 |
| Bit[17] – decrypt .................................................................................................... 61 |
| 8.3.3.12 |
| Bit[18] – sign .......................................................................................................... 61 |
| 8.4 |
| TPMA_SESSION (Session Attributes) .................................................................................... 62 |
| 8.5 |
| TPMA_LOCALITY (Locality Attribute) ..................................................................................... 63 |
| 8.6 |
| TPMA_PERMANENT .............................................................................................................. 64 |
| 8.7 |
| TPMA_STARTUP_CLEAR ...................................................................................................... 65 |
| 8.8 |
| TPMA_MEMORY .................................................................................................................... 66 |
| 8.9 |
| TPMA_CC (Command Code Attributes) ................................................................................. 67 |
| 8.9.1 |
| Introduction.................................................................................................................... 67 |
| 8.9.2 |
| Structure Definition ........................................................................................................ 67 |
| 8.9.3 |
| Field Descriptions .......................................................................................................... 67 |
| 8.9.3.1 |
| Bits[15:0] – commandIndex ................................................................................... 67 |
| 8.9.3.2 |
| Bit[22] – nv ............................................................................................................ 67 |
| 8.9.3.3 |
| Bit[23] – extensive ................................................................................................. 67 |
| 8.9.3.4 |
| Bit[24] – flushed ..................................................................................................... 68 |
| 8.9.3.5 |
| Bits[27:25] – cHandles .......................................................................................... 68 |
| 8.9.3.6 |
| Bit[28] – rHandle .................................................................................................... 68 |
| 8.9.3.7 |
| Bit[29] – V .............................................................................................................. 69 |
| 8.9.3.8 |
| Bits[31:30] – Res ................................................................................................... 69 |
| |
| 9 |
| |
| Interface Types .................................................................................................................................... 70 |
| 9.1 |
| Introduction .............................................................................................................................. 70 |
| 9.2 |
| TPMI_YES_NO ....................................................................................................................... 70 |
| 9.3 |
| TPMI_DH_OBJECT ................................................................................................................. 70 |
| 9.4 |
| TPMI_DH_PERSISTENT ........................................................................................................ 71 |
| 9.5 |
| TPMI_DH_ENTITY .................................................................................................................. 71 |
| 9.6 |
| TPMI_DH_PCR ....................................................................................................................... 72 |
| 9.7 |
| TPMI_SH_AUTH_SESSION ................................................................................................... 72 |
| 9.8 |
| TPMI_SH_HMAC .................................................................................................................... 72 |
| 9.9 |
| TPMI_SH_POLICY .................................................................................................................. 72 |
| 9.10 TPMI_DH_CONTEXT .............................................................................................................. 73 |
| 9.11 TPMI_RH_HIERARCHY .......................................................................................................... 73 |
| 9.12 TPMI_RH_ENABLES .............................................................................................................. 73 |
| |
| Page iv |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| 9.13 |
| 9.14 |
| 9.15 |
| 9.16 |
| 9.17 |
| 9.18 |
| 9.19 |
| 9.20 |
| 9.21 |
| 9.22 |
| 9.23 |
| 9.24 |
| 9.25 |
| 9.26 |
| 9.27 |
| 9.28 |
| 9.29 |
| 9.30 |
| 10 |
| |
| Part 2: Structures |
| |
| TPMI_RH_HIERARCHY_AUTH .............................................................................................. 74 |
| TPMI_RH_PLATFORM ........................................................................................................... 74 |
| TPMI_RH_OWNER ................................................................................................................. 74 |
| TPMI_RH_ENDORSEMENT ................................................................................................... 75 |
| TPMI_RH_PROVISION ........................................................................................................... 75 |
| TPMI_RH_CLEAR ................................................................................................................... 75 |
| TPMI_RH_NV_AUTH .............................................................................................................. 76 |
| TPMI_RH_LOCKOUT ............................................................................................................. 76 |
| TPMI_RH_NV_INDEX ............................................................................................................. 76 |
| TPMI_ALG_HASH ................................................................................................................... 77 |
| TPMI_ALG_ASYM (Asymmetric Algorithms) .......................................................................... 77 |
| TPMI_ALG_SYM (Symmetric Algorithms) .............................................................................. 78 |
| TPMI_ALG_SYM_OBJECT ..................................................................................................... 78 |
| TPMI_ALG_SYM_MODE ........................................................................................................ 79 |
| TPMI_ALG_KDF (Key and Mask Generation Functions) ........................................................ 79 |
| TPMI_ALG_SIG_SCHEME ..................................................................................................... 80 |
| TPMI_ECC_KEY_EXCHANGE ............................................................................................... 80 |
| TPMI_ST_COMMAND_TAG ................................................................................................... 80 |
| |
| Structure Definitions ............................................................................................................................ 81 |
| 10.1 TPMS_ALGORITHM_DESCRIPTION .................................................................................... 81 |
| 10.2 Hash/Digest Structures ............................................................................................................ 81 |
| 10.2.1 |
| TPMU_HA (Hash) ......................................................................................................... 81 |
| 10.2.2 |
| TPMT_HA...................................................................................................................... 82 |
| 10.3 Sized Buffers ........................................................................................................................... 82 |
| 10.3.1 |
| Introduction.................................................................................................................... 82 |
| 10.3.2 |
| TPM2B_DIGEST ........................................................................................................... 83 |
| 10.3.3 |
| TPM2B_DATA ............................................................................................................... 83 |
| 10.3.4 |
| TPM2B_NONCE ........................................................................................................... 83 |
| 10.3.5 |
| TPM2B_AUTH .............................................................................................................. 83 |
| 10.3.6 |
| TPM2B_OPERAND ...................................................................................................... 84 |
| 10.3.7 |
| TPM2B_EVENT ............................................................................................................ 84 |
| 10.3.8 |
| TPM2B_MAX_BUFFER ................................................................................................ 84 |
| 10.3.9 |
| TPM2B_MAX_NV_BUFFER ......................................................................................... 84 |
| 10.3.10 TPM2B_TIMEOUT ........................................................................................................ 85 |
| 10.3.11 TPM2B_IV ..................................................................................................................... 85 |
| 10.4 Names ..................................................................................................................................... 85 |
| 10.4.1 |
| Introduction.................................................................................................................... 85 |
| 10.4.2 |
| TPMU_NAME ................................................................................................................ 85 |
| 10.4.3 |
| TPM2B_NAME .............................................................................................................. 86 |
| 10.5 PCR Structures ........................................................................................................................ 86 |
| 10.5.1 |
| TPMS_PCR_SELECT ................................................................................................... 86 |
| 10.5.2 |
| TPMS_PCR_SELECTION ............................................................................................ 87 |
| 10.6 Tickets ..................................................................................................................................... 87 |
| 10.6.1 |
| Introduction.................................................................................................................... 87 |
| 10.6.2 |
| A NULL Ticket ............................................................................................................... 88 |
| 10.6.3 |
| TPMT_TK_CREATION ................................................................................................. 89 |
| 10.6.4 |
| TPMT_TK_VERIFIED ................................................................................................... 90 |
| 10.6.5 |
| TPMT_TK_AUTH .......................................................................................................... 91 |
| 10.6.6 |
| TPMT_TK_HASHCHECK ............................................................................................. 92 |
| 10.7 Property Structures .................................................................................................................. 92 |
| 10.7.1 |
| TPMS_ALG_PROPERTY ............................................................................................. 92 |
| 10.7.2 |
| TPMS_TAGGED_PROPERTY ..................................................................................... 92 |
| 10.7.3 |
| TPMS_TAGGED_PCR_SELECT ................................................................................. 93 |
| 10.8 Lists ......................................................................................................................................... 93 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page v |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 10.8.1 |
| TPML_CC...................................................................................................................... 93 |
| 10.8.2 |
| TPML_CCA ................................................................................................................... 94 |
| 10.8.3 |
| TPML_ALG.................................................................................................................... 94 |
| 10.8.4 |
| TPML_HANDLE ............................................................................................................ 94 |
| 10.8.5 |
| TPML_DIGEST ............................................................................................................. 95 |
| 10.8.6 |
| TPML_DIGEST_VALUES ............................................................................................. 95 |
| 10.8.7 |
| TPM2B_DIGEST_VALUES........................................................................................... 95 |
| 10.8.8 |
| TPML_PCR_SELECTION............................................................................................. 96 |
| 10.8.9 |
| TPML_ALG_PROPERTY.............................................................................................. 96 |
| 10.8.10 TPML_TAGGED_TPM_PROPERTY ............................................................................ 96 |
| 10.8.11 TPML_TAGGED_PCR_PROPERTY ............................................................................ 97 |
| 10.8.12 TPML_ECC_CURVE .................................................................................................... 97 |
| 10.9 Capabilities Structures ............................................................................................................. 97 |
| 10.9.1 |
| TPMU_CAPABILITIES .................................................................................................. 97 |
| 10.9.2 |
| TPMS_CAPABILITY_DATA .......................................................................................... 98 |
| 10.10 Clock/Counter Structures ........................................................................................................ 98 |
| 10.10.1 TPMS_CLOCK_INFO ................................................................................................... 98 |
| 10.10.2 Clock ............................................................................................................................. 98 |
| 10.10.3 ResetCount ................................................................................................................... 98 |
| 10.10.4 RestartCount ................................................................................................................. 99 |
| 10.10.5 Safe ............................................................................................................................... 99 |
| 10.10.6 TPMS_TIME_INFO ....................................................................................................... 99 |
| 10.11 TPM Attestation Structures .................................................................................................... 100 |
| 10.11.1 Introduction.................................................................................................................. 100 |
| 10.11.2 TPMS_TIME_ATTEST_INFO ..................................................................................... 100 |
| 10.11.3 TPMS_CERTIFY_INFO .............................................................................................. 100 |
| 10.11.1 TPMS_QUOTE_INFO ................................................................................................. 100 |
| 10.11.2 TPMS_COMMAND_AUDIT_INFO .............................................................................. 101 |
| 10.11.3 TPMS_SESSION_AUDIT_INFO ................................................................................. 101 |
| 10.11.4 TPMS_CREATION_INFO ........................................................................................... 101 |
| 10.11.5 TPMS_NV_CERTIFY_INFO ....................................................................................... 101 |
| 10.11.6 TPMI_ST_ATTEST ..................................................................................................... 102 |
| 10.11.7 TPMU_ATTEST .......................................................................................................... 102 |
| 10.11.8 TPMS_ATTEST .......................................................................................................... 103 |
| 10.11.9 TPM2B_ATTEST ........................................................................................................ 103 |
| 10.12 Authorization Structures ........................................................................................................ 104 |
| 10.12.1 TPMS_AUTH_COMMAND ......................................................................................... 104 |
| 10.12.2 TPMS_AUTH_RESPONSE ........................................................................................ 104 |
| 11 |
| |
| Algorithm Parameters and Structures ............................................................................................... 105 |
| 11.1 Symmetric .............................................................................................................................. 105 |
| 11.1.1 |
| Introduction.................................................................................................................. 105 |
| 11.1.2 |
| TPMI_AES_KEY_BITS ............................................................................................... 105 |
| 11.1.3 |
| TPMI_SM4_KEY_BITS ............................................................................................... 105 |
| 11.1.4 |
| TPMU_SYM_KEY_BITS ............................................................................................. 106 |
| 11.1.5 |
| TPMU_SYM_MODE ................................................................................................... 106 |
| 11.1.6 |
| TPMU_SYM_DETAILS ............................................................................................... 107 |
| 11.1.7 |
| TPMT_SYM_DEF ....................................................................................................... 107 |
| 11.1.8 |
| TPMT_SYM_DEF_OBJECT ....................................................................................... 107 |
| 11.1.9 |
| TPM2B_SYM_KEY ..................................................................................................... 108 |
| 11.1.10 TPMS_SYMCIPHER_PARMS .................................................................................... 108 |
| 11.1.11 TPM2B_SENSITIVE_DATA ........................................................................................ 108 |
| 11.1.12 TPMS_SENSITIVE_CREATE ..................................................................................... 109 |
| 11.1.13 TPM2B_SENSITIVE_CREATE ................................................................................... 110 |
| 11.1.14 TPMS_SCHEME_SIGHASH....................................................................................... 110 |
| 11.1.15 TPMI_ALG_HASH_SCHEME ..................................................................................... 110 |
| |
| Page vi |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 11.1.16 HMAC_SIG_SCHEME ................................................................................................ 110 |
| 11.1.17 TPMS_SCHEME_XOR ............................................................................................... 111 |
| 11.1.18 TPMU_SCHEME_HMAC ............................................................................................ 111 |
| 11.1.19 TPMT_KEYEDHASH_SCHEME ................................................................................. 111 |
| 11.2 Asymmetric ............................................................................................................................ 112 |
| 11.2.1 |
| Signing Schemes ........................................................................................................ 112 |
| 11.2.1.1 |
| Introduction .......................................................................................................... 112 |
| 11.2.1.2 |
| RSA_SIG_SCHEMES ......................................................................................... 112 |
| 11.2.1.3 |
| ECC_SIG_SCHEMES ......................................................................................... 112 |
| 11.2.1.4 |
| TPMS_SCHEME_ECDAA................................................................................... 112 |
| 11.2.1.5 |
| TPMU_SIG_SCHEME......................................................................................... 113 |
| 11.2.1.6 |
| TPMT_SIG_SCHEME ......................................................................................... 113 |
| 11.2.2 |
| Encryption Schemes ................................................................................................... 114 |
| 11.2.2.1 |
| Introduction .......................................................................................................... 114 |
| 11.2.2.2 |
| TPMS_SCHEME_OAEP ..................................................................................... 114 |
| 11.2.2.3 |
| TPMS_SCHEME_ECDH ..................................................................................... 114 |
| 11.2.3 |
| Key Derivation Schemes ............................................................................................. 114 |
| 11.2.3.1 |
| Introduction .......................................................................................................... 114 |
| 11.2.3.2 |
| TPMS_SCHEME_MGF1 ..................................................................................... 114 |
| 11.2.3.3 |
| TPMS_SCHEME_KDF1_SP800_56a ................................................................. 114 |
| 11.2.3.4 |
| TPMS_SCHEME_KDF2 ...................................................................................... 115 |
| 11.2.3.5 |
| TPMS_SCHEME_KDF1_SP800_108 ................................................................. 115 |
| 11.2.3.6 |
| TPMU_KDF_SCHEME........................................................................................ 115 |
| 11.2.3.7 |
| TPMT_KDF_SCHEME ........................................................................................ 115 |
| 11.2.3.8 |
| TPMI_ALG_ASYM_SCHEME ............................................................................. 116 |
| 11.2.3.9 |
| TPMU_ASYM_SCHEME..................................................................................... 116 |
| 11.2.3.10 TPMT_ASYM_SCHEME ..................................................................................... 117 |
| 11.2.4 |
| RSA ............................................................................................................................. 117 |
| 11.2.4.1 |
| TPMI_ALG_RSA_SCHEME ................................................................................ 117 |
| 11.2.4.2 |
| TPMT_RSA_SCHEME ........................................................................................ 117 |
| 11.2.4.3 |
| TPMI_ALG_RSA_DECRYPT .............................................................................. 118 |
| 11.2.4.4 |
| TPMT_RSA_DECRYPT ...................................................................................... 118 |
| 11.2.4.5 |
| TPM2B_PUBLIC_KEY_RSA ............................................................................... 118 |
| 11.2.4.6 |
| TPMI_RSA_KEY_BITS ....................................................................................... 118 |
| 11.2.4.7 |
| TPM2B_PRIVATE_KEY_RSA ............................................................................ 119 |
| 11.2.5 |
| ECC ............................................................................................................................. 120 |
| 11.2.5.1 |
| TPM2B_ECC_PARAMETER .............................................................................. 120 |
| 11.2.5.2 |
| TPMS_ECC_POINT ............................................................................................ 120 |
| 11.2.5.3 |
| TPM2B_ECC_POINT .......................................................................................... 120 |
| 11.2.5.4 |
| TPMI_ALG_ECC_SCHEME ............................................................................... 121 |
| 11.2.5.5 |
| TPMI_ECC_CURVE ............................................................................................ 121 |
| 11.2.5.6 |
| TPMT_ECC_SCHEME........................................................................................ 121 |
| 11.2.5.7 |
| TPMS_ALGORITHM_DETAIL_ECC ................................................................... 122 |
| 11.3 Signatures.............................................................................................................................. 122 |
| 11.3.1 |
| TPMS_SIGNATURE_RSASSA .................................................................................. 122 |
| 11.3.2 |
| TPMS_SIGNATURE_RSAPSS .................................................................................. 122 |
| 11.3.3 |
| TPMS_SIGNATURE_ECDSA ..................................................................................... 123 |
| 11.3.4 |
| TPMU_SIGNATURE ................................................................................................... 123 |
| 11.3.5 |
| TPMT_SIGNATURE ................................................................................................... 124 |
| 11.4 Key/Secret Exchange ............................................................................................................ 124 |
| 11.4.1 |
| Introduction.................................................................................................................. 124 |
| 11.4.2 |
| TPMU_ENCRYPTED_SECRET ................................................................................. 124 |
| 11.4.3 |
| TPM2B_ENCRYPTED_SECRET ............................................................................... 125 |
| 12 |
| |
| Key/Object Complex.......................................................................................................................... 126 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page vii |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 12.1 Introduction ............................................................................................................................ 126 |
| 12.2 Public Area Structures ........................................................................................................... 126 |
| 12.2.1 |
| Description .................................................................................................................. 126 |
| 12.2.2 |
| TPMI_ALG_PUBLIC ................................................................................................... 126 |
| 12.2.3 |
| Type-Specific Parameters ........................................................................................... 126 |
| 12.2.3.1 |
| Description .......................................................................................................... 126 |
| 12.2.3.2 |
| TPMU_PUBLIC_ID .............................................................................................. 127 |
| 12.2.3.3 |
| TPMS_KEYEDHASH_PARMS ........................................................................... 127 |
| 12.2.3.4 |
| TPMS_ASYM_PARMS ....................................................................................... 127 |
| 12.2.3.5 |
| TPMS_RSA_PARMS .......................................................................................... 128 |
| 12.2.3.6 |
| TPMS_ECC_PARMS .......................................................................................... 129 |
| 12.2.3.7 |
| TPMU_PUBLIC_PARMS .................................................................................... 129 |
| 12.2.3.8 |
| TPMT_PUBLIC_PARMS ..................................................................................... 130 |
| 12.2.4 |
| TPMT_PUBLIC ........................................................................................................... 130 |
| 12.2.5 |
| TPM2B_PUBLIC ......................................................................................................... 131 |
| 12.3 Private Area Structures ......................................................................................................... 131 |
| 12.3.1 |
| Introduction.................................................................................................................. 131 |
| 12.3.2 |
| Sensitive Data Structures ............................................................................................ 131 |
| 12.3.2.1 |
| Introduction .......................................................................................................... 131 |
| 12.3.2.2 |
| TPM2B_PRIVATE_VENDOR_SPECIFIC ........................................................... 131 |
| 12.3.2.3 |
| TPMU_SENSITIVE_COMPOSITE ...................................................................... 132 |
| 12.3.2.4 |
| TPMT_SENSITIVE .............................................................................................. 132 |
| 12.3.3 |
| TPM2B_SENSITIVE ................................................................................................... 132 |
| 12.3.4 |
| Encryption ................................................................................................................... 133 |
| 12.3.5 |
| Integrity........................................................................................................................ 133 |
| 12.3.6 |
| _PRIVATE ................................................................................................................... 133 |
| 12.3.7 |
| TPM2B_PRIVATE ....................................................................................................... 133 |
| 12.4 Identity Object ........................................................................................................................ 134 |
| 12.4.1 |
| Description .................................................................................................................. 134 |
| 12.4.2 |
| _ID_OBJECT .............................................................................................................. 134 |
| 12.4.3 |
| TPM2B_ID_OBJECT .................................................................................................. 134 |
| 13 |
| |
| NV Storage Structures ...................................................................................................................... 135 |
| 13.1 TPM_NV_INDEX ................................................................................................................... 135 |
| 13.2 TPMA_NV (NV Index Attributes) ........................................................................................... 136 |
| 13.3 TPMS_NV_PUBLIC ............................................................................................................... 139 |
| 13.4 TPM2B_NV_PUBLIC ............................................................................................................. 139 |
| |
| 14 |
| |
| Context Data ..................................................................................................................................... 140 |
| 14.1 Introduction ............................................................................................................................ 140 |
| 14.2 TPM2B_CONTEXT_SENSITIVE........................................................................................... 140 |
| 14.3 TPMS_CONTEXT_DATA ...................................................................................................... 140 |
| 14.4 TPM2B_CONTEXT_DATA .................................................................................................... 140 |
| 14.5 TPMS_CONTEXT ................................................................................................................. 141 |
| 14.6 Parameters of TPMS_CONTEXT .......................................................................................... 142 |
| 14.6.1 |
| sequence ..................................................................................................................... 142 |
| 14.6.2 |
| savedHandle ............................................................................................................... 142 |
| 14.6.3 |
| hierarchy...................................................................................................................... 143 |
| 14.7 Context Protection ................................................................................................................. 143 |
| 14.7.1 |
| Context Integrity .......................................................................................................... 143 |
| 14.7.2 |
| Context Confidentiality ................................................................................................ 143 |
| |
| 15 |
| |
| Creation Data .................................................................................................................................... 144 |
| 15.1 TPMS_CREATION_DATA .................................................................................................... 144 |
| 15.2 TPM2B_CREATION_DATA .................................................................................................. 144 |
| |
| Page viii |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| Annex A (informative) Algorithm Constants ............................................................................................. 145 |
| A.1 |
| Introduction ............................................................................................................................ 145 |
| A.2 |
| Allowed Hash Algorithms....................................................................................................... 145 |
| A.2.1 |
| SHA1 ........................................................................................................................... 145 |
| A.2.2 |
| SHA256 ....................................................................................................................... 145 |
| A.2.3 |
| SHA384 ....................................................................................................................... 145 |
| A.2.4 |
| SHA512 ....................................................................................................................... 146 |
| A.2.5 |
| SM3_256 ..................................................................................................................... 146 |
| A.3 |
| Architectural Limits ................................................................................................................ 146 |
| Annex B (informative) Implementation Definitions ................................................................................... 147 |
| B.1 |
| Introduction ............................................................................................................................ 147 |
| B.2 |
| Logic Values .......................................................................................................................... 147 |
| B.3 |
| Processor Values .................................................................................................................. 147 |
| B.4 |
| Implemented Algorithms ........................................................................................................ 148 |
| B.5 |
| Implemented Commands ...................................................................................................... 148 |
| B.6 |
| Algorithm Constants .............................................................................................................. 151 |
| B.6.1 |
| RSA ............................................................................................................................. 152 |
| B.6.2 |
| ECC ............................................................................................................................. 152 |
| B.6.3 |
| AES ............................................................................................................................. 152 |
| B.6.4 |
| SM4 ............................................................................................................................. 152 |
| B.6.5 |
| Symmetric ................................................................................................................... 153 |
| B.7 |
| Implementation Specific Values ............................................................................................ 154 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page ix |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| Tables |
| Table 1 — Name Prefix Convention ........................................................................................................... 15 |
| Table 2 — Unmarshaling Errors ................................................................................................................. 16 |
| Table 3 — Definition of Base Types ........................................................................................................... 17 |
| Table 4 — Definition of Types for Documentation Clarity ........................................................................... 17 |
| Table 5 — Definition of (UINT32) TPM_SPEC Constants <> ..................................................................... 18 |
| Table 6 — Definition of (UINT32) TPM_GENERATED Constants <O> ..................................................... 18 |
| Table 7 — Definition of (UINT16) TPM_ALG_ID Constants <IN/OUT, S> ................................................. 19 |
| Table 8 — Definition of (UINT16) {ECC} TPM_ECC_CURVE Constants <IN/OUT, S> ............................ 22 |
| Table 9 — TPM Command Format Fields Description ............................................................................... 22 |
| Table 10 — Legend for Command Code Tables ........................................................................................ 23 |
| Table 11 — Definition of (UINT32) TPM_CC Constants (Numeric Order) <IN/OUT, S> ........................... 24 |
| Table 12 — Format-Zero Response Codes ................................................................................................ 30 |
| Table 13 — Format-One Response Codes ................................................................................................ 31 |
| Table 14 — Response Code Groupings ..................................................................................................... 31 |
| Table 15 — Definition of (UINT32) TPM_RC Constants (Actions) <OUT> ................................................ 32 |
| Table 16 — Definition of (INT8) TPM_CLOCK_ADJUST Constants <IN> ................................................. 37 |
| Table 17 — Definition of (UINT16) TPM_EO Constants <IN/OUT> ........................................................... 37 |
| Table 18 — Definition of (UINT16) TPM_ST Constants <IN/OUT, S> ....................................................... 38 |
| Table 19 — Definition of (UINT16) TPM_SU Constants <IN> .................................................................... 40 |
| Table 20 — Definition of (UINT8) TPM_SE Constants <IN> ...................................................................... 40 |
| Table 21 — Definition of (UINT32) TPM_CAP Constants .......................................................................... 41 |
| Table 22 — Definition of (UINT32) TPM_PT Constants <IN/OUT, S> ....................................................... 41 |
| Table 23 — Definition of (UINT32) TPM_PT_PCR Constants <IN/OUT, S> ............................................. 47 |
| Table 24 — Definition of (UINT32) TPM_PS Constants <OUT> ................................................................ 49 |
| Table 25 — Definition of Types for Handles ............................................................................................... 50 |
| Table 26 — Definition of (UINT8) TPM_HT Constants <S> ....................................................................... 50 |
| Table 27 — Definition of (UINT32) TPM_RH Constants <IN, S> ............................................................... 52 |
| Table 28 — Definition of (TPM_HANDLE) TPM_HC Constants <IN, S> ................................................... 54 |
| Table 29 — Definition of (UINT32) TPMA_ALGORITHM Bits .................................................................... 55 |
| Table 30 — Definition of (UINT32) TPMA_OBJECT Bits ........................................................................... 56 |
| Table 31 — Definition of (UINT8) TPMA_SESSION Bits <IN/OUT> .......................................................... 62 |
| Table 32 — Definition of (UINT8) TPMA_LOCALITY Bits <IN/OUT> ........................................................ 64 |
| Table 33 — Definition of (UINT32) TPMA_PERMANENT Bits <OUT> ...................................................... 64 |
| Table 34 — Definition of (UINT32) TPMA_STARTUP_CLEAR Bits <OUT> .............................................. 65 |
| Table 35 — Definition of (UINT32) TPMA_MEMORY Bits <Out> .............................................................. 66 |
| Table 36 — Definition of (TPM_CC) TPMA_CC Bits <OUT> ..................................................................... 67 |
| Table 37 — Definition of (BYTE) TPMI_YES_NO Type ............................................................................. 70 |
| |
| Page x |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| Table 38 — Definition of (TPM_HANDLE) TPMI_DH_OBJECT Type........................................................ 70 |
| Table 39 — Definition of (TPM_HANDLE) TPMI_DH_PERSISTENT Type ............................................... 71 |
| Table 40 — Definition of (TPM_HANDLE) TPMI_DH_ENTITY Type <IN> ................................................ 71 |
| Table 41 — Definition of (TPM_HANDLE) TPMI_DH_PCR Type <IN> ..................................................... 72 |
| Table 42 — Definition of (TPM_HANDLE) TPMI_SH_AUTH_SESSION Type <IN/OUT> ........................ 72 |
| Table 43 — Definition of (TPM_HANDLE) TPMI_SH_HMAC Type <IN/OUT> .......................................... 72 |
| Table 44 — Definition of (TPM_HANDLE) TPMI_SH_POLICY Type <IN/OUT> ....................................... 72 |
| Table 45 — Definition of (TPM_HANDLE) TPMI_DH_CONTEXT Type .................................................... 73 |
| Table 46 — Definition of (TPM_HANDLE) TPMI_RH_HIERARCHY Type ................................................ 73 |
| Table 47 — Definition of (TPM_HANDLE) TPMI_RH_ENABLES Type ..................................................... 73 |
| Table 48 — Definition of (TPM_HANDLE) TPMI_RH_HIERARCHY_AUTH Type <IN> ............................ 74 |
| Table 49 — Definition of (TPM_HANDLE) TPMI_RH_PLATFORM Type <IN> ......................................... 74 |
| Table 50 — Definition of (TPM_HANDLE) TPMI_RH_OWNER Type <IN> ............................................... 74 |
| Table 51 — Definition of (TPM_HANDLE) TPMI_RH_ENDORSEMENT Type <IN> ................................. 75 |
| Table 52 — Definition of (TPM_HANDLE) TPMI_RH_PROVISION Type <IN> ......................................... 75 |
| Table 53 — Definition of (TPM_HANDLE) TPMI_RH_CLEAR Type <IN> ................................................. 75 |
| Table 54 — Definition of (TPM_HANDLE) TPMI_RH_NV_AUTH Type <IN> ............................................ 76 |
| Table 55 — Definition of (TPM_HANDLE) TPMI_RH_LOCKOUT Type <IN> ........................................... 76 |
| Table 56 — Definition of (TPM_HANDLE) TPMI_RH_NV_INDEX Type <IN/OUT> .................................. 76 |
| Table 57 — Definition of (TPM_ALG_ID) TPMI_ALG_HASH Type............................................................ 77 |
| Table 58 — Definition of (TPM_ALG_ID) TPMI_ALG_ASYM Type ........................................................... 77 |
| Table 59 — Definition of (TPM_ALG_ID) TPMI_ALG_SYM Type .............................................................. 78 |
| Table 60 — Definition of (TPM_ALG_ID) TPMI_ALG_SYM_OBJECT Type ............................................. 78 |
| Table 61 — Definition of (TPM_ALG_ID) TPMI_ALG_SYM_MODE Type ................................................. 79 |
| Table 62 — Definition of (TPM_ALG_ID) TPMI_ALG_KDF Type .............................................................. 79 |
| Table 63 — Definition of (TPM_ALG_ID) TPMI_ALG_SIG_SCHEME Type .............................................. 80 |
| Table 64 — Definition of (TPM_ALG_ID) TPMI_ECC_KEY_EXCHANGE Type ........................................ 80 |
| Table 65 — Definition of (TPM_ST) TPMI_ST_COMMAND_TAG Type .................................................... 80 |
| Table 66 — Definition of TPMS_ALGORITHM_DESCRIPTION Structure <OUT> .................................... 81 |
| Table 67 — Definition of TPMU_HA Union <IN/OUT, S> ........................................................................... 81 |
| Table 68 — Definition of TPMT_HA Structure <IN/OUT> .......................................................................... 82 |
| Table 69 — Definition of TPM2B_DIGEST Structure ................................................................................. 83 |
| Table 70 — Definition of TPM2B_DATA Structure ..................................................................................... 83 |
| Table 71 — Definition of Types for TPM2B_NONCE ................................................................................. 83 |
| Table 72 — Definition of Types for TPM2B_AUTH .................................................................................... 83 |
| Table 73 — Definition of Types for TPM2B_OPERAND ............................................................................ 84 |
| Table 74 — Definition of TPM2B_EVENT Structure ................................................................................... 84 |
| Table 75 — Definition of TPM2B_MAX_BUFFER Structure ...................................................................... 84 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page xi |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| Table 76 — Definition of TPM2B_MAX_NV_BUFFER Structure ............................................................... 84 |
| Table 77 — Definition of TPM2B_TIMEOUT Structure <IN/OUT> ............................................................. 85 |
| Table 78 — Definition of TPM2B_IV Structure <IN/OUT> .......................................................................... 85 |
| Table 79 — Definition of TPMU_NAME Union <> ...................................................................................... 85 |
| Table 80 — Definition of TPM2B_NAME Structure .................................................................................... 86 |
| Table 81 — Definition of TPMS_PCR_SELECT Structure ......................................................................... 87 |
| Table 82 — Definition of TPMS_PCR_SELECTION Structure ................................................................... 87 |
| Table 83 — Values for proof Used in Tickets ............................................................................................. 88 |
| Table 84 — General Format of a Ticket ...................................................................................................... 88 |
| Table 85 — Definition of TPMT_TK_CREATION Structure ........................................................................ 89 |
| Table 86 — Definition of TPMT_TK_VERIFIED Structure .......................................................................... 90 |
| Table 87 — Definition of TPMT_TK_AUTH Structure ................................................................................ 91 |
| Table 88 — Definition of TPMT_TK_HASHCHECK Structure .................................................................... 92 |
| Table 89 — Definition of TPMS_ALG_PROPERTY Structure <OUT> ....................................................... 92 |
| Table 90 — Definition of TPMS_TAGGED_PROPERTY Structure <OUT> ............................................... 92 |
| Table 91 — Definition of TPMS_TAGGED_PCR_SELECT Structure <OUT> ........................................... 93 |
| Table 92 — Definition of TPML_CC Structure ............................................................................................ 93 |
| Table 93 — Definition of TPML_CCA Structure <OUT> ............................................................................. 94 |
| Table 94 — Definition of TPML_ALG Structure .......................................................................................... 94 |
| Table 95 — Definition of TPML_HANDLE Structure <OUT>...................................................................... 94 |
| Table 96 — Definition of TPML_DIGEST Structure .................................................................................... 95 |
| Table 97 — Definition of TPML_DIGEST_VALUES Structure ................................................................... 95 |
| Table 98 — Definition of TPM2B_DIGEST_VALUES Structure ................................................................. 95 |
| Table 99 — Definition of TPML_PCR_SELECTION Structure ................................................................... 96 |
| Table 100 — Definition of TPML_ALG_PROPERTY Structure <OUT> ..................................................... 96 |
| Table 101 — Definition of TPML_TAGGED_TPM_PROPERTY Structure <OUT> ................................... 96 |
| Table 102 — Definition of TPML_TAGGED_PCR_PROPERTY Structure <OUT> ................................... 97 |
| Table 103 — Definition of {ECC} TPML_ECC_CURVE Structure <OUT> ................................................. 97 |
| Table 104 — Definition of TPMU_CAPABILITIES Union <OUT>............................................................... 97 |
| Table 105 — Definition of TPMS_CAPABILITY_DATA Structure <OUT> ................................................. 98 |
| Table 106 — Definition of TPMS_CLOCK_INFO Structure ........................................................................ 98 |
| Table 107 — Definition of TPMS_TIME_INFO Structure ........................................................................... 99 |
| Table 108 — Definition of TPMS_TIME_ATTEST_INFO Structure <OUT> ............................................. 100 |
| Table 109 — Definition of TPMS_CERTIFY_INFO Structure <OUT> ...................................................... 100 |
| Table 110 — Definition of TPMS_QUOTE_INFO Structure <OUT> ........................................................ 100 |
| Table 111 — Definition of TPMS_COMMAND_AUDIT_INFO Structure <OUT> ..................................... 101 |
| Table 112 — Definition of TPMS_SESSION_AUDIT_INFO Structure <OUT> ........................................ 101 |
| Table 113 — Definition of TPMS_CREATION_INFO Structure <OUT> .................................................. 101 |
| Table 114 — Definition of TPMS_NV_CERTIFY_INFO Structure <OUT> ............................................... 101 |
| Page xii |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| Table 115 — Definition of (TPM_ST) TPMI_ST_ATTEST Type <OUT> .................................................. 102 |
| Table 116 — Definition of TPMU_ATTEST Union <OUT> ....................................................................... 102 |
| Table 117 — Definition of TPMS_ATTEST Structure <OUT> .................................................................. 103 |
| Table 118 — Definition of TPM2B_ATTEST Structure <OUT> ................................................................ 103 |
| Table 119 — Definition of TPMS_AUTH_COMMAND Structure <IN> ..................................................... 104 |
| Table 120 — Definition of TPMS_AUTH_RESPONSE Structure <OUT> ................................................ 104 |
| Table 121 — Definition of {AES} (TPM_KEY_BITS) TPMI_AES_KEY_BITS Type ................................. 105 |
| Table 122 — Definition of {SM4} (TPM_KEY_BITS) TPMI_SM4_KEY_BITS Type ................................. 105 |
| Table 123 — Definition of TPMU_SYM_KEY_BITS Union ....................................................................... 106 |
| Table 124 — Definition of TPMU_SYM_MODE Union ............................................................................. 106 |
| Table 125 — xDefinition of TPMU_SYM_DETAILS Union ....................................................................... 107 |
| Table 126 — Definition of TPMT_SYM_DEF Structure ............................................................................ 107 |
| Table 127 — Definition of TPMT_SYM_DEF_OBJECT Structure ............................................................ 107 |
| Table 128 — Definition of TPM2B_SYM_KEY Structure .......................................................................... 108 |
| Table 129 — Definition of TPMS_SYMCIPHER_PARMS Structure ........................................................ 108 |
| Table 130 — Definition of TPM2B_SENSITIVE_DATA Structure ............................................................ 108 |
| Table 131 — Definition of TPMS_SENSITIVE_CREATE Structure <IN> ................................................ 109 |
| Table 132 — Definition of TPM2B_SENSITIVE_CREATE Structure <IN, S> .......................................... 110 |
| Table 133 — Definition of TPMS_SCHEME_SIGHASH Structure ........................................................... 110 |
| Table 134 — Definition of (TPM_ALG_ID) TPMI_ALG_KEYEDHASH_SCHEME Type .......................... 110 |
| Table 135 — Definition of Types for HMAC_SIG_SCHEME .................................................................... 110 |
| Table 136 — Definition of TPMS_SCHEME_XOR Structure ................................................................... 111 |
| Table 137 — Definition of TPMU_SCHEME_KEYEDHASH Union <IN/OUT, S> .................................... 111 |
| Table 138 — Definition of TPMT_KEYEDHASH_SCHEME Structure ..................................................... 111 |
| Table 139 — Definition of {RSA} Types for RSA_SIG_SCHEMES .......................................................... 112 |
| Table 140 — Definition of {ECC} Types for ECC_SIG_SCHEMES.......................................................... 112 |
| Table 141 — Definition of {ECC} TPMS_SCHEME_ECDAA Structure .................................................... 112 |
| Table 142 — Definition of TPMU_SIG_SCHEME Union <IN/OUT, S> .................................................... 113 |
| Table 143 — Definition of TPMT_SIG_SCHEME Structure ..................................................................... 113 |
| Table 144 — Definition of {RSA} TPMS_SCHEME_OAEP Structure ...................................................... 114 |
| Table 145 — Definition of {ECC} TPMS_SCHEME_ECDH Structure ...................................................... 114 |
| Table 146 — Definition of TPMS_SCHEME_MGF1 Structure ................................................................. 114 |
| Table 147 — Definition of {ECC} TPMS_SCHEME_KDF1_SP800_56a Structure .................................. 114 |
| Table 148 — Definition of TPMS_SCHEME_KDF2 Structure .................................................................. 115 |
| Table 149 — Definition of TPMS_SCHEME_KDF1_SP800_108 Structure ............................................. 115 |
| Table 150 — Definition of TPMU_KDF_SCHEME Union <IN/OUT, S> ................................................... 115 |
| Table 151 — Definition of TPMT_KDF_SCHEME Structure .................................................................... 115 |
| Table 152 — Definition of (TPM_ALG_ID) TPMI_ALG_ASYM_SCHEME Type <> ................................. 116 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page xiii |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| Table 153 — Definition of TPMU_ASYM_SCHEME Union ...................................................................... 116 |
| Table 154 — Definition of TPMT_ASYM_SCHEME Structure <> ............................................................ 117 |
| Table 155 — Definition of (TPM_ALG_ID) {RSA} TPMI_ALG_RSA_SCHEME Type .............................. 117 |
| Table 156 — Definition of {RSA} TPMT_RSA_SCHEME Structure ......................................................... 117 |
| Table 157 — Definition of (TPM_ALG_ID) {RSA} TPMI_ALG_RSA_DECRYPT Type ............................ 118 |
| Table 158 — Definition of {RSA} TPMT_RSA_DECRYPT Structure ....................................................... 118 |
| Table 159 — Definition of {RSA} TPM2B_PUBLIC_KEY_RSA Structure ................................................ 118 |
| Table 160 — Definition of {RSA} (TPM_KEY_BITS) TPMI_RSA_KEY_BITS Type ................................. 119 |
| Table 161 — Definition of {RSA} TPM2B_PRIVATE_KEY_RSA Structure .............................................. 119 |
| Table 162 — Definition of {ECC} TPM2B_ECC_PARAMETER Structure ............................................... 120 |
| Table 163 — Definition of {ECC} TPMS_ECC_POINT Structure ............................................................. 120 |
| Table 164 — Definition of {ECC} TPM2B_ECC_POINT Structure ........................................................... 120 |
| Table 165 — Definition of (TPM_ALG_ID) {ECC} TPMI_ALG_ECC_SCHEME Type ............................. 121 |
| Table 166 — Definition of {ECC} (TPM_ECC_CURVE) TPMI_ECC_CURVE Type ................................ 121 |
| Table 167 — Definition of (TPMT_SIG_SCHEME) {ECC} TPMT_ECC_SCHEME Structure .................. 121 |
| Table 168 — Definition of {ECC} TPMS_ALGORITHM_DETAIL_ECC Structure <OUT> ....................... 122 |
| Table 169 — Definition of {RSA} TPMS_SIGNATURE_RSASSA Structure ............................................ 122 |
| Table 170 — Definition of {RSA} TPMS_SIGNATURE_RSAPSS Structure ............................................ 123 |
| Table 171 — Definition of {ECC} TPMS_SIGNATURE_ECDSA Structure .............................................. 123 |
| Table 172 — Definition of TPMU_SIGNATURE Union <IN/OUT, S> ....................................................... 123 |
| Table 173 — Definition of TPMT_SIGNATURE Structure ........................................................................ 124 |
| Table 174 — Definition of TPMU_ENCRYPTED_SECRET Union <S> ................................................... 124 |
| Table 175 — Definition of TPM2B_ENCRYPTED_SECRET Structure .................................................... 125 |
| Table 176 — Definition of (TPM_ALG_ID) TPMI_ALG_PUBLIC Type .................................................... 126 |
| Table 177 — Definition of TPMU_PUBLIC_ID Union <IN/OUT, S> ......................................................... 127 |
| Table 178 — Definition of TPMS_KEYEDHASH_PARMS Structure........................................................ 127 |
| Table 179 — Definition of TPMS_ASYM_PARMS Structure <> .............................................................. 128 |
| Table 180 — Definition of {RSA} TPMS_RSA_PARMS Structure ............................................................ 128 |
| Table 181 — Definition of {ECC} TPMS_ECC_PARMS Structure ........................................................... 129 |
| Table 182 — Definition of TPMU_PUBLIC_PARMS Union <IN/OUT, S> ................................................ 129 |
| Table 183 — Definition of TPMT_PUBLIC_PARMS Structure ................................................................. 130 |
| Table 184 — Definition of TPMT_PUBLIC Structure ................................................................................ 130 |
| Table 185 — Definition of TPM2B_PUBLIC Structure .............................................................................. 131 |
| Table 186 — Definition of {RSA} TPM2B_PRIVATE_VENDOR_SPECIFIC Structure<> ........................ 131 |
| Table 187 — Definition of TPMU_SENSITIVE_COMPOSITE Union <IN/OUT, S> ................................. 132 |
| Table 188 — Definition of TPMT_SENSITIVE Structure .......................................................................... 132 |
| Table 189 — Definition of TPM2B_SENSITIVE Structure <IN/OUT> ...................................................... 132 |
| Table 190 — Definition of _PRIVATE Structure <> .................................................................................. 133 |
| Table 191 — Definition of TPM2B_PRIVATE Structure <IN/OUT, S> ..................................................... 133 |
| Page xiv |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| Table 192 — Definition of _ID_OBJECT Structure <> .............................................................................. 134 |
| Table 193 — Definition of TPM2B_ID_OBJECT Structure <IN/OUT> ..................................................... 134 |
| Table 194 — Definition of (UINT32) TPM_NV_INDEX Bits <> ................................................................. 135 |
| Table 195 — Options for space Field of TPM_NV_INDEX ....................................................................... 136 |
| Table 196 — Definition of (UINT32) TPMA_NV Bits ................................................................................ 137 |
| Table 197 — Definition of TPMS_NV_PUBLIC Structure ......................................................................... 139 |
| Table 198 — Definition of TPM2B_NV_PUBLIC Structure ....................................................................... 139 |
| Table 199 — Definition of TPM2B_CONTEXT_SENSITIVE Structure <IN/OUT> ................................... 140 |
| Table 200 — Definition of TPMS_CONTEXT_DATA Structure <IN/OUT, S> .......................................... 140 |
| Table 201 — Definition of TPM2B_CONTEXT_DATA Structure <IN/OUT> ............................................ 140 |
| Table 202 — Definition of TPMS_CONTEXT Structure ........................................................................... 141 |
| Table 203 — Context Handle Values ........................................................................................................ 142 |
| Table 204 — Definition of TPMS_CREATION_DATA Structure <OUT> ................................................. 144 |
| Table 205 — Definition of TPM2B_CREATION_DATA Structure <OUT> ............................................... 144 |
| Table 206 — Defines for SHA1 Hash Values ........................................................................................... 145 |
| Table 207 — Defines for SHA256 Hash Values ....................................................................................... 145 |
| Table 208 — Defines for SHA384 Hash Values ....................................................................................... 145 |
| Table 209 — Defines for SHA512 Hash Values ....................................................................................... 146 |
| Table 210 — Defines for SM3_256 Hash Values ..................................................................................... 146 |
| Table 211 — Defines for Architectural Limits Values ............................................................................... 146 |
| Table 212 — Defines for Logic Values ..................................................................................................... 147 |
| Table 213 — Defines for Processor Values .............................................................................................. 147 |
| Table 214 — Defines for Implemented Algorithms ................................................................................... 148 |
| Table 215 — Defines for Implemented Commands .................................................................................. 149 |
| Table 216 — Defines for RSA Algorithm Constants ................................................................................. 152 |
| Table 217 — Defines for ECC Algorithm Constants ................................................................................. 152 |
| Table 218 — Defines for AES Algorithm Constants ................................................................................. 152 |
| Table 219 — Defines for SM4 Algorithm Constants ................................................................................. 152 |
| Table 220 — Defines for Symmetric Algorithm Constants ....................................................................... 153 |
| Table 221 — Defines for Implementation Values ..................................................................................... 154 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page xv |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| Figures |
| Figure 1 — Command Format .................................................................................................................... 22 |
| Figure 2 — Format-Zero Response Codes ................................................................................................. 29 |
| Figure 3 — Format-One Response Codes ................................................................................................. 30 |
| Figure 4 — TPM 1.2 TPM_NV_INDEX ..................................................................................................... 135 |
| Figure 5 — TPM 2.0 TPM_NV_INDEX ..................................................................................................... 135 |
| |
| Page xvi |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| Part 2: Structures |
| 1 |
| |
| Scope |
| |
| This part of the Trusted Platform Module Library specification contains the definitions of the constants, |
| flags, structure, and union definitions used to communicate with the TPM. Values defined in this |
| document are used by the TPM commands defined in part 3: Commands and by the functions in part 4: |
| Supporting Routines. |
| NOTE |
| |
| 2 |
| |
| The structures in this document are the canonical form of the structures on the interface. All structures |
| are "packed" with no octets of padding between structure elements. The TPM-internal form of the |
| structures is dependent on the processor and compiler for the TPM implementation. |
| |
| Terms and definitions |
| |
| For the purposes of this document, the terms and definitions given in part 1 of this specification apply. |
| 3 |
| |
| Symbols and abbreviated terms |
| |
| For the purposes of this document, the symbols and abbreviated terms given in part 1 apply. |
| 4 |
| 4.1 |
| |
| Notation |
| Introduction |
| |
| The information in this document is formatted so that it may be converted to standard computer-language |
| formats by an automated process. The purpose of this automated process is to minimize the transcription |
| errors that often occur during the conversion process. |
| For the purposes of this document, the conventions given in Part 1 apply. |
| In addition, the conventions and notations in this clause describe the representation of various data so |
| that it is both human readable and amenable to automated processing. |
| When a table row contains the keyword “reserved” (all lower case) in columns 1 or 2, the tools will not |
| produce any values for the row in the table. |
| NOTE 1 |
| |
| In the examples in this clause 4, the unmarshaling routines are shown as returning bool. In the code of |
| the reference implementation, the return value is a TPM_RC. A bool is used in the examples, because |
| the meaning of a TPM_RC is not yet defined. |
| |
| NOTE 2 |
| |
| The unmarshaling code examples are the actual code that would be produced by the automatic code |
| generator used in the construction of the reference code. The actual code contains additional parameter |
| checking that is omitted for clarity of the principle being illustrated. Actual examples of the code are found |
| in Part 4. |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 1 |
| October 31, 2013 |
| |
| Part 2: Structures |
| 4.2 |
| |
| Trusted Platform Module Library |
| |
| Named Constants |
| |
| A named constant is a numeric value to which a name has been assigned. In the C language, this is done |
| with a #define statement. In this specification, a named constant is defined in a table that has a title that |
| starts with “Definition” and ends with “Constants.” |
| The table title will indicate the name of the class of constants that are being defined in the table. The title |
| will include the data type of the constants in parentheses. |
| The table in Example 1 names a collection of 16-bit constants and Example 2 shows the C code that |
| might be produced from that table by an automated process. |
| NOTE |
| |
| A named constant (#define) has no data type in C and an enumeration would be a better choice for |
| many of the defined constants. However, the C language does not allow an enumerated type to have a |
| storage type other than int so the method of using a combination of typedef and #define is used. |
| |
| EXAMPLE 1 |
| |
| Table xx — Definition of (UINT16) COUNTING Constants |
| Parameter |
| |
| Value |
| |
| Description |
| |
| first |
| |
| 1 |
| |
| decimal value is implicitly the size of the |
| |
| second |
| |
| 0x0002 |
| |
| hex value will match the number of bits in the constant |
| |
| third |
| |
| 3 |
| |
| fourth |
| |
| 0x0004 |
| |
| EXAMPLE 2 |
| /* The C language equivalent of the constants from the table above */ |
| typedef |
| UINT16 |
| COUNTING; |
| #define |
| first |
| 1 |
| #define |
| second |
| 0x0002 |
| #define |
| third |
| 3 |
| #define |
| fourth |
| 0x0004 |
| |
| Page 2 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| 4.3 |
| |
| Part 2: Structures |
| |
| Data Type Aliases (typedefs) |
| |
| When a group of named items is assigned a type, it is placed in a table that has a title starting with |
| “Definition of Types.” In this specification, defined types have names that use all upper-case characters. |
| The table in Example 1 shows how typedefs would be defined in this specification and Example 2 shows |
| the C-compatible code that might be produced from that table by an automated process. |
| EXAMPLE 1 |
| |
| Table xx — Definition of Types for Some Purpose |
| Type |
| |
| Name |
| |
| Description |
| |
| unsigned short |
| |
| UINT16 |
| |
| UINT16 |
| |
| SOME_TYPE |
| |
| unsigned long |
| |
| UINT32 |
| |
| UINT32 |
| |
| LAST_TYPE |
| |
| EXAMPLE 2 |
| /* C language equivalent of the typedefs from the table above */ |
| typedef unsigned short |
| UINT16; |
| typedef UINT16 |
| SOME_TYPE; |
| typedef unsigned long |
| UINT32; |
| typedef UINT32 |
| LAST_TYPE; |
| |
| 4.4 |
| |
| Enumerations |
| |
| A table that defines an enumerated data type will start with the word “Definition” and end with “Values.” |
| A value in parenthesis will denote the intrinsic data size of the value and may have the values "INT8", |
| "UINT8", "INT16", “UINT16”, "INT32", and “UINT32.” If this value is not present, “UINT16” is assumed. |
| Most C compilers set the type of an enumerated value to be an integer on the machine – often 16 bits – |
| but this is not always consistent. To ensure interoperability, the enumeration values may not exceed |
| 32,384. |
| The table in Example 1 shows how an enumeration would be defined in this specification. Example 2 |
| shows the C code that might be produced from that table by an automated process. |
| EXAMPLE 1 |
| |
| Table xx — Definition of (UINT16) CARD_SUIT Values |
| Suit Names |
| |
| Value |
| |
| CLUBS |
| |
| 0x0000 |
| |
| DIAMONDS |
| |
| 0x000D |
| |
| HEARTS |
| |
| 0x001A |
| |
| SPADES |
| |
| Description |
| |
| 0x0027 |
| |
| EXAMPLE 2 |
| /* C language equivalent of the structure defined in the table above */ |
| typedef enum { |
| CLUBS |
| = |
| 0x0000, |
| DIAMONDS |
| = |
| 0x000D, |
| HEARTS |
| = |
| 0x001A, |
| SPADES |
| = |
| 0x0027 |
| } CARD_SUIT; |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 3 |
| October 31, 2013 |
| |
| Part 2: Structures |
| 4.5 |
| |
| Trusted Platform Module Library |
| |
| Interface Type |
| |
| An interface type is used for an enumeration that is checked by the unmarshaling code. This type is |
| defined for purposes of automatic generation of the code that will validate the type. The title will start with |
| the keyword “Definition” and end with the keyword “Type.” A value in parenthesis indicates the base type |
| of the interface. The table may contain an entry that is prefixed with the “#” character to indicate the |
| response code if the validation code determines that the input parameter is the wrong type. |
| EXAMPLE 1 |
| |
| Table xx — Definition of (CARD_SUIT) RED_SUIT Type |
| Values |
| |
| Comments |
| |
| HEARTS |
| DIAMONDS |
| #TPM_RC_SUIT |
| |
| response code returned when the unmarshaling of this type fails |
| NOTE |
| |
| TPM_RC_SUIT is an example and no such response |
| code is actually defined in this specification. |
| |
| EXAMPLE 2 |
| /* Validation code that might be automatically generated from table above */ |
| if((*target != HEARTS) && (*target != DIAMONDS)) |
| return TPM_RC_SUIT; |
| |
| In some cases, the allowed values are numeric values with no associated mnemonic. In such a case, the |
| list of numeric values may be given a name. Then, when used in an interface definition, the name would |
| have a "$" prefix to indicate that a named list of values should be substituted. |
| To illustrate, assume that the implementation only supports two sizes (1024 and 2048 bits) for keys |
| associated with some algorithm (MY algorithm). In the implementation section (Annex B a named list |
| would be created. |
| EXAMPLE 3 |
| |
| Table xx — Defines for MY Algorithm Constants |
| Name |
| |
| Value |
| |
| Comments |
| |
| MY_KEY_SIZES_BITS |
| |
| {1024, 2048} |
| |
| braces because this is a list value |
| |
| Page 4 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| Then, whenever an input value would need to be a valid MY key size for the implementation, the value |
| $MY_KEY_SIZES_BITS could be used. Given the definition for MY_KEY_SIZES_BITS in example 3 |
| above, the tables in example 4 and 5 below, are equivalent. |
| EXAMPLE 4 |
| |
| Table xx — Definition of (UINT16) MY_KEY_BITS Type |
| Parameter |
| |
| Description |
| |
| {1024, 2048} |
| |
| the number of bits in the supported key |
| |
| EXAMPLE 5 |
| |
| Table xx — Definition of (UINT16) MY_KEY_BITS Type |
| Parameter |
| $MY_KEY_SIZES_BITS |
| |
| 4.6 |
| |
| Description |
| the number of bits in the supported key |
| |
| Arrays |
| |
| Arrays are denoted by a value in square brackets (“[ ]”) following a parameter name. The value in the |
| brackets may be either an integer value such as “[20]” or the name of a component of the same structure |
| that contains the array. |
| The table in Example 1 shows how a structure containing fixed and variable-length arrays would be |
| defined in this specification. Example 2 shows the C code that might be produced from that table by an |
| automated process. |
| EXAMPLE 1 |
| |
| Table xx — Definition of A_STRUCT Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| array1[20] |
| |
| UINT16 |
| |
| an array of 20 UINT16s |
| |
| a_size |
| |
| UINT16 |
| |
| array2[a_size] |
| |
| UINT32 |
| |
| an array of UINT32 values that has a |
| number of elements determined by a_size |
| above |
| |
| EXAMPLE 2 |
| /* C language equivalent of the typedefs from the table above */ |
| typedef struct { |
| UINT16 |
| array1[20]; |
| UINT16 |
| a_size; |
| UINT32 |
| array2[]; |
| } A_STRUCT; |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 5 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| 4.7 |
| |
| Trusted Platform Module Library |
| |
| Structure Definitions |
| |
| The tables used to define structures have a title that starts with the word “Definition” and ends with |
| “Structure.” The first column of the table will denote the reference names for the structure members; the |
| second column the data type of the member; and the third column a synopsis of the use of the element. |
| The table in Example 1 shows an example of how a structure would be defined in this specification and |
| Example 2 shows the C code that might be produced from the table by an automated process. Example 3 |
| illustrates the type of unmarshaling code that could be generated using the information available in the |
| table. |
| EXAMPLE 1 |
| |
| Table xx — Definition of SIMPLE_STRUCTURE Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| tag |
| |
| TPM_ST |
| |
| value1 |
| |
| INT32 |
| |
| value2 |
| |
| INT32 |
| |
| EXAMPLE 2 |
| /* C language equivalent of the structure defined in the table above */ |
| typedef struct { |
| TPM_ST |
| tag; |
| INT32 |
| value1 |
| INT32 |
| value2; |
| } SIMPLE_STRUCTURE; |
| EXAMPLE 3 |
| bool SIMPLE_STRUCTURE_Unmarshal(SIMPLE_STRUCTURE *target, BYTE **buffer, INT32 *size) |
| { |
| // If unmarshal of tag succeeds |
| if(TPM_ST_Unmarshal((TPM_ST *)&(target->tag), buffer, size)) |
| // then umarshal value1, and if that succeeds... |
| if(INT32_Unmarshal((INT32 *)&(target->value1, buffer, size)) |
| // then return the results of unmarshaling values |
| return(INT32_Unmarshal((INT32 *)&(target->value2, buffer, size)) |
| // if unmarshal of tag or value failed, return failure |
| return FALSE; |
| } |
| |
| Page 6 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| 4.8 |
| |
| Part 2: Structures |
| |
| Conditional Types |
| |
| An enumeration may contain an extended value indicated by “+” preceding the name in the "Value" |
| column. This “+” indicates that this is a conditional value that may be allowed in certain situations. |
| NOTE |
| |
| In many cases, the input values are algorithm IDs. When two collections of algorithm IDs differ only |
| because one collection allows TPM_ALG_NULL and the other does not, it is preferred that the re not be |
| two completely different enumerations because this leads to many casts. To avoid this, the “+” can be |
| added to a TPM_ALG_NULL value in the table defining the type. When the use of that type allows |
| TPM_ALG_NULL to be in the set, the use would append a “+” to the instance. |
| |
| EXAMPLE |
| |
| Table xx — Definition of (CARD_SUIT) TPMI_CARD_SUIT Type |
| Values |
| |
| Comments |
| |
| SPADES |
| HEARTS |
| DIAMONDS |
| CLUBS |
| +JOKER |
| |
| an optional value that may be allowed |
| |
| #TPM_RC_SUIT |
| |
| response code returned when the input value is not one of the |
| values above |
| |
| When an interface type is used, a “+” will be appended to the type specification for the parameter when |
| the conditional value is allowed. If no “+” is present, then the conditional value is not allowed. |
| EXAMPLE 1 |
| |
| Table xx — Definition of POKER_CARD Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| suit |
| |
| TPMI_CARD_SUIT+ |
| |
| allows joker |
| |
| number |
| |
| UINT8 |
| |
| the card value |
| |
| EXAMPLE 2 |
| |
| Table xx — Definition of BRIDGE_CARD Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| suit |
| |
| TPMI_CARD_SUIT |
| |
| does not allow joker |
| |
| number |
| |
| UINT8 |
| |
| the card value |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 7 |
| October 31, 2013 |
| |
| Part 2: Structures |
| 4.9 |
| |
| Trusted Platform Module Library |
| |
| Unions |
| |
| 4.9.1 |
| |
| Introduction |
| |
| A union allows a structure to contain a variety of structures or types. The union has members, only one of |
| which is present at a time. Three different tables are required to fully characterize a union so that it may |
| be communicated on the TPM interface and used by the TPM: |
| 1) union definition; |
| 2) union instance; and |
| 3) union selector definition. |
| 4.9.2 |
| |
| Union Definition |
| |
| The table in Example 1 illustrates a union definition. The title of a union definition table starts with |
| “Definition” and ends with “Union.” The “Parameter” column of a union definition lists the different names |
| that are used when referring a specific type. The “Type” column identifies the data type of the member. |
| The “Selector” column identifies the value that is used by the marshaling and unmarshaling code to |
| determine which case of the union is present. |
| If a parameter is the keyword “null,” then this denotes a selector with no contents. The table in Example 1 |
| illustrates a union in which a conditional null selector is allowed to indicate an empty union member. |
| Example 2 shows how the table would be converted into C-compatible code. |
| The expectation is that the unmarshaling code for the union will validate that the selector for the union is |
| one of values in the selector list. |
| EXAMPLE 1 |
| |
| Table xx — Definition of NUMBER_UNION Union |
| Parameter |
| |
| Type |
| |
| Selector |
| |
| a_byte |
| |
| BYTE |
| |
| BYTE_SELECT |
| |
| an_int |
| |
| int |
| |
| INT_SELECT |
| |
| a_float |
| |
| float |
| |
| FLOAT_SELECT |
| |
| +null |
| |
| NULL_SELECT |
| |
| Description |
| |
| the empty branch |
| |
| EXAMPLE 2 |
| // C-compatible version of the union defined in the table above |
| typedef union { |
| BYTE |
| a_byte; |
| int |
| an_int; |
| float |
| a_float; |
| } NUMBER_UNION; |
| EXAMPLE 3 |
| |
| Page 8 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| // Possible auto-generated code to unmarshal a union in Example 2 based on the |
| // input value of selector |
| bool NUMBER_UNION_Unmarshal(NUMBER_UNION *target, BYTE **buffer, |
| INT32 *size, UINT32 selector) |
| { |
| switch (selector) { |
| case BYTE_SELECT: |
| return BYTE_Unmarshal((BYTE *)&(target->a_byte), buffer, size); |
| case INT_SELECT: |
| return INT_Unmarshal((int *)&(target->an_int), buffer, size); |
| case FLOAT_SELECT: |
| return FLOAT_Unmarshal((float *)&(target->a_float), buffer, size); |
| case NULL_SELECT: |
| return; |
| } |
| |
| A table may have a type with no selector. This is used when the first part of the structure for all union |
| members is identical. This type is a programming convenience, allowing code to reference the common |
| members without requiring a case statement to determine the specific structure. In object oriented |
| programming terms, this type is a superclass and the types with selectors are subclasses. |
| 4.9.3 |
| |
| Union Instance |
| |
| When a union is used in a structure that is sent on the interface, the structure will minimally contain a |
| selector and a union. The selector value indicates which of the possible union members is present so that |
| the unmarshaling code can unmarshal the correct type. The selector may be any of the parameters that |
| occur in the structure before the union instance. To denote the structure parameter that is used as the |
| selector, its name is in brackets (“[ ]”) placed before the parameter name associated with the union. |
| The table in Example 1 shows the definition of a structure that contains a union and a selector. Example 2 |
| shows how the table would be converted into C-compatible code and Example 3 shows how the |
| unmarshaling code would handle the selector. |
| EXAMPLE 1 |
| |
| Table xx — Definition of STRUCTURE_WITH_UNION Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| select |
| |
| NUMBER_SELECT |
| |
| a value indicating the type in number |
| |
| [select] number |
| |
| NUMBER_UNION |
| |
| a union as shown in 4.9.2 |
| |
| EXAMPLE 2 |
| // C-compatible version of the union structure in the table above |
| typedef struct { |
| NUMBER_SELECT |
| select; |
| NUMBER_UNION |
| number; |
| } STRUCT_WITH_UNION; |
| EXAMPLE 3 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 9 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| // Possible unmarshaling code for the structure above |
| bool STRUCT_WITH_UNION_Unmarshal(STRUCT_WITH_UNION *target, BYTE **buffer, INT32 *size) |
| { |
| // Unmarshal the selector value |
| if(!NUMBER_SELECT_Unmarshal((NUMBER_SELECT *)&target->select, buffer, size)) |
| return FALSE; |
| // Use the unmarshaled selector value to indicate to the union unmarshal |
| // function which unmarshaling branch to follow. |
| return(NUMBER_UNION_Unmarshal((NUMBER_UNION *)&(target->number), |
| buffer, size, (UINT32)target->select); |
| } |
| |
| 4.9.4 |
| |
| Union Selector Definition |
| |
| The selector definition limits the values that are used in unmarshaling a union. Two different selector sets |
| applied to the same union define different types. |
| For the union in 4.9.2, a selector definition should be limited to no more than four values, one for each of |
| the union members. The selector definition could have fewer than four values. |
| In Example 1, the table defines a value for each of the union members. |
| EXAMPLE 1 |
| |
| Table xx — Definition of (INT8) NUMBER_SELECT Values <IN> |
| Name |
| |
| Value |
| |
| BYTE_SELECT |
| |
| 3 |
| |
| INT_SELECT |
| |
| 2 |
| |
| FLOAT_SELECT |
| |
| 1 |
| |
| NULL_SELECT |
| |
| Comments |
| |
| 0 |
| |
| The unmarshaling code would limit the input values to the defined values. When the NUMBER_SELECT |
| is used in the union instance of 4.9.3, any of the allowed union members of NUMBER_UNION could be |
| present. |
| A different selection could be used to limit the values in a specific instance. To get the different selection, |
| a new structure is defined with a different selector. The table in example 2 illustrates a way to subset the |
| union. The base type of the selection is NUMBER_SELECT so a NUMBER_SELECT will be unmarshaled |
| before the checks are made to see if the value is in the correct range for JUST_INTEGERS types. If the |
| base type had been UINT8, then no checking would occur prior to checking that the value is in the |
| allowed list. In this particular case, the effect is the same in either case since the only values that will be |
| accepted by the unmarshaling code for JUST_INTEGER are BYTE_SELECT and INT_SELECT. |
| EXAMPLE 2 |
| |
| Table xx — Definition of (NUMBER_SELECT) AN_INTEGER Type <IN> |
| Values |
| {BYTE_SELECT, INT_SELECT} |
| NOTE |
| |
| Comments |
| list of allowed values |
| |
| Since NULL_SELECT is not in the list of values accepted as a JUST_INTEGER, the “+” modifier will have |
| no effect if used for a JUST_INTEGERS type shown in Example 3. |
| |
| Page 10 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| The selector in Example 2 can then be used in a subset union as shown in Example 3. |
| EXAMPLE 3 |
| |
| Table xx — Definition of JUST_INTEGERS Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| select |
| |
| AN_INTEGER |
| |
| a value indicating the type in number |
| |
| [select] number |
| |
| NUMBER_UNION |
| |
| a union as shown in 4.9.2 |
| |
| 4.10 Bit Field Definitions |
| A table that defines a structure containing bit fields has a title that starts with “Definition” and ends with |
| “Bits.” A type identifier in parentheses in the title indicates the size of the datum that contains the bit |
| fields. |
| When the bit fields do not occupy consecutive locations, a spacer field is defined with a name of |
| “Reserved.” Bits in these spaces are reserved and shall be zero. |
| The table in Example 1 shows how a structure containing bit fields would be defined in this specification. |
| Example 2 shows the C code that might be produced from that table by an automated process. |
| When a field has more than one bit, the range is indicated by a pair of numbers separated by a colon (“:”). |
| The numbers will be in high:low order. |
| EXAMPLE1 |
| |
| Table xx — Definition of (UINT32) SOME_ATTRIBUTE Bits |
| Bit |
| 0 |
| |
| Name |
| |
| Action |
| |
| zeroth_bit |
| |
| SET (1): what to do if bit is 1 |
| CLEAR (0): what to do if bit is 0 |
| |
| 1 |
| |
| first_bit |
| |
| SET (1): what to do if bit is 1 |
| CLEAR (0): what to do if bit is 0 |
| |
| 6:2 |
| 7 |
| |
| Reserved |
| |
| A placeholder that spans 5 bits |
| |
| third_bit |
| |
| SET (1): what to do if bit is 1 |
| CLEAR (0): what to do if bit is 0 |
| |
| 31:8 |
| |
| Reserved |
| |
| Placeholder to fill 32 bits |
| |
| EXAMPLE 2 |
| /* C language equivalent of the attributes structure defined in the table above */ |
| typedef struct { |
| int zeroth_bit : 1; |
| int first_bit : 1; |
| int Reserved3 : 5; |
| int third_bit : 1; |
| int Reserved7 : 24; |
| } SOME_ATTRIBUTE; |
| |
| 4.11 Parameter Limits |
| A parameter used in a structure may be given a set of values that can be checked by the unmarshaling |
| code. The allowed values for a parameter may be included in the definition of the parameter by |
| appending the values and delimiting them with braces (“{ }”). The values are comma-separated |
| expressions. A range of numbers may be indicated by separating two expressions with a colon (“:”). The |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 11 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| first number is an expression that represents the minimum allowed value and the second number |
| indicates the maximum. If the minimum or maximum value expression is omitted, then the range is openended. |
| Parameter limits expressed using braces apply only to inputs to the TPM. Any value returned by the |
| TPM is assumed to be valid. |
| The maximum size of an array may be indicated by putting a “{}” delimited expression following the |
| square brackets (“[ ]”) that indicate that the value is an array. |
| EXAMPLE |
| |
| Table xx — Definition of B_STRUCT Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| value1 {20:25} |
| |
| UINT16 |
| |
| a parameter that must have a value between 20 |
| and 25 |
| |
| value2 {20} |
| |
| UINT16 |
| |
| a parameter that must have a value of 20 |
| |
| value3 {:25} |
| |
| INT16 |
| |
| a parameter that may be no larger than 25 |
| Since the parameter is signed, the minimum value |
| is the largest negative integer that may be |
| expressed in 16 bits. |
| |
| value4 {20:} |
| |
| a parameter that must be at least 20 |
| |
| value5 {1,2,3,5} |
| |
| UINT16 |
| |
| a parameter that may only have one of the four |
| listed values |
| |
| value6 {1, 2, 10:(10+10)} |
| |
| UINT32 |
| |
| a parameter that may have a value of 1, 2, or be |
| between 10 and 20 |
| |
| array1[value1] |
| |
| BYTE |
| |
| Because the index refers to value1, which is a |
| value limited to be between 20 and 25 inclusive, |
| array1 is an array that may have between 20 and |
| 25 octets. This is not the preferred way to indicate |
| the upper limit for an array as it does not indicate |
| the upper bound of the size. |
| NOTE |
| |
| array2[value4]{:25} |
| |
| BYTE |
| |
| This is a limitation of the current |
| parser. A different parser could |
| associate the range of value1 with this |
| value and compute the maximum size |
| of the array. |
| |
| an array that may have between 20 and 25 octets |
| This arrangement is used to allow the automatic |
| code generation to allocate 25 octets to store the |
| largest array2 that can be unmarshaled. The code |
| generation can determine from this expression that |
| value4 shall have a value of 25 or less. From the |
| definition of value4 above, it can determine that |
| value4 must have a value of at least 20. |
| |
| Page 12 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 4.12 Enumeration Macro |
| An enumeration can be a list of allowed numeric values. For example, the allowed sizes for an RSA key |
| might be expressed as: |
| |
| 4.13 Size Checking |
| In some structures, a size field is present to indicate the number of octets in some subsequent part of the |
| structure. In the B_STRUCT table in 4.11, value4 indicates how many octets to unmarshal for array2. This |
| semantic applies when the size field determines the number of octets to unmarshal. However, in some |
| cases, the subsequent structure is self-defining. If the size precedes a parameter that is not an octet |
| array, then the unmarshaled size of that parameter is determined by its data type. The table in Example 1 |
| shows a structure where the size parameter would nominally indicate the number of octets in the |
| remainder of the structure. |
| EXAMPLE 1 |
| |
| Table xx — Definition of C_STRUCT Structure |
| Parameter |
| |
| Type |
| |
| Comments |
| |
| size |
| |
| UINT16 |
| |
| the expected size of the remainder of the structure |
| |
| anInteger |
| |
| UINT32 |
| |
| a 4-octet value |
| |
| In this particular case, the value of size would be incorrect if it had any value other than 4. So that the |
| table parser is able to know that the purpose of the size parameter is to define the number of octets |
| expected in the remainder of the structure, an equal sign (“=”) is appended to the parameter name. |
| In the example below, the size= causes the parser to generate validation code that will check that the |
| unmarshaled size of someStructure and someData adds to the value unmarshaled for size. When the “=” |
| decoration is present, a value of zero is not allowed for the size. |
| EXAMPLE 2 |
| |
| Table xx — Definition of D_STRUCT Structure |
| Parameter |
| |
| Type |
| |
| Comments |
| |
| size= |
| |
| UINT16 |
| |
| the size of a structure |
| The “=” indicates that the TPM is required to |
| validate that the remainder of the D_STRUCT |
| structure is exactly the value in size. That is, the |
| number of bytes in the input buffer used to |
| successfully unmarshal someStructure must be the |
| same as size. |
| |
| someStructure |
| |
| A_STRUCT |
| |
| a structure to be unmarshaled |
| The size of the structure is computed when it is |
| unmarshaled. Because an “=” is present on the |
| definition of size, the TPM is required to validate |
| that the unmarshaled size exactly matches size. |
| |
| someData |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| UINT32 |
| |
| a value |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 13 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 4.14 Data Direction |
| A structure or union may be input (IN), output (OUT), or internal. An input structure is sent to the TPM and |
| is unmarshaled by the TPM. An output structure is sent from the TPM and is marshaled by the TPM. An |
| internal structure is not used outside of the TPM except that it may be included in a saved context. |
| By default, structures are assumed to be both IN and OUT and the code generation tool will generate |
| both marshaling and unmarshaling code for the structure. This default may be changed by using values |
| enclosed in angle brackets (“<>”) as part of the table title. If the angle brackets are empty, then the |
| structure is internal and neither marshaling nor unmarshaling code is generated. If the angle brackets |
| contain the letter “I” (such as in “IN” or “in” or “i”), then the structure is input and unmarshaling code will be |
| generated. If the angle brackets contain the letter “O” (such as in “OUT” or “out” or “o”), then the structure |
| is output and marshaling code will be generated. |
| EXAMPLE 1 |
| |
| Both of the following table titles would indicate a structure that is used in both input and output |
| Table xx — Definition of TPMS_A Structure |
| Table xx — Definition of TPMS_A Structure <IN/OUT> |
| |
| EXAMPLE 2 |
| |
| The following table title would indicate a structure that is used only for input |
| Table xx — Definition of TPMS_A Structure <IN> |
| |
| EXAMPLE 3 |
| |
| The following table title would indicate a structure that is used only for output |
| Table xx — Definition of TPMS_A Structure <OUT> |
| |
| 4.15 Structure Validations |
| By default, when a structure is used for input to the TPM, the code generation tool will generate the |
| unmarshaling code for that structure. Auto-generation may be suppressed by adding an “S” within the |
| angle brackets. |
| EXAMPLE |
| |
| The following table titles indicate a structure for which the auto -generation of the validation code is to be |
| suppressed. |
| Table xx — Definition of TPMT_A Structure <S> |
| Table xx — Definition of TPMT_A Structure <IN, S> |
| Table xx — Definition of TPMT_A Structure <IN/OUT, S> |
| |
| 4.16 Name Prefix Convention |
| Parameters are constants, variables, structures, unions, and structure members. Structure members are |
| given a name that is indicative of its use, with no special prefix. The other parameter types are named |
| according to their type with their name starting with “TPMx_”, where “x” is an optional character to indicate |
| the data type. |
| In some cases, additional qualifying characters will follow the underscore. These are generally used when |
| dealing with an enumerated data type. |
| TPMA_ This is an attribute structure, where bits are associated with particular attributes |
| |
| Page 14 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| Table 1 — Name Prefix Convention |
| Prefix |
| |
| Description |
| |
| _TPM_ |
| |
| an indication/signal from the TPM’s system interface |
| |
| TPM_ |
| |
| a constant or an enumerated type |
| |
| TPM2_ |
| |
| a command defined by this specification |
| |
| TPM2B_ |
| |
| a structure that is a sized buffer where the size of the buffer is contained in a 16-bit, unsigned |
| value |
| The first parameter is the size in octets of the second parameter. The second parameter may be |
| any type. |
| |
| TPMA_ |
| |
| a structure where each of the fields defines an attribute and each field is usually a single bit |
| All the attributes in an attribute structure are packed with the overall size of the structure |
| indicated in the heading of the attribute description (UINT8, UINT16, or UINT32). |
| |
| TPM_ALG_ |
| |
| an enumerated type that indicates an algorithm |
| A TPM_ALG_ is often used as a selector for a union. |
| |
| TPMI_ |
| |
| an interface type |
| The value is specified for purposes of dynamic type checking when unmarshaled. |
| |
| TPML_ |
| |
| a list length followed by the indicated number of entries of the indicated type |
| This is an array with a length field. |
| |
| TPMS_ |
| |
| a structure that is not a size buffer or a tagged buffer or a list |
| |
| TPMT_ |
| |
| a structure with the first parameter being a structure tag, indicating the type of the structure that |
| follows |
| A structure tag may be either a TPMT_ST_ or TPM_ALG_ depending on context. |
| |
| TPMU_ |
| |
| a union of structures, lists, or unions |
| If a union exists, there will normally be a companion TPMT_ that is the expression of the union |
| in a tagged structure, where the tag is the selector indicating which member of the union is |
| present. |
| |
| TPM_xx_ |
| |
| an enumeration value of a particular type |
| The value of “xx” will be indicative of the use of the enumerated type. A table of “TPM_xx” |
| constant definitions will exist to define each of the TPM_xx_ values. |
| EXAMPLE 1 |
| |
| TPM_CC_ indicates that the type is used for a commandCode. The allowed enumeration |
| values will be found in the table defining the TPM_CC constants (Table 11). |
| |
| EXAMPLE 2 |
| |
| TPM_RC_ indicates that the type is used for a responseCode. The allowed enumeration |
| values are in Table 15. |
| |
| 4.17 Data Alignment |
| The data structures in this Part 2 use octet alignment for all structures. When used in a table to indicate a |
| maximum size, the sizeof() function returns the octet-aligned size of the structure, with no padding. |
| 4.18 |
| |
| Parameter Unmarshaling Errors |
| |
| The TPM commands are defined in Part 3. The command definition included C code that details the |
| actions performed by that command. The code is written assuming that the parameters of the command |
| have been unmarshaled. |
| NOTE 1 |
| |
| An implementation is not required to process parameters in this manner or to separate the parameter |
| parsing from the command actions. This method was chosen for the specification so that the normative |
| behavior described by the detailed actions would be clear and unencumbered. |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 15 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| Unmarshaling is the process of processing the parameters in the input buffer and preparing the |
| parameters for use by the command-specific action code. No data movement need take place but it is |
| required that the TPM validate that the parameters meet the requirements of the expected data type as |
| defined in this Part 2. |
| When an error is encountered while unmarshaling a command parameter, an error response code is |
| returned and no command processing occurs. A table defining a data type may have response codes |
| embedded in the table to indicate the error returned when the input value does not match the parameters |
| of the table. |
| EXAMPLE 1 |
| |
| Table 11 has a listing of TPM command code values. The last row in the table contains |
| "#TPM_RC_COMMAND_CODE" indicating the response code that is returned if the TPM is unmarshaling |
| a value that it expects to be a TPM_CC and the input value is not in the table. |
| |
| NOTE 2 |
| |
| In the reference implementation, a parameter number is added to the response code so that the offending |
| parameter can be isolated. |
| |
| In many cases, the table contains no specific response code value and the return code will be determined |
| as defined in Table 2. |
| Table 2 — Unmarshaling Errors |
| Response code |
| |
| Usage |
| |
| TPM_RC_INSUFFICIENT |
| |
| the input buffer did not contain enough octets to allow unmarshaling of the |
| expected data type; |
| |
| TPM_RC_RESERVED |
| |
| a non-zero value was found in a reserved field of an attribute structure (TPMA_) |
| |
| TPM_RC_SIZE |
| |
| the value of a size parameter is larger or smaller than allowed |
| |
| TPM_RC_VALUE |
| |
| A parameter does not have one of its allowed values |
| |
| TPM_RC_TAG |
| |
| A parameter that should be a structure tag has a value that is not supported by |
| the TPM |
| |
| In some commands, a parameter may not be used because of various options of that command. |
| However, the unmarshaling code is required to validate that all parameters have values that are allowed |
| by the Part 2 definition of the parameter type even if that parameter is not used in the command actions. |
| |
| Page 16 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| 5 |
| |
| Part 2: Structures |
| |
| Base Types |
| |
| 5.1 |
| |
| Primitive Types |
| |
| The types listed in Table 3 are the primitive types on which all of the other types and structures are |
| based. The values in the “Type” column should be edited for the compiler and computer on which the |
| TPM is implemented. The values in the “Name” column should remain the same because these values |
| are used in the remainder of the specification. |
| NOTE |
| |
| The types are compatible with the C99 standard and should be defined in stdint.h that is provided with a |
| C99-compliant compiler; |
| |
| The parameters in the Name column should remain in the order shown. |
| Table 3 — Definition of Base Types |
| Type |
| |
| Name |
| |
| Description |
| |
| uint8_t |
| |
| UINT8 |
| |
| unsigned, 8-bit integer |
| |
| uint8_t |
| |
| BYTE |
| |
| unsigned 8-bit integer |
| |
| int8_t |
| |
| INT8 |
| |
| signed, 8-bit integer |
| |
| int |
| |
| BOOL |
| |
| a bit in an int |
| This is not used across the interface but is used in many places in the code. If |
| the type were sent on the interface, it would have to have a type with a specific |
| number of bytes. |
| |
| uint16_t |
| |
| UINT16 |
| |
| unsigned, 16-bit integer |
| |
| int16_t |
| |
| INT16 |
| |
| signed, 16-bit integer |
| |
| uint32_t |
| |
| UINT32 |
| |
| unsigned, 32-bit integer |
| |
| int32_t |
| |
| INT32 |
| |
| signed, 32-bit integer |
| |
| uint64_t |
| |
| UINT64 |
| |
| unsigned, 64-bit integer |
| |
| int64_t |
| |
| INT64 |
| |
| signed, 64-bit integer |
| |
| 5.2 |
| |
| Miscellaneous Types |
| |
| These types are defined either for compatibility with previous versions of this specification or for clarity of |
| this specification. |
| Table 4 — Definition of Types for Documentation Clarity |
| Type |
| |
| Name |
| |
| Description |
| |
| UINT32 |
| |
| TPM_ALGORITHM_ID |
| |
| this is the 1.2 compatible form of the TPM_ALG_ID |
| |
| UINT32 |
| |
| TPM_MODIFIER_INDICATOR |
| |
| UINT32 |
| |
| TPM_AUTHORIZATION_SIZE |
| |
| the authorizationSize parameter in a command |
| |
| UINT32 |
| |
| TPM_PARAMETER_SIZE |
| |
| the parameterSizeset parameter in a command |
| |
| UINT16 |
| |
| TPM_KEY_SIZE |
| |
| a key size in octets |
| |
| UINT16 |
| |
| TPM_KEY_BITS |
| |
| a key size in bits |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 17 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| 6 |
| |
| Trusted Platform Module Library |
| |
| Constants |
| |
| 6.1 |
| |
| TPM_SPEC (Specification Version Values) |
| |
| These values are readable with TPM2_GetCapability(). |
| NOTE |
| |
| This table will require editing when the specification is updated. |
| |
| Table 5 — Definition of (UINT32) TPM_SPEC Constants <> |
| Name |
| |
| Value |
| |
| Comments |
| ASCII “2.0” with null terminator |
| |
| TPM_SPEC_FAMILY |
| |
| 0x322E3000 |
| |
| TPM_SPEC_LEVEL |
| |
| 00 |
| |
| the level number for the specification |
| |
| TPM_SPEC_VERSION |
| |
| 99 |
| |
| the version number of the spec (00.99 * 100) |
| |
| TPM_SPEC_YEAR |
| |
| 2013 |
| |
| the year of the version |
| |
| TPM_SPEC_DAY_OF_YEAR |
| |
| 304 |
| |
| the day of the year (October 31, 2013) |
| |
| 6.2 |
| |
| TPM_GENERATED |
| |
| This constant value differentiates TPM-generated structures from non-TPM structures. |
| Table 6 — Definition of (UINT32) TPM_GENERATED Constants <O> |
| Name |
| |
| Value |
| |
| Comments |
| |
| TPM_GENERATED_VALUE |
| |
| 0xff544347 |
| |
| 0xFF ‘TCG’ (FF 54 43 4716) |
| |
| Page 18 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| 6.3 |
| |
| Part 2: Structures |
| |
| TPM_ALG_ID |
| |
| The TCG maintains a registry of all algorithms that have an assigned algorithm ID. That registry is the |
| definitive list of algorithms that may be supported by a TPM. |
| NOTE |
| |
| Inclusion of an algorithm does NOT indicate that the necessary claims of the algorithm are av ailable |
| under RAND terms from a TCG member. |
| |
| Table 7 is a copy of the TPM_ALG_ID constants table in the TCG registry as of the date of publication of |
| this specification. Table 7 is provided for illustrative purposes only. |
| {{Note for TCG Admin: Table 7 and the text in the paragraph above should be updated to reflect the final |
| decisions by the TCG Board of Directors about inclusion of the table and the contents of the table. The |
| desired approach is to leave the text as is and, immediately before publication of this specification for |
| TCG admin to verify that Table 7 is the same as the algorithm registry table published by the TCG.}} |
| An algorithm ID is often used like a tag to determine the type of a structure in a context-sensitive way. |
| The values for TPM_ALG_ID shall be in the range of 00 0016 – 7F FF16. Other structure tags will be in the |
| range 80 0016 – FF FF16. |
| NOTE |
| |
| In TPM 1.2, these were defined as 32-bit constants. This specification limits the future size of the |
| algorithm ID to 16 bits. The TPM_ALGORITHM_ID data type will continue to be a 32-bit number. |
| |
| An algorithm shall not be assigned a value in the range 00 C116 – 00 C616 in order to prevent any overlap |
| with the command structure tags used in TPM 1.2. |
| The implementation of some algorithms is dependent on the presence of other algorithms. When there is |
| a dependency, the algorithm that is required is listed in column labeled "D" (dependent) in Table 7. |
| EXAMPLE |
| |
| Implementation of TPM_ALG_RSASSA requires that the RSA algorithm be implemented. |
| |
| TPM_ALG_KEYEDHASH and TPM_ALG_NULL are required of all TPM implementations. |
| Table 7 — Definition of (UINT16) TPM_ALG_ID Constants <IN/OUT, S> |
| Algorithm Name |
| |
| Value |
| |
| Type |
| |
| a |
| |
| D |
| |
| Comments |
| |
| TPM_ALG_ERROR |
| |
| 0x0000 |
| |
| should not occur |
| |
| TPM_ALG_FIRST |
| |
| 0x0001 |
| |
| TPM_ALG_RSA |
| |
| 0x0001 |
| |
| AO |
| |
| the RSA algorithm |
| |
| TPM_ALG_SHA |
| |
| 0x0004 |
| |
| H |
| |
| the SHA1 algorithm |
| |
| TPM_ALG_SHA1 |
| |
| 0x0004 |
| |
| H |
| |
| redefinition for documentation consistency |
| OID 30 21 30 09 06 05 2B 0E 03 02 1A 05 00 04 14 16 |
| |
| TPM_ALG_HMAC |
| |
| 0x0005 |
| |
| HX |
| |
| the RFC 2104 Hash Message Authentication Code |
| (HMAC) algorithm |
| |
| TPM_ALG_AES |
| |
| 0x0006 |
| |
| S |
| |
| the AES algorithm with a key size of 128 bits for TPM |
| 1.2 |
| the AES algorithm with multiple sizes of key for TPM |
| 2.0 |
| |
| TPM_ALG_MGF1 |
| |
| 0x0007 |
| |
| HM |
| |
| the mask-generation function defined in IEEE Std |
| 1363-2000 |
| |
| TPM_ALG_KEYEDHASH |
| |
| 0x0008 |
| |
| HEXO |
| |
| an encryption or signing algorithm using a keyed hash, |
| defined by TCG in the TPM 2.0 specification |
| may also refer to a data object that is neither signing |
| nor encrypting |
| |
| TPM_ALG_XOR |
| |
| 0x000A |
| |
| HS |
| |
| marker value |
| |
| the XOR obfuscation algorithm |
| NOTE |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| The implementation of XOR obfuscation in TPM |
| 2.0 is not the same as the XOR encryption |
| method in TPM 1.2. |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 19 |
| October 31, 2013 |
| |
| Part 2: Structures |
| Algorithm Name |
| |
| Trusted Platform Module Library |
| a |
| |
| Value |
| |
| Type |
| |
| TPM_ALG_SHA256 |
| |
| 0x000B |
| |
| H |
| |
| D |
| |
| Comments |
| the SHA 256 algorithm |
| OID 30 31 30 0d 06 09 60 86 48 01 65 03 04 02 01 05 |
| 00 04 2016 |
| |
| TPM_ALG_SHA384 |
| |
| 0x000C |
| |
| H |
| |
| the SHA 384 algorithm |
| OID 30 41 30 0d 06 09 60 86 48 01 65 03 04 02 02 05 |
| 00 04 3016 |
| |
| TPM_ALG_SHA512 |
| |
| 0x000D |
| |
| H |
| |
| the SHA 512 algorithm |
| OID 30 51 30 0d 06 09 60 86 48 01 65 03 04 02 03 05 |
| 00 04 4016 |
| |
| TPM_ALG_NULL |
| |
| 0x0010 |
| |
| TPM_ALG_SM3_256 |
| |
| 0x0012 |
| |
| H |
| |
| hash algorithm standardized by OSCCA |
| Block size is 512 bits. |
| Output size is 256 bits. |
| |
| TPM_ALG_SM4 |
| |
| 0x0013 |
| |
| S |
| |
| symmetric algorithm standardized by OSCCA |
| Key and block size are 128 bits. |
| |
| TPM_ALG_RSASSA |
| |
| 0x0014 |
| |
| AX |
| |
| RSA a signature algorithm according to PKCS#1v2.1, 8.2 |
| |
| TPM_ALG_RSAES |
| |
| 0x0015 |
| |
| AE |
| |
| RSA a padding algorithm according to PKCS#1v2.1, 7.2 |
| |
| TPM_ALG_RSAPSS |
| |
| 0x0016 |
| |
| AX |
| |
| RSA signature algorithm (RSSASSA-PSS) according to |
| PKCS#1v2.1, 8.1 |
| |
| TPM_ALG_OAEP |
| |
| 0x0017 |
| |
| AE |
| |
| RSA padding algorithm |
| PKCS#1v2.1, 7.1 |
| |
| TPM_ALG_ECDSA |
| |
| 0x0018 |
| |
| AX |
| |
| ECC signature algorithm using elliptic curve cryptography |
| (ECC) |
| |
| TPM_ALG_ECDH |
| |
| 0x0019 |
| |
| AM |
| |
| ECC secret sharing using ECC from SP800-56A |
| Based on context, this can be either One-Pass DiffieHellman, C(1, 1, ECC CDH) defined in 6.2.2.2 or Full |
| Unified Model C(2, 2, ECC CDH) defined in 6.1.1.2 |
| |
| TPM_ALG_ECDAA |
| |
| 0x001A |
| |
| AX |
| |
| ECC elliptic-curve based, anonymous signing scheme |
| |
| TPM_ALG_SM2 |
| |
| 0x001B |
| |
| AXE |
| |
| Null algorithm |
| |
| (RSAES_OAEP) |
| |
| according |
| |
| to |
| |
| ECC depending on context, either an elliptic-curve based, |
| signature algorithm or a key exchange protocol |
| NOTE |
| |
| This would be one of the algorithms specified in |
| CM/T 0002 – 2012. |
| |
| TPM_ALG_ECSCHNORR |
| |
| 0x001C |
| |
| AX |
| |
| ECC elliptic-curve-based Schnorr signature |
| |
| TPM_ALG_ECMQV |
| |
| 0x001D |
| |
| AE |
| |
| ECC two-phase elliptic-curve key exchange -- C(2, 2, ECC |
| MQV) from SP800-56A |
| |
| TPM_ALG_KDF1_SP800_56a |
| |
| 0x0020 |
| |
| HM |
| |
| ECC key derivation alternative #1 from SP800-56A |
| |
| TPM_ALG_KDF2 |
| |
| 0x0021 |
| |
| HM |
| |
| key derivation function from IEEE Std 1363a-2004 |
| |
| TPM_ALG_KDF1_SP800_108 |
| |
| 0x0022 |
| |
| HM |
| |
| a key derivation method according to SP 800-108, "5.1 |
| KDF in Counter Mode” |
| |
| TPM_ALG_ECC |
| |
| 0x0023 |
| |
| AO |
| |
| prime field ECC |
| |
| TPM_ALG_SYMCIPHER |
| |
| 0x0025 |
| |
| O |
| |
| TPM_ALG_CTR |
| |
| 0x0040 |
| |
| SE |
| |
| Counter mode – if implemented, all symmetric block |
| ciphers (S type) implemented shall be capable of using |
| this mode. |
| |
| TPM_ALG_OFB |
| |
| 0x0041 |
| |
| SE |
| |
| Output Feedback mode – if implemented, all |
| symmetric block ciphers (S type) implemented shall be |
| capable of using this mode. |
| |
| TPM_ALG_CBC |
| |
| 0x0042 |
| |
| SE |
| |
| Cipher Block Chaining mode – if implemented, all |
| symmetric block ciphers (S type) implemented shall be |
| capable of using this mode. |
| |
| Page 20 |
| October 31, 2013 |
| |
| the object type for a symmetric block cipher |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| a |
| |
| Algorithm Name |
| |
| Value |
| |
| Type |
| |
| TPM_ALG_CFB |
| |
| 0x0043 |
| |
| SE |
| |
| D |
| |
| Comments |
| Cipher Feedback mode – if implemented, all |
| symmetric block ciphers (S type) implemented shall be |
| capable of using this mode. |
| |
| TPM_ALG_ECB |
| |
| 0x0044 |
| |
| SE |
| |
| Electronic Codebook mode – if implemented, all |
| symmetric block ciphers (S type) implemented shall be |
| capable of using this mode. |
| NOTE |
| |
| This mode is not recommended for uses unless |
| the key is frequently rotated such as in video |
| codecs. |
| |
| TPM_ALG_LAST |
| |
| 0x0044 |
| |
| marker value |
| |
| reserved |
| |
| 0x00C1 |
| |
| 0x00C1 – 0x00C6 are reserved |
| |
| reserved |
| |
| 0x00C2 |
| |
| reserved |
| |
| 0x00C3 |
| |
| reserved |
| |
| 0x00C4 |
| |
| reserved |
| |
| 0x00C5 |
| |
| reserved |
| |
| 0x00C6 |
| |
| NOTE a Column Indicates the algorithm type and use of the algorithm inside of the TPM. The values are: |
| A – asymmetric algorithm with a public and private key |
| S – symmetric algorithm with only a private key |
| H – hash algorithm that compresses input data to a digest value |
| X – signing algorithm |
| E – an encryption algorithm |
| M – a method such as a mask generation function |
| O – an object type |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 21 |
| October 31, 2013 |
| |
| Part 2: Structures |
| 6.4 |
| |
| Trusted Platform Module Library |
| |
| TPM_ECC_CURVE |
| |
| The TCG maintains a registry of all curves that have an assigned curve identifier. That registry is the |
| definitive list of curves that may be supported by a TPM. |
| Table 8 is a copy of the TPM_ECC_CURVE constants table in the TCG registry as of the date of |
| publication of this specification. Table 8 is provided for illustrative purposes only. |
| {{Note for TCG Admin: Table 8 and the text in the paragraph above should be updated to reflect the final |
| decisions by the TCG Board of Directors about inclusion of the table and the contents of the table. The |
| desired approach is to leave the text as is and, immediately before publication of this specification for |
| TCG admin to verify that Table 8 is the same as the curve registry table published by the TCG.}} |
| Table 8 — Definition of (UINT16) {ECC} TPM_ECC_CURVE Constants <IN/OUT, S> |
| Name |
| |
| Value |
| |
| Comments |
| |
| TPM_ECC_NONE |
| |
| 0x0000 |
| |
| TPM_ECC_NIST_P192 |
| |
| 0x0001 |
| |
| TPM_ECC_NIST_P224 |
| |
| 0x0002 |
| |
| TPM_ECC_NIST_P256 |
| |
| 0x0003 |
| |
| TPM_ECC_NIST_P384 |
| |
| 0x0004 |
| |
| TPM_ECC_NIST_P521 |
| |
| 0x0005 |
| |
| TPM_ECC_BN_P256 |
| |
| 0x0010 |
| |
| curve to support ECDAA |
| |
| TPM_ECC_BN_P638 |
| |
| 0x0011 |
| |
| curve to support ECDAA |
| |
| TPM_ECC_SM2_P256 |
| |
| 0x0020 |
| |
| #TPM_RC_CURVE |
| |
| 6.5 |
| 6.5.1 |
| |
| TPM_CC (Command Codes) |
| Format |
| |
| A command is a 32-bit structure with fields assigned as shown in Figure 1. |
| 3 3 2 2 |
| 1 0 9 8 |
| |
| Res V |
| |
| 1 1 |
| 6 5 |
| |
| Reserved |
| |
| 0 |
| 0 |
| |
| Command Index |
| |
| Figure 1 — Command Format |
| Table 9 — TPM Command Format Fields Description |
| Bit |
| 15:0 |
| |
| Name |
| |
| Definition |
| |
| Command Index |
| |
| the index of the command |
| |
| 28:16 Reserved |
| 29 |
| |
| V |
| |
| 31:30 Res |
| |
| Page 22 |
| October 31, 2013 |
| |
| shall be zero |
| SET(1): the command is vendor specific |
| CLEAR(0): the command is not vendor specific |
| shall be zero |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| 6.5.2 |
| |
| Part 2: Structures |
| |
| Description |
| |
| Table 10 provides the legend for the interpretation of the column data in Table 11. |
| Table 10 — Legend for Command Code Tables |
| Column |
| |
| Allowed |
| Values |
| |
| Comments |
| |
| Name |
| |
| Command |
| Code Name |
| |
| Name of the command |
| |
| Command Code |
| |
| Numeric value |
| |
| the numeric value for the commandCode |
| |
| NV Write |
| |
| blank, Y, O |
| |
| indicates whether the command may cause an NV write operation |
| If this column contains a “Y,” then successful completion of the |
| command is expected to cause modification of the NV memory |
| because of the command actions. |
| If the column contains an “O,” then the command may cause a |
| modification to NV associated with an orderly shutdown. That is, the |
| command may modify the orderly save state of NV, in which case, an |
| NV write will be necessary. |
| NOTE 1 |
| |
| Any command may be delayed in order for the TPM to complete |
| NV actions due to a previous command or because of an |
| asynchronous update of Clock. |
| |
| NOTE 2 |
| |
| Any command with an authorization value may cause an NV write |
| on an authorization failure but the command does not complete |
| successfully. |
| |
| If the entry is blank, then writing to NV is not allowed in the command |
| actions. |
| Physical Presence |
| |
| blank, Y |
| |
| indicates whether the platformAuth for this command may require |
| confirmation through a physical presence indication |
| |
| Encrypted |
| |
| blank, 2, 4 |
| |
| A numeric value that indicates the number of octets in the size field of |
| the first parameter of a command |
| Blank indicates that no size field is present and no parameter |
| encryption is allowed. |
| |
| Encrypt |
| |
| blank, 2, 4 |
| |
| A numeric value that indicates the number of octets in the size field of |
| the first parameter of a response |
| Blank indicates that no size field is present and no parameter |
| encryption is allowed. |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 23 |
| October 31, 2013 |
| |
| Part 2: Structures |
| 6.5.3 |
| |
| Trusted Platform Module Library |
| |
| TPM_CC Listing |
| |
| Table 11 lists the command codes and their attributes. The only normative column in this table is the |
| column indicating the command code assigned to a specific command (the "Command Code" column). |
| For all other columns, the command and response tables in Part 3 are definitive. |
| |
| Encrypt |
| |
| Encrypted |
| |
| Physical Presence |
| |
| NV Write |
| |
| Table 11 — Definition of (UINT32) TPM_CC Constants (Numeric Order) <IN/OUT, S> |
| |
| Name |
| |
| Command |
| Code |
| |
| TPM_CC_FIRST |
| |
| 0x0000011F |
| |
| Compile variable. May decrease |
| based on implementation. |
| |
| TPM_CC_PP_FIRST |
| |
| 0x0000011F |
| |
| Compile variable. Would decrease |
| if new PP commands are added |
| |
| TPM_CC_NV_UndefineSpaceSpecial |
| |
| 0x0000011F |
| |
| Y |
| |
| Y |
| |
| TPM_CC_EvictControl |
| |
| 0x00000120 |
| |
| Y |
| |
| Y |
| |
| TPM_CC_HierarchyControl |
| |
| 0x00000121 |
| |
| Y |
| |
| Y |
| |
| TPM_CC_NV_UndefineSpace |
| |
| 0x00000122 |
| |
| Y |
| |
| Y |
| |
| TPM_CC_ChangeEPS |
| |
| 0x00000124 |
| |
| Y |
| |
| Y |
| |
| TPM_CC_ChangePPS |
| |
| 0x00000125 |
| |
| Y |
| |
| Y |
| |
| TPM_CC_Clear |
| |
| 0x00000126 |
| |
| Y |
| |
| Y |
| |
| TPM_CC_ClearControl |
| |
| 0x00000127 |
| |
| Y |
| |
| Y |
| |
| TPM_CC_ClockSet |
| |
| 0x00000128 |
| |
| Y |
| |
| Y |
| |
| TPM_CC_HierarchyChangeAuth |
| |
| 0x00000129 |
| |
| Y |
| |
| Y |
| |
| 2 |
| |
| TPM_CC_NV_DefineSpace |
| |
| 0x0000012A |
| |
| Y |
| |
| Y |
| |
| 2 |
| |
| TPM_CC_PCR_Allocate |
| |
| 0x0000012B |
| |
| Y |
| |
| Y |
| |
| TPM_CC_PCR_SetAuthPolicy |
| |
| 0x0000012C |
| |
| Y |
| |
| Y |
| |
| TPM_CC_PP_Commands |
| |
| 0x0000012D |
| |
| Y |
| |
| Y |
| |
| TPM_CC_SetPrimaryPolicy |
| |
| 0x0000012E |
| |
| Y |
| |
| Y |
| |
| 2 |
| |
| TPM_CC_FieldUpgradeStart |
| |
| 0x0000012F |
| |
| O |
| |
| Y |
| |
| 2 |
| |
| TPM_CC_ClockRateAdjust |
| |
| 0x00000130 |
| |
| O |
| |
| Y |
| |
| TPM_CC_CreatePrimary |
| |
| 0x00000131 |
| |
| TPM_CC_NV_GlobalWriteLock |
| |
| 0x00000132 |
| |
| TPM_CC_PP_LAST |
| |
| 0x00000132 |
| |
| TPM_CC_GetCommandAuditDigest |
| |
| 0x00000133 |
| |
| Y |
| |
| TPM_CC_NV_Increment |
| |
| 0x00000134 |
| |
| Y |
| |
| Page 24 |
| October 31, 2013 |
| |
| Y |
| O |
| |
| Comments |
| |
| 2 |
| |
| 2 |
| |
| 2 |
| |
| Y |
| Compile variable |
| 2 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Command |
| Code |
| |
| TPM_CC_NV_SetBits |
| |
| 0x00000135 |
| |
| Y |
| |
| TPM_CC_NV_Extend |
| |
| 0x00000136 |
| |
| Y |
| |
| TPM_CC_NV_Write |
| |
| 0x00000137 |
| |
| Y |
| |
| TPM_CC_NV_WriteLock |
| |
| 0x00000138 |
| |
| Y |
| |
| TPM_CC_DictionaryAttackLockReset |
| |
| 0x00000139 |
| |
| O |
| |
| TPM_CC_DictionaryAttackParameters |
| |
| 0x0000013A |
| |
| Y |
| |
| TPM_CC_NV_ChangeAuth |
| |
| 0x0000013B |
| |
| Y |
| |
| 2 |
| |
| TPM_CC_PCR_Event |
| |
| 0x0000013C |
| |
| O |
| |
| 2 |
| |
| TPM_CC_PCR_Reset |
| |
| 0x0000013D |
| |
| O |
| |
| TPM_CC_SequenceComplete |
| |
| 0x0000013E |
| |
| O |
| |
| TPM_CC_SetAlgorithmSet |
| |
| 0x0000013F |
| |
| Y |
| |
| TPM_CC_SetCommandCodeAuditStatus |
| |
| 0x00000140 |
| |
| Y |
| |
| TPM_CC_FieldUpgradeData |
| |
| 0x00000141 |
| |
| O |
| |
| TPM_CC_IncrementalSelfTest |
| |
| 0x00000142 |
| |
| O |
| |
| TPM_CC_SelfTest |
| |
| 0x00000143 |
| |
| O |
| |
| TPM_CC_Startup |
| |
| 0x00000144 |
| |
| Y |
| |
| TPM_CC_Shutdown |
| |
| 0x00000145 |
| |
| Y |
| |
| TPM_CC_StirRandom |
| |
| 0x00000146 |
| |
| Y |
| |
| TPM_CC_ActivateCredential |
| |
| 0x00000147 |
| |
| TPM_CC_Certify |
| |
| 0x00000148 |
| |
| TPM_CC_PolicyNV |
| |
| 0x00000149 |
| |
| TPM_CC_CertifyCreation |
| |
| 0x0000014A |
| |
| TPM_CC_Duplicate |
| |
| 0x0000014B |
| |
| TPM_CC_GetTime |
| |
| 0x0000014C |
| |
| O |
| |
| 2 |
| |
| TPM_CC_GetSessionAuditDigest |
| |
| 0x0000014D |
| |
| O |
| |
| 2 |
| |
| TPM_CC_NV_Read |
| |
| 0x0000014E |
| |
| TPM_CC_NV_ReadLock |
| |
| 0x0000014F |
| |
| TPM_CC_ObjectChangeAuth |
| |
| 0x00000150 |
| |
| 2 |
| |
| TPM_CC_PolicySecret |
| |
| 0x00000151 |
| |
| 2 |
| |
| TPM_CC_Rewrap |
| |
| 0x00000152 |
| |
| 2 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Encrypt |
| |
| Name |
| |
| NV Write |
| |
| Encrypted |
| |
| Part 2: Structures |
| |
| Physical Presence |
| |
| Trusted Platform Module Library |
| |
| 2 |
| |
| PCR |
| PCR |
| |
| 2 |
| |
| 2 |
| |
| 2 |
| |
| 2 |
| 2 |
| |
| O |
| |
| 2 |
| |
| 2 |
| |
| 2 |
| |
| 2 |
| O |
| |
| Comments |
| |
| Policy |
| |
| 2 |
| |
| 2 |
| |
| 2 |
| |
| 2 |
| |
| 2 |
| O |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| 2 |
| Policy |
| 2 |
| |
| Page 25 |
| October 31, 2013 |
| |
| Trusted Platform Module Library |
| |
| Command |
| Code |
| |
| Encrypt |
| |
| TPM_CC_Create |
| |
| 0x00000153 |
| |
| 2 |
| |
| 2 |
| |
| TPM_CC_ECDH_ZGen |
| |
| 0x00000154 |
| |
| 2 |
| |
| 2 |
| |
| TPM_CC_HMAC |
| |
| 0x00000155 |
| |
| 2 |
| |
| 2 |
| |
| TPM_CC_Import |
| |
| 0x00000156 |
| |
| 2 |
| |
| 2 |
| |
| TPM_CC_Load |
| |
| 0x00000157 |
| |
| 2 |
| |
| 2 |
| |
| TPM_CC_Quote |
| |
| 0x00000158 |
| |
| 2 |
| |
| 2 |
| |
| TPM_CC_RSA_Decrypt |
| |
| 0x00000159 |
| |
| TPM_CC_HMAC_Start |
| |
| 0x0000015B |
| |
| 2 |
| |
| TPM_CC_SequenceUpdate |
| |
| 0x0000015C |
| |
| 2 |
| |
| TPM_CC_Sign |
| |
| 0x0000015D |
| |
| 2 |
| |
| TPM_CC_Unseal |
| |
| 0x0000015E |
| |
| TPM_CC_PolicySigned |
| |
| 0x00000160 |
| |
| TPM_CC_ContextLoad |
| |
| 0x00000161 |
| |
| O |
| |
| Context |
| |
| TPM_CC_ContextSave |
| |
| 0x00000162 |
| |
| O |
| |
| Context |
| |
| TPM_CC_ECDH_KeyGen |
| |
| 0x00000163 |
| |
| 2 |
| |
| TPM_CC_EncryptDecrypt |
| |
| 0x00000164 |
| |
| 2 |
| |
| TPM_CC_FlushContext |
| |
| 0x00000165 |
| |
| TPM_CC_LoadExternal |
| |
| 0x00000167 |
| |
| 2 |
| |
| 2 |
| |
| TPM_CC_MakeCredential |
| |
| 0x00000168 |
| |
| 2 |
| |
| 2 |
| |
| TPM_CC_NV_ReadPublic |
| |
| 0x00000169 |
| |
| TPM_CC_PolicyAuthorize |
| |
| 0x0000016A |
| |
| TPM_CC_PolicyAuthValue |
| |
| 0x0000016B |
| |
| Policy |
| |
| TPM_CC_PolicyCommandCode |
| |
| 0x0000016C |
| |
| Policy |
| |
| TPM_CC_PolicyCounterTimer |
| |
| 0x0000016D |
| |
| 2 |
| |
| Policy |
| |
| TPM_CC_PolicyCpHash |
| |
| 0x0000016E |
| |
| 2 |
| |
| Policy |
| |
| TPM_CC_PolicyLocality |
| |
| 0x0000016F |
| |
| TPM_CC_PolicyNameHash |
| |
| 0x00000170 |
| |
| TPM_CC_PolicyOR |
| |
| 0x00000171 |
| |
| TPM_CC_PolicyTicket |
| |
| 0x00000172 |
| |
| TPM_CC_ReadPublic |
| |
| 0x00000173 |
| |
| Page 26 |
| October 31, 2013 |
| |
| NV Write |
| |
| Name |
| |
| Encrypted |
| |
| Physical Presence |
| |
| Part 2: Structures |
| |
| O |
| |
| Comments |
| |
| 2 |
| 2 |
| |
| 2 |
| 2 |
| |
| Policy |
| |
| O |
| |
| Context |
| |
| NV |
| 2 |
| |
| Policy |
| |
| Policy |
| 2 |
| |
| Policy |
| Policy |
| |
| 2 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Policy |
| 2 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Encrypt |
| |
| 2 |
| |
| NV Write |
| |
| Encrypted |
| |
| Part 2: Structures |
| |
| Physical Presence |
| |
| Trusted Platform Module Library |
| |
| 2 |
| |
| 2 |
| |
| 2 |
| |
| Name |
| |
| Command |
| Code |
| |
| TPM_CC_RSA_Encrypt |
| |
| 0x00000174 |
| |
| TPM_CC_StartAuthSession |
| |
| 0x00000176 |
| |
| TPM_CC_VerifySignature |
| |
| 0x00000177 |
| |
| TPM_CC_ECC_Parameters |
| |
| 0x00000178 |
| |
| TPM_CC_FirmwareRead |
| |
| 0x00000179 |
| |
| TPM_CC_GetCapability |
| |
| 0x0000017A |
| |
| TPM_CC_GetRandom |
| |
| 0x0000017B |
| |
| TPM_CC_GetTestResult |
| |
| 0x0000017C |
| |
| TPM_CC_Hash |
| |
| 0x0000017D |
| |
| TPM_CC_PCR_Read |
| |
| 0x0000017E |
| |
| PCR |
| |
| TPM_CC_PolicyPCR |
| |
| 0x0000017F |
| |
| Policy |
| |
| TPM_CC_PolicyRestart |
| |
| 0x00000180 |
| |
| TPM_CC_ReadClock |
| |
| 0x00000181 |
| |
| TPM_CC_PCR_Extend |
| |
| 0x00000182 |
| |
| O |
| |
| 2 |
| |
| TPM_CC_PCR_SetAuthValue |
| |
| 0x00000183 |
| |
| N |
| |
| 2 |
| |
| TPM_CC_NV_Certify |
| |
| 0x00000184 |
| |
| O |
| |
| TPM_CC_EventSequenceComplete |
| |
| 0x00000185 |
| |
| O |
| |
| TPM_CC_HashSequenceStart |
| |
| 0x00000186 |
| |
| TPM_CC_PolicyPhysicalPresence |
| |
| 0x00000187 |
| |
| Policy |
| |
| TPM_CC_PolicyDuplicationSelect |
| |
| 0x00000188 |
| |
| Policy |
| |
| TPM_CC_PolicyGetDigest |
| |
| 0x00000189 |
| |
| Policy |
| |
| TPM_CC_TestParms |
| |
| 0x0000018A |
| |
| TPM_CC_Commit |
| |
| 0x0000018B |
| |
| TPM_CC_PolicyPassword |
| |
| 0x0000018C |
| |
| TPM_CC_ZGen_2Phase |
| |
| 0x0000018D |
| |
| TPM_CC_EC_Ephemeral |
| |
| 0x0000018E |
| |
| TPM_CC_PolicyNvWritten |
| |
| 0x0000018F |
| |
| Policy |
| |
| TPM_CC_LAST |
| |
| 0x0000018F |
| |
| Compile variable. May increase |
| based on implementation. |
| |
| O |
| |
| Comments |
| |
| 2 |
| |
| 2 |
| |
| 2 |
| |
| O |
| |
| 2 |
| |
| 2 |
| |
| 2 |
| Policy |
| |
| 2 |
| |
| 2 |
| |
| NOTE |
| |
| #TPM_RC_COMMAND_CODE |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| This is not a FMT1 code |
| and a parameter indicator |
| value may not be added to |
| |
| Page 27 |
| October 31, 2013 |
| |
| Encrypt |
| |
| Encrypted |
| |
| Command |
| Code |
| |
| Name |
| |
| Physical Presence |
| |
| Trusted Platform Module Library |
| |
| NV Write |
| |
| Part 2: Structures |
| |
| Comments |
| this value. |
| |
| 6.6 |
| |
| TPM_RC (Response Codes) |
| |
| 6.6.1 |
| |
| Description |
| |
| Each return from the TPM has a 32-bit response code. The TPM will always set the upper 20 bits (31:12) |
| of the response code to 0 00 0016 and the low-order 12 bits (11:00) will contain the response code. |
| When a command succeeds, the TPM shall return TPM_RC_SUCCESS (0 0016) and will update any |
| authorization-session nonce associated with the command. |
| When a command fails to complete for any reason, the TPM shall return |
| |
| |
| a TPM_ST (UINT16) with a value of TPM_TAG_RSP_COMMAND or TPM_ST_NO_SESSIONS, |
| followed by |
| |
| |
| |
| a UINT32 (responseSize) with a value of 10, followed by |
| |
| |
| |
| a UINT32 containing a response code with a value other than TPM_RC_SUCCESS. |
| |
| Commands defined in this specification will use a tag of either TPM_ST_NO_SESSIONS or |
| TPM_ST_SESSIONS. Error responses will use a tag value of TPM_ST_NO_SESSIONS and the |
| response code will be as defined in this specification. Commands that use tags defined in the TPM 1.2 |
| specification will use TPM_TAG_RSP_COMMAND in an error and a response code defined in TPM 1.2. |
| If the tag of the command is not a recognized command tag, the TPM error response will differ depending |
| on TPM 1.2 compatibility. If the TPM supports 1.2 compatibility, the TPM shall return a tag of |
| TPM_TAG_RSP_COMMAND and an appropriate TPM 1.2 response code (TPM_BADTAG = |
| 00 00 00 1E16). If the TPM does not have compatibility with TPM 1.2, the TPM shall return |
| TPM_ST_NO_SESSION and a response code of TPM_RC_TAG. |
| When a command fails, the TPM shall not update the authorization-session nonces associated with the |
| command and will not close the authorization sessions used by the command. Audit digests will not be |
| updated on an error. Unless noted in the command actions, a command that returns an error shall leave |
| the state of the TPM as if the command had not been attempted. The exception to this principle is that a |
| failure due to an authorization failure may update the dictionary-attack protection values. |
| |
| Page 28 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| 6.6.2 |
| |
| Part 2: Structures |
| |
| Response Code Formats |
| |
| The response codes for this specification are defined such that there is no overlap between the response |
| codes used for this specification and those assigned in previous TPM specifications. |
| The formats defined in this clause only apply when the tag for the response is TPM_ST_NO_SESSIONS. |
| The response codes use two different format groups. One group contains the TPM 1.2 compatible |
| response codes and the response codes for this specification that are not related to command |
| parameters. The second group contains the errors that may be associated with a command parameter, |
| handle, or session. |
| Figure 2 shows the format for the response codes when bit 7 is zero. |
| 1 |
| 1 |
| |
| 1 |
| 0 |
| |
| 0 |
| 9 |
| |
| 0 |
| 8 |
| |
| 0 |
| 7 |
| |
| S |
| |
| bit |
| |
| T |
| |
| r |
| |
| V |
| |
| 0 |
| 6 |
| |
| 0 |
| 5 |
| |
| F |
| |
| 0 |
| 4 |
| |
| 0 |
| 3 |
| |
| 0 |
| 2 |
| |
| 0 |
| 1 |
| |
| 0 |
| 0 |
| |
| E |
| |
| Figure 2 — Format-Zero Response Codes |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 29 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| The field definitions are: |
| Table 12 — Format-Zero Response Codes |
| Bit |
| |
| Name |
| |
| Definition |
| |
| 06:00 |
| |
| E |
| |
| the error number |
| The interpretation of this field is dependent on the setting of the G and S fields. |
| |
| 07 |
| |
| F |
| |
| format selector |
| CLEAR when the format is as defined in this Table 12 or when the response code is |
| TPM_RC_BAD_TAG. |
| |
| 08 |
| |
| V |
| |
| version |
| SET (1): The error number is defined in this specification and is returned when the response tag |
| is TPM_ST_NO_SESSIONS. |
| CLEAR (0): The error number is defined by a previous TPM specification. The error number is |
| returned when the response tag is TPM_TAG_RSP_COMMAND. |
| NOTE |
| |
| 09 |
| |
| In any error number returned by a TPM, the F (bit 7) and V (bit 8) attributes shall be CLEAR |
| when the response tag is TPM_TAG_RSP_COMMAND value used in TPM 1.2. |
| |
| Reserved shall be zero. |
| |
| 10 |
| |
| T |
| |
| TCG/Vendor indicator |
| SET (1): The response code is defined by the TPM vendor. |
| CLEAR (0): The response code is defined by the TCG (a value in this specification). |
| NOTE |
| |
| 11 |
| |
| S |
| |
| This attribute does not indicate a vendor-specific code unless the F attribute (bit[07]) is CLEAR. |
| |
| severity |
| SET (1): The response code is a warning and the command was not necessarily in error. This |
| command indicates that the TPM is busy or that the resources of the TPM have to be adjusted in |
| order to allow the command to execute. |
| CLEAR (0): The response code indicates that the command had an error that would prevent it |
| from running. |
| |
| When the format bit (bit 7) is SET, then the error occurred during the unmarshaling or validation of an |
| input parameter to the TPM. Figure 3 shows the format for the response codes when bit 7 is one. |
| bit |
| |
| 1 |
| 1 |
| |
| 1 |
| 0 |
| |
| 0 |
| 9 |
| |
| N |
| |
| 0 |
| 8 |
| |
| 0 |
| 7 |
| |
| 0 |
| 6 |
| |
| 1 |
| |
| 0 |
| 5 |
| |
| P |
| |
| 0 |
| 4 |
| |
| 0 |
| 3 |
| |
| 0 |
| 2 |
| |
| 0 |
| 1 |
| |
| 0 |
| 0 |
| |
| E |
| |
| Figure 3 — Format-One Response Codes |
| There are 64 errors with this format. The errors can be associated with a parameter, handle, or session. |
| The error number for this format is in bits[05:00]. When an error is associated with a parameter, 0 40 16 is |
| added and N is set to the parameter number. |
| For an error associated with a handle, a parameter number (1 to 7) is added to the N field. For an error |
| associated with a session, a value of 8 plus the session number (1 to 7) is added to the N field. In other |
| words, if P is clear, then a value of 0 to 7 in the N field will indicate a handle error, and a value of 8 – 15 |
| will indicate a session error. |
| NOTE |
| |
| If an implementation is not able to designate the handle, session, or parameter in error, then P and N will |
| be zero. |
| |
| Page 30 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| The field definitions are: |
| Table 13 — Format-One Response Codes |
| Bit |
| |
| Name Definition |
| |
| 05:00 |
| |
| E |
| |
| the error number |
| The error number is independent of the other settings. |
| |
| 06 |
| |
| P |
| |
| SET (1): The error is associated with a parameter. |
| CLEAR (0): The error is associated with a handle or a session. |
| |
| 07 |
| |
| F |
| |
| the response code format selector |
| This field shall be SET for the format in this table. |
| |
| 11:08 |
| |
| N |
| |
| the number of the handle, session, or parameter in error |
| If P is SET, then this field is the parameter in error. If P is CLEAR, then this field indicates the |
| handle or session in error. Handles use values of N between 0000 2 and 01112. Sessions use |
| values between 10002 and 11112. |
| |
| The groupings of response codes are determined by bits 08, 07, and 06 of the response code as |
| summarized in Table 14. |
| Table 14 — Response Code Groupings |
| Bit |
| 0 |
| 8 |
| |
| 0 |
| 7 |
| |
| 0 |
| 6 |
| |
| Definition |
| |
| 0 |
| |
| 0 |
| |
| x |
| |
| a response code defined by TPM 1.2 |
| NOTE |
| |
| An “x” in a column indicates that this may be either 0 or 1 and not affect the grouping of the response |
| code. |
| |
| 1 |
| |
| 0 |
| |
| x |
| |
| a response code defined by this specification with no handle, session, or parameter number modifier |
| |
| x |
| |
| 1 |
| |
| 0 |
| |
| a response code defined by this specification with either a handle or session number modifier |
| |
| x |
| |
| 1 |
| |
| 1 |
| |
| a response code defined by this specification with a parameter number modifier |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 31 |
| October 31, 2013 |
| |
| Part 2: Structures |
| 6.6.3 |
| |
| Trusted Platform Module Library |
| |
| TPM_RC Values |
| |
| In general, response codes defined in Part 2 will be unmarshaling errors and will have the F (format) bit |
| SET. Codes that are unique to Part 3 will have the F bit CLEAR but the V (version) attribute will be SET to |
| indicate that it is a TPM 2.0 response code. |
| NOTE |
| |
| The constant RC_VER1 is used to indicate that the V attribute is SET and the constant RC_ FMT1 is used |
| to indicate that the F attribute is SET and that the return code is variable based on handle, session, and |
| parameter modifiers. |
| |
| Table 15 — Definition of (UINT32) TPM_RC Constants (Actions) <OUT> |
| Name |
| |
| Value |
| |
| Description |
| |
| TPM_RC_SUCCESS |
| |
| 0x000 |
| |
| TPM_RC_BAD_TAG |
| |
| 0x01E |
| |
| defined for compatibility with TPM 1.2 |
| |
| RC_VER1 |
| |
| 0x100 |
| |
| set for all format 0 response codes |
| |
| TPM_RC_INITIALIZE |
| |
| RC_VER1 + 0x000 |
| |
| TPM not initialized |
| commands not being accepted because of a TPM |
| failure |
| |
| TPM_RC_FAILURE |
| |
| RC_VER1 + 0x001 |
| |
| NOTE |
| |
| TPM_RC_SEQUENCE |
| |
| RC_VER1 + 0x003 |
| |
| improper use of a sequence handle |
| |
| TPM_RC_PRIVATE |
| |
| RC_VER1 + 0x00B |
| |
| TPM_RC_HMAC |
| |
| RC_VER1 + 0x019 |
| |
| TPM_RC_DISABLED |
| |
| RC_VER1 + 0x020 |
| |
| TPM_RC_EXCLUSIVE |
| |
| RC_VER1 + 0x021 |
| |
| command failed because audit sequence required |
| exclusivity |
| |
| TPM_RC_AUTH_TYPE |
| |
| RC_VER1 + 0x024 |
| |
| authorization handle is not correct for command |
| |
| TPM_RC_AUTH_MISSING |
| |
| RC_VER1 + 0x025 |
| |
| command requires an authorization session for |
| handle and it is not present. |
| |
| TPM_RC_POLICY |
| |
| RC_VER1 + 0x026 |
| |
| policy Failure In Math Operation or an invalid |
| authPolicy value |
| |
| TPM_RC_PCR |
| |
| RC_VER1 + 0x027 |
| |
| PCR check fail |
| |
| TPM_RC_PCR_CHANGED |
| |
| RC_VER1 + 0x028 |
| |
| PCR have changed since checked. |
| |
| TPM_RC_UPGRADE |
| |
| RC_VER1 + 0x02D |
| |
| for |
| all |
| commands |
| other |
| than |
| TPM2_FieldUpgradeData(), this code indicates |
| that the TPM is in field upgrade mode; for |
| TPM2_FieldUpgradeData(), this code indicates |
| that the TPM is not in field upgrade mode |
| |
| TPM_RC_TOO_MANY_CONTEXTS |
| |
| RC_VER1 + 0x02E |
| |
| context ID counter is at maximum. |
| |
| TPM_RC_AUTH_UNAVAILABLE |
| |
| RC_VER1 + 0x02F |
| |
| authValue or authPolicy is not available for |
| selected entity. |
| |
| TPM_RC_REBOOT |
| |
| RC_VER1 + 0x030 |
| |
| a _TPM_Init and Startup(CLEAR) is required |
| before the TPM can resume operation. |
| |
| RC_VER1 + 0x031 |
| |
| the protection algorithms (hash and symmetric) are |
| not reasonably balanced. The digest size of the |
| hash must be larger than the key size of the |
| symmetric algorithm. |
| |
| TPM_RC_UNBALANCED |
| |
| Page 32 |
| October 31, 2013 |
| |
| This |
| may |
| be |
| returned |
| by |
| TPM2_GetTestResult() as the testResult |
| parameter. |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| Name |
| |
| Part 2: Structures |
| Value |
| |
| Description |
| |
| TPM_RC_COMMAND_SIZE |
| |
| RC_VER1 + 0x042 |
| |
| command commandSize value is inconsistent with |
| contents of the command buffer; either the size is |
| not the same as the octets loaded by the hardware |
| interface layer or the value is not large enough to |
| hold a command header |
| |
| TPM_RC_COMMAND_CODE |
| |
| RC_VER1 + 0x043 |
| |
| command code not supported |
| |
| TPM_RC_AUTHSIZE |
| |
| RC_VER1 + 0x044 |
| |
| the value of authorizationSize is out of range or the |
| number of octets in the Authorization Area is |
| greater than required |
| |
| TPM_RC_AUTH_CONTEXT |
| |
| RC_VER1 + 0x045 |
| |
| use of an authorization session with a context |
| command |
| |
| TPM_RC_NV_RANGE |
| |
| RC_VER1 + 0x046 |
| |
| NV offset+size is out of range. |
| |
| TPM_RC_NV_SIZE |
| |
| RC_VER1 + 0x047 |
| |
| Requested allocation size is larger than allowed. |
| |
| TPM_RC_NV_LOCKED |
| |
| RC_VER1 + 0x048 |
| |
| NV access locked. |
| |
| TPM_RC_NV_AUTHORIZATION |
| |
| RC_VER1 + 0x049 |
| |
| NV access authorization fails in command actions |
| (this failure does not affect lockout.action) |
| |
| TPM_RC_NV_UNINITIALIZED |
| |
| RC_VER1 + 0x04A |
| |
| an NV Index is used before being initialized or the |
| state saved by TPM2_Shutdown(STATE) could not |
| be restored |
| |
| TPM_RC_NV_SPACE |
| |
| RC_VER1 + 0x04B |
| |
| insufficient space for NV allocation |
| |
| TPM_RC_NV_DEFINED |
| |
| RC_VER1 + 0x04C |
| |
| NV Index or persistend object already defined |
| |
| TPM_RC_BAD_CONTEXT |
| |
| RC_VER1 + 0x050 |
| |
| context in TPM2_ContextLoad() is not valid |
| |
| TPM_RC_CPHASH |
| |
| RC_VER1 + 0x051 |
| |
| cpHash value already set or not correct for use |
| |
| TPM_RC_PARENT |
| |
| RC_VER1 + 0x052 |
| |
| handle for parent is not a valid parent |
| |
| TPM_RC_NEEDS_TEST |
| |
| RC_VER1 + 0x053 |
| |
| some function needs testing. |
| |
| RC_VER1 + 0x054 |
| |
| returned when an internal function cannot process |
| a request due to an unspecified problem. This |
| code is usually related to invalid parameters that |
| are not properly filtered by the input unmarshaling |
| code. |
| |
| TPM_RC_SENSITIVE |
| |
| RC_VER1 + 0x055 |
| |
| the sensitive area did not unmarshal correctly after |
| decryption – this code is used in lieu of the other |
| unmarshaling errors so that an attacker cannot |
| determine where the unmarshaling error occurred |
| |
| RC_MAX_FM0 |
| |
| RC_VER1 + 0x07F |
| |
| largest version 1 code that is not a warning |
| |
| TPM_RC_NO_RESULT |
| |
| New Subsection |
| |
| RC_FMT1 |
| |
| 0x080 |
| |
| This bit is SET in all format 1 response codes |
| The codes in this group may have a value added to |
| them to indicate the handle, session, or parameter |
| to which they apply. |
| |
| TPM_RC_ASYMMETRIC |
| |
| RC_FMT1 + 0x001 |
| |
| asymmetric algorithm not supported or not correct |
| |
| TPM_RC_ATTRIBUTES |
| |
| RC_FMT1 + 0x002 |
| |
| inconsistent attributes |
| |
| TPM_RC_HASH |
| |
| RC_FMT1 + 0x003 |
| |
| hash algrithm not supported or not appropriate |
| |
| TPM_RC_VALUE |
| |
| RC_FMT1 + 0x004 |
| |
| value is out of range or is not correct for the |
| context |
| |
| TPM_RC_HIERARCHY |
| |
| RC_FMT1 + 0x005 |
| |
| hierarchy is not enabled or is not correct for the |
| use |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 33 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| Name |
| |
| Value |
| |
| Description |
| |
| TPM_RC_KEY_SIZE |
| |
| RC_FMT1 + 0x007 |
| |
| key size is not supported |
| |
| TPM_RC_MGF |
| |
| RC_FMT1 + 0x008 |
| |
| mask generation function not supported |
| |
| TPM_RC_MODE |
| |
| RC_FMT1 + 0x009 |
| |
| mode of operation not supported |
| |
| TPM_RC_TYPE |
| |
| RC_FMT1 + 0x00A |
| |
| the type of the value is not appropriate for the use |
| |
| TPM_RC_HANDLE |
| |
| RC_FMT1 + 0x00B |
| |
| the handle is not correct for the use |
| |
| TPM_RC_KDF |
| |
| RC_FMT1 + 0x00C |
| |
| unsupported key derivation function or function not |
| appropriate for use |
| |
| TPM_RC_RANGE |
| |
| RC_FMT1 + 0x00D |
| |
| value was out of allowed range. |
| |
| TPM_RC_AUTH_FAIL |
| |
| RC_FMT1 + 0x00E |
| |
| the authorization HMAC check failed and DA |
| counter incremented |
| |
| TPM_RC_NONCE |
| |
| RC_FMT1 + 0x00F |
| |
| invalid nonce size |
| |
| TPM_RC_PP |
| |
| RC_FMT1 + 0x010 |
| |
| authorization requires assertion of PP |
| |
| TPM_RC_SCHEME |
| |
| RC_FMT1 + 0x012 |
| |
| unsupported or incompatible scheme |
| |
| TPM_RC_SIZE |
| |
| RC_FMT1 + 0x015 |
| |
| structure is the wrong size |
| |
| TPM_RC_SYMMETRIC |
| |
| RC_FMT1 + 0x016 |
| |
| unsupported symmetric algorithm or key size, or |
| not appropriate for instance |
| |
| TPM_RC_TAG |
| |
| RC_FMT1 + 0x017 |
| |
| incorrect structure tag |
| |
| TPM_RC_SELECTOR |
| |
| RC_FMT1 + 0x018 |
| |
| union selector is incorrect |
| |
| TPM_RC_INSUFFICIENT |
| |
| RC_FMT1 + 0x01A |
| |
| the TPM was unable to unmarshal a value |
| because there were not enough octets in the input |
| buffer |
| |
| TPM_RC_SIGNATURE |
| |
| RC_FMT1 + 0x01B |
| |
| the signature is not valid |
| |
| TPM_RC_KEY |
| |
| RC_FMT1 + 0x01C |
| |
| key fields are not compatible with the selected use |
| |
| TPM_RC_POLICY_FAIL |
| |
| RC_FMT1 + 0x01D |
| |
| a policy check failed |
| |
| TPM_RC_INTEGRITY |
| |
| RC_FMT1 + 0x01F |
| |
| integrity check failed |
| |
| TPM_RC_TICKET |
| |
| RC_FMT1 + 0x020 |
| |
| invalid ticket |
| |
| TPM_RC_RESERVED_BITS |
| |
| RC_FMT1 + 0x021 |
| |
| reserved bits not set to zero as required |
| |
| TPM_RC_BAD_AUTH |
| |
| RC_FMT1 + 0x022 |
| |
| authroization failure without DA implications |
| |
| TPM_RC_EXPIRED |
| |
| RC_FMT1 + 0x023 |
| |
| the policy has expired |
| |
| TPM_RC_POLICY_CC |
| |
| RC_FMT1 + 0x024 |
| |
| the commandCode in the policy is not the |
| commandCode of the command or the command |
| code in a policy command references a command |
| that is not implemented |
| |
| TPM_RC_BINDING |
| |
| RC_FMT1 + 0x025 |
| |
| public and sensitive portions of an object are not |
| cryptographically bound |
| |
| TPM_RC_CURVE |
| |
| RC_FMT1 + 0x026 |
| |
| curve not supported |
| |
| TPM_RC_ECC_POINT |
| |
| RC_FMT1 + 0x027 |
| |
| point is not on the required curve. |
| |
| New Subsection |
| RC_WARN |
| |
| 0x900 |
| |
| set for warning response codes |
| |
| TPM_RC_CONTEXT_GAP |
| |
| RC_WARN + 0x001 |
| |
| gap for context ID is too large |
| |
| TPM_RC_OBJECT_MEMORY |
| |
| RC_WARN + 0x002 |
| |
| out of memory for object contexts |
| |
| Page 34 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| Name |
| |
| Value |
| |
| Description |
| |
| TPM_RC_SESSION_MEMORY |
| |
| RC_WARN + 0x003 |
| |
| out of memory for session contexts |
| |
| TPM_RC_MEMORY |
| |
| RC_WARN + 0x004 |
| |
| out of shared object/session memory or need |
| space for internal operations |
| |
| TPM_RC_SESSION_HANDLES |
| |
| RC_WARN + 0x005 |
| |
| out of session handles – a session must be flushed |
| before a new session may be created |
| out of object handles – the handle space for |
| objects is depleted and a reboot is required |
| NOTE |
| |
| TPM_RC_LOCALITY |
| |
| TPM_RC_YIELDED |
| |
| This cannot occur |
| implementation. |
| |
| NOTE |
| |
| TPM_RC_OBJECT_HANDLES |
| |
| There is no reason why an implementation |
| would implement a design that would deplete |
| handle space. Platform specifications are |
| encouraged to forbid it. |
| |
| RC_WARN + 0x006 |
| |
| RC_WARN + 0x007 |
| |
| RC_WARN + 0x008 |
| |
| on |
| |
| the |
| |
| reference |
| |
| bad locality |
| the TPM has suspended operation on the |
| command; forward progress was made and the |
| command may be retried. |
| See Part 1, “Multi-tasking.” |
| NOTE |
| |
| This cannot occur |
| implementation. |
| |
| on |
| |
| the |
| |
| reference |
| |
| TPM_RC_CANCELED |
| |
| RC_WARN + 0x009 |
| |
| the command was canceled |
| |
| TPM_RC_TESTING |
| |
| RC_WARN + 0x00A |
| |
| TPM is performing self-tests |
| |
| TPM_RC_REFERENCE_H0 |
| |
| RC_WARN + 0x010 |
| |
| the 1 handle in the handle area references a |
| transient object or session that is not loaded |
| |
| TPM_RC_REFERENCE_H1 |
| |
| RC_WARN + 0x011 |
| |
| the 2 handle in the handle area references a |
| transient object or session that is not loaded |
| |
| TPM_RC_REFERENCE_H2 |
| |
| RC_WARN + 0x012 |
| |
| the 3 handle in the handle area references a |
| transient object or session that is not loaded |
| |
| TPM_RC_REFERENCE_H3 |
| |
| RC_WARN + 0x013 |
| |
| the 4 handle in the handle area references a |
| transient object or session that is not loaded |
| |
| TPM_RC_REFERENCE_H4 |
| |
| RC_WARN + 0x014 |
| |
| the 5 handle in the handle area references a |
| transient object or session that is not loaded |
| |
| TPM_RC_REFERENCE_H5 |
| |
| RC_WARN + 0x015 |
| |
| the 6 handle in the handle area references a |
| transient object or session that is not loaded |
| |
| TPM_RC_REFERENCE_H6 |
| |
| RC_WARN + 0x016 |
| |
| the 7 handle in the handle area references a |
| transient object or session that is not loaded |
| |
| TPM_RC_REFERENCE_S0 |
| |
| RC_WARN + 0x018 |
| |
| the 1 authorization session handle references a |
| session that is not loaded |
| |
| TPM_RC_REFERENCE_S1 |
| |
| RC_WARN + 0x019 |
| |
| the 2 authorization session handle references a |
| session that is not loaded |
| |
| TPM_RC_REFERENCE_S2 |
| |
| RC_WARN + 0x01A |
| |
| the 3 authorization session handle references a |
| session that is not loaded |
| |
| TPM_RC_REFERENCE_S3 |
| |
| RC_WARN + 0x01B |
| |
| the 4th authorization session handle references a |
| session that is not loaded |
| |
| TPM_RC_REFERENCE_S4 |
| |
| RC_WARN + 0x01C |
| |
| the 5 session handle references a session that is |
| not loaded |
| |
| TPM_RC_REFERENCE_S5 |
| |
| RC_WARN + 0x01D |
| |
| the 6 session handle references a session that is |
| not loaded |
| |
| st |
| |
| nd |
| |
| rd |
| |
| th |
| |
| th |
| |
| th |
| |
| th |
| |
| st |
| |
| nd |
| |
| rd |
| |
| th |
| |
| th |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 35 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| Name |
| |
| Value |
| |
| Description |
| |
| TPM_RC_REFERENCE_S6 |
| |
| RC_WARN + 0x01E |
| |
| the 7 authorization session handle references a |
| session that is not loaded |
| |
| TPM_RC_NV_RATE |
| |
| RC_WARN + 0x020 |
| |
| the TPM is rate-limiting accesses to prevent |
| wearout of NV |
| |
| TPM_RC_LOCKOUT |
| |
| RC_WARN + 0x021 |
| |
| authorizations for objects subject to DA protection |
| are not allowed at this time because the TPM is in |
| DA lockout mode |
| |
| TPM_RC_RETRY |
| |
| RC_WARN + 0x022 |
| |
| the TPM was not able to start the command |
| |
| TPM_RC_NV_UNAVAILABLE |
| |
| RC_WARN + 0x023 |
| |
| the command may require writing of NV and NV is |
| not current accessible |
| |
| TPM_RC_NOT_USED |
| |
| RC_WARN + 0x7F |
| |
| this value is reserved and shall not be returned by |
| the TPM |
| |
| th |
| |
| Additional Defines |
| TPM_RC_H |
| |
| 0x000 |
| |
| add to a handle-related error |
| |
| TPM_RC_P |
| |
| 0x040 |
| |
| add to a parameter-related error |
| |
| TPM_RC_S |
| |
| 0x800 |
| |
| add to a session-related error |
| |
| TPM_RC_1 |
| |
| 0x100 |
| |
| add to a parameter-, handle-, or session-related |
| error |
| |
| TPM_RC_2 |
| |
| 0x200 |
| |
| add to a parameter-, handle-, or session-related |
| error |
| |
| TPM_RC_3 |
| |
| 0x300 |
| |
| add to a parameter-, handle-, or session-related |
| error |
| |
| TPM_RC_4 |
| |
| 0x400 |
| |
| add to a parameter-, handle-, or session-related |
| error |
| |
| TPM_RC_5 |
| |
| 0x500 |
| |
| add to a parameter-, handle-, or session-related |
| error |
| |
| TPM_RC_6 |
| |
| 0x600 |
| |
| add to a parameter-, handle-, or session-related |
| error |
| |
| TPM_RC_7 |
| |
| 0x700 |
| |
| add to a parameter-, handle-, or session-related |
| error |
| |
| TPM_RC_8 |
| |
| 0x800 |
| |
| add to a parameter-related error |
| |
| TPM_RC_9 |
| |
| 0x900 |
| |
| add to a parameter-related error |
| |
| TPM_RC_A |
| |
| 0xA00 |
| |
| add to a parameter-related error |
| |
| TPM_RC_B |
| |
| 0xB00 |
| |
| add to a parameter-related error |
| |
| TPM_RC_C |
| |
| 0xC00 |
| |
| add to a parameter-related error |
| |
| TPM_RC_D |
| |
| 0xD00 |
| |
| add to a parameter-related error |
| |
| TPM_RC_E |
| |
| 0xE00 |
| |
| add to a parameter-related error |
| |
| TPM_RC_F |
| |
| 0xF00 |
| |
| add to a parameter-related error |
| |
| TPM_RC_N_MASK |
| |
| 0xF00 |
| |
| number mask |
| |
| Page 36 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| 6.7 |
| |
| Part 2: Structures |
| |
| TPM_CLOCK_ADJUST |
| |
| A TPM_CLOCK_ADJUST value is used to change the rate at which the TPM internal oscillator is divided. |
| A change to the divider will change the rate at which Clock and Time change. |
| NOTE |
| |
| The recommended adjustments are approximately 1% for a course adjustment, 0.1% for a medium |
| adjustment, and the minimum possible on the implementation for the fine adjustment (e.g., one count of |
| the pre-scalar if possible). |
| |
| Table 16 — Definition of (INT8) TPM_CLOCK_ADJUST Constants <IN> |
| Name |
| |
| Value |
| |
| Comments |
| |
| TPM_CLOCK_COARSE_SLOWER |
| |
| -3 |
| |
| Slow the Clock update rate by one coarse adjustment step. |
| |
| TPM_CLOCK_MEDIUM_SLOWER |
| |
| -2 |
| |
| Slow the Clock update rate by one medium adjustment step. |
| |
| TPM_CLOCK_FINE_SLOWER |
| |
| -1 |
| |
| Slow the Clock update rate by one fine adjustment step. |
| |
| TPM_CLOCK_NO_CHANGE |
| |
| 0 |
| |
| No change to the Clock update rate. |
| |
| TPM_CLOCK_FINE_FASTER |
| |
| 1 |
| |
| Speed the Clock update rate by one fine adjustment step. |
| |
| TPM_CLOCK_MEDIUM_FASTER |
| |
| 2 |
| |
| Speed the Clock update rate by one medium adjustment step. |
| |
| TPM_CLOCK_COARSE_FASTER |
| |
| 3 |
| |
| Speed the Clock update rate by one coarse adjustment step. |
| |
| #TPM_RC_VALUE |
| |
| 6.8 |
| |
| TPM_EO (EA Arithmetic Operands) |
| Table 17 — Definition of (UINT16) TPM_EO Constants <IN/OUT> |
| |
| Operation Name |
| |
| Value |
| |
| Comments |
| |
| TPM_EO_EQ |
| |
| 0x0000 |
| |
| A=B |
| |
| TPM_EO_NEQ |
| |
| 0x0001 |
| |
| A≠B |
| |
| TPM_EO_SIGNED_GT |
| |
| 0x0002 |
| |
| A > B signed |
| |
| TPM_EO_UNSIGNED_GT |
| |
| 0x0003 |
| |
| A > B unsigned |
| |
| TPM_EO_SIGNED_LT |
| |
| 0x0004 |
| |
| A < B signed |
| |
| TPM_EO_UNSIGNED_LT |
| |
| 0x0005 |
| |
| A < B unsigned |
| |
| TPM_EO_SIGNED_GE |
| |
| 0x0006 |
| |
| A ≥ B signed |
| |
| TPM_EO_UNSIGNED_GE |
| |
| 0x0007 |
| |
| A ≥ B unsigned |
| |
| TPM_EO_SIGNED_LE |
| |
| 0x0008 |
| |
| A ≤ B signed |
| |
| TPM_EO_UNSIGNED_LE |
| |
| 0x0009 |
| |
| A ≤ B unsigned |
| |
| TPM_EO_BITSET |
| |
| 0x000A |
| |
| All bits SET in B are SET in A. ((A&B)=B) |
| |
| TPM_EO_BITCLEAR |
| |
| 0x000B |
| |
| All bits SET in B are CLEAR in A. ((A&B)=0) |
| |
| #TPM_RC_VALUE |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Response code returned when unmarshaling of this type fails |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 37 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| 6.9 |
| |
| Trusted Platform Module Library |
| |
| TPM_ST (Structure Tags) |
| |
| Structure tags are used to disambiguate structures. They are 16-bit values with the most significant bit |
| SET so that they do not overlap TPM_ALG_ID values. A single exception is made for the value |
| associated with TPM_ST_RSP_COMMAND (0x00C4), which has the same value as the |
| TPM_TAG_RSP_COMMAND tag from earlier versions of this specification. This value is used when the |
| TPM is compatible with a previous TPM specification and the TPM cannot determine which family of |
| response code to return because the command tag is not valid. |
| Many of the structures defined in this document have parameters that are unions of other structures. That |
| is, a parameter may be one of several structures. The parameter will have a selector value that indicates |
| which of the options is actually present. |
| In order to allow the marshaling and unmarshaling code to determine which of the possible structures is |
| allowed, each selector will have a unique interface type and will constrain the number of possible tag |
| values. |
| Table 18 defines the structure tags values. The definition of many structures is context-sensitive using an |
| algorithm ID. In cases where an algorithm ID is not a meaningful way to designate the structure, the |
| values in this table are used. |
| Table 18 — Definition of (UINT16) TPM_ST Constants <IN/OUT, S> |
| Name |
| TPM_ST_RSP_COMMAND |
| |
| Value |
| |
| Comments |
| |
| 0x00C4 |
| |
| tag value for a response; used when there is an error |
| in the tag. This is also the value returned from a TPM |
| 1.2 when an error occurs. This value is used in this |
| specification because an error in the command tag |
| may prevent determination of the family. When this tag |
| is used in the response, the response code will be |
| TPM_RC_BAD_TAG (0 1E16), which has the same |
| numeric value as the TPM 1.2 response code for |
| TPM_BADTAG. |
| NOTE |
| |
| In a previously published version of this |
| specification, |
| TPM_RC_BAD_TAG |
| was |
| incorrectly assigned a value of 0x030 instead of |
| 30 (0x01e). Some implementations my return the |
| old value instead of the new value. |
| |
| TPM_ST_NULL |
| |
| 0X8000 |
| |
| no structure type specified |
| |
| TPM_ST_NO_SESSIONS |
| |
| 0x8001 |
| |
| tag value for a command/response for a command |
| defined in this specification; indicating that the |
| command/response has no attached sessions and no |
| authorizationSize/parameterSize value is present |
| If the responseCode from the TPM is not |
| TPM_RC_SUCCESS, then the response tag shall |
| have this value. |
| |
| TPM_ST_SESSIONS |
| |
| 0x8002 |
| |
| tag value for a command/response for a command |
| defined in this specification; indicating that the |
| command/response has one or more attached |
| sessions and the authorizationSize/parameterSize |
| field is present |
| |
| Page 38 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| Name |
| reserved |
| |
| Part 2: Structures |
| Value |
| |
| Comments |
| |
| 0x8003 |
| |
| When used between application software and the TPM |
| resource manager, this tag indicates that the |
| command has no sessions and the handles are using |
| the Name format rather than the 32-bit handle format. |
| NOTE 1 |
| |
| The response to application software will have a |
| tag of TPM_ST_NO_SESSIONS. |
| |
| Between the TRM and TPM, this tag would occur in a |
| response from a TPM that overlaps the tag parameter |
| of a request with the tag parameter of a response, |
| when the response has no associated sessions. |
| NOTE 2 |
| |
| reserved |
| |
| 0x8004 |
| |
| This tag is not used by all TPM or TRM |
| implementations. |
| |
| When used between application software and the TPM |
| resource manager, this tag indicates that the |
| command has sessions and the handles are using the |
| Name format rather than the 32-bit handle format. |
| NOTE 1 |
| |
| If the command completes successfully, the |
| response to application software will have a tag |
| of TPM_ST_SESSIONS. |
| |
| Between the TRM and TPM, would occur in a |
| response from a TPM that overlaps the tag parameter |
| of a request with the tag parameter of a response, |
| when the response has authorization sessions. |
| NOTE 2 |
| |
| This tag is not used by all TPM or TRM |
| implementations. |
| |
| TPM_ST_ATTEST_NV |
| |
| 0x8014 |
| |
| tag for an attestation structure |
| |
| TPM_ST_ATTEST_COMMAND_AUDIT |
| |
| 0x8015 |
| |
| tag for an attestation structure |
| |
| TPM_ST_ATTEST_SESSION_AUDIT |
| |
| 0x8016 |
| |
| tag for an attestation structure |
| |
| TPM_ST_ATTEST_CERTIFY |
| |
| 0x8017 |
| |
| tag for an attestation structure |
| |
| TPM_ST_ATTEST_QUOTE |
| |
| 0x8018 |
| |
| tag for an attestation structure |
| |
| TPM_ST_ATTEST_TIME |
| |
| 0x8019 |
| |
| tag for an attestation structure |
| |
| TPM_ST_ATTEST_CREATION |
| |
| 0x801A |
| |
| tag for an attestation structure |
| |
| reserved |
| |
| 0x801B |
| |
| do not use |
| NOTE |
| |
| This |
| was |
| previously |
| assigned |
| to |
| TPM_ST_ATTEST_NV. The tag is changed |
| because the structure has changed |
| |
| TPM_ST_CREATION |
| |
| 0x8021 |
| |
| tag for a ticket type |
| |
| TPM_ST_VERIFIED |
| |
| 0x8022 |
| |
| tag for a ticket type |
| |
| TPM_ST_AUTH_SECRET |
| |
| 0x8023 |
| |
| tag for a ticket type |
| |
| TPM_ST_HASHCHECK |
| |
| 0x8024 |
| |
| tag for a ticket type |
| |
| TPM_ST_AUTH_SIGNED |
| |
| 0x8025 |
| |
| tag for a ticket type |
| |
| TPM_ST_FU_MANIFEST |
| |
| 0x8029 |
| |
| tag for a structure describing a Field Upgrade Policy |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 39 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 6.10 TPM_SU (Startup Type) |
| These values are used in TPM2_Startup() to indicate the shutdown and startup mode. The defined |
| startup sequences are: |
| a) TPM Reset – Two cases: |
| 1) Shutdown(CLEAR) followed by Startup(CLEAR) |
| 2) Startup(CLEAR) with no Shutdown() |
| b) TPM Restart – Shutdown(STATE) followed by Startup(CLEAR) |
| c) TPM Resume – Shutdown(STATE) followed by Startup(STATE) |
| TPM_SU values of 80 0016 and above are reserved for internal use of the TPM and may not be assigned |
| values. |
| NOTE |
| |
| In the reference code, a value of FF FF 16 indicates that the startup state has not been set. If this was |
| defined in this table to be, say, TPM_SU_NONE, then TPM_SU_NONE would be a valid input value but |
| the caller is not allowed to indicate the that the startup type is TPM_SU_NONE so the reserved value is |
| defined in the implementation as required for internal TPM uses. |
| |
| Table 19 — Definition of (UINT16) TPM_SU Constants <IN> |
| Name |
| |
| Value |
| |
| Description |
| |
| TPM_SU_CLEAR |
| |
| 0x0000 |
| |
| on TPM2_Shutdown(), indicates that the TPM should prepare |
| for loss of power and save state required for an orderly startup |
| (TPM Reset). |
| on TPM2_Startup(), indicates that the TPM should start from |
| perform TPM Reset or TPM Restart |
| |
| TPM_SU_STATE |
| |
| 0x0001 |
| |
| on TPM2_Shutdown(), indicates that the TPM should prepare |
| for loss of power and save state required for an orderly startup |
| (TPM Restart or TPM Resume) |
| on TPM2_Startup(), indicates that the TPM should restore the |
| state saved by TPM2_Shutdown(TPM_SU_STATE) |
| |
| #TPM_RC_VALUE |
| |
| response code when incorrect value is used |
| |
| 6.11 TPM_SE (Session Type) |
| This type is used in TPM2_StartAuthSession() to indicate the type of the session to be created. |
| Table 20 — Definition of (UINT8) TPM_SE Constants <IN> |
| Name |
| |
| Value |
| |
| TPM_SE_HMAC |
| |
| 0x00 |
| |
| TPM_SE_POLICY |
| |
| 0x01 |
| |
| TPM_SE_TRIAL |
| |
| 0x03 |
| |
| #TPM_RC_VALUE |
| |
| Page 40 |
| October 31, 2013 |
| |
| Description |
| |
| The policy session is being used to compute the policyHash and |
| not for command authorization. |
| This setting modifies some policy commands and prevents |
| session from being used to authorize a command. |
| response code when incorrect value is used |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 6.12 TPM_CAP (Capabilities) |
| The TPM_CAP values are used in TPM2_GetCapability() to select the type of the value to be returned. |
| The format of the response varies according to the type of the value. |
| Table 21 — Definition of (UINT32) TPM_CAP Constants |
| Capability Name |
| |
| Value |
| |
| Property Type |
| |
| Return Type |
| |
| TPM_CAP_FIRST |
| |
| 0x00000000 |
| |
| TPM_CAP_ALGS |
| |
| 0x00000000 TPM_ALG_ID |
| |
| TPM_CAP_HANDLES |
| |
| 0x00000001 TPM_HANDLE |
| |
| TPML_HANDLE |
| |
| TPM_CAP_COMMANDS |
| |
| 0x00000002 TPM_CC |
| |
| TPML_CCA |
| |
| TPM_CAP_PP_COMMANDS |
| |
| 0x00000003 TPM_CC |
| |
| TPML_CC |
| |
| TPM_CAP_AUDIT_COMMANDS |
| |
| 0x00000004 TPM_CC |
| |
| TPML_CC |
| |
| TPM_CAP_PCRS |
| |
| 0x00000005 reserved |
| |
| TPML_PCR_SELECTION |
| |
| TPM_CAP_TPM_PROPERTIES |
| |
| 0x00000006 TPM_PT |
| |
| TPML_TAGGED_TPM_PROPERTY |
| |
| TPM_CAP_PCR_PROPERTIES |
| |
| 0x00000007 TPM_PT_PCR |
| |
| (1) |
| |
| TPM_CAP_ECC_CURVES |
| |
| 0x00000008 TPM_ECC_CURVE |
| |
| TPM_CAP_LAST |
| |
| TPML_ALG_PROPERTY |
| |
| TPML_TAGGED_PCR_PROPERTY |
| (1) |
| |
| 0x00000008 |
| |
| TPM_CAP_VENDOR_PROPERTY 0x00000100 manufacturer specific |
| |
| TPML_ECC_CURVE |
| |
| manufacturer-specific values |
| |
| #TPM_RC_VALUE |
| NOTES: |
| (1) The TPM_ALG_ID or TPM_ECC_CURVE is cast to a UINT32 |
| |
| 6.13 TPM_PT (Property Tag) |
| The TPM_PT constants are used in TPM2_GetCapability(capability = TPM_CAP_TPM_PROPERTIES) to |
| indicate the property being selected or returned. |
| The values in the fixed group (PT_FIXED) are not changeable through programmatic means other than a |
| firmware update. The values in the variable group (PT_VAR) may be changed with TPM commands but |
| should be persistent over power cycles and only changed when indicated by the detailed actions code. |
| Table 22 — Definition of (UINT32) TPM_PT Constants <IN/OUT, S> |
| Capability Name |
| |
| Value |
| |
| Comments |
| |
| TPM_PT_NONE |
| |
| 0x00000000 |
| |
| indicates no property type |
| |
| PT_GROUP |
| |
| 0x00000100 |
| |
| The number of properties in each group. |
| NOTE The first group with any properties is group 1 |
| (PT_GROUP * 1). Group 0 is reserved. |
| |
| PT_FIXED |
| |
| PT_GROUP * 1 the |
| group |
| of |
| fixed |
| properties |
| returned |
| as |
| TPMS_TAGGED_PROPERTY |
| The values in this group are only changed due to a |
| firmware change in the TPM. |
| |
| TPM_PT_FAMILY_INDICATOR |
| |
| PT_FIXED + 0 a 4-octet character string containing the TPM Family value |
| (TPM_SPEC_FAMILY) |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 41 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Capability Name |
| TPM_PT_LEVEL |
| |
| Trusted Platform Module Library |
| |
| Value |
| |
| Comments |
| |
| PT_FIXED + 1 the level of the specification |
| NOTE 1 |
| |
| TPM_PT_REVISION |
| |
| For this specification, the level is zero. |
| |
| NOTE 2 |
| |
| The level is on the title page of the specification. |
| |
| PT_FIXED + 2 the specification Revision times 100 |
| EXAMPLE Revision 01.01 would have a value of 101. |
| NOTE |
| |
| TPM_PT_DAY_OF_YEAR |
| |
| The Revision value is on the title page of the |
| specification. |
| |
| PT_FIXED + 3 the specification day of year using TCG calendar |
| EXAMPLE November 15, 2010, has a day of year value of 319 |
| (00 00 01 3F16). |
| NOTE |
| |
| TPM_PT_YEAR |
| |
| The specification date is on the title page of the |
| specification. |
| |
| PT_FIXED + 4 the specification year using the CE |
| EXAMPLE The year 2010 has a value of 00 00 07 DA16. |
| NOTE |
| |
| The specification date is on the title page of the |
| specification. |
| |
| TPM_PT_MANUFACTURER |
| |
| PT_FIXED + 5 the vendor ID unique to each TPM manufacturer |
| |
| TPM_PT_VENDOR_STRING_1 |
| |
| PT_FIXED + 6 the first four characters of the vendor ID string |
| NOTE |
| |
| When the vendor string is fewer than 16 octets, the |
| additional property values do not have to be present. |
| A vendor string of 4 octets can be represented in one |
| 32-bit value and no null terminating character is |
| required. |
| |
| TPM_PT_VENDOR_STRING_2 |
| |
| PT_FIXED + 7 the second four characters of the vendor ID string |
| |
| TPM_PT_VENDOR_STRING_3 |
| |
| PT_FIXED + 8 the third four characters of the vendor ID string |
| |
| TPM_PT_VENDOR_STRING_4 |
| |
| PT_FIXED + 9 the fourth four characters of the vendor ID sting |
| |
| TPM_PT_VENDOR_TPM_TYPE |
| |
| PT_FIXED + 10 vendor-defined value indicating the TPM model |
| |
| TPM_PT_FIRMWARE_VERSION_1 |
| |
| PT_FIXED + 11 the most-significant 32 bits of a vendor-specific value |
| indicating the version of the firmware |
| |
| TPM_PT_FIRMWARE_VERSION_2 |
| |
| PT_FIXED + 12 the least-significant 32 bits of a vendor-specific value |
| indicating the version of the firmware |
| |
| TPM_PT_INPUT_BUFFER |
| |
| PT_FIXED + 13 the maximum size of |
| TPM2B_MAX_BUFFER) |
| |
| TPM_PT_HR_TRANSIENT_MIN |
| |
| PT_FIXED + 14 the minimum number of transient objects that can be held |
| in TPM RAM |
| NOTE |
| |
| TPM_PT_HR_PERSISTENT_MIN |
| |
| parameter |
| |
| (typically, |
| |
| a |
| |
| This minimum shall be no less than the minimum |
| value required by the platform-specific specification |
| to which the TPM is built. |
| |
| PT_FIXED + 15 the minimum number of persistent objects that can be |
| held in TPM NV memory |
| NOTE |
| |
| TPM_PT_HR_LOADED_MIN |
| |
| a |
| |
| This minimum shall be no less than the minimum |
| value required by the platform-specific specification |
| to which the TPM is built. |
| |
| PT_FIXED + 16 the minimum number of authorization sessions that can |
| be held in TPM RAM |
| NOTE |
| |
| Page 42 |
| October 31, 2013 |
| |
| This minimum shall be no less than the minimum |
| value required by the platform-specific specification |
| to which the TPM is built. |
| |
| Published |
| |
| Family “2.0” |
| |
| Copyright © TCG 2006-2013 |
| |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| Capability Name |
| TPM_PT_ACTIVE_SESSIONS_MAX |
| |
| Part 2: Structures |
| Value |
| |
| Comments |
| |
| PT_FIXED + 17 the number of authorization sessions that may be active at |
| a time |
| A session is active when it has a context associated with |
| its handle. The context may either be in TPM RAM or be |
| context saved. |
| NOTE |
| |
| This value shall be no less than the minimum value |
| required by the platform-specific specification to |
| which the TPM is built. |
| |
| TPM_PT_PCR_COUNT |
| |
| PT_FIXED + 18 the number of PCR implemented |
| NOTE This number is determined by the defined |
| attributes, not the number of PCR that are populated. |
| |
| TPM_PT_PCR_SELECT_MIN |
| |
| PT_FIXED + 19 the |
| minimum |
| number |
| of |
| TPMS_PCR_SELECT.sizeOfSelect |
| NOTE |
| |
| TPM_PT_CONTEXT_GAP_MAX |
| |
| octets |
| |
| in |
| |
| a |
| |
| This value is not determined by the number of PCR |
| implemented but by the number of PCR required by |
| the platform-specific specification with which the TPM |
| is compliant. |
| |
| PT_FIXED + 20 the maximum allowed difference (unsigned) between the |
| contextID values of two saved session contexts |
| 16 |
| |
| This value shall be at least 2 -1 (65535). |
| PT_FIXED + 21 skipped |
| TPM_PT_NV_COUNTERS_MAX |
| |
| PT_FIXED + 22 the maximum number of NV Indexes that are allowed to |
| have the TPMA_NV_COUNTER attribute SET |
| NOTE |
| |
| It is allowed for this value to be larger than the |
| number of NV Indexes that can be defined. This |
| would be indicative of a TPM implementation that did |
| not use different implementation technology for |
| different NV Index types. |
| |
| TPM_PT_NV_INDEX_MAX |
| |
| PT_FIXED + 23 the maximum size of an NV Index data area |
| |
| TPM_PT_MEMORY |
| |
| PT_FIXED + 24 a TPMA_MEMORY indicating the memory management |
| method for the TPM |
| |
| TPM_PT_CLOCK_UPDATE |
| |
| PT_FIXED + 25 interval, in milliseconds, between updates to the copy of |
| TPMS_CLOCK_INFO.clock in NV |
| |
| TPM_PT_CONTEXT_HASH |
| |
| PT_FIXED + 26 the algorithm used for the integrity HMAC on saved |
| contexts |
| and |
| for |
| hashing |
| the |
| fuData |
| of |
| TPM2_FirmwareRead() |
| |
| TPM_PT_CONTEXT_SYM |
| |
| PT_FIXED + 27 the algorithm used for encryption of saved contexts |
| |
| TPM_PT_CONTEXT_SYM_SIZE |
| |
| PT_FIXED + 28 the size of the key used for encryption of saved contexts |
| |
| TPM_PT_ORDERLY_COUNT |
| |
| PT_FIXED + 29 the modulus - 1 of the count for NV update of an orderly |
| counter |
| The returned value is MAX_ORDERLY_COUNT. |
| N |
| This will have a value of 2 – 1 where 1 ≤ N ≤ 32 |
| NOTE |
| |
| An “orderly counter” is an NV Index with |
| TPMA_NV_COUNTER and TPMA_NV_ORDERLY |
| both SET. |
| |
| TPM_PT_MAX_COMMAND_SIZE |
| |
| PT_FIXED + 30 the maximum value for commandSize in a command |
| |
| TPM_PT_MAX_RESPONSE_SIZE |
| |
| PT_FIXED + 31 the maximum value for responseSize in a response |
| |
| TPM_PT_MAX_DIGEST |
| |
| PT_FIXED + 32 the maximum size of a digest that can be produced by the |
| TPM |
| |
| TPM_PT_MAX_OBJECT_CONTEXT |
| |
| PT_FIXED + 33 the maximum size of an object context that will be |
| returned by TPM2_ContextSave |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 43 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Capability Name |
| |
| Trusted Platform Module Library |
| |
| Value |
| |
| Comments |
| |
| TPM_PT_MAX_SESSION_CONTEXT PT_FIXED + 34 the maximum size of a session context that will be |
| returned by TPM2_ContextSave |
| TPM_PT_PS_FAMILY_INDICATOR |
| |
| PT_FIXED + 35 platform-specific family (a TPM_PS value)(see Table 24) |
| NOTE |
| |
| The platform-specific values for the TPM_PT_PS |
| parameters are in the relevant platform-specific |
| specification. In the reference implementation, all of |
| these values are 0. |
| |
| TPM_PT_PS_LEVEL |
| |
| PT_FIXED + 36 the level of the platform-specific specification |
| |
| TPM_PT_PS_REVISION |
| |
| PT_FIXED + 37 the specification Revision times 100 for the platformspecific specification |
| |
| TPM_PT_PS_DAY_OF_YEAR |
| |
| PT_FIXED + 38 the platform-specific specification day of year using TCG |
| calendar |
| |
| TPM_PT_PS_YEAR |
| |
| PT_FIXED + 39 the platform-specific specification year using the CE |
| |
| TPM_PT_SPLIT_MAX |
| |
| PT_FIXED + 40 the number of split signing operations supported by the |
| TPM |
| |
| TPM_PT_TOTAL_COMMANDS |
| |
| PT_FIXED + 41 total number of commands implemented in the TPM |
| |
| TPM_PT_LIBRARY_COMMANDS |
| |
| PT_FIXED + 42 number of commands from the TPM library that are |
| implemented |
| |
| TPM_PT_VENDOR_COMMANDS |
| |
| PT_FIXED + 43 number of vendor commands that are implemented |
| |
| TPM_PT_NV_BUFFER_MAX |
| |
| PT_FIXED + 44 the maximum data size in one NV write command |
| |
| PT_VAR |
| |
| PT_GROUP * 2 the group of variable properties returned as |
| TPMS_TAGGED_PROPERTY |
| The properties in this group change because of a |
| Protected Capability other than a firmware update. The |
| values are not necessarily persistent across all power |
| transitions. |
| |
| TPM_PT_PERMANENT |
| |
| PT_VAR + 0 |
| |
| TPMA_PERMANENT |
| |
| TPM_PT_STARTUP_CLEAR |
| |
| PT_VAR + 1 |
| |
| TPMA_STARTUP_CLEAR |
| |
| TPM_PT_HR_NV_INDEX |
| |
| PT_VAR + 2 |
| |
| the number of NV Indexes currently defined |
| |
| TPM_PT_HR_LOADED |
| |
| PT_VAR + 3 |
| |
| the number of authorization sessions currently loaded into |
| TPM RAM |
| |
| TPM_PT_HR_LOADED_AVAIL |
| |
| PT_VAR + 4 |
| |
| the number of additional authorization sessions, of any |
| type, that could be loaded into TPM RAM |
| This value is an estimate. If this value is at least 1, then at |
| least one authorization session of any type may be |
| loaded. Any command that changes the RAM memory |
| allocation can make this estimate invalid. |
| NOTE |
| |
| TPM_PT_HR_ACTIVE |
| |
| Page 44 |
| October 31, 2013 |
| |
| PT_VAR + 5 |
| |
| A valid implementation may return 1 even if more |
| than one authorization session would fit into RAM. |
| |
| the number of active authorization sessions currently |
| being tracked by the TPM |
| This is the sum of the loaded and saved sessions. |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| Capability Name |
| TPM_PT_HR_ACTIVE_AVAIL |
| |
| Part 2: Structures |
| Value |
| |
| Comments |
| |
| PT_VAR + 6 |
| |
| the number of additional authorization sessions, of any |
| type, that could be created |
| This value is an estimate. If this value is at least 1, then at |
| least one authorization session of any type may be |
| created. Any command that changes the RAM memory |
| allocation can make this estimate invalid. |
| NOTE |
| |
| TPM_PT_HR_TRANSIENT_AVAIL |
| |
| PT_VAR + 7 |
| |
| A valid implementation may return 1 even if more |
| than one authorization session could be created. |
| |
| estimate of the number of additional transient objects that |
| could be loaded into TPM RAM |
| This value is an estimate. If this value is at least 1, then at |
| least one object of any type may be loaded. Any |
| command that changes the memory allocation can make |
| this estimate invalid. |
| NOTE |
| |
| A valid implementation may return 1 even if more |
| than one transient object would fit into RAM. |
| |
| TPM_PT_HR_PERSISTENT |
| |
| PT_VAR + 8 |
| |
| the number of persistent objects currently loaded into |
| TPM NV memory |
| |
| TPM_PT_HR_PERSISTENT_AVAIL |
| |
| PT_VAR + 9 |
| |
| the number of additional persistent objects that could be |
| loaded into NV memory |
| This value is an estimate. If this value is at least 1, then at |
| least one object of any type may be made persistent. Any |
| command that changes the NV memory allocation can |
| make this estimate invalid. |
| NOTE |
| |
| A valid implementation may return 1 even if more |
| than one persistent object would fit into NV memory. |
| |
| TPM_PT_NV_COUNTERS |
| |
| PT_VAR + 10 |
| |
| the number of defined NV Indexes that have NV |
| TPMA_NV_COUNTER attribute SET |
| |
| TPM_PT_NV_COUNTERS_AVAIL |
| |
| PT_VAR + 11 |
| |
| the number of additional NV Indexes that can be defined |
| with |
| their |
| TPMA_NV_COUNTER |
| and |
| TPMA_NV_ORDERLY attribute SET |
| This value is an estimate. If this value is at least 1, then at |
| least one NV Index may be created with the |
| TPMA_NV_COUNTER |
| and |
| TPMA_NV_ORDERLY |
| attributes SET. Any command that changes the NV |
| memory allocation can make this estimate invalid. |
| NOTE A valid implementation may return 1 even if more |
| than one NV counter could be defined. |
| |
| TPM_PT_ALGORITHM_SET |
| |
| PT_VAR + 12 |
| |
| code that limits the algorithms that may be used with the |
| TPM |
| |
| TPM_PT_LOADED_CURVES |
| |
| PT_VAR + 13 |
| |
| the number of loaded ECC curves |
| |
| TPM_PT_LOCKOUT_COUNTER |
| |
| PT_VAR + 14 |
| |
| the current value of the lockout counter (failedTries) |
| |
| TPM_PT_MAX_AUTH_FAIL |
| |
| PT_VAR + 15 |
| |
| the number of authorization failures before DA lockout is |
| invoked |
| |
| TPM_PT_LOCKOUT_INTERVAL |
| |
| PT_VAR + 16 |
| |
| the number of seconds before the value reported by |
| TPM_PT_LOCKOUT_COUNTER is decremented |
| |
| TPM_PT_LOCKOUT_RECOVERY |
| |
| PT_VAR + 17 |
| |
| the number of seconds after a lockoutAuth failure before |
| use of lockoutAuth may be attempted again |
| |
| TPM_PT_NV_WRITE_RECOVERY |
| |
| PT_VAR + 18 |
| |
| number of milliseconds before the TPM will accept |
| another command that will modify NV |
| This value is an approximation and may go up or down |
| over time. |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 45 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Capability Name |
| |
| Trusted Platform Module Library |
| |
| Value |
| |
| Comments |
| |
| TPM_PT_AUDIT_COUNTER_0 |
| |
| PT_VAR + 19 |
| |
| the high-order 32 bits of the command audit counter |
| |
| TPM_PT_AUDIT_COUNTER_1 |
| |
| PT_VAR + 20 |
| |
| the low-order 32 bits of the command audit counter |
| |
| Page 46 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 6.14 TPM_PT_PCR (PCR Property Tag) |
| The TPM_PT_PCR constants are used in TPM2_GetCapability() to indicate the property being selected |
| or returned. The PCR properties can be read when capability == TPM_CAP_PCR_PROPERTIES. |
| Table 23 — Definition of (UINT32) TPM_PT_PCR Constants <IN/OUT, S> |
| Capability Name |
| |
| Value |
| |
| Comments |
| |
| TPM_PT_PCR_FIRST |
| |
| 0x00000000 |
| |
| bottom of the range of TPM_PT_PCR properties |
| |
| TPM_PT_PCR_SAVE |
| |
| 0x00000000 |
| |
| a SET bit in the TPMS_PCR_SELECT indicates that the PCR is |
| saved and restored by TPM_SU_STATE |
| |
| TPM_PT_PCR_EXTEND_L0 |
| |
| 0x00000001 |
| |
| a SET bit in the TPMS_PCR_SELECT indicates that the PCR |
| may be extended from locality 0 |
| This property is only present if a locality other than 0 is |
| implemented. |
| |
| TPM_PT_PCR_RESET_L0 |
| |
| 0x00000002 |
| |
| a SET bit in the TPMS_PCR_SELECT indicates that the PCR |
| may be reset by TPM2_PCR_Reset() from locality 0 |
| |
| TPM_PT_PCR_EXTEND_L1 |
| |
| 0x00000003 |
| |
| a SET bit in the TPMS_PCR_SELECT indicates that the PCR |
| may be extended from locality 1 |
| This property is only present if locality 1 is implemented. |
| |
| TPM_PT_PCR_RESET_L1 |
| |
| 0x00000004 |
| |
| a SET bit in the TPMS_PCR_SELECT indicates that the PCR |
| may be reset by TPM2_PCR_Reset() from locality 1 |
| This property is only present if locality 1 is implemented. |
| |
| TPM_PT_PCR_EXTEND_L2 |
| |
| 0x00000005 |
| |
| a SET bit in the TPMS_PCR_SELECT indicates that the PCR |
| may be extended from locality 2 |
| This property is only present if localities 1 and 2 are |
| implemented. |
| |
| TPM_PT_PCR_RESET_L2 |
| |
| 0x00000006 |
| |
| a SET bit in the TPMS_PCR_SELECT indicates that the PCR |
| may be reset by TPM2_PCR_Reset() from locality 2 |
| This property is only present if localities 1 and 2 are |
| implemented. |
| |
| TPM_PT_PCR_EXTEND_L3 |
| |
| 0x00000007 |
| |
| a SET bit in the TPMS_PCR_SELECT indicates that the PCR |
| may be extended from locality 3 |
| This property is only present if localities 1, 2, and 3 are |
| implemented. |
| |
| TPM_PT_PCR_RESET_L3 |
| |
| 0x00000008 |
| |
| a SET bit in the TPMS_PCR_SELECT indicates that the PCR |
| may be reset by TPM2_PCR_Reset() from locality 3 |
| This property is only present if localities 1, 2, and 3 are |
| implemented. |
| |
| TPM_PT_PCR_EXTEND_L4 |
| |
| 0x00000009 |
| |
| a SET bit in the TPMS_PCR_SELECT indicates that the PCR |
| may be extended from locality 4 |
| This property is only present if localities 1, 2, 3, and 4 are |
| implemented. |
| |
| TPM_PT_PCR_RESET_L4 |
| |
| 0x0000000A |
| |
| a SET bit in the TPMS_PCR_SELECT indicates that the PCR |
| may be reset by TPM2_PCR_Reset() from locality 4 |
| This property is only present if localities 1, 2, 3, and 4 are |
| implemented. |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 47 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Capability Name |
| reserved |
| |
| Trusted Platform Module Library |
| |
| Value |
| |
| Comments |
| |
| 0x0000000B – the values in this range are reserved |
| 0x00000010 They correspond to values that may be used to describe |
| attributes associated with the extended localities (32255).synthesize additional software localities. The meaning of |
| these properties need not be the same as the meaning for the |
| Extend and Reset properties above. |
| |
| TPM_PT_PCR_NO_INCREMENT |
| |
| 0x00000011 |
| |
| a SET bit in the TPMS_PCR_SELECT indicates that |
| modifications to this PCR (reset or Extend) will not increment |
| the pcrUpdateCounter |
| |
| TPM_PT_PCR_DRTM_RESET |
| |
| 0x00000012 |
| |
| a SET bit in the TPMS_PCR_SELECT indicates that the PCR is |
| reset by a DRTM event |
| These PCR are reset to -1 on TPM2_Startup() and reset to 0 on |
| a _TPM_Hash_End event following a _TPM_Hash_Start event. |
| |
| TPM_PT_PCR_POLICY |
| |
| 0x00000013 |
| |
| a SET bit in the TPMS_PCR_SELECT indicates that the PCR is |
| controlled by policy |
| This property is only present if the TPM supports policy control |
| of a PCR. |
| |
| TPM_PT_PCR_AUTH |
| |
| 0x00000014 |
| |
| a SET bit in the TPMS_PCR_SELECT indicates that the PCR is |
| controlled by an authorization value |
| This property is only present if the TPM supports authorization |
| control of a PCR. |
| |
| reserved |
| |
| 0x00000015 |
| |
| reserved for the next (2 ) TPM_PT_PCR_POLICY set |
| |
| reserved |
| |
| 0x00000016 |
| |
| reserved for the next (2 ) TPM_PT_PCR_AUTH set |
| |
| reserved |
| |
| nd |
| nd |
| |
| nd |
| |
| th |
| |
| 0x00000017 – reserved for the 2 through 255 TPM_PT_PCR_POLICY and |
| 0x00000210 TPM_PT_PCR_AUTH values |
| th |
| |
| and |
| |
| highest |
| |
| allowed, |
| |
| th |
| |
| and |
| |
| highest |
| |
| allowed, |
| |
| reserved |
| |
| 0x00000211 |
| |
| reserved |
| to |
| the |
| 256 , |
| TPM_PT_PCR_POLICY set |
| |
| reserved |
| |
| 0x00000212 |
| |
| reserved |
| to |
| the |
| 256 , |
| TPM_PT_PCR_AUTH set |
| |
| reserved |
| |
| 0x00000213 |
| |
| new PCR property values may be assigned starting with this |
| value |
| |
| TPM_PT_PCR_LAST |
| |
| 0x00000014 |
| |
| top of the range of TPM_PT_PCR properties of the |
| implementation |
| If the TPM receives a request for a PCR property with a value |
| larger than this, the TPM will return a zero length list and set the |
| moreData parameter to NO. |
| NOTE |
| |
| Page 48 |
| October 31, 2013 |
| |
| This is an implementation-specific value. The value shown |
| reflects the reference code implementation. |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 6.15 TPM_PS (Platform Specific) |
| The platform values in Table 24 are used for the TPM_PT_PS_FAMILY_INDICATOR. |
| NOTE |
| |
| Values below six (6) have the same values as the purview assignments in TPM 1.2. |
| |
| Table 24 — Definition of (UINT32) TPM_PS Constants <OUT> |
| Capability Name |
| |
| Value |
| |
| Comments |
| |
| TPM_PS_MAIN |
| |
| 0x00000000 |
| |
| not platform specific |
| |
| TPM_PS_PC |
| |
| 0x00000001 |
| |
| PC Client |
| |
| TPM_PS_PDA |
| |
| 0x00000002 |
| |
| PDA (includes all mobile devices that are not specifically cell |
| phones) |
| |
| TPM_PS_CELL_PHONE |
| |
| 0x00000003 |
| |
| Cell Phone |
| |
| TPM_PS_SERVER |
| |
| 0x00000004 |
| |
| Server WG |
| |
| TPM_PS_PERIPHERAL |
| |
| 0x00000005 |
| |
| Peripheral WG |
| |
| TPM_PS_TSS |
| |
| 0x00000006 |
| |
| TSS WG |
| |
| TPM_PS_STORAGE |
| |
| 0x00000007 |
| |
| Storage WG |
| |
| TPM_PS_AUTHENTICATION |
| |
| 0x00000008 |
| |
| Authentication WG |
| |
| TPM_PS_EMBEDDED |
| |
| 0x00000009 |
| |
| Embedded WG |
| |
| TPM_PS_HARDCOPY |
| |
| 0x0000000A |
| |
| Hardcopy WG |
| |
| TPM_PS_INFRASTRUCTURE |
| |
| 0x0000000B |
| |
| Infrastructure WG |
| |
| TPM_PS_VIRTUALIZATION |
| |
| 0x0000000C Virtualization WG |
| |
| TPM_PS_TNC |
| |
| 0x0000000D Trusted Network Connect WG |
| |
| TPM_PS_MULTI_TENANT |
| |
| 0x0000000E |
| |
| Multi-tenant WG |
| |
| TPM_PS_TC |
| |
| 0x0000000F |
| |
| Technical Committee |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 49 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| 7 |
| |
| Trusted Platform Module Library |
| |
| Handles |
| |
| 7.1 |
| |
| Introduction |
| |
| Handles are 32-bit values used to reference shielded locations of various types within the TPM. |
| Table 25 — Definition of Types for Handles |
| Type |
| |
| Name |
| |
| Description |
| |
| UINT32 |
| |
| TPM_HANDLE |
| |
| Handles may refer to objects (keys or data blobs), authorization sessions (HMAC and policy), NV |
| Indexes, permanent TPM locations, and PCR. |
| 7.2 |
| |
| TPM_HT (Handle Types) |
| |
| The 32-bit handle space is divided into 256 regions of equal size with 2 |
| ranges represents a handle type. |
| |
| 24 |
| |
| values in each. Each of these |
| |
| The type of the entity is indicated by the MSO of its handle. The values for the MSO and the entity |
| referenced are shown in Table 26. |
| Table 26 — Definition of (UINT8) TPM_HT Constants <S> |
| Name |
| |
| Value |
| |
| Comments |
| |
| TPM_HT_PCR |
| |
| 0x00 |
| |
| PCR – consecutive numbers, starting at 0, that reference the PCR |
| registers |
| A platform-specific specification will set the minimum number of PCR |
| and an implementation may have more. |
| |
| TPM_HT_NV_INDEX |
| |
| 0x01 |
| |
| NV Index – assigned by the caller |
| |
| TPM_HT_HMAC_SESSION |
| |
| 0x02 |
| |
| HMAC Authorization Session – assigned by the TPM when the |
| session is created |
| |
| TPM_HT_LOADED_SESSION |
| |
| 0x02 |
| |
| Loaded Authorization Session – used only in the context of |
| TPM2_GetCapability |
| This type references both loaded HMAC and loaded policy |
| authorization sessions. |
| |
| TPM_HT_POLICY_SESSION |
| |
| 0x03 |
| |
| Policy Authorization Session – assigned by the TPM when the |
| session is created |
| |
| TPM_HT_ACTIVE_SESSION |
| |
| 0x03 |
| |
| Active Authorization Session – used only in the context of |
| TPM2_GetCapability |
| This type references saved authorization session contexts for which |
| the TPM is maintaining tracking information. |
| |
| TPM_HT_PERMANENT |
| |
| 0x40 |
| |
| Permanent Values – assigned by this specification in Table 27 |
| |
| TPM_HT_TRANSIENT |
| |
| 0x80 |
| |
| Transient Objects – assigned by the TPM when an object is loaded |
| into transient-object memory or when a persistent object is converted |
| to a transient object |
| |
| TPM_HT_PERSISTENT |
| |
| 0x81 |
| |
| Persistent Objects – assigned by the TPM when a loaded transient |
| object is made persistent |
| |
| Page 50 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| When a transient object is loaded, the TPM shall assign a handle with an MSO of TPM_HT_TRANSIENT. |
| The object may be assigned a different handle each time it is loaded. The TPM shall ensure that handles |
| assigned to transient objects are unique and assigned to only one transient object at a time. |
| EXAMPLE |
| |
| If a TPM is only able to hold 4 transient objects in internal memory, it might choose to assign handles to |
| those objects with the values 80 00 00 0016 – 80 00 00 0316. |
| |
| When a transient object is converted to a persistent object (TPM2_EvictControl()), the TPM shall validate |
| that the handle provided by the caller has an MSO of TPM_HT_PERSISTENT and that the handle is not |
| already assigned to a persistent object. |
| A handle is assigned to a session when the session is started. The handle shall have an MSO equal to |
| TPM_HT_SESSION and remain associated with that session until the session is closed or flushed. The |
| TPM shall ensure that a session handle is only associated with one session at a time. When the session |
| is loaded into the TPM using TPM2_LoadContext(), it will have the same handle each time it is loaded. |
| EXAMPLE |
| |
| 7.3 |
| |
| If a TPM is only able to track 64 active sessions at a time, it could number those sessions using the |
| values xx 00 01 0016 – xx 00 01 3F 16 where xx is either 02 16 or 03 16 depending on the session type. |
| |
| Persistent Handle Sub-ranges |
| |
| Persistent handles are assigned by the caller of TPM2_EvictControl(). ownerAuth or platformAuth is |
| required to authorize allocation of space for a persistent object. These entities are given separate ranges |
| of persistent handles so that they do not have to allocate from a common range of handles. |
| NOTE |
| |
| While this “namespace” allocation of the handle ranges could have been handled by convention, TPM |
| enforcement is used to prevent errors by the OS or malicious software from affecting the platform’s use of |
| the NV memory. |
| |
| The Owner is allocated persistent handles in the range of 81 00 00 0016 to 81 7F FF FF16 inclusive and |
| the TPM will return an error if ownerAuth is used to attempt to assign a persistent handle outside of this |
| range. |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 51 |
| October 31, 2013 |
| |
| Part 2: Structures |
| 7.4 |
| |
| Trusted Platform Module Library |
| |
| TPM_RH (Permanent Handles) |
| |
| Table 27 lists the architecturally defined handles that cannot be changed. The handles include |
| authorization handles, and special handles. |
| Table 27 — Definition of (UINT32) TPM_RH Constants <IN, S> |
| Name |
| |
| Value |
| |
| Type |
| |
| TPM_RH_FIRST |
| |
| 0x40000000 |
| |
| R |
| |
| TPM_RH_SRK |
| |
| 0x40000000 |
| |
| R |
| |
| TPM_RH_OWNER |
| |
| 0x40000001 |
| |
| K, A, P |
| |
| TPM_RH_REVOKE |
| |
| 0x40000002 |
| |
| R |
| |
| not used |
| |
| 1 |
| |
| TPM_RH_TRANSPORT |
| |
| 0x40000003 |
| |
| R |
| |
| not used |
| |
| 1 |
| |
| TPM_RH_OPERATOR |
| |
| 0x40000004 |
| |
| R |
| |
| not used |
| |
| 1 |
| |
| TPM_RH_ADMIN |
| |
| 0x40000005 |
| |
| R |
| |
| not used |
| |
| 1 |
| |
| TPM_RH_EK |
| |
| 0x40000006 |
| |
| R |
| |
| not used |
| |
| 1 |
| |
| TPM_RH_NULL |
| |
| 0x40000007 |
| |
| K, A, P |
| |
| a handle associated with the null hierarchy, an EmptyAuth |
| authValue, and an Empty Policy authPolicy. |
| |
| TPM_RH_UNASSIGNED |
| |
| 0x40000008 |
| |
| R |
| |
| value reserved to the TPM to indicate a handle location that |
| has not been initialized or assigned |
| |
| TPM_RS_PW |
| |
| 0x40000009 |
| |
| S |
| |
| authorization value |
| authorization session |
| |
| TPM_RH_LOCKOUT |
| |
| 0x4000000A |
| |
| A |
| |
| references the authorization associated with the dictionary |
| attack lockout reset |
| |
| TPM_RH_ENDORSEMENT |
| |
| 0x4000000B |
| |
| K, A, P |
| |
| references the Endorsement Primary |
| endorsementAuth, and endorsementPolicy |
| |
| TPM_RH_PLATFORM |
| |
| 0x4000000C |
| |
| K, A, P |
| |
| references the Platform Primary Seed (PPS), platformAuth, |
| and platformPolicy |
| |
| TPM_RH_PLATFORM_NV |
| |
| 0x4000000D |
| |
| C |
| |
| for phEnableNV |
| |
| R |
| |
| the top of the reserved handle area |
| This is set to allow TPM2_GetCapability() to know where to |
| stop. It may vary as implementations add to the permanent |
| handle area. |
| |
| TPM_RH_LAST |
| |
| 0x4000000D |
| |
| Comments |
| |
| not used |
| |
| 1 |
| |
| handle references the Storage Primary Seed (SPS), the |
| ownerAuth, and the ownerPolicy |
| |
| used |
| |
| to |
| |
| indicate |
| |
| a |
| |
| password |
| |
| Seed |
| |
| (EPS), |
| |
| Type definitions: |
| R – a reserved value |
| K – a Primary Seed |
| A – an authorization value |
| P – a policy value |
| S – a session handle |
| C - a controlNote 1 The handle is only used in a TPM that is compatible with a previous version of this specification. It is not used |
| in any command defined in this version of the specification. |
| |
| Page 52 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| 7.5 |
| |
| Part 2: Structures |
| |
| TPM_HC (Handle Value Constants) |
| |
| The definitions in Table 28 are used to define many of the interface data types. However, the values of |
| these constants, other than PCR_FIRST, are informative and may be changed by an implementation as |
| long as the values stay within the prescribed ranges for the handle type. |
| NOTE |
| |
| PCR0 is architecturally defined to have a handle value of 0. |
| |
| For the reference implementation, the handle range for sessions starts at the lowest allowed value for a |
| session handle. The highest value for a session handle is determined by how many active sessions are |
| allowed by the implementation. The MSO of the session handle will be set according to the session type. |
| A similar approach is used for transient objects with the first assigned handle at the bottom of the range |
| defined by TPM_HT_TRANSIENT and the top of the range determined by the implementation-dependent |
| value of MAX_LOADED_OBJECTS. |
| The first assigned handle for evict objects is also at the bottom of the allowed range defined by |
| TPM_HT_PERSISTENT and the top of the range determined by the implementation-dependent value of |
| MAX_EVICT_OBJECTS. |
| NOTE |
| |
| The values in Table 28 are intended to facilitate the process of making the handle larger than 32 bits in |
| the future. It is intended that HR_MASK and HR_SHIFT are the only values that need change to resize |
| the handle space. |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 53 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| Table 28 — Definition of (TPM_HANDLE) TPM_HC Constants <IN, S> |
| Name |
| |
| Value |
| |
| Comments |
| |
| HR_HANDLE_MASK |
| |
| 0x00FFFFFF |
| |
| to mask off the HR |
| |
| HR_RANGE_MASK |
| |
| 0xFF000000 |
| |
| to mask off the variable |
| part |
| |
| HR_SHIFT |
| |
| 24 |
| |
| HR_PCR |
| |
| (TPM_HT_PCR << HR_SHIFT) |
| |
| HR_HMAC_SESSION |
| |
| (TPM_HT_HMAC_SESSION << HR_SHIFT) |
| |
| HR_POLICY_SESSION |
| |
| (TPM_HT_POLICY_SESSION << HR_SHIFT) |
| |
| HR_TRANSIENT |
| |
| (TPM_HT_TRANSIENT << HR_SHIFT) |
| |
| HR_PERSISTENT |
| |
| (TPM_HT_PERSISTENT << HR_SHIFT) |
| |
| HR_NV_INDEX |
| |
| (TPM_HT_NV_INDEX << HR_SHIFT) |
| |
| HR_PERMANENT |
| |
| (TPM_HT_PERMANENT << HR_SHIFT) |
| |
| PCR_FIRST |
| |
| (HR_PCR + 0) |
| |
| first PCR |
| |
| PCR_LAST |
| |
| (PCR_FIRST + IMPLEMENTATION_PCR-1) |
| |
| last PCR |
| |
| HMAC_SESSION_FIRST |
| |
| (HR_HMAC_SESSION + 0) |
| |
| first HMAC session |
| |
| HMAC_SESSION_LAST |
| |
| (HMAC_SESSION_FIRST+MAX_ACTIVE_SESSIONS-1) |
| |
| last HMAC session |
| |
| LOADED_SESSION_FIRST HMAC_SESSION_FIRST |
| |
| used in GetCapability |
| |
| LOADED_SESSION_LAST |
| |
| HMAC_SESSION_LAST |
| |
| used in GetCapability |
| |
| POLICY_SESSION_FIRST |
| |
| (HR_POLICY_SESSION + 0) |
| |
| first policy session |
| |
| POLICY_SESSION_LAST |
| |
| (POLICY_SESSION_FIRST + MAX_ACTIVE_SESSIONS-1) last policy session |
| |
| TRANSIENT_FIRST |
| |
| (HR_TRANSIENT + 0) |
| |
| first transient object |
| |
| ACTIVE_SESSION_FIRST |
| |
| POLICY_SESSION_FIRST |
| |
| used in GetCapability |
| |
| ACTIVE_SESSION_LAST |
| |
| POLICY_SESSION_LAST |
| |
| used in GetCapability |
| |
| TRANSIENT_LAST |
| |
| (TRANSIENT_FIRST+MAX_LOADED_OBJECTS-1) |
| |
| last transient object |
| |
| PERSISTENT_FIRST |
| |
| (HR_PERSISTENT + 0) |
| |
| first persistent object |
| |
| PERSISTENT_LAST |
| |
| (PERSISTENT_FIRST + 0x00FFFFFF) |
| |
| last persistent object |
| |
| PLATFORM_PERSISTENT |
| |
| (PERSISTENT_FIRST + 0x00800000) |
| |
| first platform persistent |
| object |
| |
| NV_INDEX_FIRST |
| |
| (HR_NV_INDEX + 0) |
| |
| first allowed NV Index |
| |
| NV_INDEX_LAST |
| |
| (NV_INDEX_FIRST + 0x00FFFFFF) |
| |
| last allowed NV Index |
| |
| PERMANENT_FIRST |
| |
| TPM_RH_FIRST |
| |
| PERMANENT_LAST |
| |
| TPM_RH_LAST |
| |
| Page 54 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| Attribute Structures |
| |
| 8 |
| 8.1 |
| |
| Description |
| |
| Attributes are expressed as bit fields of varying size. An attribute field structure may be 1, 2, or 4 octets in |
| length. |
| The bit numbers for an attribute structure are assigned with the number 0 assigned to the least-significant |
| bit of the structure and the highest number assigned to the most-significant bit of the structure. |
| The least significant bit is determined by treating the attribute structure as an integer. The least-significant |
| bit would be the bit that is set when the value of the integer is 1. |
| When any reserved bit in an attribute is SET, the TPM shall return TPM_RC_RESERVED_BITS. This |
| response code is not shown in the tables for attributes. |
| 8.2 |
| |
| TPMA_ALGORITHM |
| |
| This structure defines the attributes of an algorithm. |
| Each algorithm has a fundamental attribute: asymmetric, symmetric, or hash. In some cases (e.g., |
| TPM_ALG_RSA or TPM_ALG_AES), this is the only attribute. |
| A mode, method, or scheme may have an associated asymmetric, symmetric, or hash algorithm. |
| Table 29 — Definition of (UINT32) TPMA_ALGORITHM Bits |
| Bit |
| |
| Name |
| |
| Definition |
| |
| 0 |
| |
| asymmetric |
| |
| SET (1): an asymmetric algorithm with public and private portions |
| CLEAR (0): not an asymmetric algorithm |
| |
| 1 |
| |
| symmetric |
| |
| SET (1): a symmetric block cipher |
| CLEAR (0): not a symmetric block cipher |
| |
| 2 |
| |
| hash |
| |
| SET (1): a hash algorithm |
| CLEAR (0): not a hash algorithm |
| |
| 3 |
| |
| object |
| |
| SET (1): an algorithm that may be used as an object type |
| CLEAR (0): an algorithm that is not used as an object type |
| |
| 7:4 |
| |
| Reserved |
| |
| 8 |
| |
| signing |
| |
| SET (1): a signing algorithm. The setting of asymmetric, symmetric, and hash |
| will indicate the type of signing algorithm. |
| CLEAR (0): not a signing algorithm |
| |
| 9 |
| |
| encrypting |
| |
| SET (1): an encryption/decryption algorithm. The setting of asymmetric, |
| symmetric, and hash will indicate the type of encryption/decryption algorithm. |
| CLEAR (0): not an encryption/decryption algorithm |
| |
| 10 |
| |
| method |
| |
| SET (1): a method such as a key derivative function (KDF) |
| CLEAR (0): not a method |
| |
| 31:11 Reserved |
| |
| 8.3 |
| 8.3.1 |
| |
| TPMA_OBJECT (Object Attributes) |
| Introduction |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 55 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| This attribute structure indicates an object’s use, its authorization types, and it relationship to other |
| objects. |
| The state of the attributes is determined when the object is created and they are never changed by the |
| TPM. Additionally, the setting of these structures is reflected in the integrity value of the private area of an |
| object in order to allow the TPM to detect modifications of the Protected Object when stored off the TPM. |
| 8.3.2 |
| |
| Structure Definition |
| Table 30 — Definition of (UINT32) TPMA_OBJECT Bits |
| |
| Bit |
| |
| Name |
| |
| Definition |
| |
| 0 |
| |
| Reserved |
| |
| shall be zero |
| |
| 1 |
| |
| fixedTPM |
| |
| SET (1): The hierarchy of the object, as indicated by its Qualified Name, may |
| not change. |
| CLEAR (0): The hierarchy of the object may change as a result of this object or |
| an ancestor key being duplicated for use in another hierarchy. |
| |
| 2 |
| |
| stClear |
| |
| SET (1): Previously saved contexts of this object may not be loaded after |
| Startup(CLEAR). |
| CLEAR (0): Saved contexts of this object may be used after a |
| Shutdown(STATE) and subsequent Startup(). |
| |
| 3 |
| |
| Reserved |
| |
| shall be zero |
| |
| 4 |
| |
| fixedParent |
| |
| SET (1): The parent of the object may not change. |
| CLEAR (0): The parent of the object may change as the result of a |
| TPM2_Duplicate() of the object. |
| |
| 5 |
| |
| sensitiveDataOrigin |
| |
| SET (1): Indicates that, when the object was created with TPM2_Create() or |
| TPM2_CreatePrimary(), the TPM generated all of the sensitive data other than |
| the authValue. |
| CLEAR (0): A portion of the sensitive data, other than the authValue, was |
| provided by the caller. |
| |
| 6 |
| |
| userWithAuth |
| |
| SET (1): Approval of USER role actions with this object may be with an HMAC |
| session or with a password using the authValue of the object or a policy |
| session. |
| CLEAR (0): Approval of USER role actions with this object may only be done |
| with a policy session. |
| |
| 7 |
| |
| adminWithPolicy |
| |
| SET (1): Approval of ADMIN role actions with this object may only be done with |
| a policy session. |
| CLEAR (0): Approval of ADMIN role actions with this object may be with an |
| HMAC session or with a password using the authValue of the object or a policy |
| session. |
| |
| 9:8 |
| |
| Reserved |
| |
| shall be zero |
| |
| 10 |
| |
| noDA |
| |
| SET (1): The object is not subject to dictionary attack protections. |
| CLEAR (0): The object is subject to dictionary attack protections. |
| |
| 11 |
| |
| encryptedDuplication |
| |
| SET (1): If the object is duplicated, then symmetricAlg shall not be |
| TPM_ALG_NULL and newParentHandle shall not be TPM_RH_NULL. |
| CLEAR (0): The object may be duplicated without an inner wrapper on the |
| private portion of the object and the new parent may be TPM_RH_NULL. |
| |
| 15:12 Reserved |
| 16 |
| |
| restricted |
| |
| Page 56 |
| October 31, 2013 |
| |
| shall be zero |
| SET (1): Key usage is restricted to manipulate structures of known format; the |
| parent of this key shall have restricted SET. |
| CLEAR (0): Key usage is not restricted to use on special formats. |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| Bit |
| |
| Name |
| |
| Definition |
| |
| 17 |
| |
| decrypt |
| |
| SET (1): The private portion of the key may be used to decrypt. |
| CLEAR (0): The private portion of the key may not be used to decrypt. |
| |
| 18 |
| |
| sign |
| |
| SET (1): The private portion of the key may be used to sign. |
| CLEAR (0): The private portion of the key may not be used to sign. |
| |
| 31:19 Reserved |
| |
| 8.3.3 |
| 8.3.3.1 |
| |
| shall be zero |
| |
| Attribute Descriptions |
| Introduction |
| |
| The following remaining paragraphs in this clause describe the use and settings for each of the |
| TPMA_OBJECT attributes. The description includes checks that are performed on the objectAttributes |
| when an object is created, when it is loaded, and when it is imported. In these descriptions: |
| Creation – |
| |
| indicates |
| settings |
| for |
| TPM2_CreatePrimary() |
| |
| the |
| |
| template |
| |
| parameter |
| |
| in |
| |
| TPM2_Create() |
| |
| or |
| |
| Load |
| |
| – |
| |
| indicates settings for the inPublic parameter in TPM2_Load() |
| |
| Import |
| |
| – |
| |
| indicates settings for the objectPublic parameter in TPM2_Import() |
| |
| External |
| |
| – |
| |
| indicates settings that apply to the inPublic parameter in TPM2_LoadExternal() if both the |
| public and sensitive portions of the object are loaded |
| |
| NOTE |
| |
| For TPM2_LoadExternal() when only the public portion of the object is loaded, the only attribute checks |
| are the checks in the validation code following Table 30 and the reserved attributes check. |
| |
| For any consistency error of attributes in TPMA_OBJECT, the TPM shall return TPM_RC_ATTRIBUTES. |
| 8.3.3.2 |
| |
| Bit[1] – fixedTPM |
| |
| When SET, the object cannot be duplicated for use on a different TPM, either directly or indirectly and the |
| Qualified Name of the object cannot change. When CLEAR, the object’s Qualified Name may change if |
| the object or an ancestor is duplicated. |
| NOTE |
| |
| This attribute is the logical inverse of the migratable attribute in 1.2. That is, when this attribute is C LEAR, |
| it is the equivalent to a 1.2 object with migratable SET. |
| |
| Creation – |
| |
| If fixedTPM is SET in the object's parent, then fixedTPM and fixedParent shall both be |
| set to the same value in template. If fixedTPM is CLEAR in the parent, this attribute shall |
| also be CLEAR in template. |
| NOTE |
| |
| For a Primary Object, the parent is considered to have fixedTPM SET. |
| |
| Load |
| |
| – |
| |
| If fixedTPM is SET in the object's parent, then fixedTPM and fixedParent shall both be |
| set to the same value. If fixedTPM is CLEAR in the parent, this attribute shall also be |
| CLEAR. |
| |
| Import |
| |
| – |
| |
| shall be CLEAR |
| |
| External |
| |
| – |
| |
| shall be CLEAR if both the public and sensitive portions are loaded or if fixedParent is |
| CLEAR, otherwise may be SET or CLEAR |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 57 |
| October 31, 2013 |
| |
| Part 2: Structures |
| 8.3.3.3 |
| |
| Trusted Platform Module Library |
| |
| Bit[2] – stClear |
| |
| If this attribute is SET, then saved contexts of this object will be invalidated on |
| TPM2_Startup(TPM_SU_CLEAR). If the attribute is CLEAR, then the TPM shall not invalidate the saved |
| context if the TPM received TPM2_Shutdown(TPM_SU_STATE). If the saved state is valid when checked |
| at the next TPM2_Startup(), then the TPM shall continue to be able to use the saved contexts. |
| Creation – |
| |
| may be SET or CLEAR in template |
| |
| Load |
| |
| – |
| |
| may be SET or CLEAR |
| |
| Import |
| |
| – |
| |
| may be SET or CLEAR |
| |
| External |
| |
| – |
| |
| may be SET or CLEAR |
| |
| 8.3.3.4 |
| |
| Bit[4] – fixedParent |
| |
| If this attribute is SET, the object’s parent may not be changed. That is, this object may not be the object |
| of a TPM2_Duplicate(). If this attribute is CLEAR, then this object may be the object of a |
| TPM2_Duplicate(). |
| Creation – |
| |
| may be SET or CLEAR in template |
| |
| Load |
| |
| – |
| |
| may be SET or CLEAR |
| |
| Import |
| |
| – |
| |
| shall be CLEAR |
| |
| External |
| |
| – |
| |
| shall be CLEAR if both the public and sensitive portions are loaded; otherwise it may be |
| SET or CLEAR |
| |
| 8.3.3.5 |
| |
| Bit[5] – sensitiveDataOrigin |
| |
| This attribute is SET for any key that was generated by TPM in TPM2_Create() or |
| TPM2_CreatePrimary(). If CLEAR, it indicates that the sensitive part of the object (other than the |
| obfuscation value) was provided by the caller. |
| NOTE 1 |
| |
| If the fixedTPM attribute is SET, then this attribute is authoritative and accurately reflects the source of |
| the sensitive area data. If the fixedTPM attribute is CLEAR, then validation of this attribute requires |
| evaluation of the properties of the ancestor keys. |
| |
| Creation – |
| |
| If inSensitive.sensitive.data.size is zero, then this attribute shall be SET in the template; |
| otherwise, it shall be CLEAR in the template. |
| |
| NOTE 2 |
| |
| The inSensitive.sensitive.data.size parameter is required to be zero for an asymmetric key so |
| sensitiveDataOrigin is required to be SET. |
| |
| NOTE 3 |
| |
| The inSensitive.sensitive.data.size parameter may not be zero for a data object so sensitiveDataOrigin is |
| required to be CLEAR. A data object has type = TPM_ALG_KEYEDHASH and its sign and decrypt |
| attributes are CLEAR. |
| |
| Load |
| |
| – |
| |
| may be SET or CLEAR |
| |
| Import |
| |
| – |
| |
| may be SET or CLEAR |
| |
| External |
| |
| – |
| |
| may be SET or CLEAR |
| |
| Page 58 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| 8.3.3.6 |
| |
| Part 2: Structures |
| |
| Bit[6] – userWithAuth |
| |
| If SET, authorization for operations that require USER role authorization may be given if the caller |
| provides proof of knowledge of the authValue of the object with an HMAC authorization session or a |
| password. |
| If this attribute is CLEAR, then then HMAC or password authorizations may not be used for USER role |
| authorizations. |
| NOTE 1 |
| |
| Regardless of the setting of this attribute, authorizations for operations th at require USER role |
| authorizations may be provided with a policy session that satisfies the object's authPolicy. |
| |
| NOTE 2 |
| |
| Regardless of the setting of this attribute, the authValue may be referenced in a policy session or used to |
| provide the bind value in TPM2_StartAuthSession(). However, if userWithAuth is CLEAR, then the object |
| may be used as the bind object in TPM2_StartAuthSession() but the session cannot be used to authorize |
| actions on the object. If this were allowed, then the userWithAuth control could be circumvented simply by |
| using the object as the bind object. |
| |
| Creation – |
| |
| may be SET or CLEAR in template |
| |
| Load |
| |
| – |
| |
| may be SET or CLEAR |
| |
| Import |
| |
| – |
| |
| may be SET or CLEAR |
| |
| External |
| |
| – |
| |
| may be SET or CLEAR |
| |
| 8.3.3.7 |
| |
| Bit[7] – adminWithPolicy |
| |
| If CLEAR, authorization for operations that require ADMIN role may be given if the caller provides proof of |
| knowledge of the authValue of the object with an HMAC authorization session or a password. |
| If this attribute is SET, then then HMAC or password authorizations may not be used for ADMIN role |
| authorizations. |
| NOTE 1 |
| |
| Regardless of the setting of this attribute, operations that require ADMIN role authorization may be |
| provided by a policy session that satisfies the object's authPolicy. |
| |
| NOTE 2 |
| |
| This attribute is similar to userWithAuth but the logic is a bit different. When userWithAuth is CLEAR, the |
| authValue may not be used for USER mode authorizations. When adminWithPolicy is CLEAR, it means |
| that the authValue may be used for ADMIN role. Policy may always be used regardless of t he setting of |
| userWithAuth or adminWithPolicy. |
| |
| Actions that always require policy (TPM2_Duplicate()) are not affected by the setting of this attribute. |
| Creation – |
| |
| may be SET or CLEAR in template |
| |
| Load |
| |
| – |
| |
| may be SET or CLEAR |
| |
| Import |
| |
| – |
| |
| may be SET or CLEAR |
| |
| External |
| |
| – |
| |
| may be SET or CLEAR |
| |
| 8.3.3.8 |
| |
| Bit[10] – noDA |
| |
| If SET, then authorization failures for the object do not affect the dictionary attack protection logic and |
| authorization of the object is not blocked if the TPM is in lockout. |
| Creation – |
| |
| may be SET or CLEAR in template |
| |
| Load |
| |
| – |
| |
| may be SET or CLEAR |
| |
| Import |
| |
| – |
| |
| may be SET or CLEAR |
| |
| External |
| |
| – |
| |
| may be SET or CLEAR |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 59 |
| October 31, 2013 |
| |
| Part 2: Structures |
| 8.3.3.9 |
| |
| Trusted Platform Module Library |
| |
| Bit[11] – encryptedDuplication |
| |
| If SET, then when the object is duplicated, the sensitive portion of the object is required to be encrypted |
| with an inner wrapper and the new parent shall be an asymmetric key and not TPM_RH_NULL |
| NOTE 1 |
| |
| Enforcement of these requirements in TPM2_Duplicate() is by not allowing symmetricAlg to be |
| TPM_ALG_NULL and newParentHandle may not be TPM_RH_NULL. |
| |
| This attribute shall not be SET in any object that has fixedTPM SET. |
| NOTE 2 |
| |
| This requirement means that encryptedDuplication may not be SET if the object cannot be directly or |
| indirectly duplicated. |
| |
| If an object's parent has fixedTPM SET, and the object is duplicable (fixedParent == CLEAR), then |
| encryptedDuplication may be SET or CLEAR in the object. |
| NOTE 3 |
| |
| This allows the object at the boundary between duplicable and non -duplicable objects to have either |
| setting. |
| |
| If an object's parent has fixedTPM CLEAR, then the object is required to have the same setting of |
| encryptedDuplication as its parent. |
| NOTE 4 |
| |
| This requirement forces all |
| encryptedDuplication setting. |
| |
| duplicable |
| |
| objects |
| |
| in |
| |
| a |
| |
| duplication |
| |
| group |
| |
| to |
| |
| have |
| |
| the |
| |
| same |
| |
| Creation – |
| |
| shall be CLEAR if fixedTPM is SET. If fixedTPM is CLEAR, then this attribute shall have |
| the same value as its parent unless fixedTPM is SET in the object's parent, in which |
| case, it may be SET or CLEAR. |
| |
| Load |
| |
| – |
| |
| shall be CLEAR if fixedTPM is SET. If fixedTPM is CLEAR, then this attribute shall have |
| the same value as its parent, unless fixedTPM is SET the parent, in which case, it may |
| be SET or CLEAR. |
| |
| Import |
| |
| – |
| |
| if fixedTPM is SET in the object's new parent, then this attribute may be SET or CLEAR, |
| otherwise, it shall have the same setting as the new parent. |
| |
| External |
| |
| – |
| |
| may be SET or CLEAR. |
| |
| 8.3.3.10 |
| |
| Bit[16] – restricted |
| |
| This this attribute modifies the decrypt and sign attributes of an object. |
| NOTE |
| |
| A key with this object CLEAR may not be a parent for another object. |
| |
| Creation – |
| |
| shall be CLEAR in template if neither sign nor decrypt is SET in template. |
| |
| Load |
| |
| – |
| |
| shall be CLEAR if neither sign nor decrypt is SET in the object |
| |
| Import |
| |
| – |
| |
| may be SET or CLEAR |
| |
| External |
| |
| – |
| |
| shall be CLEAR |
| |
| Page 60 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| 8.3.3.11 |
| |
| Part 2: Structures |
| |
| Bit[17] – decrypt |
| |
| When SET, the private portion of this key can be used to decrypt an external blob. If restricted is SET, |
| then the TPM will return an error if the external decrypted blob is not formatted as appropriate for the |
| command. |
| NOTE 1 |
| |
| Since TPM-generated keys and sealed data will contain a hash and a structure tag, the TPM can ensure |
| that it is not being used to improperly decrypt and return sensitive data that should not be returned. The |
| only type of data that may be returned after decryption is a Sealed Data Object (a keyedHash object with |
| decrypt and sign CLEAR). |
| |
| When restricted is CLEAR, there are no restrictions on the use of the private portion of the key for |
| decryption and the key may be used to decrypt and return any structure encrypted by the public portion of |
| the key. |
| NOTE 2 |
| |
| A key with this attribute SET may be a parent for another object if restricted is SET and sign is CLEAR. |
| |
| If decrypt is SET on an object with type set to TPM_ALG_KEYEDHASH, it indicates that the object is an |
| XOR encryption key. |
| Creation – |
| |
| may be SET or CLEAR in template |
| |
| Load |
| |
| – |
| |
| may be SET or CLEAR |
| |
| Import |
| |
| – |
| |
| may be SET or CLEAR |
| |
| External |
| |
| – |
| |
| may be SET or CLEAR |
| |
| 8.3.3.12 |
| |
| Bit[18] – sign |
| |
| When this attribute is SET, the private portion of this key may be used to sign a digest. If restricted is |
| SET, then the key may only be used to sign a digest that was computed by the TPM. A restricted signing |
| key may be used to sign a TPM-generated digest. If a structure is generated by the TPM, it will begin with |
| TPM_GENERATED_VALUE and the TPM may sign the digest of that structure. If the data is externally |
| supplied and has TPM_GENERATED_VALUE as its first octets, then the TPM will not sign a digest of |
| that data with a restricted signing key. |
| If restricted is CLEAR, then the key may be used to sign any digest, whether generated by the TPM or |
| externally provided. |
| NOTE 1 |
| |
| Some asymmetric algorithms may not support both sign and decrypt being SET in the same key. |
| |
| If sign is SET on an object with type set to TPM_ALG_KEYEDHASH, it indicates that the object is an |
| HMAC key. |
| NOTE 2 |
| |
| A key with this attribute SET may not be a parent for another object. |
| |
| Creation – |
| |
| shall not be SET if decrypt and restricted are both SET |
| |
| Load |
| |
| – |
| |
| shall not be SET if decrypt and restricted are both SET |
| |
| Import |
| |
| – |
| |
| shall not be SET if decrypt and restricted are both SET |
| |
| External |
| |
| – |
| |
| shall not be SET if decrypt and restricted are both SET |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 61 |
| October 31, 2013 |
| |
| Part 2: Structures |
| 8.4 |
| |
| Trusted Platform Module Library |
| |
| TPMA_SESSION (Session Attributes) |
| |
| This octet in each session is used to identify the session type, indicate its relationship to any handles in |
| the command, and indicate its use in parameter encryption. |
| Table 31 — Definition of (UINT8) TPMA_SESSION Bits <IN/OUT> |
| Bit |
| |
| Name |
| |
| Meaning |
| |
| 0 |
| |
| continueSession |
| |
| SET (1): In a command, this setting indicates that the session is to remain active |
| after successful completion of the command. In a response, it indicates that the |
| session is still active. If SET in the command, this attribute shall be SET in the |
| response. |
| CLEAR (0): In a command, this setting indicates that the TPM should close the |
| session and flush any related context when the command completes successfully. In |
| a response, it indicates that the session is closed and the context is no longer active. |
| This attribute has no meaning for a password authorization and the TPM will allow |
| any setting of the attribute in the command and SET the attribute in the response. |
| This attribute will only be CLEAR in one response for a logical session. If the attribute |
| is CLEAR, the context associated with the session is no longer in use and the space |
| is available. A session created after another session is ended may have the same |
| handle but logically is not the same session. |
| This attribute has no effect if the command does not complete successfully. |
| |
| 1 |
| |
| auditExclusive |
| |
| SET (1): In a command, this setting indicates that the command should only be |
| executed if the session is exclusive at the start of the command. In a response, it |
| indicates that the session is exclusive. This setting is only allowed if the audit |
| attribute is SET. |
| CLEAR (0): If audit is CLEAR, then this field is reserved but the error is |
| TPM_RC_ATTRIBUTES rather than TPM_RC_RESERVED_BITS. |
| See "Exclusive Audit Session" clause in Part 1. |
| |
| 2 |
| |
| auditReset |
| |
| SET (1): In a command, this setting indicates that the audit digest of the session |
| should be initialized and the exclusive status of the session SET. |
| CLEAR (0): If audit is CLEAR, then this field is reserved but the error is |
| TPM_RC_ATTRIBUTES rather than TPM_RC_RESERVED_BITS. This setting is |
| always used for a response. |
| |
| 4:3 |
| |
| Reserved |
| |
| shall be CLEAR |
| |
| decrypt |
| |
| SET (1): In a command, this setting indicates that the first parameter in the command |
| is symmetrically encrypted using the parameter encryption scheme described in Part |
| 1. The TPM will decrypt the parameter after performing any HMAC computations and |
| before unmarshaling the parameter. In a response, the attribute is copied from the |
| request but has no effect on the response. |
| CLEAR (0): Session not used for encryption. |
| |
| 5 |
| |
| For a password authorization, this attribute will be CLEAR in both the command and |
| response. |
| This attribute may only be SET in one session per command. |
| This attribute may be SET in a session that is not associated with a command |
| handle. Such a session is provided for purposes of encrypting a parameter and not |
| for authorization. |
| This attribute may be SET in combination with any other session attributes. |
| This attribute may only be SET if the first parameter of the command is a sized buffer |
| (TPM2B_). |
| |
| Page 62 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| Bit |
| |
| Name |
| |
| Meaning |
| |
| 6 |
| |
| encrypt |
| |
| SET (1): In a command, this setting indicates that the TPM should use this session to |
| encrypt the first parameter in the response. In a response, it indicates that the |
| attribute was set in the command and that the TPM used the session to encrypt the |
| first parameter in the response using the parameter encryption scheme described in |
| Part 1 of this specification. |
| CLEAR (0): Session not used for encryption. |
| For a password authorization, this attribute will be CLEAR in both the command and |
| response. |
| This attribute may only be SET in one session per command. |
| This attribute may be SET in a session that is not associated with a command |
| handle. Such a session is provided for purposes of encrypting a parameter and not |
| for authorization. |
| This attribute may only be SET if the first parameter of a response is a sized buffer |
| (TPM2B_). |
| |
| 7 |
| |
| SET (1): In a command or response, this setting indicates that the session is for audit |
| and that auditExclusive and auditReset have meaning. This session may also be |
| used for authorization, encryption, or decryption. The encrypted and encrypt fields |
| may be SET or CLEAR. |
| CLEAR (0): Session is not used for audit. |
| |
| audit |
| |
| This attribute may only be SET in one session per command or response. If SET in |
| the command, then this attribute will be SET in the response. |
| |
| 8.5 |
| |
| TPMA_LOCALITY (Locality Attribute) |
| |
| In a TPMS_CREATION_DATA structure, this structure is used to indicate the locality of the command that |
| created the object. No more than one of the locality attributes shall be set in the creation data. |
| When used in TPM2_PolicyLocality(), this structure indicates which localities are approved by the policy. |
| When a policy is started, all localities are allowed. If TPM2_PolicyLocality() is executed, it indicates that |
| the command may only be executed at specific localities. More than one locality may be selected. |
| EXAMPLE 1 |
| |
| TPM_LOC_TWO would indicate that only locality 2 is authorized. |
| |
| EXAMPLE 2 |
| |
| TPM_LOC_ONE + TPM_LOC_TWO would indicate that locality 1 or 2 is authorized. |
| |
| EXAMPLE 3 |
| |
| TPM_LOC_FOUR + TPM_LOC_THREE would indicate that localities 3 or 4 are authorized. |
| |
| EXAMPLE 4 |
| |
| A value of 21 16 would represent a locality of 33. |
| |
| NOTE |
| |
| Locality values of 5 through 31 are not selectable. |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 63 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| If Extended is non-zero, then an extended locality is indicated and the TPMA_LOCALITY contains an |
| integer value. |
| Table 32 — Definition of (UINT8) TPMA_LOCALITY Bits <IN/OUT> |
| Bit |
| |
| Name |
| |
| Definition |
| |
| 0 |
| |
| TPM_LOC_ZERO |
| |
| 1 |
| |
| TPM_LOC_ONE |
| |
| 2 |
| |
| TPM_LOC_TWO |
| |
| 3 |
| |
| TPM_LOC_THREE |
| |
| 4 |
| |
| TPM_LOC_FOUR |
| |
| 7:5 |
| |
| 8.6 |
| |
| Extended |
| |
| If any of these bits is set, an extended locality is indicated |
| |
| TPMA_PERMANENT |
| |
| The attributes in this structure are persistent and are not changed as a result of _TPM_Init or any |
| TPM2_Startup(). Some of the attributes in this structure may change as the result of specific Protected |
| Capabilities. |
| This |
| structure |
| may |
| be |
| read |
| using |
| TPM2_GetCapability(capability |
| = |
| TPM_CAP_TPM_PROPERTIES, property = TPM_PT_PERMANENT). |
| Table 33 — Definition of (UINT32) TPMA_PERMANENT Bits <OUT> |
| Bit |
| |
| Parameter |
| |
| Description |
| |
| 0 |
| |
| ownerAuthSet |
| |
| SET (1): TPM2_HierarchyChangeAuth() with ownerAuth has been executed since |
| the last TPM2_Clear(). |
| CLEAR (0): ownerAuth has not been changed since TPM2_Clear(). |
| |
| 1 |
| |
| endorsementAuthSet |
| |
| SET (1): TPM2_HierarchyChangeAuth() with endorsementAuth has been executed |
| since the last TPM2_Clear(). |
| CLEAR (0): endorsementAuth has not been changed since TPM2_Clear(). |
| |
| 2 |
| |
| lockoutAuthSet |
| |
| SET (1): TPM2_HierarchyChangeAuth() with lockoutAuth has been executed since |
| the last TPM2_Clear(). |
| CLEAR (0): lockoutAuth has not been changed since TPM2_Clear(). |
| |
| 7:3 |
| 8 |
| |
| Reserved |
| disableClear |
| |
| SET (1): TPM2_Clear() is disabled. |
| CLEAR (0): TPM2_Clear() is enabled. |
| NOTE |
| |
| See “TPM2_ClearControl” in Part 3 of this specification for details on changing |
| this attribute. |
| |
| 9 |
| |
| inLockout |
| |
| SET (1): The TPM is in lockout and commands that require authorization with other |
| than platformAuth will not succeed. |
| |
| 10 |
| |
| tpmGeneratedEPS |
| |
| SET (1): The EPS was created by the TPM. |
| CLEAR (0): The EPS was created outside of the TPM using a manufacturerspecific process. |
| |
| 31:11 Reserved |
| |
| Page 64 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| 8.7 |
| |
| Part 2: Structures |
| |
| TPMA_STARTUP_CLEAR |
| |
| These attributes are set to their default state on reset on each TPM Reset or TPM Restart. The attributes |
| are preserved on TPM Resume. |
| On each TPM2_Startup(TPM_SU_CLEAR), the TPM will set these attributes to their indicated defaults. |
| This structure may be read using TPM2_GetCapability(capability = TPM_CAP_TPM_PROPERTIES, |
| property = TPM_PT_STARTUP_CLEAR). |
| Some of attributes may be changed as the result of specific Protected Capabilities. |
| Table 34 — Definition of (UINT32) TPMA_STARTUP_CLEAR Bits <OUT> |
| Bit |
| 0 |
| |
| Parameter |
| |
| Description |
| |
| phEnable |
| |
| SET (1): (default) The platform hierarchy is enabled and platformAuth or |
| platformPolicy may be used for authorization. |
| CLEAR (0): platformAuth and platformPolicy may not be used for authorizations, |
| and objects in the platform hierarchy, including NV Indexes and persistent objects, |
| cannot be used. |
| NOTE |
| |
| 1 |
| |
| shEnable |
| |
| SET (1): (default) The Storage hierarchy is enabled and ownerAuth or ownerPolicy |
| may be used for authorization. |
| CLEAR (0): ownerAuth and ownerPolicy may not be used for authorizations, and |
| objects in the Storage hierarchy, including NV Indexes and persistent objects, |
| cannot be used. |
| NOTE |
| |
| 2 |
| |
| ehEnable |
| |
| phEnableNV |
| |
| See “TPM2_HierarchyControl” in Part 3 of this specification for details on |
| changing this attribute. |
| |
| SET (1): (default) The EPS hierarchy is enabled and endorsementAuth may be |
| used to authorize commands. |
| CLEAR (0): endorsementAuth and endorsementPolicy may not be used for |
| authorizations, and objects in the endorsement hierarchy, including persistent |
| objects, cannot be used. |
| NOTE |
| |
| 3 |
| |
| See “TPM2_HierarchyControl” in Part 3 of this specification for details on |
| changing this attribute. |
| |
| See “TPM2_HierarchyControl” in Part 3 of this specification for details on |
| changing this attribute. |
| |
| SET (1): (default) NV indices that have TPMA_PLATFORM_CREATE SET may be |
| read or written. The platform can create define and undefine indices. |
| CLEAR (0): NV indices that have TPMA_PLATFORM_CREATE SET may not be |
| read or written (TPM_RC_HANDLE). The platform cannot |
| define |
| (TPM_RC_HIERARCHY) or undefined (TPM_RC_HANDLE) indices. |
| NOTE |
| See “TPM2_HierarchyControl” in Part 3 of this specification for details on changing |
| this attribute. |
| NOTE |
| read refers to these commands: TPM2_NV_Read, TPM2_NV_ReadPublic, TPM_NV_Certify, |
| TPM2_PolicyNV |
| write refers to thse commands: TPM2_NV_Write, TPM2_NV_Increment, TPM2_NV_Extend, |
| TPM2_NV_SetBits |
| NOTE The TPM must query the index TPMA_PLATFORM_CREATE attribute to determine |
| whether phEnableNV is applicable. Since the TPM will return TPM_RC_HANDLE if the index |
| does not exist, it also returns this error code if the index is disabled. Otherwise, the TPM |
| would leak the existence of an index even when disabled. |
| |
| 30:4 Reserved |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| shall be zero |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 65 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| Bit |
| |
| Parameter |
| |
| Description |
| |
| 31 |
| |
| orderly |
| |
| SET (1): The TPM received a TPM2_Shutdown() and a matching TPM2_Startup(). |
| CLEAR (0): TPM2_Startup(TPM_SU_CLEAR) was not preceded by a |
| TPM2_Shutdown() of any type. |
| NOTE |
| |
| 8.8 |
| |
| A shutdown is orderly if the TPM receives a TPM2_Shutdown() of any type |
| followed by a TPM2_Startup() of any type. However, the TPM will return an error if |
| TPM2_Startup(TPM_SU_STATE) |
| was |
| not |
| preceded |
| by |
| TPM2_State_Save(TPM_SU_STATE). |
| |
| TPMA_MEMORY |
| |
| This structure of this attribute is used to report the memory management method used by the TPM for |
| transient |
| objects |
| and |
| authorization |
| sessions. |
| This |
| structure |
| may be |
| read |
| using |
| TPM2_GetCapability(capability = TPM_CAP_TPM_PROPERTIES, property = TPM_PT_MEMORY). |
| If the RAM memory is shared, then context save of a session may make it possible to load an additional |
| transient object. |
| Table 35 — Definition of (UINT32) TPMA_MEMORY Bits <Out> |
| Bit |
| |
| Name |
| |
| Definition |
| |
| 0 |
| |
| sharedRAM |
| |
| SET (1): indicates that the RAM memory used for authorization session |
| contexts is shared with the memory used for transient objects |
| CLEAR (0): indicates that the memory used for authorization sessions is not |
| shared with memory used for transient objects |
| |
| 1 |
| |
| sharedNV |
| |
| SET (1): indicates that the NV memory used for persistent objects is shared |
| with the NV memory used for NV Index values |
| CLEAR (0): indicates that the persistent objects and NV Index values are |
| allocated from separate sections of NV |
| |
| 2 |
| |
| objectCopiedToRam |
| |
| SET (1): indicates that the TPM copies persistent objects to a transient-object |
| slot in RAM when the persistent object is referenced in a command. The TRM |
| is required to make sure that an object slot is available. |
| CLEAR (0): indicates that the TPM does not use transient-object slots when |
| persistent objects are referenced |
| |
| 31:3 |
| |
| Reserved |
| |
| shall be zero |
| |
| Page 66 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| 8.9 |
| |
| Part 2: Structures |
| |
| TPMA_CC (Command Code Attributes) |
| |
| 8.9.1 |
| |
| Introduction |
| |
| This structure defines the attributes of a command from a context management perspective. The fields of |
| the structure indicate to the TPM Resource Manager (TRM) the number of resources required by a |
| command and how the command affects the TPM’s resources. |
| This structure is only used in a list returned by the TPM in response to TPM2_GetCapability(capability = |
| TPM_CAP_COMMANDS). |
| For a command to the TPM, only the commandIndex field and V attribute are allowed to be non-zero. |
| 8.9.2 |
| |
| Structure Definition |
| Table 36 — Definition of (TPM_CC) TPMA_CC Bits <OUT> |
| |
| Bit |
| 15:0 |
| |
| Name |
| |
| Definition |
| |
| commandIndex |
| |
| indicates the command being selected |
| |
| 21:16 Reserved |
| |
| shall be zero |
| |
| 22 |
| |
| nv |
| |
| SET (1): indicates that the command may write to NV |
| CLEAR (0): indicates that the command does not write to NV |
| |
| 23 |
| |
| extensive |
| |
| SET (1): This command could flush any number of loaded contexts. |
| CLEAR (0): no additional changes other than indicated by the flushed attribute |
| |
| 24 |
| |
| flushed |
| |
| SET (1): The context associated with any transient handle in the command will |
| be flushed when this command completes. |
| CLEAR (0): No context is flushed as a side effect of this command. |
| |
| 27:25 cHandles |
| |
| indicates the number of the handles in the handle area for this command |
| |
| 28 |
| |
| rHandle |
| |
| SET (1): indicates the presence of the handle area in the input |
| |
| 29 |
| |
| V |
| |
| SET (1): indicates that the command is vendor-specific |
| CLEAR (0): indicates that the command is defined in a version of this |
| specification |
| |
| 31:30 Res |
| |
| 8.9.3 |
| 8.9.3.1 |
| |
| allocated for software; shall be zero |
| |
| Field Descriptions |
| Bits[15:0] – commandIndex |
| |
| This is the command index of the command in the set of commands. The two sets are defined by the V |
| attribute. If V is zero, then the commandIndex shall be in the set of commands defined in a version of this |
| specification. If V is one, then the meaning of commandIndex is as determined by the TPM vendor. |
| 8.9.3.2 |
| |
| Bit[22] – nv |
| |
| If this attribute is SET, then the TPM may perform an NV write as part of the command actions. This write |
| is independent of any write that may occur as a result of dictionary attack protection. If this attribute is |
| CLEAR, then the TPM shall not perform an NV write as part of the command actions. |
| 8.9.3.3 |
| |
| Bit[23] – extensive |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 67 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| If this attribute is SET, then the TPM may flush many transient objects as a side effect of this command. |
| In Part 3, a command that has this attribute is indicated by using a “{E}” decoration in the “Description” |
| column of the commandCode parameter. |
| EXAMPLE |
| |
| See “TPM2_Clear” in Part 3. |
| |
| NOTE |
| |
| The “{E}” decoration may be combined with other decorations such as “{NV}” in which case the decoration |
| would be “{NV E}.” |
| |
| 8.9.3.4 |
| |
| Bit[24] – flushed |
| |
| If this attribute is SET, then the TPM will flush transient objects as a side effect of this command. Any |
| transient objects listed in the handle area of the command will be flushed from TPM memory. Handles |
| associated with persistent objects, sessions, PCR, or other fixed TPM resources are not flushed. |
| NOTE |
| |
| The TRM is expected to use this value to determine how many objects are loaded into transient TPM |
| memory. |
| |
| NOTE |
| |
| The “{F}” decoration may be combined with other decorations such as “{NV}” in which case the decoration |
| would be “{NV F}.” |
| |
| If this attribute is SET for a command, and the handle of the command is associated with a hierarchy |
| (TPM_RH_PLATFORM, TPM_RH_OWNER, or TPM_RH_ENDORSEMENT), all loaded objects in the |
| indicated hierarchy are flushed. |
| The TRM is expected to know the behaviour of TPM2_ContextSave(), and sessions are flushed when |
| context saved, but objects are not. The flushed attribute for that command shall be CLEAR. |
| In Part 3, a command that has this attribute is indicated by using a “{F}” decoration in the “Description” |
| column of the commandCode parameter. |
| EXAMPLE |
| |
| 8.9.3.5 |
| |
| See “TPM2_SequenceComplete” in Part 3.” |
| |
| Bits[27:25] – cHandles |
| |
| This field indicates the number of handles in the handle area of the command. This number allows the |
| TRM to enumerate the handles in the handle area and find the position of the authorizations (if any). |
| 8.9.3.6 |
| |
| Bit[28] – rHandle |
| |
| If this attribute is SET, then the response to this command has a handle area. This area will contain no |
| more than one handle. This field is necessary to allow the TRM to locate the parameterSize field in the |
| response, which is then used to locate the authorizations. |
| NOTE |
| |
| The TRM is expected to “virtualize” the handle value for any returned handle. |
| |
| Page 68 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| A TPM command is only allowed to have one handle in the session area. |
| 8.9.3.7 |
| |
| Bit[29] – V |
| |
| When this attribute is SET, it indicates that the command operation is defined by the TPM vendor. When |
| CLEAR, it indicates that the command is defined by a version of this specification. |
| 8.9.3.8 |
| |
| Bits[31:30] – Res |
| |
| This field is reserved for system software. This field is required to be zero for a command to the TPM. |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 69 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| 9 |
| |
| Trusted Platform Module Library |
| |
| Interface Types |
| |
| 9.1 |
| |
| Introduction |
| |
| This clause contains definitions for interface types. An interface type is type checked when it is |
| unmarshaled. These types are based on an underlying type that is indicated in the table title by the value |
| in parentheses. When an interface type is used, the base type is unmarshaled and then checked to see if |
| it has one of the allowed values. |
| 9.2 |
| |
| TPMI_YES_NO |
| |
| This interface type is used in place of a Boolean type in order to eliminate ambiguity in the handling of a |
| octet that conveys a single bit of information. This type only has two allowed values, YES (1) and NO (0). |
| NOTE |
| |
| This list is not used as input to the TPM. |
| |
| Table 37 — Definition of (BYTE) TPMI_YES_NO Type |
| Value |
| |
| Description |
| |
| NO |
| |
| a value of 0 |
| |
| YES |
| |
| a value of 1 |
| |
| #TPM_RC_VALUE |
| |
| 9.3 |
| |
| TPMI_DH_OBJECT |
| |
| The TPMI_DH_OBJECT interface type is a handle that references a loaded object. The handles in this |
| set are used to refer to either transient or persistent object. The range of these values would change |
| according to the TPM implementation. |
| NOTE |
| |
| These interface types should not be used by system software to qualify the keys produced by the TPM. |
| The value returned by the TPM shall be used to reference the object. |
| |
| Table 38 — Definition of (TPM_HANDLE) TPMI_DH_OBJECT Type |
| Values |
| |
| Comments |
| |
| {TRANSIENT_FIRST:TRANSIENT_LAST} |
| |
| allowed range for transient objects |
| |
| {PERSISTENT_FIRST:PERSISTENT_LAST} |
| |
| allowed range for persistent objects |
| |
| +TPM_RH_NULL |
| |
| the conditional value |
| |
| #TPM_RC_VALUE |
| |
| Page 70 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| 9.4 |
| |
| Part 2: Structures |
| |
| TPMI_DH_PERSISTENT |
| |
| The TPMI_DH_PERSISTENT interface type is a handle that references a location for a transient object. |
| This type is used in TPM2_EvictControl() to indicate the handle to be assigned to the persistent object. |
| Table 39 — Definition of (TPM_HANDLE) TPMI_DH_PERSISTENT Type |
| Values |
| |
| Comments |
| |
| {PERSISTENT_FIRST:PERSISTENT_LAST} |
| |
| allowed range for persistent objects |
| |
| #TPM_RC_VALUE |
| |
| 9.5 |
| |
| TPMI_DH_ENTITY |
| |
| The TPMI_DH_ENTITY interface type is TPM-defined values that are used to indicate that the handle |
| refers to an authValue. The range of these values would change according to the TPM implementation. |
| Table 40 — Definition of (TPM_HANDLE) TPMI_DH_ENTITY Type <IN> |
| Values |
| |
| Comments |
| |
| TPM_RH_OWNER |
| TPM_RH_ENDORSEMENT |
| TPM_RH_PLATFORM |
| TPM_RH_LOCKOUT |
| {TRANSIENT_FIRST : TRANSIENT_LAST} |
| |
| range of object handles |
| |
| {PERSISTENT_FIRST : PERSISTENT_LAST} |
| {NV_INDEX_FIRST : NV_INDEX_LAST} |
| {PCR_FIRST : PCR_LAST} |
| +TPM_RH_NULL |
| |
| conditional value |
| |
| #TPM_RC_VALUE |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 71 |
| October 31, 2013 |
| |
| Part 2: Structures |
| 9.6 |
| |
| Trusted Platform Module Library |
| |
| TPMI_DH_PCR |
| |
| This interface type consists of the handles that may be used as PCR references. The upper end of this |
| range of values would change according to the TPM implementation. |
| NOTE 1 |
| |
| Typically, the 0 th PCR will have a handle value of zero. |
| |
| NOTE 2 |
| |
| The handle range for PCR is defined to be the same as the handle range for PCR in previous versions of |
| TPM specifications. |
| |
| Table 41 — Definition of (TPM_HANDLE) TPMI_DH_PCR Type <IN> |
| Values |
| |
| Comments |
| |
| {PCR_FIRST:PCR_LAST} |
| +TPM_RH_NULL |
| |
| conditional value |
| |
| #TPM_RC_VALUE |
| |
| 9.7 |
| |
| TPMI_SH_AUTH_SESSION |
| |
| The TPMI_SH_AUTH_SESSION interface type is TPM-defined values that are used to indicate that the |
| handle refers to an authorization session. |
| Table 42 — Definition of (TPM_HANDLE) TPMI_SH_AUTH_SESSION Type <IN/OUT> |
| Values |
| |
| Comments |
| |
| {HMAC_SESSION_FIRST : HMAC_SESSION_LAST} |
| |
| range of HMAC authorization session handles |
| |
| {POLICY_SESSION_FIRST: POLICY_SESSION_LAST} |
| |
| range of policy authorization session handles |
| |
| +TPM_RS_PW |
| |
| a password authorization |
| |
| #TPM_RC_VALUE |
| |
| error returned if the handle is out of range |
| |
| 9.8 |
| |
| TPMI_SH_HMAC |
| |
| This interface type is used for an authorization handle when the authorization session uses an HMAC. |
| Table 43 — Definition of (TPM_HANDLE) TPMI_SH_HMAC Type <IN/OUT> |
| Values |
| |
| Comments |
| |
| {HMAC_SESSION_FIRST: HMAC_SESSION_LAST} |
| |
| range of HMAC authorization session handles |
| |
| #TPM_RC_VALUE |
| |
| error returned if the handle is out of range |
| |
| 9.9 |
| |
| TPMI_SH_POLICY |
| |
| This interface type is used for a policy handle when it appears in a policy command. |
| Table 44 — Definition of (TPM_HANDLE) TPMI_SH_POLICY Type <IN/OUT> |
| Values |
| |
| Comments |
| |
| {POLICY_SESSION_FIRST: POLICY_SESSION_LAST} |
| |
| range of policy authorization session handles |
| |
| #TPM_RC_VALUE |
| |
| error returned if the handle is out of range |
| |
| Page 72 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 9.10 TPMI_DH_CONTEXT |
| This type defines the handle values that may be used in TPM2_ContextSave() or TPM2_Flush(). |
| Table 45 — Definition of (TPM_HANDLE) TPMI_DH_CONTEXT Type |
| Values |
| |
| Comments |
| |
| {HMAC_SESSION_FIRST : HMAC_SESSION_LAST} |
| {POLICY_SESSION_FIRST:POLICY_SESSION_LAST} |
| {TRANSIENT_FIRST:TRANSIENT_LAST} |
| #TPM_RC_VALUE |
| |
| 9.11 TPMI_RH_HIERARCHY |
| The TPMI_RH_HIERARCHY interface type is used as the type of a handle in a command when the |
| handle is required to be one of the hierarchy selectors. |
| Table 46 — Definition of (TPM_HANDLE) TPMI_RH_HIERARCHY Type |
| Values |
| |
| Comments |
| |
| TPM_RH_OWNER |
| |
| Storage hierarchy |
| |
| TPM_RH_PLATFORM |
| |
| Platform hierarchy |
| |
| TPM_RH_ENDORSEMENT |
| |
| Endorsement hierarchy |
| |
| +TPM_RH_NULL |
| |
| no hierarchy |
| |
| #TPM_RC_VALUE |
| |
| response code returned when the unmarshaling of this type fails |
| |
| 9.12 TPMI_RH_ENABLES |
| The TPMI_RH_ENABLES interface type is used as the type of a handle in a command when the handle |
| is required to be one of the hierarchy or NV enables. |
| Table 47 — Definition of (TPM_HANDLE) TPMI_RH_ENABLES Type |
| Values |
| |
| Comments |
| |
| TPM_RH_OWNER |
| |
| Storage hierarchy |
| |
| TPM_RH_PLATFORM |
| |
| Platform hierarchy |
| |
| TPM_RH_ENDORSEMENT |
| |
| Endorsement hierarchy |
| |
| TPM_RH_PLATFORM_NV |
| |
| Platform NV |
| |
| +TPM_RH_NULL |
| |
| no hierarchy |
| |
| #TPM_RC_VALUE |
| |
| response code returned when the unmarshaling of this type fails |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 73 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 9.13 TPMI_RH_HIERARCHY_AUTH |
| This interface type is used as the type of a handle in a command when the handle is required to be one of |
| the hierarchy selectors or the Lockout Authorization. |
| Table 48 — Definition of (TPM_HANDLE) TPMI_RH_HIERARCHY_AUTH Type <IN> |
| Values |
| |
| Comments |
| |
| TPM_RH_OWNER |
| |
| Storage hierarchy |
| |
| TPM_RH_PLATFORM |
| |
| Platform hierarchy |
| |
| TPM_RH_ENDORSEMENT |
| |
| Endorsement hierarchy |
| |
| TPM_RH_LOCKOUT |
| |
| Lockout Authorization |
| |
| #TPM_RC_VALUE |
| |
| response code returned when the unmarshaling of this type fails |
| |
| 9.14 TPMI_RH_PLATFORM |
| The TPMI_RH_PLATFORM interface type is used as the type of a handle in a command when the only |
| allowed handle is TPM_RH_PLATFORM indicating that platformAuth is required. |
| Table 49 — Definition of (TPM_HANDLE) TPMI_RH_PLATFORM Type <IN> |
| Values |
| |
| Comments |
| |
| TPM_RH_PLATFORM |
| |
| Platform hierarchy |
| |
| #TPM_RC_VALUE |
| |
| response code returned when the unmarshaling of this type fails |
| |
| 9.15 TPMI_RH_OWNER |
| This interface type is used as the type of a handle in a command when the only allowed handle is |
| TPM_RH_OWNER indicating that ownerAuth is required. |
| Table 50 — Definition of (TPM_HANDLE) TPMI_RH_OWNER Type <IN> |
| Values |
| |
| Comments |
| |
| TPM_RH_OWNER |
| |
| Owner hierarchy |
| |
| +TPM_RH_NULL |
| |
| may allow the null handle |
| |
| #TPM_RC_VALUE |
| |
| response code returned when the unmarshaling of this type fails |
| |
| Page 74 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 9.16 TPMI_RH_ENDORSEMENT |
| This interface type is used as the type of a handle in a command when the only allowed handle is |
| TPM_RH_ENDORSEMENT indicating that endorsementAuth is required. |
| Table 51 — Definition of (TPM_HANDLE) TPMI_RH_ENDORSEMENT Type <IN> |
| Values |
| |
| Comments |
| |
| TPM_RH_ENDORSEMENT |
| |
| Endorsement hierarchy |
| |
| +TPM_RH_NULL |
| |
| may allow the null handle |
| |
| #TPM_RC_VALUE |
| |
| response code returned when the unmarshaling of this type fails |
| |
| 9.17 TPMI_RH_PROVISION |
| The TPMI_RH_PROVISION interface type is used as the type of the handle in a command when the only |
| allowed handles are either TPM_RH_OWNER or TPM_RH_PLATFORM indicating that either |
| platformAuth or ownerAuth are allowed. |
| In most cases, either platformAuth or ownerAuth may be used to authorize the commands used for |
| management of the resources of the TPM and this interface type will be used. |
| Table 52 — Definition of (TPM_HANDLE) TPMI_RH_PROVISION Type <IN> |
| Value |
| |
| Comments |
| |
| TPM_RH_OWNER |
| |
| handle for ownerAuth |
| |
| TPM_RH_PLATFORM |
| |
| handle for platformAuth |
| |
| #TPM_RC_VALUE |
| |
| response code returned when the unmarshaling of this type fails |
| |
| 9.18 TPMI_RH_CLEAR |
| The TPMI_RH_CLEAR interface type is used as the type of the handle in a command when the only |
| allowed handles are either TPM_RH_LOCKOUT or TPM_RH_PLATFORM indicating that either |
| platformAuth or lockoutAuth are allowed. |
| This interface type is normally used for performing or controlling TPM2_Clear(). |
| Table 53 — Definition of (TPM_HANDLE) TPMI_RH_CLEAR Type <IN> |
| Value |
| |
| Comments |
| |
| TPM_RH_LOCKOUT |
| |
| handle for lockoutAuth |
| |
| TPM_RH_PLATFORM |
| |
| handle for platformAuth |
| |
| #TPM_RC_VALUE |
| |
| response code returned when the unmarshaling of this type fails |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 75 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 9.19 TPMI_RH_NV_AUTH |
| This interface type is used to identify the source of the authorization for access to an NV location. The |
| handle value of a TPMI_RH_NV_AUTH shall indicate that the authorization value is either platformAuth, |
| ownerAuth, or the authValue. This type is used in the commands that access an NV Index (commands of |
| the form TPM2_NV_xxx) other than TPM2_NV_DefineSpace() and TPM2_NV_UndefineSpace(). |
| Table 54 — Definition of (TPM_HANDLE) TPMI_RH_NV_AUTH Type <IN> |
| Value |
| |
| Comments |
| |
| TPM_RH_PLATFORM |
| |
| platformAuth is allowed |
| |
| TPM_RH_OWNER |
| |
| ownerAuth is allowed |
| |
| {NV_INDEX_FIRST:NV_INDEX_LAST} |
| |
| range for NV locations |
| |
| #TPM_RC_VALUE |
| |
| response code returned when unmarshaling of this type fails |
| |
| 9.20 TPMI_RH_LOCKOUT |
| The TPMI_RH_LOCKOUT interface type is used as the type of a handle in a command when the only |
| allowed handle is TPM_RH_LOCKOUT indicating that lockoutAuth is required. |
| Table 55 — Definition of (TPM_HANDLE) TPMI_RH_LOCKOUT Type <IN> |
| Value |
| |
| Comments |
| |
| TPM_RH_LOCKOUT |
| #TPM_RC_VALUE |
| |
| response code returned when the unmarshaling of this type fails |
| |
| 9.21 TPMI_RH_NV_INDEX |
| This interface type is used to identify an NV location. This type is used in the NV commands. |
| Table 56 — Definition of (TPM_HANDLE) TPMI_RH_NV_INDEX Type <IN/OUT> |
| Value |
| |
| Comments |
| |
| {NV_INDEX_FIRST:NV_INDEX_LAST} |
| |
| Range of NV Indexes |
| |
| #TPM_RC_VALUE |
| |
| error returned if the handle is out of range |
| |
| Page 76 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 9.22 TPMI_ALG_HASH |
| A TPMI_ALG_HASH is an interface type of all the hash algorithms implemented on a specific TPM. Table |
| 57 is a list of the hash algorithms that have an algorithm ID assigned by the TCG and does not indicate |
| the algorithms that will be accepted by a TPM. |
| NOTE |
| |
| An implementation would modify this table according to the implemented algorithms, changing the values |
| that are accepted as hash algorithms. |
| |
| Table 57 — Definition of (TPM_ALG_ID) TPMI_ALG_HASH Type |
| Values |
| |
| Comments |
| |
| TPM_ALG_SHA1 |
| |
| example |
| |
| TPM_ALG_SHA256 |
| |
| example |
| |
| TPM_ALG_SM3_256 |
| |
| example |
| |
| TPM_ALG_SHA384 |
| |
| example |
| |
| TPM_ALG_SHA512 |
| |
| example |
| |
| +TPM_ALG_NULL |
| #TPM_RC_HASH |
| |
| 9.23 TPMI_ALG_ASYM (Asymmetric Algorithms) |
| A TPMI_ALG_ASYM is an interface type of all the asymmetric algorithms implemented on a specific TPM. |
| Table 58 lists each of the asymmetric algorithms that have an algorithm ID assigned by the TCG. |
| Table 58 — Definition of (TPM_ALG_ID) TPMI_ALG_ASYM Type |
| Values |
| |
| Comments |
| |
| TPM_ALG_RSA |
| TPM_ALG_ECC |
| +TPM_ALG_NULL |
| #TPM_RC_ASYMMETRIC |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 77 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 9.24 TPMI_ALG_SYM (Symmetric Algorithms) |
| A TPMI_ALG_SYM is an interface type of all the symmetric algorithms that have an algorithm ID assigned |
| by the TCG and are implemented on the TPM. |
| The list in the table below is illustrative and will change according to the implementation. The validation |
| code will only accept the subset of algorithms implemented on a TPM. |
| NOTE |
| |
| The validation code produced by an example script will produce a CASE statement with a case for each of |
| the values in the “Values” column. The case for a value is delimited by a #ifdef/#endif pair so that if the |
| algorithm is not implemented on the TPM, then the case for the algorithm is not generated, and use of the |
| algorithm will cause a TPM error (TPM_RC_SYMMETRIC). |
| |
| Table 59 — Definition of (TPM_ALG_ID) TPMI_ALG_SYM Type |
| Values |
| |
| Comments |
| |
| TPM_ALG_AES |
| |
| example |
| |
| TPM_ALG_SM4 |
| |
| example |
| |
| TPM_ALG_XOR |
| |
| example |
| |
| +TPM_ALG_NULL |
| |
| required to be present in all versions of this table |
| |
| #TPM_RC_SYMMETRIC |
| |
| 9.25 TPMI_ALG_SYM_OBJECT |
| A TPMI_ALG_SYM_OBJECT is an interface type of all the TCG-defined symmetric algorithms that may |
| be used as companion symmetric encryption algorithm for an asymmetric object. All algorithms in this list |
| shall be block ciphers usable in Cipher Feedback (CFB). |
| Table 60 is illustrative. It would be modified to indicate the algorithms of the TPM. |
| NOTE |
| |
| TPM_ALG_XOR is not allowed in this list. |
| |
| Table 60 — Definition of (TPM_ALG_ID) TPMI_ALG_SYM_OBJECT Type |
| Values |
| |
| Comments |
| |
| TPM_ALG_AES |
| |
| example |
| |
| TPM_ALG_SM4 |
| |
| example |
| |
| +TPM_ALG_NULL |
| |
| required to be present in all versions of this table |
| |
| #TPM_RC_SYMMETRIC |
| |
| Page 78 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 9.26 TPMI_ALG_SYM_MODE |
| A TPMI_ALG_SYM_MODE is an interface type of all the TCG-defined block-cipher modes of operation. |
| This version of the table is not expected to be the table checked by the validation code. Rather, the table |
| would be replaced by one containing the algorithms implemented on the TPM and that the values in that |
| table would be checked by the input validation code. |
| Table 61 — Definition of (TPM_ALG_ID) TPMI_ALG_SYM_MODE Type |
| Values |
| |
| Comments |
| |
| TPM_ALG_CTR |
| |
| IV will be determined by use. |
| If the outside provides the nonce and initial counter, then the caller can |
| know what IV to provide for chaining. |
| |
| TPM_ALG_OFB |
| |
| XOR last cipher text block with last plaintext to create IV for next block |
| |
| TPM_ALG_CBC |
| |
| IV will be determined by use. |
| indefinite chaining using previous output block as IV for next block |
| |
| TPM_ALG_CFB |
| |
| shall be implemented in all TPM compliant with this specification |
| IV will be determined by use. |
| indefinite chaining using previous cipher text as IV |
| |
| TPM_ALG_ECB |
| |
| no IV or chaining value required |
| |
| +TPM_ALG_NULL |
| #TPM_RC_MODE |
| |
| 9.27 TPMI_ALG_KDF (Key and Mask Generation Functions) |
| A TPMI_ALG_KDF is an interface type of all the key derivation functions implemented on a specific TPM. |
| Table 62 is exemplary and would change based on the algorithms implemented in a TPM. |
| Table 62 — Definition of (TPM_ALG_ID) TPMI_ALG_KDF Type |
| Values |
| |
| Comments |
| |
| TPM_ALG_MGF1 |
| TPM_ALG_KDF1_SP800_108 |
| TPM_ALG_KDF1_SP800_56a |
| TPM_ALG_KDF2 |
| +TPM_ALG_NULL |
| #TPM_RC_KDF |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 79 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 9.28 TPMI_ALG_SIG_SCHEME |
| This is the definition of the interface type for a signature scheme. This table would change according to |
| the algorithms implemented on the TPM. |
| Table 63 — Definition of (TPM_ALG_ID) TPMI_ALG_SIG_SCHEME Type |
| Values |
| |
| Comments |
| |
| TPM_ALG_RSASSA |
| |
| requires that RSA be implemented |
| |
| TPM_ALG_RSAPSS |
| |
| requires that RSA be implemented |
| |
| TPM_ALG_ECDSA |
| |
| requires that ECC be implemented |
| |
| TPM_ALG_ECDAA |
| |
| requires that ECC and ECDAA be implemented |
| |
| TPM_ALG_ECSCHNORR |
| TPM_ALG_SM2 |
| |
| requires that ECC be implemented |
| |
| TPM_ALG_HMAC |
| |
| present on all TPM |
| |
| +TPM_ALG_NULL |
| #TPM_RC_SCHEME |
| |
| response code when a signature scheme is not correct |
| |
| 9.29 TPMI_ECC_KEY_EXCHANGE |
| This is the definition of the interface type for an ECC key exchange scheme. This table would change |
| according to the algorithms implemented on the TPM. |
| Table 64 — Definition of (TPM_ALG_ID) TPMI_ECC_KEY_EXCHANGE Type |
| Values |
| |
| Comments |
| |
| TPM_ALG_ECDH |
| |
| used for single and two phase key exchange |
| |
| TPM_ALG_ECMQV |
| TPM_ALG_SM2 |
| |
| requires that ECC be implemented |
| |
| +TPM_ALG_NULL |
| #TPM_RC_SCHEME |
| |
| response code when a key exchange scheme is not correct |
| |
| 9.30 TPMI_ST_COMMAND_TAG |
| This interface type is used for the command tags. |
| The response code for a bad command tag has the same value as the TPM 1.2 response code |
| (TPM_BAD_TAG). This value is used in case the software is not compatible with this specification and an |
| unexpected response code might have unexpected side effects. |
| Table 65 — Definition of (TPM_ST) TPMI_ST_COMMAND_TAG Type |
| Values |
| |
| Comments |
| |
| TPM_ST_NO_SESSIONS |
| TPM_ST_SESSIONS |
| #TPM_RC_BAD_TAG |
| |
| Page 80 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 10 Structure Definitions |
| 10.1 TPMS_ALGORITHM_DESCRIPTION |
| This structure is a return value for a TPM2_GetCapability() that reads the installed algorithms. |
| Table 66 — Definition of TPMS_ALGORITHM_DESCRIPTION Structure <OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| alg |
| |
| TPM_ALG_ID |
| |
| an algorithm |
| |
| attributes |
| |
| TPMA_ALGORITHM |
| |
| the attributes of the algorithm |
| |
| 10.2 Hash/Digest Structures |
| 10.2.1 TPMU_HA (Hash) |
| A TPMU_HA is a union of all the hash algorithms implemented on a TPM. Table 67 is exemplary and |
| would change based on the algorithms implemented in a TPM. |
| NOTE |
| |
| If processed by an automated tool, each entry of the table should be qualified (with #ifdef/#endif) so that if |
| the hash algorithm is not implemented on the TPM, the parameter associated with that hash is not |
| present. This will keep the union from being larger than the largest digest of a hash implemented on that |
| TPM. |
| |
| Table 67 — Definition of TPMU_HA Union <IN/OUT, S> |
| Parameter |
| |
| Type |
| |
| Selector |
| |
| sha1 [SHA1_DIGEST_SIZE] |
| |
| BYTE |
| |
| TPM_ALG_SHA1 |
| |
| sha256 [SHA256_DIGEST_SIZE] |
| |
| BYTE |
| |
| TPM_ALG_SHA256 |
| |
| sm3_256 [SM3_256_DIGEST_SIZE] |
| |
| BYTE |
| |
| TPM_ALG_SM3_256 |
| |
| sha384 [SHA384_DIGEST_SIZE] |
| |
| BYTE |
| |
| TPM_ALG_SHA384 |
| |
| sha512 [SHA512_DIGEST_SIZE] |
| |
| BYTE |
| |
| TPM_ALG_SHA512 |
| |
| null |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Description |
| |
| TPM_ALG_NULL |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 81 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 10.2.2 TPMT_HA |
| Table 68 shows the basic hash-agile structure used in this specification. To handle hash agility, this |
| structure uses the hashAlg parameter to indicate the algorithm used to compute the digest and, by |
| implication, the size of the digest. |
| When transmitted, only the number of octets indicated by hashAlg is sent. |
| NOTE |
| |
| In the exemplary code, when a TPMT_HA is allocated, the digest field is large enough to support the |
| largest hash algorithm in the TPMU_HA union. |
| |
| Table 68 — Definition of TPMT_HA Structure <IN/OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| hashAlg |
| |
| +TPMI_ALG_HASH |
| |
| selector of the hash contained in the digest that implies the |
| size of the digest |
| NOTE |
| |
| [hashAlg] digest |
| |
| TPMU_HA |
| |
| The leading “+” on the type indicates that this structure |
| should pass an indication to the unmarshaling function for |
| TPMI_ALG_HASH so that TPM_ALG_NULL will be |
| allowed if a use of a TPMT_HA allows TPM_ALG_NULL. |
| |
| the digest data |
| |
| 10.3 Sized Buffers |
| 10.3.1 Introduction |
| The “TPM2B_” prefix is used for a structure that has a size field followed by a data buffer with the |
| indicated number of octets. The size field is 16 bits. |
| When the type of the second parameter in a TPM2B_ structure is BYTE, the TPM shall unmarshal the |
| indicated number of octets, which may be zero. |
| When the type of the second parameter in the TPM2B_ structure is not BYTE, the value of the size field |
| shall either be zero indicating that no structure is to be unmarshaled; or it shall be identical to the number |
| of octets unmarshaled for the second parameter. |
| NOTE 1 |
| |
| If the TPM2B_ defines a structure and not an array of octets, then the structure is self-describing and the |
| TPM will be able to determine how many octets are in the structure when it is unmarshaled. If that number |
| of octets is not equal to the size parameter, then it is an error. |
| |
| NOTE 2 |
| |
| The reason that a structure may be put into a TPM2B_ is that the parts of the structure may be handled |
| as separate opaque blocks by the application/system software. Rather than require that all of the |
| structures in a command or response be marshaled or unmarshaled sequentially, the size field allows the |
| structure to be manipulated as an opaque block. Placing a structure in a TPM2B_ also makes it possible |
| to use parameter encryption on the structure. |
| |
| If a TPM2B_ is encrypted, the TPM will encrypt/decrypt the data field of the TPM2B_ but not the size |
| parameter. The TPM will encrypt/decrypt the number of octets indicated by the size field. |
| NOTE 3 |
| |
| In the reference implementation, a TPM2B type is defined that is a 16-bit size field followed by a single |
| byte of data. The TPM2B_ is then defined as a union that contains a TPM2B (union member ‘b’) and the |
| structure in the definition table (union member ‘t’). This union is used for internally generated structures |
| so that there is a way to define a structure of the correct size (forced by the ‘t’ member) while giving a way |
| to pass the structure generically as a ‘b’. Most function calls use the 't' member so that the compiler will |
| generate a warning if there is a type error (a TPM2B_ of the wrong type). Having the type checked helps |
| avoid many issues with buffer overflow caused by a too small buffer being passed to a function. |
| |
| Page 82 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 10.3.2 TPM2B_DIGEST |
| This structure is used for a sized buffer that cannot be larger than the largest digest produced by any |
| hash algorithm implemented on the TPM. |
| As with all sized buffers, the size is checked to see if it is within the prescribed range. If not, the response |
| code is TPM_RC_SIZE. |
| NOTE |
| |
| For any structure, like the one below, that contains an implied size check, it is implied that TPM_RC_SIZE |
| is a possible response code and the response code will not be listed in the table. |
| |
| Table 69 — Definition of TPM2B_DIGEST Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| size |
| |
| UINT16 |
| |
| size in octets of the buffer field; may be 0 |
| |
| buffer[size]{:sizeof(TPMU_HA)} |
| |
| BYTE |
| |
| the buffer area that can be no larger than a digest |
| |
| 10.3.3 TPM2B_DATA |
| This structure is used for a data buffer that is required to be no larger than the size of the Name of an |
| object. This size limit includes the algorithm ID of the hash and the hash data. |
| Table 70 — Definition of TPM2B_DATA Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| size |
| |
| UINT16 |
| |
| size in octets of the buffer field; may be 0 |
| |
| buffer[size]{:sizeof(TPMT_HA)} |
| |
| BYTE |
| |
| the buffer area that contains the algorithm ID and the |
| digest |
| |
| 10.3.4 TPM2B_NONCE |
| Table 71 — Definition of Types for TPM2B_NONCE |
| Type |
| |
| Name |
| |
| Description |
| |
| TPM2B_DIGEST |
| |
| TPM2B_NONCE |
| |
| size limited to the same as the digest structure |
| |
| 10.3.5 TPM2B_AUTH |
| This structure is used for an authorization value and limits an authValue to being no larger than the |
| largest digest produced by a TPM. In order to ensure consistency within an object, the authValue may be |
| no larger than the size of the digest produced by the object’s nameAlg. This ensures that any TPM that |
| can load the object will be able to handle the authValue of the object. |
| Table 72 — Definition of Types for TPM2B_AUTH |
| Type |
| |
| Name |
| |
| Description |
| |
| TPM2B_DIGEST |
| |
| TPM2B_AUTH |
| |
| size limited to the same as the digest structure |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 83 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 10.3.6 TPM2B_OPERAND |
| This type is a sized buffer that can hold an operand for a comparison with an NV Index location. The |
| maximum size of the operand is implementation dependent but a TPM is required to support an operand |
| size that is at least as big as the digest produced by any of the hash algorithms implemented on the TPM. |
| Table 73 — Definition of Types for TPM2B_OPERAND |
| Type |
| |
| Name |
| |
| Description |
| |
| TPM2B_DIGEST |
| |
| TPM2B_OPERAND |
| |
| size limited to the same as the digest structure |
| |
| 10.3.7 TPM2B_EVENT |
| This type is a sized buffer that can hold event data. |
| Table 74 — Definition of TPM2B_EVENT Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| size |
| |
| UINT16 |
| |
| size of the operand buffer |
| |
| buffer [size] {:1024} |
| |
| BYTE |
| |
| the operand |
| |
| 10.3.8 TPM2B_MAX_BUFFER |
| This type is a sized buffer that can hold a maximally sized buffer for commands that use a large data |
| buffer |
| such |
| as |
| TPM2_PCR_Event(), |
| TPM2_Hash(), |
| TPM2_SequenceUpdate(), |
| or |
| TPM2_FieldUpgradeData(). |
| NOTE |
| |
| The above list is not comprehensive and other commands may use this buffer type. |
| |
| Table 75 — Definition of TPM2B_MAX_BUFFER Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| size |
| |
| UINT16 |
| |
| size of the buffer |
| |
| buffer [size] {:MAX_DIGEST_BUFFER} |
| |
| BYTE |
| |
| the operand |
| NOTE |
| MAX_DIGEST_BUFFER |
| is |
| TPMdependent but is required to be at least 1,024. |
| |
| 10.3.9 TPM2B_MAX_NV_BUFFER |
| This type is a sized buffer that can hold a maximally sized buffer for NV data commands such as |
| TPM2_NV_Read(), TPM2_NV_Write(), and TPM2_NV_Certify(). |
| Table 76 — Definition of TPM2B_MAX_NV_BUFFER Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| size |
| |
| UINT16 |
| |
| size of the buffer |
| |
| buffer [size] {:MAX_NV_BUFFER_SIZE} |
| |
| BYTE |
| |
| the operand |
| NOTE |
| MAX_NV_BUFFER_SIZE |
| dependent |
| |
| Page 84 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| is |
| |
| TPM- |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 10.3.10 TPM2B_TIMEOUT |
| This TPM-dependent structure is used to provide the timeout value for an authorization. |
| Table 77 — Definition of TPM2B_TIMEOUT Structure <IN/OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| size |
| |
| UINT16 |
| |
| size of the timeout value |
| This value is fixed for a TPM implementation. |
| |
| buffer [size] {:sizeof(UINT64)} |
| |
| BYTE |
| |
| the timeout value |
| |
| 10.3.11 TPM2B_IV |
| This structure is used for passing an initial value for a symmetric block cipher to or from the TPM. The |
| size is set to be the largest block size of any implemented symmetric cipher implemented on the TPM. |
| Table 78 — Definition of TPM2B_IV Structure <IN/OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| size |
| |
| UINT16 |
| |
| size of the timeout value |
| This value is fixed for a TPM implementation. |
| |
| buffer [size] {:MAX_SYM_BLOCK_SIZE} |
| |
| BYTE |
| |
| the timeout value |
| |
| 10.4 Names |
| 10.4.1 Introduction |
| The Name of an entity is used in place of the handle in authorization computations. The substitution |
| occurs in cpHash and policyHash computations. |
| For an entity that is defined by a public area (objects and NV Indexes), the Name is the hash of the public |
| structure that defines the entity. The hash is done using the nameAlg of the entity. |
| NOTE |
| |
| For an object, a TPMT_PUBLIC defines the entity. For an NV Index, a TPMS_NV_PUBLIC defines the |
| entity. |
| |
| For entities not defined by a public area, the Name is the handle that is used to refer to the entity. |
| 10.4.2 TPMU_NAME |
| Table 79 — Definition of TPMU_NAME Union <> |
| Parameter |
| |
| Type |
| |
| digest |
| |
| TPMT_HA |
| |
| when the Name is a digest |
| |
| handle |
| |
| TPM_HANDLE |
| |
| when the Name is a handle |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Selector |
| |
| Description |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 85 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 10.4.3 TPM2B_NAME |
| This buffer holds a Name for any entity type. |
| The type of Name in the structure is determined by context and the size parameter. If size is four, then |
| the Name is a handle. If size is zero, then no Name is present. Otherwise, the size shall be the size of a |
| TPM_ALG_ID plus the size of the digest produced by the indicated hash algorithm. |
| Table 80 — Definition of TPM2B_NAME Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| size |
| |
| UINT16 |
| |
| size of the Name structure |
| |
| name[size]{:sizeof(TPMU_NAME)} |
| |
| BYTE |
| |
| the Name structure |
| |
| 10.5 PCR Structures |
| 10.5.1 TPMS_PCR_SELECT |
| This structure provides a standard method of specifying a list of PCR. |
| PCR numbering starts at zero. |
| PcrSelect is an array of octets. The octet containing the bit corresponding to a specific PCR is found by |
| dividing the PCR number by 8. |
| EXAMPLE 1 |
| |
| The bit in pcrSelect corresponding to PCR 19 is in pcrSelect [2] (19/8 = 2). |
| |
| The least significant bit in a octet is bit number 0. The bit in the octet associated with a PCR is the |
| remainder after division by 8. |
| EXAMPLE 2 |
| |
| The bit in pcrSelect [2] corresponding to PCR 19 is bit 3 (19 mod 8). If sizeofSelect is 3, then the |
| pcrSelect array that would specify PCR 19 and no other PCR is 00 00 08 16. |
| |
| Each bit in pcrSelect indicates whether the corresponding PCR is selected (1) or not (0). If the pcrSelect |
| is all zero bits, then no PCR is selected. |
| SizeofSelect indicates the number of octets in pcrSelect. The allowable values for sizeofSelect is |
| determined by the number of PCR required by the applicable platform-specific specification and the |
| number of PCR implemented in the TPM. The minimum value for sizeofSelect is: |
| PCR_SELECT_MIN ≔ (PLATFORM_PCR + 7) / 8 |
| |
| (1) |
| |
| where |
| PLATFORM_PCR |
| |
| the number of PCR required by the platform-specific specification |
| |
| The maximum value for sizeofSelect is: |
| PCR_SELECT_MAX ≔ (IMPLEMENTATION_PCR + 7) / 8 |
| |
| (2) |
| |
| where |
| IMPLEMENTATION_PCR |
| |
| Page 86 |
| October 31, 2013 |
| |
| the number of PCR implemented on the TPM |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| If the TPM implements more PCR than there are bits in pcrSelect, the additional PCR are not selected. |
| EXAMPLE 3 |
| |
| If the applicable platform-specific specification requires that the TPM have a minimum of 24 PCR but the |
| TPM implements 32, then a PCR select of 3 octets would imply that PCR 24-31 are not selected. |
| |
| Table 81 — Definition of TPMS_PCR_SELECT Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| sizeofSelect {PCR_SELECT_MIN:} |
| |
| UINT8 |
| |
| the size in octets of the pcrSelect array |
| |
| pcrSelect [sizeofSelect] {:PCR_SELECT_MAX} |
| |
| BYTE |
| |
| the bit map of selected PCR |
| |
| #TPM_RC_VALUE |
| |
| 10.5.2 TPMS_PCR_SELECTION |
| Table 82 — Definition of TPMS_PCR_SELECTION Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| hash |
| |
| TPMI_ALG_HASH |
| |
| the hash algorithm associated with the |
| selection |
| |
| sizeofSelect {PCR_SELECT_MIN:} |
| |
| UINT8 |
| |
| the size in octets of the pcrSelect array |
| |
| pcrSelect [sizeofSelect] {:PCR_SELECT_MAX} |
| |
| BYTE |
| |
| the bit map of selected PCR |
| |
| #TPM_RC_VALUE |
| |
| 10.6 Tickets |
| 10.6.1 Introduction |
| Tickets are evidence that the TPM has previously processed some information. A ticket is an HMAC over |
| the data using a secret key known only to the TPM. A ticket is a way to expand the state memory of the |
| TPM. A ticket is only usable by the TPM that produced it. |
| The formulations for tickets shown in this clause are to be used by a TPM that is compliant with this |
| specification. |
| The method of creating the ticket data is: |
| |
| HMACcontexAlg(proof, (ticketType || param { || param {…})) |
| |
| (3) |
| |
| where |
| |
| HMACcontexAlg() |
| |
| an HMAC using the hash used for context integrity |
| |
| proof |
| |
| a TPM secret value (depends on hierarchy) |
| |
| ticketType |
| |
| a value to differentiate the tickets |
| |
| param |
| |
| one or more values that were checked by the TPM |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 87 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| The proof value used for each hierarchy is shown in Table 83. |
| Table 83 — Values for proof Used in Tickets |
| Hierarchy |
| |
| proof |
| |
| Description |
| |
| None |
| |
| Empty Buffer |
| |
| Platform |
| |
| phProof |
| |
| a value that changes with each change of the PPS |
| |
| Owner |
| |
| shProof |
| |
| a value that changes with each change of the SPS |
| |
| Endorsement |
| |
| ehProof |
| |
| a value that changes with each change of either the EPS or SPS |
| |
| The format for a ticket is shown in Table 84. This is a template for the tickets shown in the remainder of |
| this clause. |
| Table 84 — General Format of a Ticket |
| Parameter |
| |
| Type |
| |
| Description |
| |
| tag |
| |
| TPM_ST |
| |
| structure tag indicating the type of the ticket |
| |
| hierarchy |
| |
| TPMI_RH_HIERARCHY+ |
| |
| the hierarchy of the proof value |
| |
| digest |
| |
| TPM2B_DIGEST |
| |
| the HMAC over the ticket-specific data |
| |
| 10.6.2 A NULL Ticket |
| When a command requires a ticket and no ticket is available, the caller is required to provide a structure |
| with a ticket tag that is correct for the context. The hierarchy shall be set to TPM_RH_NULL, and digest |
| shall be the Empty Buffer (a buffer with a size field of zero). This construct is the NULL Ticket. When a |
| response indicates that a ticket is returned, the TPM may return a NULL Ticket. |
| NOTE |
| |
| Because each use of a ticket requires that the structure tag for the ticket be appropriate for the use, t here |
| is no single representation of a NULL Ticket that will work in all circumstances. Minimally, a NULL ticket |
| will have a structure type that is appropriate for the context. |
| |
| Page 88 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 10.6.3 TPMT_TK_CREATION |
| This ticket is produced by TPM2_Create() or TPM2_CreatePrimary(). It is used to bind the creation data |
| to the object to which it applies. The ticket is computed by |
| |
| HMACcontextAlg(proof, (TPM_ST_CREATION || name || HnameAlg(TPMS_CREATION_DATA))) |
| |
| (4) |
| |
| where |
| |
| HMACcontextAlg() |
| |
| an HMAC using the context integrity hash algorithm |
| |
| proof |
| |
| a TPM secret value associated with the hierarchy associated with name |
| |
| TPM_ST_CREATION |
| |
| a value used to ensure that the ticket is properly used |
| |
| name |
| |
| the Name of the object to which the creation data is to be associated |
| |
| HnameAlg() |
| |
| hash using the nameAlg of the created object |
| |
| TPMS_CREATION_DATA the creation data structure associated with name |
| Table 85 — Definition of TPMT_TK_CREATION Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| tag {TPM_ST_CREATION} |
| |
| TPM_ST |
| |
| ticket structure tag |
| error returned when tag is not TPM_ST_CREATION |
| |
| #TPM_RC_TAG |
| hierarchy |
| |
| TPMI_RH_HIERARCHY+ |
| |
| the hierarchy containing name |
| |
| digest |
| |
| TPM2B_DIGEST |
| |
| This shall be the HMAC produced using a proof value |
| of hierarchy. |
| |
| EXAMPLE |
| |
| A NULL Creation Ticket is the tuple <TPM_ST_CREATION, TPM_RH_NULL, 0x0000>. |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 89 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 10.6.4 TPMT_TK_VERIFIED |
| This ticket is produced by TPM2_VerifySignature(). This formulation is used for multiple ticket uses. The |
| ticket provides evidence that the TPM has validated that a digest was signed by a key with the Name of |
| keyName. The ticket is computed by |
| |
| HMACcontextAlg(proof, (TPM_ST_VERIFIED || digest || keyName)) |
| |
| (5) |
| |
| where |
| |
| HMACcontextAlg() |
| |
| an HMAC using the context integrity hash |
| |
| proof |
| |
| a TPM secret value associated with the hierarchy associated with |
| |
| TPM_ST_VERIFIED |
| |
| a value used to ensure that the ticket is properly used |
| |
| digest |
| |
| the signed digest |
| |
| keyName |
| |
| Name of the key that signed digest |
| |
| keyName |
| |
| Table 86 — Definition of TPMT_TK_VERIFIED Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| tag {TPM_ST_VERIFIED} |
| |
| TPM_ST |
| |
| ticket structure tag |
| error returned when tag is not TPM_ST_VERIFIED |
| |
| #TPM_RC_TAG |
| hierarchy |
| |
| TPMI_RH_HIERARCHY+ |
| |
| the hierarchy containing keyName |
| |
| digest |
| |
| TPM2B_DIGEST |
| |
| This shall be the HMAC produced using a proof value |
| of hierarchy. |
| |
| EXAMPLE |
| |
| A NULL Verified Ticket is the tuple <TPM_ST_VERIFIED, TPM_RH_NULL, 0x0000>. |
| |
| Page 90 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 10.6.5 TPMT_TK_AUTH |
| This ticket is produced by TPM2_PolicySigned() and TPM2_PolicySecret() when the authorization has an |
| expiration time. The ticket is computed by |
| |
| HMACcontextAlg(proof, (TPM_ST_AUTH_xxx || timeout || cpHash || policyRef || keyName)) |
| |
| (6) |
| |
| where |
| |
| HMACcontextAlg() |
| |
| an HMAC using the context integrity hash |
| |
| proof |
| |
| a TPM secret value associated with the hierarchy of the key associated |
| with keyName |
| |
| TPM_ST_AUTH_xxx |
| |
| either TPM_ST_AUTH_SIGNED or TPM_ST_AUTH_SECRET; used to |
| ensure that the ticket is properly used |
| |
| timeout |
| |
| implementation-specific value indicating when the authorization expires |
| |
| cpHash |
| |
| optional hash of the authorized command |
| |
| policyRef |
| |
| optional reference to a policy value |
| |
| keyName |
| |
| Name of the key that signed the authorization |
| Table 87 — Definition of TPMT_TK_AUTH Structure |
| |
| Parameter |
| |
| Type |
| |
| Description |
| |
| tag {TPM_ST_AUTH_SIGNED, TPM_ST_AUTH_SECRET} TPM_ST |
| |
| ticket structure tag |
| |
| #TPM_RC_TAG |
| |
| error returned when tag is |
| not TPM_ST_AUTH |
| |
| hierarchy |
| |
| TPMI_RH_HIERARCHY+ |
| |
| the hierarchy of the object |
| used to produce the ticket |
| |
| digest |
| |
| TPM2B_DIGEST |
| |
| This shall be the HMAC |
| produced using a proof |
| value of hierarchy. |
| |
| EXAMPLE |
| |
| A NULL Auth Ticket is the tuple <TPM_ST_AUTH_SIGNED, TPM_RH_NULL, 0x0000> or the tuple |
| <TPM_ST_AUTH_SIGNED, TPM_RH_NULL, 0x0000> |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 91 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 10.6.6 TPMT_TK_HASHCHECK |
| This ticket is produced by TPM2_SequenceComplete() when the message that was digested did not start |
| with TPM_GENERATED_VALUE. The ticket is computed by |
| |
| HMACcontexAlg(proof, (TPM_ST_HASHCHECK || digest)) |
| |
| (7) |
| |
| where |
| |
| HMACcontexAlg () |
| |
| an HMAC using the context integrity hash |
| |
| proof |
| |
| a TPM secret value associated with the hierarchy indicated by the |
| command |
| |
| TPM_ST_HASHCHECK |
| |
| a value used to ensure that the ticket is properly used |
| |
| digest |
| |
| the digest of the data |
| Table 88 — Definition of TPMT_TK_HASHCHECK Structure |
| |
| Parameter |
| |
| Type |
| |
| Description |
| |
| tag {TPM_ST_HASHCHECK} |
| |
| TPM_ST |
| |
| ticket structure tag |
| |
| #TPM_RC_TAG |
| |
| error returned when is not TPM_ST_HASHCHECK |
| |
| hierarchy |
| |
| TPMI_RH_HIERARCHY+ |
| |
| the hierarchy |
| |
| digest |
| |
| TPM2B_DIGEST |
| |
| This shall be the HMAC produced using a proof value |
| of hierarchy. |
| |
| 10.7 Property Structures |
| 10.7.1 TPMS_ALG_PROPERTY |
| This structure is used to report the properties of an algorithm identifier. It is returned in response to a |
| TPM2_GetCapability() with capability = TPM_CAP_ALG. |
| Table 89 — Definition of TPMS_ALG_PROPERTY Structure <OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| alg |
| |
| TPM_ALG_ID |
| |
| an algorithm identifier |
| |
| algProperties |
| |
| TPMA_ALGORITHM |
| |
| the attributes of the algorithm |
| |
| 10.7.2 TPMS_TAGGED_PROPERTY |
| This structure is used to report the properties that are UINT32 values. It is returned in response to a |
| TPM2_GetCapability(). |
| Table 90 — Definition of TPMS_TAGGED_PROPERTY Structure <OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| property |
| |
| TPM_PT |
| |
| a property identifier |
| |
| value |
| |
| UINT32 |
| |
| the value of the property |
| |
| Page 92 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 10.7.3 TPMS_TAGGED_PCR_SELECT |
| This structure is used in TPM2_GetCapability() to return the attributes of the PCR. |
| Table 91 — Definition of TPMS_TAGGED_PCR_SELECT Structure <OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| tag |
| |
| TPM_PT |
| |
| the property identifier |
| |
| sizeofSelect {PCR_SELECT_MIN:} |
| |
| UINT8 |
| |
| the size in octets of the pcrSelect array |
| |
| pcrSelect [sizeofSelect] {:PCR_SELECT_MAX} |
| |
| BYTE |
| |
| the bit map of PCR with the identified property |
| |
| 10.8 Lists |
| 10.8.1 TPML_CC |
| A list of command codes may be input to the TPM or returned by the TPM depending on the command. |
| Table 92 — Definition of TPML_CC Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| count |
| |
| UINT32 |
| |
| number of commands in the commandCode list; |
| may be 0 |
| |
| commandCodes[count]{:MAX_CAP_CC} |
| |
| TPM_CC |
| |
| a list of command codes |
| The maximum only applies to a command code |
| list in a command. The response size is limited |
| only by the size of the parameter buffer. |
| |
| #TPM_RC_SIZE |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| response code when count is greater than the |
| maximum allowed list size |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 93 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 10.8.2 TPML_CCA |
| This list is only used in TPM2_GetCapability(capability = TPM_CAP_COMMANDS). |
| The values in the list are returned in commandIndex order with vendor-specific commands returned after |
| other commands. Because of the other attributes, the commands may not be returned in strict numerical |
| order. They will be in commandIndex order. |
| Table 93 — Definition of TPML_CCA Structure <OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| count |
| |
| UINT32 |
| |
| number of values in the commandAttributes list; |
| may be 0 |
| |
| commandAttributes[count]{:MAX_CAP_CC} |
| |
| TPMA_CC |
| |
| a list of command codes attributes |
| |
| 10.8.3 TPML_ALG |
| This list is returned by TPM2_IncrementalSelfTest(). |
| Table 94 — Definition of TPML_ALG Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| count |
| |
| UINT32 |
| |
| number of algorithms in the algorithms list; may be 0 |
| |
| algorithms[count]{:MAX_ALG_LIST_SIZE} |
| |
| TPM_ALG_ID a list of algorithm IDs |
| The maximum only applies to an algorithm list in a |
| command. The response size is limited only by the |
| size of the parameter buffer. |
| response code when count is greater than the |
| maximum allowed list size |
| |
| #TPM_RC_SIZE |
| |
| 10.8.4 TPML_HANDLE |
| This structure is used when the TPM returns a list of loaded handles when the capability in |
| TPM2_GetCapability() is TPM_CAP_HANDLE. |
| NOTE |
| |
| This list is not used as input to the TPM. |
| |
| Table 95 — Definition of TPML_HANDLE Structure <OUT> |
| Name |
| |
| Type |
| |
| Description |
| |
| count |
| |
| UINT32 |
| |
| the number of handles in the list |
| may have a value of 0 |
| |
| handle[count]{: MAX_CAP_HANDLES} |
| |
| TPM_HANDLE |
| |
| an array of handles |
| |
| #TPM_RC_SIZE |
| |
| Page 94 |
| October 31, 2013 |
| |
| response code when count is greater than the |
| maximum allowed list size |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 10.8.5 TPML_DIGEST |
| This list is used to convey a list of digest values. This type is used in TPM2_PolicyOR() and in |
| TPM2_PCR_Read(). |
| Table 96 — Definition of TPML_DIGEST Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| count {2:} |
| |
| UINT32 |
| |
| number of digests in the list, minimum is two for |
| TPM2_PolicyOR(). |
| |
| digests[count]{:8} |
| |
| TPM2B_DIGEST a list of digests |
| For TPM2_PolicyOR(), all digests will have been |
| computed using the digest of the policy session. For |
| TPM2_PCR_Read(), each digest will be the size of the |
| digest for the bank containing the PCR. |
| |
| #TPM_RC_SIZE |
| |
| response code when count is not at least two or is |
| greater than eight |
| |
| 10.8.6 TPML_DIGEST_VALUES |
| This list is used to convey a list of digest values. This type is returned by TPM2_Event() and |
| TPM2_SequenceComplete() and is an input for TPM2_PCR_Extend(). |
| NOTE 1 |
| |
| This construct limits the number of hashes in the list to the number of digests implemented in the TPM |
| rather than the number of PCR banks. This allows extra values to appear in a call t o |
| TPM2_PCR_Extend(). |
| |
| NOTE 2 |
| |
| The digest for an unimplemented hash algorithm may not be in a list because the TPM may not recognize |
| the algorithm as being a hash and it may not know the digest size. |
| |
| Table 97 — Definition of TPML_DIGEST_VALUES Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| count |
| |
| UINT32 |
| |
| number of digests in the list |
| |
| digests[count]{:HASH_COUNT} |
| |
| TPMT_HA |
| |
| a list of tagged digests |
| response code when count is greater than the possible |
| number of banks |
| |
| #TPM_RC_SIZE |
| |
| 10.8.7 TPM2B_DIGEST_VALUES |
| Digest list in a sized buffer. This list is returned by TPM2_PCR_SequenceComplete(). |
| Table 98 — Definition of TPM2B_DIGEST_VALUES Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| size |
| |
| UINT16 |
| |
| size of the operand buffer |
| |
| buffer [size] {:sizeof(TPML_DIGEST_VALUES)} |
| |
| BYTE |
| |
| the operand |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 95 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 10.8.8 TPML_PCR_SELECTION |
| This list is used to indicate the PCR that are included in a selection when more than one PCR value may |
| be selected. |
| This structure is an input parameter to TPM2_PolicyPCR() to indicate the PCR that will be included in the |
| digest of PCR for the authorization. The structure is used in TPM2_PCR_Read() command to indicate the |
| PCR values to be returned and in the response to indicate which PCR are included in the list of returned |
| digests. The structure is an output parameter from TPM2_Create() and indicates the PCR used in the |
| digest of the PCR state when the object was created. The structure is also contained in the attestation |
| structure of TPM2_Quote(). |
| When this structure is used to select PCR to be included in a digest, the selected PCR are concatenated |
| to create a “message” containing all of the PCR, and then the message is hashed using the contextspecific hash algorithm. |
| Table 99 — Definition of TPML_PCR_SELECTION Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| count |
| |
| UINT32 |
| |
| number of selection structures |
| A value of zero is allowed. |
| |
| pcrSelections[count]{:HASH_COUNT} |
| |
| TPMS_PCR_SELECTION |
| |
| list of selections |
| response code when count is greater |
| than the possible number of banks |
| |
| #TPM_RC_SIZE |
| |
| 10.8.9 TPML_ALG_PROPERTY |
| This list is used to report on a list of algorithm attributes. It is returned in a TPM2_GetCapability(). |
| Table 100 — Definition of TPML_ALG_PROPERTY Structure <OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| count |
| |
| UINT32 |
| |
| number of algorithm properties structures |
| A value of zero is allowed. |
| |
| algProperties[count]{:MAX_CAP_ALGS} |
| |
| TPMS_ALG_PROPERTY |
| |
| list of properties |
| |
| 10.8.10 TPML_TAGGED_TPM_PROPERTY |
| This list is used to report on a list of properties that are TPMS_TAGGED_PROPERTY values. It is |
| returned by a TPM2_GetCapability(). |
| Table 101 — Definition of TPML_TAGGED_TPM_PROPERTY Structure <OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| count |
| |
| UINT32 |
| |
| number of properties |
| A value of zero is allowed. |
| |
| tpmProperty[count]{:MAX_TPM_PROPERTIES} TPMS_TAGGED_PROPERTY |
| |
| Page 96 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| an array of tagged properties |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 10.8.11 TPML_TAGGED_PCR_PROPERTY |
| This list is used to report on a list of properties that are TPMS_PCR_SELECT values. It is returned by a |
| TPM2_GetCapability(). |
| Table 102 — Definition of TPML_TAGGED_PCR_PROPERTY Structure <OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| count |
| |
| UINT32 |
| |
| number of properties |
| A value of zero is allowed. |
| |
| pcrProperty[count]{:MAX_PCR_PROPERTIES} |
| |
| TPMS_TAGGED_PCR_SELECT a tagged PCR selection |
| |
| 10.8.12 TPML_ECC_CURVE |
| This list is used to report the ECC curve ID values supported by the TPM. It is returned by a |
| TPM2_GetCapability(). |
| Table 103 — Definition of {ECC} TPML_ECC_CURVE Structure <OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| count |
| |
| UINT32 |
| |
| number of curves |
| A value of zero is allowed. |
| |
| eccCurves[count]{:MAX_ECC_CURVES} |
| |
| TPM_ECC_CURVE |
| |
| array of ECC curve identifiers |
| |
| 10.9 Capabilities Structures |
| 10.9.1 TPMU_CAPABILITIES |
| Table 104 — Definition of TPMU_CAPABILITIES Union <OUT> |
| Parameter |
| |
| Type |
| |
| Selector |
| |
| algorithms |
| |
| TPML_ALG_PROPERTY |
| |
| TPM_CAP_ALGS |
| |
| handles |
| |
| TPML_HANDLE |
| |
| TPM_CAP_HANDLES |
| |
| command |
| |
| TPML_CCA |
| |
| TPM_CAP_COMMANDS |
| |
| ppCommands |
| |
| TPML_CC |
| |
| TPM_CAP_PP_COMMANDS |
| |
| auditCommands |
| |
| TPML_CC |
| |
| TPM_CAP_AUDIT_COMMANDS |
| |
| assignedPCR |
| |
| TPML_PCR_SELECTION |
| |
| TPM_CAP_PCRS |
| |
| tpmProperties |
| |
| TPML_TAGGED_TPM_PROPERTY |
| |
| TPM_CAP_TPM_PROPERTIES |
| |
| pcrProperties |
| |
| TPML_TAGGED_PCR_PROPERTY |
| |
| TPM_CAP_PCR_PROPERTIES |
| |
| eccCurves |
| |
| TPML_ECC_CURVE |
| |
| TPM_CAP_ECC_CURVES |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Description |
| |
| TPM_ALG_ECC |
| |
| Page 97 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 10.9.2 TPMS_CAPABILITY_DATA |
| This data area is returned in response to a TPM2_GetCapability(). |
| Table 105 — Definition of TPMS_CAPABILITY_DATA Structure <OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| capability |
| |
| TPM_CAP |
| |
| the capability |
| |
| [capability]data |
| |
| TPMU_CAPABILITIES |
| |
| the capability data |
| |
| 10.10 Clock/Counter Structures |
| 10.10.1 TPMS_CLOCK_INFO |
| This structure is used in each of the attestation commands. |
| Table 106 — Definition of TPMS_CLOCK_INFO Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| clock |
| |
| UINT64 |
| |
| time in milliseconds during which the TPM has been powered |
| This structure element is used to report on the TPM's Clock value. |
| The value of Clock shall be recorded in non-volatile memory no |
| 22 |
| less often than once per 2 milliseconds (~69.9 minutes) of TPM |
| operation. The reference for the millisecond timer is the TPM |
| oscillator. |
| This value is reset to zero when the Storage Primary Seed is |
| changed (TPM2_Clear()). |
| This value may be advanced by TPM2_AdvanceClock(). |
| |
| resetCount |
| |
| UINT32 |
| |
| number of occurrences of TPM Reset since the last TPM2_Clear() |
| |
| restartCount |
| |
| UINT32 |
| |
| number of times that TPM2_Shutdown() or _TPM_Hash_Start have |
| occurred since the last TPM Reset or TPM2_Clear(). |
| |
| safe |
| |
| TPMI_YES_NO |
| |
| no value of Clock greater than the current value of Clock has been |
| previously reported by the TPM. Set to YES on TPM2_Clear(). |
| |
| 10.10.2 Clock |
| Clock is a monotonically increasing counter that advances whenever power is applied to the TPM. The |
| value of Clock may be set forward with TPM2_ClockSet() if ownerAuth or platformAuth is provided. The |
| value of Clock is incremented each millisecond. |
| TPM2_Clear() will set Clock to zero. |
| Clock will be non-volatile but may have a volatile component that is updated every millisecond with the |
| non-volatile component updated at a lower rate. If the implementation uses a volatile component, the non22 |
| volatile component shall be updated no less frequently than every 2 milliseconds (~69.9 minutes). The |
| update rate of the non-volatile portion of Clock shall be reported by a TPM2_GetCapability() with |
| capability = TPM_CAP_TPM_PROPERTIES and property = TPM_PT_CLOCK_UPDATE. |
| 10.10.3 ResetCount |
| This counter shall increment on each TPM Reset. This counter shall be reset to zero by TPM2_Clear(). |
| |
| Page 98 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 10.10.4 RestartCount |
| This counter shall increment by one for each TPM Restart or TPM Resume. The restartCount shall be |
| reset to zero on a TPM Reset or TPM2_Clear(). |
| 10.10.5 Safe |
| This parameter is set to YES when the value reported in Clock is guaranteed to be unique for the current |
| Owner. It is set to NO when the value of Clock may have been reported in a previous attestation or |
| access. |
| This parameter will be YES if a TPM2_Startup() was preceded by TPM2_Shutdown() with no intervening |
| commands. It will also be YES after an update of the non-volatile bits of Clock have been updated at the |
| end of an update interval. |
| If a TPM implementation does not implement |
| TPMS_CLOCK_INFO.clock shall always be zero. |
| |
| Clock, |
| |
| Safe |
| |
| shall |
| |
| always |
| |
| be |
| |
| NO |
| |
| and |
| |
| This parameter will be set to YES by TPM2_Clear(). |
| 10.10.6 TPMS_TIME_INFO |
| This structure is used in the TPM2_TICK attestation. |
| The Time value reported in this structure is reset whenever the TPM is reset. An implementation may |
| reset the value of Time any time after _TPM_Init and before the TPM returns after TPM2_Start(). The |
| value of Time shall increment continuously while power is applied to the TPM. |
| Table 107 — Definition of TPMS_TIME_INFO Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| time |
| |
| UINT64 |
| |
| time in milliseconds since the last _TPM_Init() or TPM2_Startup() |
| This structure element is used to report on the TPM's Time value. |
| |
| clockInfo |
| |
| TPMS_CLOCK_INFO |
| |
| a structure containing the clock information |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 99 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 10.11 TPM Attestation Structures |
| 10.11.1 Introduction |
| This clause describes the structures that are used when a TPM creates a structure to be signed. The |
| signing structures follow a standard format TPM2B_ATTEST with case-specific information embedded. |
| 10.11.2 TPMS_TIME_ATTEST_INFO |
| This structure is used when the TPM performs TPM2_GetClock. |
| Table 108 — Definition of TPMS_TIME_ATTEST_INFO Structure <OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| time |
| |
| TPMS_TIME_INFO |
| |
| the Time, clock, resetCount, restartCount, and Safe indicator |
| |
| firmwareVersion |
| |
| UINT64 |
| |
| a vendor-specific value indicating the version number of the |
| firmware |
| |
| 10.11.3 TPMS_CERTIFY_INFO |
| This is the attested data for TPM2_Certify(). |
| Table 109 — Definition of TPMS_CERTIFY_INFO Structure <OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| name |
| |
| TPM2B_NAME |
| |
| Name of the certified object |
| |
| qualifiedName |
| |
| TPM2B_NAME |
| |
| Qualified Name of the certified object |
| |
| 10.11.1 TPMS_QUOTE_INFO |
| This is the attested data for TPM2_Quote(). |
| Table 110 — Definition of TPMS_QUOTE_INFO Structure <OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| pcrSelect |
| |
| TPML_PCR_SELECTION |
| |
| information on algID, PCR selected and digest |
| |
| pcrDigest |
| |
| TPM2B_DIGEST |
| |
| digest of the selected PCR using the hash of the signing key |
| |
| Page 100 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 10.11.2 TPMS_COMMAND_AUDIT_INFO |
| This is the attested data for TPM2_GetCommandAuditDigest(). |
| Table 111 — Definition of TPMS_COMMAND_AUDIT_INFO Structure <OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| auditCounter |
| |
| UINT64 |
| |
| the monotonic audit counter |
| |
| digestAlg |
| |
| TPM_ALG_ID |
| |
| hash algorithm used for the command audit |
| |
| auditDigest |
| |
| TPM2B_DIGEST |
| |
| the current value of the audit digest |
| |
| commandDigest |
| |
| TPM2B_DIGEST |
| |
| digest of the command codes being audited using digestAlg |
| |
| 10.11.3 TPMS_SESSION_AUDIT_INFO |
| This is the attested data for TPM2_GetSessionAuditDigest(). |
| Table 112 — Definition of TPMS_SESSION_AUDIT_INFO Structure <OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| exclusiveSession |
| |
| TPMI_YES_NO |
| |
| current exclusive status of the session |
| TRUE if all of the commands recorded in the sessionDigest were |
| executed without any intervening TPM command that did not use |
| this transport session |
| |
| sessionDigest |
| |
| TPM2B_DIGEST |
| |
| the current value of the session audit digest |
| |
| 10.11.4 TPMS_CREATION_INFO |
| This is the attested data for TPM2_CertifyCreation(). |
| Table 113 — Definition of TPMS_CREATION_INFO Structure <OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| objectName |
| |
| TPM2B_NAME |
| |
| Name of the object |
| |
| creationHash |
| |
| TPM2B_DIGEST |
| |
| creationHash |
| |
| 10.11.5 TPMS_NV_CERTIFY_INFO |
| This structure contains the Name and contents of the selected NV Index that is certified by |
| TPM2_NV_Certify(). |
| Table 114 — Definition of TPMS_NV_CERTIFY_INFO Structure <OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| indexName |
| |
| TPM2B_NAME |
| |
| Name of the NV Index |
| |
| offset |
| |
| UINT16 |
| |
| the offset parameter of TPM2_NV_Certify() |
| |
| nvContents |
| |
| TPM2B_MAX_NV_BUFFER |
| |
| contents of the NV Index |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 101 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 10.11.6 TPMI_ST_ATTEST |
| Table 115 — Definition of (TPM_ST) TPMI_ST_ATTEST Type <OUT> |
| Value |
| |
| Description |
| |
| TPM_ST_ATTEST_CERTIFY |
| |
| generated by TPM2_Certify() |
| |
| TPM_ST_ATTEST_QUOTE |
| |
| generated by TPM2_Quote() |
| |
| TPM_ST_ATTEST_SESSION_AUDIT |
| |
| generated by TPM2_GetSessionAuditDigest() |
| |
| TPM_ST_ATTEST_COMMAND_AUDIT |
| |
| generated by TPM2_GetCommandAuditDigest() |
| |
| TPM_ST_ATTEST_TIME |
| |
| generated by TPM2_GetTime() |
| |
| TPM_ST_ATTEST_CREATION |
| |
| generated by TPM2_CertifyCreation() |
| |
| TPM_ST_ATTEST_NV |
| |
| generated by TPM2_NV_Certify() |
| |
| 10.11.7 TPMU_ATTEST |
| Table 116 — Definition of TPMU_ATTEST Union <OUT> |
| Parameter |
| |
| Type |
| |
| Selector |
| |
| certify |
| |
| TPMS_CERTIFY_INFO |
| |
| TPM_ST_ATTEST_CERTIFY |
| |
| creation |
| |
| TPMS_CREATION_INFO |
| |
| TPM_ST_ATTEST_CREATION |
| |
| quote |
| |
| TPMS_QUOTE_INFO |
| |
| TPM_ST_ATTEST_QUOTE |
| |
| commandAudit |
| |
| TPMS_COMMAND_AUDIT_INFO TPM_ST_ATTEST_COMMAND_AUDIT |
| |
| sessionAudit |
| |
| TPMS_SESSION_AUDIT_INFO |
| |
| TPM_ST_ATTEST_SESSION_AUDIT |
| |
| time |
| |
| TPMS_TIME_ATTEST_INFO |
| |
| TPM_ST_ATTEST_TIME |
| |
| nv |
| |
| TPMS_NV_CERTIFY_INFO |
| |
| TPM_ST_ATTEST_NV |
| |
| Page 102 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 10.11.8 TPMS_ATTEST |
| This structure is used on each TPM-generated signed structure. The signature is over this structure. |
| When the structure is signed by a key in the Storage hierarchy, the values of clockInfo.resetCount, |
| clockInfo.restartCount, and firmwareVersion are obfuscated with a per-key obfuscation value. |
| Table 117 — Definition of TPMS_ATTEST Structure <OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| magic |
| |
| TPM_GENERATED |
| |
| the indication that this structure was created by a TPM (always |
| TPM_GENERATED_VALUE) |
| |
| type |
| |
| TPMI_ST_ATTEST |
| |
| type of the attestation structure |
| |
| qualifiedSigner |
| |
| TPM2B_NAME |
| |
| Qualified Name of the signing key |
| |
| extraData |
| |
| TPM2B_DATA |
| |
| external information supplied by caller |
| NOTE |
| |
| A TPM2B_DATA structure provides room for a digest and a |
| method indicator to indicate the components of the digest. |
| The definition of this method indicator is outside the scope |
| of this specification. |
| |
| clockInfo |
| |
| TPMS_CLOCK_INFO |
| |
| Clock, resetCount, restartCount, and Safe |
| |
| firmwareVersion |
| |
| UINT64 |
| |
| TPM-vendor-specific field identifying the firmware on the TPM |
| |
| [type]attested |
| |
| TPMU_ATTEST |
| |
| the type-specific attestation information |
| |
| 10.11.9 TPM2B_ATTEST |
| This sized buffer to contain the signed structure. The attestationData is the signed portion of the structure. |
| The size parameter is not signed. |
| Table 118 — Definition of TPM2B_ATTEST Structure <OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| size |
| |
| UINT16 |
| |
| size of the attestationData structure |
| |
| attestationData[size]{:sizeof(TPMS_ATTEST)} |
| |
| BYTE |
| |
| the signed structure |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 103 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 10.12 Authorization Structures |
| The structures in this clause are used for all authorizations. One or more of these structures will be |
| present in a command or response that has a tag of TPM_ST_SESSIONS. |
| 10.12.1 TPMS_AUTH_COMMAND |
| This is the format used for each of the authorizations in the session area of a command. |
| Table 119 — Definition of TPMS_AUTH_COMMAND Structure <IN> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| sessionHandle |
| |
| TPMI_SH_AUTH_SESSION+ |
| |
| the session handle |
| |
| nonce |
| |
| TPM2B_NONCE |
| |
| the session nonce, may be the Empty Buffer |
| |
| sessionAttributes |
| |
| TPMA_SESSION |
| |
| the session attributes |
| |
| hmac |
| |
| TPM2B_AUTH |
| |
| either an HMAC, a password, or an EmptyAuth |
| |
| 10.12.2 TPMS_AUTH_RESPONSE |
| This is the format for each of the authorizations in the session area of the response. If the TPM returns |
| TPM_RC_SUCCESS, then the session area of the response contains the same number of authorizations |
| as the command and the authorizations are in the same order. |
| Table 120 — Definition of TPMS_AUTH_RESPONSE Structure <OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| nonce |
| |
| TPM2B_NONCE |
| |
| the session nonce, may be the Empty Buffer |
| |
| sessionAttributes |
| |
| TPMA_SESSION |
| |
| the session attributes |
| |
| hmac |
| |
| TPM2B_AUTH |
| |
| either an HMAC, a password, or an EmptyAuth |
| |
| Page 104 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 11 Algorithm Parameters and Structures |
| 11.1 Symmetric |
| 11.1.1 Introduction |
| This clause defines the parameters and structures for describing symmetric algorithms. |
| 11.1.2 TPMI_AES_KEY_BITS |
| This interface type defines the supported sizes for an AES key. This type is used to allow the |
| unmarshaling routine to generate the proper validation code for the supported key sizes. An |
| implementation that supports different key sizes would have a different set of selections. |
| When used in TPM2_StartAuthSession(), the mode parameter shall be TPM_ALG_CFB. |
| NOTE 1 |
| |
| Key size is expressed in bits. |
| |
| NOTE 2 |
| |
| The definition for AES_KEY_SIZES_BITS used in the reference implementation is found in Annex B |
| |
| Table 121 — Definition of {AES} (TPM_KEY_BITS) TPMI_AES_KEY_BITS Type |
| Parameter |
| |
| Description |
| |
| $AES_KEY_SIZES_BITS |
| |
| number of bits in the key |
| |
| #TPM_RC_VALUE |
| |
| error when key size is not supported |
| |
| 11.1.3 TPMI_SM4_KEY_BITS |
| This interface type defines the supported sizes for an SM4 key. This type is used to allow the |
| unmarshaling routine to generate the proper validation code for the supported key sizes. An |
| implementation that supports different key sizes would have a different set of selections. |
| NOTE |
| |
| SM4 only supports a key size of 128 bits. |
| |
| Table 122 — Definition of {SM4} (TPM_KEY_BITS) TPMI_SM4_KEY_BITS Type |
| Parameter |
| |
| Description |
| |
| $SM4_KEY_SIZES_BITS |
| |
| number of bits in the key |
| |
| #TPM_RC_VALUE |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 105 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 11.1.4 TPMU_SYM_KEY_BITS |
| This union is used to collect the symmetric encryption key sizes. |
| The xor entry is a hash algorithms selector and not a key size in bits. This overload is used in order to |
| avoid an additional level of indirection with another union and another set of selectors. |
| The xor entry is only selected in a TPMT_SYM_DEF, which is used to select the parameter encryption |
| value. |
| Table 123 — Definition of TPMU_SYM_KEY_BITS Union |
| Parameter |
| |
| Type |
| |
| Selector |
| |
| aes |
| |
| TPMI_AES_KEY_BITS |
| |
| TPM_ALG_AES |
| |
| SM4 |
| |
| TPMI_SM4_KEY_BITS |
| |
| TPM_ALG_SM4 |
| |
| sym |
| |
| TPM_KEY_BITS |
| |
| xor |
| |
| TPMI_ALG_HASH |
| |
| Description |
| |
| when selector may be any of the |
| symmetric block ciphers |
| TPM_ALG_XOR |
| |
| overload for using xor |
| NOTE |
| |
| null |
| |
| TPM_ALG_NULL |
| allowed |
| |
| is |
| |
| not |
| |
| TPM_ALG_NULL |
| |
| 11.1.5 TPMU_SYM_MODE |
| This union allows the mode value in a TPMT_SYM_DEF or TPMT_SYM_DEF_OBJECT to be empty. |
| Table 124 — Definition of TPMU_SYM_MODE Union |
| Parameter |
| |
| Type |
| |
| Selector |
| |
| Description |
| |
| aes |
| |
| TPMI_ALG_SYM_MODE |
| |
| TPM_ALG_AES |
| |
| NOTE |
| |
| TPM_ALG_NULL |
| allowed |
| |
| is |
| |
| not |
| |
| SM4 |
| |
| TPMI_ALG_SYM_MODE |
| |
| TPM_ALG_SM4 |
| |
| NOTE |
| |
| TPM_ALG_NULL |
| allowed |
| |
| is |
| |
| not |
| |
| sym |
| |
| TPMI_ALG_SYM_MODE |
| |
| when selector may be any of the |
| symmetric block ciphers |
| |
| xor |
| |
| TPM_ALG_XOR |
| |
| no mode selector |
| |
| null |
| |
| TPM_ALG_NULL |
| |
| no mode selector |
| |
| Page 106 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 11.1.6 TPMU_SYM_DETAILS |
| This union allows additional parameters to be added for a symmetric cipher. Currently, no additional |
| parameters are required for any of the symmetric algorithms. |
| NOTE |
| |
| The “x” character in the table title will suppress generation of this type as the parser is not, at this time, |
| able to generate the proper values (a union of all empty data types). When an algorithm is added that |
| requires additional parameterization, the Type column will contain a value and the “x” may be removed. |
| |
| Table 125 — xDefinition of TPMU_SYM_DETAILS Union |
| Parameter |
| |
| Type |
| |
| Selector |
| |
| aes |
| |
| TPM_ALG_AES |
| |
| SM4 |
| |
| Description |
| |
| TPM_ALG_SM4 |
| |
| sym |
| |
| when selector may be any of the |
| symmetric block ciphers |
| |
| xor |
| |
| TPM_ALG_XOR |
| |
| null |
| |
| TPM_ALG_NULL |
| |
| 11.1.7 TPMT_SYM_DEF |
| The TPMT_SYM_DEF structure is used to select an algorithm to be used for parameter encryption in |
| those cases when different symmetric algorithms may be selected. |
| Table 126 — Definition of TPMT_SYM_DEF Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| algorithm |
| |
| +TPMI_ALG_SYM |
| |
| indicates a symmetric algorithm |
| |
| [algorithm]keyBits |
| |
| TPMU_SYM_KEY_BITS |
| |
| a supported key size |
| |
| [algorithm]mode |
| |
| TPMU_SYM_MODE |
| |
| the mode for the key |
| |
| //[algorithm]details |
| |
| TPMU_SYM_DETAILS |
| |
| contains additional algorithm details |
| NOTE |
| |
| This is commented out at this time as the parser |
| may not produce the proper code for a union if |
| none of the selectors produces any data. |
| |
| 11.1.8 TPMT_SYM_DEF_OBJECT |
| This structure is used when different symmetric block cipher (not XOR) algorithms may be selected. |
| Table 127 — Definition of TPMT_SYM_DEF_OBJECT Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| algorithm |
| |
| +TPMI_ALG_SYM_OBJECT |
| |
| selects a symmetric block cipher |
| |
| [algorithm]keyBits |
| |
| TPMU_SYM_KEY_BITS |
| |
| the key size |
| |
| [algorithm]mode |
| |
| TPMU_SYM_MODE |
| |
| default mode |
| |
| //[algorithm]details |
| |
| TPMU_SYM_DETAILS |
| |
| contains the additional algorithm details, if any |
| NOTE |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| This is commented out at this time as the parser |
| may not produce the proper code for a union if |
| none of the selectors produces any data. |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 107 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 11.1.9 TPM2B_SYM_KEY |
| This structure is used to hold a symmetric key in the sensitive area of an asymmetric object. |
| The number of bits in the key is in keyBits in the public area. When keyBits is not an even multiple of 8 |
| bits, the unused bits of buffer will be the most significant bits of buffer[0] and size will be rounded up to |
| the number of octets required to hold all bits of the key. |
| Table 128 — Definition of TPM2B_SYM_KEY Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| size |
| |
| UINT16 |
| |
| size, in octets, of the buffer containing the key; may be |
| zero |
| |
| buffer [size] {:MAX_SYM_KEY_BYTES} |
| |
| BYTE |
| |
| the key |
| |
| 11.1.10 TPMS_SYMCIPHER_PARMS |
| This structure contains the parameters for a symmetric block cipher object. |
| Table 129 — Definition of TPMS_SYMCIPHER_PARMS Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| sym |
| |
| TPMT_SYM_DEF_OBJECT |
| |
| a symmetric block cipher |
| |
| 11.1.11 TPM2B_SENSITIVE_DATA |
| This buffer holds the secret data of a data object. It can hold as much as 128 octets of data. |
| MAX_SYM_DATA shall be 128. |
| NOTE |
| |
| A named value rather than a numeric is used to make coding clearer. A numeric value does not indicate |
| the reason that it has the specific value that is has. |
| |
| Table 130 — Definition of TPM2B_SENSITIVE_DATA Structure |
| Parameter |
| |
| Type |
| |
| size |
| |
| UINT16 |
| |
| buffer[size]{: MAX_SYM_DATA} |
| |
| BYTE |
| |
| Page 108 |
| October 31, 2013 |
| |
| Description |
| |
| the keyed hash private data structure |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 11.1.12 TPMS_SENSITIVE_CREATE |
| This structure defines the values to be placed in the sensitive area of a created object. This structure is |
| only used within a TPM2B_SENSITIVE_CREATE structure. |
| NOTE |
| |
| When sent to the TPM or unsealed, data is usually encrypted using parameter encryption. |
| |
| If data.size is not zero, and the object is not a keyedHash, data.size must match the size indicated in the |
| keySize of public.parameters. If the object is a keyedHash, data.size may be any value up to the |
| maximum allowed in a TPM2B_SENSITIVE_DATA. |
| For an asymmetric object, data shall be an Empty Buffer and sensitiveDataOrigin shall be SET. |
| Table 131 — Definition of TPMS_SENSITIVE_CREATE Structure <IN> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| userAuth |
| |
| TPM2B_AUTH |
| |
| the USER auth secret value |
| |
| data |
| |
| TPM2B_SENSITIVE_DATA |
| |
| data to be sealed |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 109 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 11.1.13 TPM2B_SENSITIVE_CREATE |
| This structure contains the sensitive creation data in a sized buffer. This structure is defined so that both |
| the userAuth and data values of the TPMS_SENSITIVE_CREATE may be passed as a single parameter |
| for parameter encryption purposes. |
| Table 132 — Definition of TPM2B_SENSITIVE_CREATE Structure <IN, S> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| size= |
| |
| UINT16 |
| |
| size of sensitive in octets (may not be zero) |
| NOTE |
| |
| sensitive |
| |
| TPMS_SENSITIVE_CREATE |
| |
| The userAuth and data parameters in this buffer |
| may both be zero length but the minimum size of |
| this parameter will be the sum of the size fields of |
| the |
| two |
| parameters |
| of |
| the |
| TPMS_SENSITIVE_CREATE. |
| |
| data to be sealed or a symmetric key value. |
| |
| 11.1.14 TPMS_SCHEME_SIGHASH |
| This structure is the scheme data for schemes that only require a hash to complete the scheme definition. |
| Table 133 — Definition of TPMS_SCHEME_SIGHASH Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| hashAlg |
| |
| TPMI_ALG_HASH |
| |
| the hash algorithm used to digest the message |
| |
| 11.1.15 TPMI_ALG_HASH_SCHEME |
| This is the list of values that may appear in a keyedHash as the scheme parameter. |
| Table 134 — Definition of (TPM_ALG_ID) TPMI_ALG_KEYEDHASH_SCHEME Type |
| Values |
| |
| Comments |
| |
| TPM_ALG_HMAC |
| |
| the "signing" scheme |
| |
| TPM_ALG_XOR |
| |
| the "obfuscation" scheme |
| |
| +TPM_ALG_NULL |
| #TPM_RC_VALUE |
| |
| 11.1.16 HMAC_SIG_SCHEME |
| Table 135 — Definition of Types for HMAC_SIG_SCHEME |
| Type |
| |
| Name |
| |
| TPMS_SCHEME_SIGHASH |
| |
| TPMS_SCHEME_HMAC |
| |
| Page 110 |
| October 31, 2013 |
| |
| Description |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 11.1.17 TPMS_SCHEME_XOR |
| This structure is for the XOR encryption scheme. |
| Table 136 — Definition of TPMS_SCHEME_XOR Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| hashAlg |
| |
| +TPMI_ALG_HASH |
| |
| the hash algorithm used to digest the message |
| |
| kdf |
| |
| TPMI_ALG_KDF |
| |
| the key derivation function |
| |
| 11.1.18 TPMU_SCHEME_HMAC |
| Table 137 — Definition of TPMU_SCHEME_KEYEDHASH Union <IN/OUT, S> |
| Parameter |
| |
| Type |
| |
| Selector |
| |
| Description |
| |
| hmac |
| |
| TPMS_SCHEME_HMAC |
| |
| TPM_ALG_HMAC |
| |
| the "signing" scheme |
| |
| xor |
| |
| TPMS_SCHEME_XOR |
| |
| TPM_ALG_XOR |
| |
| the "obfuscation" scheme |
| |
| null |
| |
| TPM_ALG_NULL |
| |
| 11.1.19 TPMT_KEYEDHASH_SCHEME |
| This structure is used for a hash signing object. |
| Table 138 — Definition of TPMT_KEYEDHASH_SCHEME Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| scheme |
| |
| +TPMI_ALG_KEYEDHASH_SCHEME |
| |
| selects the scheme |
| |
| [scheme]details |
| |
| TPMU_SCHEME_KEYEDHASH |
| |
| the scheme parameters |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 111 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 11.2 Asymmetric |
| 11.2.1 Signing Schemes |
| 11.2.1.1 |
| |
| Introduction |
| |
| These structures are used to define the method in which the signature is to be created. These schemes |
| would appear in an object’s public area and in commands where the signing scheme is variable. |
| Every scheme is required to indicate a hash that is used in digesting the message. |
| 11.2.1.2 |
| |
| RSA_SIG_SCHEMES |
| |
| These are the RSA schemes that only need a hash algorithm as a scheme parameter. |
| For the TPM_ALG_RSAPSS signing scheme, the same hash algorithm is used for digesting TPMgenerated data (an attestation structure) and in the KDF used for the masking operation. The salt size is |
| always the largest salt value that will fit into the available space. |
| Table 139 — Definition of {RSA} Types for RSA_SIG_SCHEMES |
| Type |
| |
| Name |
| |
| Description |
| |
| TPMS_SCHEME_SIGHASH TPMS_SCHEME_RSASSA |
| TPMS_SCHEME_SIGHASH TPMS_SCHEME_RSAPSS |
| |
| 11.2.1.3 |
| |
| ECC_SIG_SCHEMES |
| |
| These are the ECC schemes that only need a hash algorithm as a controlling parameter. |
| Table 140 — Definition of {ECC} Types for ECC_SIG_SCHEMES |
| Type |
| |
| Name |
| |
| Description |
| |
| TPMS_SCHEME_SIGHASH TPMS_SCHEME_ECDSA |
| TPMS_SCHEME_SIGHASH TPMS_SCHEME_SM2 |
| TPMS_SCHEME_SIGHASH TPMS_SCHEME_ECSCHNORR |
| |
| 11.2.1.4 TPMS_SCHEME_ECDAA |
| Table 141 — Definition of {ECC} TPMS_SCHEME_ECDAA Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| hashAlg |
| |
| TPMI_ALG_HASH |
| |
| the hash algorithm used to digest the message |
| |
| count |
| |
| UINT16 |
| |
| the counter value that is used between TPM2_Commit() and the sign |
| operation |
| |
| Page 112 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| 11.2.1.5 |
| |
| Part 2: Structures |
| |
| TPMU_SIG_SCHEME |
| Table 142 — Definition of TPMU_SIG_SCHEME Union <IN/OUT, S> |
| |
| Parameter |
| |
| Type |
| |
| Selector |
| |
| Description |
| |
| rsassa |
| |
| TPMS_SCHEME_RSASSA |
| |
| TPM_ALG_RSASSA |
| |
| the PKCS#1v1.5 scheme |
| |
| rsapss |
| |
| TPMS_SCHEME_RSAPSS |
| |
| TPM_ALG_RSAPSS |
| |
| the PKCS#1v2.1 PSS scheme |
| |
| ecdsa |
| |
| TPMS_SCHEME_ECDSA |
| |
| TPM_ALG_ECDSA |
| |
| the ECDSA scheme |
| |
| sm2 |
| |
| TPMS_SCHEME_SM2 |
| |
| TPM_ALG_SM2 |
| |
| ECDSA from SM2 |
| |
| ecdaa |
| |
| TPMS_SCHEME_ECDAA |
| |
| TPM_ALG_ECDAA |
| |
| the ECDAA scheme |
| |
| ecSchnorr |
| |
| TPMS_SCHEME_ECSCHNORR |
| |
| TPM_ALG_ECSCHNORR |
| |
| the EC Schnorr |
| |
| hmac |
| |
| TPMS_SCHEME_HMAC |
| |
| TPM_ALG_HMAC |
| |
| the HMAC scheme |
| |
| any |
| |
| TPMS_SCHEME_SIGHASH |
| |
| null |
| |
| 11.2.1.6 |
| |
| selector that allows access to |
| digest for any signing scheme |
| TPM_ALG_NULL |
| |
| no scheme or default |
| |
| TPMT_SIG_SCHEME |
| Table 143 — Definition of TPMT_SIG_SCHEME Structure |
| |
| Parameter |
| |
| Type |
| |
| Description |
| |
| scheme |
| |
| +TPMI_ALG_SIG_SCHEME |
| |
| scheme selector |
| |
| [scheme]details |
| |
| TPMU_SIG_SCHEME |
| |
| scheme parameters |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 113 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 11.2.2 Encryption Schemes |
| 11.2.2.1 |
| |
| Introduction |
| |
| These structures are used to indicate the hash algorithm used for the encrypting process. These |
| schemes would appear in an object’s public area. |
| 11.2.2.2 |
| |
| TPMS_SCHEME_OAEP |
| Table 144 — Definition of {RSA} TPMS_SCHEME_OAEP Structure |
| |
| Parameter |
| |
| Type |
| |
| Description |
| |
| hashAlg |
| |
| +TPMI_ALG_HASH |
| |
| the hash algorithm used to digest the message |
| |
| 11.2.2.3 |
| |
| TPMS_SCHEME_ECDH |
| |
| For ECDH, KDFe is used for the key derivation function that only a hash algorithm is needed to complete |
| the definition. |
| Table 145 — Definition of {ECC} TPMS_SCHEME_ECDH Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| hashAlg |
| |
| +TPMI_ALG_HASH |
| |
| the hash algorithm used in the KDF |
| |
| 11.2.3 Key Derivation Schemes |
| 11.2.3.1 |
| |
| Introduction |
| |
| These structures are used to define the key derivation for symmetric secret sharing using asymmetric |
| methods. A secret shareing scheme is required in any asymmetric key with the decrypt attribute SET. |
| These schemes would appear in an object’s public area and in commands where the secret sharing |
| scheme is variable. |
| Each scheme includes a symmetric algorithm and a KDF selection. |
| 11.2.3.2 |
| |
| TPMS_SCHEME_MGF1 |
| Table 146 — Definition of TPMS_SCHEME_MGF1 Structure |
| |
| Parameter |
| |
| Type |
| |
| Description |
| |
| hashAlg |
| |
| TPMI_ALG_HASH |
| |
| the hash algorithm used in the KDF |
| |
| 11.2.3.3 |
| |
| TPMS_SCHEME_KDF1_SP800_56a |
| Table 147 — Definition of {ECC} TPMS_SCHEME_KDF1_SP800_56a Structure |
| |
| Parameter |
| |
| Type |
| |
| Description |
| |
| hashAlg |
| |
| TPMI_ALG_HASH |
| |
| the hash algorithm used in the KDF |
| |
| Page 114 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| 11.2.3.4 |
| |
| Part 2: Structures |
| |
| TPMS_SCHEME_KDF2 |
| Table 148 — Definition of TPMS_SCHEME_KDF2 Structure |
| |
| Parameter |
| |
| Type |
| |
| Description |
| |
| hashAlg |
| |
| TPMI_ALG_HASH |
| |
| the hash algorithm used in the KDF |
| |
| 11.2.3.5 |
| |
| TPMS_SCHEME_KDF1_SP800_108 |
| Table 149 — Definition of TPMS_SCHEME_KDF1_SP800_108 Structure |
| |
| Parameter |
| |
| Type |
| |
| Description |
| |
| hashAlg |
| |
| TPMI_ALG_HASH |
| |
| the hash algorithm used in the KDF |
| |
| 11.2.3.6 |
| |
| TPMU_KDF_SCHEME |
| Table 150 — Definition of TPMU_KDF_SCHEME Union <IN/OUT, S> |
| |
| Parameter |
| |
| Type |
| |
| Selector |
| |
| mgf1 |
| |
| TPMS_SCHEME_MGF1 |
| |
| TPM_ALG_MGF1 |
| |
| kdf1_SP800_56a TPMS_SCHEME_KDF1_SP800_56a |
| |
| TPM_ALG_KDF1_SP800_56a |
| |
| kdf2 |
| |
| TPMS_SCHEME_KDF2 |
| |
| TPM_ALG_KDF2 |
| |
| kdf1_sp800_108 |
| |
| TPMS_SCHEME_KDF1_SP800_108 |
| |
| Description |
| |
| TPM_ALG_KDF1_SP800_108 |
| |
| null |
| |
| 11.2.3.7 |
| |
| TPM_ALG_NULL |
| |
| TPMT_KDF_SCHEME |
| Table 151 — Definition of TPMT_KDF_SCHEME Structure |
| |
| Parameter |
| |
| Type |
| |
| Description |
| |
| scheme |
| |
| +TPMI_ALG_KDF |
| |
| scheme selector |
| |
| [scheme]details |
| |
| TPMU_KDF_SCHEME |
| |
| scheme parameters |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 115 |
| October 31, 2013 |
| |
| Part 2: Structures |
| 11.2.3.8 |
| |
| Trusted Platform Module Library |
| |
| TPMI_ALG_ASYM_SCHEME |
| |
| List of all of the scheme types for any asymmetric algorithm. This is used to define the |
| TPMT_ASYM_SCHEME. |
| Table 152 — Definition of (TPM_ALG_ID) TPMI_ALG_ASYM_SCHEME Type <> |
| Values |
| |
| Comments |
| |
| TPM_ALG_RSASSA |
| |
| list of the allowed values |
| |
| TPM_ALG_RSAPSS |
| TPM_ALG_RSAES |
| TPM_ALG_OAEP |
| TPM_ALG_ECDSA |
| TPM_ALG_SM2 |
| TPM_ALG_ECDAA |
| TPM_ALG_ECDH |
| +TPM_ALG_NULL |
| #TPM_RC_VALUE |
| |
| 11.2.3.9 |
| |
| TPMU_ASYM_SCHEME |
| |
| This union of all asymmetric schemes is used in each of the asymmetric scheme structures. The actual |
| scheme structure is defined by the interface type used for the selector. |
| EXAMPLE |
| |
| The TPMT_RSA_SCHEME structure uses the TPMU_ASYM_SCHEME union but the selector type is |
| TPMI_ALG_RSA_SCHEME. This means that the only elements of the union that can be selected for th e |
| TPMT_RSA_SCHEME are those that are in TPMI_RSA_SCHEME. |
| |
| Table 153 — Definition of TPMU_ASYM_SCHEME Union |
| Parameter |
| |
| Type |
| |
| Selector |
| |
| Description |
| |
| rsassa |
| |
| TPMS_SCHEME_RSASSA |
| |
| TPM_ALG_RSASSA |
| |
| the PKCS#1v1.5 scheme |
| |
| rsapss |
| |
| TPMS_SCHEME_RSAPSS |
| |
| TPM_ALG_RSAPSS |
| |
| the PKCS#1v2.1 PSS scheme |
| |
| TPM_ALG_RSAES |
| |
| the PKCS#1v2.1 RSAES scheme |
| |
| rsaes |
| oaep |
| |
| TPMS_SCHEME_OAEP |
| |
| TPM_ALG_OAEP |
| |
| the PKSC#1v2.1 OAEP scheme |
| |
| ecdsa |
| |
| TPMS_SCHEME_ECDSA |
| |
| TPM_ALG_ECDSA |
| |
| an ECDSA scheme |
| |
| sm2 |
| |
| TPMS_SCHEME_SM2 |
| |
| TPM_ALG_SM2 |
| |
| sign or key exchange from SM2 |
| |
| ecdaa |
| |
| TPMS_SCHEME_ECDAA |
| |
| TPM_ALG_ECDAA |
| |
| an ECDAA scheme |
| |
| ecSchnorr |
| |
| TPMS_SCHEME_ECSCHNORR |
| |
| TPM_ALG_ECSCHNORR elliptic curve Schnorr signature |
| |
| ecdh |
| anySig |
| |
| TPM_ALG_ECDH |
| TPMS_SCHEME_SIGHASH |
| |
| null |
| |
| Page 116 |
| October 31, 2013 |
| |
| TPM_ALG_NULL |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| no scheme or default |
| This selects the NULL Signature. |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 11.2.3.10 TPMT_ASYM_SCHEME |
| This structure is defined to allow overlay of all of the schemes for any asymmetric object. This structure is |
| not sent on the interface. |
| Table 154 — Definition of TPMT_ASYM_SCHEME Structure <> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| scheme |
| |
| +TPMI_ALG_ASYM_SCHEME |
| |
| scheme selector |
| |
| [scheme]details |
| |
| TPMU_ASYM_SCHEME |
| |
| scheme parameters |
| |
| 11.2.4 RSA |
| 11.2.4.1 |
| |
| TPMI_ALG_RSA_SCHEME |
| |
| The list of values that may appear in the scheme parameter of a TPMS_RSA_PARMS structure. |
| Table 155 — Definition of (TPM_ALG_ID) {RSA} TPMI_ALG_RSA_SCHEME Type |
| Values |
| |
| Comments |
| |
| TPM_ALG_RSASSA |
| |
| list of the allowed values |
| |
| TPM_ALG_RSAPSS |
| TPM_ALG_RSAES |
| TPM_ALG_OAEP |
| +TPM_ALG_NULL |
| #TPM_RC_VALUE |
| |
| 11.2.4.2 |
| |
| TPMT_RSA_SCHEME |
| Table 156 — Definition of {RSA} TPMT_RSA_SCHEME Structure |
| |
| Parameter |
| |
| Type |
| |
| Description |
| |
| scheme |
| |
| +TPMI_ALG_RSA_SCHEME |
| |
| scheme selector |
| |
| [scheme]details |
| |
| TPMU_ASYM_SCHEME |
| |
| scheme parameters |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 117 |
| October 31, 2013 |
| |
| Part 2: Structures |
| 11.2.4.3 |
| |
| Trusted Platform Module Library |
| |
| TPMI_ALG_RSA_DECRYPT |
| |
| The list of values that are allowed in a decryption scheme selection as used in TPM2_RSA_Encrypt() and |
| TPM2_RSA_Decrypt(). |
| Table 157 — Definition of (TPM_ALG_ID) {RSA} TPMI_ALG_RSA_DECRYPT Type |
| Values |
| |
| Comments |
| |
| TPM_ALG_RSAES |
| TPM_ALG_OAEP |
| +TPM_ALG_NULL |
| #TPM_RC_VALUE |
| |
| 11.2.4.4 |
| |
| TPMT_RSA_DECRYPT |
| Table 158 — Definition of {RSA} TPMT_RSA_DECRYPT Structure |
| |
| Parameter |
| |
| Type |
| |
| Description |
| |
| scheme |
| |
| +TPMI_ALG_RSA_DECRYPT |
| |
| scheme selector |
| |
| [scheme]details |
| |
| TPMU_ASYM_SCHEME |
| |
| scheme parameters |
| |
| 11.2.4.5 |
| |
| TPM2B_PUBLIC_KEY_RSA |
| |
| This sized buffer holds the largest RSA public key supported by the TPM. |
| NOTE |
| |
| The reference implementation only supports key sizes of 1,024 and 2,048 bits. |
| |
| Table 159 — Definition of {RSA} TPM2B_PUBLIC_KEY_RSA Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| size |
| |
| UINT16 |
| |
| size of the buffer |
| The value of zero is only valid for create. |
| |
| buffer[size] {: MAX_RSA_KEY_BYTES} |
| |
| BYTE |
| |
| Value |
| |
| 11.2.4.6 |
| |
| TPMI_RSA_KEY_BITS |
| |
| This holds the value that is the maximum size allowed for an RSA key. |
| NOTE 1 |
| |
| An implementation is allowed to provide limited support for smaller RSA key sizes. That is, a TPM may be |
| able to accept a smaller RSA key size in TPM2_LoadExternal() when only the public area is loaded but |
| not accept that smaller key size in any command that loads both the public and private portions of an RSA |
| key. This would allow the TPM to validate signatures using the smaller key but would prevent the TPM |
| from using the smaller key size for any other purpose. |
| |
| NOTE 2 |
| |
| The definition for RSA_KEY_SIZES_BITS used in the reference implementation is found in Annex B |
| |
| Page 118 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| Table 160 — Definition of {RSA} (TPM_KEY_BITS) TPMI_RSA_KEY_BITS Type |
| Parameter |
| |
| Description |
| |
| $RSA_KEY_SIZES_BITS |
| |
| the number of bits in the supported key |
| |
| #TPM_RC_VALUE |
| |
| error when key size is not supported |
| |
| 11.2.4.7 |
| |
| TPM2B_PRIVATE_KEY_RSA |
| |
| This sized buffer holds the largest RSA prime number supported by the TPM. |
| NOTE |
| |
| All primes are required to have exactly half the number of significant bits as the public modulus , and the |
| square of each prime is required to have the same number of significant bits as the public modulus. |
| |
| Table 161 — Definition of {RSA} TPM2B_PRIVATE_KEY_RSA Structure |
| Parameter |
| |
| Type |
| |
| size |
| |
| UINT16 |
| |
| buffer[size]{:MAX_RSA_KEY_BYTES/2} |
| |
| BYTE |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Description |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 119 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 11.2.5 ECC |
| 11.2.5.1 |
| |
| TPM2B_ECC_PARAMETER |
| |
| This sized buffer holds the largest ECC parameter (coordinate) supported by the TPM. |
| Table 162 — Definition of {ECC} TPM2B_ECC_PARAMETER Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| size |
| |
| UINT16 |
| |
| size of buffer |
| |
| buffer[size] {:MAX_ECC_KEY_BYTES} |
| |
| BYTE |
| |
| the parameter data |
| |
| 11.2.5.2 |
| |
| TPMS_ECC_POINT |
| |
| This structure holds two ECC coordinates that, together, make up an ECC point. |
| Table 163 — Definition of {ECC} TPMS_ECC_POINT Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| x |
| |
| TPM2B_ECC_PARAMETER |
| |
| X coordinate |
| |
| y |
| |
| TPM2B_ECC_PARAMETER |
| |
| Y coordinate |
| |
| 11.2.5.3 |
| |
| TPM2B_ECC_POINT |
| |
| This structure is defined to allow a point to be a single sized parameter so that it may be encrypted. |
| NOTE |
| |
| If the point is to be omitted, the X and Y coordinates need to be individual ly set to Empty Buffers. The |
| minimum value for size will be four. It is checked indirectly by unmarshaling of the TPMS_ECC_POINT. If |
| the type of point were BYTE, then size could have been zero. However, this would complicate the process |
| of marshaling the structure. |
| |
| Table 164 — Definition of {ECC} TPM2B_ECC_POINT Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| size= |
| |
| UINT16 |
| |
| size of the remainder of this structure |
| |
| point |
| |
| TPMS_ECC_POINT |
| |
| coordinates |
| error returned if the unmarshaled size of point is |
| not exactly equal to size |
| |
| #TPM_RC_SIZE |
| |
| Page 120 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| 11.2.5.4 |
| |
| Part 2: Structures |
| |
| TPMI_ALG_ECC_SCHEME |
| Table 165 — Definition of (TPM_ALG_ID) {ECC} TPMI_ALG_ECC_SCHEME Type |
| |
| Values |
| |
| Comments |
| |
| TPM_ALG_ECDSA |
| |
| these are the selections allowed for an ECC key |
| |
| TPM_ALG_SM2 |
| TPM_ALG_ECDAA |
| TPM_ALG_ECSCHNORR |
| TPM_ALG_ECDH |
| +TPM_ALG_NULL |
| #TPM_RC_SCHEME |
| |
| 11.2.5.5 |
| |
| TPMI_ECC_CURVE |
| |
| The ECC curves implemented by the TPM. |
| NOTE |
| |
| The definition of ECC_CURVES used in the reference implementation is found in Annex B |
| |
| Table 166 — Definition of {ECC} (TPM_ECC_CURVE) TPMI_ECC_CURVE Type |
| Parameter |
| |
| Description |
| |
| $ECC_CURVES |
| |
| the list of implemented curves |
| |
| #TPM_RC_CURVE |
| |
| error when curve is not supported |
| |
| 11.2.5.6 |
| |
| TPMT_ECC_SCHEME |
| |
| Table 167 — Definition of (TPMT_SIG_SCHEME) {ECC} TPMT_ECC_SCHEME Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| scheme |
| |
| +TPMI_ALG_ECC_SCHEME |
| |
| scheme selector |
| |
| [scheme]details |
| |
| TPMU_SIG_SCHEME |
| |
| scheme parameters |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 121 |
| October 31, 2013 |
| |
| Part 2: Structures |
| 11.2.5.7 |
| |
| Trusted Platform Module Library |
| |
| TPMS_ALGORITHM_DETAIL_ECC |
| |
| This structure is used to report on the curve parameters of an ECC curve. It is returned by |
| TPM2_ECC_Parameters(). |
| Table 168 — Definition of {ECC} TPMS_ALGORITHM_DETAIL_ECC Structure <OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| curveID |
| |
| TPM_ECC_CURVE |
| |
| identifier for the curve |
| |
| keySize |
| |
| UINT16 |
| |
| Size in bits of the key |
| |
| kdf |
| |
| TPMT_KDF_SCHEME |
| |
| the default KDF and hash algorithm used in secret sharing |
| operations |
| |
| sign |
| |
| TPMT_ECC_SCHEME+ |
| |
| If not TPM_ALG_NULL, this is the mandatory signature |
| scheme that is required to be used with this curve. |
| |
| p |
| |
| TPM2B_ECC_PARAMETER |
| |
| Fp (the modulus) |
| |
| a |
| |
| TPM2B_ECC_PARAMETER |
| |
| coefficient of the linear term in the curve equation |
| |
| b |
| |
| TPM2B_ECC_PARAMETER |
| |
| constant term for curve equation |
| |
| gX |
| |
| TPM2B_ECC_PARAMETER |
| |
| x coordinate of base point G |
| |
| gY |
| |
| TPM2B_ECC_PARAMETER |
| |
| y coordinate of base point G |
| |
| n |
| |
| TPM2B_ECC_PARAMETER |
| |
| order of G |
| |
| h |
| |
| TPM2B_ECC_PARAMETER |
| |
| cofactor (a size of zero indicates a cofactor of 1) |
| |
| 11.3 Signatures |
| 11.3.1 TPMS_SIGNATURE_RSASSA |
| Table 169 — Definition of {RSA} TPMS_SIGNATURE_RSASSA Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| hash |
| |
| TPMI_ALG_HASH |
| |
| the hash algorithm used to digest the message |
| TPM_ALG_NULL is not allowed. |
| |
| sig |
| |
| TPM2B_PUBLIC_KEY_RSA |
| |
| The signature is the size of a public key. |
| |
| 11.3.2 TPMS_SIGNATURE_RSAPSS |
| When the TPM generates a PSS signature, the salt size is the largest size allowed by the key and hash |
| combination. |
| EXAMPLE |
| |
| For a 2,048-bit public modulus key and SHA1 hash, the salt size is 256 – 20 – 2 = 234 octets. |
| |
| NOTE |
| |
| While this is significantly larger than required from a securit y perspective, it avoids issues of whether a |
| particular size of salt value is sufficient. |
| |
| Page 122 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| Table 170 — Definition of {RSA} TPMS_SIGNATURE_RSAPSS Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| hash |
| |
| TPMI_ALG_HASH |
| |
| the hash algorithm used in the signature process |
| TPM_ALG_NULL is not allowed. |
| |
| sig |
| |
| TPM2B_PUBLIC_KEY_RSA |
| |
| The signature is the size of a public key. |
| |
| 11.3.3 TPMS_SIGNATURE_ECDSA |
| Table 171 — Definition of {ECC} TPMS_SIGNATURE_ECDSA Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| hash |
| |
| TPMI_ALG_HASH |
| |
| the hash algorithm used in the signature process |
| TPM_ALG_NULL is not allowed. |
| |
| signatureR |
| |
| TPM2B_ECC_PARAMETER |
| |
| signatureS |
| |
| TPM2B_ECC_PARAMETER |
| |
| 11.3.4 TPMU_SIGNATURE |
| A TPMU_SIGNATURE_COMPOSITE is a union of the various signatures that is supported by a particular |
| TPM implementation. The union allows substitution of any signature algorithm wherever a signature is |
| required in a structure. Table 172 is an illustration of a TPMU_SIGNATURE for a TPM that implements |
| both RSA and ECC signing. |
| NOTE 1 |
| |
| All TPM are required to support a hash algorithm and the HMAC algorithm. |
| |
| When a symmetric algorithm is used for signing, the signing algorithm is assumed to be an HMAC based |
| on the indicated hash algorithm. The HMAC key will either be referenced as part of the usage or will be |
| implied by context. |
| NOTE 2 |
| |
| The table below is illustrative. It would be modified to reflect the signatures produced by the TPM. |
| |
| Table 172 — Definition of TPMU_SIGNATURE Union <IN/OUT, S> |
| Parameter |
| |
| Type |
| |
| Selector |
| |
| Description |
| |
| rsassa |
| |
| TPMS_SIGNATURE_RSASSA |
| |
| TPM_ALG_RSASSA |
| |
| a PKCS#1v1.5 signature |
| |
| rsapss |
| |
| TPMS_SIGNATURE_RSAPSS |
| |
| TPM_ALG_RSAPSS |
| |
| a PKCS#1v2.1PSS signature |
| |
| ecdsa |
| |
| TPMS_SIGNATURE_ECDSA |
| |
| TPM_ALG_ECDSA |
| |
| an ECDSA signature |
| |
| sm2 |
| |
| TPMS_SIGNATURE_ECDSA |
| |
| TPM_ALG_SM2 |
| |
| same format as ECDSA |
| |
| ecdaa |
| |
| TPMS_SIGNATURE_ECDSA |
| |
| TPM_ALG_ECDAA |
| |
| same format as ECDSA |
| |
| ecschnorr |
| |
| TPMS_SIGNATURE_ECDSA |
| |
| TPM_ALG_ECSCHNORR |
| |
| same format as ECDSA |
| |
| hmac |
| |
| TPMT_HA |
| |
| TPM_ALG_HMAC |
| |
| HMAC signature (required to |
| be supported) |
| |
| any |
| |
| TPMS_SCHEME_SIGHASH |
| |
| null |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| used to access the hash |
| TPM_ALG_NULL |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| the NULL signature |
| |
| Page 123 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 11.3.5 TPMT_SIGNATURE |
| Table 173 shows the basic algorithm-agile structure when a symmetric or asymmetric signature is |
| indicated. The sigAlg parameter indicates the algorithm used for the signature. This structure is output |
| from the attestation commands and is an input to TPM2_VerifySignature(), TPM2_PolicySigned(), and |
| TPM2_FieldUpgradeStart(). |
| Table 173 — Definition of TPMT_SIGNATURE Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| sigAlg |
| |
| +TPMI_ALG_SIG_SCHEME |
| |
| selector of the algorithm used to construct the signature |
| |
| [sigAlg]signature |
| |
| TPMU_SIGNATURE |
| |
| This shall be the actual signature information. |
| |
| 11.4 Key/Secret Exchange |
| 11.4.1 Introduction |
| The structures in this clause are used when a key or secret is being exchanged. The exchange may be in |
| |
| |
| TPM2_StartAuthSession() where the secret is injected for salting the session, |
| |
| |
| |
| TPM2_Duplicate(), TPM2_Import, or TPM2_Rewrap() where the secret is the symmetric encryption |
| key for the outer wrapper of a duplication blob, or |
| |
| |
| |
| TPM2_ActivateIdentity() or TPM2_CreateIdentity() where the secret is the symmetric encryption key |
| for the credential blob. |
| |
| Particulars are described in Part 1. |
| 11.4.2 TPMU_ENCRYPTED_SECRET |
| This structure is used to hold either an ephemeral public point for ECDH, an OAEP-encrypted block for |
| RSA, or a symmetrically encrypted value. This structure is defined for the limited purpose of determining |
| the size of a TPM2B_ENCRYPTED_SECRET. |
| The symmetrically encrypted value may use either CFB or XOR encryption. |
| NOTE |
| |
| Table 174 is illustrative. It would be modified depending on the algorithms supported in the TPM. |
| |
| Table 174 — Definition of TPMU_ENCRYPTED_SECRET Union <S> |
| Parameter |
| |
| Type |
| |
| Selector |
| |
| ecc[sizeof(TPMS_ECC_POINT)] |
| |
| BYTE |
| |
| TPM_ALG_ECC |
| |
| rsa[MAX_RSA_KEY_BYTES] |
| |
| BYTE |
| |
| TPM_ALG_RSA |
| |
| symmetric[sizeof(TPM2B_DIGEST)] |
| |
| BYTE |
| |
| TPM_ALG_SYMCIPHER |
| |
| keyedHash[sizeof(TPM2B_DIGEST)] |
| |
| BYTE |
| |
| TPM_ALG_KEYEDHASH |
| |
| Page 124 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Description |
| |
| Any symmetrically encrypted |
| secret value will be limited to |
| be no larger than a digest. |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 11.4.3 TPM2B_ENCRYPTED_SECRET |
| Table 175 — Definition of TPM2B_ENCRYPTED_SECRET Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| size |
| |
| UINT16 |
| |
| size of the secret value |
| |
| secret[size] {:sizeof(TPMU_ENCRYPTED_SECRET)} |
| |
| BYTE |
| |
| secret |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 125 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 12 Key/Object Complex |
| 12.1 Introduction |
| An object description requires a TPM2B_PUBLIC structure and may require a TPMT_SENSITIVE |
| structure. When the structure is stored off the TPM, the TPMT_SENSITIVE structure is encrypted within a |
| TPM2B_PRIVATE structure. |
| When the object requires two components for its description, those components are loaded as separate |
| parameters in the TPM2_Load() command. When the TPM creates an object that requires both |
| components, the TPM will return them as separate parameters from the TPM2_Create() operation. |
| The TPM may produce multiple different TPM2B_PRIVATE structures for a single TPM2B_PUBLIC |
| structure. Creation of a modified TPM2B_PRIVATE structure requires that the full structure be loaded with |
| the TPM2_Load() command, modification of the TPMT_SENSITIVE data, and output of a new |
| TPM2B_PRIVATE structure. |
| 12.2 Public Area Structures |
| 12.2.1 Description |
| This clause defines the TPM2B_PUBLIC structure and the higher-level substructure that may be |
| contained in a TPM2B_PUBLIC. The higher-level structures that are currently defined for inclusion in a |
| TPM2B_PUBLIC are the |
| |
| |
| structures for asymmetric keys, |
| |
| |
| |
| structures for symmetric keys, and |
| |
| |
| |
| structures for sealed data. |
| |
| 12.2.2 TPMI_ALG_PUBLIC |
| Table 176 — Definition of (TPM_ALG_ID) TPMI_ALG_PUBLIC Type |
| Values |
| |
| Comments |
| |
| TPM_ALG_KEYEDHASH |
| |
| required of all TPM |
| |
| TPM_ALG_SYMCIPHER |
| |
| required of all TPM |
| |
| TPM_ALG_RSA |
| |
| At least one asymmetric algorithm shall be implemented. |
| |
| TPM_ALG_ECC |
| |
| At least one asymmetric algorithm shall be implemented. |
| |
| #TPM_RC_TYPE |
| |
| response code when a public type is not supported |
| |
| 12.2.3 Type-Specific Parameters |
| 12.2.3.1 |
| |
| Description |
| |
| The public area contains two fields (parameters and unique) that vary by object type. The parameters |
| field varies according to the type of the object but the contents may be the same across multiple |
| instances of a particular type. The unique field format also varies according to the type of the object and |
| will also be unique for each instance. |
| |
| Page 126 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| For a symmetric key (type == TPM_ALG_SYMCIPHER), HMAC key (type == TPM_ALG_KEYEDHASH) |
| or data object (also, type == TPM_ALG_KEYEDHASH), the contents of unique shall be computed from |
| components of the sensitive area of the object as follows: |
| |
| unique ≔ HnameAlg(seedValue || sensitive) |
| |
| (8) |
| |
| where |
| |
| HnameAlg() |
| |
| the hash algorithm used to compute the Name of the object |
| |
| seedValue |
| |
| the digest-sized obfuscation value in the sensitive area of a symmetric |
| key |
| or |
| symmetric |
| data |
| object |
| found |
| in |
| a |
| TPMT_SENSITIVE.seedValue.buffer |
| |
| sensitive |
| |
| the |
| secret |
| key/data |
| of |
| TPMT_SENSITIVE.sensitive.any.buffer |
| |
| 12.2.3.2 |
| |
| the |
| |
| object |
| |
| in |
| |
| the |
| |
| TPMU_PUBLIC_ID |
| Table 177 — Definition of TPMU_PUBLIC_ID Union <IN/OUT, S> |
| |
| Parameter |
| |
| Type |
| |
| Selector |
| |
| keyedHash |
| |
| TPM2B_DIGEST |
| |
| TPM_ALG_KEYEDHASH |
| |
| sym |
| |
| TPM2B_DIGEST |
| |
| TPM_ALG_SYMCIPHER |
| |
| rsa |
| |
| TPM2B_PUBLIC_KEY_RSA |
| |
| TPM_ALG_RSA |
| |
| ecc |
| |
| TPMS_ECC_POINT |
| |
| TPM_ALG_ECC |
| |
| 12.2.3.3 |
| |
| Description |
| |
| TPMS_KEYEDHASH_PARMS |
| |
| This structure describes the parameters that would appear in the public area of a KEYEDHASH object. |
| Note |
| |
| Although the names are the same, the types of the structures are not the same as for asymmetric |
| parameter lists. |
| |
| Table 178 — Definition of TPMS_KEYEDHASH_PARMS Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| scheme |
| |
| TPMT_KEYEDHASH_SCHEME+ |
| |
| Indicates the signing method used for a keyedHash signing |
| object. This field also determines the size of the data field for a |
| data object created with TPM2_Create(). This field shall not be set |
| to TPM_ALG_NULL in a template if either sign or encrypt is SET. |
| |
| 12.2.3.4 |
| |
| TPMS_ASYM_PARMS |
| |
| This structure contains the common public area parameters for an asymmetric key. The first two |
| parameters of the parameter definition structures of an asymmetric key shall have the same two first |
| components. |
| NOTE |
| |
| The sign parameter may have a different type in order to allow different schemes to be selected for each |
| asymmetric type but the first parameter of each scheme definition shall be a TPM_ALG_ID for a valid |
| signing scheme. |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 127 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| Table 179 — Definition of TPMS_ASYM_PARMS Structure <> |
| |
| Parameter |
| |
| Type |
| |
| Description |
| |
| symmetric |
| |
| TPMT_SYM_DEF_OBJECT+ |
| |
| the companion symmetric algorithm for a restricted |
| decryption key and shall be set to a supported symmetric |
| algorithm |
| This field is optional for keys that are not decryption keys |
| and shall be set to TPM_ALG_NULL if not used. |
| |
| scheme |
| |
| TPMT_ASYM_SCHEME+ |
| |
| for a key with the sign attribute SET, a valid signing |
| scheme for the key type |
| for a key with the decrypt attribute SET, a valid key |
| exchange protocol |
| for a key with sign and decrypt attributes, shall be |
| TPM_ALG_NULL |
| |
| 12.2.3.5 |
| |
| TPMS_RSA_PARMS |
| |
| A TPM compatible with this specification and supporting RSA shall support numPrimes of two and an |
| exponent of zero. Support for other values is optional. Use of other exponents in duplicated keys is not |
| recommended because the resulting keys would not be interoperable with other TPMs. |
| NOTE 1 |
| |
| Implementations are not required to check that exponent is the default exponent. They may fail to load the |
| key if exponent is not zero. The reference implementation allows the values listed in the table. |
| |
| Table 180 — Definition of {RSA} TPMS_RSA_PARMS Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| symmetric |
| |
| TPMT_SYM_DEF_OBJECT+ for a restricted decryption key, shall be set to a |
| supported symmetric algorithm, key size, and mode. |
| if the key is not a restricted decryption key, this field |
| shall be set to TPM_ALG_NULL. |
| |
| scheme |
| |
| TPMT_RSA_SCHEME+ |
| |
| for a signing key, shall be either TPM_ALG_RSAPSS |
| TPM_ALG_RSASSA or TPM_ALG_NULL |
| for an unrestricted decryption key, shall be |
| TPM_ALG_RSAES, |
| TPM_ALG_OAEP, |
| or |
| TPM_ALG_NULL unless the object also has the sign |
| attribute |
| for a restricted decryption key, this field shall be |
| TPM_ALG_NULL |
| NOTE |
| |
| keyBits |
| |
| When both sign and decrypt are SET, restricted |
| shall be CLEAR and scheme shall be |
| TPM_ALG_NULL. |
| |
| TPMI_RSA_KEY_BITS |
| |
| number of bits in the public modulus |
| |
| UINT32 |
| |
| the public exponent |
| A prime number greater than 2. |
| When zero, indicates that the exponent is the default |
| 16 |
| of 2 + 1 |
| |
| #TPM_RC_KEY_SIZE |
| exponent |
| |
| #TPM_RC_VALUE |
| |
| Page 128 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| 12.2.3.6 |
| |
| Part 2: Structures |
| |
| TPMS_ECC_PARMS |
| |
| This structure contains the parameters for prime modulus ECC. |
| Table 181 — Definition of {ECC} TPMS_ECC_PARMS Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| symmetric |
| |
| TPMT_SYM_DEF_OBJECT+ |
| |
| for a restricted decryption key, shall be set to a supported |
| symmetric algorithm, key size. and mode. |
| if the key is not a restricted decryption key, this field shall be |
| set to TPM_ALG_NULL. |
| |
| scheme |
| |
| TPMT_ECC_SCHEME+ |
| |
| If the sign attribute of the key is SET, then this shall be a valid |
| signing scheme. |
| NOTE |
| |
| If the sign parameter in curveID indicates a mandatory |
| scheme, then this field shall have the same value. |
| |
| If the decrypt attribute of the key is SET, then this shall be a |
| valid key exchange scheme or TPM_ALG_NULL. |
| If the key is a Storage Key, then this field shall be |
| TPM_ALG_NULL. |
| curveID |
| |
| TPMI_ECC_CURVE |
| |
| ECC curve ID |
| |
| kdf |
| |
| TPMT_KDF_SCHEME+ |
| |
| an optional key derivation scheme for generating a symmetric |
| key from a Z value |
| If the kdf |
| parameter associated with curveID is not |
| TPM_ALG_NULL then this is required to be NULL. |
| NOTE |
| |
| 12.2.3.7 |
| |
| There are currently no commands where this parameter |
| has effect and, in the reference code, this field needs to |
| be set to TPM_ALG_NULL. |
| |
| TPMU_PUBLIC_PARMS |
| |
| Table 182 defines the possible parameter definition structures that may be contained in the public portion |
| of a key. |
| Table 182 — Definition of TPMU_PUBLIC_PARMS Union <IN/OUT, S> |
| Parameter |
| |
| Type |
| |
| (1) |
| |
| Selector |
| |
| Description |
| |
| keyedHashDetail TPMS_KEYEDHASH_PARMS |
| |
| TPM_ALG_KEYEDHASH |
| |
| sign | encrypt | neither |
| |
| symDetail |
| |
| TPMS_SYMCIPHER_PARMS |
| |
| TPM_ALG_SYMCIPHER |
| |
| a symmetric block cipher |
| |
| rsaDetail |
| |
| TPMS_RSA_PARMS |
| |
| TPM_ALG_RSA |
| |
| decrypt + sign |
| |
| (2) |
| |
| eccDetail |
| |
| TPMS_ECC_PARMS |
| |
| TPM_ALG_ECC |
| |
| decrypt + sign |
| |
| (2) |
| |
| asymDetail |
| |
| TPMS_ASYM_PARMS |
| |
| common scheme structure |
| for RSA and ECC keys |
| |
| NOTES |
| 1) |
| |
| Description column indicates which of TPMA_OBJECT.decrypt or TPMA_OBJECT.sign may be set. |
| |
| 2) |
| |
| “+” indicates that both may be set but one shall be set. “|” indicates the optional settings. |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 129 |
| October 31, 2013 |
| |
| Part 2: Structures |
| 12.2.3.8 |
| |
| Trusted Platform Module Library |
| |
| TPMT_PUBLIC_PARMS |
| |
| This structure is used in TPM2_TestParms() to validate that a set of algorithm parameters is supported by |
| the TPM. |
| Table 183 — Definition of TPMT_PUBLIC_PARMS Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| type |
| |
| TPMI_ALG_PUBLIC |
| |
| the algorithm to be tested |
| |
| [type]parameters |
| |
| TPMU_PUBLIC_PARMS the algorithm details |
| |
| 12.2.4 TPMT_PUBLIC |
| Table 184 defines the public area structure. The Name of the object is nameAlg concatenated with the |
| digest of this structure using nameAlg. |
| Table 184 — Definition of TPMT_PUBLIC Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| type |
| |
| TPMI_ALG_PUBLIC |
| |
| “algorithm” associated with this object |
| |
| nameAlg |
| |
| +TPMI_ALG_HASH |
| |
| algorithm used for computing the Name of the object |
| NOTE |
| |
| The "+" indicates that the instance of a TPMT_PUBLIC may have |
| a "+" to indicate that the nameAlg may be TPM_ALG_NULL. |
| |
| objectAttributes |
| |
| TPMA_OBJECT |
| |
| attributes that, along with type, determine the manipulations of this |
| object |
| |
| authPolicy |
| |
| TPM2B_DIGEST |
| |
| optional policy for using this key |
| The policy is computed using the nameAlg of the object. |
| NOTE |
| |
| Shall be the Empty Buffer if no authorization policy is present. |
| |
| [type]parameters |
| |
| TPMU_PUBLIC_PARMS the algorithm or structure details |
| |
| [type]unique |
| |
| TPMU_PUBLIC_ID |
| |
| Page 130 |
| October 31, 2013 |
| |
| the unique identifier of the structure |
| For an asymmetric key, this would be the public key. |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 12.2.5 TPM2B_PUBLIC |
| This sized buffer is used to embed a TPMT_PUBLIC in a command. |
| Table 185 — Definition of TPM2B_PUBLIC Structure |
| Parameter |
| |
| Type |
| |
| Description |
| |
| size= |
| |
| UINT16 |
| |
| size of publicArea |
| NOTE |
| |
| publicArea |
| |
| +TPMT_PUBLIC |
| |
| The “=” will force the TPM to try to unmarshal a |
| TPMT_PUBLIC and check that the unmarshaled size |
| matches the value of size. If all the required fields of |
| a TPMT_PUBLIC are not present, the TPM will return |
| an error (generally TPM_RC_SIZE) when attempting |
| to unmarshal the TPMT_PUBLIC. |
| |
| the public area |
| NOTE |
| |
| The “+” indicates that the caller may specify that use |
| of TPM_ALG_NULL is allowed for nameAlg. |
| |
| 12.3 Private Area Structures |
| 12.3.1 Introduction |
| The structures in 12.3 define the contents and construction of the private portion of a TPM object. A |
| TPM2B_PRIVATE along with a TPM2B_PUBLIC are needed to describe a TPM object. |
| A TPM2B_PRIVATE area may be encrypted by different symmetric algorithms or, in some cases, not |
| encrypted at all. |
| 12.3.2 Sensitive Data Structures |
| 12.3.2.1 |
| |
| Introduction |
| |
| The structures in 12.3.2 define the presumptive internal representations of the sensitive areas of the |
| various entities. A TPM may store the sensitive information in any desired format but when constructing a |
| TPM_PRIVATE, the formats in this clause shall be used. |
| 12.3.2.2 |
| |
| TPM2B_PRIVATE_VENDOR_SPECIFIC |
| |
| This structure is defined for coding purposes. For IO to the TPM, the sensitive portion of the key will be in |
| a canonical form. For an RSA key, this will be one of the prime factors of the public modulus. After |
| loading, it is typical that other values will be computed so that computations using the private key will not |
| need to start with just one prime factor. This structure allows the vendor-specific structure to use the |
| space of the |
| The value for RSA_VENDOR_SPECIFIC is determined by the vendor. |
| Table 186 — Definition of {RSA} TPM2B_PRIVATE_VENDOR_SPECIFIC Structure<> |
| Parameter |
| |
| Type |
| |
| size |
| |
| UINT16 |
| |
| buffer[size]{:PRIVATE_VENDOR_SPECIFIC_BYTES} |
| |
| BYTE |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Description |
| |
| Page 131 |
| October 31, 2013 |
| |
| Part 2: Structures |
| 12.3.2.3 |
| |
| Trusted Platform Module Library |
| |
| TPMU_SENSITIVE_COMPOSITE |
| Table 187 — Definition of TPMU_SENSITIVE_COMPOSITE Union <IN/OUT, S> |
| |
| Parameter |
| |
| Type |
| |
| Selector |
| |
| Description |
| |
| rsa |
| |
| TPM2B_PRIVATE_KEY_RSA |
| |
| TPM_ALG_RSA |
| |
| a prime factor of the public |
| key |
| |
| ecc |
| |
| TPM2B_ECC_PARAMETER |
| |
| TPM_ALG_ECC |
| |
| the integer private key |
| |
| bits |
| |
| TPM2B_SENSITIVE_DATA |
| |
| TPM_ALG_KEYEDHASH |
| |
| the private data |
| |
| sym |
| |
| TPM2B_SYM_KEY |
| |
| TPM_ALG_SYMCIPHER |
| |
| the symmetric key |
| |
| any |
| |
| TPM2B_PRIVATE_VENDOR_SPECIFIC |
| |
| 12.3.2.4 |
| |
| vendor-specific size for key |
| storage |
| |
| TPMT_SENSITIVE |
| Table 188 — Definition of TPMT_SENSITIVE Structure |
| |
| Parameter |
| |
| Type |
| |
| Description |
| |
| sensitiveType |
| |
| TPMI_ALG_PUBLIC |
| |
| identifier for the sensitive area |
| This shall be the same as the type parameter of the |
| associated public area. |
| |
| authValue |
| |
| TPM2B_AUTH |
| |
| user authorization data |
| The authValue may be a zero-length string. |
| This value shall not be larger than the size of the |
| digest produced by the nameAlg of the object. |
| |
| seedValue |
| |
| TPM2B_DIGEST |
| |
| for asymmetric key object, the optional protection |
| seed; for other objects, the obfuscation value |
| This value shall not be larger than the size of the |
| digest produced by nameAlg of the object. |
| |
| [sensitiveType]sensitive |
| |
| TPMU_SENSITIVE_COMPOSITE |
| |
| the type-specific private data |
| |
| 12.3.3 TPM2B_SENSITIVE |
| The TPM2B_SENSITIVE structure is used as a parameter in TPM2_LoadExternal(). It is an unencrypted |
| sensitive area but it may be encrypted using parameter encryption. |
| NOTE |
| |
| When this structure is unmarshaled, the size of the sensitiveType determines what type of value is |
| unmarshaled. Each value of sensitiveType is associated with a TPM2B. It is the maximum size for each of |
| the TPM2B values will determine if the unmarshal operation is successful . Since there is no selector for |
| the any or vendor options for the union, the maximum input and output sizes for a TMP2B_SENSITIVE |
| are not affected by the sizes of those parameters. |
| |
| Table 189 — Definition of TPM2B_SENSITIVE Structure <IN/OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| size |
| |
| UINT16 |
| |
| size of the private structure |
| |
| sensitiveArea |
| |
| TPMT_SENSITIVE |
| |
| an unencrypted sensitive area |
| |
| Page 132 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 12.3.4 Encryption |
| A TPMS_SENSITIVE is the input to the encryption process. All TPMS_ENCRYPT structures are CFBencrypted using a key and Initialization Vector (IV) that are derived from a seed value. |
| The method of generating the key and IV is described in “Protected Storage” subclause “Symmetric |
| Encryption.” in Part 1. |
| 12.3.5 Integrity |
| The integrity computation is used to ensure that a protected object is modified when stored in memory |
| outside of the TPM. |
| The method of protecting the integrity of the sensitive area is described in “Protected Storage” subclause |
| “Integrity” in Part 1. |
| 12.3.6 _PRIVATE |
| This structure is defined to size the contents of a TPM2B_PRIVATE. This structure is not directly |
| marshaled or unmarshaled. |
| For TPM2_Duplicate() and TPM2_Import(), the TPM2B_PRIVATE may contain multiply encrypted data |
| and two integrity values. In some cases, the sensitive data is not encrypted and the integrity value is not |
| present. |
| For TPM2_Load() and TPM2_Create(), integrityInner is always present. |
| If integrityInner is present, it and sensitive are encrypted as a single block. |
| When an integrity value is not needed, it is not present and it is not represented by an Empty Buffer. |
| Table 190 — Definition of _PRIVATE Structure <> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| integrityOuter |
| |
| TPM2B_DIGEST |
| |
| integrityInner |
| |
| TPM2B_DIGEST |
| |
| could also be a TPM2B_IV |
| |
| sensitive |
| |
| TPMT_SENSITIVE |
| |
| the sensitive area |
| |
| 12.3.7 TPM2B_PRIVATE |
| The TPM2B_PRIVATE structure is used as a parameter in multiple commands that create, load, and |
| modify the sensitive area of an object. |
| Table 191 — Definition of TPM2B_PRIVATE Structure <IN/OUT, S> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| size |
| |
| UINT16 |
| |
| size of the private structure |
| |
| buffer[size] {:sizeof(_PRIVATE)} |
| |
| BYTE |
| |
| an encrypted private area |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 133 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 12.4 Identity Object |
| 12.4.1 Description |
| An identity object is used to convey credential protection value (CV) to a TPM that can load the object |
| associated with the object. The CV is encrypted to a storage key on the target TPM, and if the credential |
| integrity checks and the proper object is loaded in the TPM, then the TPM will return the CV. |
| 12.4.2 _ID_OBJECT |
| This structure is used for sizing the TPM2_ID_OBJECT. |
| Table 192 — Definition of _ID_OBJECT Structure <> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| integrityHMAC |
| |
| TPM2B_DIGEST |
| |
| HMAC using the nameAlg of the storage key on the target |
| TPM |
| |
| encIdentity |
| |
| TPM2B_DIGEST |
| |
| credential protector information returned if name matches the |
| referenced object |
| All of the encIdentity is encrypted, including the size field. |
| NOTE |
| |
| The TPM is not required to check that the size is not larger |
| than the digest of the nameAlg. However, if the size is |
| larger, the ID object may not be usable on a TPM that has |
| no digest larger than produced by nameAlg. |
| |
| 12.4.3 TPM2B_ID_OBJECT |
| This structure is an output from TPM2_MakeCredential() and is an input to TPM2_ActivateCredential(). |
| Table 193 — Definition of TPM2B_ID_OBJECT Structure <IN/OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| size |
| |
| UINT16 |
| |
| size of the credential structure |
| |
| credential[size]{:sizeof(_ID_OBJECT)} |
| |
| BYTE |
| |
| an encrypted credential area |
| |
| Page 134 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 13 NV Storage Structures |
| 13.1 TPM_NV_INDEX |
| A TPM_NV_INDEX is used to reference a defined location in NV memory. The format of the Index is |
| changed from TPM 1.2 in order to include the Index in the reserved handle space. Handles in this range |
| use the digest of the public area of the Index as the Name of the entity in authorization computations |
| The 32-bit TPM 1.2 NV Index format is shown in Figure 4. In order to allow the Index to fit into the 24 bits |
| available in the reserved handle space, the Index value format is changed as shown in Figure 5. |
| 3 3 2 2 2 2 2 2 2 |
| 1 0 9 8 7 6 5 4 3 |
| |
| 1 1 |
| 6 5 |
| |
| T P U D reserved |
| |
| 0 |
| 0 |
| |
| Purview |
| |
| Index |
| |
| Figure 4 — TPM 1.2 TPM_NV_INDEX |
| 3 |
| 1 |
| |
| 2 2 |
| 4 3 |
| |
| 0 |
| 0 |
| |
| TPM_HT_NV_INDEX |
| |
| Index |
| |
| Figure 5 — TPM 2.0 TPM_NV_INDEX |
| NOTE |
| |
| This TPM_NV_INDEX format does not retain the Purview field and the D bit is not a part of an Index |
| handle as in TPM 1.2. The TPMA_NV_PLATFORMCREATE attribute is a property of an Index that |
| provides functionality similar to the D bit. |
| |
| A valid Index handle will have an MSO of TPM_HT_NV_INDEX. |
| NOTE |
| |
| This structure is not used. It is defined here to indicate how the fields of the handle are assigned. The |
| exemplary unmarshaling code unmarshals a TPM_HANDLE and validates that it is in the range for a |
| TPM_NV_INDEX. |
| |
| Table 194 — Definition of (UINT32) TPM_NV_INDEX Bits <> |
| Bit |
| |
| Name |
| |
| Definition |
| |
| 23:0 |
| |
| index |
| |
| The index of the NV location |
| |
| 31:24 |
| |
| RH_NV |
| |
| constant value of TPM_HT_NV_INDEX indicating the NV Index range |
| |
| #TPM_RC_VALUE |
| |
| response code returned if unmarshaling of this type fails because the handle |
| value is incorrect |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 135 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| Table 195 — Options for space Field of TPM_NV_INDEX |
| |
| Some prior versions of this specification contained a table here that assigned subsets of the index field to |
| different entities. Since this assignment was a convention and not an architectural element of the TPM, |
| the table was removed and the information is now contained in a registry document that is maintained by |
| the TCG. |
| 13.2 TPMA_NV (NV Index Attributes) |
| This structure allows the TPM to keep track of the data and permissions to manipulate an NV Index. |
| The platform controls (TPMA_NV_PPWRITE and TPMA_NV_PPREAD) and owner controls |
| (TPMA_NV_OWNERWRITE and TPMA_NV_OWNERREAD) give the platform and owner access to NV |
| Indexes using platformAuth or ownerAuth rather than the authValue or authPolicy of the Index. |
| If access to an NV Index is to be restricted based on PCR, then an appropriate authPolicy shall be |
| provided. |
| NOTE |
| |
| platformAuth or ownerAuth can be provided in any type of authorization session or as a password. |
| |
| If TPMA_NV_AUTHREAD is SET, then the Index may be read if the Index authValue is provided. If |
| TPMA_NV_POLICYREAD is SET, then the Index may be read if the Index authPolicy is satisfied. |
| At least one of TPMA_NV_PPREAD, |
| TPMA_NV_POLICYREAD shall be SET. |
| |
| TPMA_NV_OWNERREAD, |
| |
| TPMA_NV_AUTHREAD, |
| |
| or |
| |
| If TPMA_NV_AUTHWRITE is SET, then the Index may be written if the Index authValue is provided. If |
| TPMA_NV_POLICYWRITE is SET, then the Index may be written if the Index authPolicy is satisfied. |
| At least one of TPMA_NV_PPWRITE, TPMA_NV_OWNERWRITE TPMA_NV_AUTHWRITE, or |
| TPMA_NV_POLICYWRITE shall be SET. |
| If TPMA_NV_WRITELOCKED is SET, then the Index may not be written. If TPMA_NV_WRITEDEFINE is |
| SET, TPMA_NV_WRITELOCKED may not be CLEAR except by deleting and redefining the Index. If |
| TPMA_NV_WRITEDEFINE is CLEAR, then TPMA_NV_WRITELOCK will be CLEAR on the next |
| TPM2_Startup(TPM_SU_CLEAR). |
| If TPMA_NV_READLOCKED is SET, then the Index may not be read. TPMA_NV_READLOCK will be |
| CLEAR on the next TPM2_Startup(TPM_SU_CLEAR). |
| NOTE |
| |
| The TPM is expected to maintain indicators to indicate that the Index is temporarily locked. The state of |
| these indicators is reported in the TPMA_NV_READLOCKED and TPMA_NV_WRITELOCKED attributes. |
| |
| If TPMA_NV_EXTEND is SET, then writes to the Index will cause an update of the Index using the extend |
| operation with the nameAlg used to create the digest. |
| Only one of TPMA_NV_EXTEND, TPMA_NV_COUNTER, or TPMA_NV_BITS may be set. |
| When |
| the |
| Index |
| is |
| created |
| (TPM2_NV_DefineSpace()), |
| TPMA_NV_WRITELOCKED, |
| TPMA_NV_READLOCKED, TPMA_NV_WRITTEN shall all be CLEAR in the parameter that defines the |
| attributes of the created Index. |
| |
| Page 136 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| Table 196 — Definition of (UINT32) TPMA_NV Bits |
| Bit |
| |
| Name |
| |
| Description |
| |
| 0 |
| |
| TPMA_NV_PPWRITE |
| |
| SET (1): The Index data can be written if platformAuth is provided. |
| CLEAR (0): Writing of the Index data cannot be authorized with |
| platformAuth. |
| |
| 1 |
| |
| TPMA_NV_OWNERWRITE |
| |
| SET (1): The Index data can be written if ownerAuth is provided. |
| CLEAR (0): Writing of the Index data cannot be authorized with |
| ownerAuth. |
| |
| 2 |
| |
| TPMA_NV_AUTHWRITE |
| |
| SET (1): Authorizations to change the Index contents that require |
| USER role may be provided with an HMAC session or password. |
| CLEAR (0): Authorizations to change the Index contents that require |
| USER role may not be provided with an HMAC session or password. |
| |
| 3 |
| |
| TPMA_NV_POLICYWRITE |
| |
| SET (1): Authorizations to change the Index contents that require |
| USER role may be provided with a policy session. |
| CLEAR (0): Authorizations to change the Index contents that require |
| USER role may not be provided with a policy session. |
| NOTE |
| |
| TPM2_NV_ChangeAuth() always requires that authorization be |
| provided in a policy session. |
| |
| 4 |
| |
| TPMA_NV_COUNTER |
| |
| SET (1): Index contains an 8-octet value that is to be used as a |
| counter and can only be modified with TPM2_NV_Increment(). |
| CLEAR (0): The Index is not a counter. |
| |
| 5 |
| |
| TPMA_NV_BITS |
| |
| SET (1): Index contains an 8-octet value to be used as a bit field and |
| can only be modified with TPM2_NV_SetBits(). |
| CLEAR (0): The Index is not a bit field. |
| |
| 6 |
| |
| TPMA_NV_EXTEND |
| |
| SET (1): Index contains a digest-sized value used like a PCR. The |
| Index may only be modified using TPM2_NV_Extend. The extend will |
| use the nameAlg of the Index. |
| CLEAR (0): Index is not a PCR. |
| |
| 9:7 |
| |
| Reserved |
| |
| shall be zero |
| reserved for use in defining additional write controls |
| |
| 10 |
| |
| TPMA_NV_POLICY_DELETE |
| |
| SET (1): Index may not be deleted unless the authPolicy is satisfied. |
| CLEAR (0): Index may be deleted with proper platform or owner |
| authorization. |
| |
| 11 |
| |
| TPMA_NV_WRITELOCKED |
| |
| SET (1): Index cannot be written. |
| CLEAR (0): Index can be written. |
| |
| 12 |
| |
| TPMA_NV_WRITEALL |
| |
| SET (1): A partial write of the Index data is not allowed. The write |
| size shall match the defined space size. |
| CLEAR (0): Partial writes are allowed. This setting is required if |
| TPMA_NV_BITS is SET. |
| |
| 13 |
| |
| TPMA_NV_WRITEDEFINE |
| |
| SET (1): TPM2_NV_WriteLock() may be used to prevent further |
| writes to this location. |
| CLEAR (0): TPM2_NV_WriteLock() does not block subsequent |
| writes. |
| |
| 14 |
| |
| TPMA_NV_WRITE_STCLEAR |
| |
| SET (1): TPM2_NV_WriteLock() may be used to prevent further |
| writes to this location until the next TPM Reset or TPM Restart. |
| CLEAR (0): A write to this Index with a data size of zero does not |
| change the write access. |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 137 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| Bit |
| |
| Name |
| |
| Description |
| |
| 15 |
| |
| TPMA_NV_GLOBALLOCK |
| |
| SET (1): If TPM2_NV_GlobalWriteLock() is successful, then further |
| writes to this location are not permitted until the next TPM Reset or |
| TPM Restart. |
| CLEAR (0): TPM2_NV_GlobalWriteLock() has no effect on the |
| writing of the data at this Index. |
| |
| 16 |
| |
| TPMA_NV_PPREAD |
| |
| SET (1): The Index data can be read if platformAuth is provided. |
| CLEAR (0): Reading of the Index data cannot be authorized with |
| platformAuth. |
| |
| 17 |
| |
| TPMA_NV_OWNERREAD |
| |
| SET (1): The Index data can be read if ownerAuth is provided. |
| CLEAR (0): Reading of the Index data cannot be authorized with |
| ownerAuth. |
| |
| 18 |
| |
| TPMA_NV_AUTHREAD |
| |
| SET (1): The Index data may be read if the authValue is provided. |
| CLEAR (0): Reading of the Index data cannot be authorized with the |
| Index authValue. |
| |
| 19 |
| |
| TPMA_NV_POLICYREAD |
| |
| SET (1): The Index data may be read if the authPolicy is satisfied. |
| CLEAR (0): Reading of the Index data cannot be authorized with the |
| Index authPolicy. |
| |
| Reserved |
| |
| shall be zero |
| reserved for use in defining additional read controls |
| |
| 25 |
| |
| TPMA_NV_NO_DA |
| |
| SET (1): Authorization failures of the Index do not affect the DA logic |
| and authorization of the Index is not blocked when the TPM is in |
| Lockout mode. |
| CLEAR (0): Authorization failures of the Index will increment the |
| authorization failure counter and authorizations of this Index are not |
| allowed when the TPM is in Lockout mode. |
| |
| 26 |
| |
| TPMA_NV_ORDERLY |
| |
| SET (1): NV Index state is only required to be saved when the TPM |
| performs an orderly shutdown (TPM2_Shutdown()). Only an Index |
| with TPMA_NV_COUNTER SET may have this setting. |
| CLEAR (0): NV Index state is required to be persistent after the |
| command to update the Index completes successfully (that is, the NV |
| update is synchronous with the update command). |
| |
| 27 |
| |
| TPMA_NV_CLEAR_STCLEAR |
| |
| SET (1): TPMA_NV_WRITTEN for the Index is CLEAR by TPM |
| Reset or TPM Restart. |
| CLEAR (0): TPMA_NV_WRITTEN is not changed by TPM Restart. |
| |
| 24:20 |
| |
| NOTE |
| |
| This attribute may only be SET if TPMA_NV_COUNTER is not |
| SET. |
| |
| NOTE |
| |
| If the TPMA_NV_ORDERLY is SET, TPMA_NV_WRITTEN will |
| be CLEAR by TPM Reset. |
| |
| 28 |
| |
| TPMA_NV_READLOCKED |
| |
| SET (1): Reads of the Index are blocked until the next TPM Reset or |
| TPM Restart. |
| CLEAR (0): Reads of the Index are allowed if proper authorization is |
| provided. |
| |
| 29 |
| |
| TPMA_NV_WRITTEN |
| |
| SET (1): Index has been written. |
| CLEAR (0): Index has not been written. |
| |
| 30 |
| |
| TPMA_NV_PLATFORMCREATE |
| |
| SET (1): This Index may be undefined with platformAuth but not with |
| ownerAuth. |
| CLEAR (0): This Index may be undefined using ownerAuth but not |
| with platformAuth. |
| The TPM will validate that this attribute is SET when the Index is |
| defined using platformAuth and will validate that this attribute is |
| CLEAR when the Index is defined using ownerAuth. |
| |
| Page 138 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| Bit |
| |
| Name |
| |
| Description |
| |
| 31 |
| |
| TPMA_NV_READ_STCLEAR |
| |
| SET (1): TPM2_NV_ReadLock() may be used to SET |
| TPMA_NV_READLOCKED for this Index. |
| CLEAR (0): TPM2_NV_ReadLock() has no effect on this Index. |
| |
| 13.3 TPMS_NV_PUBLIC |
| This structure describes an NV Index. |
| Table 197 — Definition of TPMS_NV_PUBLIC Structure |
| Name |
| |
| Type |
| |
| Description |
| |
| nvIndex |
| |
| TPMI_RH_NV_INDEX |
| |
| the handle of the data area |
| |
| nameAlg |
| |
| TPMI_ALG_HASH |
| |
| hash algorithm used to compute the name of the |
| Index and used for the authPolicy |
| |
| attributes |
| |
| TPMA_NV |
| |
| the Index attributes |
| |
| authPolicy |
| |
| TPM2B_DIGEST |
| |
| the access policy for the Index |
| |
| dataSize{:MAX_NV_INDEX_SIZE} |
| |
| UINT16 |
| |
| the size of the data area |
| The |
| maximum |
| size is implementationdependent. The minimum maximum size is |
| platform-specific. |
| |
| #TPM_RC_SIZE |
| |
| response code returned when the requested size |
| is too large for the implementation |
| |
| 13.4 TPM2B_NV_PUBLIC |
| This structure is used when a TPMS_NV_PUBLIC is sent on the TPM interface. |
| Table 198 — Definition of TPM2B_NV_PUBLIC Structure |
| Name |
| |
| Type |
| |
| Description |
| |
| size= |
| |
| UINT16 |
| |
| size of nvPublic |
| |
| nvPublic |
| |
| TPMS_NV_PUBLIC |
| |
| the public area |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 139 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 14 Context Data |
| 14.1 Introduction |
| This clause defines the contents of the |
| TPM2_ContextLoad() command parameters. |
| |
| TPM2_ContextSave() |
| |
| response |
| |
| parameters |
| |
| and |
| |
| If the parameters provided by the caller in TPM2_ContextLoad() do not match the values returned by the |
| TPM when the context was saved, the integrity check of the TPM2B_CONTEXT will fail and the object or |
| session will not be loaded. |
| 14.2 TPM2B_CONTEXT_SENSITIVE |
| This structure holds the object or session context data. When saved, the full structure is encrypted. |
| Table 199 — Definition of TPM2B_CONTEXT_SENSITIVE Structure <IN/OUT> |
| Parameter |
| |
| Type |
| |
| size |
| |
| Description |
| |
| UINT16 |
| |
| buffer[size]{:MAX_CONTEXT_SIZE} BYTE |
| |
| the sensitive data |
| |
| 14.3 TPMS_CONTEXT_DATA |
| This structure holds the integrity value and the encrypted data for a context. |
| Table 200 — Definition of TPMS_CONTEXT_DATA Structure <IN/OUT, S> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| integrity |
| |
| TPM2B_DIGEST |
| |
| the integrity value |
| |
| encrypted |
| |
| TPM2B_CONTEXT_SENSITIVE |
| |
| the sensitive area |
| |
| 14.4 TPM2B_CONTEXT_DATA |
| This structure is used in a TPMS_CONTEXT. |
| Table 201 — Definition of TPM2B_CONTEXT_DATA Structure <IN/OUT> |
| Parameter |
| |
| Type |
| |
| size |
| |
| Description |
| |
| UINT16 |
| |
| buffer[size] {:sizeof(TPMS_CONTEXT_DATA)} BYTE |
| |
| Page 140 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 14.5 TPMS_CONTEXT |
| This structure is used in TPM2_ContextLoad() and TPM2_ContextSave(). If the values of the |
| TPMS_CONTEXT structure in TPM2_ContextLoad() are not the same as the values when the context |
| was saved (TPM2_ContextSave()), then the TPM shall not load the context. |
| Saved object contexts shall not be loaded as long as the associated hierarchy is disabled. |
| Saved object contexts are invalidated when the Primary Seed of their hierarchy changes. Objects in the |
| Endorsement hierarchy are invalidated when either the EPS or SPS is changed. |
| When an object has the stClear attribute, it shall not be possible to reload the context or any descendant |
| object after a TPM Reset or TPM Restart. |
| NOTE 1 |
| |
| The reference implementation prevents reloads after TPM Restart by including the curre nt value of a |
| clearCount in the saved object context. When an object is loaded, this value is compared with the current |
| value of the clearCount if the object has the stClear attribute. If the values are not the same, then the |
| object cannot be loaded. |
| |
| A sequence value is contained within the integrity-protected part of the saved context. The sequence |
| value is repeated in the sequence parameter of the TPMS_CONTEXT of the context. The sequence |
| parameter, along with other values, is used in the generation the protection values of the context. |
| If the integrity value of the context is valid, but the sequence value of the decrypted context does not |
| match the value in the sequence parameter, then TPM shall enter the failure mode because this is |
| indicative of a specific type of attack on the context values. |
| NOTE 2 |
| |
| If the integrity value is correct, but the decryption fails and produces the wrong value for sequence, this |
| implies that either the TPM is faulty or an external entity is able to forge an integrity val ue for the context |
| but they have insufficient information to know what the encryption key of the context. Since the TPM |
| generated the valid context, then there is no reason for the sequence value in the context to be decrypted |
| incorrectly other than the TPM is faulty or the TPM is under attack. In either case, it is appropriate for the |
| TPM to enter failure more. |
| |
| Table 202 — Definition of TPMS_CONTEXT Structure |
| Name |
| |
| Type |
| |
| Description |
| |
| sequence |
| |
| UINT64 |
| |
| the sequence number of the context |
| NOTE |
| |
| Transient object contexts and |
| contexts used different counters. |
| |
| session |
| |
| savedHandle |
| |
| TPMI_DH_CONTEXT |
| |
| the handle of the session, object or sequence |
| |
| hierarchy |
| |
| TPMI_RH_HIERARCHY+ |
| |
| the hierarchy of the context |
| |
| contextBlob |
| |
| TPM2B_CONTEXT_DATA |
| |
| the context data and integrity HMAC |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 141 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 14.6 Parameters of TPMS_CONTEXT |
| 14.6.1 sequence |
| The sequence parameter is used to differentiate the contexts and to allow the TPM to create a different |
| encryption key for each context. Objects and sessions use different sequence counters. The sequence |
| counter for objects (transient and sequence) is incremented when an object context is saved, and the |
| sequence counter for sessions increments when a session is created or when it is loaded |
| (TPM2_ContextLoad()). The session sequence number is the contextID counter. |
| For a session, the sequence number also allows the TRM to find the “older” contexts so that they may be |
| refreshed if the contextID are too widely separated. |
| If an input value for sequence is larger than the value used in any saved context, the TPM shall return an |
| error (TPM_RC_VALUE) and do no additional processing of the context. |
| If the context is a session context and the input value for sequence is less than the current value of |
| contextID minus the maximum range for sessions, the TPM shall return an error (TPM_RC_VALUE) and |
| do no additional processing of the context. |
| 14.6.2 savedHandle |
| For a session, this is the handle that was assigned to the session when it was saved. For a transient |
| object, the handle will have one of the values shown in Table 203. |
| If the handle type for savedHandle is TPM_HT_TRANSIENT, then the low order bits are used to |
| differentiate static objects from sequence objects. |
| If an input value for handle is outside of the range of values used by the TPM, the TPM shall return an |
| error (TPM_RC_VALUE) and do no additional processing of the context. |
| Table 203 — Context Handle Values |
| Value |
| |
| Description |
| |
| 0x02xxxxxx |
| |
| an HMAC session context |
| |
| 0x03xxxxxx |
| |
| a policy session context |
| |
| 0x80000000 |
| |
| an ordinary transient object |
| |
| 0x80000001 |
| |
| a sequence object |
| |
| 0x80000002 |
| |
| a transient object with the stClear attribute SET |
| |
| Page 142 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| 14.6.3 hierarchy |
| This is the hierarchy (TPMI_RH_HIERARCHY) for the saved context and determines the proof value used |
| in the construction of the encryption and integrity values for the context. For session and sequence |
| contexts, the hierarchy is TPM_RC_NULL. The hierarchy for a transient object may be TPM_RH_NULL |
| but it is not required. |
| 14.7 Context Protection |
| 14.7.1 Context Integrity |
| The integrity of the context blob is protected by an HMAC. The integrity value is constructed such that |
| changes to the component values will invalidate the context and prevent it from being loaded. |
| Previously saved contexts for objects in the Platform hierarchy shall not be loadable after the PPS is |
| changed. |
| Previously saved contexts for objects in the Storage hierarchy shall not be loadable after the SPS is |
| changed. |
| Previously saved contexts for objects in the Endorsement hierarchy shall not be loadable after either the |
| EPS or SPS is changed. |
| Previously saved sessions shall not be loadable after the SPS changes. |
| Previously saved contexts for objects that have their stClear attribute SET shall not be loadable after a |
| TPM Restart. If a Storage Key has its stClear attribute SET, the descendants of this key shall not be |
| loadable after TPM Restart. |
| Previously saved contexts for a session and objects shall not be loadable after a TPM Reset. |
| A saved context shall not be loaded if its HMAC is not valid. The equation for computing the HMAC for a |
| context is found in “Context Integrity Protection” in Part 1. |
| 14.7.2 Context Confidentiality |
| The context data of sessions and objects shall be protected by symmetric encryption using CFB. The |
| method for computing the IV and encryption key is found in “Context Confidentiality Protection” in Part 1. |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 143 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| 15 Creation Data |
| 15.1 TPMS_CREATION_DATA |
| This structure provides information relating to the creation environment for the object. The creation data |
| includes the parent Name, parent Qualified Name, and the digest of selected PCR. These values |
| represent the environment in which the object was created. Creation data allows a relying party to |
| determine if an object was created when some appropriate protections were present. |
| When the object is created, the structure shown in Table 204 is generated and a ticket is computed over |
| this data. |
| If |
| the |
| parent |
| is |
| a |
| permanent |
| handle |
| (TPM_RH_OWNER, |
| TPM_RH_PLATFORM, |
| TPM_RH_ENDORSEMENT, or TPM_RH_NULL), then parentName and parentQualifiedName will be set |
| to the parent handle value and parentNameAlg will be TPM_ALG_NULL. |
| Table 204 — Definition of TPMS_CREATION_DATA Structure <OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| pcrSelect |
| |
| TPML_PCR_SELECTION |
| |
| list indicating the PCR included in pcrDigest |
| |
| pcrDigest |
| |
| TPM2B_DIGEST |
| |
| digest of the selected PCR using nameAlg of the object for |
| which this structure is being created |
| pcrDigest.size shall be zero if the pcrSelect list is empty. |
| |
| locality |
| |
| TPMA_LOCALITY |
| |
| the locality at which the object was created |
| |
| parentNameAlg |
| |
| TPM_ALG_ID |
| |
| nameAlg of the parent |
| |
| parentName |
| |
| TPM2B_NAME |
| |
| Name of the parent at time of creation |
| The size will match digest size associated with parentNameAlg |
| unless it is TPM_ALG_NULL, in which case the size will be 4 |
| and parentName will be the hierarchy handle. |
| |
| parentQualifiedName |
| |
| TPM2B_NAME |
| |
| Qualified Name of the parent at the time of creation |
| Size is the same as parentName. |
| |
| outsideInfo |
| |
| TPM2B_DATA |
| |
| association with additional information added by the key |
| creator |
| This will be the contents of the outsideInfo parameter in |
| TPM2_Create() or TPM2_CreatePrimary(). |
| |
| 15.2 TPM2B_CREATION_DATA |
| This structure is created by TPM2_Create() and TPM2_CreatePrimary(). It is never entered into the TPM |
| and never has a size of zero. |
| Table 205 — Definition of TPM2B_CREATION_DATA Structure <OUT> |
| Parameter |
| |
| Type |
| |
| Description |
| |
| size= |
| |
| UINT16 |
| |
| size of the creation data |
| |
| creationData |
| |
| TPMS_CREATION_DATA |
| |
| Page 144 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| Annex A |
| (informative) |
| Algorithm Constants |
| A.1 |
| |
| Introduction |
| |
| This annex contains constants that are defined by algorithms. |
| |
| A.2 |
| A.2.1 |
| |
| Allowed Hash Algorithms |
| SHA1 |
| Table 206 — Defines for SHA1 Hash Values |
| |
| Name |
| |
| Value |
| |
| SHA1_DIGEST_SIZE |
| |
| 20 |
| |
| SHA1_BLOCK_SIZE |
| |
| 64 |
| |
| SHA1_DER_SIZE |
| |
| Description |
| |
| 15 |
| |
| SHA1_DER |
| |
| A.2.2 |
| |
| Values are in octets. |
| |
| {0x30,0x21,0x30,0x09,0x06,0x05,0x2B,0x0E, |
| 0x03,0x02,0x1A,0x05,0x00,0x04,0x14} |
| |
| SHA256 |
| Table 207 — Defines for SHA256 Hash Values |
| |
| Name |
| |
| Value |
| |
| SHA256_DIGEST_SIZE |
| |
| 32 |
| |
| SHA256_BLOCK_SIZE |
| |
| 64 |
| |
| SHA256_DER_SIZE |
| |
| Description |
| |
| 19 |
| |
| SHA256_DER |
| |
| A.2.3 |
| |
| Values are in octets. |
| |
| {0x30,0x31,0x30,0x0d,0x06,0x09,0x60,0x86, |
| 0x48,0x01,0x65,0x03,0x04,0x02,0x01,0x05, |
| 0x00,0x04,0x20} |
| |
| SHA384 |
| Table 208 — Defines for SHA384 Hash Values |
| |
| Name |
| |
| Value |
| |
| SHA384_DIGEST_SIZE |
| |
| 48 |
| |
| SHA384_BLOCK_SIZE |
| |
| 128 |
| |
| SHA384_DER_SIZE |
| |
| Description |
| |
| 19 |
| |
| SHA384_DER |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Values are in octets. |
| |
| {0x30,0x41,0x30,0x0d,0x06,0x09,0x60,0x86, |
| 0x48,0x01,0x65,0x03,0x04,0x02,0x02,0x05, |
| 0x00,0x04,0x30} |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 145 |
| October 31, 2013 |
| |
| Part 2: Structures |
| A.2.4 |
| |
| Trusted Platform Module Library |
| |
| SHA512 |
| Table 209 — Defines for SHA512 Hash Values |
| |
| Name |
| |
| Value |
| |
| SHA512_DIGEST_SIZE |
| |
| 64 |
| |
| SHA512_BLOCK_SIZE |
| |
| 128 |
| |
| SHA512_DER_SIZE |
| |
| Description |
| |
| 19 |
| |
| SHA512_DER |
| |
| A.2.5 |
| |
| Values are in octets. |
| |
| {0x30,0x51,0x30,0x0d,0x06,0x09,0x60,0x86, |
| 0x48,0x01,0x65,0x03,0x04,0x02,0x03,0x05, |
| 0x00,0x04,0x40} |
| |
| SM3_256 |
| Table 210 — Defines for SM3_256 Hash Values |
| |
| Name |
| |
| Value |
| |
| Description |
| |
| SM3_256_DIGEST_SIZE |
| |
| 32 |
| |
| Values are in octets. |
| |
| SM3_256_BLOCK_SIZE |
| |
| 64 |
| |
| ?? |
| |
| SM3_256_DER_SIZE |
| |
| 18 |
| |
| SM3_256_DER |
| |
| A.3 |
| |
| {0x30,0x30,0x30,0x0c,0x06,0x08,0x2a,0x81, |
| 0x1c,0x81,0x45,0x01,0x83,0x11,0x05,0x00, |
| 0x04,0x20} |
| |
| Unknown |
| |
| Architectural Limits |
| Table 211 — Defines for Architectural Limits Values |
| |
| Name |
| MAX_SESSION_NUMBER |
| |
| Page 146 |
| October 31, 2013 |
| |
| Value |
| 3 |
| |
| Description |
| the maximum number of authorization sessions that may be in a |
| command |
| This value may be increased if new commands require more than |
| two authorization handles. |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| Annex B |
| (informative) |
| Implementation Definitions |
| B.1 |
| |
| Introduction |
| |
| This annex contains some of the tables that are used to define the desired implementation for the |
| automated tools. |
| NOTE |
| |
| B.2 |
| |
| The reference implementation assumes that stdint.h is used. |
| |
| Logic Values |
| |
| The values in this clause are used to see the generation of the subsequent tables. These values should |
| not be changed. |
| Table 212 — Defines for Logic Values |
| Name |
| |
| Value |
| |
| YES |
| |
| 1 |
| |
| NO |
| |
| 0 |
| |
| TRUE |
| |
| 1 |
| |
| FALSE |
| |
| 0 |
| |
| SET |
| |
| 1 |
| |
| CLEAR |
| |
| Description |
| |
| 0 |
| |
| B.3 |
| |
| Processor Values |
| |
| These values are used to control generation of octet-swapping routines. The canonical octet ordering for |
| the TPM input/output buffer is “big endian” with the most significant octet of any datum at the lowest |
| address. |
| NOTE |
| |
| The setting for the exemplar is for the x86 family of processor. |
| |
| Table 213 — Defines for Processor Values |
| Name |
| |
| Value |
| |
| Description |
| |
| BIG_ENDIAN_TPM |
| |
| NO |
| |
| set to YES or NO according to the processor |
| |
| LITTLE_ENDIAN_TPM |
| |
| YES |
| |
| set to YES or NO according to the processor |
| NOTE |
| |
| NO_AUTO_ALIGN |
| |
| NO |
| |
| set to YES if the processor does not allow unaligned accesses |
| NOTE |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| BIG_ENDIAN and LITTLE_ENDIAN shall be set to opposite values. |
| |
| If LITTLE_ENDIAN is YES, then the setting of this value has no effect. |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 147 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| B.4 |
| |
| Trusted Platform Module Library |
| |
| Implemented Algorithms |
| |
| Table 214 is used to indicate the algorithms that are implemented in a TPM. The selections in the Value |
| column may be changed to reflect the implementation. The values shown are illustrative. |
| The "Implemented" column contains a "Y", "YES", or blank to indicate that the command is present in the |
| implementation, an "N" or "NO" to indicate that the command is not implemented. |
| The leading and trailing “_” characters are to avoid name space collisions with some crypto libraries. |
| |
| NOTE |
| |
| Table 214 — Defines for Implemented Algorithms |
| Algorithm Name |
| |
| Implemented |
| |
| RSA |
| |
| YES |
| |
| SHA1 |
| |
| YES |
| |
| HMAC |
| |
| YES |
| |
| AES |
| |
| YES |
| |
| MGF1 |
| |
| YES |
| |
| XOR |
| |
| YES |
| |
| KEYEDHASH |
| |
| YES |
| |
| SHA256 |
| |
| YES |
| |
| SHA384 |
| |
| NO |
| |
| SHA512 |
| |
| NO |
| |
| SM3_256 |
| |
| YES |
| |
| SM4 |
| |
| Comments |
| |
| YES |
| |
| REQUIRED, do not change this value |
| |
| REQUIRED, do not change this value |
| |
| RSASSA |
| |
| (YES * RSA) |
| |
| requires RSA |
| |
| RSAES |
| |
| (YES * RSA) |
| |
| requires RSA |
| |
| RSAPSS |
| |
| (YES * RSA) |
| |
| requires RSA |
| |
| OAEP |
| |
| (YES * RSA) |
| |
| requires RSA |
| |
| ECC |
| |
| YES |
| |
| ECDH |
| |
| (YES * ECC) |
| |
| requires ECC |
| |
| ECDSA |
| |
| (YES * ECC) |
| |
| requires ECC |
| |
| ECDAA |
| |
| (YES * ECC) |
| |
| requires ECC |
| |
| SM2 |
| |
| (YES * ECC) |
| |
| requires ECC |
| |
| ECSCHNORR |
| |
| (YES * ECC) |
| |
| requires ECC |
| |
| ECMQV |
| |
| (NO * ECC) |
| |
| requires ECC |
| |
| SYMCIPHER |
| KDF1_SP800_56a |
| |
| YES |
| |
| REQUIRED, at least one symmetric algorithm shall be implemented |
| |
| (YES * ECC) |
| |
| KDF2 |
| |
| NO |
| |
| KDF1_SP800_108 |
| |
| YES |
| |
| CTR |
| |
| YES |
| |
| OFB |
| |
| YES |
| |
| CBC |
| |
| YES |
| |
| CFB |
| |
| YES |
| |
| ECB |
| |
| requires ECC |
| |
| YES |
| |
| B.5 |
| |
| REQUIRED, do not change this value |
| |
| Implemented Commands |
| |
| Page 148 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| This table is used to indicate which of the commands are implemented. In the reference implementation, |
| this table determines which commands can be called and drives the generation of various commanddependent switch statements. |
| The "Implemented or Dependent" column contains a "Y", "YES", or blank to indicate that the command is |
| present in the implementation; an "N" or "NO" to indicate that the command is not implemented; and an |
| algorithm value if implementation of the command is dependent on a setting in Table 214. Linkage to |
| Table 214 is not required and is provide as a convenience. |
| To indicate that the command is implemented, only "Y", "N", blank, or a value from Table 214 is allowed. |
| Table 215 — Defines for Implemented Commands |
| Name |
| ActivateCredential |
| |
| Implemented |
| or Dependent |
| |
| Comments |
| |
| YES |
| |
| Certify |
| |
| Y |
| |
| CertifyCreation |
| |
| Y |
| |
| ChangeEPS |
| |
| Y |
| |
| ChangePPS |
| |
| Y |
| |
| Clear |
| |
| Y |
| |
| ClearControl |
| |
| Y |
| |
| ClockRateAdjust |
| |
| Y |
| |
| ClockSet |
| |
| Y |
| |
| Commit |
| |
| ECC |
| |
| ContextLoad |
| |
| Y |
| |
| Context |
| |
| ContextSave |
| |
| Y |
| |
| Context |
| |
| Create |
| |
| Y |
| |
| CreatePrimary |
| |
| Y |
| |
| DictionaryAttackLockReset |
| |
| Y |
| |
| DictionaryAttackParameters |
| |
| Y |
| |
| Duplicate |
| |
| Y |
| |
| ECC_Parameters |
| |
| ECC |
| |
| ECDH_KeyGen |
| |
| ECC |
| |
| ECDH_ZGen |
| |
| ECC |
| |
| EncryptDecrypt |
| |
| Y |
| |
| EventSequenceComplete |
| |
| Y |
| |
| EvictControl |
| |
| Y |
| |
| FieldUpgradeData |
| |
| N |
| |
| FieldUpgradeStart |
| |
| N |
| |
| FirmwareRead |
| |
| N |
| |
| FlushContext |
| |
| Y |
| |
| GetCapability |
| |
| Y |
| |
| GetCommandAuditDigest |
| |
| Y |
| |
| GetRandom |
| |
| Y |
| |
| GetSessionAuditDigest |
| |
| Y |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Context |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 149 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Name |
| |
| Trusted Platform Module Library |
| Implemented |
| or Dependent |
| |
| Comments |
| |
| GetTestResult |
| |
| Y |
| |
| GetTime |
| |
| Y |
| |
| Hash |
| |
| Y |
| |
| HashSequenceStart |
| |
| Y |
| |
| HierarchyChangeAuth |
| |
| Y |
| |
| HierarchyControl |
| |
| Y |
| |
| HMAC |
| |
| Y |
| |
| HMAC_Start |
| |
| Y |
| |
| Import |
| |
| Y |
| |
| IncrementalSelfTest |
| |
| Y |
| |
| Load |
| |
| Y |
| |
| LoadExternal |
| |
| Y |
| |
| MakeCredential |
| |
| Y |
| |
| NV_Certify |
| |
| Y |
| |
| NV_ChangeAuth |
| |
| Y |
| |
| NV_DefineSpace |
| |
| Y |
| |
| NV_Extend |
| |
| Y |
| |
| NV_GlobalWriteLock |
| |
| Y |
| |
| NV_Increment |
| |
| Y |
| |
| NV_Read |
| |
| Y |
| |
| NV_ReadLock |
| |
| Y |
| |
| NV_ReadPublic |
| |
| Y |
| |
| NV_SetBits |
| |
| Y |
| |
| NV_UndefineSpace |
| |
| Y |
| |
| NV_UndefineSpaceSpecial |
| |
| Y |
| |
| NV_Write |
| |
| Y |
| |
| NV_WriteLock |
| |
| Y |
| |
| ObjectChangeAuth |
| |
| Y |
| |
| PCR_Allocate |
| |
| Y |
| |
| PCR_Event |
| |
| Y |
| |
| PCR_Extend |
| |
| Y |
| |
| PCR_Read |
| |
| Y |
| |
| PCR |
| |
| PCR_Reset |
| |
| Y |
| |
| PCR |
| |
| PCR_SetAuthPolicy |
| |
| Y |
| |
| PCR_SetAuthValue |
| |
| Y |
| |
| PolicyAuthorize |
| |
| Y |
| |
| Policy |
| |
| PolicyAuthValue |
| |
| Y |
| |
| Policy |
| |
| PolicyCommandCode |
| |
| Y |
| |
| Policy |
| |
| PolicyCounterTimer |
| |
| Y |
| |
| Policy |
| |
| PolicyCpHash |
| |
| Y |
| |
| Policy |
| |
| Page 150 |
| October 31, 2013 |
| |
| NV |
| |
| PCR |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| Implemented |
| or Dependent |
| |
| Name |
| |
| Comments |
| |
| PolicyDuplicationSelect |
| |
| Y |
| |
| Policy |
| |
| PolicyGetDigest |
| |
| Y |
| |
| Policy |
| |
| PolicyLocality |
| |
| Y |
| |
| Policy |
| |
| PolicyNameHash |
| |
| Y |
| |
| Policy |
| |
| PolicyNV |
| |
| Y |
| |
| Policy |
| |
| PolicyOR |
| |
| Y |
| |
| Policy |
| |
| PolicyPassword |
| |
| Y |
| |
| Policy |
| |
| PolicyPCR |
| |
| Y |
| |
| Policy |
| |
| PolicyPhysicalPresence |
| |
| Y |
| |
| Policy |
| |
| PolicyRestart |
| |
| Y |
| |
| PolicySecret |
| |
| Y |
| |
| Policy |
| |
| PolicySigned |
| |
| Y |
| |
| Policy |
| |
| PolicyTicket |
| |
| Y |
| |
| Policy |
| |
| PP_Commands |
| |
| Y |
| |
| Quote |
| |
| Y |
| |
| ReadClock |
| |
| Y |
| |
| ReadPublic |
| |
| Y |
| |
| Rewrap |
| |
| Y |
| |
| RSA_Decrypt |
| |
| RSA |
| |
| RSA_Encrypt |
| |
| RSA |
| |
| SelfTest |
| |
| Y |
| |
| SequenceComplete |
| |
| Y |
| |
| SequenceUpdate |
| |
| Y |
| |
| SetAlgorithmSet |
| |
| Y |
| |
| SetCommandCodeAuditStatus |
| |
| Y |
| |
| SetPrimaryPolicy |
| |
| Y |
| |
| Shutdown |
| |
| Y |
| |
| Sign |
| |
| Y |
| |
| StartAuthSession |
| |
| Y |
| |
| Startup |
| |
| Y |
| |
| StirRandom |
| |
| Y |
| |
| TestParms |
| |
| Y |
| |
| Unseal |
| |
| Y |
| |
| VerifySignature |
| |
| Y |
| |
| ZGen_2Phase |
| |
| Y |
| |
| EC_Ephemeral |
| |
| Y |
| |
| PolicyNvWritten |
| |
| Y |
| |
| B.6 |
| |
| Algorithm Constants |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 151 |
| October 31, 2013 |
| |
| Part 2: Structures |
| B.6.1 |
| |
| Trusted Platform Module Library |
| |
| RSA |
| Table 216 — Defines for RSA Algorithm Constants |
| |
| Name |
| |
| Value |
| |
| Comments |
| |
| RSA_KEY_SIZES_BITS |
| |
| {1024, 2048} |
| |
| braces because this is a |
| list value |
| |
| MAX_RSA_KEY_BITS |
| |
| 2048 |
| |
| MAX_RSA_KEY_BYTES |
| |
| ((MAX_RSA_KEY_BITS + 7) / 8) |
| |
| B.6.2 |
| |
| ECC |
| Table 217 — Defines for ECC Algorithm Constants |
| |
| Name |
| |
| Value |
| |
| ECC_CURVES |
| |
| {TPM_ECC_NIST_P256, TPM_ECC_BN_P256, |
| TPM_ECC_SM2_P256} |
| |
| ECC_KEY_SIZES_BITS |
| |
| {256} |
| |
| MAX_ECC_KEY_BITS |
| |
| 256 |
| |
| MAX_ECC_KEY_BYTES |
| |
| ((MAX_ECC_KEY_BITS + 7) / 8) |
| |
| B.6.3 |
| |
| Comments |
| |
| this is a list value with |
| length of one |
| |
| AES |
| Table 218 — Defines for AES Algorithm Constants |
| |
| Name |
| |
| Value |
| |
| AES_KEY_SIZES_BITS |
| |
| {128} |
| |
| MAX_AES_KEY_BITS |
| |
| 128 |
| |
| MAX_AES_BLOCK_SIZE_BYTES |
| |
| 16 |
| |
| MAX_AES_KEY_BYTES |
| |
| ((MAX_AES_KEY_BITS + 7) / 8) |
| |
| B.6.4 |
| |
| Comments |
| |
| SM4 |
| Table 219 — Defines for SM4 Algorithm Constants |
| |
| Name |
| |
| Value |
| |
| SM4_KEY_SIZES_BITS |
| |
| {128} |
| |
| MAX_SM4_KEY_BITS |
| |
| 128 |
| |
| MAX_SM4_BLOCK_SIZE_BYTES |
| |
| 16 |
| |
| MAX_SM4_KEY_BYTES |
| |
| ((MAX_SM4_KEY_BITS + 7) / 8) |
| |
| Page 152 |
| October 31, 2013 |
| |
| Comments |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| B.6.5 |
| |
| Part 2: Structures |
| |
| Symmetric |
| |
| The definitions in this table are derived from the implemented symmetric algorithms. |
| Table 220 — Defines for Symmetric Algorithm Constants |
| Name |
| |
| Value |
| |
| MAX_SYM_KEY_BITS |
| |
| MAX_AES_KEY_BITS |
| |
| MAX_SYM_KEY_BYTES |
| |
| MAX_AES_KEY_BYTES |
| |
| MAX_SYM_BLOCK_SIZE |
| |
| MAX_AES_BLOCK_SIZE_BYTES |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Comments |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 153 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| B.7 |
| |
| Trusted Platform Module Library |
| |
| Implementation Specific Values |
| |
| The values listed in Table 221 are defined for a specific TPM implementation. The numbers in the Value |
| column may be changed to reflect the implementation. The values shown are illustrative. |
| Table 221 — Defines for Implementation Values |
| Name |
| |
| Value |
| |
| Description |
| |
| FIELD_UPGRADE_IMPLEMENTED |
| |
| NO |
| |
| temporary define |
| |
| BSIZE |
| |
| UINT16 |
| |
| size used for internal storage of |
| the size field of a TPM2B |
| This is the definition used for |
| the reference design. |
| Compilation with this value |
| changed may cause warnings |
| about conversions. |
| |
| BUFFER_ALIGNMENT |
| |
| 4 |
| |
| sets the size granularity for the |
| buffers in a TPM2B structure |
| TPMxB buffers will be assigned |
| a space that is a multiple of this |
| value. This does not set the size |
| limits for IO. Those are set by |
| the canonical form of the |
| TPMxB |
| |
| IMPLEMENTATION_PCR |
| |
| 24 |
| |
| the number of PCR in the TPM |
| |
| PLATFORM_PCR |
| |
| 24 |
| |
| the number of PCR required by |
| the relevant platform |
| specification |
| |
| DRTM_PCR |
| |
| 17 |
| |
| the DRTM PCR |
| |
| HCRTM_PCR |
| |
| 0 |
| |
| the PCR that will receive the HCRTM value at TPM2_Startup |
| |
| NUM_LOCALITIES |
| |
| 5 |
| |
| the number of localities |
| supported by the TPM |
| This is expected to be either 5 |
| for a PC, or 1 for just about |
| everything else. |
| |
| MAX_HANDLE_NUM |
| |
| 3 |
| |
| the maximum number of |
| handles in the handle area |
| This should be produced by the |
| Part 3 parser but is here for |
| now. |
| |
| MAX_ACTIVE_SESSIONS |
| |
| 64 |
| |
| the number of simultaneously |
| active sessions that are |
| supported by the TPM |
| implementation |
| |
| CONTEXT_SLOT |
| |
| UINT16 |
| |
| the type of an entry in the array |
| of saved contexts |
| |
| CONTEXT_COUNTER |
| |
| UINT64 |
| |
| the type of the saved session |
| counter |
| |
| MAX_LOADED_SESSIONS |
| |
| 3 |
| |
| the number of sessions that the |
| TPM may have in memory |
| |
| MAX_SESSION_NUM |
| |
| 3 |
| |
| this is the current maximum |
| value |
| |
| Page 154 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Trusted Platform Module Library |
| |
| Part 2: Structures |
| |
| Name |
| |
| Value |
| |
| Description |
| |
| MAX_LOADED_OBJECTS |
| |
| 3 |
| |
| the number of simultaneously |
| loaded objects that are |
| supported by the TPM; this |
| number does not include the |
| objects that may be placed in |
| NV memory by |
| TPM2_EvictControl(). |
| |
| MIN_EVICT_OBJECTS |
| |
| 2 |
| |
| the minimum number of evict |
| objects supported by the TPM |
| |
| PCR_SELECT_MIN |
| |
| ((PLATFORM_PCR+7)/8) |
| |
| PCR_SELECT_MAX |
| |
| ((IMPLEMENTATION_PCR+7)/8) |
| |
| NUM_POLICY_PCR_GROUP |
| |
| 1 |
| |
| number of PCR groups that |
| have individual policies |
| |
| NUM_AUTHVALUE_PCR_GROUP |
| |
| 1 |
| |
| number of PCR groups that |
| have individual authorization |
| values |
| |
| MAX_CONTEXT_SIZE |
| |
| 4000 |
| |
| This may be larger than |
| necessary |
| |
| MAX_DIGEST_BUFFER |
| |
| 1024 |
| |
| MAX_NV_INDEX_SIZE |
| |
| 2048 |
| |
| maximum data size allowed in |
| an NV Index |
| |
| MAX_NV_BUFFER_SIZE |
| |
| 1024 |
| |
| maximum data size in one NV |
| read or write command |
| |
| MAX_CAP_BUFFER |
| |
| 1024 |
| |
| NV_MEMORY_SIZE |
| |
| 16384 |
| |
| NUM_STATIC_PCR |
| |
| 16 |
| |
| MAX_ALG_LIST_SIZE |
| |
| 64 |
| |
| number of algorithms that can |
| be in a list |
| |
| TIMER_PRESCALE |
| |
| 100000 |
| |
| nominal value for the pre-scale |
| value of Clock (the number of |
| cycles of the TPM's oscillator for |
| each increment of Clock) |
| |
| PRIMARY_SEED_SIZE |
| |
| 32 |
| |
| size of the Primary Seed in |
| octets |
| |
| CONTEXT_ENCRYPT_ALG |
| |
| TPM_ALG_AES |
| |
| context encryption algorithm |
| |
| CONTEXT_ENCRYPT_KEY_BITS |
| |
| MAX_SYM_KEY_BITS |
| |
| context encryption key size in |
| bits |
| |
| CONTEXT_ENCRYPT_KEY_BYTES |
| |
| ((CONTEXT_ENCRYPT_KEY_BITS+7 |
| )/8) |
| |
| CONTEXT_INTEGRITY_HASH_ALG |
| |
| TPM_ALG_SHA256 |
| |
| context integrity hash algorithm |
| |
| CONTEXT_INTEGRITY_HASH_SIZE |
| |
| SHA256_DIGEST_SIZE |
| |
| number of byes in the context |
| integrity digest |
| |
| PROOF_SIZE |
| |
| CONTEXT_INTEGRITY_HASH_SIZE |
| |
| size of proof value in octets |
| This size of the proof should be |
| consistent with the digest size |
| used for context integrity. |
| |
| NV_CLOCK_UPDATE_INTERVAL |
| |
| 12 |
| |
| the update interval expressed |
| as a power of 2 seconds |
| |
| size of NV memory in octets |
| |
| A value of 12 is 4,096 seconds |
| (~68 minutes). |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Page 155 |
| October 31, 2013 |
| |
| Part 2: Structures |
| |
| Trusted Platform Module Library |
| |
| Name |
| |
| Value |
| |
| Description |
| |
| NUM_POLICY_PCR |
| |
| 1 |
| |
| number of PCR that allow |
| policy/auth |
| |
| MAX_COMMAND_SIZE |
| |
| 4096 |
| |
| maximum size of a command |
| |
| MAX_RESPONSE_SIZE |
| |
| 4096 |
| |
| maximum size of a response |
| |
| ORDERLY_BITS |
| |
| 8 |
| |
| number between 1 and 32 |
| inclusive |
| |
| MAX_ORDERLY_COUNT |
| |
| ((1 << ORDERLY_BITS) - 1) |
| |
| maximum count of orderly |
| counter before NV is updated |
| This must be of the form 2N – 1 |
| where 1 ≤ N ≤ 32. |
| |
| ALG_ID_FIRST |
| |
| TPM_ALG_FIRST |
| |
| used by GetCapability() |
| processing to bound the |
| algorithm search |
| |
| ALG_ID_LAST |
| |
| TPM_ALG_LAST |
| |
| used by GetCapability() |
| processing to bound the |
| algorithm search |
| |
| MAX_SYM_DATA |
| |
| 128 |
| |
| this is the maximum number of |
| octets that may be in a sealed |
| blob. |
| |
| MAX_RNG_ENTROPY_SIZE |
| |
| 64 |
| |
| RAM_INDEX_SPACE |
| |
| 512 |
| |
| RSA_DEFAULT_PUBLIC_EXPONENT |
| |
| 0x00010001 |
| |
| 216 + 1 |
| |
| ENABLE_PCR_NO_INCREMENT |
| |
| YES |
| |
| indicates if the |
| TPM_PT_PCR_NO_INCREME |
| NT group is implemented |
| |
| CRT_FORMAT_RSA |
| |
| YES |
| |
| PRIVATE_VENDOR_SPECIFIC_BYTES |
| |
| ((MAX_RSA_KEY_BYTES/2) * (3 + |
| CRT_FORMAT_RSA * 2)) |
| |
| Page 156 |
| October 31, 2013 |
| |
| Published |
| Copyright © TCG 2006-2013 |
| |
| Family “2.0” |
| Level 00 Revision 00.99 |
| |
| |