Juan Lang : crypt32: Use signed message data type for decoded signed messages.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Aug 21 15:22:23 CDT 2007


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

Author: Juan Lang <juan.lang at gmail.com>
Date:   Mon Aug 20 17:42:31 2007 -0700

crypt32: Use signed message data type for decoded signed messages.

---

 dlls/crypt32/msg.c |   72 ++++++++++++++++++++++++++-------------------------
 1 files changed, 37 insertions(+), 35 deletions(-)

diff --git a/dlls/crypt32/msg.c b/dlls/crypt32/msg.c
index a7e43e4..9b9b843 100644
--- a/dlls/crypt32/msg.c
+++ b/dlls/crypt32/msg.c
@@ -1278,8 +1278,8 @@ typedef struct _CDecodeMsg
     DWORD                  type;
     HCRYPTPROV             crypt_prov;
     union {
-        HCRYPTHASH             hash;
-        CRYPT_SIGNED_INFO     *signedInfo;
+        HCRYPTHASH     hash;
+        CSignedMsgData signed_data;
     } u;
     CRYPT_DATA_BLOB        msg_data;
     PCONTEXT_PROPERTY_LIST properties;
@@ -1298,7 +1298,8 @@ static void CDecodeMsg_Close(HCRYPTMSG hCryptMsg)
             CryptDestroyHash(msg->u.hash);
         break;
     case CMSG_SIGNED:
-        LocalFree(msg->u.signedInfo);
+        if (msg->u.signed_data.info)
+            LocalFree(msg->u.signed_data.info);
         break;
     }
     CryptMemFree(msg->msg_data.pbData);
@@ -1433,7 +1434,7 @@ static BOOL CDecodeMsg_DecodeSignedContent(CDecodeMsg *msg,
      CRYPT_DECODE_ALLOC_FLAG, NULL, (CRYPT_SIGNED_INFO *)&signedInfo,
      &size);
     if (ret)
-        msg->u.signedInfo = signedInfo;
+        msg->u.signed_data.info = signedInfo;
     return ret;
 }
 /* Decodes the content in blob as the type given, and updates the value
@@ -1778,16 +1779,17 @@ static BOOL CDecodeSignedMsg_GetParam(CDecodeMsg *msg, DWORD dwParamType,
         ret = CRYPT_CopyParam(pvData, pcbData, &msg->type, sizeof(msg->type));
         break;
     case CMSG_CONTENT_PARAM:
-        if (msg->u.signedInfo)
+        if (msg->u.signed_data.info)
         {
-            if (!strcmp(msg->u.signedInfo->content.pszObjId, szOID_RSA_data))
+            if (!strcmp(msg->u.signed_data.info->content.pszObjId,
+             szOID_RSA_data))
             {
                 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,
+                 msg->u.signed_data.info->content.Content.pbData,
+                 msg->u.signed_data.info->content.Content.cbData,
                  CRYPT_DECODE_ALLOC_FLAG, NULL, (LPBYTE)&blob, &size);
                 if (ret)
                 {
@@ -1798,93 +1800,93 @@ static BOOL CDecodeSignedMsg_GetParam(CDecodeMsg *msg, DWORD dwParamType,
             }
             else
                 ret = CRYPT_CopyParam(pvData, pcbData,
-                 msg->u.signedInfo->content.Content.pbData,
-                 msg->u.signedInfo->content.Content.cbData);
+                 msg->u.signed_data.info->content.Content.pbData,
+                 msg->u.signed_data.info->content.Content.cbData);
         }
         else
             SetLastError(CRYPT_E_INVALID_MSG_TYPE);
         break;
     case CMSG_INNER_CONTENT_TYPE_PARAM:
-        if (msg->u.signedInfo)
+        if (msg->u.signed_data.info)
             ret = CRYPT_CopyParam(pvData, pcbData,
-             msg->u.signedInfo->content.pszObjId,
-             strlen(msg->u.signedInfo->content.pszObjId) + 1);
+             msg->u.signed_data.info->content.pszObjId,
+             strlen(msg->u.signed_data.info->content.pszObjId) + 1);
         else
             SetLastError(CRYPT_E_INVALID_MSG_TYPE);
         break;
     case CMSG_SIGNER_COUNT_PARAM:
-        if (msg->u.signedInfo)
+        if (msg->u.signed_data.info)
             ret = CRYPT_CopyParam(pvData, pcbData,
-             &msg->u.signedInfo->cSignerInfo, sizeof(DWORD));
+             &msg->u.signed_data.info->cSignerInfo, sizeof(DWORD));
         else
             SetLastError(CRYPT_E_INVALID_MSG_TYPE);
         break;
     case CMSG_SIGNER_INFO_PARAM:
-        if (msg->u.signedInfo)
+        if (msg->u.signed_data.info)
         {
-            if (dwIndex >= msg->u.signedInfo->cSignerInfo)
+            if (dwIndex >= msg->u.signed_data.info->cSignerInfo)
                 SetLastError(CRYPT_E_INVALID_INDEX);
             else
                 ret = CRYPT_CopySignerInfo(pvData, pcbData,
-                 &msg->u.signedInfo->rgSignerInfo[dwIndex]);
+                 &msg->u.signed_data.info->rgSignerInfo[dwIndex]);
         }
         else
             SetLastError(CRYPT_E_INVALID_MSG_TYPE);
         break;
     case CMSG_SIGNER_CERT_INFO_PARAM:
-        if (msg->u.signedInfo)
+        if (msg->u.signed_data.info)
         {
-            if (dwIndex >= msg->u.signedInfo->cSignerInfo)
+            if (dwIndex >= msg->u.signed_data.info->cSignerInfo)
                 SetLastError(CRYPT_E_INVALID_INDEX);
             else
                 ret = CRYPT_CopySignerCertInfo(pvData, pcbData,
-                 &msg->u.signedInfo->rgSignerInfo[dwIndex]);
+                 &msg->u.signed_data.info->rgSignerInfo[dwIndex]);
         }
         else
             SetLastError(CRYPT_E_INVALID_MSG_TYPE);
         break;
     case CMSG_CERT_COUNT_PARAM:
-        if (msg->u.signedInfo)
+        if (msg->u.signed_data.info)
             ret = CRYPT_CopyParam(pvData, pcbData,
-             &msg->u.signedInfo->cCertEncoded, sizeof(DWORD));
+             &msg->u.signed_data.info->cCertEncoded, sizeof(DWORD));
         else
             SetLastError(CRYPT_E_INVALID_MSG_TYPE);
         break;
     case CMSG_CERT_PARAM:
-        if (msg->u.signedInfo)
+        if (msg->u.signed_data.info)
         {
-            if (dwIndex >= msg->u.signedInfo->cCertEncoded)
+            if (dwIndex >= msg->u.signed_data.info->cCertEncoded)
                 SetLastError(CRYPT_E_INVALID_INDEX);
             else
                 ret = CRYPT_CopyParam(pvData, pcbData,
-                 msg->u.signedInfo->rgCertEncoded[dwIndex].pbData,
-                 msg->u.signedInfo->rgCertEncoded[dwIndex].cbData);
+                 msg->u.signed_data.info->rgCertEncoded[dwIndex].pbData,
+                 msg->u.signed_data.info->rgCertEncoded[dwIndex].cbData);
         }
         else
             SetLastError(CRYPT_E_INVALID_MSG_TYPE);
         break;
     case CMSG_CRL_COUNT_PARAM:
-        if (msg->u.signedInfo)
+        if (msg->u.signed_data.info)
             ret = CRYPT_CopyParam(pvData, pcbData,
-             &msg->u.signedInfo->cCrlEncoded, sizeof(DWORD));
+             &msg->u.signed_data.info->cCrlEncoded, sizeof(DWORD));
         else
             SetLastError(CRYPT_E_INVALID_MSG_TYPE);
         break;
     case CMSG_CRL_PARAM:
-        if (msg->u.signedInfo)
+        if (msg->u.signed_data.info)
         {
-            if (dwIndex >= msg->u.signedInfo->cCrlEncoded)
+            if (dwIndex >= msg->u.signed_data.info->cCrlEncoded)
                 SetLastError(CRYPT_E_INVALID_INDEX);
             else
                 ret = CRYPT_CopyParam(pvData, pcbData,
-                 msg->u.signedInfo->rgCrlEncoded[dwIndex].pbData,
-                 msg->u.signedInfo->rgCrlEncoded[dwIndex].cbData);
+                 msg->u.signed_data.info->rgCrlEncoded[dwIndex].pbData,
+                 msg->u.signed_data.info->rgCrlEncoded[dwIndex].cbData);
         }
         else
             SetLastError(CRYPT_E_INVALID_MSG_TYPE);
         break;
     case CMSG_ATTR_CERT_COUNT_PARAM:
-        if (msg->u.signedInfo)
+        if (msg->u.signed_data.info)
         {
             DWORD attrCertCount = 0;
 
@@ -1895,7 +1897,7 @@ static BOOL CDecodeSignedMsg_GetParam(CDecodeMsg *msg, DWORD dwParamType,
             SetLastError(CRYPT_E_INVALID_MSG_TYPE);
         break;
     case CMSG_ATTR_CERT_PARAM:
-        if (msg->u.signedInfo)
+        if (msg->u.signed_data.info)
             SetLastError(CRYPT_E_INVALID_INDEX);
         else
             SetLastError(CRYPT_E_INVALID_MSG_TYPE);




More information about the wine-cvs mailing list