Juan Lang : rsaenh: Validate pad byte when decrypting a block cipher.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Sep 12 07:50:36 CDT 2007
Module: wine
Branch: master
Commit: f0d2766fdc945fc967e5efbedbab9e022baabf4a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f0d2766fdc945fc967e5efbedbab9e022baabf4a
Author: Juan Lang <juan.lang at gmail.com>
Date: Tue Sep 11 12:44:26 2007 -0700
rsaenh: Validate pad byte when decrypting a block cipher.
---
dlls/rsaenh/rsaenh.c | 11 ++++++++++-
1 files changed, 10 insertions(+), 1 deletions(-)
diff --git a/dlls/rsaenh/rsaenh.c b/dlls/rsaenh/rsaenh.c
index 4002f27..3318da6 100644
--- a/dlls/rsaenh/rsaenh.c
+++ b/dlls/rsaenh/rsaenh.c
@@ -2080,7 +2080,16 @@ BOOL WINAPI RSAENH_CPDecrypt(HCRYPTPROV hProv, HCRYPTKEY hKey, HCRYPTHASH hHash,
}
memcpy(in, out, pCryptKey->dwBlockLen);
}
- if (Final) *pdwDataLen -= pbData[*pdwDataLen-1];
+ if (Final) {
+ if (pbData[*pdwDataLen-1] &&
+ pbData[*pdwDataLen-1] <= pCryptKey->dwBlockLen &&
+ pbData[*pdwDataLen-1] < *pdwDataLen)
+ *pdwDataLen -= pbData[*pdwDataLen-1];
+ else {
+ SetLastError(NTE_BAD_DATA);
+ return FALSE;
+ }
+ }
} else if (GET_ALG_TYPE(pCryptKey->aiAlgid) == ALG_TYPE_STREAM) {
encrypt_stream_impl(pCryptKey->aiAlgid, &pCryptKey->context, pbData, *pdwDataLen);
More information about the wine-cvs
mailing list