|
|
|
@ -39,14 +39,16 @@ class Assinatura(object): |
|
|
|
self._checar_certificado() |
|
|
|
self._inicializar_cripto() |
|
|
|
try: |
|
|
|
doc_xml = libxml2.parseMemory(xml.encode('utf-8'), len(xml.encode('utf-8'))) |
|
|
|
doc_xml = libxml2.parseMemory(xml.encode('utf-8'), |
|
|
|
len(xml.encode('utf-8'))) |
|
|
|
|
|
|
|
signNode = xmlsec.TmplSignature(doc_xml, xmlsec.transformInclC14NId(), |
|
|
|
signNode = xmlsec.TmplSignature(doc_xml, |
|
|
|
xmlsec.transformInclC14NId(), |
|
|
|
xmlsec.transformRsaSha1Id(), None) |
|
|
|
|
|
|
|
|
|
|
|
doc_xml.getRootElement().addChild(signNode) |
|
|
|
refNode = signNode.addReference(xmlsec.transformSha1Id(), |
|
|
|
refNode = signNode.addReference( |
|
|
|
xmlsec.transformSha1Id(), |
|
|
|
None, '#NFe43150602261542000143550010000000761792265342', None) |
|
|
|
|
|
|
|
refNode.addTransform(xmlsec.transformEnvelopedId()) |
|
|
|
@ -55,7 +57,9 @@ class Assinatura(object): |
|
|
|
keyInfoNode.addX509Data() |
|
|
|
|
|
|
|
dsig_ctx = xmlsec.DSigCtx() |
|
|
|
chave = xmlsec.cryptoAppKeyLoad(filename=str(self.arquivo), format=xmlsec.KeyDataFormatPkcs12, |
|
|
|
chave = xmlsec.cryptoAppKeyLoad( |
|
|
|
filename=str(self.arquivo), |
|
|
|
format=xmlsec.KeyDataFormatPkcs12, |
|
|
|
pwd=str(self.senha), pwdCallback=None, pwdCallbackCtx=None) |
|
|
|
|
|
|
|
dsig_ctx.signKey = chave |
|
|
|
@ -65,14 +69,16 @@ class Assinatura(object): |
|
|
|
dsig_ctx.destroy() |
|
|
|
|
|
|
|
if status != xmlsec.DSigStatusSucceeded: |
|
|
|
raise RuntimeError('Erro ao realizar a assinatura do arquivo; status: "' + str(status) + '"') |
|
|
|
raise RuntimeError( |
|
|
|
'Erro ao realizar a assinatura do arquivo; status: "' + |
|
|
|
str(status) + '"') |
|
|
|
|
|
|
|
xpath = doc_xml.xpathNewContext() |
|
|
|
xpath.xpathRegisterNs('sig', NAMESPACE_SIG) |
|
|
|
certificados = xpath.xpathEval('//sig:X509Data/sig:X509Certificate') |
|
|
|
for i in range(len(certificados)-1): |
|
|
|
certificados[i].unlinkNode() |
|
|
|
certificados[i].freeNode() |
|
|
|
certs = xpath.xpathEval('//sig:X509Data/sig:X509Certificate') |
|
|
|
for i in range(len(certs)-1): |
|
|
|
certs[i].unlinkNode() |
|
|
|
certs[i].freeNode() |
|
|
|
|
|
|
|
xml = doc_xml.serialize() |
|
|
|
return xml |
|
|
|
|