1/*++ 2 3TSS structures for TSS 4 5*/ 6 7#ifndef __TSS_STRUCTS_H__ 8#define __TSS_STRUCTS_H__ 9 10#include <tss/platform.h> 11#include <tss/tss_typedef.h> 12#include <tss/tpm.h> 13 14typedef struct tdTSS_VERSION 15{ 16 BYTE bMajor; 17 BYTE bMinor; 18 BYTE bRevMajor; 19 BYTE bRevMinor; 20} TSS_VERSION; 21 22typedef struct tdTSS_PCR_EVENT 23{ 24 TSS_VERSION versionInfo; 25 UINT32 ulPcrIndex; 26 TSS_EVENTTYPE eventType; 27 UINT32 ulPcrValueLength; 28#ifdef __midl 29 [size_is(ulPcrValueLength)] 30#endif 31 BYTE* rgbPcrValue; 32 UINT32 ulEventLength; 33#ifdef __midl 34 [size_is(ulEventLength)] 35#endif 36 BYTE* rgbEvent; 37} TSS_PCR_EVENT; 38 39 40typedef struct tdTSS_EVENT_CERT 41{ 42 TSS_VERSION versionInfo; 43 UINT32 ulCertificateHashLength; 44#ifdef __midl 45 [size_is(ulCertificateHashLength)] 46#endif 47 BYTE* rgbCertificateHash; 48 UINT32 ulEntityDigestLength; 49#ifdef __midl 50 [size_is(ulEntityDigestLength)] 51#endif 52 BYTE* rgbentityDigest; 53 TSS_BOOL fDigestChecked; 54 TSS_BOOL fDigestVerified; 55 UINT32 ulIssuerLength; 56#ifdef __midl 57 [size_is(ulIssuerLength)] 58#endif 59 BYTE* rgbIssuer; 60} TSS_EVENT_CERT; 61 62typedef struct tdTSS_UUID 63{ 64 UINT32 ulTimeLow; 65 UINT16 usTimeMid; 66 UINT16 usTimeHigh; 67 BYTE bClockSeqHigh; 68 BYTE bClockSeqLow; 69 BYTE rgbNode[6]; 70} TSS_UUID; 71 72typedef struct tdTSS_KM_KEYINFO 73{ 74 TSS_VERSION versionInfo; 75 TSS_UUID keyUUID; 76 TSS_UUID parentKeyUUID; 77 BYTE bAuthDataUsage; // whether auth is needed to load child keys 78 TSS_BOOL fIsLoaded; // TRUE: actually loaded in TPM 79 UINT32 ulVendorDataLength; // may be 0 80#ifdef __midl 81 [size_is(ulVendorDataLength)] 82#endif 83 BYTE *rgbVendorData; // may be NULL 84} TSS_KM_KEYINFO; 85 86 87typedef struct tdTSS_KM_KEYINFO2 88{ 89 TSS_VERSION versionInfo; 90 TSS_UUID keyUUID; 91 TSS_UUID parentKeyUUID; 92 BYTE bAuthDataUsage; // whether auth is needed to load child keys 93 TSS_FLAG persistentStorageType; 94 TSS_FLAG persistentStorageTypeParent; 95 TSS_BOOL fIsLoaded; // TRUE: actually loaded in TPM 96 UINT32 ulVendorDataLength; // may be 0 97#ifdef __midl 98 [size_is(ulVendorDataLength)] 99#endif 100 BYTE *rgbVendorData; // may be NULL 101} TSS_KM_KEYINFO2; 102 103 104typedef struct tdTSS_NONCE 105{ 106 BYTE nonce[TPM_SHA1BASED_NONCE_LEN]; 107} TSS_NONCE; 108 109 110typedef struct tdTSS_VALIDATION 111{ 112 TSS_VERSION versionInfo; 113 UINT32 ulExternalDataLength; 114#ifdef __midl 115 [size_is(ulExternalDataLength)] 116#endif 117 BYTE* rgbExternalData; 118 UINT32 ulDataLength; 119#ifdef __midl 120 [size_is(ulDataLength)] 121#endif 122 BYTE* rgbData; 123 UINT32 ulValidationDataLength; 124#ifdef __midl 125 [size_is(ulValidationDataLength)] 126#endif 127 BYTE* rgbValidationData; 128} TSS_VALIDATION; 129 130 131typedef struct tdTSS_CALLBACK 132{ 133 PVOID callback; 134 PVOID appData; 135 TSS_ALGORITHM_ID alg; 136} TSS_CALLBACK; 137 138 139typedef struct tdTSS_DAA_PK 140{ 141 TSS_VERSION versionInfo; 142 UINT32 modulusLength; 143#ifdef __midl 144 [size_is(modulusLength)] 145#endif 146 BYTE* modulus; 147 UINT32 capitalSLength; 148#ifdef __midl 149 [size_is(capitalSLength)] 150#endif 151 BYTE* capitalS; 152 UINT32 capitalZLength; 153#ifdef __midl 154 [size_is(capitalZLength)] 155#endif 156 BYTE* capitalZ; 157 UINT32 capitalR0Length; 158#ifdef __midl 159 [size_is(capitalR0Length)] 160#endif 161 BYTE* capitalR0; 162 UINT32 capitalR1Length; 163#ifdef __midl 164 [size_is(capitalR1Length)] 165#endif 166 BYTE* capitalR1; 167 UINT32 gammaLength; 168#ifdef __midl 169 [size_is(gammaLength)] 170#endif 171 BYTE* gamma; 172 UINT32 capitalGammaLength; 173#ifdef __midl 174 [size_is(capitalGammaLength)] 175#endif 176 BYTE* capitalGamma; 177 UINT32 rhoLength; 178#ifdef __midl 179 [size_is(rhoLength)] 180#endif 181 BYTE* rho; 182 UINT32 capitalYLength; // Length of first dimenstion 183 UINT32 capitalYLength2; // Length of second dimension 184#ifdef __midl 185 [size_is(capitalYLength,capitalYLength2)] 186#endif 187 BYTE** capitalY; 188 UINT32 capitalYPlatformLength; 189 UINT32 issuerBaseNameLength; 190#ifdef __midl 191 [size_is(issuerBaseName)] 192#endif 193 BYTE* issuerBaseName; 194 UINT32 numPlatformAttributes; 195 UINT32 numIssuerAttributes; 196} TSS_DAA_PK; 197 198typedef struct tdTSS_DAA_PK_PROOF 199{ 200 TSS_VERSION versionInfo; 201 UINT32 challengeLength; 202#ifdef __midl 203 [size_is(challengeLength)] 204#endif 205 BYTE* challenge; 206 UINT32 responseLength; // Length of first dimension 207 UINT32 responseLength2; // Length of second dimension 208#ifdef __midl 209 [size_is(responseLength,responseLength2)] 210#endif 211 BYTE** response; 212} TSS_DAA_PK_PROOF; 213 214typedef struct tdTSS_DAA_SK 215{ 216 TSS_VERSION versionInfo; 217 UINT32 productPQprimeLength; 218#ifdef __midl 219 [size_is(productPQprimeLength)] 220#endif 221 BYTE* productPQprime; 222} TSS_DAA_SK; 223 224 225typedef struct tdTSS_DAA_KEY_PAIR 226{ 227 TSS_VERSION versionInfo; 228 TSS_DAA_SK secretKey; 229 TSS_DAA_PK publicKey; 230} TSS_DAA_KEY_PAIR; 231 232typedef struct tdTSS_DAA_AR_PK 233{ 234 TSS_VERSION versionInfo; 235 UINT32 etaLength; 236#ifdef __midl 237 [size_is(etaLength)] 238#endif 239 BYTE* eta; 240 UINT32 lambda1Length; 241#ifdef __midl 242 [size_is(lambda1Length)] 243#endif 244 BYTE* lambda1; 245 UINT32 lambda2Length; 246#ifdef __midl 247 [size_is(lambda2Length)] 248#endif 249 BYTE* lambda2; 250 UINT32 lambda3Length; 251#ifdef __midl 252 [size_is(lambda3Length)] 253#endif 254 BYTE* lambda3; 255} TSS_DAA_AR_PK; 256 257typedef struct tdTSS_DAA_AR_SK 258{ 259 TSS_VERSION versionInfo; 260 UINT32 x0Length; 261#ifdef __midl 262 [size_is(x0Length)] 263#endif 264 BYTE* x0; 265 UINT32 x1Length; 266#ifdef __midl 267 [size_is(x1Length)] 268#endif 269 BYTE* x1; 270 UINT32 x2Length; 271#ifdef __midl 272 [size_is(x2Length)] 273#endif 274 BYTE* x2; 275 UINT32 x3Length; 276#ifdef __midl 277 [size_is(x3Length)] 278#endif 279 BYTE* x3; 280 UINT32 x4Length; 281#ifdef __midl 282 [size_is(x4Length)] 283#endif 284 BYTE* x4; 285 UINT32 x5Length; 286#ifdef __midl 287 [size_is(x5Length)] 288#endif 289 BYTE* x5; 290} TSS_DAA_AR_SK; 291 292typedef struct tdTSS_DAA_AR_KEY_PAIR 293{ 294 TSS_VERSION versionInfo; 295 TSS_DAA_AR_SK secretKey; 296 TSS_DAA_AR_PK publicKey; 297} TSS_DAA_AR_KEY_PAIR; 298 299typedef struct tdTSS_DAA_CRED_ISSUER 300{ 301 TSS_VERSION versionInfo; 302 UINT32 capitalALength; 303#ifdef __midl 304 [size_is(capitalALength)] 305#endif 306 BYTE* capitalA; 307 UINT32 eLength; 308#ifdef __midl 309 [size_is(eLength)] 310#endif 311 BYTE* e; 312 UINT32 vPrimePrimeLength; 313#ifdef __midl 314 [size_is(vPrimePrimeLength)] 315#endif 316 BYTE* vPrimePrime; 317 UINT32 attributesIssuerLength; // Length of first dimension 318 UINT32 attributesIssuerLength2; // Length of second dimension 319#ifdef __midl 320 [size_is(attributesIssuerLength,attributesIssuerLength2)] 321#endif 322 BYTE** attributesIssuer; 323 UINT32 cPrimeLength; 324#ifdef __midl 325 [size_is(cPrimeLength)] 326#endif 327 BYTE* cPrime; 328 UINT32 sELength; 329#ifdef __midl 330 [size_is(sELength)] 331#endif 332 BYTE* sE; 333} TSS_DAA_CRED_ISSUER; 334 335typedef struct tdTSS_DAA_CREDENTIAL 336{ 337 TSS_VERSION versionInfo; 338 UINT32 capitalALength; 339#ifdef __midl 340 [size_is(capitalALength)] 341#endif 342 BYTE* capitalA; 343 UINT32 exponentLength; 344#ifdef __midl 345 [size_is(exponentLength)] 346#endif 347 BYTE* exponent; 348 UINT32 vBar0Length; 349#ifdef __midl 350 [size_is(vBar0Length)] 351#endif 352 BYTE* vBar0; 353 UINT32 vBar1Length; 354#ifdef __midl 355 [size_is(vBar1Length)] 356#endif 357 BYTE* vBar1; 358 UINT32 attributesLength; // Length of first dimension 359 UINT32 attributesLength2; // Length of second dimension 360#ifdef __midl 361 [size_is(attributesLength,attributesLength2)] 362#endif 363 BYTE** attributes; 364 TSS_DAA_PK issuerPK; 365 UINT32 tpmSpecificEncLength; 366#ifdef __midl 367 [size_is(tpmSpecificEncLength)] 368#endif 369 BYTE* tpmSpecificEnc; 370 UINT32 daaCounter; 371} TSS_DAA_CREDENTIAL; 372 373typedef struct tdTSS_DAA_ATTRIB_COMMIT 374{ 375 TSS_VERSION versionInfo; 376 UINT32 betaLength; 377#ifdef __midl 378 [size_is(betaLength)] 379#endif 380 BYTE* beta; 381 UINT32 sMuLength; 382#ifdef __midl 383 [size_is(sMuLength)] 384#endif 385 BYTE* sMu; 386} TSS_DAA_ATTRIB_COMMIT; 387 388typedef struct tdTSS_DAA_CREDENTIAL_REQUEST 389{ 390 TSS_VERSION versionInfo; 391 UINT32 capitalULength; 392#ifdef __midl 393 [size_is(capitalULength)] 394#endif 395 BYTE* capitalU; 396 UINT32 capitalNiLength; 397#ifdef __midl 398 [size_is(capitalNiLength)] 399#endif 400 BYTE* capitalNi; 401 UINT32 authenticationProofLength; 402#ifdef __midl 403 [size_is(authenticationProofLength)] 404#endif 405 BYTE* authenticationProof; 406 UINT32 challengeLength; 407#ifdef __midl 408 [size_is(challengeLength)] 409#endif 410 BYTE* challenge; 411 UINT32 nonceTpmLength; 412#ifdef __midl 413 [size_is(nonceTpmLength)] 414#endif 415 BYTE* nonceTpm; 416 UINT32 noncePlatformLength; 417#ifdef __midl 418 [size_is(noncePlatformLength)] 419#endif 420 BYTE* noncePlatform; 421 UINT32 sF0Length; 422#ifdef __midl 423 [size_is(sF0Length)] 424#endif 425 BYTE* sF0; 426 UINT32 sF1Length; 427#ifdef __midl 428 [size_is(sF1Length)] 429#endif 430 BYTE* sF1; 431 UINT32 sVprimeLength; 432#ifdef __midl 433 [size_is(sVprimeLength)] 434#endif 435 BYTE* sVprime; 436 UINT32 sVtildePrimeLength; 437#ifdef __midl 438 [size_is(sVtildePrimeLength)] 439#endif 440 BYTE* sVtildePrime; 441 UINT32 sALength; // Length of first dimension 442 UINT32 sALength2; // Length of second dimension 443#ifdef __midl 444 [size_is(sALength,sALength2)] 445#endif 446 BYTE** sA; 447 UINT32 attributeCommitmentsLength; 448 TSS_DAA_ATTRIB_COMMIT* attributeCommitments; 449} TSS_DAA_CREDENTIAL_REQUEST; 450 451typedef struct tdTSS_DAA_SELECTED_ATTRIB 452{ 453 TSS_VERSION versionInfo; 454 UINT32 indicesListLength; 455#ifdef __midl 456 [size_is(indicesListLength)] 457#endif 458 TSS_BOOL* indicesList; 459} TSS_DAA_SELECTED_ATTRIB; 460 461typedef struct tdTSS_DAA_PSEUDONYM 462{ 463 TSS_VERSION versionInfo; 464 TSS_FLAG payloadFlag; 465 UINT32 payloadLength; 466#ifdef __midl 467 [size_is(payloadLength)] 468#endif 469 BYTE* payload; 470} TSS_DAA_PSEUDONYM; 471 472typedef struct tdTSS_DAA_PSEUDONYM_PLAIN 473{ 474 TSS_VERSION versionInfo; 475 UINT32 capitalNvLength; 476#ifdef __midl 477 [size_is(capitalNvLength)] 478#endif 479 BYTE* capitalNv; 480} TSS_DAA_PSEUDONYM_PLAIN; 481 482typedef struct tdTSS_DAA_PSEUDONYM_ENCRYPTED 483{ 484 TSS_VERSION versionInfo; 485 UINT32 delta1Length; 486#ifdef __midl 487 [size_is(delta1Length)] 488#endif 489 BYTE* delta1; 490 UINT32 delta2Length; 491#ifdef __midl 492 [size_is(delta2Length)] 493#endif 494 BYTE* delta2; 495 UINT32 delta3Length; 496#ifdef __midl 497 [size_is(delta3Length)] 498#endif 499 BYTE* delta3; 500 UINT32 delta4Length; 501#ifdef __midl 502 [size_is(delta4Length)] 503#endif 504 BYTE* delta4; 505 UINT32 sTauLength; 506#ifdef __midl 507 [size_is(sTauLength)] 508#endif 509 BYTE* sTau; 510} TSS_DAA_PSEUDONYM_ENCRYPTED; 511 512typedef struct tdTSS_DAA_SIGN_CALLBACK 513{ 514 TSS_VERSION versionInfo; 515 TSS_HHASH challenge; 516 TSS_FLAG payloadFlag; 517 UINT32 payloadLength; 518#ifdef __midl 519 [size_is(payloadLength)] 520#endif 521 BYTE* payload; 522} TSS_DAA_SIGN_CALLBACK; 523 524typedef struct tdTSS_DAA_SIGNATURE 525{ 526 TSS_VERSION versionInfo; 527 UINT32 zetaLength; 528#ifdef __midl 529 [size_is(zetaLength)] 530#endif 531 BYTE* zeta; 532 UINT32 capitalTLength; 533#ifdef __midl 534 [size_is(capitalTLength)] 535#endif 536 BYTE* capitalT; 537 UINT32 challengeLength; 538#ifdef __midl 539 [size_is(challengeLength)] 540#endif 541 BYTE* challenge; 542 UINT32 nonceTpmLength; 543#ifdef __midl 544 [size_is(nonceTpmLength)] 545#endif 546 BYTE* nonceTpm; 547 UINT32 sVLength; 548#ifdef __midl 549 [size_is(sVLength)] 550#endif 551 BYTE* sV; 552 UINT32 sF0Length; 553#ifdef __midl 554 [size_is(sF0Length)] 555#endif 556 BYTE* sF0; 557 UINT32 sF1Length; 558#ifdef __midl 559 [size_is(sF1Length)] 560#endif 561 BYTE* sF1; 562 UINT32 sELength; 563#ifdef __midl 564 [size_is(sELength)] 565#endif 566 BYTE* sE; 567 UINT32 sALength; // Length of first dimension 568 UINT32 sALength2; // Length of second dimension 569#ifdef __midl 570 [size_is(sALength,sALength2)] 571#endif 572 BYTE** sA; 573 UINT32 attributeCommitmentsLength; 574#ifdef __midl 575 [size_is(attributeCommitmentsLength)] 576#endif 577 TSS_DAA_ATTRIB_COMMIT* attributeCommitments; 578 TSS_DAA_PSEUDONYM signedPseudonym; 579 TSS_DAA_SIGN_CALLBACK callbackResult; 580} TSS_DAA_SIGNATURE; 581 582typedef struct tdTSS_DAA_IDENTITY_PROOF 583{ 584 TSS_VERSION versionInfo; 585 UINT32 endorsementLength; 586#ifdef __midl 587 [size_is(endorsementLength)] 588#endif 589 BYTE* endorsementCredential; 590 UINT32 platformLength; 591#ifdef __midl 592 [size_is(platformLength)] 593#endif 594 BYTE* platform; 595 UINT32 conformanceLength; 596#ifdef __midl 597 [size_is(conformanceLength)] 598#endif 599 BYTE* conformance; 600} TSS_DAA_IDENTITY_PROOF; 601 602 603//////////////////////////////////////////////////////////////////// 604 605typedef UINT32 TSS_FAMILY_ID; 606typedef BYTE TSS_DELEGATION_LABEL; 607// Values are TSS_DELEGATIONTYPE_KEY or TSS_DELEGATIONTYPE_OWNER 608typedef UINT32 TSS_DELEGATION_TYPE; 609 610typedef struct tdTSS_PCR_INFO_SHORT 611{ 612 UINT32 sizeOfSelect; 613#ifdef __midl 614 [size_is(sizeOfSelect)] 615#endif 616 BYTE *selection; 617 BYTE localityAtRelease; 618 UINT32 sizeOfDigestAtRelease; 619#ifdef __midl 620 [size_is(sizeOfDigestAtRelease)] 621#endif 622 BYTE *digestAtRelease; 623} TSS_PCR_INFO_SHORT; 624 625typedef struct tdTSS_FAMILY_TABLE_ENTRY 626{ 627 TSS_FAMILY_ID familyID; 628 TSS_DELEGATION_LABEL label; 629 UINT32 verificationCount; 630 TSS_BOOL enabled; 631 TSS_BOOL locked; 632} TSS_FAMILY_TABLE_ENTRY; 633 634typedef struct tdTSS_DELEGATION_TABLE_ENTRY 635{ 636 UINT32 tableIndex; 637 TSS_DELEGATION_LABEL label; 638 TSS_PCR_INFO_SHORT pcrInfo; 639 UINT32 per1; 640 UINT32 per2; 641 TSS_FAMILY_ID familyID; 642 UINT32 verificationCount; 643} TSS_DELEGATION_TABLE_ENTRY; 644 645typedef struct tdTSS_PLATFORM_CLASS 646{ 647 UINT32 platformClassSimpleIdentifier; 648 UINT32 platformClassURISize; 649 BYTE* pPlatformClassURI; 650} TSS_PLATFORM_CLASS; 651 652#endif // __TSS_STRUCTS_H__ 653 654