Sample code for 30+ languages & platforms
Tcl

Sign a File to Create a .p7s (Detached Signature)

See more Encryption Examples

_LANGUAGE_ example to create a detached signature file (.p7s) for any type file. The signature can be verified by calling VerifyP7S and passing the original filename and the .p7s filename.

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 .p7s as output:
set inFile "/Users/chilkat/testData/pdf/sample.pdf"
set sigFile "/Users/chilkat/testData/p7s/sample.p7s"

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

set success [CkCrypt2_VerifyP7S $crypt $inFile $sigFile]
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