Visual FoxPro
Visual FoxPro
Create JWK Set Containing Certificates
See more Certificates Examples
Demonstrates how to create a JWK Set containing N certificates.Chilkat Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loCert1
LOCAL loCert2
LOCAL loCrypt
LOCAL loJson
LOCAL lcHexThumbprint
LOCAL lcBase64Thumbprint
LOCAL loPubKey
LOCAL loPubKeyJwk
lnSuccess = 0
* This example creates the following JWK Set from two certificates:
* {
* "keys": [
* {
* "kty": "RSA",
* "use": "sig",
* "kid": "BB8CeFVqyaGrGNuehJIiL4dfjzw",
* "x5t": "BB8CeFVqyaGrGNuehJIiL4dfjzw",
* "n": "nYf1jpn7cFdQ...9Iw",
* "e": "AQAB",
* "x5c": [
* "MIIDBTCCAe2...Z+NTZo"
* ]
* },
* {
* "kty": "RSA",
* "use": "sig",
* "kid": "M6pX7RHoraLsprfJeRCjSxuURhc",
* "x5t": "M6pX7RHoraLsprfJeRCjSxuURhc",
* "n": "xHScZMPo8F...EO4QQ",
* "e": "AQAB",
* "x5c": [
* "MIIC8TCCAdmgA...Vt5432GA=="
* ]
* }
* ]
* }
* First get two certificates from files.
loCert1 = CreateObject('Chilkat.Cert')
lnSuccess = loCert1.LoadFromFile("qa_data/certs/brasil_cert.pem")
IF (lnSuccess = 0) THEN
? loCert1.LastErrorText
RELEASE loCert1
CANCEL
ENDIF
loCert2 = CreateObject('Chilkat.Cert')
lnSuccess = loCert2.LoadFromFile("qa_data/certs/testCert.cer")
IF (lnSuccess = 0) THEN
? loCert2.LastErrorText
RELEASE loCert1
RELEASE loCert2
CANCEL
ENDIF
* We'll need this crypt object re-encode the SHA1 thumbprint from hex to base64.
loCrypt = CreateObject('Chilkat.Crypt2')
loJson = CreateObject('Chilkat.JsonObject')
* Let's begin with the 1st cert:
loJson.I = 0
loJson.UpdateString("keys[i].kty","RSA")
loJson.UpdateString("keys[i].use","sig")
lcHexThumbprint = loCert1.Sha1Thumbprint
lcBase64Thumbprint = loCrypt.ReEncode(lcHexThumbprint,"hex","base64")
loJson.UpdateString("keys[i].kid",lcBase64Thumbprint)
loJson.UpdateString("keys[i].x5t",lcBase64Thumbprint)
* (We're assuming these are RSA certificates)
* To get the modulus (n) and exponent (e), we need to get the cert's public key and then get its JWK.
loPubKey = CreateObject('Chilkat.PublicKey')
loCert1.GetPublicKey(loPubKey)
loPubKeyJwk = CreateObject('Chilkat.JsonObject')
loPubKeyJwk.Load(loPubKey.GetJwk())
loJson.UpdateString("keys[i].n",loPubKeyJwk.StringOf("n"))
loJson.UpdateString("keys[i].e",loPubKeyJwk.StringOf("e"))
* Now add the entire X.509 certificate
loJson.UpdateString("keys[i].x5c[0]",loCert1.GetEncoded())
* Now do the same for cert2..
loJson.I = 1
loJson.UpdateString("keys[i].kty","RSA")
loJson.UpdateString("keys[i].use","sig")
lcHexThumbprint = loCert2.Sha1Thumbprint
lcBase64Thumbprint = loCrypt.ReEncode(lcHexThumbprint,"hex","base64")
loJson.UpdateString("keys[i].kid",lcBase64Thumbprint)
loJson.UpdateString("keys[i].x5t",lcBase64Thumbprint)
loCert2.GetPublicKey(loPubKey)
loPubKeyJwk.Load(loPubKey.GetJwk())
loJson.UpdateString("keys[i].n",loPubKeyJwk.StringOf("n"))
loJson.UpdateString("keys[i].e",loPubKeyJwk.StringOf("e"))
* Now add the entire X.509 certificate
loJson.UpdateString("keys[i].x5c[0]",loCert2.GetEncoded())
* Emit the JSON..
loJson.EmitCompact = 0
? loJson.Emit()
RELEASE loCert1
RELEASE loCert2
RELEASE loCrypt
RELEASE loJson
RELEASE loPubKey
RELEASE loPubKeyJwk