crypt32(7/7): According to MSDN,
inner content is only decoded when the content type is data
Juan Lang
juan.lang at gmail.com
Tue Aug 7 17:03:18 CDT 2007
--Juan
-------------- next part --------------
From d1db1a63e29e8816e672d1b9e8257844094409a6 Mon Sep 17 00:00:00 2001
From: Juan Lang <juanlang at juan.corp.google.com>
Date: Tue, 7 Aug 2007 14:57:04 -0700
Subject: [PATCH] According to MSDN, inner content is only decoded when the content type is data
---
dlls/crypt32/msg.c | 30 ++++++++++++++++++------------
1 files changed, 18 insertions(+), 12 deletions(-)
diff --git a/dlls/crypt32/msg.c b/dlls/crypt32/msg.c
index 30ec62a..70527bd 100644
--- a/dlls/crypt32/msg.c
+++ b/dlls/crypt32/msg.c
@@ -1742,20 +1742,26 @@ static BOOL CDecodeSignedMsg_GetParam(CD
case CMSG_CONTENT_PARAM:
if (msg->u.signedInfo)
{
- CRYPT_DATA_BLOB *blob;
- DWORD size;
-
- /* FIXME: does this depend on inner content type? */
- ret = CryptDecodeObjectEx(X509_ASN_ENCODING, X509_OCTET_STRING,
- msg->u.signedInfo->content.Content.pbData,
- msg->u.signedInfo->content.Content.cbData, CRYPT_DECODE_ALLOC_FLAG,
- NULL, (LPBYTE)&blob, &size);
- if (ret)
+ if (!strcmp(msg->u.signedInfo->content.pszObjId, szOID_RSA_data))
{
- ret = CRYPT_CopyParam(pvData, pcbData, blob->pbData,
- blob->cbData);
- LocalFree(blob);
+ CRYPT_DATA_BLOB *blob;
+ DWORD size;
+
+ ret = CryptDecodeObjectEx(X509_ASN_ENCODING, X509_OCTET_STRING,
+ msg->u.signedInfo->content.Content.pbData,
+ msg->u.signedInfo->content.Content.cbData,
+ CRYPT_DECODE_ALLOC_FLAG, NULL, (LPBYTE)&blob, &size);
+ if (ret)
+ {
+ ret = CRYPT_CopyParam(pvData, pcbData, blob->pbData,
+ blob->cbData);
+ LocalFree(blob);
+ }
}
+ else
+ ret = CRYPT_CopyParam(pvData, pcbData,
+ msg->u.signedInfo->content.Content.pbData,
+ msg->u.signedInfo->content.Content.cbData);
}
else
SetLastError(CRYPT_E_INVALID_MSG_TYPE);
--
1.4.1
More information about the wine-patches
mailing list