Juan Lang : rsaenh: Check pad bytes for consistency when decrypting.
Alexandre Julliard
julliard at winehq.org
Mon Nov 12 06:27:49 CST 2007
Module: wine
Branch: master
Commit: f6833c4d096f9f9ceedef77c8d9bf63edaf74ea6
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f6833c4d096f9f9ceedef77c8d9bf63edaf74ea6
Author: Juan Lang <juan.lang at gmail.com>
Date: Sun Nov 11 12:33:09 2007 -0800
rsaenh: Check pad bytes for consistency when decrypting.
---
dlls/rsaenh/rsaenh.c | 16 ++++++++++++++--
1 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/dlls/rsaenh/rsaenh.c b/dlls/rsaenh/rsaenh.c
index 4bb64ab..7dc1cf2 100644
--- a/dlls/rsaenh/rsaenh.c
+++ b/dlls/rsaenh/rsaenh.c
@@ -2127,8 +2127,20 @@ BOOL WINAPI RSAENH_CPDecrypt(HCRYPTPROV hProv, HCRYPTKEY hKey, HCRYPTHASH hHash,
if (Final) {
if (pbData[*pdwDataLen-1] &&
pbData[*pdwDataLen-1] <= pCryptKey->dwBlockLen &&
- pbData[*pdwDataLen-1] < *pdwDataLen)
- *pdwDataLen -= pbData[*pdwDataLen-1];
+ 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];
+ else {
+ SetLastError(NTE_BAD_DATA);
+ return FALSE;
+ }
+ }
else {
SetLastError(NTE_BAD_DATA);
return FALSE;
More information about the wine-cvs
mailing list