summaryrefslogtreecommitdiff
path: root/ReferenceCode/ME/SampleCode/Include/IndustryStandard/Tpm20Implementation.h
blob: d21eb53e3eb3e5dbd0e42f20fe5f31407c9bf071 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
/** @file

  Definitions for Tpm 2.0 implementation

@copyright
  Copyright (c) 2012 Intel Corporation. All rights reserved
  This software and associated documentation (if any) is furnished
  under a license and may only be used or copied in accordance
  with the terms of the license. Except as permitted by such
  license, no part of this software or documentation may be
  reproduced, stored in a retrieval system, or transmitted in any
  form or by any means without the express written consent of
  Intel Corporation.

  This file contains a 'Sample Driver' and is licensed as such
  under the terms of your license agreement with Intel or your
  vendor.  This file may be modified by the user, subject to
  the additional terms of the license agreement
**/

#ifndef    _IMPLEMENTATION_H
#define    _IMPLEMENTATION_H

// Table 205 -- Hash Algorithm Digest and Block Size Values
#define    SHA1_DIGEST_SIZE            20
#define    SHA1_BLOCK_SIZE             64
#define    SHA256_DIGEST_SIZE          32
#define    SHA256_BLOCK_SIZE           64
#define    SM3_256_DIGEST_SIZE         32
#define    SM3_256_BLOCK_SIZE          64
#define    SHA384_DIGEST_SIZE          48
#define    SHA384_BLOCK_SIZE           128
#define    SHA512_DIGEST_SIZE          64
#define    SHA512_BLOCK_SIZE           128
#define    WHIRLPOOL512_DIGEST_SIZE    64
#define    WHIRLPOOL512_BLOCK_SIZE     64

// Table 206 -- DER Values
#define    SHA1_DER_SIZE      15
#define    SHA1_DER           {0x30,0x21,0x30,0x09,0x06,0x05,0x2B,0x0E,0x03,0x02,0x1A,0x05,0x00,0x04,0x14}
#define    SHA256_DER_SIZE    19
#define    SHA256_DER         {0x30,0x31,0x30,0x0d,0x06,0x09,0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x01,0x05,0x00,0x04,0x20}
#define    SHA384_DER_SIZE    19
#define    SHA384_DER         {0x30,0x41,0x30,0x0d,0x06,0x09,0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x02,0x05,0x00,0x04,0x30}
#define    SHA512_DER_SIZE    19
#define    SHA512_DER         {0x30,0x51,0x30,0x0d,0x06,0x09,0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x03,0x05,0x00,0x04,0x40}

// Table 207 -- Architectural Limits Values
#define    MAX_SESSION_NUMBER    3

// Table 208 -- Minimum and Maximum Values
#ifndef UINT8_MAX
#define    UINT8_MAX     255
#endif
#define    BYTE_MAX      255
#define    INT8_MIN      -128
#define    INT8_MAX      127
#define    UINT16_MAX    65535
#define    INT16_MIN     -32768
#define    INT16_MAX     32767
#define    UINT32_MAX    4294967295
#define    INT32_MIN     -2147483648
#define    INT32_MAX     2147483647
#define    UINT64_MAX    18446744073709551615    // 1.84467440737096e+019
#define    INT64_MIN     -9223372036854775808    // 1
#define    INT64_MAX     9223372036854775807    // 9.22337203685478e+018

// Table 209 -- Logic Values
#define    YES      1
#define    NO       0
//
// BUGBUG: Comment to to resolve duplicated definition
//
//#define    TRUE     1
//#define    FALSE    0
#define    SET      1
#define    CLEAR    0

// Table 210 -- Processor Values
#define    BIG_ENDIAN       NO    // 0
#define    LITTLE_ENDIAN    YES    // 1
#define    NO_AUTO_ALIGN    NO    // 0

/* Table 211 -- Implemented Algorithms
#define    RSA               YES    // 1
#define    DES               YES    // 1
#define    _3DES             YES    // 1
#define    SHA1              YES    // 1
#define    HMAC              YES    // 1
#define    AES               YES    // 1
#define    MGF1              YES    // 1
#define    XOR               YES    // 1
#define    KEYEDHASH         YES    // 1
#define    SHA256            YES    // 1
#define    SHA384            YES    // 1
#define    SHA512            YES    // 1
#define    WHIRLPOOL512      YES    // 1
#define    SM3_256           YES    // 1
#define    SMS4              YES    // 1
#define    RSASSA            RSA    // 1
#define    RSAES             RSA    // 1
#define    RSAPSS            RSA    // 1
#define    OAEP              RSA    // 1
#define    ECC               YES    // 1
#define    ECDH              YES    // 1
#define    ECDSA             ECC    // 1
#define    ECDAA             ECC    // 1
#define    ECSCHNORR         ECC    // 1
#define    SYMCIPHER         YES    // 1
#define    KDF1_SP800_56a    ECC    // 1
#define    KDF2              YES    // 1
#define    KDF1_SP800_108    YES    // 1
#define    SP800_56a_C1_1    ECC    // 1
#define    CTR               YES    // 1
#define    OFB               YES    // 1
#define    CBC               YES    // 1
#define    CFB               YES    // 1
#define    ECB               YES    // 1

*/

// Table 212 -- Implemented Algorithm Constants
#define    RSA_KEY_SIZES_BITS    {1024,2048}
#define    MAX_RSA_KEY_BITS      2048
#define    MAX_RSA_KEY_BYTES     ((MAX_RSA_KEY_BITS+7)/8)    // 256
#define    ECC_CURVES            {TPM_ECC_NIST_P256,TPM_ECC_BN_P256}
#define    ECC_KEY_SIZES_BITS    {256}
#define    MAX_ECC_KEY_BITS      256
#define    MAX_ECC_KEY_BYTES     ((MAX_ECC_KEY_BITS+7)/8)    // 32
#define    AES_KEY_SIZES_BITS    {128}
#define    MAX_AES_KEY_BITS      128
#define    MAX_AES_KEY_BYTES     ((MAX_AES_KEY_BITS+7)/8)    // 16
#define    MAX_SYM_KEY_BITS      128
#define    MAX_SYM_KEY_BYTES     ((MAX_SYM_KEY_BITS+7)/8)    // 16
#define    MAX_SYM_BLOCK_SIZE    16

// Table 213 -- Implementation Values
#define    FIELD_UPGRADE_IMPLEMENTED      NO    // 0
typedef    UINT16                         BSIZE;
#define    IMPLEMENTATION_PCR             24
#define    PLATFORM_PCR                   24
#define    DRTM_PCR                       17
#define    NUM_LOCALITIES                 5
#define    MAX_HANDLE_NUM                 3
#define    MAX_ACTIVE_SESSIONS            64
typedef    UINT16                         CONTEXT_SLOT;
typedef    UINT64                         CONTEXT_COUNTER;
#define    MAX_LOADED_SESSIONS            3
#define    MAX_SESSION_NUM                3
#define    MAX_LOADED_OBJECTS             3
#define    MIN_EVICT_OBJECTS              2
#define    PCR_SELECT_MIN                 ((PLATFORM_PCR+7)/8)    // 3
#define    PCR_SELECT_MAX                 ((IMPLEMENTATION_PCR+7)/8)    // 3
#define    NUM_POLICY_PCR_GROUP           1
#define    NUM_AUTHVALUE_PCR_GROUP        1
#define    MAX_CONTEXT_SIZE               4000
#define    MAX_DIGEST_BUFFER              1024
#define    MAX_NV_INDEX_SIZE              1024
#define    MAX_CAP_BUFFER                 1024
#define    NV_MEMORY_SIZE                 16384
#define    NUM_STATIC_PCR                 16
#define    MAX_ALG_LIST_SIZE              64
#define    TIMER_PRESCALE                 100000
#define    PRIMARY_SEED_SIZE              32
#define    CONTEXT_ENCRYPT_ALG            TPM_ALG_AES
#define    CONTEXT_ENCRYPT_KEY_BITS       MAX_SYM_KEY_BITS    // 128
#define    CONTEXT_ENCRYPT_KEY_BYTES      ((CONTEXT_ENCRYPT_KEY_BITS+7)/8)    // 16
#define    CONTEXT_INTEGRITY_HASH_ALG     TPM_ALG_SHA256
#define    CONTEXT_INTEGRITY_HASH_SIZE    SHA256_DIGEST_SIZE    // 32
#define    PROOF_SIZE                     CONTEXT_INTEGRITY_HASH_SIZE    // 32
#define    NV_CLOCK_UPDATE_INTERVAL       12
#define    NUM_POLICY_PCR                 1
#define    MAX_COMMAND_SIZE               4096
#define    MAX_RESPONSE_SIZE              4096
#define    ORDERLY_BITS                   8
#define    MAX_ORDERLY_COUNT              ((1<<ORDERLY_BITS)-1)    // 255
#define    ALG_ID_FIRST                   TPM_ALG_FIRST
#define    ALG_ID_LAST                    TPM_ALG_LAST
#define    MAX_SYM_DATA                   128
#define    MAX_HASH_STATE_SIZE            512
#define    MAX_RNG_ENTROPY_SIZE           64
#define    RAM_INDEX_SPACE                512
#define    RSA_DEFAULT_PUBLIC_EXPONENT    0x00010001

///

/*(auto)

    Automatically Generated by DoImplemented.pl

    Date: Mar  5, 2012
    Time: 11:14:55 PM

*/

// Table 6 -- TPM_ALG_ID Constants <I/O,S>
typedef UINT16 TPM_ALG_ID;
//
// BUGBUG: Comment some algo which has same name as TPM1.2 (value is same, so not runtime issue)
//
#define    TPM_ALG_ERROR             (TPM_ALG_ID)(0x0000)        // a: ; D:
#define    TPM_ALG_FIRST             (TPM_ALG_ID)(0x0001)        // a: ; D:
//#define    TPM_ALG_RSA               (TPM_ALG_ID)(0x0001)        // a: A O; D:
//#define    TPM_ALG_DES               (TPM_ALG_ID)(0x0002)        // a: S; D:
#define    TPM_ALG__3DES             (TPM_ALG_ID)(0x0003)        // a: S; D:
//#define    TPM_ALG_SHA               (TPM_ALG_ID)(0x0004)        // a: H; D:
#define    TPM_ALG_SHA1              (TPM_ALG_ID)(0x0004)        // a: H; D:
//#define    TPM_ALG_HMAC              (TPM_ALG_ID)(0x0005)        // a: H X; D:
#define    TPM_ALG_AES               (TPM_ALG_ID)(0x0006)        // a: S; D:
//#define    TPM_ALG_MGF1              (TPM_ALG_ID)(0x0007)        // a: H M; D:
#define    TPM_ALG_KEYEDHASH         (TPM_ALG_ID)(0x0008)        // a: H E X O; D:
//#define    TPM_ALG_XOR               (TPM_ALG_ID)(0x000A)        // a: H S; D:
#define    TPM_ALG_SHA256            (TPM_ALG_ID)(0x000B)        // a: H; D:
#define    TPM_ALG_SHA384            (TPM_ALG_ID)(0x000C)        // a: H; D:
#define    TPM_ALG_SHA512            (TPM_ALG_ID)(0x000D)        // a: H; D:
#define    TPM_ALG_WHIRLPOOL512      (TPM_ALG_ID)(0x000E)        // a: H; D:
#define    TPM_ALG_NULL              (TPM_ALG_ID)(0x0010)        // a: ; D:
#define    TPM_ALG_SM3_256           (TPM_ALG_ID)(0x0012)        // a: H; D:
#define    TPM_ALG_SMS4              (TPM_ALG_ID)(0x0013)        // a: S; D:
#define    TPM_ALG_RSASSA            (TPM_ALG_ID)(0x0014)        // a: X; D: RSA
#define    TPM_ALG_RSAES             (TPM_ALG_ID)(0x0015)        // a: E; D: RSA
#define    TPM_ALG_RSAPSS            (TPM_ALG_ID)(0x0016)        // a: X; D: RSA
#define    TPM_ALG_OAEP              (TPM_ALG_ID)(0x0017)        // a: E; D: RSA
#define    TPM_ALG_ECDSA             (TPM_ALG_ID)(0x0018)        // a: X; D: ECC
#define    TPM_ALG_ECDH              (TPM_ALG_ID)(0x0019)        // a: M; D: ECC
#define    TPM_ALG_ECDAA             (TPM_ALG_ID)(0x001A)        // a: A X; D: ECC
#define    TPM_ALG_ECSCHNORR         (TPM_ALG_ID)(0x001C)        // a:  A X; D: ECC
#define    TPM_ALG_KDF1_SP800_56a    (TPM_ALG_ID)(0x0020)        // a: H M; D: ECC
#define    TPM_ALG_KDF2              (TPM_ALG_ID)(0x0021)        // a: H M; D:
#define    TPM_ALG_KDF1_SP800_108    (TPM_ALG_ID)(0x0022)        // a: H M; D:
#define    TPM_ALG_ECC               (TPM_ALG_ID)(0x0023)        // a: A O; D:
#define    TPM_ALG_SYMCIPHER         (TPM_ALG_ID)(0x0025)        // a: O; D:
#define    TPM_ALG_CTR               (TPM_ALG_ID)(0x0040)        // a: S E; D:
#define    TPM_ALG_OFB               (TPM_ALG_ID)(0x0041)        // a: S E; D:
#define    TPM_ALG_CBC               (TPM_ALG_ID)(0x0042)        // a: S E; D:
#define    TPM_ALG_CFB               (TPM_ALG_ID)(0x0043)        // a: S E; D:
#define    TPM_ALG_ECB               (TPM_ALG_ID)(0x0044)        // a: S E; D:
#define    TPM_ALG_LAST              (TPM_ALG_ID)(0x0044)        // a: ; D:

// Table 7 -- TPM_ECC_CURVE Constants <I/O,S>
typedef UINT16 TPM_ECC_CURVE;

#define    TPM_ECC_NONE         (TPM_ECC_CURVE)(0x0000)
#define    TPM_ECC_NIST_P192    (TPM_ECC_CURVE)(0x0001)
#define    TPM_ECC_NIST_P224    (TPM_ECC_CURVE)(0x0002)
#define    TPM_ECC_NIST_P256    (TPM_ECC_CURVE)(0x0003)
#define    TPM_ECC_NIST_P384    (TPM_ECC_CURVE)(0x0004)
#define    TPM_ECC_NIST_P521    (TPM_ECC_CURVE)(0x0005)
#define    TPM_ECC_BN_P256      (TPM_ECC_CURVE)(0x0010)
#define    TPM_ECC_BN_P638      (TPM_ECC_CURVE)(0x0011)

//#define      MAX_DIGEST_SIZE        32
//#define      MAX_HASH_BLOCK_SIZE    64
//
// BUGBUG: Always set 6 here, because we want to support all hash algo in BIOS.
//
#define      HASH_COUNT             6

#endif