1 /*++ 2 * 3 * TPM structures extracted from the TPM specification 1.2, 4 * Part 2 (Structures), rev 85. 5 * 6 * Errata: 7 * 8 * *) The individual bits of TPM_STARTUP_EFFECTS were not given names in 9 * the TPM spec so they are not defined in tpm.h. 10 * 11 * *) A few typedefs not present in the TPM 1.2 specification have been 12 * added. This was generally done when the TPM 1.2 spec defined a set of 13 * related values (either bitmasks or enumeration values) but did not 14 * define an associated type to hold these values. The typedefs have been 15 * added and structure fields that were to hold those values have been 16 * switched from generic UINT* types to the more specific types. This was 17 * done to highlight exactly where those #defined values were to be used. 18 * The types that have been added are: 19 * TPM_NV_PER_ATTRIBUTES 20 * TPM_DELEGATE_TYPE 21 * 22 * *) The layout of bitfields within a structure are compiler-dependent 23 * and the use of structure bitfields has been avoided where possible. In 24 * cases where a value is a collection of independent bits the type is 25 * given a name (typedeffed to UINT16 or UINT32 as appropriate) and masks 26 * are #defined to access the individual bits. This is not possible for 27 * TPM_VERSION_BYTE because the fields are 4-bit values. A best attempt 28 * has been made to make this compiler independent but it has only been 29 * checked on GCC and Visual C++ on little-endian machines. 30 * 31 * *) The TPM_DELEGATIONS per1 and per2 fields field are a bitmask but 32 * are defined as a UINT32 because the bitfields have different meaning 33 * based on the type of delegation blob. 34 * 35 * *) The definitions of TPM_PERMANENT_DATA, TPM_STCLEAR_DATA, 36 * TPM_STANY_DATA, and TPM_DELEGATE_TABLE_ROW are commented out. These 37 * structures are internal to the TPM and are not directly accessible by 38 * external software so this should not be a problem. 39 * 40 * *) The definitions of TPM_FAMILY_TABLE and TPM_DELEGATE_TABLE are 41 * commented out because they are variable length arrays internal to the 42 * TPM. As above they are not directly accessible by external software 43 * so this should not be a problem. 44 */ 45 46 #ifndef __TPM_H__ 47 #define __TPM_H__ 48 49 #ifdef __midl 50 #define SIZEIS(x) [size_is(x)] 51 #else 52 #define SIZEIS(x) 53 #endif 54 55 #include <tss/platform.h> 56 57 //------------------------------------------------------------------- 58 // Part 2, section 2.1: Basic data types 59 typedef BYTE TPM_BOOL; 60 #ifndef FALSE 61 #define FALSE 0x00 62 #define TRUE 0x01 63 #endif /* ifndef FALSE */ 64 65 //------------------------------------------------------------------- 66 // Part 2, section 2.3: Helper Redefinitions 67 // Many of the helper redefinitions appear later in this file 68 // so that they are declared next to the list of valid values 69 // they may hold. 70 typedef BYTE TPM_LOCALITY_MODIFIER; 71 typedef UINT32 TPM_COMMAND_CODE; /* 1.1b */ 72 typedef UINT32 TPM_COUNT_ID; 73 typedef UINT32 TPM_REDIT_COMMAND; 74 typedef UINT32 TPM_HANDLE; 75 typedef UINT32 TPM_AUTHHANDLE; 76 typedef UINT32 TPM_TRANSHANDLE; 77 typedef UINT32 TPM_KEYHANDLE; 78 typedef UINT32 TPM_DIRINDEX; 79 typedef UINT32 TPM_PCRINDEX; 80 typedef UINT32 TPM_RESULT; 81 typedef UINT32 TPM_MODIFIER_INDICATOR; 82 83 84 85 //------------------------------------------------------------------- 86 // Part 2, section 2.2.4: Vendor Specific 87 #define TPM_Vendor_Specific32 0x00000400 88 #define TPM_Vendor_Specific8 0x80 89 90 91 //------------------------------------------------------------------- 92 // Part 2, section 3: Structure Tags 93 typedef UINT16 TPM_STRUCTURE_TAG; 94 #define TPM_TAG_CONTEXTBLOB ((UINT16)0x0001) 95 #define TPM_TAG_CONTEXT_SENSITIVE ((UINT16)0x0002) 96 #define TPM_TAG_CONTEXTPOINTER ((UINT16)0x0003) 97 #define TPM_TAG_CONTEXTLIST ((UINT16)0x0004) 98 #define TPM_TAG_SIGNINFO ((UINT16)0x0005) 99 #define TPM_TAG_PCR_INFO_LONG ((UINT16)0x0006) 100 #define TPM_TAG_PERSISTENT_FLAGS ((UINT16)0x0007) 101 #define TPM_TAG_VOLATILE_FLAGS ((UINT16)0x0008) 102 #define TPM_TAG_PERSISTENT_DATA ((UINT16)0x0009) 103 #define TPM_TAG_VOLATILE_DATA ((UINT16)0x000a) 104 #define TPM_TAG_SV_DATA ((UINT16)0x000b) 105 #define TPM_TAG_EK_BLOB ((UINT16)0x000c) 106 #define TPM_TAG_EK_BLOB_AUTH ((UINT16)0x000d) 107 #define TPM_TAG_COUNTER_VALUE ((UINT16)0x000e) 108 #define TPM_TAG_TRANSPORT_INTERNAL ((UINT16)0x000f) 109 #define TPM_TAG_TRANSPORT_LOG_IN ((UINT16)0x0010) 110 #define TPM_TAG_TRANSPORT_LOG_OUT ((UINT16)0x0011) 111 #define TPM_TAG_AUDIT_EVENT_IN ((UINT16)0x0012) 112 #define TPM_TAG_AUDIT_EVENT_OUT ((UINT16)0x0013) 113 #define TPM_TAG_CURRENT_TICKS ((UINT16)0x0014) 114 #define TPM_TAG_KEY ((UINT16)0x0015) 115 #define TPM_TAG_STORED_DATA12 ((UINT16)0x0016) 116 #define TPM_TAG_NV_ATTRIBUTES ((UINT16)0x0017) 117 #define TPM_TAG_NV_DATA_PUBLIC ((UINT16)0x0018) 118 #define TPM_TAG_NV_DATA_SENSITIVE ((UINT16)0x0019) 119 #define TPM_TAG_DELEGATIONS ((UINT16)0x001a) 120 #define TPM_TAG_DELEGATE_PUBLIC ((UINT16)0x001b) 121 #define TPM_TAG_DELEGATE_TABLE_ROW ((UINT16)0x001c) 122 #define TPM_TAG_TRANSPORT_AUTH ((UINT16)0x001d) 123 #define TPM_TAG_TRANSPORT_PUBLIC ((UINT16)0x001e) 124 #define TPM_TAG_PERMANENT_FLAGS ((UINT16)0x001f) 125 #define TPM_TAG_STCLEAR_FLAGS ((UINT16)0x0020) 126 #define TPM_TAG_STANY_FLAGS ((UINT16)0x0021) 127 #define TPM_TAG_PERMANENT_DATA ((UINT16)0x0022) 128 #define TPM_TAG_STCLEAR_DATA ((UINT16)0x0023) 129 #define TPM_TAG_STANY_DATA ((UINT16)0x0024) 130 #define TPM_TAG_FAMILY_TABLE_ENTRY ((UINT16)0x0025) 131 #define TPM_TAG_DELEGATE_SENSITIVE ((UINT16)0x0026) 132 #define TPM_TAG_DELG_KEY_BLOB ((UINT16)0x0027) 133 #define TPM_TAG_KEY12 ((UINT16)0x0028) 134 #define TPM_TAG_CERTIFY_INFO2 ((UINT16)0x0029) 135 #define TPM_TAG_DELEGATE_OWNER_BLOB ((UINT16)0x002a) 136 #define TPM_TAG_EK_BLOB_ACTIVATE ((UINT16)0x002b) 137 #define TPM_TAG_DAA_BLOB ((UINT16)0x002c) 138 #define TPM_TAG_DAA_CONTEXT ((UINT16)0x002d) 139 #define TPM_TAG_DAA_ENFORCE ((UINT16)0x002e) 140 #define TPM_TAG_DAA_ISSUER ((UINT16)0x002f) 141 #define TPM_TAG_CAP_VERSION_INFO ((UINT16)0x0030) 142 #define TPM_TAG_DAA_SENSITIVE ((UINT16)0x0031) 143 #define TPM_TAG_DAA_TPM ((UINT16)0x0032) 144 #define TPM_TAG_CMK_MIGAUTH ((UINT16)0x0033) 145 #define TPM_TAG_CMK_SIGTICKET ((UINT16)0x0034) 146 #define TPM_TAG_CMK_MA_APPROVAL ((UINT16)0x0035) 147 #define TPM_TAG_QUOTE_INFO2 ((UINT16)0x0036) 148 #define TPM_TAG_DA_INFO ((UINT16)0x0037) 149 #define TPM_TAG_DA_INFO_LIMITED ((UINT16)0x0038) 150 #define TPM_TAG_DA_ACTION_TYPE ((UINT16)0x0039) 151 152 153 //------------------------------------------------------------------- 154 // Part 2, section 4: Types 155 typedef UINT32 TPM_RESOURCE_TYPE; 156 #define TPM_RT_KEY ((UINT32)0x00000001) 157 #define TPM_RT_AUTH ((UINT32)0x00000002) 158 #define TPM_RT_HASH ((UINT32)0x00000003) 159 #define TPM_RT_TRANS ((UINT32)0x00000004) 160 #define TPM_RT_CONTEXT ((UINT32)0x00000005) 161 #define TPM_RT_COUNTER ((UINT32)0x00000006) 162 #define TPM_RT_DELEGATE ((UINT32)0x00000007) 163 #define TPM_RT_DAA_TPM ((UINT32)0x00000008) 164 #define TPM_RT_DAA_V0 ((UINT32)0x00000009) 165 #define TPM_RT_DAA_V1 ((UINT32)0x0000000a) 166 167 168 typedef BYTE TPM_PAYLOAD_TYPE; /* 1.1b */ 169 #define TPM_PT_ASYM ((BYTE)0x01) /* 1.1b */ 170 #define TPM_PT_BIND ((BYTE)0x02) /* 1.1b */ 171 #define TPM_PT_MIGRATE ((BYTE)0x03) /* 1.1b */ 172 #define TPM_PT_MAINT ((BYTE)0x04) /* 1.1b */ 173 #define TPM_PT_SEAL ((BYTE)0x05) /* 1.1b */ 174 #define TPM_PT_MIGRATE_RESTRICTED ((BYTE)0x06) 175 #define TPM_PT_MIGRATE_EXTERNAL ((BYTE)0x07) 176 #define TPM_PT_CMK_MIGRATE ((BYTE)0x08) 177 178 179 typedef UINT16 TPM_ENTITY_TYPE; /* 1.1b */ 180 #define TPM_ET_KEYHANDLE ((UINT16)0x0001) /* 1.1b */ 181 #define TPM_ET_OWNER ((UINT16)0x0002) /* 1.1b */ 182 #define TPM_ET_DATA ((UINT16)0x0003) /* 1.1b */ 183 #define TPM_ET_SRK ((UINT16)0x0004) /* 1.1b */ 184 #define TPM_ET_KEY ((UINT16)0x0005) /* 1.1b */ 185 #define TPM_ET_REVOKE ((UINT16)0x0006) 186 #define TPM_ET_DEL_OWNER_BLOB ((UINT16)0x0007) 187 #define TPM_ET_DEL_ROW ((UINT16)0x0008) 188 #define TPM_ET_DEL_KEY_BLOB ((UINT16)0x0009) 189 #define TPM_ET_COUNTER ((UINT16)0x000a) 190 #define TPM_ET_NV ((UINT16)0x000b) 191 #define TPM_ET_OPERATOR ((UINT16)0x000c) 192 #define TPM_ET_RESERVED_HANDLE ((UINT16)0x0040) 193 194 /* The following values may be ORed into the MSB of the TPM_ENTITY_TYPE 195 * to indicate particular encryption scheme 196 */ 197 #define TPM_ET_XOR ((BYTE)0x00) 198 #define TPM_ET_AES ((BYTE)0x06) 199 200 typedef UINT32 TPM_KEY_HANDLE; /* 1.1b */ 201 #define TPM_KH_SRK ((UINT32)0x40000000) 202 #define TPM_KH_OWNER ((UINT32)0x40000001) 203 #define TPM_KH_REVOKE ((UINT32)0x40000002) 204 #define TPM_KH_TRANSPORT ((UINT32)0x40000003) 205 #define TPM_KH_OPERATOR ((UINT32)0x40000004) 206 #define TPM_KH_ADMIN ((UINT32)0x40000005) 207 #define TPM_KH_EK ((UINT32)0x40000006) 208 /* 1.1b used different names, but the same values */ 209 #define TPM_KEYHND_SRK (TPM_KH_SRK) /* 1.1b */ 210 #define TPM_KEYHND_OWNER (TPM_KH_OWNER) /* 1.1b */ 211 212 213 typedef UINT16 TPM_STARTUP_TYPE; /* 1.1b */ 214 #define TPM_ST_CLEAR ((UINT16)0x0001) /* 1.1b */ 215 #define TPM_ST_STATE ((UINT16)0x0002) /* 1.1b */ 216 #define TPM_ST_DEACTIVATED ((UINT16)0x0003) /* 1.1b */ 217 218 219 //typedef UINT32 TPM_STARTUP_EFFECTS; 220 // 32-bit mask, see spec for meaning. Names not currently defined. 221 // bits 0-8 have meaning 222 223 typedef UINT16 TPM_PROTOCOL_ID; /* 1.1b */ 224 #define TPM_PID_OIAP ((UINT16)0x0001) /* 1.1b */ 225 #define TPM_PID_OSAP ((UINT16)0x0002) /* 1.1b */ 226 #define TPM_PID_ADIP ((UINT16)0x0003) /* 1.1b */ 227 #define TPM_PID_ADCP ((UINT16)0x0004) /* 1.1b */ 228 #define TPM_PID_OWNER ((UINT16)0x0005) /* 1.1b */ 229 #define TPM_PID_DSAP ((UINT16)0x0006) 230 #define TPM_PID_TRANSPORT ((UINT16)0x0007) 231 232 233 // Note in 1.2 rev 104, DES and 3DES are eliminated 234 typedef UINT32 TPM_ALGORITHM_ID; /* 1.1b */ 235 #define TPM_ALG_RSA ((UINT32)0x00000001) /* 1.1b */ 236 #define TPM_ALG_DES ((UINT32)0x00000002) /* 1.1b */ 237 #define TPM_ALG_3DES ((UINT32)0x00000003) /* 1.1b */ 238 #define TPM_ALG_SHA ((UINT32)0x00000004) /* 1.1b */ 239 #define TPM_ALG_HMAC ((UINT32)0x00000005) /* 1.1b */ 240 #define TPM_ALG_AES ((UINT32)0x00000006) /* 1.1b */ 241 #define TPM_ALG_AES128 (TPM_ALG_AES) 242 #define TPM_ALG_MGF1 ((UINT32)0x00000007) 243 #define TPM_ALG_AES192 ((UINT32)0x00000008) 244 #define TPM_ALG_AES256 ((UINT32)0x00000009) 245 #define TPM_ALG_XOR ((UINT32)0x0000000a) 246 247 248 typedef UINT16 TPM_PHYSICAL_PRESENCE; /* 1.1b */ 249 #define TPM_PHYSICAL_PRESENCE_LOCK ((UINT16)0x0004) /* 1.1b */ 250 #define TPM_PHYSICAL_PRESENCE_PRESENT ((UINT16)0x0008) /* 1.1b */ 251 #define TPM_PHYSICAL_PRESENCE_NOTPRESENT ((UINT16)0x0010) /* 1.1b */ 252 #define TPM_PHYSICAL_PRESENCE_CMD_ENABLE ((UINT16)0x0020) /* 1.1b */ 253 #define TPM_PHYSICAL_PRESENCE_HW_ENABLE ((UINT16)0x0040) /* 1.1b */ 254 #define TPM_PHYSICAL_PRESENCE_LIFETIME_LOCK ((UINT16)0x0080) /* 1.1b */ 255 #define TPM_PHYSICAL_PRESENCE_CMD_DISABLE ((UINT16)0x0100) 256 #define TPM_PHYSICAL_PRESENCE_HW_DISABLE ((UINT16)0x0200) 257 258 259 typedef UINT16 TPM_MIGRATE_SCHEME; /* 1.1b */ 260 #define TPM_MS_MIGRATE ((UINT16)0x0001) /* 1.1b */ 261 #define TPM_MS_REWRAP ((UINT16)0x0002) /* 1.1b */ 262 #define TPM_MS_MAINT ((UINT16)0x0003) /* 1.1b */ 263 #define TPM_MS_RESTRICT_MIGRATE ((UINT16)0x0004) 264 #define TPM_MS_RESTRICT_APPROVE_DOUBLE ((UINT16)0x0005) 265 266 267 typedef UINT16 TPM_EK_TYPE; 268 #define TPM_EK_TYPE_ACTIVATE ((UINT16)0x0001) 269 #define TPM_EK_TYPE_AUTH ((UINT16)0x0002) 270 271 272 typedef UINT16 TPM_PLATFORM_SPECIFIC; 273 #define TPM_PS_PC_11 ((UINT16)0x0001) 274 #define TPM_PS_PC_12 ((UINT16)0x0002) 275 #define TPM_PS_PDA_12 ((UINT16)0x0003) 276 #define TPM_PS_Server_12 ((UINT16)0x0004) 277 #define TPM_PS_Mobile_12 ((UINT16)0x0005) 278 279 //------------------------------------------------------------------- 280 // Part 2, section 5: Basic Structures 281 282 typedef struct tdTPM_STRUCT_VER 283 { 284 BYTE major; 285 BYTE minor; 286 BYTE revMajor; 287 BYTE revMinor; 288 } TPM_STRUCT_VER; 289 290 typedef struct tdTPM_VERSION_BYTE 291 { 292 // This needs to be made compiler-independent. 293 int leastSigVer : 4; // least significant 4 bits 294 int mostSigVer : 4; // most significant 4 bits 295 } TPM_VERSION_BYTE; 296 297 typedef struct tdTPM_VERSION 298 { 299 BYTE major; // Should really be a TPM_VERSION_BYTE 300 BYTE minor; // Should really be a TPM_VERSION_BYTE 301 BYTE revMajor; 302 BYTE revMinor; 303 } TPM_VERSION; 304 305 306 // Put this in the right place: 307 // byte size definition for 160 bit SHA1 hash value 308 #define TPM_SHA1_160_HASH_LEN 0x14 309 #define TPM_SHA1BASED_NONCE_LEN TPM_SHA1_160_HASH_LEN 310 311 typedef struct tdTPM_DIGEST 312 { 313 BYTE digest[TPM_SHA1_160_HASH_LEN]; 314 } TPM_DIGEST; 315 316 typedef TPM_DIGEST TPM_CHOSENID_HASH; 317 typedef TPM_DIGEST TPM_COMPOSITE_HASH; 318 typedef TPM_DIGEST TPM_DIRVALUE; 319 typedef TPM_DIGEST TPM_HMAC; 320 typedef TPM_DIGEST TPM_PCRVALUE; 321 typedef TPM_DIGEST TPM_AUDITDIGEST; 322 323 typedef struct tdTPM_NONCE /* 1.1b */ 324 { 325 BYTE nonce[TPM_SHA1BASED_NONCE_LEN]; 326 } TPM_NONCE; 327 328 typedef TPM_NONCE TPM_DAA_TPM_SEED; 329 typedef TPM_NONCE TPM_DAA_CONTEXT_SEED; 330 331 typedef struct tdTPM_AUTHDATA /* 1.1b */ 332 { 333 BYTE authdata[TPM_SHA1_160_HASH_LEN]; 334 } TPM_AUTHDATA; 335 336 typedef TPM_AUTHDATA TPM_SECRET; 337 typedef TPM_AUTHDATA TPM_ENCAUTH; 338 339 340 typedef struct tdTPM_KEY_HANDLE_LIST /* 1.1b */ 341 { 342 UINT16 loaded; 343 SIZEIS(loaded) 344 TPM_KEY_HANDLE *handle; 345 } TPM_KEY_HANDLE_LIST; 346 347 348 //------------------------------------------------------------------- 349 // Part 2, section 5.8: Key usage values 350 351 typedef UINT16 TPM_KEY_USAGE; /* 1.1b */ 352 #define TPM_KEY_SIGNING ((UINT16)0x0010) /* 1.1b */ 353 #define TPM_KEY_STORAGE ((UINT16)0x0011) /* 1.1b */ 354 #define TPM_KEY_IDENTITY ((UINT16)0x0012) /* 1.1b */ 355 #define TPM_KEY_AUTHCHANGE ((UINT16)0x0013) /* 1.1b */ 356 #define TPM_KEY_BIND ((UINT16)0x0014) /* 1.1b */ 357 #define TPM_KEY_LEGACY ((UINT16)0x0015) /* 1.1b */ 358 #define TPM_KEY_MIGRATE ((UINT16)0x0016) 359 360 typedef UINT16 TPM_SIG_SCHEME; /* 1.1b */ 361 #define TPM_SS_NONE ((UINT16)0x0001) /* 1.1b */ 362 #define TPM_SS_RSASSAPKCS1v15_SHA1 ((UINT16)0x0002) /* 1.1b */ 363 #define TPM_SS_RSASSAPKCS1v15_DER ((UINT16)0x0003) /* 1.1b */ 364 #define TPM_SS_RSASSAPKCS1v15_INFO ((UINT16)0x0004) 365 366 typedef UINT16 TPM_ENC_SCHEME; /* 1.1b */ 367 #define TPM_ES_NONE ((UINT16)0x0001) /* 1.1b */ 368 #define TPM_ES_RSAESPKCSv15 ((UINT16)0x0002) /* 1.1b */ 369 #define TPM_ES_RSAESOAEP_SHA1_MGF1 ((UINT16)0x0003) /* 1.1b */ 370 #define TPM_ES_SYM_CNT ((UINT16)0x0004) 371 #define TPM_ES_SYM_CTR TPM_ES_SYM_CNT 372 #define TPM_ES_SYM_OFB ((UINT16)0x0005) 373 #define TPM_ES_SYM_CBC_PKCS5PAD ((UINT16)0x00ff) 374 375 //------------------------------------------------------------------- 376 // Part 2, section 5.9: TPM_AUTH_DATA_USAGE values 377 378 typedef BYTE TPM_AUTH_DATA_USAGE; /* 1.1b */ 379 #define TPM_AUTH_NEVER ((BYTE)0x00) /* 1.1b */ 380 #define TPM_AUTH_ALWAYS ((BYTE)0x01) /* 1.1b */ 381 #define TPM_AUTH_PRIV_USE_ONLY ((BYTE)0x11) 382 383 384 //------------------------------------------------------------------- 385 // Part 2, section 5.10: TPM_KEY_FLAGS flags 386 387 typedef UINT32 TPM_KEY_FLAGS; /* 1.1b */ 388 #define TPM_REDIRECTION ((UINT32)0x00000001) /* 1.1b */ 389 #define TPM_MIGRATABLE ((UINT32)0x00000002) /* 1.1b */ 390 #define TPM_VOLATILE ((UINT32)0x00000004) /* 1.1b */ 391 #define TPM_PCRIGNOREDONREAD ((UINT32)0x00000008) 392 #define TPM_MIGRATEAUTHORITY ((UINT32)0x00000010) 393 394 395 //------------------------------------------------------------------- 396 // Part 2, section 5.11: TPM_CHANGEAUTH_VALIDATE 397 398 typedef struct tdTPM_CHANGEAUTH_VALIDATE 399 { 400 TPM_SECRET newAuthSecret; 401 TPM_NONCE n1; 402 } TPM_CHANGEAUTH_VALIDATE; 403 404 //------------------------------------------------------------------- 405 // Part 2, section 5.12: TPM_MIGRATIONKEYAUTH 406 // declared after section 10 to catch declaration of TPM_PUBKEY 407 408 //------------------------------------------------------------------- 409 // Part 2, section 5.13: TPM_COUNTER_VALUE; 410 411 typedef UINT32 TPM_ACTUAL_COUNT; 412 typedef struct tdTPM_COUNTER_VALUE 413 { 414 TPM_STRUCTURE_TAG tag; 415 BYTE label[4]; 416 TPM_ACTUAL_COUNT counter; 417 } TPM_COUNTER_VALUE; 418 419 //------------------------------------------------------------------- 420 // Part 2, section 5.14: TPM_SIGN_INFO structure 421 422 typedef struct tdTPM_SIGN_INFO 423 { 424 TPM_STRUCTURE_TAG tag; 425 BYTE fixed[4]; 426 TPM_NONCE replay; 427 UINT32 dataLen; 428 SIZEIS(dataLen) 429 BYTE *data; 430 } TPM_SIGN_INFO; 431 432 //------------------------------------------------------------------- 433 // Part 2, section 5.15: TPM_MSA_COMPOSITE 434 435 typedef struct tdTPM_MSA_COMPOSITE 436 { 437 UINT32 MSAlist; 438 SIZEIS(MSAlist) 439 TPM_DIGEST *migAuthDigest; 440 } TPM_MSA_COMPOSITE; 441 442 //------------------------------------------------------------------- 443 // Part 2, section 5.16: TPM_CMK_AUTH 444 445 typedef struct tdTPM_CMK_AUTH 446 { 447 TPM_DIGEST migrationAuthorityDigest; 448 TPM_DIGEST destinationKeyDigest; 449 TPM_DIGEST sourceKeyDigest; 450 } TPM_CMK_AUTH; 451 452 //------------------------------------------------------------------- 453 // Part 2, section 5.17: TPM_CMK_DELEGATE 454 455 typedef UINT32 TPM_CMK_DELEGATE; 456 #define TPM_CMK_DELEGATE_SIGNING (((UINT32)1)<<31) 457 #define TPM_CMK_DELEGATE_STORAGE (((UINT32)1)<<30) 458 #define TPM_CMK_DELEGATE_BIND (((UINT32)1)<<29) 459 #define TPM_CMK_DELEGATE_LEGACY (((UINT32)1)<<28) 460 #define TPM_CMK_DELEGATE_MIGRATE (((UINT32)1)<<27) 461 462 //------------------------------------------------------------------- 463 // Part 2, section 5.18: TPM_SELECT_SIZE 464 465 typedef struct tdTPM_SELECT_SIZE 466 { 467 BYTE major; 468 BYTE minor; 469 UINT16 reqSize; 470 } TPM_SELECT_SIZE; 471 472 //------------------------------------------------------------------- 473 // Part 2, section 5.19: TPM_CMK_MIGAUTH 474 475 typedef struct tdTPM_CMK_MIGAUTH 476 { 477 TPM_STRUCTURE_TAG tag; 478 TPM_DIGEST msaDigest; 479 TPM_DIGEST pubKeyDigest; 480 } TPM_CMK_MIGAUTH; 481 482 //------------------------------------------------------------------- 483 // Part 2, section 5.20: TPM_CMK_SIGTICKET 484 485 typedef struct tdTPM_CMK_SIGTICKET 486 { 487 TPM_STRUCTURE_TAG tag; 488 TPM_DIGEST verKeyDigest; 489 TPM_DIGEST signedData; 490 } TPM_CMK_SIGTICKET; 491 492 //------------------------------------------------------------------- 493 // Part 2, section 5.21: TPM_CMK_MA_APPROVAL 494 495 typedef struct tdTPM_CMK_MA_APPROVAL 496 { 497 TPM_STRUCTURE_TAG tag; 498 TPM_DIGEST migrationAuthorityDigest; 499 } TPM_CMK_MA_APPROVAL; 500 501 502 //------------------------------------------------------------------- 503 // Part 2, section 6: Command Tags 504 505 typedef UINT16 TPM_TAG; /* 1.1b */ 506 #define TPM_TAG_RQU_COMMAND ((UINT16)0x00c1) 507 #define TPM_TAG_RQU_AUTH1_COMMAND ((UINT16)0x00c2) 508 #define TPM_TAG_RQU_AUTH2_COMMAND ((UINT16)0x00c3) 509 #define TPM_TAG_RSP_COMMAND ((UINT16)0x00c4) 510 #define TPM_TAG_RSP_AUTH1_COMMAND ((UINT16)0x00c5) 511 #define TPM_TAG_RSP_AUTH2_COMMAND ((UINT16)0x00c6) 512 513 514 //------------------------------------------------------------------- 515 // Part 2, section 7.1: TPM_PERMANENT_FLAGS 516 517 typedef struct tdTPM_PERMANENT_FLAGS 518 { 519 TPM_STRUCTURE_TAG tag; 520 TSS_BOOL disable; 521 TSS_BOOL ownership; 522 TSS_BOOL deactivated; 523 TSS_BOOL readPubek; 524 TSS_BOOL disableOwnerClear; 525 TSS_BOOL allowMaintenance; 526 TSS_BOOL physicalPresenceLifetimeLock; 527 TSS_BOOL physicalPresenceHWEnable; 528 TSS_BOOL physicalPresenceCMDEnable; 529 TSS_BOOL CEKPUsed; 530 TSS_BOOL TPMpost; 531 TSS_BOOL TPMpostLock; 532 TSS_BOOL FIPS; 533 TSS_BOOL Operator; 534 TSS_BOOL enableRevokeEK; 535 TSS_BOOL nvLocked; 536 TSS_BOOL readSRKPub; 537 TSS_BOOL tpmEstablished; 538 TSS_BOOL maintenanceDone; 539 TSS_BOOL disableFullDALogicInfo; 540 } TPM_PERMANENT_FLAGS; 541 542 #define TPM_PF_DISABLE ((UINT32)0x00000001) 543 #define TPM_PF_OWNERSHIP ((UINT32)0x00000002) 544 #define TPM_PF_DEACTIVATED ((UINT32)0x00000003) 545 #define TPM_PF_READPUBEK ((UINT32)0x00000004) 546 #define TPM_PF_DISABLEOWNERCLEAR ((UINT32)0x00000005) 547 #define TPM_PF_ALLOWMAINTENANCE ((UINT32)0x00000006) 548 #define TPM_PF_PHYSICALPRESENCELIFETIMELOCK ((UINT32)0x00000007) 549 #define TPM_PF_PHYSICALPRESENCEHWENABLE ((UINT32)0x00000008) 550 #define TPM_PF_PHYSICALPRESENCECMDENABLE ((UINT32)0x00000009) 551 #define TPM_PF_CEKPUSED ((UINT32)0x0000000A) 552 #define TPM_PF_TPMPOST ((UINT32)0x0000000B) 553 #define TPM_PF_TPMPOSTLOCK ((UINT32)0x0000000C) 554 #define TPM_PF_FIPS ((UINT32)0x0000000D) 555 #define TPM_PF_OPERATOR ((UINT32)0x0000000E) 556 #define TPM_PF_ENABLEREVOKEEK ((UINT32)0x0000000F) 557 #define TPM_PF_NV_LOCKED ((UINT32)0x00000010) 558 #define TPM_PF_READSRKPUB ((UINT32)0x00000011) 559 #define TPM_PF_RESETESTABLISHMENTBIT ((UINT32)0x00000012) 560 #define TPM_PF_MAINTENANCEDONE ((UINT32)0x00000013) 561 #define TPM_PF_DISABLEFULLDALOGICINFO ((UINT32)0x00000014) 562 563 564 //------------------------------------------------------------------- 565 // Part 2, section 7.2: TPM_STCLEAR_FLAGS 566 567 typedef struct tdTPM_STCLEAR_FLAGS 568 { 569 TPM_STRUCTURE_TAG tag; 570 TSS_BOOL deactivated; 571 TSS_BOOL disableForceClear; 572 TSS_BOOL physicalPresence; 573 TSS_BOOL physicalPresenceLock; 574 TSS_BOOL bGlobalLock; 575 } TPM_STCLEAR_FLAGS; 576 577 #define TPM_SF_DEACTIVATED ((UINT32)0x00000001) 578 #define TPM_SF_DISABLEFORCECLEAR ((UINT32)0x00000002) 579 #define TPM_SF_PHYSICALPRESENCE ((UINT32)0x00000003) 580 #define TPM_SF_PHYSICALPRESENCELOCK ((UINT32)0x00000004) 581 #define TPM_SF_GLOBALLOCK ((UINT32)0x00000005) 582 583 584 //------------------------------------------------------------------- 585 // Part 2, section 7.3: TPM_STANY_FLAGS 586 587 typedef struct tdTPM_STANY_FLAGS 588 { 589 TPM_STRUCTURE_TAG tag; 590 TSS_BOOL postInitialise; 591 TPM_MODIFIER_INDICATOR localityModifier; 592 TSS_BOOL transportExclusive; 593 TSS_BOOL TOSPresent; 594 } TPM_STANY_FLAGS; 595 596 #define TPM_AF_POSTINITIALIZE ((UINT32)0x00000001) 597 #define TPM_AF_LOCALITYMODIFIER ((UINT32)0x00000002) 598 #define TPM_AF_TRANSPORTEXCLUSIVE ((UINT32)0x00000003) 599 #define TPM_AF_TOSPRESENT ((UINT32)0x00000004) 600 601 602 //------------------------------------------------------------------- 603 // Part 2, section 7.4: TPM_PERMANENT_DATA 604 // available inside TPM only 605 // 606 //#define TPM_MIN_COUNTERS 4 607 //#define TPM_NUM_PCR 16 608 //#define TPM_MAX_NV_WRITE_NOOWNER 64 609 // 610 //typedef struct tdTPM_PERMANENT_DATA 611 //{ 612 // TPM_STRUCTURE_TAG tag; 613 // BYTE revMajor; 614 // BYTE revMinor; 615 // TPM_NONCE tpmProof; 616 // TPM_NONCE ekReset; 617 // TPM_SECRET ownerAuth; 618 // TPM_SECRET operatorAuth; 619 // TPM_DIRVALUE authDIR[1]; 620 // TPM_PUBKEY manuMaintPub; 621 // TPM_KEY endorsementKey; 622 // TPM_KEY srk; 623 // TPM_KEY contextKey; 624 // TPM_KEY delegateKey; 625 // TPM_COUNTER_VALUE auditMonotonicCounter; 626 // TPM_COUNTER_VALUE monitonicCounter[TPM_MIN_COUNTERS]; 627 // TPM_PCR_ATTRIBUTES pcrAttrib[TPM_NUM_PCR]; 628 // BYTE ordinalAuditStatus[]; 629 // BYTE *rngState; 630 // TPM_FAMILY_TABLE familyTable; 631 // TPM_DELEGATE_TABLE delegateTable; 632 // UINT32 maxNVBufSize; 633 // UINT32 lastFamilyID; 634 // UINT32 noOwnerNVWrite; 635 // TPM_CMK_DELEGATE restrictDelegate; 636 // TPM_DAA_TPM_SEED tpmDAASeed; 637 // TPM_NONCE daaProof; 638 // TPM_NONCE daaBlobKey; 639 //} TPM_PERMANENT_DATA; 640 641 642 //------------------------------------------------------------------- 643 // Part 2, section 7.5: TPM_STCLEAR_DATA 644 // available inside TPM only 645 // 646 //typedef struct tdTPM_STCLEAR_DATA 647 //{ 648 // TPM_STRUCTURE_TAG tag; 649 // TPM_NONCE contextNonceKey; 650 // TPM_COUNT_ID countID; 651 // UINT32 ownerReference; 652 // TPM_BOOL disableResetLock; 653 // TPM_PCRVALUE PCR[TPM_NUM_PCR]; 654 // UINT32 deferredPhysicalPresence; 655 //} TPM_STCLEAR_DATA; 656 657 658 659 //------------------------------------------------------------------- 660 // Part 2, section 7.5: TPM_STANY_DATA 661 // available inside TPM only 662 // 663 //typedef struct tdTPM_STANY_DATA 664 //{ 665 // TPM_STRUCTURE_TAG tag; 666 // TPM_NONCE contextNonceSession; 667 // TPM_DIGEST auditDigest; 668 // TPM_CURRENT_TICKS currentTicks; 669 // UINT32 contextCount; 670 // UINT32 contextList[TPM_MIN_SESSION_LIST]; 671 // TPM_SESSION_DATA sessions[TPM_MIN_SESSIONS]; 672 // // The following appear in section 22.6 but not in 7.5 673 // TPM_DAA_ISSUER DAA_issuerSettings; 674 // TPM_DAA_TPM DAA_tpmSpecific; 675 // TPM_DAA_CONTEXT DAA_session; 676 // TPM_DAA_JOINDATA DAA_joinSession; 677 //} TPM_STANY_DATA; 678 679 680 681 //------------------------------------------------------------------- 682 // Part 2, section 8: PCR Structures 683 684 typedef BYTE TPM_LOCALITY_SELECTION; 685 #define TPM_LOC_FOUR (((UINT32)1)<<4) 686 #define TPM_LOC_THREE (((UINT32)1)<<3) 687 #define TPM_LOC_TWO (((UINT32)1)<<2) 688 #define TPM_LOC_ONE (((UINT32)1)<<1) 689 #define TPM_LOC_ZERO (((UINT32)1)<<0) 690 691 typedef struct tdTPM_PCR_SELECTION /* 1.1b */ 692 { 693 UINT16 sizeOfSelect; 694 SIZEIS(sizeOfSelect) 695 BYTE *pcrSelect; 696 } TPM_PCR_SELECTION; 697 698 typedef struct tdTPM_PCR_COMPOSITE /* 1.1b */ 699 { 700 TPM_PCR_SELECTION select; 701 UINT32 valueSize; 702 SIZEIS(valueSize) 703 TPM_PCRVALUE *pcrValue; 704 } TPM_PCR_COMPOSITE; 705 706 typedef struct tdTPM_PCR_INFO /* 1.1b */ 707 { 708 TPM_PCR_SELECTION pcrSelection; 709 TPM_COMPOSITE_HASH digestAtRelease; 710 TPM_COMPOSITE_HASH digestAtCreation; 711 } TPM_PCR_INFO; 712 713 typedef struct tdTPM_PCR_INFO_LONG 714 { 715 TPM_STRUCTURE_TAG tag; 716 TPM_LOCALITY_SELECTION localityAtCreation; 717 TPM_LOCALITY_SELECTION localityAtRelease; 718 TPM_PCR_SELECTION creationPCRSelection; 719 TPM_PCR_SELECTION releasePCRSelection; 720 TPM_COMPOSITE_HASH digestAtCreation; 721 TPM_COMPOSITE_HASH digestAtRelease; 722 } TPM_PCR_INFO_LONG; 723 724 typedef struct tdTPM_PCR_INFO_SHORT 725 { 726 TPM_PCR_SELECTION pcrSelection; 727 TPM_LOCALITY_SELECTION localityAtRelease; 728 TPM_COMPOSITE_HASH digestAtRelease; 729 } TPM_PCR_INFO_SHORT; 730 731 typedef struct tdTPM_PCR_ATTRIBUTES 732 { 733 BYTE pcrReset; 734 TPM_LOCALITY_SELECTION pcrExtendLocal; 735 TPM_LOCALITY_SELECTION pcrResetLocal; 736 } TPM_PCR_ATTRIBUTES; 737 738 739 740 //------------------------------------------------------------------- 741 // Part 2, section 9: 742 743 typedef struct tdTPM_STORED_DATA /* 1.1b */ 744 { 745 TPM_STRUCT_VER ver; 746 UINT32 sealInfoSize; 747 SIZEIS(sealInfoSize) 748 BYTE *sealInfo; 749 UINT32 encDataSize; 750 SIZEIS(encDataSize) 751 BYTE *encData; 752 } TPM_STORED_DATA; 753 754 typedef struct tdTPM_STORED_DATA12 755 { 756 TPM_STRUCTURE_TAG tag; 757 TPM_ENTITY_TYPE et; 758 UINT32 sealInfoSize; 759 SIZEIS(sealInfoSize) 760 BYTE *sealInfo; 761 UINT32 encDataSize; 762 SIZEIS(encDataSize) 763 BYTE *encData; 764 } TPM_STORED_DATA12; 765 766 typedef struct tdTPM_SEALED_DATA /* 1.1b */ 767 { 768 TPM_PAYLOAD_TYPE payload; 769 TPM_SECRET authData; 770 TPM_NONCE tpmProof; 771 TPM_DIGEST storedDigest; 772 UINT32 dataSize; 773 SIZEIS(dataSize) 774 BYTE *data; 775 } TPM_SEALED_DATA; 776 777 typedef struct tdTPM_SYMMETRIC_KEY /* 1.1b */ 778 { 779 TPM_ALGORITHM_ID algId; 780 TPM_ENC_SCHEME encScheme; 781 UINT16 size; 782 SIZEIS(size) 783 BYTE *data; 784 } TPM_SYMMETRIC_KEY; 785 786 typedef struct tdTPM_BOUND_DATA 787 { 788 TPM_STRUCT_VER ver; 789 TPM_PAYLOAD_TYPE payload; 790 BYTE *payloadData; // length is implied 791 } TPM_BOUND_DATA; 792 793 794 //------------------------------------------------------------------- 795 // Part 2, section 10: TPM_KEY complex 796 797 typedef struct tdTPM_KEY_PARMS /* 1.1b */ 798 { 799 TPM_ALGORITHM_ID algorithmID; 800 TPM_ENC_SCHEME encScheme; 801 TPM_SIG_SCHEME sigScheme; 802 UINT32 parmSize; 803 SIZEIS(parmSize) 804 BYTE *parms; 805 } TPM_KEY_PARMS; 806 807 typedef struct tdTPM_RSA_KEY_PARMS /* 1.1b */ 808 { 809 UINT32 keyLength; 810 UINT32 numPrimes; 811 UINT32 exponentSize; 812 SIZEIS(exponentSize) 813 BYTE *exponent; 814 } TPM_RSA_KEY_PARMS; 815 816 typedef struct tdTPM_SYMMETRIC_KEY_PARMS 817 { 818 UINT32 keyLength; 819 UINT32 blockSize; 820 UINT32 ivSize; 821 SIZEIS(ivSize) 822 BYTE *IV; 823 } TPM_SYMMETRIC_KEY_PARMS; 824 825 typedef struct tdTPM_STORE_PUBKEY /* 1.1b */ 826 { 827 UINT32 keyLength; 828 SIZEIS(keyLength) 829 BYTE *key; 830 } TPM_STORE_PUBKEY; 831 832 typedef struct tdTPM_PUBKEY /* 1.1b */ 833 { 834 TPM_KEY_PARMS algorithmParms; 835 TPM_STORE_PUBKEY pubKey; 836 } TPM_PUBKEY; 837 838 typedef struct tdTPM_STORE_PRIVKEY /* 1.1b */ 839 { 840 UINT32 keyLength; 841 SIZEIS(keyLength) 842 BYTE *key; 843 } TPM_STORE_PRIVKEY; 844 845 typedef struct tdTPM_STORE_ASYMKEY /* 1.1b */ 846 { 847 TPM_PAYLOAD_TYPE payload; 848 TPM_SECRET usageAuth; 849 TPM_SECRET migrationAuth; 850 TPM_DIGEST pubDataDigest; 851 TPM_STORE_PRIVKEY privKey; 852 } TPM_STORE_ASYMKEY; 853 854 typedef struct tdTPM_KEY /* 1.1b */ 855 { 856 TPM_STRUCT_VER ver; 857 TPM_KEY_USAGE keyUsage; 858 TPM_KEY_FLAGS keyFlags; 859 TPM_AUTH_DATA_USAGE authDataUsage; 860 TPM_KEY_PARMS algorithmParms; 861 UINT32 PCRInfoSize; 862 SIZEIS(PCRInfoSize) 863 BYTE *PCRInfo; 864 TPM_STORE_PUBKEY pubKey; 865 UINT32 encSize; 866 SIZEIS(encSize) 867 BYTE *encData; 868 } TPM_KEY; 869 870 typedef struct tdTPM_KEY12 871 { 872 TPM_STRUCTURE_TAG tag; 873 UINT16 fill; 874 TPM_KEY_USAGE keyUsage; 875 TPM_KEY_FLAGS keyFlags; 876 TPM_AUTH_DATA_USAGE authDataUsage; 877 TPM_KEY_PARMS algorithmParms; 878 UINT32 PCRInfoSize; 879 SIZEIS(PCRInfoSize) 880 BYTE *PCRInfo; 881 TPM_STORE_PUBKEY pubKey; 882 UINT32 encSize; 883 SIZEIS(encSize) 884 BYTE *encData; 885 } TPM_KEY12; 886 887 typedef struct tdTPM_MIGRATE_ASYMKEY 888 { 889 TPM_PAYLOAD_TYPE payload; 890 TPM_SECRET usageAuth; 891 TPM_DIGEST pubDataDigest; 892 UINT32 partPrivKeyLen; 893 SIZEIS(partPrivKeyLen) 894 BYTE *partPrivKey; 895 } TPM_MIGRATE_ASYMKEY; 896 897 898 typedef UINT32 TPM_KEY_CONTROL; 899 #define TPM_KEY_CONTROL_OWNER_EVICT ((UINT32)0x00000001) 900 901 902 //------------------------------------------------------------------- 903 // Part 2, section 5.12: TPM_MIGRATIONKEYAUTH 904 905 typedef struct tdTPM_MIGRATIONKEYAUTH /* 1.1b */ 906 { 907 TPM_PUBKEY migrationKey; 908 TPM_MIGRATE_SCHEME migrationScheme; 909 TPM_DIGEST digest; 910 } TPM_MIGRATIONKEYAUTH; 911 912 913 //------------------------------------------------------------------- 914 // Part 2, section 11: Signed Structures 915 916 typedef struct tdTPM_CERTIFY_INFO /* 1.1b */ 917 { 918 TPM_STRUCT_VER version; 919 TPM_KEY_USAGE keyUsage; 920 TPM_KEY_FLAGS keyFlags; 921 TPM_AUTH_DATA_USAGE authDataUsage; 922 TPM_KEY_PARMS algorithmParms; 923 TPM_DIGEST pubkeyDigest; 924 TPM_NONCE data; 925 TPM_BOOL parentPCRStatus; 926 UINT32 PCRInfoSize; 927 SIZEIS(PCRInfoSize) 928 BYTE *PCRInfo; 929 } TPM_CERTIFY_INFO; 930 931 typedef struct tdTPM_CERTIFY_INFO2 932 { 933 TPM_STRUCTURE_TAG tag; 934 BYTE fill; 935 TPM_PAYLOAD_TYPE payloadType; 936 TPM_KEY_USAGE keyUsage; 937 TPM_KEY_FLAGS keyFlags; 938 TPM_AUTH_DATA_USAGE authDataUsage; 939 TPM_KEY_PARMS algorithmParms; 940 TPM_DIGEST pubkeyDigest; 941 TPM_NONCE data; 942 TPM_BOOL parentPCRStatus; 943 UINT32 PCRInfoSize; 944 SIZEIS(PCRInfoSize) 945 BYTE *PCRInfo; 946 UINT32 migrationAuthoritySize; 947 SIZEIS(migrationAuthoritySize) 948 BYTE *migrationAuthority; 949 } TPM_CERTIFY_INFO2; 950 951 typedef struct tdTPM_QUOTE_INFO /* 1.1b */ 952 { 953 TPM_STRUCT_VER version; 954 BYTE fixed[4]; 955 TPM_COMPOSITE_HASH compositeHash; /* in 1.2 TPM spec, named digestValue */ 956 TPM_NONCE externalData; 957 } TPM_QUOTE_INFO; 958 959 typedef struct tdTPM_QUOTE_INFO2 960 { 961 TPM_STRUCTURE_TAG tag; 962 BYTE fixed[4]; 963 TPM_NONCE externalData; 964 TPM_PCR_INFO_SHORT infoShort; 965 } TPM_QUOTE_INFO2; 966 967 968 969 //------------------------------------------------------------------- 970 // Part 2, section 12: Identity Structures 971 972 973 typedef struct tdTPM_EK_BLOB 974 { 975 TPM_STRUCTURE_TAG tag; 976 TPM_EK_TYPE ekType; 977 UINT32 blobSize; 978 SIZEIS(blobSize) 979 BYTE *blob; 980 } TPM_EK_BLOB; 981 982 typedef struct tdTPM_EK_BLOB_ACTIVATE 983 { 984 TPM_STRUCTURE_TAG tag; 985 TPM_SYMMETRIC_KEY sessionKey; 986 TPM_DIGEST idDigest; 987 TPM_PCR_INFO_SHORT pcrInfo; 988 } TPM_EK_BLOB_ACTIVATE; 989 990 typedef struct tdTPM_EK_BLOB_AUTH 991 { 992 TPM_STRUCTURE_TAG tag; 993 TPM_SECRET authValue; 994 } TPM_EK_BLOB_AUTH; 995 996 997 typedef struct tdTPM_IDENTITY_CONTENTS 998 { 999 TPM_STRUCT_VER ver; 1000 UINT32 ordinal; 1001 TPM_CHOSENID_HASH labelPrivCADigest; 1002 TPM_PUBKEY identityPubKey; 1003 } TPM_IDENTITY_CONTENTS; 1004 1005 typedef struct tdTPM_IDENTITY_REQ /* 1.1b */ 1006 { 1007 UINT32 asymSize; 1008 UINT32 symSize; 1009 TPM_KEY_PARMS asymAlgorithm; 1010 TPM_KEY_PARMS symAlgorithm; 1011 SIZEIS(asymSize) 1012 BYTE *asymBlob; 1013 SIZEIS(symSize) 1014 BYTE *symBlob; 1015 } TPM_IDENTITY_REQ; 1016 1017 typedef struct tdTPM_IDENTITY_PROOF /* 1.1b */ 1018 { 1019 TPM_STRUCT_VER ver; 1020 UINT32 labelSize; 1021 UINT32 identityBindingSize; 1022 UINT32 endorsementSize; 1023 UINT32 platformSize; 1024 UINT32 conformanceSize; 1025 TPM_PUBKEY identityKey; 1026 SIZEIS(labelSize) 1027 BYTE *labelArea; 1028 SIZEIS(identityBindingSize) 1029 BYTE *identityBinding; 1030 SIZEIS(endorsementSize) 1031 BYTE *endorsementCredential; 1032 SIZEIS(platformSize) 1033 BYTE *platformCredential; 1034 SIZEIS(conformanceSize) 1035 BYTE *conformanceCredential; 1036 } TPM_IDENTITY_PROOF; 1037 1038 typedef struct tdTPM_ASYM_CA_CONTENTS /* 1.1b */ 1039 { 1040 TPM_SYMMETRIC_KEY sessionKey; 1041 TPM_DIGEST idDigest; 1042 } TPM_ASYM_CA_CONTENTS; 1043 1044 typedef struct tdTPM_SYM_CA_ATTESTATION 1045 { 1046 UINT32 credSize; 1047 TPM_KEY_PARMS algorithm; 1048 SIZEIS(credSize) 1049 BYTE *credential; 1050 } TPM_SYM_CA_ATTESTATION; 1051 1052 1053 1054 //------------------------------------------------------------------- 1055 // Part 2, section 15: Tick Structures 1056 // Placed here out of order because definitions are used in section 13. 1057 1058 typedef struct tdTPM_CURRENT_TICKS 1059 { 1060 TPM_STRUCTURE_TAG tag; 1061 UINT64 currentTicks; 1062 UINT16 tickRate; 1063 TPM_NONCE tickNonce; 1064 } TPM_CURRENT_TICKS; 1065 1066 1067 1068 //------------------------------------------------------------------- 1069 // Part 2, section 13: Transport structures 1070 1071 typedef UINT32 TPM_TRANSPORT_ATTRIBUTES; 1072 #define TPM_TRANSPORT_ENCRYPT ((UINT32)0x00000001) 1073 #define TPM_TRANSPORT_LOG ((UINT32)0x00000002) 1074 #define TPM_TRANSPORT_EXCLUSIVE ((UINT32)0x00000004) 1075 1076 typedef struct tdTPM_TRANSPORT_PUBLIC 1077 { 1078 TPM_STRUCTURE_TAG tag; 1079 TPM_TRANSPORT_ATTRIBUTES transAttributes; 1080 TPM_ALGORITHM_ID algId; 1081 TPM_ENC_SCHEME encScheme; 1082 } TPM_TRANSPORT_PUBLIC; 1083 1084 typedef struct tdTPM_TRANSPORT_INTERNAL 1085 { 1086 TPM_STRUCTURE_TAG tag; 1087 TPM_AUTHDATA authData; 1088 TPM_TRANSPORT_PUBLIC transPublic; 1089 TPM_TRANSHANDLE transHandle; 1090 TPM_NONCE transNonceEven; 1091 TPM_DIGEST transDigest; 1092 } TPM_TRANSPORT_INTERNAL; 1093 1094 typedef struct tdTPM_TRANSPORT_LOG_IN 1095 { 1096 TPM_STRUCTURE_TAG tag; 1097 TPM_DIGEST parameters; 1098 TPM_DIGEST pubKeyHash; 1099 } TPM_TRANSPORT_LOG_IN; 1100 1101 typedef struct tdTPM_TRANSPORT_LOG_OUT 1102 { 1103 TPM_STRUCTURE_TAG tag; 1104 TPM_CURRENT_TICKS currentTicks; 1105 TPM_DIGEST parameters; 1106 TPM_MODIFIER_INDICATOR locality; 1107 } TPM_TRANSPORT_LOG_OUT; 1108 1109 typedef struct tdTPM_TRANSPORT_AUTH 1110 { 1111 TPM_STRUCTURE_TAG tag; 1112 TPM_AUTHDATA authData; 1113 } TPM_TRANSPORT_AUTH; 1114 1115 1116 1117 //------------------------------------------------------------------- 1118 // Part 2, section 14: Audit Structures 1119 1120 typedef struct tdTPM_AUDIT_EVENT_IN 1121 { 1122 TPM_STRUCTURE_TAG tag; 1123 TPM_DIGEST inputParms; 1124 TPM_COUNTER_VALUE auditCount; 1125 } TPM_AUDIT_EVENT_IN; 1126 1127 typedef struct tdTPM_AUDIT_EVENT_OUT 1128 { 1129 TPM_STRUCTURE_TAG tag; 1130 TPM_COMMAND_CODE ordinal; 1131 TPM_DIGEST outputParms; 1132 TPM_COUNTER_VALUE auditCount; 1133 TPM_RESULT returnCode; 1134 } TPM_AUDIT_EVENT_OUT; 1135 1136 1137 1138 //------------------------------------------------------------------- 1139 // Part 2, section 16: Return codes 1140 1141 #include <tss/tpm_error.h> 1142 1143 1144 //------------------------------------------------------------------- 1145 // Part 2, section 17: Ordinals 1146 1147 #include <tss/tpm_ordinal.h> 1148 1149 //------------------------------------------------------------------- 1150 // Part 2, section 18: Context structures 1151 1152 typedef struct tdTPM_CONTEXT_BLOB 1153 { 1154 TPM_STRUCTURE_TAG tag; 1155 TPM_RESOURCE_TYPE resourceType; 1156 TPM_HANDLE handle; 1157 BYTE label[16]; 1158 UINT32 contextCount; 1159 TPM_DIGEST integrityDigest; 1160 UINT32 additionalSize; 1161 SIZEIS(additionalSize) 1162 BYTE *additionalData; 1163 UINT32 sensitiveSize; 1164 SIZEIS(sensitiveSize) 1165 BYTE *sensitiveData; 1166 } TPM_CONTEXT_BLOB; 1167 1168 typedef struct tdTPM_CONTEXT_SENSITIVE 1169 { 1170 TPM_STRUCTURE_TAG tag; 1171 TPM_NONCE contextNonce; 1172 UINT32 internalSize; 1173 SIZEIS(internalSize) 1174 BYTE *internalData; 1175 } TPM_CONTEXT_SENSITIVE; 1176 1177 //------------------------------------------------------------------- 1178 // Part 2, section 19: NV Structures 1179 1180 typedef UINT32 TPM_NV_INDEX; 1181 #define TPM_NV_INDEX_LOCK ((UINT32)0xffffffff) 1182 #define TPM_NV_INDEX0 ((UINT32)0x00000000) 1183 #define TPM_NV_INDEX_DIR ((UINT32)0x10000001) 1184 // The reserved index values MAY have their D bit set by the 1185 // TPM vendor to permanently reserve the index in the TPM. 1186 // e.g. the typical EK certificate would have the D bit set 1187 // so the actual address would be 1000f000 1188 #define TPM_NV_INDEX_EKCert ((UINT32)0x0000f000) 1189 #define TPM_NV_INDEX_TPM_CC ((UINT32)0x0000f001) 1190 #define TPM_NV_INDEX_PlatformCert ((UINT32)0x0000f002) 1191 #define TPM_NV_INDEX_Platform_CC ((UINT32)0x0000f003) 1192 // The following define ranges of reserved indices. 1193 #define TPM_NV_INDEX_TSS_BASE ((UINT32)0x00011100) 1194 #define TPM_NV_INDEX_PC_BASE ((UINT32)0x00011200) 1195 #define TPM_NV_INDEX_SERVER_BASE ((UINT32)0x00011300) 1196 #define TPM_NV_INDEX_MOBILE_BASE ((UINT32)0x00011400) 1197 #define TPM_NV_INDEX_PERIPHERAL_BASE ((UINT32)0x00011500) 1198 #define TPM_NV_INDEX_GROUP_RESV_BASE ((UINT32)0x00010000) 1199 1200 1201 typedef UINT32 TPM_NV_PER_ATTRIBUTES; 1202 #define TPM_NV_PER_READ_STCLEAR (((UINT32)1)<<31) 1203 #define TPM_NV_PER_AUTHREAD (((UINT32)1)<<18) 1204 #define TPM_NV_PER_OWNERREAD (((UINT32)1)<<17) 1205 #define TPM_NV_PER_PPREAD (((UINT32)1)<<16) 1206 #define TPM_NV_PER_GLOBALLOCK (((UINT32)1)<<15) 1207 #define TPM_NV_PER_WRITE_STCLEAR (((UINT32)1)<<14) 1208 #define TPM_NV_PER_WRITEDEFINE (((UINT32)1)<<13) 1209 #define TPM_NV_PER_WRITEALL (((UINT32)1)<<12) 1210 #define TPM_NV_PER_AUTHWRITE (((UINT32)1)<<2) 1211 #define TPM_NV_PER_OWNERWRITE (((UINT32)1)<<1) 1212 #define TPM_NV_PER_PPWRITE (((UINT32)1)<<0) 1213 1214 typedef struct tdTPM_NV_ATTRIBUTES 1215 { 1216 TPM_STRUCTURE_TAG tag; 1217 TPM_NV_PER_ATTRIBUTES attributes; 1218 } TPM_NV_ATTRIBUTES; 1219 1220 1221 typedef struct tdTPM_NV_DATA_PUBLIC 1222 { 1223 TPM_STRUCTURE_TAG tag; 1224 TPM_NV_INDEX nvIndex; 1225 TPM_PCR_INFO_SHORT pcrInfoRead; 1226 TPM_PCR_INFO_SHORT pcrInfoWrite; 1227 TPM_NV_ATTRIBUTES permission; 1228 TPM_BOOL bReadSTClear; 1229 TPM_BOOL bWriteSTClear; 1230 TPM_BOOL bWriteDefine; 1231 UINT32 dataSize; 1232 } TPM_NV_DATA_PUBLIC; 1233 1234 1235 #if 0 1236 // Internal to TPM: 1237 typedef struct tdTPM_NV_DATA_SENSITIVE 1238 { 1239 TPM_STRUCTURE_TAG tag; 1240 TPM_NV_DATA_PUBLIC pubInfo; 1241 TPM_AUTHDATA authValue; 1242 SIZEIS(pubInfo.dataSize) 1243 BYTE *data; 1244 } TPM_NV_DATA_SENSITIVE; 1245 #endif 1246 1247 1248 //------------------------------------------------------------------- 1249 // Part 2, section 20: Delegation 1250 1251 //------------------------------------------------------------------- 1252 // Part 2, section 20.3: Owner Permissions Settings for per1 bits 1253 #define TPM_DELEGATE_SetOrdinalAuditStatus (((UINT32)1)<<30) 1254 #define TPM_DELEGATE_DirWriteAuth (((UINT32)1)<<29) 1255 #define TPM_DELEGATE_CMK_ApproveMA (((UINT32)1)<<28) 1256 #define TPM_DELEGATE_NV_WriteValue (((UINT32)1)<<27) 1257 #define TPM_DELEGATE_CMK_CreateTicket (((UINT32)1)<<26) 1258 #define TPM_DELEGATE_NV_ReadValue (((UINT32)1)<<25) 1259 #define TPM_DELEGATE_Delegate_LoadOwnerDelegation (((UINT32)1)<<24) 1260 #define TPM_DELEGATE_DAA_Join (((UINT32)1)<<23) 1261 #define TPM_DELEGATE_AuthorizeMigrationKey (((UINT32)1)<<22) 1262 #define TPM_DELEGATE_CreateMaintenanceArchive (((UINT32)1)<<21) 1263 #define TPM_DELEGATE_LoadMaintenanceArchive (((UINT32)1)<<20) 1264 #define TPM_DELEGATE_KillMaintenanceFeature (((UINT32)1)<<19) 1265 #define TPM_DELEGATE_OwnerReadInternalPub (((UINT32)1)<<18) 1266 #define TPM_DELEGATE_ResetLockValue (((UINT32)1)<<17) 1267 #define TPM_DELEGATE_OwnerClear (((UINT32)1)<<16) 1268 #define TPM_DELEGATE_DisableOwnerClear (((UINT32)1)<<15) 1269 #define TPM_DELEGATE_NV_DefineSpace (((UINT32)1)<<14) 1270 #define TPM_DELEGATE_OwnerSetDisable (((UINT32)1)<<13) 1271 #define TPM_DELEGATE_SetCapability (((UINT32)1)<<12) 1272 #define TPM_DELEGATE_MakeIdentity (((UINT32)1)<<11) 1273 #define TPM_DELEGATE_ActivateIdentity (((UINT32)1)<<10) 1274 #define TPM_DELEGATE_OwnerReadPubek (((UINT32)1)<<9) 1275 #define TPM_DELEGATE_DisablePubekRead (((UINT32)1)<<8) 1276 #define TPM_DELEGATE_SetRedirection (((UINT32)1)<<7) 1277 #define TPM_DELEGATE_FieldUpgrade (((UINT32)1)<<6) 1278 #define TPM_DELEGATE_Delegate_UpdateVerification (((UINT32)1)<<5) 1279 #define TPM_DELEGATE_CreateCounter (((UINT32)1)<<4) 1280 #define TPM_DELEGATE_ReleaseCounterOwner (((UINT32)1)<<3) 1281 #define TPM_DELEGATE_DelegateManage (((UINT32)1)<<2) 1282 #define TPM_DELEGATE_Delegate_CreateOwnerDelegation (((UINT32)1)<<1) 1283 #define TPM_DELEGATE_DAA_Sign (((UINT32)1)<<0) 1284 1285 //------------------------------------------------------------------- 1286 // Part 2, section 20.3: Key Permissions Settings for per1 bits 1287 #define TPM_KEY_DELEGATE_CMK_ConvertMigration (((UINT32)1)<<28) 1288 #define TPM_KEY_DELEGATE_TickStampBlob (((UINT32)1)<<27) 1289 #define TPM_KEY_DELEGATE_ChangeAuthAsymStart (((UINT32)1)<<26) 1290 #define TPM_KEY_DELEGATE_ChangeAuthAsymFinish (((UINT32)1)<<25) 1291 #define TPM_KEY_DELEGATE_CMK_CreateKey (((UINT32)1)<<24) 1292 #define TPM_KEY_DELEGATE_MigrateKey (((UINT32)1)<<23) 1293 #define TPM_KEY_DELEGATE_LoadKey2 (((UINT32)1)<<22) 1294 #define TPM_KEY_DELEGATE_EstablishTransport (((UINT32)1)<<21) 1295 #define TPM_KEY_DELEGATE_ReleaseTransportSigned (((UINT32)1)<<20) 1296 #define TPM_KEY_DELEGATE_Quote2 (((UINT32)1)<<19) 1297 #define TPM_KEY_DELEGATE_Sealx (((UINT32)1)<<18) 1298 #define TPM_KEY_DELEGATE_MakeIdentity (((UINT32)1)<<17) 1299 #define TPM_KEY_DELEGATE_ActivateIdentity (((UINT32)1)<<16) 1300 #define TPM_KEY_DELEGATE_GetAuditDigestSigned (((UINT32)1)<<15) 1301 #define TPM_KEY_DELEGATE_Sign (((UINT32)1)<<14) 1302 #define TPM_KEY_DELEGATE_CertifyKey2 (((UINT32)1)<<13) 1303 #define TPM_KEY_DELEGATE_CertifyKey (((UINT32)1)<<12) 1304 #define TPM_KEY_DELEGATE_CreateWrapKey (((UINT32)1)<<11) 1305 #define TPM_KEY_DELEGATE_CMK_CreateBlob (((UINT32)1)<<10) 1306 #define TPM_KEY_DELEGATE_CreateMigrationBlob (((UINT32)1)<<9) 1307 #define TPM_KEY_DELEGATE_ConvertMigrationBlob (((UINT32)1)<<8) 1308 #define TPM_KEY_DELEGATE_CreateKeyDelegation (((UINT32)1)<<7) 1309 #define TPM_KEY_DELEGATE_ChangeAuth (((UINT32)1)<<6) 1310 #define TPM_KEY_DELEGATE_GetPubKey (((UINT32)1)<<5) 1311 #define TPM_KEY_DELEGATE_UnBind (((UINT32)1)<<4) 1312 #define TPM_KEY_DELEGATE_Quote (((UINT32)1)<<3) 1313 #define TPM_KEY_DELEGATE_Unseal (((UINT32)1)<<2) 1314 #define TPM_KEY_DELEGATE_Seal (((UINT32)1)<<1) 1315 #define TPM_KEY_DELEGATE_LoadKey (((UINT32)1)<<0) 1316 1317 typedef UINT32 TPM_FAMILY_VERIFICATION; 1318 1319 typedef UINT32 TPM_FAMILY_ID; 1320 1321 typedef UINT32 TPM_DELEGATE_INDEX; 1322 1323 typedef UINT32 TPM_FAMILY_OPERATION; 1324 #define TPM_FAMILY_CREATE ((UINT32)0x00000001) 1325 #define TPM_FAMILY_ENABLE ((UINT32)0x00000002) 1326 #define TPM_FAMILY_ADMIN ((UINT32)0x00000003) 1327 #define TPM_FAMILY_INVALIDATE ((UINT32)0x00000004) 1328 1329 typedef UINT32 TPM_FAMILY_FLAGS; 1330 #define TPM_FAMFLAG_DELEGATE_ADMIN_LOCK (((UINT32)1)<<1) 1331 #define TPM_FAMFLAG_ENABLE (((UINT32)1)<<0) 1332 1333 typedef struct tdTPM_FAMILY_LABEL 1334 { 1335 BYTE label; 1336 } TPM_FAMILY_LABEL; 1337 1338 typedef struct tdTPM_FAMILY_TABLE_ENTRY 1339 { 1340 TPM_STRUCTURE_TAG tag; 1341 TPM_FAMILY_LABEL label; 1342 TPM_FAMILY_ID familyID; 1343 TPM_FAMILY_VERIFICATION verificationCount; 1344 TPM_FAMILY_FLAGS flags; 1345 } TPM_FAMILY_TABLE_ENTRY; 1346 1347 1348 #define TPM_FAMILY_TABLE_ENTRY_MIN 8 1349 //typedef struct tdTPM_FAMILY_TABLE 1350 //{ 1351 // TPM_FAMILY_TABLE_ENTRY FamTableRow[TPM_NUM_FAMILY_TABLE_ENTRY_MIN]; 1352 //} TPM_FAMILY_TABLE; 1353 1354 1355 typedef struct tdTPM_DELEGATE_LABEL 1356 { 1357 BYTE label; 1358 } TPM_DELEGATE_LABEL; 1359 1360 1361 typedef UINT32 TPM_DELEGATE_TYPE; 1362 #define TPM_DEL_OWNER_BITS ((UINT32)0x00000001) 1363 #define TPM_DEL_KEY_BITS ((UINT32)0x00000002) 1364 1365 typedef struct tdTPM_DELEGATIONS 1366 { 1367 TPM_STRUCTURE_TAG tag; 1368 TPM_DELEGATE_TYPE delegateType; 1369 UINT32 per1; 1370 UINT32 per2; 1371 } TPM_DELEGATIONS; 1372 1373 typedef struct tdTPM_DELEGATE_PUBLIC 1374 { 1375 TPM_STRUCTURE_TAG tag; 1376 TPM_DELEGATE_LABEL label; 1377 TPM_PCR_INFO_SHORT pcrInfo; 1378 TPM_DELEGATIONS permissions; 1379 TPM_FAMILY_ID familyID; 1380 TPM_FAMILY_VERIFICATION verificationCount; 1381 } TPM_DELEGATE_PUBLIC; 1382 1383 typedef struct tdTPM_DELEGATE_TABLE_ROW 1384 { 1385 TPM_STRUCTURE_TAG tag; 1386 TPM_DELEGATE_PUBLIC pub; 1387 TPM_SECRET authValue; 1388 } TPM_DELEGATE_TABLE_ROW; 1389 1390 1391 #define TPM_NUM_DELEGATE_TABLE_ENTRY_MIN 2 1392 //typedef struct tdTPM_DELEGATE_TABLE 1393 //{ 1394 // TPM_DELEGATE_TABLE_ROW delRow[TPM_NUM_DELEGATE_TABLE_ENTRY_MIN]; 1395 //} TPM_DELEGATE_TABLE; 1396 1397 typedef struct tdTPM_DELEGATE_SENSITIVE 1398 { 1399 TPM_STRUCTURE_TAG tag; 1400 TPM_SECRET authValue; 1401 } TPM_DELEGATE_SENSITIVE; 1402 1403 typedef struct tdTPM_DELEGATE_OWNER_BLOB 1404 { 1405 TPM_STRUCTURE_TAG tag; 1406 TPM_DELEGATE_PUBLIC pub; 1407 TPM_DIGEST integrityDigest; 1408 UINT32 additionalSize; 1409 SIZEIS(additionalSize) 1410 BYTE *additionalArea; 1411 UINT32 sensitiveSize; 1412 SIZEIS(sensitiveSize) 1413 BYTE *sensitiveArea; 1414 } TPM_DELEGATE_OWNER_BLOB; 1415 1416 typedef struct tdTPM_DELEGATE_KEY_BLOB 1417 { 1418 TPM_STRUCTURE_TAG tag; 1419 TPM_DELEGATE_PUBLIC pub; 1420 TPM_DIGEST integrityDigest; 1421 TPM_DIGEST pubKeyDigest; 1422 UINT32 additionalSize; 1423 SIZEIS(additionalSize) 1424 BYTE *additionalArea; 1425 UINT32 sensitiveSize; 1426 SIZEIS(sensitiveSize) 1427 BYTE *sensitiveArea; 1428 } TPM_DELEGATE_KEY_BLOB; 1429 1430 1431 //------------------------------------------------------------------- 1432 // Part 2, section 21.1: TPM_CAPABILITY_AREA 1433 1434 typedef UINT32 TPM_CAPABILITY_AREA; /* 1.1b */ 1435 #define TPM_CAP_ORD ((UINT32)0x00000001) /* 1.1b */ 1436 #define TPM_CAP_ALG ((UINT32)0x00000002) /* 1.1b */ 1437 #define TPM_CAP_PID ((UINT32)0x00000003) /* 1.1b */ 1438 #define TPM_CAP_FLAG ((UINT32)0x00000004) /* 1.1b */ 1439 #define TPM_CAP_PROPERTY ((UINT32)0x00000005) /* 1.1b */ 1440 #define TPM_CAP_VERSION ((UINT32)0x00000006) /* 1.1b */ 1441 #define TPM_CAP_KEY_HANDLE ((UINT32)0x00000007) /* 1.1b */ 1442 #define TPM_CAP_CHECK_LOADED ((UINT32)0x00000008) /* 1.1b */ 1443 #define TPM_CAP_SYM_MODE ((UINT32)0x00000009) 1444 #define TPM_CAP_KEY_STATUS ((UINT32)0x0000000C) 1445 #define TPM_CAP_NV_LIST ((UINT32)0x0000000D) 1446 #define TPM_CAP_MFR ((UINT32)0x00000010) 1447 #define TPM_CAP_NV_INDEX ((UINT32)0x00000011) 1448 #define TPM_CAP_TRANS_ALG ((UINT32)0x00000012) 1449 #define TPM_CAP_HANDLE ((UINT32)0x00000014) 1450 #define TPM_CAP_TRANS_ES ((UINT32)0x00000015) 1451 #define TPM_CAP_AUTH_ENCRYPT ((UINT32)0x00000017) 1452 #define TPM_CAP_SELECT_SIZE ((UINT32)0x00000018) 1453 #define TPM_CAP_DA_LOGIC ((UINT32)0x00000019) 1454 #define TPM_CAP_VERSION_VAL ((UINT32)0x0000001A) 1455 1456 // Part 2, section 21.1: Subcap values for CAP_FLAG 1457 #define TPM_CAP_FLAG_PERMANENT ((UINT32)0x00000108) 1458 #define TPM_CAP_FLAG_VOLATILE ((UINT32)0x00000109) 1459 1460 //------------------------------------------------------------------- 1461 // Part 2, section 21.2: Subcap values for CAP_PROPERTY 1462 1463 #define TPM_CAP_PROP_PCR ((UINT32)0x00000101) /* 1.1b */ 1464 #define TPM_CAP_PROP_DIR ((UINT32)0x00000102) /* 1.1b */ 1465 #define TPM_CAP_PROP_MANUFACTURER ((UINT32)0x00000103) /* 1.1b */ 1466 #define TPM_CAP_PROP_KEYS ((UINT32)0x00000104) 1467 #define TPM_CAP_PROP_SLOTS (TPM_CAP_PROP_KEYS) 1468 #define TPM_CAP_PROP_MIN_COUNTER ((UINT32)0x00000107) 1469 #define TPM_CAP_PROP_AUTHSESS ((UINT32)0x0000010A) 1470 #define TPM_CAP_PROP_TRANSSESS ((UINT32)0x0000010B) 1471 #define TPM_CAP_PROP_COUNTERS ((UINT32)0x0000010C) 1472 #define TPM_CAP_PROP_MAX_AUTHSESS ((UINT32)0x0000010D) 1473 #define TPM_CAP_PROP_MAX_TRANSSESS ((UINT32)0x0000010E) 1474 #define TPM_CAP_PROP_MAX_COUNTERS ((UINT32)0x0000010F) 1475 #define TPM_CAP_PROP_MAX_KEYS ((UINT32)0x00000110) 1476 #define TPM_CAP_PROP_OWNER ((UINT32)0x00000111) 1477 #define TPM_CAP_PROP_CONTEXT ((UINT32)0x00000112) 1478 #define TPM_CAP_PROP_MAX_CONTEXT ((UINT32)0x00000113) 1479 #define TPM_CAP_PROP_FAMILYROWS ((UINT32)0x00000114) 1480 #define TPM_CAP_PROP_TIS_TIMEOUT ((UINT32)0x00000115) 1481 #define TPM_CAP_PROP_STARTUP_EFFECT ((UINT32)0x00000116) 1482 #define TPM_CAP_PROP_DELEGATE_ROW ((UINT32)0x00000117) 1483 #define TPM_CAP_PROP_MAX_DAASESS ((UINT32)0x00000119) 1484 #define TPM_CAP_PROP_DAA_MAX TPM_CAP_PROP_MAX_DAASESS 1485 #define TPM_CAP_PROP_DAASESS ((UINT32)0x0000011A) 1486 #define TPM_CAP_PROP_SESSION_DAA TPM_CAP_PROP_DAASESS 1487 #define TPM_CAP_PROP_CONTEXT_DIST ((UINT32)0x0000011B) 1488 #define TPM_CAP_PROP_DAA_INTERRUPT ((UINT32)0x0000011C) 1489 #define TPM_CAP_PROP_SESSIONS ((UINT32)0x0000011D) 1490 #define TPM_CAP_PROP_MAX_SESSIONS ((UINT32)0x0000011E) 1491 #define TPM_CAP_PROP_CMK_RESTRICTION ((UINT32)0x0000011F) 1492 #define TPM_CAP_PROP_DURATION ((UINT32)0x00000120) 1493 #define TPM_CAP_PROP_ACTIVE_COUNTER ((UINT32)0x00000122) 1494 #define TPM_CAP_PROP_NV_AVAILABLE ((UINT32)0x00000123) 1495 #define TPM_CAP_PROP_INPUT_BUFFER ((UINT32)0x00000124) 1496 1497 1498 // Part 2, section 21.4: SetCapability Values 1499 #define TPM_SET_PERM_FLAGS ((UINT32)0x00000001) 1500 #define TPM_SET_PERM_DATA ((UINT32)0x00000002) 1501 #define TPM_SET_STCLEAR_FLAGS ((UINT32)0x00000003) 1502 #define TPM_SET_STCLEAR_DATA ((UINT32)0x00000004) 1503 #define TPM_SET_STANY_FLAGS ((UINT32)0x00000005) 1504 #define TPM_SET_STANY_DATA ((UINT32)0x00000006) 1505 #define TPM_SET_VENDOR ((UINT32)0x00000007) 1506 1507 1508 // Part 2, section 21.6: TPM_CAP_VERSION_INFO 1509 typedef struct tdTPM_CAP_VERSION_INFO 1510 { 1511 TPM_STRUCTURE_TAG tag; 1512 TPM_VERSION version; 1513 UINT16 specLevel; 1514 BYTE errataRev; 1515 BYTE tpmVendorID[4]; 1516 UINT16 vendorSpecificSize; 1517 SIZEIS(vendorSpecificSize) 1518 BYTE *vendorSpecific; 1519 } TPM_CAP_VERSION_INFO; 1520 1521 1522 // Part 2, section 21.9: TPM_DA_STATE 1523 // out of order to make it available for structure definitions 1524 typedef BYTE TPM_DA_STATE; 1525 #define TPM_DA_STATE_INACTIVE (0x00) 1526 #define TPM_DA_STATE_ACTIVE (0x01) 1527 1528 // Part 2, section 21.10: TPM_DA_ACTION_TYPE 1529 typedef struct tdTPM_DA_ACTION_TYPE 1530 { 1531 TPM_STRUCTURE_TAG tag; 1532 UINT32 actions; 1533 } TPM_DA_ACTION_TYPE; 1534 #define TPM_DA_ACTION_TIMEOUT ((UINT32)0x00000001) 1535 #define TPM_DA_ACTION_DISABLE ((UINT32)0x00000002) 1536 #define TPM_DA_ACTION_DEACTIVATE ((UINT32)0x00000004) 1537 #define TPM_DA_ACTION_FAILURE_MODE ((UINT32)0x00000008) 1538 1539 // Part 2, section 21.7: TPM_DA_INFO 1540 typedef struct tdTPM_DA_INFO 1541 { 1542 TPM_STRUCTURE_TAG tag; 1543 TPM_DA_STATE state; 1544 UINT16 currentCount; 1545 UINT16 threshholdCount; 1546 TPM_DA_ACTION_TYPE actionAtThreshold; 1547 UINT32 actionDependValue; 1548 UINT32 vendorDataSize; 1549 SIZEIS(vendorDataSize) 1550 BYTE *vendorData; 1551 } TPM_DA_INFO; 1552 1553 // Part 2, section 21.8: TPM_DA_INFO_LIMITED 1554 typedef struct tdTPM_DA_INFO_LIMITED 1555 { 1556 TPM_STRUCTURE_TAG tag; 1557 TPM_DA_STATE state; 1558 TPM_DA_ACTION_TYPE actionAtThreshold; 1559 UINT32 vendorDataSize; 1560 SIZEIS(vendorDataSize) 1561 BYTE *vendorData; 1562 } TPM_DA_INFO_LIMITED; 1563 1564 1565 1566 //------------------------------------------------------------------- 1567 // Part 2, section 22: DAA Structures 1568 1569 #define TPM_DAA_SIZE_r0 (43) 1570 #define TPM_DAA_SIZE_r1 (43) 1571 #define TPM_DAA_SIZE_r2 (128) 1572 #define TPM_DAA_SIZE_r3 (168) 1573 #define TPM_DAA_SIZE_r4 (219) 1574 #define TPM_DAA_SIZE_NT (20) 1575 #define TPM_DAA_SIZE_v0 (128) 1576 #define TPM_DAA_SIZE_v1 (192) 1577 #define TPM_DAA_SIZE_NE (256) 1578 #define TPM_DAA_SIZE_w (256) 1579 #define TPM_DAA_SIZE_issuerModulus (256) 1580 #define TPM_DAA_power0 (104) 1581 #define TPM_DAA_power1 (1024) 1582 1583 typedef struct tdTPM_DAA_ISSUER 1584 { 1585 TPM_STRUCTURE_TAG tag; 1586 TPM_DIGEST DAA_digest_R0; 1587 TPM_DIGEST DAA_digest_R1; 1588 TPM_DIGEST DAA_digest_S0; 1589 TPM_DIGEST DAA_digest_S1; 1590 TPM_DIGEST DAA_digest_n; 1591 TPM_DIGEST DAA_digest_gamma; 1592 BYTE DAA_generic_q[26]; 1593 } TPM_DAA_ISSUER; 1594 1595 1596 typedef struct tdTPM_DAA_TPM 1597 { 1598 TPM_STRUCTURE_TAG tag; 1599 TPM_DIGEST DAA_digestIssuer; 1600 TPM_DIGEST DAA_digest_v0; 1601 TPM_DIGEST DAA_digest_v1; 1602 TPM_DIGEST DAA_rekey; 1603 UINT32 DAA_count; 1604 } TPM_DAA_TPM; 1605 1606 typedef struct tdTPM_DAA_CONTEXT 1607 { 1608 TPM_STRUCTURE_TAG tag; 1609 TPM_DIGEST DAA_digestContext; 1610 TPM_DIGEST DAA_digest; 1611 TPM_DAA_CONTEXT_SEED DAA_contextSeed; 1612 BYTE DAA_scratch[256]; 1613 BYTE DAA_stage; 1614 } TPM_DAA_CONTEXT; 1615 1616 typedef struct tdTPM_DAA_JOINDATA 1617 { 1618 BYTE DAA_join_u0[128]; 1619 BYTE DAA_join_u1[138]; 1620 TPM_DIGEST DAA_digest_n0; 1621 } TPM_DAA_JOINDATA; 1622 1623 typedef struct tdTPM_DAA_BLOB 1624 { 1625 TPM_STRUCTURE_TAG tag; 1626 TPM_RESOURCE_TYPE resourceType; 1627 BYTE label[16]; 1628 TPM_DIGEST blobIntegrity; 1629 UINT32 additionalSize; 1630 SIZEIS(additionalSize) 1631 BYTE *additionalData; 1632 UINT32 sensitiveSize; 1633 SIZEIS(sensitiveSize) 1634 BYTE *sensitiveData; 1635 } TPM_DAA_BLOB; 1636 1637 typedef struct tdTPM_DAA_SENSITIVE 1638 { 1639 TPM_STRUCTURE_TAG tag; 1640 UINT32 internalSize; 1641 SIZEIS(internalSize) 1642 BYTE *internalData; 1643 } TPM_DAA_SENSITIVE; 1644 1645 1646 1647 //------------------------------------------------------------------- 1648 // Part 2, section 23: Redirection 1649 1650 // This section of the TPM spec defines exactly one value but does not 1651 // give it a name. The definition of TPM_SetRedirection in Part3 1652 // refers to exactly one name but does not give its value. We join 1653 // them here. 1654 #define TPM_REDIR_GPIO (0x00000001) 1655 1656 1657 //------------------------------------------------------------------- 1658 // Part 2, section 24.6: TPM_SYM_MODE 1659 // Deprecated by TPM 1.2 spec 1660 1661 typedef UINT32 TPM_SYM_MODE; 1662 #define TPM_SYM_MODE_ECB (0x00000001) 1663 #define TPM_SYM_MODE_CBC (0x00000002) 1664 #define TPM_SYM_MODE_CFB (0x00000003) 1665 1666 #endif // __TPM_H__ 1667 1668