tpm2: Add definitions for new algorithms and curves

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
This commit is contained in:
Stefan Berger 2025-07-31 21:05:52 -04:00
parent e28feca41f
commit bc565b962f
2 changed files with 128 additions and 3 deletions

View File

@ -100,17 +100,40 @@
# 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.
@ -121,9 +144,16 @@
// 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
@ -131,6 +161,10 @@
# 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

View File

@ -119,6 +119,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
@ -163,6 +165,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
@ -175,10 +187,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)
@ -194,6 +224,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;
@ -1598,6 +1633,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
@ -1613,6 +1651,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
@ -2220,6 +2267,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
@ -2246,6 +2297,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;
@ -2336,6 +2399,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
@ -2450,6 +2525,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
@ -2476,6 +2555,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;