Sample code for 30+ languages & platforms
Lua Requires Chilkat v9.5.0.75+

Create CAdES-BES .p7m for FatturaPA XML Invoice

See more Digital Signatures Examples

Demonstrates how to create a CAdES BES invoice.xml.p7m for the Italian FatturaPA exchange system.

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

-- This requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.

local crypt = chilkat.Crypt2.new()

-- Use a digital certificate and private key from a PFX file (.pfx or .p12).
local pfxPath = "qa_data/pfx/cert_test123.pfx"
local pfxPassword = "test123"

local cert = chilkat.Cert.new()
local success = cert:load_pfx_file(pfxPath, pfxPassword)
if not success then
    print(cert.last_error_text)
    return
end

-- Provide the signing cert (with associated private key).
success = crypt:set_signing_cert(cert)
if not success then
    print(crypt.last_error_text)
    return
end

-- Indicate that SHA-256 should be used.
crypt.hash_algorithm = "sha256"

-- Specify the signed attributes to be included.
-- (This is what makes it CAdES-BES compliant.)
local jsonSignedAttrs = chilkat.JsonObject.new()
jsonSignedAttrs:update_int("contentType", 1)
jsonSignedAttrs:update_int("signingTime", 1)
jsonSignedAttrs:update_int("messageDigest", 1)
jsonSignedAttrs:update_int("signingCertificateV2", 1)
crypt.signing_attributes = jsonSignedAttrs:emit()

local inFile = "qa_data/xml/IT01234567890_11002.xml"
local sigFile = "qa_output/IT01234567890_11002.xml.p7m"

-- Create the CAdES-BES signature, which contains the original data.
success = crypt:create_p7_m(inFile, sigFile)
if not success then
    print(crypt.last_error_text)
    return
end

print("Success.")