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

Создание подписи (упрощённые функции)

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

C++
    CRYPT_SIGN_MESSAGE_PARA signPara = { sizeof(signPara) };
    signPara.dwMsgEncodingType = X509_ASN_ENCODING | PKCS_7_ASN_ENCODING;
    signPara.pSigningCert = pContext; // 0 for window
    signPara.HashAlgorithm.pszObjId = szOID_OIWSEC_sha1;

    CADES_SIGN_MESSAGE_PARA para = { sizeof(para) };
    para.pSignMessagePara = &signPara;

    std::vector<BYTE> data(10,25);

    const BYTE *pbToBeSigned[] = { &data[0] };
    DWORD cbToBeSigned[] = { (DWORD)data.size() };

    PCRYPT_DATA_BLOB pSignedMessage = 0;
    if(!CadesSignMessage(&para,FALSE,1,pbToBeSigned,cbToBeSigned,
        &pSignedMessage))
    {
        std::cout << "CadesSignMessage() failed" << std::endl;
        return empty;
    }

    std::vector<BYTE> message(pSignedMessage->cbData);
    std::copy(pSignedMessage->pbData,
        pSignedMessage->pbData + pSignedMessage->cbData,message.begin());

    if(!CadesFreeBlob(pSignedMessage))
    {
        std::cout << "CadesFreeBlob() failed" << std::endl;
        return empty;
    }

    return message;