Commit f6833c4d authored by Juan Lang's avatar Juan Lang Committed by Alexandre Julliard

rsaenh: Check pad bytes for consistency when decrypting.

parent cb113b23
...@@ -2127,13 +2127,25 @@ BOOL WINAPI RSAENH_CPDecrypt(HCRYPTPROV hProv, HCRYPTKEY hKey, HCRYPTHASH hHash, ...@@ -2127,13 +2127,25 @@ BOOL WINAPI RSAENH_CPDecrypt(HCRYPTPROV hProv, HCRYPTKEY hKey, HCRYPTHASH hHash,
if (Final) { if (Final) {
if (pbData[*pdwDataLen-1] && if (pbData[*pdwDataLen-1] &&
pbData[*pdwDataLen-1] <= pCryptKey->dwBlockLen && pbData[*pdwDataLen-1] <= pCryptKey->dwBlockLen &&
pbData[*pdwDataLen-1] < *pdwDataLen) pbData[*pdwDataLen-1] < *pdwDataLen) {
BOOL padOkay = TRUE;
/* check that every bad byte has the same value */
for (i = 1; padOkay && i < pbData[*pdwDataLen-1]; i++)
if (pbData[*pdwDataLen - i - 1] != pbData[*pdwDataLen - 1])
padOkay = FALSE;
if (padOkay)
*pdwDataLen -= pbData[*pdwDataLen-1]; *pdwDataLen -= pbData[*pdwDataLen-1];
else { else {
SetLastError(NTE_BAD_DATA); SetLastError(NTE_BAD_DATA);
return FALSE; return FALSE;
} }
} }
else {
SetLastError(NTE_BAD_DATA);
return FALSE;
}
}
} else if (GET_ALG_TYPE(pCryptKey->aiAlgid) == ALG_TYPE_STREAM) { } else if (GET_ALG_TYPE(pCryptKey->aiAlgid) == ALG_TYPE_STREAM) {
encrypt_stream_impl(pCryptKey->aiAlgid, &pCryptKey->context, pbData, *pdwDataLen); encrypt_stream_impl(pCryptKey->aiAlgid, &pCryptKey->context, pbData, *pdwDataLen);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment