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

Sign String to create a CAdES-T Signature

See more CAdES Examples

This example will sign a string to create a CAdEST-T signature.

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 the certificate + private key currently inserted into a smartcard reader.
local cert = chilkat.Cert.new()

-- If we wish to provide the smartcard PIN (otherwise the user will be prompted by the operating system).
cert.smart_card_pin = "000000"
local success = cert:load_from_smartcard("")
if not success then
    print(cert.last_error_text)
    return
end

-- Note: It is also possible to use certs from .pfx/.p12, .pem, or other sources such as
-- pre-installed Windows certificates.

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 strToSign = "THIS IS MY ID"

local bd = chilkat.BinData.new()
bd:append_string(strToSign, "utf-8")

-- This creates the CAdES-T signature.  During the signature creation, it
-- communicates with the TSA to get a timestampToken.
-- The contents of bd are signed and replaced with the CAdES-T signature (which embeds the original content).
success = crypt:opaque_sign_bd(bd)
if not success then
    print(crypt.last_error_text)
    return
end

-- Get the signature in base64 format:
print(bd:get_encoded("base64_mime"))

-- Or save the signature to a file.
bd:write_file("qa_output/cades-t_sample.p7m")

print("Success.")