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 using "dir" Direct use of Shared Symmetric KeyDemonstrates how to create a JWE using the "dir" alg -- which is to directly use a shared symmetric key. 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. set plaintext "Live long and prosper." set jwe [new_CkJwe] # First build the JWE Protected Header.. set jweProtHdr [new_CkJsonObject] CkJsonObject_AppendString $jweProtHdr "alg" "dir" CkJsonObject_AppendString $jweProtHdr "enc" "A128GCM" # Don't forget to actually provide the protected header to the JWE object: CkJwe_SetProtectedHeader $jwe $jweProtHdr # The JWE is to use 128-bit AES GCM encryption as specified by the "enc" parameter. # Given that the "alg" = "dir", we are to directly specify the AES GCM key. # (It is assumed that the decrypting side also has knowledge of the direct key to be used..) # Our key will be these 16 hex bytes: 000102030405060708090A0B0C0D0E0F # The SetWrappingKey method is also used for "dir" direct keys. # However, if there are multiple recipients, they must all share the same CEK (Content Encryption Key), # which is specified by calling SetWrappingKey with an index of 0. set recipientIndex 0 CkJwe_SetWrappingKey $jwe $recipientIndex "000102030405060708090A0B0C0D0E0F" "hex" # Encrypt and return the JWE: set strJwe [CkJwe_encrypt $jwe $plaintext "utf-8"] if {[CkJwe_get_LastMethodSuccess $jwe] != 1} then { puts [CkJwe_lastErrorText $jwe] delete_CkJwe $jwe delete_CkJsonObject $jweProtHdr exit } # Show the JWE we just created: puts "$strJwe" # Decrypt the JWE. set jwe2 [new_CkJwe] set success [CkJwe_LoadJwe $jwe2 $strJwe] if {$success != 1} then { puts [CkJwe_lastErrorText $jwe2] delete_CkJwe $jwe delete_CkJsonObject $jweProtHdr delete_CkJwe $jwe2 exit } CkJwe_SetWrappingKey $jwe2 0 "000102030405060708090A0B0C0D0E0F" "hex" # Decrypt. set originalPlaintext [CkJwe_decrypt $jwe2 0 "utf-8"] if {[CkJwe_get_LastMethodSuccess $jwe2] != 1} then { puts [CkJwe_lastErrorText $jwe2] delete_CkJwe $jwe delete_CkJsonObject $jweProtHdr delete_CkJwe $jwe2 exit } puts "original text: " puts "$originalPlaintext" # Sample output: # eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4R0NNIn0..20HX5Huc7f1nQC4pBUtiCQ.axFZIxtZy5j0ifJQUzGXLKIpsBuxJA.eBrOC-NrsreN6JeGuOPk1g # original text: # Live long and prosper. delete_CkJwe $jwe delete_CkJsonObject $jweProtHdr delete_CkJwe $jwe2 |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.