Python знак xml XML фирменный пакет. Как добавить xml placehoder для тега Signature? - PullRequest
0 голосов
/ 10 апреля 2020

Я новичок в Python. Я установил пакет xml sign и выполняю процесс xml подписи.

Ссылка на пакет python: https://pypi.org/project/signxml/

Мой xml файл генерируется. Однако XML код подписи немного отличается. Я был в состоянии соответствовать большей части, но у меня нет идеи, как соответствовать следующей.

Может кто-нибудь, пожалуйста, помогите мне в этом.

Другая часть является следующей меткой

<Signature>

Над этой частью должна быть эта

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">

enter image description here

Когда я искал в знаке xml основной файл, я обнаружил следующее примечание.

To specify the location of an enveloped signature within **data**, insert a
``<ds:Signature Id="placeholder"></ds:Signature>`` element in **data** (where
"ds" is the "http://www.w3.org/2000/09/xmldsig#" namespace). This element will
be replaced by the generated signature, and excised when generating the digest.

Как внести изменения, чтобы это изменить. Ниже приведен мой python код

from lxml import etree
import xml.etree.ElementTree as ET
from signxml import XMLSigner, XMLVerifier
import signxml

el = ET.parse('example.xml')
root = el.getroot()

#cert = open("key/public.pem").read()
key = open("key/private.pem").read()

signed_root = XMLSigner(method=signxml.methods.enveloped,signature_algorithm='rsa-sha512',digest_algorithm="sha512").sign(root, key=key)

tree = ET.ElementTree(signed_root)


#dv = tree.findall(".//DigestValue");
#print(dv);

tree.write("new_signed_file.xml")

. Он берет один файл xml, выполняет цифровую подпись и создает новый файл.

Может кто-нибудь подсказать мне, где и какие изменения я должен сделать для этих требований?

1 Ответ

1 голос
/ 10 апреля 2020

Я предполагаю, что вы используете python знак xml

Go до python и откройте этот файл Python \ Lib \ site-packages \ signxml \ __init __. py

Откройте файл __ init __. py и внесите следующие изменения.

Найти следующий код

def _unpack(self, data, reference_uris):
        sig_root = Element(ds_tag("Signature"), nsmap=self.namespaces)

Изменить с помощью следующего кода.

def _unpack(self, data, reference_uris):
        #sig_root = Element(ds_tag("Signature"), nsmap=self.namespaces)
        sig_root = Element(ds_tag("Signature"), xmlns="http://www.w3.org/2000/09/xmldsig#")

После внесения этого изменения повторно скомпилировать python знак xml пакет .

Повторно создать новый xml файл подписи.

...