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

CoSign PKCS7/CMS Signed Data

See more Digital Signatures Examples

Demonstrates how to add a 2nd signature to a CMS SignedData. This is to add an additional signature, SignerInfo and certificate(s) to an existing CMS signed data.

In this example, we cosign an existing pdf.p7s

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

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

local crypt = chilkat.Crypt2.new()
local cert = chilkat.Cert.new()

-- If loading from a smart card, set the smartcard PIN.
cert.smart_card_pin = "0000"

-- Load a certificate in some way, such as from a smart card.
-- Chilkat provides other methods to load from a .pfx, .pem, or from the Windows certificate stores..
local success = cert:load_from_smartcard("")
if not success then
    print(cert.last_error_text)
    return
end

success = crypt:set_signing_cert(cert)
if not success then
    print(crypt.last_error_text)
    return
end

-- Load the file to be co-signed.
-- NOTE:  This is to cosign a PDF file contained within a CMS (PKCS7) message.
-- (In other words, the PDF is contained within the CMS SignedData, rather than the other way around
-- where a CMS signature is contained within a PDF.  Use Chilkat's PDF class to sign a PDF, which is
-- to embed a CMS signature within the PDF.)
local bd = chilkat.BinData.new()
success = bd:load_file("qa_data/p7s/cosign/sample.pdf.p7s")
if not success then
    print("Failed to load pdf.p7s input file.")
    return
end

-- bd2 will contain the co-signed result.
local bd2 = chilkat.BinData.new()
success = crypt:co_sign(bd, cert, bd2)
if not success then
    print(crypt.last_error_text)
    return
end

success = bd:write_file("qa_output/cosigned.pdf.p7s")
if not success then
    print("Failed to save pdf.p7s output file.")
    return
end

print("Success!")