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
(SQL Server) JWE with DEFLATE CompressionDemonstrates how to DEFLATE ("zip") compress the JWE payload prior to encryption. Note: This example requires Chilkat v9.5.0.66 or greater.
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls. -- CREATE PROCEDURE ChilkatSample AS BEGIN DECLARE @hr int DECLARE @iTmp0 int -- Important: Do not use nvarchar(max). See the warning about using nvarchar(max). DECLARE @sTmp0 nvarchar(4000) -- 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. DECLARE @success int -- Create some plaintext to be encrypted. -- This example will demonstrate with and without DEFLATE (zip) compression. DECLARE @sbPlainText int -- Use "Chilkat_9_5_0.StringBuilder" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbPlainText OUT IF @hr <> 0 BEGIN PRINT 'Failed to create ActiveX component' RETURN END DECLARE @bCrLf int SELECT @bCrLf = 1 DECLARE @line nvarchar(4000) SELECT @line = 'Live long and prosper.' EXEC sp_OAMethod @sbPlainText, 'AppendLine', @success OUT, @line, @bCrLf EXEC sp_OAMethod @sbPlainText, 'AppendLine', @success OUT, @line, @bCrLf EXEC sp_OAMethod @sbPlainText, 'AppendLine', @success OUT, @line, @bCrLf EXEC sp_OAMethod @sbPlainText, 'AppendLine', @success OUT, @line, @bCrLf -- The text to be encrypted: EXEC sp_OAMethod @sbPlainText, 'GetAsString', @sTmp0 OUT PRINT @sTmp0 DECLARE @jwe int -- Use "Chilkat_9_5_0.Jwe" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.Jwe', @jwe OUT -- 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. DECLARE @jweProtHdr int -- Use "Chilkat_9_5_0.JsonObject" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @jweProtHdr OUT EXEC sp_OAMethod @jweProtHdr, 'AppendString', @success OUT, 'alg', 'A128KW' EXEC sp_OAMethod @jweProtHdr, 'AppendString', @success OUT, 'enc', 'A128CBC-HS256' EXEC sp_OAMethod @jweProtHdr, 'AppendString', @success OUT, 'zip', 'DEF' EXEC sp_OAMethod @jwe, 'SetProtectedHeader', @success OUT, @jweProtHdr -- Set the AES key wrap key: DECLARE @aesWrappingKey nvarchar(4000) SELECT @aesWrappingKey = 'GawgguFyGrWKav7AX4VKUg' EXEC sp_OAMethod @jwe, 'SetWrappingKey', @success OUT, 0, @aesWrappingKey, 'base64url' -- Encrypt and return the JWE in sbJweCompressed: DECLARE @sbJweCompressed int -- Use "Chilkat_9_5_0.StringBuilder" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbJweCompressed OUT EXEC sp_OAMethod @jwe, 'EncryptSb', @success OUT, @sbPlainText, 'utf-8', @sbJweCompressed IF @success <> 1 BEGIN EXEC sp_OAGetProperty @jwe, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @sbPlainText EXEC @hr = sp_OADestroy @jwe EXEC @hr = sp_OADestroy @jweProtHdr EXEC @hr = sp_OADestroy @sbJweCompressed RETURN END -- Show the compressed JWE: EXEC sp_OAMethod @sbJweCompressed, 'GetAsString', @sTmp0 OUT PRINT @sTmp0 EXEC sp_OAGetProperty @sbJweCompressed, 'Length', @iTmp0 OUT PRINT 'size of compressed JWE: ' + @iTmp0 -- Now create a JWE without compression. EXEC sp_OAMethod @jweProtHdr, 'Delete', @success OUT, 'zip' -- Make sure to update the shared protected header: EXEC sp_OAMethod @jwe, 'SetProtectedHeader', @success OUT, @jweProtHdr DECLARE @sbJweUncompressed int -- Use "Chilkat_9_5_0.StringBuilder" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbJweUncompressed OUT EXEC sp_OAMethod @jwe, 'EncryptSb', @success OUT, @sbPlainText, 'utf-8', @sbJweUncompressed IF @success <> 1 BEGIN EXEC sp_OAGetProperty @jwe, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @sbPlainText EXEC @hr = sp_OADestroy @jwe EXEC @hr = sp_OADestroy @jweProtHdr EXEC @hr = sp_OADestroy @sbJweCompressed EXEC @hr = sp_OADestroy @sbJweUncompressed RETURN END -- Show the uncompressed JWE: EXEC sp_OAMethod @sbJweUncompressed, 'GetAsString', @sTmp0 OUT PRINT @sTmp0 EXEC sp_OAGetProperty @sbJweUncompressed, 'Length', @iTmp0 OUT PRINT 'size of uncompressed JWE: ' + @iTmp0 -- 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. DECLARE @jwe2 int -- Use "Chilkat_9_5_0.Jwe" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.Jwe', @jwe2 OUT EXEC sp_OAMethod @jwe2, 'LoadJweSb', @success OUT, @sbJweCompressed IF @success <> 1 BEGIN EXEC sp_OAGetProperty @jwe2, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @sbPlainText EXEC @hr = sp_OADestroy @jwe EXEC @hr = sp_OADestroy @jweProtHdr EXEC @hr = sp_OADestroy @sbJweCompressed EXEC @hr = sp_OADestroy @sbJweUncompressed EXEC @hr = sp_OADestroy @jwe2 RETURN END -- Set the AES wrap key. EXEC sp_OAMethod @jwe2, 'SetWrappingKey', @success OUT, 0, @aesWrappingKey, 'base64url' -- Decrypt (also automatically decompresses). DECLARE @sbOriginalText int -- Use "Chilkat_9_5_0.StringBuilder" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbOriginalText OUT EXEC sp_OAMethod @jwe2, 'DecryptSb', @success OUT, 0, 'utf-8', @sbOriginalText IF @success <> 1 BEGIN EXEC sp_OAGetProperty @jwe2, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @sbPlainText EXEC @hr = sp_OADestroy @jwe EXEC @hr = sp_OADestroy @jweProtHdr EXEC @hr = sp_OADestroy @sbJweCompressed EXEC @hr = sp_OADestroy @sbJweUncompressed EXEC @hr = sp_OADestroy @jwe2 EXEC @hr = sp_OADestroy @sbOriginalText RETURN END PRINT 'original text from compressed JWE: ' EXEC sp_OAMethod @sbOriginalText, 'GetAsString', @sTmp0 OUT PRINT @sTmp0 -- ----------------------------------------------------------- -- Do the same with the uncompressed JWE EXEC sp_OAMethod @jwe2, 'LoadJweSb', @success OUT, @sbJweUncompressed IF @success <> 1 BEGIN EXEC sp_OAGetProperty @jwe2, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @sbPlainText EXEC @hr = sp_OADestroy @jwe EXEC @hr = sp_OADestroy @jweProtHdr EXEC @hr = sp_OADestroy @sbJweCompressed EXEC @hr = sp_OADestroy @sbJweUncompressed EXEC @hr = sp_OADestroy @jwe2 EXEC @hr = sp_OADestroy @sbOriginalText RETURN END -- Set the AES wrap key. EXEC sp_OAMethod @jwe2, 'SetWrappingKey', @success OUT, 0, @aesWrappingKey, 'base64url' -- Decrypt. EXEC sp_OAMethod @sbOriginalText, 'Clear', NULL EXEC sp_OAMethod @jwe2, 'DecryptSb', @success OUT, 0, 'utf-8', @sbOriginalText IF @success <> 1 BEGIN EXEC sp_OAGetProperty @jwe2, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @sbPlainText EXEC @hr = sp_OADestroy @jwe EXEC @hr = sp_OADestroy @jweProtHdr EXEC @hr = sp_OADestroy @sbJweCompressed EXEC @hr = sp_OADestroy @sbJweUncompressed EXEC @hr = sp_OADestroy @jwe2 EXEC @hr = sp_OADestroy @sbOriginalText RETURN END PRINT 'original text from uncompressed JWE: ' EXEC sp_OAMethod @sbOriginalText, 'GetAsString', @sTmp0 OUT PRINT @sTmp0 -- ------------------------------------------------ -- 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. -- EXEC @hr = sp_OADestroy @sbPlainText EXEC @hr = sp_OADestroy @jwe EXEC @hr = sp_OADestroy @jweProtHdr EXEC @hr = sp_OADestroy @sbJweCompressed EXEC @hr = sp_OADestroy @sbJweUncompressed EXEC @hr = sp_OADestroy @jwe2 EXEC @hr = sp_OADestroy @sbOriginalText END GO |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.