Необходимо реализовать формирование XML Digital Signatures на С++

Илья6 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
07.12.2018

Необходимо реализовать формирование XML Digital Signatures (https://www.xml.com/pub/a/2001/08/08/xmldsig.html) на C++

Входные данные:

xml-документ в виде строки (необходимо подписать корневой элемент)

сертификат ЭЦП (файл p12 в виде base64 строки от двоичных данных)

пароль к сертификату (строка)

CanonicalizationMethod - алгоритм, применяемый для каноникализации xml ("http://www.w3.org/TR/2001/REC-xml-c14n-20010315")

DigestMethod - алгоритм вычисления хэша ("sha256")

SignatureMethod - алогоритм, используемый для генерирования и валидации подписи ("rsa-sha256")

На выходе должны получить подписанный xml-документ в виде строки

Пример на python с использованием библиотек OpenSSL, signxml, lxml

from OpenSSL import crypto

from signxml import XMLSigner, methods

from lxml import etree

data_to_sign = 'XML СТРОКА'

p12 = crypto.load_pkcs12(file("ФАЙЛ СЕРТИФИКАТА ЭЦП", 'rb').read(), "ПАРОЛЬ К СЕРТИФИКАТУ")

key = crypto.dump_privatekey(crypto.FILETYPE_PEM, p12.get_privatekey())

cert = crypto.dump_certificate(crypto.FILETYPE_PEM, p12.get_certificate())

root = etree.fromstring(data_to_sign)

signed_root = XMLSigner(methods.enveloped, signature_algorithm=u'rsa-sha256', digest_algorithm=u'sha256',

c14n_algorithm=u'http://www.w3.org/TR/2001/REC-xml-c14n-20010315').sign(root,

key=key, cert=cert)

output = etree.tostring(signed_root, encoding='utf8', method='xml')

Дополнительно необходимо все это оформить в виде внешней компоненты 1С

методика создания и пример https://its.1c.ru/db/metod8dev#content:3221:hdoc