@@ -4453,19 +4453,26 @@ int wolfTPM2_VerifyHash_ex(WOLFTPM2_DEV* dev, WOLFTPM2_KEY* key,
44534453int wolfTPM2_VerifyHash (WOLFTPM2_DEV * dev , WOLFTPM2_KEY * key ,
44544454 const byte * sig , int sigSz , const byte * digest , int digestSz )
44554455{
4456- int curve_id = 0 ;
4457- int hashAlg = TPM_ALG_NULL ;
4456+ int hashAlg = TPM_ALG_SHA256 ;
44584457
4459- /* detect hash algorithm based on key curve */
4458+ /* detect hash algorithm based on key type and parameters */
44604459 if (key != NULL ) {
4461- curve_id = key -> pub .publicArea .parameters .eccDetail .curveID ;
4460+ TPMT_PUBLIC * pub = & key -> pub .publicArea ;
4461+ if (pub -> type == TPM_ALG_ECC ) {
4462+ int curve_id = pub -> parameters .eccDetail .curveID ;
4463+ if (curve_id == TPM_ECC_NIST_P521 )
4464+ hashAlg = TPM_ALG_SHA512 ;
4465+ else if (curve_id == TPM_ECC_NIST_P384 )
4466+ hashAlg = TPM_ALG_SHA384 ;
4467+ else
4468+ hashAlg = TPM_ALG_SHA256 ;
4469+ }
4470+ else if (pub -> type == TPM_ALG_RSA ) {
4471+ hashAlg = pub -> parameters .rsaDetail .scheme .details .anySig .hashAlg ;
4472+ if (hashAlg == TPM_ALG_NULL || hashAlg == 0 )
4473+ hashAlg = TPM_ALG_SHA256 ;
4474+ }
44624475 }
4463- if (curve_id == TPM_ECC_NIST_P521 )
4464- hashAlg = TPM_ALG_SHA512 ;
4465- else if (curve_id == TPM_ECC_NIST_P384 )
4466- hashAlg = TPM_ALG_SHA384 ;
4467- else
4468- hashAlg = TPM_ALG_SHA256 ;
44694476
44704477 return wolfTPM2_VerifyHashTicket (dev , key , sig , sigSz , digest , digestSz ,
44714478 TPM_ALG_NULL , hashAlg , NULL );
0 commit comments