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