Compare commits

...

5 Commits

Author SHA1 Message Date
Stefan Berger
f1a4abceaf
Merge 708f2a8bc9 into c0a2f22226 2025-08-03 21:49:50 +00:00
Stefan Berger
708f2a8bc9 tpm2: Add definitions for new algorithms and curves
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2025-08-03 17:49:32 -04:00
Stefan Berger
46261de1b9 tpm2: Sync with new defines on symmetric algorithms' sizes
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2025-08-03 17:49:32 -04:00
Stefan Berger
583dd0ac2d tpm2: Move defines for commands from TpmAlgorithmDefines to TpmTypes.h
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2025-08-03 17:49:32 -04:00
Stefan Berger
c0a2f22226 tpm2: Add explicit casts to UINT32 to avoid UBSAN issue
UBSAN complains about the following now:

  runtime error: left shift of 129 by 24 places cannot be
     represented in type 'int'

Fix this (again) in the affected variables by casting the values to UINT32.
Some of the fixes got lost in the recent re-base, others are new due to
how the values are defined.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
2025-08-03 17:47:15 -04:00
2 changed files with 393 additions and 262 deletions

View File

@ -63,177 +63,122 @@
#ifndef _TPM_INCLUDE_PRIVATE_TPMALGORITHMDEFINES_H_
#define _TPM_INCLUDE_PRIVATE_TPMALGORITHMDEFINES_H_
#include "TpmProfile.h"
#include "MinMax.h"
#include "TPMB.h"
#if ALG_ECC
// Table "Defines for NIST_P192 ECC Values" (TCG Algorithm Registry)
# define NIST_P192_ID TPM_ECC_NIST_P192
# define NIST_P192_KEY_SIZE 192
// Table "Defines for NIST_P224 ECC Values" (TCG Algorithm Registry)
# define NIST_P224_ID TPM_ECC_NIST_P224
# define NIST_P224_KEY_SIZE 224
// Table "Defines for NIST_P256 ECC Values" (TCG Algorithm Registry)
# define NIST_P256_ID TPM_ECC_NIST_P256
# define NIST_P256_KEY_SIZE 256
// Table "Defines for NIST_P384 ECC Values" (TCG Algorithm Registry)
# define NIST_P384_ID TPM_ECC_NIST_P384
# define NIST_P384_KEY_SIZE 384
// Table "Defines for NIST_P521 ECC Values" (TCG Algorithm Registry)
# define NIST_P521_ID TPM_ECC_NIST_P521
# define NIST_P521_KEY_SIZE 521
// Table "Defines for BN_P256 ECC Values" (TCG Algorithm Registry)
# define BN_P256_ID TPM_ECC_BN_P256
# define BN_P256_KEY_SIZE 256
// Table "Defines for BN_P638 ECC Values" (TCG Algorithm Registry)
# define BN_P638_ID TPM_ECC_BN_P638
# define BN_P638_KEY_SIZE 638
// Table "Defines for SM2_P256 ECC Values" (TCG Algorithm Registry)
# define SM2_P256_ID TPM_ECC_SM2_P256
# define SM2_P256_KEY_SIZE 256
// Table "Defines for BP_P256_R1 ECC Values" (TCG Algorithm Registry)
# define BP_P256_R1_ID TPM_ECC_BP_P256_R1
# define BP_P256_R1_KEY_SIZE 256
// Table "Defines for BP_P384_R1 ECC Values" (TCG Algorithm Registry)
# define BP_P384_R1_ID TPM_ECC_BP_P384_R1
# define BP_P384_R1_KEY_SIZE 384
// Table "Defines for BP_P512_R1 ECC Values" (TCG Algorithm Registry)
# define BP_P512_R1_ID TPM_ECC_BP_P512_R1
# define BP_P512_R1_KEY_SIZE 512
// Table "Defines for CURVE_25519 ECC Values" (TCG Algorithm Registry)
# define CURVE_25519_ID TPM_ECC_CURVE_25519
# define CURVE_25519_KEY_SIZE 256
// Table "Defines for CURVE_448 ECC Values" (TCG Algorithm Registry)
# define CURVE_448_ID TPM_ECC_CURVE_448
# define CURVE_448_KEY_SIZE 448
// Derived ECC Value
# define ECC_CURVES \
{ \
TPM_ECC_NIST_P192, TPM_ECC_NIST_P224, TPM_ECC_NIST_P256, \
TPM_ECC_NIST_P384, TPM_ECC_NIST_P521, TPM_ECC_BN_P256, \
TPM_ECC_BN_P638, TPM_ECC_SM2_P256}
TPM_ECC_BN_P638, TPM_ECC_SM2_P256, TPM_ECC_BP_P256_R1, \
TPM_ECC_BP_P384_R1, TPM_ECC_BP_P512_R1, TPM_ECC_CURVE_25519, \
TPM_ECC_CURVE_448 \
}
# define ECC_CURVE_COUNT \
(ECC_NIST_P192 + ECC_NIST_P224 + ECC_NIST_P256 + ECC_NIST_P384 + ECC_NIST_P521 \
+ ECC_BN_P256 + ECC_BN_P638 + ECC_SM2_P256)
+ ECC_BN_P256 + ECC_BN_P638 + ECC_SM2_P256 + ECC_BP_P256_R1 + ECC_BP_P384_R1 \
+ ECC_BP_P512_R1 + ECC_CURVE_25519 + ECC_CURVE_448)
// Avoid expanding MAX_ECC_KEY_BITS into a long expression, the compiler slows down
// and on some compilers runs out of heap space.
#define MAX_ECC_KEY_BITS \
MAX(ECC_BN_P256 * 256, MAX(ECC_BN_P638 * 638, \
MAX(ECC_NIST_P192 * 192, MAX(ECC_NIST_P224 * 224, \
MAX(ECC_NIST_P256 * 256, MAX(ECC_NIST_P384 * 384, \
MAX(ECC_NIST_P521 * 521, MAX(ECC_SM2_P256 * 256, \
0))))))))
#define MAX_ECC_KEY_BYTES BITS_TO_BYTES(MAX_ECC_KEY_BITS)
// 638
# if ECC_BN_P638
# define MAX_ECC_KEY_BITS BN_P638_KEY_SIZE
// 521
# elif ECC_NIST_P521
# define MAX_ECC_KEY_BITS NIST_P521_KEY_SIZE
# elif ECC_BP_P512_R1
# define MAX_ECC_KEY_BITS BP_P512_R1_KEY_SIZE
// 448
# elif ECC_CURVE_448
# define MAX_ECC_KEY_BITS CURVE_448_KEY_SIZE
// 384
# elif ECC_NIST_P384
# define MAX_ECC_KEY_BITS NIST_P384_KEY_SIZE
# elif ECC_BP_P384_R1
# define MAX_ECC_KEY_BITS BP_P384_R1_KEY_SIZE
// 256
# elif ECC_NIST_P256
# define MAX_ECC_KEY_BITS NIST_P256_KEY_SIZE
# elif TPM_ECC_BN_P256
# define MAX_ECC_KEY_BITS BN_P256_KEY_SIZE
# elif TPM_ECC_SM2_P256
# define MAX_ECC_KEY_BITS SM2_P256_KEY_SIZE
# elif TPM_ECC_CURVE_25519
# define MAX_ECC_KEY_BITS CURVE_25519_KEY_SIZE
# elif TPM_ECC_BP_P256_R1
# define MAX_ECC_KEY_BITS BP_P256_R1_KEY_SIZE
// 224
# elif ECC_NIST_P224
# define MAX_ECC_KEY_BITS NIST_P224_KEY_SIZE
// 192
# elif ECC_NIST_P192
# define MAX_ECC_KEY_BITS NIST_P192_KEY_SIZE
# else
# error ALG_ECC enabled, but no ECC Curves Enabled
# endif
# define MAX_ECC_KEY_BYTES ((MAX_ECC_KEY_BITS + 7) / 8)
#endif // ALG_ECC
// Additional values for benefit of code
#if COMPRESSED_LISTS
#define ADD_FILL 0
#else
#define ADD_FILL 1
#endif
// Size the array of library commands based on whether or not the array is packed (only defined
// commands) or dense (having entries for unimplemented commands)
#define LIBRARY_COMMAND_ARRAY_SIZE (0 \
+ (ADD_FILL || CC_NV_UndefineSpaceSpecial) /* 0x0000011F */ \
+ (ADD_FILL || CC_EvictControl) /* 0x00000120 */ \
+ (ADD_FILL || CC_HierarchyControl) /* 0x00000121 */ \
+ (ADD_FILL || CC_NV_UndefineSpace) /* 0x00000122 */ \
+ ADD_FILL /* 0x00000123 */ \
+ (ADD_FILL || CC_ChangeEPS) /* 0x00000124 */ \
+ (ADD_FILL || CC_ChangePPS) /* 0x00000125 */ \
+ (ADD_FILL || CC_Clear) /* 0x00000126 */ \
+ (ADD_FILL || CC_ClearControl) /* 0x00000127 */ \
+ (ADD_FILL || CC_ClockSet) /* 0x00000128 */ \
+ (ADD_FILL || CC_HierarchyChangeAuth) /* 0x00000129 */ \
+ (ADD_FILL || CC_NV_DefineSpace) /* 0x0000012A */ \
+ (ADD_FILL || CC_PCR_Allocate) /* 0x0000012B */ \
+ (ADD_FILL || CC_PCR_SetAuthPolicy) /* 0x0000012C */ \
+ (ADD_FILL || CC_PP_Commands) /* 0x0000012D */ \
+ (ADD_FILL || CC_SetPrimaryPolicy) /* 0x0000012E */ \
+ (ADD_FILL || CC_FieldUpgradeStart) /* 0x0000012F */ \
+ (ADD_FILL || CC_ClockRateAdjust) /* 0x00000130 */ \
+ (ADD_FILL || CC_CreatePrimary) /* 0x00000131 */ \
+ (ADD_FILL || CC_NV_GlobalWriteLock) /* 0x00000132 */ \
+ (ADD_FILL || CC_GetCommandAuditDigest) /* 0x00000133 */ \
+ (ADD_FILL || CC_NV_Increment) /* 0x00000134 */ \
+ (ADD_FILL || CC_NV_SetBits) /* 0x00000135 */ \
+ (ADD_FILL || CC_NV_Extend) /* 0x00000136 */ \
+ (ADD_FILL || CC_NV_Write) /* 0x00000137 */ \
+ (ADD_FILL || CC_NV_WriteLock) /* 0x00000138 */ \
+ (ADD_FILL || CC_DictionaryAttackLockReset) /* 0x00000139 */ \
+ (ADD_FILL || CC_DictionaryAttackParameters) /* 0x0000013A */ \
+ (ADD_FILL || CC_NV_ChangeAuth) /* 0x0000013B */ \
+ (ADD_FILL || CC_PCR_Event) /* 0x0000013C */ \
+ (ADD_FILL || CC_PCR_Reset) /* 0x0000013D */ \
+ (ADD_FILL || CC_SequenceComplete) /* 0x0000013E */ \
+ (ADD_FILL || CC_SetAlgorithmSet) /* 0x0000013F */ \
+ (ADD_FILL || CC_SetCommandCodeAuditStatus) /* 0x00000140 */ \
+ (ADD_FILL || CC_FieldUpgradeData) /* 0x00000141 */ \
+ (ADD_FILL || CC_IncrementalSelfTest) /* 0x00000142 */ \
+ (ADD_FILL || CC_SelfTest) /* 0x00000143 */ \
+ (ADD_FILL || CC_Startup) /* 0x00000144 */ \
+ (ADD_FILL || CC_Shutdown) /* 0x00000145 */ \
+ (ADD_FILL || CC_StirRandom) /* 0x00000146 */ \
+ (ADD_FILL || CC_ActivateCredential) /* 0x00000147 */ \
+ (ADD_FILL || CC_Certify) /* 0x00000148 */ \
+ (ADD_FILL || CC_PolicyNV) /* 0x00000149 */ \
+ (ADD_FILL || CC_CertifyCreation) /* 0x0000014A */ \
+ (ADD_FILL || CC_Duplicate) /* 0x0000014B */ \
+ (ADD_FILL || CC_GetTime) /* 0x0000014C */ \
+ (ADD_FILL || CC_GetSessionAuditDigest) /* 0x0000014D */ \
+ (ADD_FILL || CC_NV_Read) /* 0x0000014E */ \
+ (ADD_FILL || CC_NV_ReadLock) /* 0x0000014F */ \
+ (ADD_FILL || CC_ObjectChangeAuth) /* 0x00000150 */ \
+ (ADD_FILL || CC_PolicySecret) /* 0x00000151 */ \
+ (ADD_FILL || CC_Rewrap) /* 0x00000152 */ \
+ (ADD_FILL || CC_Create) /* 0x00000153 */ \
+ (ADD_FILL || CC_ECDH_ZGen) /* 0x00000154 */ \
+ (ADD_FILL || CC_HMAC || CC_MAC) /* 0x00000155 */ \
+ (ADD_FILL || CC_Import) /* 0x00000156 */ \
+ (ADD_FILL || CC_Load) /* 0x00000157 */ \
+ (ADD_FILL || CC_Quote) /* 0x00000158 */ \
+ (ADD_FILL || CC_RSA_Decrypt) /* 0x00000159 */ \
+ ADD_FILL /* 0x0000015A */ \
+ (ADD_FILL || CC_HMAC_Start || CC_MAC_Start) /* 0x0000015B */ \
+ (ADD_FILL || CC_SequenceUpdate) /* 0x0000015C */ \
+ (ADD_FILL || CC_Sign) /* 0x0000015D */ \
+ (ADD_FILL || CC_Unseal) /* 0x0000015E */ \
+ ADD_FILL /* 0x0000015F */ \
+ (ADD_FILL || CC_PolicySigned) /* 0x00000160 */ \
+ (ADD_FILL || CC_ContextLoad) /* 0x00000161 */ \
+ (ADD_FILL || CC_ContextSave) /* 0x00000162 */ \
+ (ADD_FILL || CC_ECDH_KeyGen) /* 0x00000163 */ \
+ (ADD_FILL || CC_EncryptDecrypt) /* 0x00000164 */ \
+ (ADD_FILL || CC_FlushContext) /* 0x00000165 */ \
+ ADD_FILL /* 0x00000166 */ \
+ (ADD_FILL || CC_LoadExternal) /* 0x00000167 */ \
+ (ADD_FILL || CC_MakeCredential) /* 0x00000168 */ \
+ (ADD_FILL || CC_NV_ReadPublic) /* 0x00000169 */ \
+ (ADD_FILL || CC_PolicyAuthorize) /* 0x0000016A */ \
+ (ADD_FILL || CC_PolicyAuthValue) /* 0x0000016B */ \
+ (ADD_FILL || CC_PolicyCommandCode) /* 0x0000016C */ \
+ (ADD_FILL || CC_PolicyCounterTimer) /* 0x0000016D */ \
+ (ADD_FILL || CC_PolicyCpHash) /* 0x0000016E */ \
+ (ADD_FILL || CC_PolicyLocality) /* 0x0000016F */ \
+ (ADD_FILL || CC_PolicyNameHash) /* 0x00000170 */ \
+ (ADD_FILL || CC_PolicyOR) /* 0x00000171 */ \
+ (ADD_FILL || CC_PolicyTicket) /* 0x00000172 */ \
+ (ADD_FILL || CC_ReadPublic) /* 0x00000173 */ \
+ (ADD_FILL || CC_RSA_Encrypt) /* 0x00000174 */ \
+ ADD_FILL /* 0x00000175 */ \
+ (ADD_FILL || CC_StartAuthSession) /* 0x00000176 */ \
+ (ADD_FILL || CC_VerifySignature) /* 0x00000177 */ \
+ (ADD_FILL || CC_ECC_Parameters) /* 0x00000178 */ \
+ (ADD_FILL || CC_FirmwareRead) /* 0x00000179 */ \
+ (ADD_FILL || CC_GetCapability) /* 0x0000017A */ \
+ (ADD_FILL || CC_GetRandom) /* 0x0000017B */ \
+ (ADD_FILL || CC_GetTestResult) /* 0x0000017C */ \
+ (ADD_FILL || CC_Hash) /* 0x0000017D */ \
+ (ADD_FILL || CC_PCR_Read) /* 0x0000017E */ \
+ (ADD_FILL || CC_PolicyPCR) /* 0x0000017F */ \
+ (ADD_FILL || CC_PolicyRestart) /* 0x00000180 */ \
+ (ADD_FILL || CC_ReadClock) /* 0x00000181 */ \
+ (ADD_FILL || CC_PCR_Extend) /* 0x00000182 */ \
+ (ADD_FILL || CC_PCR_SetAuthValue) /* 0x00000183 */ \
+ (ADD_FILL || CC_NV_Certify) /* 0x00000184 */ \
+ (ADD_FILL || CC_EventSequenceComplete) /* 0x00000185 */ \
+ (ADD_FILL || CC_HashSequenceStart) /* 0x00000186 */ \
+ (ADD_FILL || CC_PolicyPhysicalPresence) /* 0x00000187 */ \
+ (ADD_FILL || CC_PolicyDuplicationSelect) /* 0x00000188 */ \
+ (ADD_FILL || CC_PolicyGetDigest) /* 0x00000189 */ \
+ (ADD_FILL || CC_TestParms) /* 0x0000018A */ \
+ (ADD_FILL || CC_Commit) /* 0x0000018B */ \
+ (ADD_FILL || CC_PolicyPassword) /* 0x0000018C */ \
+ (ADD_FILL || CC_ZGen_2Phase) /* 0x0000018D */ \
+ (ADD_FILL || CC_EC_Ephemeral) /* 0x0000018E */ \
+ (ADD_FILL || CC_PolicyNvWritten) /* 0x0000018F */ \
+ (ADD_FILL || CC_PolicyTemplate) /* 0x00000190 */ \
+ (ADD_FILL || CC_CreateLoaded) /* 0x00000191 */ \
+ (ADD_FILL || CC_PolicyAuthorizeNV) /* 0x00000192 */ \
+ (ADD_FILL || CC_EncryptDecrypt2) /* 0x00000193 */ \
+ (ADD_FILL || CC_AC_GetCapability) /* 0x00000194 */ \
+ (ADD_FILL || CC_AC_Send) /* 0x00000195 */ \
+ (ADD_FILL || CC_Policy_AC_SendSelect) /* 0x00000196 */ \
+ (ADD_FILL || CC_CertifyX509) /* 0x00000197 */ \
+ (ADD_FILL || CC_ACT_SetTimeout) /* 0x00000198 */ \
+ (ADD_FILL || CC_ECC_Encrypt) /* 0x00000199 */ \
+ (ADD_FILL || CC_ECC_Decrypt) /* 0x0000019A */ \
+ (ADD_FILL || CC_PolicyCapability) /* 0x0000019B */ \
+ (ADD_FILL || CC_PolicyParameters) /* 0x0000019C */ \
+ (ADD_FILL || CC_NV_DefineSpace2) /* 0x0000019D */ \
+ (ADD_FILL || CC_NV_ReadPublic2) /* 0x0000019E */ \
+ (ADD_FILL || CC_SetCapability) /* 0x0000019F */ \
)
#define VENDOR_COMMAND_ARRAY_SIZE (0 + CC_Vendor_TCG_Test)
#define COMMAND_COUNT (LIBRARY_COMMAND_ARRAY_SIZE + VENDOR_COMMAND_ARRAY_SIZE)
#if ALG_RSA
// Table "Defines for RSA Asymmetric Cipher Algorithm Constants" (TCG Algorithm Registry)
# define RSA_KEY_SIZES_BITS \
@ -259,114 +204,61 @@
#endif // ALG_RSA
// Table "Defines for AES Symmetric Cipher Algorithm Constants" (TCG Algorithm Registry)
#define AES_KEY_SIZES_BITS (128 * AES_128), (192 * AES_192), (256 * AES_256)
#define MAX_AES_KEY_BITS AES_MAX_KEY_SIZE_BITS
#define MAX_AES_KEY_BYTES ((AES_MAX_KEY_SIZE_BITS + 7) / 8)
#define AES_128_BLOCK_SIZE_BYTES (AES_128 * 16)
#define AES_192_BLOCK_SIZE_BYTES (AES_192 * 16)
#define AES_256_BLOCK_SIZE_BYTES (AES_256 * 16)
#define AES_BLOCK_SIZES \
AES_128_BLOCK_SIZE_BYTES, AES_192_BLOCK_SIZE_BYTES, \
AES_256_BLOCK_SIZE_BYTES
#if ALG_AES
# define AES_MAX_BLOCK_SIZE 16
#else
# define AES_MAX_BLOCK_SIZE 0
#endif
#define MAX_AES_BLOCK_SIZE_BYTES AES_MAX_BLOCK_SIZE
#if AES_256
# define AES_MAX_KEY_SIZE_BITS 256
#elif AES_192
# define AES_MAX_KEY_SIZE_BITS 192
#elif AES_128
# define AES_MAX_KEY_SIZE_BITS 128
#else
# define AES_MAX_KEY_SIZE_BITS 0
#endif
#define AES_KEY_SIZES_BITS (AES_128 * 128), (AES_192 * 192), (AES_256 * 256)
#define AES_MAX_KEY_SIZE_BITS \
MAX((AES_256 * 256), MAX((AES_192 * 192), (AES_128 * 128)))
#define MAX_AES_KEY_BITS AES_MAX_KEY_SIZE_BITS
#define MAX_AES_KEY_BYTES BITS_TO_BYTES(MAX_AES_KEY_BITS)
#define AES_BLOCK_SIZES (AES_128 * 128 / 8), (AES_192 * 128 / 8), (AES_256 * 128 / 8)
#define MAX_AES_BLOCK_SIZE_BYTES \
MAX((AES_256 * 128 / 8), MAX((AES_192 * 128 / 8), (AES_128 * 128 / 8)))
#define AES_MAX_BLOCK_SIZE MAX_AES_BLOCK_SIZE_BYTES
// Table "Defines for SM4 Symmetric Cipher Algorithm Constants" (TCG Algorithm Registry)
#define SM4_KEY_SIZES_BITS (SM4_128 * 128)
#if SM4_128
# define SM4_MAX_KEY_SIZE_BITS 128
#else
# define SM4_MAX_KEY_SIZE_BITS 0
#endif
#define SM4_MAX_KEY_SIZE_BITS (SM4_128 * 128)
#define MAX_SM4_KEY_BITS SM4_MAX_KEY_SIZE_BITS
#define MAX_SM4_KEY_BYTES BITS_TO_BYTES(SM4_MAX_KEY_SIZE_BITS)
#define SM4_128_BLOCK_SIZE_BYTES (SM4_128 * 16)
#define SM4_BLOCK_SIZES SM4_128_BLOCK_SIZE_BYTES
#if ALG_SM4
# define SM4_MAX_BLOCK_SIZE 16
#else
# define SM4_MAX_BLOCK_SIZE 0
#endif
#define MAX_SM4_BLOCK_SIZE_BYTES SM4_MAX_BLOCK_SIZE
#define MAX_SM4_KEY_BYTES BITS_TO_BYTES(MAX_SM4_KEY_BITS)
#define SM4_BLOCK_SIZES (SM4_128 * 128 / 8)
#define MAX_SM4_BLOCK_SIZE_BYTES (SM4_128 * 128 / 8)
#define SM4_MAX_BLOCK_SIZE MAX_SM4_BLOCK_SIZE_BYTES
// Table "Defines for CAMELLIA Symmetric Cipher Algorithm Constants" (TCG Algorithm Registry)
#define CAMELLIA_KEY_SIZES_BITS \
(CAMELLIA_128 * 128), (CAMELLIA_192 * 192), (CAMELLIA_256 * 256)
#if CAMELLIA_256
# define CAMELLIA_MAX_KEY_SIZE_BITS 256
#elif CAMELLIA_192
# define CAMELLIA_MAX_KEY_SIZE_BITS 192
#elif CAMELLIA_128
# define CAMELLIA_MAX_KEY_SIZE_BITS 128
#else
# define CAMELLIA_MAX_KEY_SIZE_BITS 0
#endif
#define CAMELLIA_MAX_KEY_SIZE_BITS \
MAX((CAMELLIA_256 * 256), MAX((CAMELLIA_192 * 192), (CAMELLIA_128 * 128)))
#define MAX_CAMELLIA_KEY_BITS CAMELLIA_MAX_KEY_SIZE_BITS
#define MAX_CAMELLIA_KEY_BYTES ((CAMELLIA_MAX_KEY_SIZE_BITS + 7) / 8)
#define CAMELLIA_128_BLOCK_SIZE_BYTES (CAMELLIA_128 * 16)
#define CAMELLIA_192_BLOCK_SIZE_BYTES (CAMELLIA_192 * 16)
#define CAMELLIA_256_BLOCK_SIZE_BYTES (CAMELLIA_256 * 16)
#define MAX_CAMELLIA_KEY_BYTES BITS_TO_BYTES(MAX_CAMELLIA_KEY_BITS)
#define CAMELLIA_BLOCK_SIZES \
CAMELLIA_128_BLOCK_SIZE_BYTES, CAMELLIA_192_BLOCK_SIZE_BYTES, \
CAMELLIA_256_BLOCK_SIZE_BYTES
#if ALG_CAMELLIA
# define CAMELLIA_MAX_BLOCK_SIZE 16
#else
# define CAMELLIA_MAX_BLOCK_SIZE 0
#endif
#define MAX_CAMELLIA_BLOCK_SIZE_BYTES CAMELLIA_MAX_BLOCK_SIZE
(CAMELLIA_128 * 128 / 8), (CAMELLIA_192 * 128 / 8), (CAMELLIA_256 * 128 / 8)
#define MAX_CAMELLIA_BLOCK_SIZE_BYTES \
MAX((CAMELLIA_256 * 128 / 8), \
MAX((CAMELLIA_192 * 128 / 8), (CAMELLIA_128 * 128 / 8)))
#define CAMELLIA_MAX_BLOCK_SIZE MAX_CAMELLIA_BLOCK_SIZE_BYTES
// libtpms added begin
#define TDES_KEY_SIZES_BITS (128 * TDES_128), (192 * TDES_192)
#if TDES_192
# define TDES_MAX_KEY_SIZE_BITS 192
#elif TDES_128
# define TDES_MAX_KEY_SIZE_BITS 128
#else
# define TDES_MAX_KEY_SIZE_BITS 0
#endif
#define MAX_TDES_KEY_BITS TDES_MAX_KEY_SIZE_BITS
#define MAX_TDES_KEY_BYTES ((TDES_MAX_KEY_SIZE_BITS + 7) / 8)
#define TDES_128_BLOCK_SIZE_BYTES (TDES_128 * 8)
#define TDES_192_BLOCK_SIZE_BYTES (TDES_192 * 8)
#define TDES_BLOCK_SIZES \
TDES_128_BLOCK_SIZE_BYTES, TDES_192_BLOCK_SIZE_BYTES
#if ALG_TDES
# define TDES_MAX_BLOCK_SIZE 8
#else
# define TDES_MAX_BLOCK_SIZE 0
#endif
#define MAX_TDES_BLOCK_SIZE_BYTES TDES_MAX_BLOCK_SIZE
#define TDES_KEY_SIZES_BITS (TDES_128 * 128), (TDES_192 * 192)
#define TDES_MAX_KEY_SIZE_BITS \
MAX((TDES_192 * 192), (TDES_128 * 128))
#define MAX_TDES_KEY_BITS TDES_MAX_KEY_SIZE_BITS
#define MAX_TDES_KEY_BYTES BITS_TO_BYTES(MAX_TDES_KEY_BITS)
#define TDES_BLOCK_SIZES (TDES_128 * 8), (TDES_192 * 8)
#define MAX_TDES_BLOCK_SIZE_BYTES MAX((TDES_192 * 8), (TDES_128 * 8))
#define TDES_MAX_BLOCK_SIZE MAX_TDES_BLOCK_SIZE_BYTES
// libtpms added end
// Derived Symmetric Values
#define SYM_COUNT ALG_AES + ALG_SM4 + ALG_CAMELLIA + ALG_TDES // libtpms changed begin
#define MAX_SYM_BLOCK_SIZE \
(MAX(AES_MAX_BLOCK_SIZE, MAX(CAMELLIA_MAX_BLOCK_SIZE, \
MAX(SM4_MAX_BLOCK_SIZE, MAX(TDES_MAX_BLOCK_SIZE, \
0)))))
#define MAX_SYM_KEY_BITS \
(MAX(AES_MAX_KEY_SIZE_BITS, MAX(CAMELLIA_MAX_KEY_SIZE_BITS, \
MAX(SM4_MAX_KEY_SIZE_BITS, MAX(TDES_MAX_KEY_SIZE_BITS, \
0)))))
MAX(TDES_MAX_BLOCK_SIZE, \
MAX(CAMELLIA_MAX_BLOCK_SIZE, MAX(SM4_MAX_BLOCK_SIZE, AES_MAX_BLOCK_SIZE)))
#define MAX_SYM_KEY_BITS \
MAX(CAMELLIA_MAX_KEY_SIZE_BITS, MAX(SM4_MAX_KEY_SIZE_BITS, AES_MAX_KEY_SIZE_BITS))
#define MAX_SYM_KEY_BYTES ((MAX_SYM_KEY_BITS + 7) / 8)
#if MAX_SYM_KEY_BITS == 0 || MAX_SYM_BLOCK_SIZE == 0
# error Bad size for MAX_SYM_KEY_BITS or MAX_SYM_BLOCK
#endif
#endif // libtpms changed end
// Table "Defines for SHA1 Hash Values" (TCG Algorithm Registry)
#define SHA1_DIGEST_SIZE 20

View File

@ -118,6 +118,8 @@ typedef UINT16 TPM_ALG_ID;
#define TPM_ALG_SHA384 (TPM_ALG_ID)(ALG_SHA384_VALUE)
#define ALG_SHA512_VALUE 0x000D
#define TPM_ALG_SHA512 (TPM_ALG_ID)(ALG_SHA512_VALUE)
#define ALG_SHA256_192_VALUE 0x000E
#define TPM_ALG_SHA256_192 (TPM_ALG_ID)(ALG_SHA256_192_VALUE)
#define ALG_NULL_VALUE 0x0010
#define TPM_ALG_NULL (TPM_ALG_ID)(ALG_NULL_VALUE)
#define ALG_SM3_256_VALUE 0x0012
@ -162,6 +164,16 @@ typedef UINT16 TPM_ALG_ID;
#define TPM_ALG_SHA3_384 (TPM_ALG_ID)(ALG_SHA3_384_VALUE)
#define ALG_SHA3_512_VALUE 0x0029
#define TPM_ALG_SHA3_512 (TPM_ALG_ID)(ALG_SHA3_512_VALUE)
#define ALG_SHAKE128_VALUE 0x002A
#define TPM_ALG_SHAKE128 (TPM_ALG_ID)(ALG_SHAKE128_VALUE)
#define ALG_SHAKE256_VALUE 0x002B
#define TPM_ALG_SHAKE256 (TPM_ALG_ID)(ALG_SHAKE256_VALUE)
#define ALG_SHAKE256_192_VALUE 0x002C
#define TPM_ALG_SHAKE256_192 (TPM_ALG_ID)(ALG_SHAKE256_192_VALUE)
#define ALG_SHAKE256_256_VALUE 0x002D
#define TPM_ALG_SHAKE256_256 (TPM_ALG_ID)(ALG_SHAKE256_256_VALUE)
#define ALG_SHAKE256_512_VALUE 0x002E
#define TPM_ALG_SHAKE256_512 (TPM_ALG_ID)(ALG_SHAKE256_512_VALUE)
#define ALG_CMAC_VALUE 0x003F
#define TPM_ALG_CMAC (TPM_ALG_ID)(ALG_CMAC_VALUE)
#define ALG_CTR_VALUE 0x0040
@ -174,10 +186,28 @@ typedef UINT16 TPM_ALG_ID;
#define TPM_ALG_CFB (TPM_ALG_ID)(ALG_CFB_VALUE)
#define ALG_ECB_VALUE 0x0044
#define TPM_ALG_ECB (TPM_ALG_ID)(ALG_ECB_VALUE)
#define ALG_CCM_VALUE 0x0050
#define TPM_ALG_CCM (TPM_ALG_ID)(ALG_CCM_VALUE)
#define ALG_GCM_VALUE 0x0051
#define TPM_ALG_GCM (TPM_ALG_ID)(ALG_GCM_VALUE)
#define ALG_KW_VALUE 0x0052
#define TPM_ALG_KW (TPM_ALG_ID)(ALG_KW_VALUE)
#define ALG_KWP_VALUE 0x0053
#define TPM_ALG_KWP (TPM_ALG_ID)(ALG_KWP_VALUE)
#define ALG_EAX_VALUE 0x0054
#define TPM_ALG_EAX (TPM_ALG_ID)(ALG_EAX_VALUE)
#define ALG_EDDSA_VALUE 0x0060
#define TPM_ALG_EDDSA (TPM_ALG_ID)(ALG_EDDSA_VALUE)
#define ALG_EDDSA_PH_VALUE 0x0061
#define TPM_ALG_EDDSA_PH (TPM_ALG_ID)(ALG_EDDSA_PH_VALUE)
#define ALG_LMS_VALUE 0x0070
#define TPM_ALG_LMS (TPM_ALG_ID)(ALG_LMS_VALUE)
#define ALG_XMSS_VALUE 0x0071
#define TPM_ALG_XMSS (TPM_ALG_ID)(ALG_XMSS_VALUE)
// Values derived from Table "Definition of TPM_ALG_ID Constants" (Part 2: Structures)
#define ALG_FIRST_VALUE 0x0001
#define TPM_ALG_FIRST (TPM_ALG_ID)(ALG_FIRST_VALUE)
#define ALG_LAST_VALUE 0x0044
#define ALG_LAST_VALUE 0x0071
#define TPM_ALG_LAST (TPM_ALG_ID)(ALG_LAST_VALUE)
// Table "Definition of TPM_ECC_CURVE Constants" (Part 2: Structures)
@ -193,6 +223,11 @@ typedef UINT16 TPM_ECC_CURVE;
#define TPM_ECC_BN_P256 (TPM_ECC_CURVE)(0x0010)
#define TPM_ECC_BN_P638 (TPM_ECC_CURVE)(0x0011)
#define TPM_ECC_SM2_P256 (TPM_ECC_CURVE)(0x0020)
#define TPM_ECC_BP_P256_R1 (TPM_ECC_CURVE)(0x0030)
#define TPM_ECC_BP_P384_R1 (TPM_ECC_CURVE)(0x0031)
#define TPM_ECC_BP_P512_R1 (TPM_ECC_CURVE)(0x0032)
#define TPM_ECC_CURVE_25519 (TPM_ECC_CURVE)(0x0040)
#define TPM_ECC_CURVE_448 (TPM_ECC_CURVE)(0x0041)
// Table "Definition of TPM_CC Constants" (Part 2: Structures)
typedef UINT32 TPM_CC;
@ -329,6 +364,154 @@ typedef UINT32 TPM_CC;
#define CC_VEND (TPM_CC)(0x20000000)
#define TPM_CC_Vendor_TCG_Test (TPM_CC)(0x20000000)
// This large macro is needed to determine the maximum commandIndex. This value
// is needed in order to size typdef'ed structures. As a consequence, the
// computation cannot be deferred until the command array is instanced and
// so that the number of entires can be determine by
// sizeof(array)/sizeof(entry).
//
// Size the array of library commands based on whether or not the array is
// packed (only defined commands) or dense
// (having entries for unimplemented commands). This overly large macro
// computes the size of the array and sets some global constants
#if COMPRESSED_LISTS
# define ADD_FILL 0
#else
# define ADD_FILL 1
#endif
#define LIBRARY_COMMAND_ARRAY_SIZE \
(0 + (ADD_FILL || CC_NV_UndefineSpaceSpecial) /* 0x0000011F */ \
+ (ADD_FILL || CC_EvictControl) /* 0x00000120 */ \
+ (ADD_FILL || CC_HierarchyControl) /* 0x00000121 */ \
+ (ADD_FILL || CC_NV_UndefineSpace) /* 0x00000122 */ \
+ ADD_FILL /* 0x00000123 */ \
+ (ADD_FILL || CC_ChangeEPS) /* 0x00000124 */ \
+ (ADD_FILL || CC_ChangePPS) /* 0x00000125 */ \
+ (ADD_FILL || CC_Clear) /* 0x00000126 */ \
+ (ADD_FILL || CC_ClearControl) /* 0x00000127 */ \
+ (ADD_FILL || CC_ClockSet) /* 0x00000128 */ \
+ (ADD_FILL || CC_HierarchyChangeAuth) /* 0x00000129 */ \
+ (ADD_FILL || CC_NV_DefineSpace) /* 0x0000012A */ \
+ (ADD_FILL || CC_PCR_Allocate) /* 0x0000012B */ \
+ (ADD_FILL || CC_PCR_SetAuthPolicy) /* 0x0000012C */ \
+ (ADD_FILL || CC_PP_Commands) /* 0x0000012D */ \
+ (ADD_FILL || CC_SetPrimaryPolicy) /* 0x0000012E */ \
+ (ADD_FILL || CC_FieldUpgradeStart) /* 0x0000012F */ \
+ (ADD_FILL || CC_ClockRateAdjust) /* 0x00000130 */ \
+ (ADD_FILL || CC_CreatePrimary) /* 0x00000131 */ \
+ (ADD_FILL || CC_NV_GlobalWriteLock) /* 0x00000132 */ \
+ (ADD_FILL || CC_GetCommandAuditDigest) /* 0x00000133 */ \
+ (ADD_FILL || CC_NV_Increment) /* 0x00000134 */ \
+ (ADD_FILL || CC_NV_SetBits) /* 0x00000135 */ \
+ (ADD_FILL || CC_NV_Extend) /* 0x00000136 */ \
+ (ADD_FILL || CC_NV_Write) /* 0x00000137 */ \
+ (ADD_FILL || CC_NV_WriteLock) /* 0x00000138 */ \
+ (ADD_FILL || CC_DictionaryAttackLockReset) /* 0x00000139 */ \
+ (ADD_FILL || CC_DictionaryAttackParameters) /* 0x0000013A */ \
+ (ADD_FILL || CC_NV_ChangeAuth) /* 0x0000013B */ \
+ (ADD_FILL || CC_PCR_Event) /* 0x0000013C */ \
+ (ADD_FILL || CC_PCR_Reset) /* 0x0000013D */ \
+ (ADD_FILL || CC_SequenceComplete) /* 0x0000013E */ \
+ (ADD_FILL || CC_SetAlgorithmSet) /* 0x0000013F */ \
+ (ADD_FILL || CC_SetCommandCodeAuditStatus) /* 0x00000140 */ \
+ (ADD_FILL || CC_FieldUpgradeData) /* 0x00000141 */ \
+ (ADD_FILL || CC_IncrementalSelfTest) /* 0x00000142 */ \
+ (ADD_FILL || CC_SelfTest) /* 0x00000143 */ \
+ (ADD_FILL || CC_Startup) /* 0x00000144 */ \
+ (ADD_FILL || CC_Shutdown) /* 0x00000145 */ \
+ (ADD_FILL || CC_StirRandom) /* 0x00000146 */ \
+ (ADD_FILL || CC_ActivateCredential) /* 0x00000147 */ \
+ (ADD_FILL || CC_Certify) /* 0x00000148 */ \
+ (ADD_FILL || CC_PolicyNV) /* 0x00000149 */ \
+ (ADD_FILL || CC_CertifyCreation) /* 0x0000014A */ \
+ (ADD_FILL || CC_Duplicate) /* 0x0000014B */ \
+ (ADD_FILL || CC_GetTime) /* 0x0000014C */ \
+ (ADD_FILL || CC_GetSessionAuditDigest) /* 0x0000014D */ \
+ (ADD_FILL || CC_NV_Read) /* 0x0000014E */ \
+ (ADD_FILL || CC_NV_ReadLock) /* 0x0000014F */ \
+ (ADD_FILL || CC_ObjectChangeAuth) /* 0x00000150 */ \
+ (ADD_FILL || CC_PolicySecret) /* 0x00000151 */ \
+ (ADD_FILL || CC_Rewrap) /* 0x00000152 */ \
+ (ADD_FILL || CC_Create) /* 0x00000153 */ \
+ (ADD_FILL || CC_ECDH_ZGen) /* 0x00000154 */ \
+ (ADD_FILL || (CC_HMAC || CC_MAC)) /* 0x00000155 */ \
+ (ADD_FILL || CC_Import) /* 0x00000156 */ \
+ (ADD_FILL || CC_Load) /* 0x00000157 */ \
+ (ADD_FILL || CC_Quote) /* 0x00000158 */ \
+ (ADD_FILL || CC_RSA_Decrypt) /* 0x00000159 */ \
+ ADD_FILL /* 0x0000015A */ \
+ (ADD_FILL || (CC_HMAC_Start || CC_MAC_Start)) /* 0x0000015B */ \
+ (ADD_FILL || CC_SequenceUpdate) /* 0x0000015C */ \
+ (ADD_FILL || CC_Sign) /* 0x0000015D */ \
+ (ADD_FILL || CC_Unseal) /* 0x0000015E */ \
+ ADD_FILL /* 0x0000015F */ \
+ (ADD_FILL || CC_PolicySigned) /* 0x00000160 */ \
+ (ADD_FILL || CC_ContextLoad) /* 0x00000161 */ \
+ (ADD_FILL || CC_ContextSave) /* 0x00000162 */ \
+ (ADD_FILL || CC_ECDH_KeyGen) /* 0x00000163 */ \
+ (ADD_FILL || CC_EncryptDecrypt) /* 0x00000164 */ \
+ (ADD_FILL || CC_FlushContext) /* 0x00000165 */ \
+ ADD_FILL /* 0x00000166 */ \
+ (ADD_FILL || CC_LoadExternal) /* 0x00000167 */ \
+ (ADD_FILL || CC_MakeCredential) /* 0x00000168 */ \
+ (ADD_FILL || CC_NV_ReadPublic) /* 0x00000169 */ \
+ (ADD_FILL || CC_PolicyAuthorize) /* 0x0000016A */ \
+ (ADD_FILL || CC_PolicyAuthValue) /* 0x0000016B */ \
+ (ADD_FILL || CC_PolicyCommandCode) /* 0x0000016C */ \
+ (ADD_FILL || CC_PolicyCounterTimer) /* 0x0000016D */ \
+ (ADD_FILL || CC_PolicyCpHash) /* 0x0000016E */ \
+ (ADD_FILL || CC_PolicyLocality) /* 0x0000016F */ \
+ (ADD_FILL || CC_PolicyNameHash) /* 0x00000170 */ \
+ (ADD_FILL || CC_PolicyOR) /* 0x00000171 */ \
+ (ADD_FILL || CC_PolicyTicket) /* 0x00000172 */ \
+ (ADD_FILL || CC_ReadPublic) /* 0x00000173 */ \
+ (ADD_FILL || CC_RSA_Encrypt) /* 0x00000174 */ \
+ ADD_FILL /* 0x00000175 */ \
+ (ADD_FILL || CC_StartAuthSession) /* 0x00000176 */ \
+ (ADD_FILL || CC_VerifySignature) /* 0x00000177 */ \
+ (ADD_FILL || CC_ECC_Parameters) /* 0x00000178 */ \
+ (ADD_FILL || CC_FirmwareRead) /* 0x00000179 */ \
+ (ADD_FILL || CC_GetCapability) /* 0x0000017A */ \
+ (ADD_FILL || CC_GetRandom) /* 0x0000017B */ \
+ (ADD_FILL || CC_GetTestResult) /* 0x0000017C */ \
+ (ADD_FILL || CC_Hash) /* 0x0000017D */ \
+ (ADD_FILL || CC_PCR_Read) /* 0x0000017E */ \
+ (ADD_FILL || CC_PolicyPCR) /* 0x0000017F */ \
+ (ADD_FILL || CC_PolicyRestart) /* 0x00000180 */ \
+ (ADD_FILL || CC_ReadClock) /* 0x00000181 */ \
+ (ADD_FILL || CC_PCR_Extend) /* 0x00000182 */ \
+ (ADD_FILL || CC_PCR_SetAuthValue) /* 0x00000183 */ \
+ (ADD_FILL || CC_NV_Certify) /* 0x00000184 */ \
+ (ADD_FILL || CC_EventSequenceComplete) /* 0x00000185 */ \
+ (ADD_FILL || CC_HashSequenceStart) /* 0x00000186 */ \
+ (ADD_FILL || CC_PolicyPhysicalPresence) /* 0x00000187 */ \
+ (ADD_FILL || CC_PolicyDuplicationSelect) /* 0x00000188 */ \
+ (ADD_FILL || CC_PolicyGetDigest) /* 0x00000189 */ \
+ (ADD_FILL || CC_TestParms) /* 0x0000018A */ \
+ (ADD_FILL || CC_Commit) /* 0x0000018B */ \
+ (ADD_FILL || CC_PolicyPassword) /* 0x0000018C */ \
+ (ADD_FILL || CC_ZGen_2Phase) /* 0x0000018D */ \
+ (ADD_FILL || CC_EC_Ephemeral) /* 0x0000018E */ \
+ (ADD_FILL || CC_PolicyNvWritten) /* 0x0000018F */ \
+ (ADD_FILL || CC_PolicyTemplate) /* 0x00000190 */ \
+ (ADD_FILL || CC_CreateLoaded) /* 0x00000191 */ \
+ (ADD_FILL || CC_PolicyAuthorizeNV) /* 0x00000192 */ \
+ (ADD_FILL || CC_EncryptDecrypt2) /* 0x00000193 */ \
+ (ADD_FILL || CC_AC_GetCapability) /* 0x00000194 */ \
+ (ADD_FILL || CC_AC_Send) /* 0x00000195 */ \
+ (ADD_FILL || CC_Policy_AC_SendSelect) /* 0x00000196 */ \
+ (ADD_FILL || CC_CertifyX509) /* 0x00000197 */ \
+ (ADD_FILL || CC_ACT_SetTimeout) /* 0x00000198 */ \
+ (ADD_FILL || CC_ECC_Encrypt) /* 0x00000199 */ \
+ (ADD_FILL || CC_ECC_Decrypt) /* 0x0000019A */ \
+ (ADD_FILL || CC_PolicyCapability) /* 0x0000019B */ \
+ (ADD_FILL || CC_PolicyParameters) /* 0x0000019C */ \
+ (ADD_FILL || CC_NV_DefineSpace2) /* 0x0000019D */ \
+ (ADD_FILL || CC_NV_ReadPublic2) /* 0x0000019E */ \
+ (ADD_FILL || CC_SetCapability) /* 0x0000019F */ \
)
#define VENDOR_COMMAND_ARRAY_SIZE (CC_Vendor_TCG_Test)
#define COMMAND_COUNT (LIBRARY_COMMAND_ARRAY_SIZE + VENDOR_COMMAND_ARRAY_SIZE)
// Table "Definition of TPM_RC Constants" (Part 2: Structures)
typedef UINT32 TPM_RC;
@ -753,8 +936,8 @@ typedef TPM_HANDLE TPM_HC;
#define HR_PCR (TPM_HC)((TPM_HT_PCR << HR_SHIFT))
#define HR_HMAC_SESSION (TPM_HC)((TPM_HT_HMAC_SESSION << HR_SHIFT))
#define HR_POLICY_SESSION (TPM_HC)((TPM_HT_POLICY_SESSION << HR_SHIFT))
#define HR_TRANSIENT (TPM_HC)((TPM_HT_TRANSIENT << HR_SHIFT))
#define HR_PERSISTENT (TPM_HC)((TPM_HT_PERSISTENT << HR_SHIFT))
#define HR_TRANSIENT (TPM_HC)(((UINT32)TPM_HT_TRANSIENT << HR_SHIFT)) // libtpms changed: UBSAN
#define HR_PERSISTENT (TPM_HC)(((UINT32)TPM_HT_PERSISTENT << HR_SHIFT)) // libtpms changed: UBSAN
#define HR_NV_INDEX (TPM_HC)((TPM_HT_NV_INDEX << HR_SHIFT))
#define HR_EXTERNAL_NV (TPM_HC)((TPM_HT_EXTERNAL_NV << HR_SHIFT))
#define HR_PERMANENT_NV (TPM_HC)((TPM_HT_PERMANENT_NV << HR_SHIFT))
@ -793,7 +976,7 @@ typedef TPM_HANDLE TPM_HC;
#define HR_NV_AC (TPM_HC)(((TPM_HT_NV_INDEX << HR_SHIFT) + 0xD00000))
#define NV_AC_FIRST (TPM_HC)((HR_NV_AC + 0))
#define NV_AC_LAST (TPM_HC)((HR_NV_AC + 0x0000FFFF))
#define HR_AC (TPM_HC)((TPM_HT_AC << HR_SHIFT))
#define HR_AC (TPM_HC)(((UINT32)TPM_HT_AC << HR_SHIFT)) // libtpms changed: UBSAN
#define AC_FIRST (TPM_HC)((HR_AC + 0))
#define AC_LAST (TPM_HC)((HR_AC + 0x0000FFFF))
@ -1131,13 +1314,13 @@ typedef UINT32 TPMA_STARTUP_CLEAR;
# define TPMA_STARTUP_CLEAR_shEnable (TPMA_STARTUP_CLEAR)(1 << 1)
# define TPMA_STARTUP_CLEAR_ehEnable (TPMA_STARTUP_CLEAR)(1 << 2)
# define TPMA_STARTUP_CLEAR_phEnableNV (TPMA_STARTUP_CLEAR)(1 << 3)
# define TPMA_STARTUP_CLEAR_orderly (TPMA_STARTUP_CLEAR)(1 << 31)
# define TPMA_STARTUP_CLEAR_orderly (TPMA_STARTUP_CLEAR)((UINT32)1 << 31) // libtpms changed: UBSAN
// This is the initializer for a TPMA_STARTUP_CLEAR bit array.
# define TPMA_STARTUP_CLEAR_INITIALIZER( \
phenable, shenable, ehenable, phenablenv, bits_at_4, orderly) \
(TPMA_STARTUP_CLEAR)((phenable << 0) + (shenable << 1) + (ehenable << 2) \
+ (phenablenv << 3) + (orderly << 31))
+ (phenablenv << 3) + ((UINT32)orderly << 31)) // libtpms chanegd: UBSAN
#endif // USE_BIT_FIELD_STRUCTURES
@ -1335,7 +1518,7 @@ typedef UINT32 TPMA_X509_KEY_USAGE;
# define TPMA_X509_KEY_USAGE_dataEncipherment (TPMA_X509_KEY_USAGE)(1 << 28)
# define TPMA_X509_KEY_USAGE_keyEncipherment (TPMA_X509_KEY_USAGE)(1 << 29)
# define TPMA_X509_KEY_USAGE_nonrepudiation (TPMA_X509_KEY_USAGE)(1 << 30)
# define TPMA_X509_KEY_USAGE_digitalSignature (TPMA_X509_KEY_USAGE)(1 << 31)
# define TPMA_X509_KEY_USAGE_digitalSignature (TPMA_X509_KEY_USAGE)((UINT32)1 << 31) // libtpms changed: UBSAN
// This is the initializer for a TPMA_X509_KEY_USAGE bit array.
# define TPMA_X509_KEY_USAGE_INITIALIZER(bits_at_0, \
@ -1352,7 +1535,7 @@ typedef UINT32 TPMA_X509_KEY_USAGE;
+ (crlsign << 25) + (keycertsign << 26) \
+ (keyagreement << 27) + (dataencipherment << 28) \
+ (keyencipherment << 29) + (nonrepudiation << 30) \
+ (digitalsignature << 31))
+ ((UINT32)digitalsignature << 31)) // libtpms changed: UBSAN
#endif // USE_BIT_FIELD_STRUCTURES
@ -1449,6 +1632,9 @@ typedef union
#if ALG_SHA256
BYTE sha256[SHA256_DIGEST_SIZE];
#endif // ALG_SHA256
#if ALG_SHA256_192
BYTE sha256_192[SHA256_192_DIGEST_SIZE];
#endif // ALG_SHA256_192
#if ALG_SHA3_256
BYTE sha3_256[SHA3_256_DIGEST_SIZE];
#endif // ALG_SHA3_256
@ -1464,6 +1650,15 @@ typedef union
#if ALG_SHA512
BYTE sha512[SHA512_DIGEST_SIZE];
#endif // ALG_SHA512
#if ALG_SHAKE256_192
BYTE shake256_192[SHAKE256_192_DIGEST_SIZE];
#endif // ALG_SHAKE256_192
#if ALG_SHAKE256_256
BYTE shake256_256[SHAKE256_256_DIGEST_SIZE];
#endif // ALG_SHAKE256_256
#if ALG_SHAKE256_512
BYTE shake256_512[SHAKE256_512_DIGEST_SIZE];
#endif // ALG_SHAKE256_512
#if ALG_SM3_256
BYTE sm3_256[SM3_256_DIGEST_SIZE];
#endif // ALG_SM3_256
@ -2071,6 +2266,10 @@ typedef TPMS_SCHEME_HASH TPMS_SIG_SCHEME_ECDSA;
#define TYPE_OF_TPMS_SIG_SCHEME_ECDSA TPMS_SCHEME_HASH
typedef TPMS_SCHEME_HASH TPMS_SIG_SCHEME_ECSCHNORR;
#define TYPE_OF_TPMS_SIG_SCHEME_ECSCHNORR TPMS_SCHEME_HASH
typedef TPMS_SCHEME_HASH TPMS_SIG_SCHEME_EDDSA;
#define TYPE_OF_TPMS_SIG_SCHEME_EDDSA TPMS_SCHEME_HASH
typedef TPMS_SCHEME_HASH TPMS_SIG_SCHEME_EDDSA_PH;
#define TYPE_OF_TPMS_SIG_SCHEME_EDDSA_PH TPMS_SCHEME_HASH
typedef TPMS_SCHEME_HASH TPMS_SIG_SCHEME_SM2;
#define TYPE_OF_TPMS_SIG_SCHEME_SM2 TPMS_SCHEME_HASH
@ -2097,6 +2296,18 @@ typedef union
#if ALG_ECSCHNORR
TPMS_SIG_SCHEME_ECSCHNORR ecschnorr;
#endif // ALG_ECSCHNORR
#if ALG_EDDSA
TPMS_SIG_SCHEME_EDDSA eddsa;
#endif // ALG_EDDSA
#if ALG_EDDSA_PH
TPMS_SIG_SCHEME_EDDSA_PH eddsa_ph;
#endif // ALG_EDDSA_PH
#if ALG_LMS
TPMS_SIG_SCHEME_LMS lms;
#endif // ALG_LMS
#if ALG_XMSS
TPMS_SIG_SCHEME_XMSS xmss;
#endif // ALG_XMSS
TPMS_SCHEME_HASH any;
} TPMU_SIG_SCHEME;
@ -2187,6 +2398,18 @@ typedef union
#if ALG_ECMQV
TPMS_KEY_SCHEME_ECMQV ecmqv;
#endif // ALG_ECMQV
#if ALG_EDDSA
TPMS_SIG_SCHEME_EDDSA eddsa;
#endif // ALG_EDDSA
#if ALG_EDDSA_PH
TPMS_SIG_SCHEME_EDDSA_PH eddsa_ph;
#endif // ALG_EDDSA_PH
#if ALG_LMS
TPMS_SIG_SCHEME_LMS lms;
#endif // ALG_LMS
#if ALG_XMSS
TPMS_SIG_SCHEME_XMSS xmss;
#endif // ALG_XMSS
} TPMU_ASYM_SCHEME;
typedef struct
@ -2301,6 +2524,10 @@ typedef TPMS_SIGNATURE_ECC TPMS_SIGNATURE_ECDSA;
#define TYPE_OF_TPMS_SIGNATURE_ECDSA TPMS_SIGNATURE_ECC
typedef TPMS_SIGNATURE_ECC TPMS_SIGNATURE_ECSCHNORR;
#define TYPE_OF_TPMS_SIGNATURE_ECSCHNORR TPMS_SIGNATURE_ECC
typedef TPMS_SIGNATURE_ECC TPMS_SIGNATURE_EDDSA;
#define TYPE_OF_TPMS_SIGNATURE_EDDSA TPMS_SIGNATURE_ECC
typedef TPMS_SIGNATURE_ECC TPMS_SIGNATURE_EDDSA_PH;
#define TYPE_OF_TPMS_SIGNATURE_EDDSA_PH TPMS_SIGNATURE_ECC
typedef TPMS_SIGNATURE_ECC TPMS_SIGNATURE_SM2;
#define TYPE_OF_TPMS_SIGNATURE_SM2 TPMS_SIGNATURE_ECC
@ -2327,6 +2554,18 @@ typedef union
#if ALG_ECSCHNORR
TPMS_SIGNATURE_ECSCHNORR ecschnorr;
#endif // ALG_ECSCHNORR
#if ALG_EDDSA
TPMS_SIGNATURE_EDDSA eddsa;
#endif // ALG_EDDSA
#if ALG_EDDSA_PH
TPMS_SIGNATURE_EDDSA_PH eddsa_ph;
#endif // ALG_EDDSA_PH
#if ALG_LMS
TPMS_SIGNATURE_LMS lms;
#endif // ALG_LMS
#if ALG_XMSS
TPMS_SIGNATURE_XMSS xmss;
#endif // ALG_XMSS
TPMS_SCHEME_HASH any;
} TPMU_SIGNATURE;
@ -2559,7 +2798,7 @@ typedef struct
typedef UINT32 TPM_NV_INDEX;
# define TPM_NV_INDEX_index (TPM_NV_INDEX)(0xFFFFFF << 0)
# define TPM_NV_INDEX_index_SHIFT 0
# define TPM_NV_INDEX_RH_NV (TPM_NV_INDEX)(0xFF << 24)
# define TPM_NV_INDEX_RH_NV (TPM_NV_INDEX)((UINT32)0xFF << 24) // libtpms changed: UBSAN
# define TPM_NV_INDEX_RH_NV_SHIFT 24
// This is the initializer for a TPM_NV_INDEX bit array.
@ -2681,7 +2920,7 @@ typedef UINT32 TPMA_NV;
# define TPMA_NV_READLOCKED (TPMA_NV)(1 << 28)
# define TPMA_NV_WRITTEN (TPMA_NV)(1 << 29)
# define TPMA_NV_PLATFORMCREATE (TPMA_NV)(1 << 30)
# define TPMA_NV_READ_STCLEAR (TPMA_NV)(1 << 31)
# define TPMA_NV_READ_STCLEAR (TPMA_NV)((UINT32)1 << 31) // libtpms changed: UBSAN
#define TPMA_NV_RESERVED (0x00000300 | 0x01f00000) // libtpms added
// This is the initializer for a TPMA_NV bit array.
@ -2716,7 +2955,7 @@ typedef UINT32 TPMA_NV;
+ (ownerread << 17) + (authread << 18) + (policyread << 19) \
+ (no_da << 25) + (orderly << 26) + (clear_stclear << 27) \
+ (readlocked << 28) + (written << 29) + (platformcreate << 30) \
+ (read_stclear << 31))
+ ((UINT32)read_stclear << 31)) // libtpms changed: UBSAN
#endif // USE_BIT_FIELD_STRUCTURES
@ -2830,10 +3069,10 @@ typedef UINT64 TPMA_NV_EXP;
# define TPMA_NV_EXP_TPMA_NV_READLOCKED (TPMA_NV_EXP)(1 << 28)
# define TPMA_NV_EXP_TPMA_NV_WRITTEN (TPMA_NV_EXP)(1 << 29)
# define TPMA_NV_EXP_TPMA_NV_PLATFORMCREATE (TPMA_NV_EXP)(1 << 30)
# define TPMA_NV_EXP_TPMA_NV_READ_STCLEAR (TPMA_NV_EXP)(1 << 31)
# define TPMA_NV_EXP_TPMA_EXTERNAL_NV_ENCRYPTION (TPMA_NV_EXP)(1 << 32)
# define TPMA_NV_EXP_TPMA_EXTERNAL_NV_INTEGRITY (TPMA_NV_EXP)(1 << 33)
# define TPMA_NV_EXP_TPMA_EXTERNAL_NV_ANTIROLLBACK (TPMA_NV_EXP)(1 << 34)
# define TPMA_NV_EXP_TPMA_NV_READ_STCLEAR (TPMA_NV_EXP)((UINT64)1 << 31) // libtpms changed begin: UBSAN
# define TPMA_NV_EXP_TPMA_EXTERNAL_NV_ENCRYPTION (TPMA_NV_EXP)((UINT64)1 << 32)
# define TPMA_NV_EXP_TPMA_EXTERNAL_NV_INTEGRITY (TPMA_NV_EXP)((UINT64)1 << 33)
# define TPMA_NV_EXP_TPMA_EXTERNAL_NV_ANTIROLLBACK (TPMA_NV_EXP)((UINT64)1 << 34) // libtpms changed end
# define TPMA_NV_EXP_reserved 0xfffffff800000000L // libtpms added
// This is the initializer for a TPMA_NV_EXP bit array.
@ -2875,10 +3114,10 @@ typedef UINT64 TPMA_NV_EXP;
+ (tpma_nv_policyread << 19) + (tpma_nv_no_da << 25) \
+ (tpma_nv_orderly << 26) + (tpma_nv_clear_stclear << 27) \
+ (tpma_nv_readlocked << 28) + (tpma_nv_written << 29) \
+ (tpma_nv_platformcreate << 30) + (tpma_nv_read_stclear << 31) \
+ (tpma_external_nv_encryption << 32) \
+ (tpma_external_nv_integrity << 33) \
+ (tpma_external_nv_antirollback << 34))
+ (tpma_nv_platformcreate << 30) + ((UINT64)tpma_nv_read_stclear << 31) /* libtpms changed: UBSAN */ \
+ ((UINT64)tpma_external_nv_encryption << 32) /* libtpms changed: UBSAN */ \
+ ((UINT64)tpma_external_nv_integrity << 33) /* libtpms changed: UBSAN */ \
+ ((UINT64)tpma_external_nv_antirollback << 34)) /* libtpms changed: UBSAN */
#endif // USE_BIT_FIELD_STRUCTURES