From 44f0cb0535c070b83f8916148e4376579009f36c Mon Sep 17 00:00:00 2001 From: Stefan Berger Date: Tue, 27 Feb 2024 11:13:54 -0500 Subject: [PATCH] rev180: Sync TPMI_ECC_CURVE_Unmarshal Signed-off-by: Stefan Berger --- src/tpm2/Unmarshal.c | 41 +++++++---------------------------------- src/tpm2/Unmarshal_fp.h | 2 +- 2 files changed, 8 insertions(+), 35 deletions(-) diff --git a/src/tpm2/Unmarshal.c b/src/tpm2/Unmarshal.c index 21c0f624..1fe6597b 100644 --- a/src/tpm2/Unmarshal.c +++ b/src/tpm2/Unmarshal.c @@ -246,6 +246,10 @@ TPM_ECC_CURVE_Unmarshal(TPM_ECC_CURVE *target, BYTE **buffer, INT32 *size) # if ECC_CURVE_448 case TPM_ECC_CURVE_448: # endif // ECC_CURVE_448 + if (*target != TPM_ECC_NONE && // libtpms added begin + !CryptEccIsCurveRuntimeUsable(*target)) { + rc = TPM_RC_CURVE; + } // libtpms added end break; default: rc = TPM_RC_CURVE; @@ -3786,47 +3790,16 @@ TPMI_ALG_ECC_SCHEME_Unmarshal(TPMI_ALG_ECC_SCHEME *target, BYTE **buffer, INT32 /* Table 165 - Definition of {ECC} (TPM_ECC_CURVE) TPMI_ECC_CURVE Type */ TPM_RC -TPMI_ECC_CURVE_Unmarshal(TPMI_ECC_CURVE *target, BYTE **buffer, INT32 *size) +TPMI_ECC_CURVE_Unmarshal(TPMI_ECC_CURVE *target, BYTE **buffer, INT32 *size, BOOL allowNull) { TPM_RC rc = TPM_RC_SUCCESS; - TPMI_ECC_CURVE orig_target = *target; // libtpms added if (rc == TPM_RC_SUCCESS) { rc = TPM_ECC_CURVE_Unmarshal(target, buffer, size); } if (rc == TPM_RC_SUCCESS) { - switch (*target) { -#if ECC_BN_P256 - case TPM_ECC_BN_P256: -#endif -#if ECC_BN_P638 // libtpms added begin - case TPM_ECC_BN_P638: -#endif -#if ECC_NIST_P192 - case TPM_ECC_NIST_P192: -#endif -#if ECC_NIST_P224 - case TPM_ECC_NIST_P224: -#endif // libtpms added end -#if ECC_NIST_P256 - case TPM_ECC_NIST_P256: -#endif -#if ECC_NIST_P384 - case TPM_ECC_NIST_P384: -#endif -#if ECC_NIST_P521 // libtpms added begin - case TPM_ECC_NIST_P521: -#endif -#if ECC_SM2_P256 - case TPM_ECC_SM2_P256: -#endif - if (!CryptEccIsCurveRuntimeUsable(*target)) - rc = TPM_RC_CURVE; - // libtpms added end - break; - default: + if ((*target == TPM_ECC_NONE) && !allowNull) { rc = TPM_RC_CURVE; - *target = orig_target; // libtpms added } } return rc; @@ -4152,7 +4125,7 @@ TPMS_ECC_PARMS_Unmarshal(TPMS_ECC_PARMS *target, BYTE **buffer, INT32 *size) rc = TPMT_ECC_SCHEME_Unmarshal(&target->scheme, buffer, size, YES); } if (rc == TPM_RC_SUCCESS) { - rc = TPMI_ECC_CURVE_Unmarshal(&target->curveID, buffer, size); + rc = TPMI_ECC_CURVE_Unmarshal(&target->curveID, buffer, size, NO); } if (rc == TPM_RC_SUCCESS) { rc = TPMT_KDF_SCHEME_Unmarshal(&target->kdf, buffer, size, YES); diff --git a/src/tpm2/Unmarshal_fp.h b/src/tpm2/Unmarshal_fp.h index e014d1de..54ca755c 100644 --- a/src/tpm2/Unmarshal_fp.h +++ b/src/tpm2/Unmarshal_fp.h @@ -403,7 +403,7 @@ extern "C" { LIB_EXPORT TPM_RC TPMI_ALG_ECC_SCHEME_Unmarshal(TPMI_ALG_ECC_SCHEME *target, BYTE **buffer, INT32 *size, BOOL allowNull); LIB_EXPORT TPM_RC - TPMI_ECC_CURVE_Unmarshal(TPMI_ECC_CURVE *target, BYTE **buffer, INT32 *size); + TPMI_ECC_CURVE_Unmarshal(TPMI_ECC_CURVE *target, BYTE **buffer, INT32 *size, BOOL allowNull); LIB_EXPORT TPM_RC TPMT_ECC_SCHEME_Unmarshal(TPMT_ECC_SCHEME *target, BYTE **buffer, INT32 *size, BOOL allowNull); LIB_EXPORT TPM_RC