Развернуть все
Свернуть все

Проверка подписи (низкоуровневые функции)

Пример проверки подписанного сообщения с помощью низкоуровневых функций КриптоПро ЭЦП SDK

C++
    HCRYPTMSG hMsg = CryptMsgOpenToDecode(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
        0,0,0,0,0);
    if(!hMsg)
    {
        std::cout << "CryptMsgOpenToDecode() failed" << std::endl;
        return;
    }

    if(!CryptMsgUpdate(hMsg,&message[0],(DWORD)message.size(),TRUE))
    {
        CryptMsgClose(hMsg);
        std::cout << "CryptMsgUpdate() failed" << std::endl;
        return;
    }

    PCADES_VERIFICATION_INFO pInfo = 0;
    if(!CadesMsgVerifySignature(hMsg,0,0,&pInfo))
    {
        CadesFreeVerificationInfo(pInfo);
        CryptMsgClose(hMsg);
        std::cout << "CadesMsgVerifySignature() failed" << std::endl;
        return;
    }

    if(pInfo->dwStatus != CADES_VERIFY_SUCCESS )
        std::cout << "Message is not verified successfully." << std::endl;
    else
        std::cout << "Message verified successfully." << std::endl;

    if(!CadesFreeVerificationInfo(pInfo))
    {
        CryptMsgClose(hMsg);
        std::cout << "CadesFreeVerificationInfo() failed" << std::endl;
        return;
    }

    if(!CryptMsgClose(hMsg))
    {
        std::cout << "CryptMsgGetParam() failed" << std::endl;
        return;
    }

    // Конец проверки сообщения