Module: wine Branch: master Commit: c9a54102883bab8357993b982c4ef1954c4dcbf2 URL: http://source.winehq.org/git/wine.git/?a=commit;h=c9a54102883bab8357993b982c...
Author: Juan Lang juan.lang@gmail.com Date: Tue Aug 7 14:57:04 2007 -0700
crypt32: According to MSDN, inner content is only decoded when the content type is data.
---
dlls/crypt32/msg.c | 30 ++++++++++++++++++------------ 1 files changed, 18 insertions(+), 12 deletions(-)
diff --git a/dlls/crypt32/msg.c b/dlls/crypt32/msg.c index 30ec62a..70527bd 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);