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

Create CAdES-T Signature using Aruba TSA Server (servizi.arubapec.it)

See more CAdES Examples

Demonstrates how to create a signature with an external timestamp (using the Aruba TSA Server) that certifies the time of signing.

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

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

local crypt = chilkat.Crypt2.new()

-- This example will use a certificate + private key from a .pfx/.p12 file.
-- On Windows systems, it is also possible to use certs on smartcards/usb tokens or certs pre-installed in the Windows registry.
local cert = chilkat.Cert.new()

local pfxPath = "qa_data/pfx/myCertAndKey.p12"
local pfxPassword = "test123"

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

success = crypt:set_signing_cert(cert)

-- Use SHA-256 rather than the default of SHA-1
crypt.hash_algorithm = "sha256"

-- Create JSON that tells Chilkat what signing attributes to include:
local attrs = chilkat.JsonObject.new()
attrs:update_bool("contentType", true)
attrs:update_bool("signingTime", true)
attrs:update_bool("messageDigest", true)
attrs:update_bool("signingCertificateV2", true)

-- A CAdES-T signature is one that includes a timestampToken created by an online TSA (time stamping authority).
-- We must include the TSA's URL, as well as a few options to indicate what is desired.
-- This example uses the Aruba TSA server, which requires a login/password for the HTTPS request.
attrs:update_bool("timestampToken.enabled", true)
attrs:update_string("timestampToken.tsaUrl", "https://servizi.arubapec.it/tsa/ngrequest.php")

attrs:update_string("timestampToken.tsaUsername", "arubaTsaUsername")
attrs:update_string("timestampToken.tsaPassword", "arubaTsaPassword")

attrs:update_bool("timestampToken.addNonce", false)
attrs:update_bool("timestampToken.requestTsaCert", true)
attrs:update_string("timestampToken.hashAlg", "sha256")

crypt.signing_attributes = attrs:emit()

local inFile = "qa_data/json/sample.json"
local outFile = "qa_output/sample_cades_t.p7m"

-- This creates the CAdES-T signature.  During the signature creation, it
-- communicates with the TSA to get a timestampToken.
success = crypt:create_p7_m(inFile, outFile)
if not success then
    print(crypt.last_error_text)
    return
end

print("Success.")