Juan Lang : crypt32: According to MSDN, inner content is only decoded when the content type is data.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Aug 8 08:59:32 CDT 2007


Module: wine
Branch: master
Commit: c9a54102883bab8357993b982c4ef1954c4dcbf2
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c9a54102883bab8357993b982c4ef1954c4dcbf2

Author: Juan Lang <juan.lang at gmail.com>
Date:   Tue Aug  7 14:57:04 2007 -0700

crypt32: 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(CDecodeMsg *msg, DWORD dwParamType,
     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);




More information about the wine-cvs mailing list