Sample code for 30+ languages & platforms
Tcl

Sign a File to Create a .p7m File (using a PFX)

See more Encryption Examples

_LANGUAGE_ example to sign a file creating a .p7m file as output. The .p7m contains the signed contents of the original file. It can be verified and restored by calling VerifyP7M.

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

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

set crypt [new_CkCrypt2]

# Use a digital certificate and private key from a PFX file (.pfx or .p12).
set signingCertSubject "Acme Inc"
set pfxFilename "/Users/chilkat/testData/pfx/acme.pfx"
set pfxPassword "test123"

set certStore [new_CkCertStore]

set success [CkCertStore_LoadPfxFile $certStore $pfxFilename $pfxPassword]
if {$success != 1} then {
    puts [CkCertStore_lastErrorText $certStore]
    delete_CkCrypt2 $crypt
    delete_CkCertStore $certStore
    exit
}

set jsonCN [new_CkJsonObject]

CkJsonObject_UpdateString $jsonCN "CN" $signingCertSubject

set cert [new_CkCert]

set success [CkCertStore_FindCert $certStore $jsonCN $cert]
if {$success == 0} then {
    puts "Failed to find certificate by subject common name."
    delete_CkCrypt2 $crypt
    delete_CkCertStore $certStore
    delete_CkJsonObject $jsonCN
    delete_CkCert $cert
    exit
}

# Tell the crypt component to use this cert.
set success [CkCrypt2_SetSigningCert $crypt $cert]

# We can sign any type of file, creating a .p7m as output:
set inFile "/Users/chilkat/testData/pdf/sample.pdf"
set outputFile "/Users/chilkat/testData/p7m/sample.pdf.p7m"
set success [CkCrypt2_CreateP7M $crypt $inFile $outputFile]
if {$success == 0} then {
    puts [CkCrypt2_lastErrorText $crypt]
    delete_CkCrypt2 $crypt
    delete_CkCertStore $certStore
    delete_CkJsonObject $jsonCN
    delete_CkCert $cert
    exit
}

# Verify and restore the original file:
set success [CkCrypt2_SetVerifyCert $crypt $cert]

set inFile $outputFile
set outputFile "/Users/chilkat/testData/pdf/restored.pdf"

set success [CkCrypt2_VerifyP7M $crypt $inFile $outputFile]
if {$success == 0} then {
    puts [CkCrypt2_lastErrorText $crypt]
    delete_CkCrypt2 $crypt
    delete_CkCertStore $certStore
    delete_CkJsonObject $jsonCN
    delete_CkCert $cert
    exit
}

puts "Success!"

delete_CkCrypt2 $crypt
delete_CkCertStore $certStore
delete_CkJsonObject $jsonCN
delete_CkCert $cert