Visual FoxPro
Visual FoxPro
JWE using ECDH-ES+A256KW
See more JSON Web Encryption (JWE) Examples
Create a JWE with the following public/private key pair:
{
"kty": "EC",
"d": "jZCffzVqJjryBH4EoaN0oD-TyLXrW2XHoDdIuPZnk8c",
"use": "enc",
"crv": "P-256",
"kid": "evEK2thJMsWxBYRivXI8ykUf6n6zizLiLCGH3s58wKs",
"x": "LOakgGvxWBsWbCPLY6Vq6OuBktIqG8POXFXe7ngQ2oM",
"y": "voJvS6I-Mc4qqmEA_G2hLQqBck3a3vqaJbmzY7YPUD4",
"alg": "ECDH-ES+A256KW"
}
Also shows how to decrypt.
Chilkat Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loJson
LOCAL loPubkey
LOCAL loJwt
LOCAL loJweProtHdr
LOCAL loJwe
LOCAL lcPlainText
LOCAL lcStrJwe
LOCAL loPrivkey
LOCAL loJwe2
LOCAL lcDecryptedText
lnSuccess = 0
* This requires the Chilkat API to have been previously unlocked.
* See Global Unlock Sample for sample code.
* Create the following JSON:
* {
* "kty": "EC",
* "d": "jZCffzVqJjryBH4EoaN0oD-TyLXrW2XHoDdIuPZnk8c",
* "use": "enc",
* "crv": "P-256",
* "kid": "evEK2thJMsWxBYRivXI8ykUf6n6zizLiLCGH3s58wKs",
* "x": "LOakgGvxWBsWbCPLY6Vq6OuBktIqG8POXFXe7ngQ2oM",
* "y": "voJvS6I-Mc4qqmEA_G2hLQqBck3a3vqaJbmzY7YPUD4",
* "alg": "ECDH-ES+A256KW"
* }
loJson = CreateObject('Chilkat.JsonObject')
loJson.UpdateString("kty","EC")
loJson.UpdateString("d","jZCffzVqJjryBH4EoaN0oD-TyLXrW2XHoDdIuPZnk8c")
loJson.UpdateString("use","enc")
loJson.UpdateString("crv","P-256")
loJson.UpdateString("kid","evEK2thJMsWxBYRivXI8ykUf6n6zizLiLCGH3s58wKs")
loJson.UpdateString("x","LOakgGvxWBsWbCPLY6Vq6OuBktIqG8POXFXe7ngQ2oM")
loJson.UpdateString("y","voJvS6I-Mc4qqmEA_G2hLQqBck3a3vqaJbmzY7YPUD4")
loJson.UpdateString("alg","ECDH-ES+A256KW")
loPubkey = CreateObject('Chilkat.PublicKey')
lnSuccess = loPubkey.LoadFromString(loJson.Emit())
IF (lnSuccess = 0) THEN
? loPubkey.LastErrorText
RELEASE loJson
RELEASE loPubkey
CANCEL
ENDIF
* Build our protected header:
* {
* "alg": "ECDH-ES+A256KW",
* "enc": "A256GCM",
* "exp": 1621957030,
* "cty": "NJWT",
* "epk": {
* "kty": "EC",
* "x": "QLpJ_LpFx-6yJhsb4OvHwU1khLnviiOwYOvmf5clK7w"
* "y": "AJh7pJ3zZKDJkm8rbeG69GBooTosXJgSsvNFH0i3Vxnu"
* "crv": "BP-256"
* }
* }
* Use jwt only for getting the current date/time + 3600 seconds.
loJwt = CreateObject('Chilkat.Jwt')
loJweProtHdr = CreateObject('Chilkat.JsonObject')
loJweProtHdr.UpdateString("alg","ECDH-ES+A256KW")
loJweProtHdr.UpdateString("enc","A256GCM")
loJweProtHdr.UpdateInt("exp",loJwt.GenNumericDate(3600))
loJweProtHdr.UpdateString("cty","NJWT")
loJweProtHdr.UpdateString("epk.kty","EC")
loJweProtHdr.UpdateString("epk.x","LOakgGvxWBsWbCPLY6Vq6OuBktIqG8POXFXe7ngQ2oM")
loJweProtHdr.UpdateString("epk.y","voJvS6I-Mc4qqmEA_G2hLQqBck3a3vqaJbmzY7YPUD4")
loJweProtHdr.UpdateString("epk.crv","P-256")
loJwe = CreateObject('Chilkat.Jwe')
loJwe.SetProtectedHeader(loJweProtHdr)
loJwe.SetPublicKey(0,loPubkey)
lcPlainText = "This is the text to be encrypted."
lcStrJwe = loJwe.Encrypt(lcPlainText,"utf-8")
IF (loJwe.LastMethodSuccess <> 1) THEN
? loJwe.LastErrorText
RELEASE loJson
RELEASE loPubkey
RELEASE loJwt
RELEASE loJweProtHdr
RELEASE loJwe
CANCEL
ENDIF
? lcStrJwe
* Let's decrypt...
loPrivkey = CreateObject('Chilkat.PrivateKey')
lnSuccess = loPrivkey.LoadJwk(loJson.Emit())
IF (lnSuccess = 0) THEN
? loPrivkey.LastErrorText
RELEASE loJson
RELEASE loPubkey
RELEASE loJwt
RELEASE loJweProtHdr
RELEASE loJwe
RELEASE loPrivkey
CANCEL
ENDIF
loJwe2 = CreateObject('Chilkat.Jwe')
lnSuccess = loJwe2.LoadJwe(lcStrJwe)
IF (lnSuccess = 0) THEN
? loJwe2.LastErrorText
RELEASE loJson
RELEASE loPubkey
RELEASE loJwt
RELEASE loJweProtHdr
RELEASE loJwe
RELEASE loPrivkey
RELEASE loJwe2
CANCEL
ENDIF
loJwe2.SetPrivateKey(0,loPrivkey)
* Decrypt.
lcDecryptedText = loJwe2.Decrypt(0,"utf-8")
IF (loJwe2.LastMethodSuccess <> 1) THEN
? loJwe2.LastErrorText
RELEASE loJson
RELEASE loPubkey
RELEASE loJwt
RELEASE loJweProtHdr
RELEASE loJwe
RELEASE loPrivkey
RELEASE loJwe2
CANCEL
ENDIF
? lcDecryptedText
RELEASE loJson
RELEASE loPubkey
RELEASE loJwt
RELEASE loJweProtHdr
RELEASE loJwe
RELEASE loPrivkey
RELEASE loJwe2