facho: clip.py se adiciona nuevo comand 'sign-xml'.
* facho/cli.py: adiciona nuevo comando 'sign-xml' para firmar directamente un xml. * facho/fe/fe.py (DianXMLExtensionSigner.sign_xml_string): Nuevo metodo. FossilOrigin-Name: 61920c40da14a134de6392845b3e4d98ad2b1b683093038d6161c147669127e9
This commit is contained in:
		| @@ -1,7 +1,7 @@ | ||||
| # This file is part of facho.  The COPYRIGHT file at the top level of | ||||
| # this repository contains the full copyright notices and license terms. | ||||
|  | ||||
| from ..facho import FachoXML, FachoXMLExtension | ||||
| from ..facho import FachoXML, FachoXMLExtension, LXMLBuilder | ||||
| import xmlsig | ||||
| import xades | ||||
| from datetime import datetime | ||||
| @@ -187,8 +187,9 @@ class DianXMLExtensionSigner(FachoXMLExtension): | ||||
|     def from_pkcs12(self, filepath, password=None): | ||||
|         p12 = OpenSSL.crypto.load_pkcs12(open(filepath, 'rb').read(), password) | ||||
|  | ||||
|     # return (xpath, xml.Element) | ||||
|     def build(self, fachoxml): | ||||
|     def sign_xml_string(self, document): | ||||
|         xml = LXMLBuilder.from_string(document) | ||||
|          | ||||
|         signature = xmlsig.template.create( | ||||
|             xmlsig.constants.TransformInclC14N, | ||||
|             xmlsig.constants.TransformRsaSha256, | ||||
| @@ -217,31 +218,8 @@ class DianXMLExtensionSigner(FachoXMLExtension): | ||||
|         # TODO assert with http://www.sic.gov.co/hora-legal-colombiana | ||||
|         props = xades.template.create_signed_properties(qualifying, datetime=datetime.now()) | ||||
|         xades.template.add_claimed_role(props, "supplier") | ||||
|         #signed_do = xades.template.ensure_signed_data_object_properties(props) | ||||
|         #xades.template.add_data_object_format( | ||||
|         #    signed_do, "#R1", | ||||
|         #    identifier=xades.ObjectIdentifier("Idenfitier0", "Description") | ||||
|         #) | ||||
|         #xades.template.add_commitment_type_indication( | ||||
|         #    signed_do, | ||||
|         #    xades.ObjectIdentifier("Idenfitier0", "Description"), | ||||
|         #    qualifiers_type=["Tipo"], | ||||
|         #) | ||||
|  | ||||
|         #xades.template.add_commitment_type_indication( | ||||
|         #    signed_do, | ||||
|         #    xades.ObjectIdentifier("Idenfitier1", references=["#R1"]), | ||||
|         #    references=["#R1"], | ||||
|         #) | ||||
|         #xades.template.add_data_object_format( | ||||
|         #    signed_do, | ||||
|         #    "#RKI", | ||||
|         #    description="Desc", | ||||
|         #    mime_type="application/xml", | ||||
|         #    encoding="UTF-8", | ||||
|         #) | ||||
|  | ||||
|         fachoxml.root.append(signature) | ||||
|         xml.append(signature) | ||||
|  | ||||
|         policy = xades.policy.GenericPolicyId( | ||||
|             self.POLICY_ID, | ||||
| @@ -254,12 +232,20 @@ class DianXMLExtensionSigner(FachoXMLExtension): | ||||
|         ctx.sign(signature) | ||||
|         ctx.verify(signature) | ||||
|         #xmlsig take parent root | ||||
|         fachoxml.root.remove(signature) | ||||
|  | ||||
|         xml.remove(signature) | ||||
|          | ||||
|         fachoxml = FachoXML(xml,nsmap=NAMESPACES) | ||||
|         ublextension = fachoxml.fragment('/fe:Invoice/ext:UBLExtensions/ext:UBLExtension', append_not_exists=True) | ||||
|         extcontent = ublextension.find_or_create_element('/ext:UBLExtension:/ext:ExtensionContent') | ||||
|         fachoxml.append_element(extcontent, signature) | ||||
|         return fachoxml.tostring() | ||||
|          | ||||
|     # return (xpath, xml.Element) | ||||
|     def build(self, fachoxml): | ||||
|         xmlsigned = self.sign_xml_string(fachoxml.tostring()) | ||||
|         xml = LXMLBuilder.from_string(xmlsigned) | ||||
|         fachoxml.root = xml | ||||
|         return fachoxml | ||||
|          | ||||
|  | ||||
| class DianXMLExtensionAuthorizationProvider(FachoXMLExtension): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user