14.03.2005 20:29:26проверка подписи S/MIME Ответов: 1
Юрий
Добрый день! Как правильно проверить подпись сообщения, имеется присоединенный smime.p7s и секция сообщения вида
"
------=_NextPart_001_0006_01C528BA.11F9F870
Content-Type: text/plain;
charset="koi8-r"
Content-Transfer-Encoding: quoted-printable

signed mail"
пытаюсь проверить строку "signed mail" c помощью CryptVerifyDetachedMessageSignature:

std::vector<BYTE> pszSign;
//.....заполнение pszSign
BYTE* pbMessage = (BYTE*)"signed mail";
const BYTE* cbContent[] = {pbMessage};
DWORD dwSizeArray[1] = {dwMessage};

CRYPT_VERIFY_MESSAGE_PARA verifyPara;
PCCERT_CONTEXT pSignerCert = 0;

HCRYPTPROV hProv;
const char szProvider[]="Crypto-Pro Cryptographic Service Provider";
::CryptAcquireContext(&hProv,0,szProvider,2/*PROV_GOST_DH*/,CRYPT_VERIFYCONTEXT);
HCERTSTORE hStoreHandle = CertOpenStore(CERT_STORE_PROV_SYSTEM,0,hProv,CERT_SYSTEM_STORE_CURRENT_USER,L"MY");

memset(&verifyPara,0,sizeof(CRYPT_VERIFY_MESSAGE_PARA));
verifyPara.cbSize = sizeof(CRYPT_VERIFY_MESSAGE_PARA);
verifyPara.hCryptProv = hProv;
verifyPara.dwMsgAndCertEncodingType = X509_ASN_ENCODING|PKCS_7_ASN_ENCODING;
verifyPara.pfnGetSignerCertificate = MyGetSignerCertificateCallback;
verifyPara.pvGetArg = hStoreHandle;

res = ::CryptVerifyDetachedMessageSignature(&verifyPara, 0, &pszSign[0],
dwLength,
1,
cbContent,
dwSizeArray, &pSignerCert);
функция всегда возвращает "Invalid sinature",почему так? или надо в pbMessage еще что-то добавлять?
 
Ответы:
15.03.2005 9:59:49Kirill Sobolev
Конечно, как минимум еще
Content-Type: text/plain;
charset="koi8-r"
Content-Transfer-Encoding: quoted-printable
(это из той части сообщения, которая приведена в вопросе).
А вообще все написано в RFC 2633