Статус: Активный участник
Группы: Участники
Зарегистрирован: 26.10.2011(UTC) Сообщений: 61
Сказал(а) «Спасибо»: 2 раз
|
Вытащил сертификат из pkcs файла, проверка все равно не проходит, как так то? Код:
char *signContent;
ifstream sign("c:\\users\\timur\\desktop\\sign_pkcs7.sig", ios::in | ios::binary | ios::ate);
ifstream::pos_type size = sign.tellg();
signContent = new char[(int)size + 1];
sign.seekg(0, ios::beg);
sign.read(signContent, size);
sign.close();
signContent[size] = '\0';
HCRYPTMSG hMsg;
if(!(hMsg = CryptMsgOpenToDecode(
MY_TYPE,
0,
0,
NULL,
NULL,
NULL)))
{
printf("WTF!!!!!!!!! %d\n", GetLastError());
}
BYTE *pbDecoded;
DWORD cbDecoded;
DWORD cbSignerCertInfo;
PCERT_INFO pSignerCertInfo;
PCCERT_CONTEXT pSignerCertContext;
if(!CryptMsgUpdate(
hMsg,
(BYTE *)signContent,
size,
TRUE))
{
printf("WTF!!!!!!!! %d\n", GetLastError());
}
if(!CryptMsgGetParam(
hMsg,
CMSG_CONTENT_PARAM,
0,
NULL,
&cbDecoded))
{
printf("WTF!!!!!! %d\n", GetLastError());
}
pbDecoded = new BYTE[cbDecoded];
if(!CryptMsgGetParam(
hMsg,
CMSG_CONTENT_PARAM,
0,
pbDecoded,
&cbDecoded))
{
printf("WTF!!!!!! %d\n", GetLastError());
}
if(!CryptMsgGetParam(
hMsg,
CMSG_SIGNER_CERT_INFO_PARAM,
0,
NULL,
&cbSignerCertInfo))
{
printf("WTF!!!!!! %d\n", GetLastError());
}
pSignerCertInfo = (PCERT_INFO)malloc(cbSignerCertInfo);
if(!CryptMsgGetParam(
hMsg,
CMSG_SIGNER_CERT_INFO_PARAM,
0,
pSignerCertInfo,
&cbSignerCertInfo))
{
printf("WTF!!!!!! %d\n", GetLastError());
}
if(!(hStoreHandle = CertOpenStore(
CERT_STORE_PROV_MSG,
MY_TYPE,
NULL,
0,
hMsg)))
{
printf("WTF!!!!!! %d\n", GetLastError());
}
if(!(pSignerCertContext = CertGetSubjectCertificateFromStore(
hStoreHandle,
MY_TYPE,
pSignerCertInfo)))
{
printf("WTF!!!!!! %d\n", GetLastError());
}
LPWSTR pszName = (LPWSTR)malloc(256);
if(!CertGetNameString(
pSignerCertContext,
CERT_NAME_SIMPLE_DISPLAY_TYPE,
0,
NULL,
pszName,
256))
{
printf("WTF!!!!!! %d\n", GetLastError());
ReportFailure();
}
printf("signer %s\n", pszName);
CRYPT_VERIFY_MESSAGE_PARA VerifyParams;
ZeroMemory(&VerifyParams, sizeof(VerifyParams));
VerifyParams.cbSize = sizeof(VerifyParams);
VerifyParams.dwMsgAndCertEncodingType = MY_TYPE;
VerifyParams.hCryptProv = 0;
VerifyParams.pfnGetSignerCertificate = NULL;
VerifyParams.pvGetArg = NULL;
if(CryptVerifyDetachedMessageSignature(
&VerifyParams,
0,
(BYTE *)signContent,
size,
1,
MessageArray,
MessageSizeArray,
&pSignerCertContext
))
{
printf("Message verified. \n");
}
else
{
printf("CryptVerifyDetachedMessageSignature error %d.\n", GetLastError());
exit(1);
}
При вызове CryptVerifyDetachedMessageSignature Ошибка -2147024809 - Incorect parameter ((. Отредактировано пользователем 28 февраля 2012 г. 19:12:50(UTC)
| Причина: Не указана
|