Tcl
Tcl
Create Egypt ITIDA CAdES-BES .p7s Signature (with strings in-memory)
See more Egypt ITIDA Examples
Demonstrates how to create a .p7s signature that fits Egypt's ITIDA requirements.Note: This example requires Chilkat v9.5.0.75 or greater.
Chilkat Tcl Downloads
load ./chilkat.dll
set success 0
# This example assumes the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
set crypt [new_CkCrypt2]
set cert [new_CkCert]
# There are many ways to load the certificate.
# This example was created for a customer using an ePass2003 USB token.
# Assuming the USB token is the only source of a hardware-based private key..
set success [CkCert_LoadFromSmartcard $cert ""]
if {$success != 1} then {
puts [CkCert_lastErrorText $cert]
delete_CkCrypt2 $crypt
delete_CkCert $cert
exit
}
# Tell the crypt component to use this cert.
set success [CkCrypt2_SetSigningCert $crypt $cert]
if {$success != 1} then {
puts [CkCrypt2_lastErrorText $crypt]
delete_CkCrypt2 $crypt
delete_CkCert $cert
exit
}
set cmsOptions [new_CkJsonObject]
# Setting "DigestData" causes OID 1.2.840.113549.1.7.5 (digestData) to be used.
CkJsonObject_UpdateBool $cmsOptions "DigestData" 1
CkJsonObject_UpdateBool $cmsOptions "OmitAlgorithmIdNull" 1
CkCrypt2_put_CmsOptions $crypt [CkJsonObject_emit $cmsOptions]
# The CadesEnabled property applies to all methods that create CMS/PKCS7 signatures.
# To create a CAdES-BES signature, set this property equal to true.
CkCrypt2_put_CadesEnabled $crypt 1
CkCrypt2_put_HashAlgorithm $crypt "sha256"
set jsonSigningAttrs [new_CkJsonObject]
CkJsonObject_UpdateInt $jsonSigningAttrs "contentType" 1
CkJsonObject_UpdateInt $jsonSigningAttrs "signingTime" 1
CkJsonObject_UpdateInt $jsonSigningAttrs "messageDigest" 1
CkJsonObject_UpdateInt $jsonSigningAttrs "signingCertificateV2" 1
CkCrypt2_put_SigningAttributes $crypt [CkJsonObject_emit $jsonSigningAttrs]
# By default, all the certs in the chain of authentication are included in the signature.
# If desired, we can choose to only include the signing certificate:
CkCrypt2_put_IncludeCertChain $crypt 0
# Make sure we sign the utf-8 byte representation of the JSON string
CkCrypt2_put_Charset $crypt "utf-8"
# Create the CAdES-BES signature.
set textToSign "\"issuer\"\"address\"\"branchID\"\"0\"\"country\"\"EG\"\"regionCity..."
CkCrypt2_put_EncodingMode $crypt "base64"
set sigBase64 [CkCrypt2_signStringENC $crypt $textToSign]
if {[CkCrypt2_get_LastMethodSuccess $crypt] == 0} then {
puts [CkCrypt2_lastErrorText $crypt]
delete_CkCrypt2 $crypt
delete_CkCert $cert
delete_CkJsonObject $cmsOptions
delete_CkJsonObject $jsonSigningAttrs
exit
}
puts "Base64 signature:"
puts "$sigBase64"
delete_CkCrypt2 $crypt
delete_CkCert $cert
delete_CkJsonObject $cmsOptions
delete_CkJsonObject $jsonSigningAttrs