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

Создание XAdES подписи XML документа

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

C++
    XADES_SIGN_PARA xadesSignPara = { sizeof(xadesSignPara) };
    xadesSignPara.dwSignatureType = XML_XADES_SIGNATURE_TYPE_ENVELOPED | XADES_BES; // Указываем тип усовершенствованной обернутой (ENVELOPED) подписи XADES_BES
    xadesSignPara.pSignerCert = context;

    XADES_SIGN_MESSAGE_PARA para = { sizeof(para) };
    para.pXadesSignPara = &xadesSignPara;

    // Формируем данные для подписания
    DWORD cbToBeSigned = (DWORD)strlen(XML_DATA);
    BYTE *pbToBeSigned = (BYTE*)XML_DATA;

    PCRYPT_DATA_BLOB pSignedMessage = 0;
    // Создаем подписанное сообщение
    if (!XadesSign(&para, NULL, FALSE, pbToBeSigned, cbToBeSigned, &pSignedMessage)) {
        cout << "XadesSign() failed" << endl;
        return -1;
    }

    vector<unsigned char> message(pSignedMessage->cbData);
    copy(pSignedMessage->pbData, pSignedMessage->pbData + pSignedMessage->cbData, message.begin());