DataFlex
DataFlex
JWE using "dir" Direct use of Shared Symmetric Key
See more JSON Web Encryption (JWE) Examples
Demonstrates 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.
Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
String sPlaintext
Handle hoJwe
Variant vJweProtHdr
Handle hoJweProtHdr
Integer iRecipientIndex
String sStrJwe
Handle hoJwe2
String sOriginalPlaintext
String sTemp1
Boolean bTemp1
Move False To iSuccess
// 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" "dir" To iSuccess
Get ComAppendString Of hoJweProtHdr "enc" "A128GCM" To iSuccess
// 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
// 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.
Move 0 To iRecipientIndex
Get ComSetWrappingKey Of hoJwe iRecipientIndex "000102030405060708090A0B0C0D0E0F" "hex" 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
Get ComSetWrappingKey Of hoJwe2 0 "000102030405060708090A0B0C0D0E0F" "hex" 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:
// eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4R0NNIn0..20HX5Huc7f1nQC4pBUtiCQ.axFZIxtZy5j0ifJQUzGXLKIpsBuxJA.eBrOC-NrsreN6JeGuOPk1g
// original text:
// Live long and prosper.
End_Procedure