Sample code for 30+ languages & platforms
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

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