категория: SIGNATURE_ERROR
код: SignatureValue
сообщение: неправильное значение подписи
Ниже приведен мой код и шаги, которые я выполняю в Python:
Код: Выделить всё
f = ET.parse(xml_basic_out)
xslt = ET.parse(xml_transform_step1_xslt)
transform = ET.XSLT(xslt)
newdom = transform(f)
new_xml = ET.tostring(newdom,encoding ="utf-8") # Removed all spaces and comments from the original xml
# print(new_xml.decode())
xmldsig = chilkat2.XmlDSig()
canonXml = xmldsig.CanonicalizeXml(new_xml.decode(),"C14N",False)
invoice_hash_digest = sha256(canonXml.encode()).digest()
print(invoice_hash_digest)
invice_hash_digest_b64_encoded = base64.b64encode()
print(f'Invoice Hash base64 encoded : {invice_hash_digest_b64_encoded.decode("utf-8")}')
with open(modified_invoice_hash_stp1, 'wb+') as o:
o.write(invice_hash_digest_b64_encoded)
os.system('cmd /c'+'"'+openssl+'"'+' '+'dgst -sha256 -sign '+private_key+' -out ' +digital_signature_step2+' '+modified_invoice_hash_stp1)
with open(digital_signature_step2, 'rb') as f:
data = f.read()
sig_b64 = base64.b64encode(data)
print(f'Digital Signature base64 encoded : {sig_b64.decode("utf-8")}')
- читаю XML и канонизирую его
- Создание хеша XML-файла и сохранение его в файле.
- Подписание хеша счета-фактуры (в байтах, а не в кодировке Base64) закрытым ключом (pem) с помощью команды openssl.
- кодирование конечного результата в base64
Может кто-нибудь мне помочь?
Подробнее здесь: https://stackoverflow.com/questions/781 ... -e-invoici