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
|