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.
;