Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Tcl) JWE with Binary DataDemonstrates how to create a JWE that contains a binary payload (such as a JPG image). Note: This example requires Chilkat v9.5.0.66 or greater.
load ./chilkat.dll # 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. # Load a JPG file that will be the JWE payload. set jpgBytes [new_CkBinData] set success [CkBinData_LoadFile $jpgBytes "qa_data/jpg/starfish.jpg"] # Make sure your app checks the success/failure of the call to LoadFile.. puts "Original JPG size = [CkBinData_get_NumBytes $jpgBytes]" set jwe [new_CkJwe] set jweProtHdr [new_CkJsonObject] CkJsonObject_AppendString $jweProtHdr "alg" "A128KW" CkJsonObject_AppendString $jweProtHdr "enc" "A128CBC-HS256" CkJwe_SetProtectedHeader $jwe $jweProtHdr set aesWrappingKey "GawgguFyGrWKav7AX4VKUg" CkJwe_SetWrappingKey $jwe 0 $aesWrappingKey "base64url" # Encrypt and return the JWE in sbJwe: set sbJwe [new_CkStringBuilder] set success [CkJwe_EncryptBd $jwe $jpgBytes $sbJwe] if {$success != 1} then { puts [CkJwe_lastErrorText $jwe] delete_CkBinData $jpgBytes delete_CkJwe $jwe delete_CkJsonObject $jweProtHdr delete_CkStringBuilder $sbJwe exit } # Show the JWE: puts [CkStringBuilder_getAsString $sbJwe] puts "size of JWE: [CkStringBuilder_get_Length $sbJwe]" # --------------------------------------------------------- # Decrypt to get the original JPG file.. set jwe2 [new_CkJwe] set success [CkJwe_LoadJweSb $jwe2 $sbJwe] if {$success != 1} then { puts [CkJwe_lastErrorText $jwe2] delete_CkBinData $jpgBytes delete_CkJwe $jwe delete_CkJsonObject $jweProtHdr delete_CkStringBuilder $sbJwe delete_CkJwe $jwe2 exit } # Set the AES wrap key. CkJwe_SetWrappingKey $jwe2 0 $aesWrappingKey "base64url" # Decrypt. set jpgOriginal [new_CkBinData] set success [CkJwe_DecryptBd $jwe2 0 $jpgOriginal] if {$success != 1} then { puts [CkJwe_lastErrorText $jwe2] delete_CkBinData $jpgBytes delete_CkJwe $jwe delete_CkJsonObject $jweProtHdr delete_CkStringBuilder $sbJwe delete_CkJwe $jwe2 delete_CkBinData $jpgOriginal exit } puts "Decrypted JPG size = [CkBinData_get_NumBytes $jpgOriginal]" # Save the decrypted JPG to a file. set success [CkBinData_WriteFile $jpgOriginal "qa_output/jwe_decrypted_starfish.jpg"] puts "success = $success" # The output of this program, when tested, was: # Original JPG size = 6229 # eyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0.9YFz_wteV ... 7Et3hKhpxnKEXw # size of JWE: 8473 # Decrypted JPG size = 6229 # success = True delete_CkBinData $jpgBytes delete_CkJwe $jwe delete_CkJsonObject $jweProtHdr delete_CkStringBuilder $sbJwe delete_CkJwe $jwe2 delete_CkBinData $jpgOriginal |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.