Juan Lang : crypt32: Move decoding hash messages to a helper function.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Jul 23 05:55:32 CDT 2007
Module: wine
Branch: master
Commit: 52cc727348a218ab42c35e3149b68532793ad02a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=52cc727348a218ab42c35e3149b68532793ad02a
Author: Juan Lang <juan.lang at gmail.com>
Date: Fri Jul 20 14:43:12 2007 -0700
crypt32: Move decoding hash messages to a helper function.
---
dlls/crypt32/msg.c | 68 ++++++++++++++++++++++++++++-----------------------
1 files changed, 37 insertions(+), 31 deletions(-)
diff --git a/dlls/crypt32/msg.c b/dlls/crypt32/msg.c
index c3d7b96..67a4024 100644
--- a/dlls/crypt32/msg.c
+++ b/dlls/crypt32/msg.c
@@ -693,6 +693,41 @@ static inline void CRYPT_FixUpAlgorithmID(CRYPT_ALGORITHM_IDENTIFIER *id)
id->Parameters.pbData = (BYTE *)id->pszObjId + strlen(id->pszObjId) + 1;
}
+static BOOL CDecodeMsg_DecodeHashedContent(CDecodeMsg *msg,
+ CRYPT_DER_BLOB *blob)
+{
+ BOOL ret;
+ CRYPT_DIGESTED_DATA *digestedData;
+ DWORD size;
+
+ ret = CRYPT_AsnDecodePKCSDigestedData(blob->pbData, blob->cbData,
+ CRYPT_DECODE_ALLOC_FLAG, NULL, (CRYPT_DIGESTED_DATA *)&digestedData,
+ &size);
+ if (ret)
+ {
+ msg->type = CMSG_HASHED;
+ ContextPropertyList_SetProperty(msg->properties, CMSG_VERSION_PARAM,
+ (const BYTE *)&digestedData->version, sizeof(digestedData->version));
+ CDecodeMsg_SaveAlgorithmID(msg, CMSG_HASH_ALGORITHM_PARAM,
+ &digestedData->DigestAlgorithm);
+ ContextPropertyList_SetProperty(msg->properties,
+ CMSG_INNER_CONTENT_TYPE_PARAM,
+ (const BYTE *)digestedData->ContentInfo.pszObjId,
+ digestedData->ContentInfo.pszObjId ?
+ strlen(digestedData->ContentInfo.pszObjId) + 1 : 0);
+ if (digestedData->ContentInfo.Content.cbData)
+ CDecodeMsg_DecodeDataContent(msg,
+ &digestedData->ContentInfo.Content);
+ else
+ ContextPropertyList_SetProperty(msg->properties,
+ CMSG_CONTENT_PARAM, NULL, 0);
+ ContextPropertyList_SetProperty(msg->properties, CMSG_HASH_DATA_PARAM,
+ digestedData->hash.pbData, digestedData->hash.cbData);
+ LocalFree(digestedData);
+ }
+ return ret;
+}
+
/* Decodes the content in blob as the type given, and updates the value
* (type, parameters, etc.) of msg based on what blob contains.
* It doesn't just use msg's type, to allow a recursive call from an implicitly
@@ -702,7 +737,6 @@ static BOOL CDecodeMsg_DecodeContent(CDecodeMsg *msg, CRYPT_DER_BLOB *blob,
DWORD type)
{
BOOL ret;
- DWORD size;
switch (type)
{
@@ -711,38 +745,9 @@ static BOOL CDecodeMsg_DecodeContent(CDecodeMsg *msg, CRYPT_DER_BLOB *blob,
msg->type = CMSG_DATA;
break;
case CMSG_HASHED:
- {
- CRYPT_DIGESTED_DATA *digestedData;
-
- ret = CRYPT_AsnDecodePKCSDigestedData(blob->pbData, blob->cbData,
- CRYPT_DECODE_ALLOC_FLAG, NULL, (CRYPT_DIGESTED_DATA *)&digestedData,
- &size);
- if (ret)
- {
+ if ((ret = CDecodeMsg_DecodeHashedContent(msg, blob)))
msg->type = CMSG_HASHED;
- ContextPropertyList_SetProperty(msg->properties,
- CMSG_VERSION_PARAM, (const BYTE *)&digestedData->version,
- sizeof(digestedData->version));
- CDecodeMsg_SaveAlgorithmID(msg, CMSG_HASH_ALGORITHM_PARAM,
- &digestedData->DigestAlgorithm);
- ContextPropertyList_SetProperty(msg->properties,
- CMSG_INNER_CONTENT_TYPE_PARAM,
- (const BYTE *)digestedData->ContentInfo.pszObjId,
- digestedData->ContentInfo.pszObjId ?
- strlen(digestedData->ContentInfo.pszObjId) + 1 : 0);
- if (digestedData->ContentInfo.Content.cbData)
- CDecodeMsg_DecodeDataContent(msg,
- &digestedData->ContentInfo.Content);
- else
- ContextPropertyList_SetProperty(msg->properties,
- CMSG_CONTENT_PARAM, NULL, 0);
- ContextPropertyList_SetProperty(msg->properties,
- CMSG_HASH_DATA_PARAM, digestedData->hash.pbData,
- digestedData->hash.cbData);
- LocalFree(digestedData);
- }
break;
- }
case CMSG_ENVELOPED:
case CMSG_SIGNED:
FIXME("unimplemented for type %s\n", MSG_TYPE_STR(type));
@@ -751,6 +756,7 @@ static BOOL CDecodeMsg_DecodeContent(CDecodeMsg *msg, CRYPT_DER_BLOB *blob,
default:
{
CRYPT_CONTENT_INFO *info;
+ DWORD size;
ret = CryptDecodeObjectEx(X509_ASN_ENCODING, PKCS_CONTENT_INFO,
msg->msg_data.pbData, msg->msg_data.cbData, CRYPT_DECODE_ALLOC_FLAG,
More information about the wine-cvs
mailing list