Sample code for 30+ languages & platforms
Lua

Sign String to create a CAdES-T Signature, using HTTP Proxy to Access Timestamp Server

This example will sign a string to create a CAdEST-T signature. It will use an HTTP proxy to access the timestamp server.

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

local crypt = chilkat.Crypt2.new()

local cert = chilkat.Cert.new()
cert.smart_card_pin = "123456"
local success = cert:load_from_smartcard("")
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 strToSign = "Hello World!"

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

-- -------------------------------------------------------------------------
-- The purpose of this example is to show how an HTTP object with custom
-- settings can be used to access the Internet when signing.
-- Access to the Internet is needed to communicate with the timestamp server.
local http = chilkat.Http.new()
-- This can be a domain name, hostname, or IP address.
http.proxy_domain = "172.16.16.56"
http.proxy_port = 808
http.proxy_login = "myProxyLogin"
http.proxy_password = "myProxyPassword"
crypt:set_tsa_http_obj(http)
-- -------------------------------------------------------------------------

-- 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"))

print("Success.")