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

Create CAdES-BES .p7m using Smart Card or USB Token

See more Digital Signatures Examples

Demonstrates how to create a CAdES BES invoice.xml.p7m using a certificate stored on a smart card or USB token.

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 certificate on a smartcard or USB token.
local cert = chilkat.Cert.new()
-- Load the certificate on the smartcard currently in the reader (or on the USB token).
-- Pass an empty string to allow Chilkat to automatically choose the CSP (Cryptographi Service Provider).
-- See Load Certificate on Smartcard for information about explicitly selecting a particular CSP.
local success = cert:load_from_smartcard("")
if not success then
    print(cert.last_error_text)
    return
end

-- Provide the smartcard PIN.
-- If the PIN is not explicitly provided here, the Windows OS should
-- display a dialog for the PIN.
cert.smart_card_pin = "000000"

-- Provide the certificate for signing.
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.")