diff --git a/src/tpm2/TpmAlgorithmDefines.h b/src/tpm2/TpmAlgorithmDefines.h index da7235f6..1ff42330 100644 --- a/src/tpm2/TpmAlgorithmDefines.h +++ b/src/tpm2/TpmAlgorithmDefines.h @@ -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 diff --git a/src/tpm2/TpmTypes.h b/src/tpm2/TpmTypes.h index f2b9b293..1620e4c8 100644 --- a/src/tpm2/TpmTypes.h +++ b/src/tpm2/TpmTypes.h @@ -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;