From c9a54102883bab8357993b982c4ef1954c4dcbf2 Mon Sep 17 00:00:00 2001 From: Juan Lang Date: Tue, 7 Aug 2007 14:57:04 -0700 Subject: [PATCH] crypt32: According to MSDN, inner content is only decoded when the content type is data. --- dlls/crypt32/msg.c | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/dlls/crypt32/msg.c b/dlls/crypt32/msg.c index 30ec62a4fab..70527bd627c 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);