Skip to content

Commit 1435757

Browse files
committed
wc_PKCS7_PwriKek_KeyUnWrap: use a ct cmp
F-378
1 parent 8093875 commit 1435757

1 file changed

Lines changed: 9 additions & 15 deletions

File tree

wolfcrypt/src/pkcs7.c

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9520,6 +9520,7 @@ static int wc_PKCS7_PwriKek_KeyUnWrap(wc_PKCS7* pkcs7, const byte* kek,
95209520
byte* tmpIv = NULL;
95219521
byte* lastBlock = NULL;
95229522
byte* outTmp = NULL;
9523+
byte fail = 0;
95239524

95249525
if (pkcs7 == NULL || kek == NULL || in == NULL ||
95259526
out == NULL || iv == NULL) {
@@ -9581,25 +9582,18 @@ static int wc_PKCS7_PwriKek_KeyUnWrap(wc_PKCS7* pkcs7, const byte* kek,
95819582
cekLen = outTmp[0];
95829583

95839584
/* verify length */
9584-
if ((word32)cekLen > inSz) {
9585-
ForceZero(outTmp, inSz);
9586-
XFREE(outTmp, pkcs7->heap, DYNAMIC_TYPE_TMP_BUFFER);
9587-
return BAD_FUNC_ARG;
9588-
}
9589-
9585+
fail |= ctMaskGT(cekLen, (int)inSz);
95909586
/* verify check bytes */
9591-
if ((outTmp[1] ^ outTmp[4]) != 0xFF ||
9592-
(outTmp[2] ^ outTmp[5]) != 0xFF ||
9593-
(outTmp[3] ^ outTmp[6]) != 0xFF) {
9594-
ForceZero(outTmp, inSz);
9595-
XFREE(outTmp, pkcs7->heap, DYNAMIC_TYPE_TMP_BUFFER);
9596-
return BAD_FUNC_ARG;
9597-
}
9587+
fail |= ctMaskNotEq((int)(outTmp[1] ^ outTmp[4]), 0xFF);
9588+
fail |= ctMaskNotEq((int)(outTmp[2] ^ outTmp[5]), 0xFF);
9589+
fail |= ctMaskNotEq((int)(outTmp[3] ^ outTmp[6]), 0xFF);
9590+
/* verify length */
9591+
fail |= ctMaskGT(cekLen, (int)outSz);
95989592

9599-
if (outSz < (word32)cekLen) {
9593+
if (fail) {
96009594
ForceZero(outTmp, inSz);
96019595
XFREE(outTmp, pkcs7->heap, DYNAMIC_TYPE_TMP_BUFFER);
9602-
return BUFFER_E;
9596+
return BAD_FUNC_ARG;
96039597
}
96049598

96059599
XMEMCPY(out, outTmp + 4, outTmp[0]);

0 commit comments

Comments
 (0)