17797 lines
363 KiB
Text
17797 lines
363 KiB
Text
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
|
||
|
||
|