Sample code for 30+ languages & platforms
PowerBuilder

Sign JSON (or any Text) to Create a Detached PKCS7 Signature

Demonstrates how to sign JSON or any string using a certificate + private key from a .p12/.pfx to create a detached PKCS7 signature. (A detached signature is one that does not embed the original signed data.)

Chilkat PowerBuilder Downloads

PowerBuilder
integer li_rc
long li_Success
oleobject loo_Crypt
oleobject loo_Cert
string ls_StringToSign
long li_Verified

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

loo_Crypt.HashAlgorithm = "sha256"

//  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 detached signature, which does NOT contain the original data.
//  To create a PKCS7 signature that contains the original data, see CAdES Sign JSON
loo_Crypt.Charset = "utf-8"

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

//  Verify the signature against the original data.
li_Verified = loo_Crypt.VerifyString(ls_StringToSign,loo_DetachedSig)
if li_Verified = 0 then
    Write-Debug loo_Crypt.LastErrorText
    destroy loo_Crypt
    destroy loo_Cert
    return
end if

Write-Debug "Success!"


destroy loo_Crypt
destroy loo_Cert