tpm12.h

来自「EFI BIOS是Intel提出的下一代的BIOS标准。这里上传的Edk源代码是」· C头文件 代码 · 共 1,398 行 · 第 1/5 页

H
1,398
字号
#define TPM_PS_Server_12            ((TPM_PLATFORM_SPECIFIC) 0x0004) // Server Specific version 1.2
#define TPM_PS_Mobile_12            ((TPM_PLATFORM_SPECIFIC) 0x0005) // Mobil Specific version 1.2

//
// Part 2, section 5: Basic Structures
//

//
// Part 2, section 5.1: TPM_STRUCT_VER
//
typedef struct tdTPM_STRUCT_VER {
  UINT8                             major;
  UINT8                             minor;
  UINT8                             revMajor;
  UINT8                             revMinor;
} TPM_STRUCT_VER;

//
// Part 2, section 5.3: TPM_VERSION
//
typedef struct tdTPM_VERSION {
  TPM_VERSION_BYTE                  major;
  TPM_VERSION_BYTE                  minor;
  UINT8                             revMajor;
  UINT8                             revMinor;
} TPM_VERSION;

//
// Part 2, section 5.4: TPM_DIGEST
//
#define TPM_SHA1_160_HASH_LEN       0x14
#define TPM_SHA1BASED_NONCE_LEN     TPM_SHA1_160_HASH_LEN

typedef struct tdTPM_DIGEST{
  UINT8                             digest[TPM_SHA1_160_HASH_LEN];
} TPM_DIGEST;

typedef TPM_DIGEST                  TPM_CHOSENID_HASH; // This SHALL be the digest of the chosen identityLabel and privacyCA for a new TPM identity.
typedef TPM_DIGEST                  TPM_COMPOSITE_HASH; // This SHALL be the hash of a list of PCR indexes and PCR values that a key or data is bound to.
typedef TPM_DIGEST                  TPM_DIRVALUE; // This SHALL be the value of a DIR register
typedef TPM_DIGEST                  TPM_HMAC;
typedef TPM_DIGEST                  TPM_PCRVALUE; // The value inside of the PCR
typedef TPM_DIGEST                  TPM_AUDITDIGEST; // This SHALL be the value of the current internal audit state
typedef TPM_DIGEST                  TPM_DAA_TPM_SEED; // This SHALL be a random value generated by a TPM immediately after the EK is installed in that TPM, whenever an EK is installed in that TPM
typedef TPM_DIGEST                  TPM_DAA_CONTEXT_SEED; // This SHALL be a random value

//
// Part 2, section 5.5: TPM_NONCE
//
typedef struct tdTPM_NONCE{
  UINT8                             nonce[20];
} TPM_NONCE;

//
// Part 2, section 5.6: TPM_AUTHDATA
//
typedef UINT8                       tdTPM_AUTHDATA[20];
typedef tdTPM_AUTHDATA              TPM_AUTHDATA;
typedef TPM_AUTHDATA                TPM_SECRET;
typedef TPM_AUTHDATA                TPM_ENCAUTH;

//
// Part 2, section 5.7: TPM_KEY_HANDLE_LIST
// Size of handle is loaded * sizeof(TPM_KEY_HANDLE)
//
typedef struct tdTPM_KEY_HANDLE_LIST {
  UINT16                            loaded;
  TPM_KEY_HANDLE                    handle[1];
} TPM_KEY_HANDLE_LIST;

//
// Part 2, section 5.8: TPM_KEY_USAGE values
//

#define TPM_KEY_SIGNING             ((UINT16) 0x0010)
// TPM_KEY_SIGNING SHALL indicate a signing key. The [private] key SHALL be
// used for signing operations, only. This means that it MUST be a leaf of the
// Protected Storage key hierarchy.

#define TPM_KEY_STORAGE             ((UINT16) 0x0011)
// TPM_KEY_STORAGE SHALL indicate a storage key. The key SHALL be used to wrap
// and unwrap other keys in the Protected Storage hierarchy

#define TPM_KEY_IDENTITY            ((UINT16) 0x0012)
// TPM_KEY_IDENTITY SHALL indicate an identity key. The key SHALL be used for
// operations that require a TPM identity, only.

#define TPM_KEY_AUTHCHANGE          ((UINT16) 0x0013)
// TPM_KEY_AUTHCHANGE SHALL indicate an ephemeral key that is in use during
// the ChangeAuthAsym process, only.

#define TPM_KEY_BIND                ((UINT16) 0x0014)
// TPM_KEY_BIND SHALL indicate a key that can be used for TPM_Bind and
// TPM_Unbind operations only.

#define TPM_KEY_LEGACY              ((UINT16) 0x0015)
// TPM_KEY_LEGACY SHALL indicate a key that can perform signing and binding
// operations. The key MAY be used for both signing and binding operations.
// The TPM_KEY_LEGACY key type is to allow for use by applications where both
// signing and encryption operations occur with the same key. The use of this
// key type is not recommended TPM_KEY_MIGRATE 0x0016 This SHALL indicate a
// key in use for TPM_MigrateKey

#define TPM_KEY_MIGRATE             ((UINT16) 0x0016)
// TPM_KEY_MIGRAGE SHALL indicate a key in use for TPM_MigrateKey

//
// Part 2, section 5.8.1: Encryption/Signature schemes
//

#define TPM_ES_NONE                 ((TPM_ENC_SCHEME) 0x0001)
#define TPM_ES_RSAESPKCSv15         ((TPM_ENC_SCHEME) 0x0002)
#define TPM_ES_RSAESOAEP_SHA1_MGF1  ((TPM_ENC_SCHEME) 0x0003)
#define TPM_ES_SYM_CNT              ((TPM_ENC_SCHEME) 0x0004)
#define TPM_ES_SYM_OFB              ((TPM_ENC_SCHEME) 0x0005)

#define TPM_SS_NONE                 ((TPM_SIG_SCHEME) 0x0001)
#define TPM_SS_RSASSAPKCS1v15_SHA1  ((TPM_SIG_SCHEME) 0x0002)
#define TPM_SS_RSASSAPKCS1v15_DER   ((TPM_SIG_SCHEME) 0x0003)
#define TPM_SS_RSASSAPKCS1v15_INFO  ((TPM_SIG_SCHEME) 0x0004)

//
// Part 2, section 5.9: TPM_AUTH_DATA_USAGE values
//
#define TPM_AUTH_NEVER              ((TPM_AUTH_DATA_USAGE) 0x00)
#define TPM_AUTH_ALWAYS             ((TPM_AUTH_DATA_USAGE) 0x01)
#define TPM_AUTH_PRIV_USE_ONLY      ((TPM_AUTH_DATA_USAGE) 0x03)

//
// Part 2, section 5.10: TPM_KEY_FLAGS
//
enum tdTPM_KEY_FLAGS {
  redirection                       = 0x00000001,
  migratable                        = 0x00000002,
  isVolatile                        = 0x00000004,
  pcrIgnoredOnRead                  = 0x00000008,
  migrateAuthority                  = 0x00000010
};

//
// Part 2, section 5.11: TPM_CHANGEAUTH_VALIDATE
//
typedef struct tdTPM_CHANGEAUTH_VALIDATE {
  TPM_SECRET                        newAuthSecret;
  TPM_NONCE                         n1;
} TPM_CHANGEAUTH_VALIDATE;

//
// Part 2, section 5.12: TPM_MIGRATIONKEYAUTH
//   decalared after section 10 to catch declaration of TPM_PUBKEY
//
// Part 2 section 10.1: TPM_KEY_PARMS
//   [size_is(parmSize)] BYTE* parms;
//
typedef struct tdTPM_KEY_PARMS {
  TPM_ALGORITHM_ID                  algorithmID;
  TPM_ENC_SCHEME                    encScheme;
  TPM_SIG_SCHEME                    sigScheme;
  UINT32                            parmSize;
  UINT8                             *parms;
} TPM_KEY_PARMS;

//
// Part 2, section 10.4: TPM_STORE_PUBKEY
//
typedef struct tdTPM_STORE_PUBKEY {
  UINT32                            keyLength;
  UINT8                             key[1];
} TPM_STORE_PUBKEY;

//
// Part 2, section 10.5: TPM_PUBKEY
//
typedef struct tdTPM_PUBKEY{
  TPM_KEY_PARMS                     algorithmParms;
  TPM_STORE_PUBKEY                  pubKey;
} TPM_PUBKEY;

//
// Part 2, section 5.12: TPM_MIGRATIONKEYAUTH
//
typedef struct tdTPM_MIGRATIONKEYAUTH{
  TPM_PUBKEY                        migrationKey;
  TPM_MIGRATE_SCHEME                migrationScheme;
  TPM_DIGEST                        digest;
} TPM_MIGRATIONKEYAUTH;

//
// Part 2, section 5.13: TPM_COUNTER_VALUE
//
typedef struct tdTPM_COUNTER_VALUE{
  TPM_STRUCTURE_TAG                 tag;
  UINT8                             label[4];
  TPM_ACTUAL_COUNT                  counter;
} TPM_COUNTER_VALUE;

//
// Part 2, section 5.14: TPM_SIGN_INFO
//   Size of data indicated by dataLen
//
typedef struct tdTPM_SIGN_INFO {
  TPM_STRUCTURE_TAG                 tag;
  UINT8                             fixed[4];
  TPM_NONCE                         replay;
  UINT32                            dataLen;
  UINT8                             *data;
} TPM_SIGN_INFO;

//
// Part 2, section 5.15: TPM_MSA_COMPOSITE
//   Number of migAuthDigest indicated by MSAlist
//
typedef struct tdTPM_MSA_COMPOSITE {
  UINT32                            MSAlist;
  TPM_DIGEST                        migAuthDigest[1];
} TPM_MSA_COMPOSITE;

//
// Part 2, section 5.16: TPM_CMK_AUTH
//
typedef struct tdTPM_CMK_AUTH{
  TPM_DIGEST                        migrationAuthorityDigest;
  TPM_DIGEST                        destinationKeyDigest;
  TPM_DIGEST                        sourceKeyDigest;
} TPM_CMK_AUTH;

//
// Part 2, section 5.17: TPM_CMK_DELEGATE
//
#define TPM_CMK_DELEGATE_SIGNING    (((TPM_CMK_DELEGATE)1) << 31)
#define TPM_CMK_DELEGATE_STORAGE    (((TPM_CMK_DELEGATE)1) << 30)
#define TPM_CMK_DELEGATE_BIND       (((TPM_CMK_DELEGATE)1) << 29)
#define TPM_CMK_DELEGATE_LEGACY     (((TPM_CMK_DELEGATE)1) << 28)
#define TPM_CMK_DELEGATE_MIGRATE    (((TPM_CMK_DELEGATE)1) << 27)

//
// Part 2, section 5.18: TPM_SELECT_SIZE
//
typedef struct tdTPM_SELECT_SIZE {
  UINT8                             major;
  UINT8                             minor;
  UINT16                            reqSize;
} TPM_SELECT_SIZE;

//
// Part 2, section 5,19: TPM_CMK_MIGAUTH
//
typedef struct tdTPM_CMK_MIGAUTH{
  TPM_STRUCTURE_TAG                 tag;
  TPM_DIGEST                        msaDigest;
  TPM_DIGEST                        pubKeyDigest;
} TPM_CMK_MIGAUTH;

//
// Part 2, section 5.20: TPM_CMK_SIGTICKET
//
typedef struct tdTPM_CMK_SIGTICKET{
  TPM_STRUCTURE_TAG                 tag;
  TPM_DIGEST                        verKeyDigest;
  TPM_DIGEST                        signedData;
} TPM_CMK_SIGTICKET;

//
// Part 2, section 5.21: TPM_CMK_MA_APPROVAL
//
typedef struct tdTPM_CMK_MA_APPROVAL{
  TPM_STRUCTURE_TAG                 tag;
  TPM_DIGEST                        migrationAuthorityDigest;
} TPM_CMK_MA_APPROVAL;

//
// Part 2, section 6: Command Tags
//
#define TPM_TAG_RQU_COMMAND         ((TPM_STRUCTURE_TAG) 0x00C1)
#define TPM_TAG_RQU_AUTH1_COMMAND   ((TPM_STRUCTURE_TAG) 0x00C2)
#define TPM_TAG_RQU_AUTH2_COMMAND   ((TPM_STRUCTURE_TAG) 0x00C3)
#define TPM_TAG_RSP_COMMAND         ((TPM_STRUCTURE_TAG) 0x00C4)
#define TPM_TAG_RSP_AUTH1_COMMAND   ((TPM_STRUCTURE_TAG) 0x00C5)
#define TPM_TAG_RSP_AUTH2_COMMAND   ((TPM_STRUCTURE_TAG) 0x00C6)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?