Не удается при проверки подписи использовать сертификат, не зарегистрированный в системном хранилище.
Для этого использую поле pfnGetSignerCertificate структуры CRYPT_VERIFY_MESSAGE_PARA для задания callback метода
для указания сертификата, точно так же как делал для работы через Windows CryptoApi (где это работало). Но cades.dll
не вызывает этот callback и ищет сертификат в системном хранилище и если его нет возвращает ошибку.
Делаю так:
CRYPT_VERIFY_MESSAGE_PARA cryptVerifyPara;
memset(&cryptVerifyPara, 0, sizeof(cryptVerifyPara));
cryptVerifyPara.cbSize = sizeof(cryptVerifyPara);
cryptVerifyPara.dwMsgAndCertEncodingType = X509_ASN_ENCODING | PKCS_7_ASN_ENCODING;
cryptVerifyPara.pfnGetSignerCertificate = &GetCadesCertificateCallBack;
cryptVerifyPara.pvGetArg = (LPVOID) cert.GetContext();CADES_VERIFY_MESSAGE_PARA verifyPara;
memset(&verifyPara, 0, sizeof(verifyPara));
verifyPara.dwSize = sizeof(CADES_VERIFY_MESSAGE_PARA);
verifyPara.pVerifyMessagePara = &cryptVerifyPara;
verifyPara.pCadesVerifyPara = 0;
CADES_VERIFICATION_INFO *pVerifyInfo = 0;
const BYTE* rgpbToBeSigned[1];
rgpbToBeSigned[0] = pbyData;
BOOL bChecked = CadesVerifyDetachedMessage(&verifyPara, 0,
pbySign, dwSignLen, 1, rgpbToBeSigned, &dwDataLen, &pVerifyInfo);
Отредактировано пользователем 27 октября 2010 г. 19:03:10(UTC)
| Причина: Не указана