Sample code for 30+ languages & platforms
Visual FoxPro

JWE using A256GCMKW

See more JSON Web Encryption (JWE) Examples

This example demonstrates creating a JCE with AES GCM key wrap.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL lcPlaintext
LOCAL loJwe
LOCAL loJweProtHdr
LOCAL loPrng
LOCAL lcAesWrappingKey
LOCAL lcStrJwe
LOCAL loJwe2
LOCAL lcOriginalPlaintext

lnSuccess = 0

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

lcPlaintext = "My text to enrypt"

loJwe = CreateObject('Chilkat.Jwe')

* First build the JWE Protected Header: 

*         {
*             "alg": "A256GCMKW",
*             "kid": "18ec08e1-bfa9-4d95-b205-2b4dd1d4321d",
*             "tag": "kfPduVQ3T3H6vnewt--ksw",
*             "iv": "KkYT0GX_2jHlfqN_",
*             "enc": "A128CBC-HS256"
*         }

loJweProtHdr = CreateObject('Chilkat.JsonObject')
loJweProtHdr.AppendString("alg","A256GCMKW")
* kid is optional
loJweProtHdr.AppendString("kid","18ec08e1-bfa9-4d95-b205-2b4dd1d4321d")
* tag is optional
loJweProtHdr.AppendString("tag","kfPduVQ3T3H6vnewt--ksw")
loJweProtHdr.AppendString("enc","A256GCM")
* the iv should be 16 random chars.
loPrng = CreateObject('Chilkat.Prng')
loJweProtHdr.AppendString("iv",loPrng.RandomString(16,1,1,1))
loJwe.SetProtectedHeader(loJweProtHdr)

? "JWE Protected Header: " + loJweProtHdr.Emit()
? "--"

* Given that we have 256-bit AES, our key should be 32 bytes.
* The ascii string here is 32 bytes, therefore the 2nd arg is "ascii" to use these
* ascii chars directly as the key.
lcAesWrappingKey = "2baf4f730f5e4542b428593ef9cceb0e"
loJwe.SetWrappingKey(0,lcAesWrappingKey,"ascii")

* Encrypt and return the JWE:
lcStrJwe = loJwe.Encrypt(lcPlaintext,"utf-8")
IF (loJwe.LastMethodSuccess <> 1) THEN
    ? loJwe.LastErrorText
    RELEASE loJwe
    RELEASE loJweProtHdr
    RELEASE loPrng
    CANCEL
ENDIF

* Show the JWE we just created:
? lcStrJwe

* Decrypt the JWE that was just produced.
* 1) Load the JWE.
* 2) Set the AES wrapping key.
* 3) Decrypt.
loJwe2 = CreateObject('Chilkat.Jwe')
lnSuccess = loJwe2.LoadJwe(lcStrJwe)
IF (lnSuccess <> 1) THEN
    ? loJwe2.LastErrorText
    RELEASE loJwe
    RELEASE loJweProtHdr
    RELEASE loPrng
    RELEASE loJwe2
    CANCEL
ENDIF

* Set the AES wrap key.  Important to use "ascii"
loJwe2.SetWrappingKey(0,lcAesWrappingKey,"ascii")

* Decrypt.
lcOriginalPlaintext = loJwe2.Decrypt(0,"utf-8")
IF (loJwe2.LastMethodSuccess <> 1) THEN
    ? loJwe2.LastErrorText
    RELEASE loJwe
    RELEASE loJweProtHdr
    RELEASE loPrng
    RELEASE loJwe2
    CANCEL
ENDIF

? "original text: "
? lcOriginalPlaintext

RELEASE loJwe
RELEASE loJweProtHdr
RELEASE loPrng
RELEASE loJwe2