Sample code for 30+ languages & platforms
Visual FoxPro

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 Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loHttp
LOCAL lcJsonStr
LOCAL loJarr
LOCAL loJson
LOCAL loBdPkcs7
LOCAL loCrypt
LOCAL loCert
LOCAL loPubKey

lnSuccess = 0

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

loHttp = CreateObject('Chilkat.Http')

lcJsonStr = loHttp.QuickGetStr("https://api-acpt.ehealth.fgov.be/etee/v1/etks?identifier=12345678901&type=SSIN")
IF (loHttp.LastMethodSuccess = 0) THEN
    ? loHttp.LastErrorText
    RELEASE loHttp
    CANCEL
ENDIF

? lcJsonStr

* 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.
loJarr = CreateObject('Chilkat.JsonArray')
lnSuccess = loJarr.Load(lcJsonStr)
IF (lnSuccess = 0) THEN
    ? "Failed to load JSON."
    RELEASE loHttp
    RELEASE loJarr
    CANCEL
ENDIF

loJson = loJarr.ObjectAt(0)
loBdPkcs7 = CreateObject('Chilkat.BinData')
loBdPkcs7.AppendEncoded(loJson.StringOf("value"),"base64")
RELEASE loJson

* Let's verify the PKCS7, and then examine the signing cert,
* and get the signing cert's public key.
loCrypt = CreateObject('Chilkat.Crypt2')

* Validate the signedData PKCS7, and replace the contents of bdPkcs7 with the extracted signed content.
lnSuccess = loCrypt.OpaqueVerifyBd(loBdPkcs7)
IF (lnSuccess = 0) THEN
    ? loCrypt.LastErrorText
    RELEASE loHttp
    RELEASE loJarr
    RELEASE loBdPkcs7
    RELEASE loCrypt
    CANCEL
ENDIF

* The signed content is the DER of a certificate.
* In other words, bdPkcs7 now contains a certificate.
loCert = CreateObject('Chilkat.Cert')
lnSuccess = loCert.LoadFromBd(loBdPkcs7)
IF (lnSuccess = 0) THEN
    ? loCert.LastErrorText
    RELEASE loHttp
    RELEASE loJarr
    RELEASE loBdPkcs7
    RELEASE loCrypt
    RELEASE loCert
    CANCEL
ENDIF

* Show some certificate information:
? "Subject: " + loCert.SubjectDN
? "Serial: " + loCert.SerialNumber
? "Issuer: " + loCert.IssuerDN

* Let's get the cert's public key...
loPubKey = CreateObject('Chilkat.PublicKey')
loCert.GetPublicKey(loPubKey)

* OK, you now have the public key and can do whatever is needed..
? loPubKey.KeyType
? STR(loPubKey.KeySize)

RELEASE loHttp
RELEASE loJarr
RELEASE loBdPkcs7
RELEASE loCrypt
RELEASE loCert
RELEASE loPubKey