Sample code for 30+ languages & platforms
PowerBuilder

Sign JSON to Create CAdES P7S Bytes

See more CAdES Examples

Demonstrates how to sign JSON using a certificate + private key from a .p12/.pfx to create a CAdES P7S byte array.

Chilkat PowerBuilder Downloads

PowerBuilder
integer li_rc
long li_Success
oleobject loo_Crypt
oleobject loo_Cert
oleobject loo_JsonSigningAttrs
string ls_OriginalJson

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")

li_Success = loo_Cert.LoadPfxFile("qa_data/pfx/cert_test123.pfx","test123")
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

//  The CadesEnabled property applies to all methods that create 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

//  Create the CAdES-BES attached signature, which contains the original data.
loo_Crypt.Charset = "utf-8"

loo_CadesP7s = loo_Crypt.OpaqueSignString("{ ~"abc~": 123}")
if loo_Crypt.LastMethodSuccess = 0 then
    Write-Debug loo_Crypt.LastErrorText
    destroy loo_Crypt
    destroy loo_Cert
    destroy loo_JsonSigningAttrs
    return
end if

//  Verify the signature and extract the original JSON:
ls_OriginalJson = loo_Crypt.OpaqueVerifyString(loo_CadesP7s)
if loo_Crypt.LastMethodSuccess = 0 then
    Write-Debug loo_Crypt.LastErrorText
    destroy loo_Crypt
    destroy loo_Cert
    destroy loo_JsonSigningAttrs
    return
end if

Write-Debug "Original JSON: " + ls_OriginalJson

Write-Debug "Success!"


destroy loo_Crypt
destroy loo_Cert
destroy loo_JsonSigningAttrs