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