DataFlex
DataFlex
JWE with Binary Data
See more JSON Web Encryption (JWE) Examples
Demonstrates 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.
Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Variant vJpgBytes
Handle hoJpgBytes
Handle hoJwe
ProtHdr Handle hoJweProtHdr
String sAesWrappingKey
Variant vSbJwe
Handle hoSbJwe
2 Handle hoJwe2
Variant vJpgOriginal
Handle hoJpgOriginal
String sTemp1
Integer iTemp1
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.
// Load a JPG file that will be the JWE payload.
Get Create (RefClass(cComChilkatBinData)) To hoJpgBytes
If (Not(IsComObjectCreated(hoJpgBytes))) Begin
Send CreateComObject of hoJpgBytes
End
Get ComLoadFile Of hoJpgBytes "qa_data/jpg/starfish.jpg" To iSuccess
// Make sure your app checks the success/failure of the call to LoadFile..
Get ComNumBytes Of hoJpgBytes To iTemp1
Showln "Original JPG size = " iTemp1
Get Create (RefClass(cComChilkatJwe)) To hoJwe
If (Not(IsComObjectCreated(hoJwe))) Begin
Send CreateComObject of hoJwe
End
Get Create (RefClass(cComChilkatJsonObject)) To hoJweProtHdr
If (Not(IsComObjectCreated(hoJweProtHdr))) Begin
Send CreateComObject of hoJweProtHdr
End
Get ComAppendString Of hoJweProtHdr "alg" "A128KW" To iSuccess
Get ComAppendString Of hoJweProtHdr "enc" "A128CBC-HS256" To iSuccess
Get pvComObject of hoJweProtHdr to vJweProtHdr
Get ComSetProtectedHeader Of hoJwe vJweProtHdr To iSuccess
Move "GawgguFyGrWKav7AX4VKUg" To sAesWrappingKey
Get ComSetWrappingKey Of hoJwe 0 sAesWrappingKey "base64url" To iSuccess
// Encrypt and return the JWE in sbJwe:
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbJwe
If (Not(IsComObjectCreated(hoSbJwe))) Begin
Send CreateComObject of hoSbJwe
End
Get pvComObject of hoJpgBytes to vJpgBytes
Get pvComObject of hoSbJwe to vSbJwe
Get ComEncryptBd Of hoJwe vJpgBytes vSbJwe To iSuccess
If (iSuccess <> True) Begin
Get ComLastErrorText Of hoJwe To sTemp1
Showln sTemp1
Procedure_Return
End
// Show the JWE:
Get ComGetAsString Of hoSbJwe To sTemp1
Showln sTemp1
Get ComLength Of hoSbJwe To iTemp1
Showln "size of JWE: " iTemp1
// ---------------------------------------------------------
// Decrypt to get the original JPG file..
Get Create (RefClass(cComChilkatJwe)) To hoJwe2
If (Not(IsComObjectCreated(hoJwe2))) Begin
Send CreateComObject of hoJwe2
End
Get pvComObject of hoSbJwe to vSbJwe
Get ComLoadJweSb Of hoJwe2 vSbJwe To iSuccess
If (iSuccess <> True) Begin
Get ComLastErrorText Of hoJwe2 To sTemp1
Showln sTemp1
Procedure_Return
End
// Set the AES wrap key.
Get ComSetWrappingKey Of hoJwe2 0 sAesWrappingKey "base64url" To iSuccess
// Decrypt.
Get Create (RefClass(cComChilkatBinData)) To hoJpgOriginal
If (Not(IsComObjectCreated(hoJpgOriginal))) Begin
Send CreateComObject of hoJpgOriginal
End
Get pvComObject of hoJpgOriginal to vJpgOriginal
Get ComDecryptBd Of hoJwe2 0 vJpgOriginal To iSuccess
If (iSuccess <> True) Begin
Get ComLastErrorText Of hoJwe2 To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComNumBytes Of hoJpgOriginal To iTemp1
Showln "Decrypted JPG size = " iTemp1
// Save the decrypted JPG to a file.
Get ComWriteFile Of hoJpgOriginal "qa_output/jwe_decrypted_starfish.jpg" To iSuccess
Showln "success = " iSuccess
// 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
End_Procedure