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

Create a CAdES-T Signature

See more CAdES Examples

Demonstrates how to create a signature with an external timestamp that certifies the time of signing. This requires an online TSA (Time Stamping Authority) service that is capable of producing RFC 3161 compliant timestamps.

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.
-- Except for the TSA URL, the options shown here are typically what you would need.
attrs:update_bool("timestampToken.enabled", true)
attrs:update_string("timestampToken.tsaUrl", "https://freetsa.org/tsr")
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.")