se usa POLICY_ID desde archivo local, actualizacion de commit [47fd230ff9]

FossilOrigin-Name: 190ab3228ef9e3fbfb4210ae74a8e332cf0aa9d6a0d476e561164bd76ae772f0
This commit is contained in:
bit4bit
2022-02-12 00:37:30 +00:00
parent a9564f9a70
commit 417de535f3
9 changed files with 25 additions and 46 deletions

View File

@@ -227,7 +227,7 @@ def sign_xml(private_key, passphrase, xmlfile, ssl=True, use_cache_policy=False,
if use_cache_policy:
warnings.warn("xades using cache policy")
signer = fe.DianXMLExtensionSigner(private_key, passphrase=passphrase, mockpolicy=use_cache_policy)
signer = fe.DianXMLExtensionSigner(private_key, passphrase=passphrase, localpolicy=use_cache_policy)
document = open(xmlfile, 'r').read().encode('utf-8')
with open(output, 'w') as f:
f.write(signer.sign_xml_string(document))
@@ -358,7 +358,7 @@ def sign_verify_xml(private_key, passphrase, xmlfile, ssl=True, use_cache_policy
warnings.warn("xades using cache policy")
print("THIS ONLY WORKS FOR DOCUMENTS GENERATE WITH FACHO")
signer = fe.DianXMLExtensionSignerVerifier(private_key, passphrase=passphrase, mockpolicy=use_cache_policy)
signer = fe.DianXMLExtensionSignerVerifier(private_key, passphrase=passphrase, localpolicy=use_cache_policy)
document = open(xmlfile, 'r').read().encode('utf-8')
if signer.verify_string(document):

View File

@@ -26,9 +26,8 @@ SCHEME_AGENCY_ATTRS = {
}
pwd = Path(__file__).parent
# RESOLUCION 0001: pagina 516
POLICY_ID = 'file://'+str(pwd)+'/data/dian/politicadefirmav2.pdf'
POLICY_ID = 'https://facturaelectronica.dian.gov.co/politicadefirma/v2/politicadefirmav2.pdf'
POLICY_NAME = u'Política de firma para facturas electrónicas de la República de Colombia.'
@@ -62,6 +61,7 @@ def mock_xades_policy():
with patch('xades.policy.urllib.urlopen') as mock:
class UrllibPolicyMock:
def read(self):
# Usamos contenido de archivo local
cur_dir = os.path.dirname(os.path.abspath(__file__))
data_dir = os.path.join(cur_dir, 'data', 'dian')
policy_file = os.path.join(data_dir, 'politicadefirmav2.pdf')
@@ -281,20 +281,20 @@ class DianXMLExtensionSoftwareSecurityCode(FachoXMLExtension):
class DianXMLExtensionSigner:
def __init__(self, pkcs12_path, passphrase=None, mockpolicy=False):
def __init__(self, pkcs12_path, passphrase=None, localpolicy=True):
self._pkcs12_data = open(pkcs12_path, 'rb').read()
self._passphrase = None
self._mockpolicy = mockpolicy
self._localpolicy = localpolicy
if passphrase:
self._passphrase = passphrase.encode('utf-8')
@classmethod
def from_bytes(cls, data, passphrase=None, mockpolicy=False):
def from_bytes(cls, data, passphrase=None, localpolicy=True):
self = cls.__new__(cls)
self._pkcs12_data = data
self._passphrase = None
self._mockpolicy = mockpolicy
self._localpolicy = localpolicy
if passphrase:
self._passphrase = passphrase.encode('utf-8')
@@ -360,7 +360,7 @@ class DianXMLExtensionSigner:
ctx.load_pkcs12(OpenSSL.crypto.load_pkcs12(self._pkcs12_data,
self._passphrase))
if self._mockpolicy:
if self._localpolicy:
with mock_xades_policy():
ctx.sign(signature)
ctx.verify(signature)
@@ -480,10 +480,10 @@ class DianZIP:
class DianXMLExtensionSignerVerifier:
def __init__(self, pkcs12_path_or_bytes, passphrase=None, mockpolicy=False):
def __init__(self, pkcs12_path_or_bytes, passphrase=None, localpolicy=True):
self._pkcs12_path_or_bytes = pkcs12_path_or_bytes
self._passphrase = None
self._mockpolicy = mockpolicy
self._localpolicy = localpolicy
if passphrase:
self._passphrase = passphrase.encode('utf-8')
@@ -508,7 +508,7 @@ class DianXMLExtensionSignerVerifier:
ctx.load_pkcs12(OpenSSL.crypto.load_pkcs12(pkcs12_data,
self._passphrase))
try:
if self._mockpolicy:
if self._localpolicy:
with mock_xades_policy():
ctx.verify(signature)
else:

View File

@@ -13,7 +13,7 @@ def DIANWriteSigned(xml, filename, private_key, passphrase, use_cache_policy=Fal
if dian_signer is None:
dian_signer = fe.DianXMLExtensionSigner
signer = dian_signer(private_key, passphrase=passphrase, mockpolicy=use_cache_policy)
signer = dian_signer(private_key, passphrase=passphrase, localpolicy=use_cache_policy)
with open(filename, 'w') as f:
f.write(signer.sign_xml_string(document))

View File

@@ -284,8 +284,8 @@ class InformacionGeneral:
class DianXMLExtensionSigner(fe.DianXMLExtensionSigner):
def __init__(self, pkcs12_path, passphrase=None, mockpolicy=False):
super().__init__(pkcs12_path, passphrase=passphrase, mockpolicy=mockpolicy)
def __init__(self, pkcs12_path, passphrase=None, localpolicy=True):
super().__init__(pkcs12_path, passphrase=passphrase, localpolicy=localpolicy)
def _element_extension_content(self, fachoxml):
return fachoxml.builder.xpath(fachoxml.root, './ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent')