Home | History | Annotate | Line # | Download | only in tss
      1 /*++
      2 
      3 TSS 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 
     14 typedef struct tdTSS_VERSION
     15 {
     16     BYTE   bMajor;
     17     BYTE   bMinor;
     18     BYTE   bRevMajor;
     19     BYTE   bRevMinor;
     20 } TSS_VERSION;
     21 
     22 typedef 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 
     40 typedef 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 
     62 typedef 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 
     72 typedef 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 
     87 typedef 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 
    104 typedef struct tdTSS_NONCE
    105 {
    106     BYTE  nonce[TPM_SHA1BASED_NONCE_LEN];
    107 } TSS_NONCE;
    108 
    109 
    110 typedef 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 
    131 typedef struct tdTSS_CALLBACK
    132 {
    133     PVOID            callback;
    134     PVOID            appData;
    135     TSS_ALGORITHM_ID alg;
    136 } TSS_CALLBACK;
    137 
    138 
    139 typedef 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 
    198 typedef 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 
    214 typedef 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 
    225 typedef 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 
    232 typedef 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 
    257 typedef 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 
    292 typedef 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 
    299 typedef 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 
    335 typedef 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 
    373 typedef 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 
    388 typedef 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 
    451 typedef 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 
    461 typedef 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 
    472 typedef 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 
    482 typedef 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 
    512 typedef 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 
    524 typedef 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 
    582 typedef 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 
    605 typedef UINT32 TSS_FAMILY_ID;
    606 typedef BYTE   TSS_DELEGATION_LABEL;
    607 // Values are TSS_DELEGATIONTYPE_KEY or TSS_DELEGATIONTYPE_OWNER
    608 typedef UINT32 TSS_DELEGATION_TYPE;
    609 
    610 typedef 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 
    625 typedef 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 
    634 typedef 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 
    645 typedef 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