Sample code for 30+ languages & platforms
PowerBuilder

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 PowerBuilder Downloads

PowerBuilder
integer li_rc
long li_Success
oleobject loo_Crypt
oleobject loo_Cert
oleobject loo_CmsOptions
oleobject loo_JsonSigningAttrs
string ls_TextToSign
string ls_SigBase64

li_Success = 0

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

loo_Crypt = create oleobject
li_rc = loo_Crypt.ConnectToNewObject("Chilkat.Crypt2")
if li_rc < 0 then
    destroy loo_Crypt
    MessageBox("Error","Connecting to COM object failed")
    return
end if

loo_Cert = create oleobject
li_rc = loo_Cert.ConnectToNewObject("Chilkat.Cert")

//  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..
li_Success = loo_Cert.LoadFromSmartcard("")
if li_Success <> 1 then
    Write-Debug loo_Cert.LastErrorText
    destroy loo_Crypt
    destroy loo_Cert
    return
end if

//  Tell the crypt component to use this cert.
li_Success = loo_Crypt.SetSigningCert(loo_Cert)
if li_Success <> 1 then
    Write-Debug loo_Crypt.LastErrorText
    destroy loo_Crypt
    destroy loo_Cert
    return
end if

loo_CmsOptions = create oleobject
li_rc = loo_CmsOptions.ConnectToNewObject("Chilkat.JsonObject")

//  Setting "DigestData" causes OID 1.2.840.113549.1.7.5 (digestData) to be used.
loo_CmsOptions.UpdateBool("DigestData",1)
loo_CmsOptions.UpdateBool("OmitAlgorithmIdNull",1)
loo_Crypt.CmsOptions = loo_CmsOptions.Emit()

//  The CadesEnabled property applies to all methods that create CMS/PKCS7 signatures. 
//  To create a CAdES-BES signature, set this property equal to true. 
loo_Crypt.CadesEnabled = 1

loo_Crypt.HashAlgorithm = "sha256"

loo_JsonSigningAttrs = create oleobject
li_rc = loo_JsonSigningAttrs.ConnectToNewObject("Chilkat.JsonObject")

loo_JsonSigningAttrs.UpdateInt("contentType",1)
loo_JsonSigningAttrs.UpdateInt("signingTime",1)
loo_JsonSigningAttrs.UpdateInt("messageDigest",1)
loo_JsonSigningAttrs.UpdateInt("signingCertificateV2",1)
loo_Crypt.SigningAttributes = loo_JsonSigningAttrs.Emit()

//  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:
loo_Crypt.IncludeCertChain = 0

//  Make sure we sign the utf-8 byte representation of the JSON string
loo_Crypt.Charset = "utf-8"

//  Create the CAdES-BES signature.
ls_TextToSign = "~"issuer~"~"address~"~"branchID~"~"0~"~"country~"~"EG~"~"regionCity..."

loo_Crypt.EncodingMode = "base64"
ls_SigBase64 = loo_Crypt.SignStringENC(ls_TextToSign)
if loo_Crypt.LastMethodSuccess = 0 then
    Write-Debug loo_Crypt.LastErrorText
    destroy loo_Crypt
    destroy loo_Cert
    destroy loo_CmsOptions
    destroy loo_JsonSigningAttrs
    return
end if

Write-Debug "Base64 signature:"
Write-Debug ls_SigBase64


destroy loo_Crypt
destroy loo_Cert
destroy loo_CmsOptions
destroy loo_JsonSigningAttrs