Perl Requires Chilkat v9.5.0.66+
Chilkat2 Perl
JWE with DEFLATE Compression
See more JSON Web Encryption (JWE) Examples
Demonstrates how to DEFLATE ("zip") compress the JWE payload prior to encryption.Chilkat Perl Downloads
use strict;
use warnings;
use Chilkat2;
# This requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
# Create some plaintext to be encrypted.
# This example will demonstrate with and without DEFLATE (zip) compression.
my $sbPlainText = Chilkat2::StringBuilder->new;
my $bCrLf = 1;
my $line = 'Live long and prosper.';
$sbPlainText->AppendLine($line, $bCrLf);
$sbPlainText->AppendLine($line, $bCrLf);
$sbPlainText->AppendLine($line, $bCrLf);
$sbPlainText->AppendLine($line, $bCrLf);
# The text to be encrypted:
print $sbPlainText->GetAsString(), "\n";
my $jwe = Chilkat2::Jwe->new;
# 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.
my $jweProtHdr = Chilkat2::JsonObject->new;
$jweProtHdr->AppendString('alg', 'A128KW');
$jweProtHdr->AppendString('enc', 'A128CBC-HS256');
$jweProtHdr->AppendString('zip', 'DEF');
$jwe->SetProtectedHeader($jweProtHdr);
# Set the AES key wrap key:
my $aesWrappingKey = 'GawgguFyGrWKav7AX4VKUg';
$jwe->SetWrappingKey(0, $aesWrappingKey, 'base64url');
# Encrypt and return the JWE in sbJweCompressed:
my $sbJweCompressed = Chilkat2::StringBuilder->new;
my $success = $jwe->EncryptSb($sbPlainText, 'utf-8', $sbJweCompressed);
if (!$success) {
print $jwe->LastErrorText, "\n";
exit;
}
# Show the compressed JWE:
print $sbJweCompressed->GetAsString(), "\n";
print 'size of compressed JWE: ', $sbJweCompressed->Length, "\n";
# Now create a JWE without compression.
$jweProtHdr->Delete('zip');
# Make sure to update the shared protected header:
$jwe->SetProtectedHeader($jweProtHdr);
my $sbJweUncompressed = Chilkat2::StringBuilder->new;
$success = $jwe->EncryptSb($sbPlainText, 'utf-8', $sbJweUncompressed);
if (!$success) {
print $jwe->LastErrorText, "\n";
exit;
}
# Show the uncompressed JWE:
print $sbJweUncompressed->GetAsString(), "\n";
print 'size of uncompressed JWE: ', $sbJweUncompressed->Length, "\n";
# 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.
my $jwe2 = Chilkat2::Jwe->new;
$success = $jwe2->LoadJweSb($sbJweCompressed);
if (!$success) {
print $jwe2->LastErrorText, "\n";
exit;
}
# Set the AES wrap key.
$jwe2->SetWrappingKey(0, $aesWrappingKey, 'base64url');
# Decrypt (also automatically decompresses).
my $sbOriginalText = Chilkat2::StringBuilder->new;
$success = $jwe2->DecryptSb(0, 'utf-8', $sbOriginalText);
if (!$success) {
print $jwe2->LastErrorText, "\n";
exit;
}
print "original text from compressed JWE: \n";
print $sbOriginalText->GetAsString(), "\n";
# -----------------------------------------------------------
# Do the same with the uncompressed JWE
$success = $jwe2->LoadJweSb($sbJweUncompressed);
if (!$success) {
print $jwe2->LastErrorText, "\n";
exit;
}
# Set the AES wrap key.
$jwe2->SetWrappingKey(0, $aesWrappingKey, 'base64url');
# Decrypt.
$sbOriginalText->Clear();
$success = $jwe2->DecryptSb(0, 'utf-8', $sbOriginalText);
if (!$success) {
print $jwe2->LastErrorText, "\n";
exit;
}
print "original text from uncompressed JWE: \n";
print $sbOriginalText->GetAsString(), "\n";
# ------------------------------------------------
# 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.
#