blob: 6d375fe029e3f2ca76b22f7a54c8bb5d09efef70 [file] [log] [blame]
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