crypt32: Simplify CryptVerifyMessageSignature.

This commit is contained in:
Juan Lang 2008-09-08 12:58:25 -07:00 committed by Alexandre Julliard
parent cb5385e326
commit 8c0e089d68
1 changed files with 7 additions and 41 deletions

View File

@ -80,6 +80,8 @@ static CERT_INFO *CRYPT_GetSignerCertInfoFromMsg(HCRYPTMSG msg,
} }
} }
} }
else
SetLastError(CRYPT_E_UNEXPECTED_MSG_TYPE);
return certInfo; return certInfo;
} }
@ -179,34 +181,11 @@ BOOL WINAPI CryptVerifyDetachedMessageSignature(
return ret; return ret;
} }
static BOOL CRYPT_CopyParam(void *pvData, DWORD *pcbData, const void *src,
DWORD len)
{
BOOL ret = TRUE;
if (!pvData)
*pcbData = len;
else if (*pcbData < len)
{
*pcbData = len;
SetLastError(ERROR_MORE_DATA);
ret = FALSE;
}
else
{
*pcbData = len;
memcpy(pvData, src, len);
}
return ret;
}
BOOL WINAPI CryptVerifyMessageSignature(PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, BOOL WINAPI CryptVerifyMessageSignature(PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
DWORD dwSignerIndex, const BYTE* pbSignedBlob, DWORD cbSignedBlob, DWORD dwSignerIndex, const BYTE* pbSignedBlob, DWORD cbSignedBlob,
BYTE* pbDecoded, DWORD* pcbDecoded, PCCERT_CONTEXT* ppSignerCert) BYTE* pbDecoded, DWORD* pcbDecoded, PCCERT_CONTEXT* ppSignerCert)
{ {
BOOL ret = FALSE; BOOL ret = FALSE;
DWORD size;
CRYPT_CONTENT_INFO *contentInfo;
HCRYPTMSG msg; HCRYPTMSG msg;
TRACE("(%p, %d, %p, %d, %p, %p, %p)\n", TRACE("(%p, %d, %p, %d, %p, %p, %p)\n",
@ -226,26 +205,14 @@ BOOL WINAPI CryptVerifyMessageSignature(PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
return FALSE; return FALSE;
} }
if (!CryptDecodeObjectEx(pVerifyPara->dwMsgAndCertEncodingType, msg = CryptMsgOpenToDecode(pVerifyPara->dwMsgAndCertEncodingType, 0, 0,
PKCS_CONTENT_INFO, pbSignedBlob, cbSignedBlob, pVerifyPara->hCryptProv, NULL, NULL);
CRYPT_DECODE_ALLOC_FLAG | CRYPT_DECODE_NOCOPY_FLAG, NULL,
(LPBYTE)&contentInfo, &size))
return FALSE;
if (strcmp(contentInfo->pszObjId, szOID_RSA_signedData))
{
LocalFree(contentInfo);
SetLastError(CRYPT_E_UNEXPECTED_MSG_TYPE);
return FALSE;
}
msg = CryptMsgOpenToDecode(pVerifyPara->dwMsgAndCertEncodingType, 0,
CMSG_SIGNED, pVerifyPara->hCryptProv, NULL, NULL);
if (msg) if (msg)
{ {
ret = CryptMsgUpdate(msg, contentInfo->Content.pbData, ret = CryptMsgUpdate(msg, pbSignedBlob, cbSignedBlob, TRUE);
contentInfo->Content.cbData, TRUE);
if (ret && pcbDecoded) if (ret && pcbDecoded)
ret = CRYPT_CopyParam(pbDecoded, pcbDecoded, ret = CryptMsgGetParam(msg, CMSG_CONTENT_PARAM, 0, pbDecoded,
contentInfo->Content.pbData, contentInfo->Content.cbData); pcbDecoded);
if (ret) if (ret)
{ {
CERT_INFO *certInfo = CRYPT_GetSignerCertInfoFromMsg(msg, CERT_INFO *certInfo = CRYPT_GetSignerCertInfoFromMsg(msg,
@ -279,7 +246,6 @@ BOOL WINAPI CryptVerifyMessageSignature(PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
} }
CryptMsgClose(msg); CryptMsgClose(msg);
} }
LocalFree(contentInfo);
TRACE("returning %d\n", ret); TRACE("returning %d\n", ret);
return ret; return ret;
} }