Sample code for 30+ languages & platforms
AutoIt

JWE with DEFLATE Compression

See more JSON Web Encryption (JWE) Examples

Demonstrates how to DEFLATE ("zip") compress the JWE payload prior to encryption.

Note: This example requires Chilkat v9.5.0.66 or greater.

Chilkat AutoIt Downloads

AutoIt
Local $bSuccess = False

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

; Note: This example requires Chilkat v9.5.0.66 or greater.

; Create some plaintext to be encrypted.
; This example will demonstrate with and without DEFLATE (zip) compression.
$oSbPlainText = ObjCreate("Chilkat.StringBuilder")
Local $bCrLf = True
Local $sLine = "Live long and prosper."
$oSbPlainText.AppendLine($sLine,$bCrLf)
$oSbPlainText.AppendLine($sLine,$bCrLf)
$oSbPlainText.AppendLine($sLine,$bCrLf)
$oSbPlainText.AppendLine($sLine,$bCrLf)

; The text to be encrypted:
ConsoleWrite($oSbPlainText.GetAsString() & @CRLF)

$oJwe = ObjCreate("Chilkat.Jwe")

; Build the JWE Protected Header: {"alg":"A128KW","enc":"A128CBC-HS256","zip":"DEF"}
; The "zip":"DEF" parameter indicates that the plaintext payload should
; be compressed prior to encryption.
$oJweProtHdr = ObjCreate("Chilkat.JsonObject")
$oJweProtHdr.AppendString("alg","A128KW")
$oJweProtHdr.AppendString("enc","A128CBC-HS256")
$oJweProtHdr.AppendString("zip","DEF")
$oJwe.SetProtectedHeader($oJweProtHdr)

; Set the AES key wrap key:
Local $sAesWrappingKey = "GawgguFyGrWKav7AX4VKUg"
$oJwe.SetWrappingKey(0,$sAesWrappingKey,"base64url")

; Encrypt and return the JWE in sbJweCompressed:
$oSbJweCompressed = ObjCreate("Chilkat.StringBuilder")
$bSuccess = $oJwe.EncryptSb($oSbPlainText,"utf-8",$oSbJweCompressed)
If ($bSuccess <> True) Then
    ConsoleWrite($oJwe.LastErrorText & @CRLF)
    Exit
EndIf

; Show the compressed JWE:
ConsoleWrite($oSbJweCompressed.GetAsString() & @CRLF)
ConsoleWrite("size of compressed JWE: " & $oSbJweCompressed.Length & @CRLF)

; Now create a JWE without compression.
$oJweProtHdr.Delete("zip")
; Make sure to update the shared protected header:
$oJwe.SetProtectedHeader($oJweProtHdr)

$oSbJweUncompressed = ObjCreate("Chilkat.StringBuilder")
$bSuccess = $oJwe.EncryptSb($oSbPlainText,"utf-8",$oSbJweUncompressed)
If ($bSuccess <> True) Then
    ConsoleWrite($oJwe.LastErrorText & @CRLF)
    Exit
EndIf

; Show the uncompressed JWE:
ConsoleWrite($oSbJweUncompressed.GetAsString() & @CRLF)
ConsoleWrite("size of uncompressed JWE: " & $oSbJweUncompressed.Length & @CRLF)

; Decrypting is the same whether compression is used or not.
; The "zip" header in the JWE indicates that the payload should be 
; automatically decompressed (inflated) after decrypting.
$oJwe2 = ObjCreate("Chilkat.Jwe")
$bSuccess = $oJwe2.LoadJweSb($oSbJweCompressed)
If ($bSuccess <> True) Then
    ConsoleWrite($oJwe2.LastErrorText & @CRLF)
    Exit
EndIf

; Set the AES wrap key.
$oJwe2.SetWrappingKey(0,$sAesWrappingKey,"base64url")

; Decrypt (also automatically decompresses).
$oSbOriginalText = ObjCreate("Chilkat.StringBuilder")
$bSuccess = $oJwe2.DecryptSb(0,"utf-8",$oSbOriginalText)
If ($bSuccess <> True) Then
    ConsoleWrite($oJwe2.LastErrorText & @CRLF)
    Exit
EndIf

ConsoleWrite("original text from compressed JWE: " & @CRLF)
ConsoleWrite($oSbOriginalText.GetAsString() & @CRLF)

; -----------------------------------------------------------
; Do the same with the uncompressed JWE

$bSuccess = $oJwe2.LoadJweSb($oSbJweUncompressed)
If ($bSuccess <> True) Then
    ConsoleWrite($oJwe2.LastErrorText & @CRLF)
    Exit
EndIf

; Set the AES wrap key.
$oJwe2.SetWrappingKey(0,$sAesWrappingKey,"base64url")

; Decrypt.
$oSbOriginalText.Clear 
$bSuccess = $oJwe2.DecryptSb(0,"utf-8",$oSbOriginalText)
If ($bSuccess <> True) Then
    ConsoleWrite($oJwe2.LastErrorText & @CRLF)
    Exit
EndIf

ConsoleWrite("original text from uncompressed JWE: " & @CRLF)
ConsoleWrite($oSbOriginalText.GetAsString() & @CRLF)

; ------------------------------------------------
; The output of this example is:
; (Note: Your output data will be different because the content encryption key is randomly generated.)

; eyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiemlwIjoiREVGIn0.xuW-pEAIdEUFnk10m8ocursvktO8Of9ByCCAt6LgKkkOtCWCUn1kQw.zpGj-9WVni3cQxyOuZbcGA.0hzP1myua3oYpUHwCIY_3edBUREbUpLaX6wYuJduOdI.Ppc6aEO3y3B8BJ1FKMPjlA
; size of compressed JWE: 212
; eyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0.N4KeyC7nnSFkieJOyE24_zKeuV_m7v5UKoJb1TgV4Yc_r2RzUPNvyA.6AEdyXSCKx-iMmUJyypSLg.QpixfyrwhGpmwUDp623viik4smPav7vwPLiC2r-V-jwnSfEH3mxWu6DbrIz3mixaqATwynmEBzVPxvS9jTXpSAGCnniib4_0WoPl3r_wF5tlsKOEe--jpNso-DKd1Tp8jJxj3JkFWt3IRnUUKGj17g.sBfDwFc5fzpaI-UW8-SW4g
; size of uncompressed JWE: 303
; original text from compressed JWE: 
; Live long and prosper.
; Live long and prosper.
; Live long and prosper.
; Live long and prosper.
; 
; original text from uncompressed JWE: 
; Live long and prosper.
; Live long and prosper.
; Live long and prosper.
; Live long and prosper.
;