diff options
author | ChromeOS Developer <bohr@chromium.org> | 2015-07-10 10:12:43 -0700 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2015-07-27 21:39:29 +0000 |
commit | e85c65bf85bc6251895cdfe6bb6213d125cc2366 (patch) | |
tree | a9c83cabfebb094cdf898fccb8dc4955e9ad4f65 /TPM_Types.h | |
parent | 4152d0da7bebd2ff77d2b093252f1389edb48091 (diff) | |
download | tpm2-e85c65bf85bc6251895cdfe6bb6213d125cc2366.tar.gz |
Changes to allow for libtpm2 compilation with marshaling code.
- New files tpm_generated.c and tpm_generated.h files add
functions to marshal and unmarshal TPM structures.
- New file marshal_test.c contains unit tests for
tpm_generated.c.
- Added missing types to TPM_Types.h and renamed structure
fields to match the spec.
- Made changes to scraped *.c files to match renaming changes
made to TPM_Types.h.
- Added tpm_generated.c to Makefile.
TEST=$ sudo emerge tpm2
builds libtpm2 with tpm_generated.c
$ gcc marshal_test.c -ltpm2 -lssl -lcrypto marshal-test
builds test exutable
$ ./marshal-test
passes all test cases
BUG=chromium:501639
Change-Id: Iea20a9d77f236bb5aee55a8b86dc39b58e340912
Reviewed-on: https://chromium-review.googlesource.com/282042
Reviewed-by: Utkarsh Sanghi <usanghi@chromium.org>
Commit-Queue: Jocelyn Bohr <bohr@chromium.org>
Tested-by: Jocelyn Bohr <bohr@chromium.org>
Diffstat (limited to 'TPM_Types.h')
-rw-r--r-- | TPM_Types.h | 127 |
1 files changed, 120 insertions, 7 deletions
diff --git a/TPM_Types.h b/TPM_Types.h index 04ac364..f58ba5e 100644 --- a/TPM_Types.h +++ b/TPM_Types.h @@ -30,6 +30,27 @@ typedef UINT32 TPM_CAP; #define MAX_PCR_PROPERTIES (MAX_CAP_DATA / sizeof(TPMS_TAGGED_PCR_SELECT)) #define MAX_TPM_PROPERTIES (MAX_CAP_DATA / sizeof(TPMS_TAGGED_PROPERTY)) +typedef UINT32 TPM_ALGORITHM_ID; +typedef UINT32 TPM_MODIFIER_INDICATOR; +typedef UINT32 TPM_AUTHORIZATION_SIZE; +typedef UINT32 TPM_PARAMETER_SIZE; +typedef UINT16 TPM_KEY_SIZE; +typedef UINT32 TPM_SPEC; +typedef UINT32 TPM_NV_INDEX; + +typedef TPM_HANDLE TPMI_DH_PERSISTENT; +typedef TPM_HANDLE TPMI_RH_ENABLES; +typedef TPM_HANDLE TPMI_RH_HIERARCHY_AUTH; +typedef TPM_HANDLE TPMI_RH_PLATFORM; +typedef TPM_HANDLE TPMI_RH_OWNER; +typedef TPM_HANDLE TPMI_RH_ENDORSEMENT; +typedef TPM_HANDLE TPMI_RH_PROVISION; +typedef TPM_HANDLE TPMI_RH_CLEAR; +typedef TPM_HANDLE TPMI_RH_NV_AUTH; +typedef TPM_HANDLE TPMI_RH_LOCKOUT; +typedef TPM_ALG_ID TPMI_ALG_ASYM; +typedef TPM_ALG_ID TPMI_ECC_KEY_EXCHANGE; + // Table 6 - TPM_GENERATED Constants typedef UINT32 TPM_GENERATED; #define TPM_GENERATED_VALUE (TPM_GENERATED)(0xff544347) @@ -284,6 +305,7 @@ typedef UINT32 TPM_PT; #define TPM_PT_TOTAL_COMMANDS (TPM_PT)(PT_FIXED + 41) #define TPM_PT_LIBRARY_COMMANDS (TPM_PT)(PT_FIXED + 42) #define TPM_PT_VENDOR_COMMANDS (TPM_PT)(PT_FIXED + 43) +#define TPM_PT_NV_BUFFER_MAX (TPM_PT)(PT_FIXED + 44) #define PT_VAR (TPM_PT)(PT_GROUP * 2) #define TPM_PT_PERMANENT (TPM_PT)(PT_VAR + 0) #define TPM_PT_STARTUP_CLEAR (TPM_PT)(PT_VAR + 1) @@ -407,10 +429,10 @@ typedef struct { // Table 30 - TPMA_OBJECT Bits typedef struct { - UINT32 reserved1 : 1; + UINT32 reserved0 : 1; UINT32 fixedTPM : 1; UINT32 stClear : 1; - UINT32 reserved4 : 1; + UINT32 reserved3 : 1; UINT32 fixedParent : 1; UINT32 sensitiveDataOrigin : 1; UINT32 userWithAuth : 1; @@ -467,7 +489,7 @@ typedef struct { UINT32 shEnable : 1; UINT32 ehEnable : 1; UINT32 phEnableNV : 1; - UINT32 reserved3_30 : 27; + UINT32 reserved4_30 : 27; UINT32 orderly : 1; } TPMA_STARTUP_CLEAR; @@ -552,6 +574,11 @@ typedef union { BYTE sha512[SHA512_DIGEST_SIZE]; } TPMU_HA; +// not in spec ? +typedef struct { + TPMI_ALG_HASH hashAlg; +} TPMS_SCHEME_ECDH; + // Table 67 - TPMT_HA Structure typedef struct { TPMI_ALG_HASH hashAlg; @@ -560,10 +587,17 @@ typedef struct { // Table 68 - TPM2B_DIGEST Structure TPM2B_TYPE(DIGEST, sizeof(TPMU_HA)); +typedef TPM2B_DIGEST TPM2B_OPERAND; // Table 69 - TPM2B_DATA Structure TPM2B_TYPE(DATA, sizeof(TPMT_HA)); +// Table 69 - TPMA_ALGORITHM_DESCRIPTION* +typedef struct { + TPM_ALG_ID alg; + TPMA_ALGORITHM attributes; +} TPMS_ALGORITHM_DESCRIPTION; + // Table 70 - TPM2B_NONCE Types typedef TPM2B_DIGEST TPM2B_NONCE; @@ -579,6 +613,9 @@ TPM2B_TYPE(MAX_NV_BUFFER, MAX_NV_INDEX_SIZE); // Table 77 -- TPM2B_IV Structure <I/O> TPM2B_TYPE(IV, MAX_SYM_BLOCK_SIZE); +// Table 77 - TPM2B_EVENT Structure* +TPM2B_TYPE(EVENT, 1024); + // Table 78 - TPMU_NAME Union typedef union { TPMT_HA digest; @@ -586,7 +623,16 @@ typedef union { } TPMU_NAME; // Table 79 - TPM2B_NAME Structure -TPM2B_TYPE(NAME, sizeof(TPMU_NAME)); +typedef union { + struct { + UINT16 size; + BYTE name[sizeof(TPMU_NAME)]; + } t; + TPM2B b; +} TPM2B_NAME; + +// Table 80 - TPM2B_TIMEOUT +TPM2B_TYPE(TIMEOUT, sizeof(UINT64)); // Table 81 - TPMS_PCR_SELECTION Structure typedef struct { @@ -602,6 +648,12 @@ typedef struct { TPM2B_DIGEST digest; } TPMT_TK_COMMON; +// Table 84 - TPMS_PCR_SELECT Structure +typedef struct { + UINT8 sizeofSelect; + BYTE pcrSelect[PCR_SELECT_MAX]; +} TPMS_PCR_SELECT; + typedef TPMT_TK_COMMON TPMT_TK_CREATION; // Table 85 - TPMT_TK_VERIFIED Structure @@ -686,6 +738,15 @@ typedef struct { TPMS_TAGGED_PCR_SELECT pcrProperty[MAX_PCR_PROPERTIES]; } TPML_TAGGED_PCR_PROPERTY; +// Table 100 - TPML_DIGEST_VALUES Structure* +typedef struct { + UINT32 count; + TPMT_HA digests[HASH_COUNT]; +} TPML_DIGEST_VALUES; + +// Table 101 - TPM2B_DIGEST_VALUES Structure* +TPM2B_TYPE(DIGEST_VALUES, sizeof(TPML_DIGEST_VALUES)); + // Table 102 - TPML_ECC_CURVE Structure typedef struct { UINT32 count; @@ -798,11 +859,32 @@ typedef struct { } TPMS_ATTEST; // Table 117 - TPM2B_ATTEST Structure -TPM2B_TYPE(ATTEST, sizeof(TPMS_ATTEST)); +typedef union { + struct { + UINT16 size; + BYTE attestationData[sizeof(TPMS_ATTEST)]; + } t; + TPM2B b; +} TPM2B_ATTEST; // Table 120 - TPMI_AES_KEY_BITS Type typedef TPM_KEY_BITS TPMI_AES_KEY_BITS; +// Table 121 - TPMS_AUTH_COMMAND Structure* +typedef struct { + TPMI_SH_AUTH_SESSION sessionHandle; + TPM2B_NONCE nonce; + TPMA_SESSION sessionAttributes; + TPM2B_AUTH hmac; +} TPMS_AUTH_COMMAND; + +// Table 122 - TPMS_AUTH_RESPONSE Structure* +typedef struct { + TPM2B_NONCE nonce; + TPMA_SESSION sessionAttributes; + TPM2B_AUTH hmac; +} TPMS_AUTH_RESPONSE; + // Table 121 - TPMI_SM4_KEY_BITS Type typedef TPM_KEY_BITS TPMI_SM4_KEY_BITS; @@ -847,6 +929,11 @@ typedef struct { TPM2B_SENSITIVE_DATA data; } TPMS_SENSITIVE_CREATE; +// Table 131 - TPMS_SYMCIPHER_PARMS Structure +typedef struct { + TPMT_SYM_DEF_OBJECT sym; +} TPMS_SYMCIPHER_PARMS; + // Table 131 - TPM2B_SENSITIVE_CREATE Structure typedef union { struct { @@ -902,6 +989,7 @@ typedef union { TPMS_SCHEME_RSASSA rsassa; TPMS_SCHEME_RSAPSS rsapss; TPMS_SCHEME_ECDSA ecdsa; + TPMS_SCHEME_SM2 sm2; TPMS_SCHEME_ECDAA ecdaa; TPMS_SCHEME_ECSCHNORR ecSchnorr; TPMS_SCHEME_HMAC hmac; @@ -952,8 +1040,10 @@ typedef union { TPMS_SCHEME_RSAPSS rsapss; TPMS_SCHEME_OAEP oaep; TPMS_SCHEME_ECDSA ecdsa; + TPMS_SCHEME_SM2 sm2; TPMS_SCHEME_ECDAA ecdaa; TPMS_SCHEME_ECSCHNORR ecSchnorr; + TPMS_SCHEME_ECDH ecdh; TPMS_SCHEME_SIGHASH anySig; } TPMU_ASYM_SCHEME; @@ -1081,7 +1171,13 @@ typedef union { } TPMU_ENCRYPTED_SECRET; // Table 174 - TPM2B_ENCRYPTED_SECRET Structure -TPM2B_TYPE(ENCRYPTED_SECRET, sizeof(TPMU_ENCRYPTED_SECRET)); +typedef union { + struct { + UINT16 size; + BYTE secret[sizeof(TPMU_ENCRYPTED_SECRET)]; + } t; + TPM2B b; +} TPM2B_ENCRYPTED_SECRET; // Table 175 - TPMI_ALG_PUBLIC Type typedef TPM_ALG_ID TPMI_ALG_PUBLIC; @@ -1197,8 +1293,15 @@ typedef struct { TPM2B_DIGEST encIdentity; } _ID_OBJECT; + // Table 192 - TPM2B_ID_OBJECT Structure -TPM2B_TYPE(ID_OBJECT, sizeof(_ID_OBJECT)); +typedef union { + struct { + UINT16 size; + BYTE credential[sizeof(_ID_OBJECT)]; + } t; + TPM2B b; +} TPM2B_ID_OBJECT; // Table 195 - TPMA_NV Bits typedef struct { @@ -1239,6 +1342,16 @@ typedef struct { UINT16 dataSize; } TPMS_NV_PUBLIC; +// Table 197 - TPM2B_NV_PUBLIC Structure +typedef union { + struct { + UINT16 size; + TPMS_NV_PUBLIC nvPublic; + } t __attribute__((packed)); + TPM2B b; +} TPM2B_NV_PUBLIC; + + // Table 198 - TPM2B_CONTEXT_SENSITIVE Structure TPM2B_TYPE(CONTEXT_SENSITIVE, MAX_CONTEXT_SIZE); |