Lua
Lua
SII XML Digital Signature
See more uncategorized Examples
Example for SII XML Digital Signature.Chilkat Lua Downloads
local chilkat = require("chilkat")
local success = true
-- Load the XML to be signed.
local xmlToSign = chilkat.Xml.new()
success = xmlToSign:load_xml_file("c:/aaworkarea/eduardo/sii_unsigned.xml")
if not success then
print(xmlToSign.last_error_text)
return
end
-- The sample XML to be signed looks like this:
-- <?xml version="1.0" encoding="ISO-8859-1"?>
-- <EnvioDTE xmlns="http://www.sii.cl/SiiDte" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sii.cl/SiiDte EnvioDTE_v10.xsd" version="1.0">
-- <SetDTE ID="SetDocF0T33_20240425_170512">
-- <Caratula version="1.0">
-- <RutEmisor>99999999-4</RutEmisor>
-- <RutEnvia>12345678-6</RutEnvia>
-- <RutReceptor>888888000-K</RutReceptor>
-- <FchResol>2014-08-22</FchResol>
-- <NroResol>80</NroResol>
-- <TmstFirmaEnv>2024-04-25T17:05:13</TmstFirmaEnv>
-- <SubTotDTE>
-- <TpoDTE>33</TpoDTE>
-- <NroDTE>1</NroDTE>
-- </SubTotDTE>
-- </Caratula>
-- <DTE version="1.0">
-- <Documento ID="F555T55">
-- ...
-- </Documento>
-- </EnvioDTE>
local gen = chilkat.XmlDSigGen.new()
gen.sig_location = "EnvioDTE|SetDTE|DTE"
gen.sig_location_mod = 0
gen.sig_namespace_prefix = ""
gen.sig_namespace_uri = "http://www.w3.org/2000/09/xmldsig#"
gen.signed_info_canon_alg = "C14N"
gen.signed_info_digest_method = "sha1"
-- -------- Reference 1 --------
local xml1 = chilkat.Xml.new()
xml1.tag = "Transforms"
xml1:update_attr_at("Transform", true, "Algorithm", "http://www.w3.org/TR/2001/REC-xml-c14n-20010315")
gen:add_same_doc_ref2("F511T33", "sha1", xml1, "")
-- Provide a certificate + private key. (PFX password is test123)
local cert = chilkat.Cert.new()
success = cert:load_pfx_file("qa_data/pfx/cert_test123.pfx", "test123")
if not success then
print(cert.last_error_text)
return
end
gen:set_x509_cert(cert, true)
gen.key_info_type = "X509Data+KeyValue"
gen.x509_type = "Certificate"
-- Load XML to be signed...
local sbXml = chilkat.StringBuilder.new()
xmlToSign:get_xml_sb(sbXml)
gen.behaviors = "IndentedSignature"
-- Sign the XML...
success = gen:create_xml_dsig_sb(sbXml)
if not success then
print(gen.last_error_text)
return
end
-- -----------------------------------------------
-- Save the signed XML to a file.
success = sbXml:write_file("c:/temp/qa_output/signedXml.xml", "utf-8", false)
print(sbXml:get_as_string())
-- ----------------------------------------
-- Verify the signatures we just produced...
local verifier = chilkat.XmlDSig.new()
success = verifier:load_signature_sb(sbXml)
if not success then
print(verifier.last_error_text)
return
end
local numSigs = verifier.num_signatures
local verifyIdx = 0
while verifyIdx < numSigs do
verifier.selector = verifyIdx
local verified = verifier:verify_signature(true)
if not verified then
print(verifier.last_error_text)
return
end
verifyIdx = verifyIdx + 1
end
print("All signatures were successfully verified.")