Необходимо реализовать формирование XML Digital Signatures на С++
Необходимо реализовать формирование 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