Sample code for 30+ languages & platforms
PowerBuilder

Get ETK Public Key (api-acpt.ehealth.fgov.be)

See more Belgian eHealth Platform Examples

The following URL returns JSON, which contains a PKCS7 signed data:
https://api-acpt.ehealth.fgov.be/etee/v1/etks?identifier=12345678901&type=SSIN

This example extracts the signed data, validates it, and then extracts the public key from the certificate (obtained from signed content in the PKCS7)

Note: The URL above uses "12345678901" which is not valid. You should replace it with a valid number.

Chilkat PowerBuilder Downloads

PowerBuilder
integer li_rc
integer li_Success
oleobject loo_Http
string ls_JsonStr
oleobject loo_Jarr
oleobject loo_Json
oleobject loo_BdPkcs7
oleobject loo_Crypt
oleobject loo_Cert
oleobject loo_PubKey

li_Success = 0

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

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

ls_JsonStr = loo_Http.QuickGetStr("https://api-acpt.ehealth.fgov.be/etee/v1/etks?identifier=12345678901&type=SSIN")
if loo_Http.LastMethodSuccess = 0 then
    Write-Debug loo_Http.LastErrorText
    destroy loo_Http
    return
end if

Write-Debug ls_JsonStr

// The JSON contains something like this:

// [
//     {
//         "key": {
//             "applicationIdentifier": "",
//             "ssin": "12345678901"
//         },
//         "value": "MIAGCSq....AAAAAAAA=="
//     }
// ]

// Note: The above is a JSON array (not a JSON object)
// It should be loaded into a Chilkat JSON array.
loo_Jarr = create oleobject
li_rc = loo_Jarr.ConnectToNewObject("Chilkat.JsonArray")

li_Success = loo_Jarr.Load(ls_JsonStr)
if li_Success = 0 then
    Write-Debug "Failed to load JSON."
    destroy loo_Http
    destroy loo_Jarr
    return
end if

loo_Json = loo_Jarr.ObjectAt(0)
loo_BdPkcs7 = create oleobject
li_rc = loo_BdPkcs7.ConnectToNewObject("Chilkat.BinData")

loo_BdPkcs7.AppendEncoded(loo_Json.StringOf("value"),"base64")
destroy loo_Json

// Let's verify the PKCS7, and then examine the signing cert,
// and get the signing cert's public key.
loo_Crypt = create oleobject
li_rc = loo_Crypt.ConnectToNewObject("Chilkat.Crypt2")

// Validate the signedData PKCS7, and replace the contents of bdPkcs7 with the extracted signed content.
li_Success = loo_Crypt.OpaqueVerifyBd(loo_BdPkcs7)
if li_Success = 0 then
    Write-Debug loo_Crypt.LastErrorText
    destroy loo_Http
    destroy loo_Jarr
    destroy loo_BdPkcs7
    destroy loo_Crypt
    return
end if

// The signed content is the DER of a certificate.
// In other words, bdPkcs7 now contains a certificate.
loo_Cert = create oleobject
li_rc = loo_Cert.ConnectToNewObject("Chilkat.Cert")

li_Success = loo_Cert.LoadFromBd(loo_BdPkcs7)
if li_Success = 0 then
    Write-Debug loo_Cert.LastErrorText
    destroy loo_Http
    destroy loo_Jarr
    destroy loo_BdPkcs7
    destroy loo_Crypt
    destroy loo_Cert
    return
end if

// Show some certificate information:
Write-Debug "Subject: " + loo_Cert.SubjectDN
Write-Debug "Serial: " + loo_Cert.SerialNumber
Write-Debug "Issuer: " + loo_Cert.IssuerDN

// Let's get the cert's public key...
loo_PubKey = create oleobject
li_rc = loo_PubKey.ConnectToNewObject("Chilkat.PublicKey")

loo_Cert.GetPublicKey(loo_PubKey)

// OK, you now have the public key and can do whatever is needed..
Write-Debug loo_PubKey.KeyType
Write-Debug string(loo_PubKey.KeySize)


destroy loo_Http
destroy loo_Jarr
destroy loo_BdPkcs7
destroy loo_Crypt
destroy loo_Cert
destroy loo_PubKey