Lianja
Lianja
JWE using A256GCMKW
See more JSON Web Encryption (JWE) Examples
This example demonstrates creating a JCE with AES GCM key wrap.Chilkat Lianja Downloads
llSuccess = .F.
// This requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
lcPlaintext = "My text to enrypt"
loJwe = createobject("CkJwe")
// 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("CkJsonObject")
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("CkPrng")
loJweProtHdr.AppendString("iv",loPrng.RandomString(16,.T.,.T.,.T.))
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 <> .T.) then
? loJwe.LastErrorText
release loJwe
release loJweProtHdr
release loPrng
return
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("CkJwe")
llSuccess = loJwe2.LoadJwe(lcStrJwe)
if (llSuccess <> .T.) then
? loJwe2.LastErrorText
release loJwe
release loJweProtHdr
release loPrng
release loJwe2
return
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 <> .T.) then
? loJwe2.LastErrorText
release loJwe
release loJweProtHdr
release loPrng
release loJwe2
return
endif
? "original text: "
? lcOriginalPlaintext
release loJwe
release loJweProtHdr
release loPrng
release loJwe2