Skip to content

Commit 32332fd

Browse files
committed
Fix logic for signing with input digest smaller than key size. ZD 19869
1 parent 761cb4a commit 32332fd

1 file changed

Lines changed: 16 additions & 2 deletions

File tree

src/tpm2_wrap.c

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3774,8 +3774,22 @@ int wolfTPM2_SignHashScheme(WOLFTPM2_DEV* dev, WOLFTPM2_KEY* key,
37743774

37753775
XMEMSET(&signIn, 0, sizeof(signIn));
37763776
signIn.keyHandle = key->handle.hndl;
3777-
signIn.digest.size = digestSz;
3778-
XMEMCPY(signIn.digest.buffer, digest, signIn.digest.size);
3777+
signIn.digest.size = TPM2_GetHashDigestSize(hashAlg);
3778+
if (signIn.digest.size <= 0) {
3779+
return BAD_FUNC_ARG;
3780+
}
3781+
/* truncate if too large */
3782+
if (signIn.digest.size > curveSize) {
3783+
signIn.digest.size = curveSize;
3784+
}
3785+
/* if digest provided is smaller than key size then zero pad leading */
3786+
if (signIn.digest.size > digestSz) {
3787+
XMEMCPY(&signIn.digest.buffer[signIn.digest.size - digestSz], digest,
3788+
digestSz);
3789+
}
3790+
else {
3791+
XMEMCPY(signIn.digest.buffer, digest, digestSz);
3792+
}
37793793
signIn.inScheme.scheme = sigAlg;
37803794
signIn.inScheme.details.any.hashAlg = hashAlg;
37813795
signIn.validation.tag = TPM_ST_HASHCHECK;

0 commit comments

Comments
 (0)