Skip to content

Commit 681e1dd

Browse files
committed
Fix Fenrir F-1754: wolfTPM2_VerifyHash to check key type before reading parameters
1 parent e0ba069 commit 681e1dd

1 file changed

Lines changed: 17 additions & 10 deletions

File tree

src/tpm2_wrap.c

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4453,19 +4453,26 @@ int wolfTPM2_VerifyHash_ex(WOLFTPM2_DEV* dev, WOLFTPM2_KEY* key,
44534453
int 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

Comments
 (0)