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

Получение доказательств подлинности

Пример получения доказательств достоверности подписи из сообщения с помощью низкоуровневых функций КриптоПро ЭЦП 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;
    }

    ALG_ID hashAlgId = CadesMsgGetSigningCertIdHashAlg(hMsg,0);
    if(!hashAlgId)
    {
        CryptMsgClose(hMsg);
        std::cout << "CadesMsgGetSigningCertIdHashAlg() failed" << std::endl;
        return;
    }

    PCADES_BLOB_ARRAY pTimestamps = 0;
    if(!CadesMsgGetSignatureTimestamps(hMsg, 0, &pTimestamps))
    {
        CryptMsgClose(hMsg);
        std::cout << "CadesGetSignatureTimestamps() failed" << std::endl;
        return;
    }

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

    PCADES_BLOB_ARRAY pCerts = 0;
    if(!CadesMsgGetCertificateValues(hMsg, 0, &pCerts))
    {
        CryptMsgClose(hMsg);
        std::cout << "CadesGetCertificateValues() failed" << std::endl;
        return;
    }

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

    PCADES_BLOB_ARRAY pCRLs = 0;
    PCADES_BLOB_ARRAY pOCSPs = 0;
    if(!CadesMsgGetRevocationValues(hMsg, 0, &pCRLs, &pOCSPs))
    {
        CryptMsgClose(hMsg);
        std::cout << "CadesGetRevocationValues() failed" << std::endl;
        return;
    }

    PCADES_BLOB_ARRAY pCadesCTimestamps = 0;
    if(!CadesMsgGetCadesCTimestamps(hMsg, 0, &pCadesCTimestamps))
    {
        CryptMsgClose(hMsg);
        std::cout << "CadesMsgGetCadesCTimestamps() failed" << std::endl;
        return;
    }

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

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

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

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

    std::cout << "All CAdES attributes obtained successfully." << std::endl;