crypt32(18/21): Move signed message data functions together

Juan Lang juan.lang at gmail.com
Tue Aug 21 09:26:56 CDT 2007


--Juan
-------------- next part --------------
From 41e8f359be3a8f36ca007384d5e700542787ec28 Mon Sep 17 00:00:00 2001
From: Juan Lang <juan.lang at gmail.com>
Date: Mon, 20 Aug 2007 17:49:53 -0700
Subject: [PATCH] Move signed message data functions together
---
 dlls/crypt32/msg.c |  232 ++++++++++++++++++++++++++--------------------------
 1 files changed, 116 insertions(+), 116 deletions(-)

diff --git a/dlls/crypt32/msg.c b/dlls/crypt32/msg.c
index 7507e13..8c01c76 100644
--- a/dlls/crypt32/msg.c
+++ b/dlls/crypt32/msg.c
@@ -783,13 +783,6 @@ typedef struct _CSignedMsgData
     CSignerHandles    *signerHandles;
 } CSignedMsgData;
 
-typedef struct _CSignedEncodeMsg
-{
-    CryptMsgBase    base;
-    CRYPT_DATA_BLOB data;
-    CSignedMsgData  msg_data;
-} CSignedEncodeMsg;
-
 /* Constructs the signer handles for the signerIndex'th signer of msg_data.
  * Assumes signerIndex is a valid idnex, and that msg_data's info has already
  * been constructed.
@@ -857,115 +850,6 @@ static BOOL CSignedMsgData_UpdateHash(CS
     return ret;
 }
 
-static void CSignedEncodeMsg_Close(HCRYPTMSG hCryptMsg)
-{
-    CSignedEncodeMsg *msg = (CSignedEncodeMsg *)hCryptMsg;
-    DWORD i;
-
-    CryptMemFree(msg->data.pbData);
-    CRYPT_FreeBlobArray((BlobArray *)&msg->msg_data.info->cCertEncoded);
-    CRYPT_FreeBlobArray((BlobArray *)&msg->msg_data.info->cCrlEncoded);
-    for (i = 0; i < msg->msg_data.info->cSignerInfo; i++)
-        CSignerInfo_Free(&msg->msg_data.info->rgSignerInfo[i]);
-    CSignedMsgData_CloseHandles(&msg->msg_data);
-    CryptMemFree(msg->msg_data.info->rgSignerInfo);
-    CryptMemFree(msg->msg_data.info);
-}
-
-static BOOL CSignedEncodeMsg_GetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType,
- DWORD dwIndex, void *pvData, DWORD *pcbData)
-{
-    CSignedEncodeMsg *msg = (CSignedEncodeMsg *)hCryptMsg;
-    BOOL ret = FALSE;
-
-    switch (dwParamType)
-    {
-    case CMSG_CONTENT_PARAM:
-    {
-        CRYPT_CONTENT_INFO info;
-
-        ret = CryptMsgGetParam(hCryptMsg, CMSG_BARE_CONTENT_PARAM, 0, NULL,
-         &info.Content.cbData);
-        if (ret)
-        {
-            info.Content.pbData = CryptMemAlloc(info.Content.cbData);
-            if (info.Content.pbData)
-            {
-                ret = CryptMsgGetParam(hCryptMsg, CMSG_BARE_CONTENT_PARAM, 0,
-                 info.Content.pbData, &info.Content.cbData);
-                if (ret)
-                {
-                    char oid_rsa_signed[] = szOID_RSA_signedData;
-
-                    info.pszObjId = oid_rsa_signed;
-                    ret = CryptEncodeObjectEx(X509_ASN_ENCODING,
-                     PKCS_CONTENT_INFO, &info, 0, NULL, pvData, pcbData);
-                }
-                CryptMemFree(info.Content.pbData);
-            }
-            else
-                ret = FALSE;
-        }
-        break;
-    }
-    case CMSG_BARE_CONTENT_PARAM:
-    {
-        CRYPT_SIGNED_INFO info;
-        char oid_rsa_data[] = szOID_RSA_data;
-
-        memcpy(&info, msg->msg_data.info, sizeof(info));
-        /* Quirk:  OID is only encoded messages if an update has happened */
-        if (msg->base.state != MsgStateInit)
-            info.content.pszObjId = oid_rsa_data;
-        else
-            info.content.pszObjId = NULL;
-        if (msg->data.cbData)
-        {
-            CRYPT_DATA_BLOB blob = { msg->data.cbData, msg->data.pbData };
-
-            ret = CryptEncodeObjectEx(X509_ASN_ENCODING, X509_OCTET_STRING,
-             &blob, CRYPT_ENCODE_ALLOC_FLAG, NULL,
-             &info.content.Content.pbData, &info.content.Content.cbData);
-        }
-        else
-        {
-            info.content.Content.cbData = 0;
-            info.content.Content.pbData = NULL;
-            ret = TRUE;
-        }
-        if (ret)
-        {
-            ret = CRYPT_AsnEncodePKCSSignedInfo(&info, pvData, pcbData);
-            LocalFree(info.content.Content.pbData);
-        }
-        break;
-    }
-    case CMSG_COMPUTED_HASH_PARAM:
-        if (dwIndex >= msg->msg_data.info->cSignerInfo)
-            SetLastError(CRYPT_E_INVALID_INDEX);
-        else
-            ret = CryptGetHashParam(
-             msg->msg_data.signerHandles[dwIndex].contentHash, HP_HASHVAL,
-             pvData, pcbData, 0);
-        break;
-    case CMSG_ENCODED_SIGNER:
-        if (dwIndex >= msg->msg_data.info->cSignerInfo)
-            SetLastError(CRYPT_E_INVALID_INDEX);
-        else
-            ret = CryptEncodeObjectEx(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
-             PKCS7_SIGNER_INFO, &msg->msg_data.info->rgSignerInfo[dwIndex], 0,
-             NULL, pvData, pcbData);
-        break;
-    case CMSG_VERSION_PARAM:
-        ret = CRYPT_CopyParam(pvData, pcbData, &msg->msg_data.info->version,
-         sizeof(msg->msg_data.info->version));
-        break;
-    default:
-        SetLastError(CRYPT_E_INVALID_MSG_TYPE);
-    }
-    return ret;
-}
-
 static BOOL CRYPT_AppendAttribute(CRYPT_ATTRIBUTES *out,
  const CRYPT_ATTRIBUTE *in)
 {
@@ -1129,6 +1013,122 @@ static BOOL CSignedMsgData_Update(CSigne
     return ret;
 }
 
+typedef struct _CSignedEncodeMsg
+{
+    CryptMsgBase    base;
+    CRYPT_DATA_BLOB data;
+    CSignedMsgData  msg_data;
+} CSignedEncodeMsg;
+
+static void CSignedEncodeMsg_Close(HCRYPTMSG hCryptMsg)
+{
+    CSignedEncodeMsg *msg = (CSignedEncodeMsg *)hCryptMsg;
+    DWORD i;
+
+    CryptMemFree(msg->data.pbData);
+    CRYPT_FreeBlobArray((BlobArray *)&msg->msg_data.info->cCertEncoded);
+    CRYPT_FreeBlobArray((BlobArray *)&msg->msg_data.info->cCrlEncoded);
+    for (i = 0; i < msg->msg_data.info->cSignerInfo; i++)
+        CSignerInfo_Free(&msg->msg_data.info->rgSignerInfo[i]);
+    CSignedMsgData_CloseHandles(&msg->msg_data);
+    CryptMemFree(msg->msg_data.info->rgSignerInfo);
+    CryptMemFree(msg->msg_data.info);
+}
+
+static BOOL CSignedEncodeMsg_GetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType,
+ DWORD dwIndex, void *pvData, DWORD *pcbData)
+{
+    CSignedEncodeMsg *msg = (CSignedEncodeMsg *)hCryptMsg;
+    BOOL ret = FALSE;
+
+    switch (dwParamType)
+    {
+    case CMSG_CONTENT_PARAM:
+    {
+        CRYPT_CONTENT_INFO info;
+
+        ret = CryptMsgGetParam(hCryptMsg, CMSG_BARE_CONTENT_PARAM, 0, NULL,
+         &info.Content.cbData);
+        if (ret)
+        {
+            info.Content.pbData = CryptMemAlloc(info.Content.cbData);
+            if (info.Content.pbData)
+            {
+                ret = CryptMsgGetParam(hCryptMsg, CMSG_BARE_CONTENT_PARAM, 0,
+                 info.Content.pbData, &info.Content.cbData);
+                if (ret)
+                {
+                    char oid_rsa_signed[] = szOID_RSA_signedData;
+
+                    info.pszObjId = oid_rsa_signed;
+                    ret = CryptEncodeObjectEx(X509_ASN_ENCODING,
+                     PKCS_CONTENT_INFO, &info, 0, NULL, pvData, pcbData);
+                }
+                CryptMemFree(info.Content.pbData);
+            }
+            else
+                ret = FALSE;
+        }
+        break;
+    }
+    case CMSG_BARE_CONTENT_PARAM:
+    {
+        CRYPT_SIGNED_INFO info;
+        char oid_rsa_data[] = szOID_RSA_data;
+
+        memcpy(&info, msg->msg_data.info, sizeof(info));
+        /* Quirk:  OID is only encoded messages if an update has happened */
+        if (msg->base.state != MsgStateInit)
+            info.content.pszObjId = oid_rsa_data;
+        else
+            info.content.pszObjId = NULL;
+        if (msg->data.cbData)
+        {
+            CRYPT_DATA_BLOB blob = { msg->data.cbData, msg->data.pbData };
+
+            ret = CryptEncodeObjectEx(X509_ASN_ENCODING, X509_OCTET_STRING,
+             &blob, CRYPT_ENCODE_ALLOC_FLAG, NULL,
+             &info.content.Content.pbData, &info.content.Content.cbData);
+        }
+        else
+        {
+            info.content.Content.cbData = 0;
+            info.content.Content.pbData = NULL;
+            ret = TRUE;
+        }
+        if (ret)
+        {
+            ret = CRYPT_AsnEncodePKCSSignedInfo(&info, pvData, pcbData);
+            LocalFree(info.content.Content.pbData);
+        }
+        break;
+    }
+    case CMSG_COMPUTED_HASH_PARAM:
+        if (dwIndex >= msg->msg_data.info->cSignerInfo)
+            SetLastError(CRYPT_E_INVALID_INDEX);
+        else
+            ret = CryptGetHashParam(
+             msg->msg_data.signerHandles[dwIndex].contentHash, HP_HASHVAL,
+             pvData, pcbData, 0);
+        break;
+    case CMSG_ENCODED_SIGNER:
+        if (dwIndex >= msg->msg_data.info->cSignerInfo)
+            SetLastError(CRYPT_E_INVALID_INDEX);
+        else
+            ret = CryptEncodeObjectEx(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
+             PKCS7_SIGNER_INFO, &msg->msg_data.info->rgSignerInfo[dwIndex], 0,
+             NULL, pvData, pcbData);
+        break;
+    case CMSG_VERSION_PARAM:
+        ret = CRYPT_CopyParam(pvData, pcbData, &msg->msg_data.info->version,
+         sizeof(msg->msg_data.info->version));
+        break;
+    default:
+        SetLastError(CRYPT_E_INVALID_MSG_TYPE);
+    }
+    return ret;
+}
+
 static BOOL CSignedEncodeMsg_Update(HCRYPTMSG hCryptMsg, const BYTE *pbData,
  DWORD cbData, BOOL fFinal)
 {
-- 
1.4.1



More information about the wine-patches mailing list