| ||||
| ||||
Добрый день! Как правильно проверить подпись сообщения, имеется присоединенный 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 еще что-то добавлять? | ||||
Ответы: | ||||
| ||||
Конечно, как минимум еще Content-Type: text/plain; charset="koi8-r" Content-Transfer-Encoding: quoted-printable (это из той части сообщения, которая приведена в вопросе). А вообще все написано в RFC 2633 | ||||