@@ -4132,11 +4132,13 @@ int wolfTPM2_SignHash(WOLFTPM2_DEV* dev, WOLFTPM2_KEY* key,
41324132 sigAlg = TPM_ALG_ECDSA ;
41334133 }
41344134 if (hashAlg == 0 || hashAlg == TPM_ALG_NULL ) {
4135- if (digestSz == 64 )
4135+ /* determine hash type based on curve */
4136+ int curve_id = pub -> parameters .eccDetail .curveID ;
4137+ if (curve_id == TPM_ECC_NIST_P521 )
41364138 hashAlg = TPM_ALG_SHA512 ;
4137- else if (digestSz == 48 )
4139+ else if (curve_id == TPM_ECC_NIST_P384 )
41384140 hashAlg = TPM_ALG_SHA384 ;
4139- else if ( digestSz == 32 )
4141+ else
41404142 hashAlg = TPM_ALG_SHA256 ;
41414143 }
41424144 }
@@ -4273,12 +4275,16 @@ int wolfTPM2_VerifyHash_ex(WOLFTPM2_DEV* dev, WOLFTPM2_KEY* key,
42734275int wolfTPM2_VerifyHash (WOLFTPM2_DEV * dev , WOLFTPM2_KEY * key ,
42744276 const byte * sig , int sigSz , const byte * digest , int digestSz )
42754277{
4278+ int curve_id = 0 ;
42764279 int hashAlg = TPM_ALG_NULL ;
42774280
4278- /* detect hash algorithm based on digest size */
4279- if (digestSz >= TPM_SHA512_DIGEST_SIZE )
4281+ /* detect hash algorithm based on key curve */
4282+ if (key != NULL ) {
4283+ curve_id = key -> pub .publicArea .parameters .eccDetail .curveID ;
4284+ }
4285+ if (curve_id == TPM_ECC_NIST_P521 )
42804286 hashAlg = TPM_ALG_SHA512 ;
4281- else if (digestSz >= TPM_SHA384_DIGEST_SIZE )
4287+ else if (curve_id == TPM_ECC_NIST_P384 )
42824288 hashAlg = TPM_ALG_SHA384 ;
42834289 else
42844290 hashAlg = TPM_ALG_SHA256 ;
0 commit comments