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
(DataFlex) JWE using PBES2 Key WrappingDemonstrates how to create and decrypt a JWE that using PBES2 key wrapping. This example demonstrates PBES2 with HMAC SHA-256 and A128KW wrapping. It is also possible to do the following by simply changing the "alg" parameter:
Note: This example requires Chilkat v9.5.0.66 or greater.
Use ChilkatAx-win32.pkg Procedure Test Boolean iSuccess String sPlaintext Handle hoJwe Variant vJweProtHdr Handle hoJweProtHdr Handle hoPrng Integer iRecipientIndex String sStrJwe Handle hoJwe2 String sOriginalPlaintext String sTemp1 Boolean bTemp1 // 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. Move "Live long and prosper." To sPlaintext Get Create (RefClass(cComChilkatJwe)) To hoJwe If (Not(IsComObjectCreated(hoJwe))) Begin Send CreateComObject of hoJwe End // First build the JWE Protected Header.. Get Create (RefClass(cComChilkatJsonObject)) To hoJweProtHdr If (Not(IsComObjectCreated(hoJweProtHdr))) Begin Send CreateComObject of hoJweProtHdr End Get ComAppendString Of hoJweProtHdr "alg" "PBES2-HS256+A128KW" To iSuccess Get ComAppendString Of hoJweProtHdr "enc" "A128GCM" To iSuccess // PBES2 requires two additional parameters: // 1) A random salt parameter ("p2s") containing 8 or more bytes in base64url format. // 2) An iteration count parameter ("p2c"). A minimum count of 1000 is recommended. // The iteration count is intended to make the PBES2 computation more expensive (time consuming) // to prevent brute-force attacks. Get Create (RefClass(cComChilkatPrng)) To hoPrng If (Not(IsComObjectCreated(hoPrng))) Begin Send CreateComObject of hoPrng End Get ComGenRandom Of hoPrng 16 "base64url" To sTemp1 Get ComAppendString Of hoJweProtHdr "p2s" sTemp1 To iSuccess Get ComAppendString Of hoJweProtHdr "p2c" "1000" To iSuccess Get ComEmit Of hoJweProtHdr To sTemp1 Showln "JWE Protected Header: " sTemp1 Showln "--" // Don't forget to actually provide the protected header to the JWE object: Get pvComObject of hoJweProtHdr to vJweProtHdr Get ComSetProtectedHeader Of hoJwe vJweProtHdr To iSuccess // Set the PBES2 password Move 0 To iRecipientIndex Get ComSetPassword Of hoJwe iRecipientIndex "top secret" To iSuccess // Encrypt and return the JWE: Get ComEncrypt Of hoJwe sPlaintext "utf-8" To sStrJwe Get ComLastMethodSuccess Of hoJwe To bTemp1 If (bTemp1 <> True) Begin Get ComLastErrorText Of hoJwe To sTemp1 Showln sTemp1 Procedure_Return End // Show the JWE we just created: Showln sStrJwe // Decrypt the JWE. Get Create (RefClass(cComChilkatJwe)) To hoJwe2 If (Not(IsComObjectCreated(hoJwe2))) Begin Send CreateComObject of hoJwe2 End Get ComLoadJwe Of hoJwe2 sStrJwe To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoJwe2 To sTemp1 Showln sTemp1 Procedure_Return End // Set the PBES2 password Get ComSetPassword Of hoJwe2 iRecipientIndex "top secret" To iSuccess // Decrypt. Get ComDecrypt Of hoJwe2 0 "utf-8" To sOriginalPlaintext Get ComLastMethodSuccess Of hoJwe2 To bTemp1 If (bTemp1 <> True) Begin Get ComLastErrorText Of hoJwe2 To sTemp1 Showln sTemp1 Procedure_Return End Showln "original text: " Showln sOriginalPlaintext // Sample output: // JWE Protected Header: {"alg":"PBES2-HS256+A128KW","enc":"A128GCM","p2s":"z39rTEfRy1T1Yn_D1mZRlg","p2c":"1000"} // -- // eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJlbmMiOiJBMTI4R0NNIiwicDJzIjoiejM5clRFZlJ5MVQxWW5fRDFtWlJsZyIsInAyYyI6IjEwMDAifQ.koYt6PrFmYwcwdcT7ZcvXHA1d-Xez5h4.luGlbvEnZp-7IsBOj42Yhw.YMTcfLf8Qe4zazozGV2OAu3cUdQ8Kg.rWub47ESWkc6IqZJTvSTmg // original text: // Live long and prosper. End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.