Sample code for 30+ languages & platforms
Delphi ActiveX

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 Delphi ActiveX Downloads

Delphi ActiveX
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Chilkat_TLB;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Integer;
jpgBytes: TChilkatBinData;
jwe: TChilkatJwe;
jweProtHdr: TChilkatJsonObject;
aesWrappingKey: WideString;
sbJwe: TChilkatStringBuilder;
jwe2: TChilkatJwe;
jpgOriginal: TChilkatBinData;

begin
success := 0;

// 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.
jpgBytes := TChilkatBinData.Create(Self);
success := jpgBytes.LoadFile('qa_data/jpg/starfish.jpg');
// Make sure your app checks the success/failure of the call to LoadFile..
Memo1.Lines.Add('Original JPG size = ' + IntToStr(jpgBytes.NumBytes));

jwe := TChilkatJwe.Create(Self);

jweProtHdr := TChilkatJsonObject.Create(Self);
jweProtHdr.AppendString('alg','A128KW');
jweProtHdr.AppendString('enc','A128CBC-HS256');
jwe.SetProtectedHeader(jweProtHdr.ControlInterface);

aesWrappingKey := 'GawgguFyGrWKav7AX4VKUg';
jwe.SetWrappingKey(0,aesWrappingKey,'base64url');

// Encrypt and return the JWE in sbJwe:
sbJwe := TChilkatStringBuilder.Create(Self);
success := jwe.EncryptBd(jpgBytes.ControlInterface,sbJwe.ControlInterface);
if (success <> 1) then
  begin
    Memo1.Lines.Add(jwe.LastErrorText);
    Exit;
  end;

// Show the JWE:
Memo1.Lines.Add(sbJwe.GetAsString());
Memo1.Lines.Add('size of JWE: ' + IntToStr(sbJwe.Length));

// ---------------------------------------------------------
// Decrypt to get the original JPG file..

jwe2 := TChilkatJwe.Create(Self);
success := jwe2.LoadJweSb(sbJwe.ControlInterface);
if (success <> 1) then
  begin
    Memo1.Lines.Add(jwe2.LastErrorText);
    Exit;
  end;
// Set the AES wrap key.
jwe2.SetWrappingKey(0,aesWrappingKey,'base64url');

// Decrypt.
jpgOriginal := TChilkatBinData.Create(Self);
success := jwe2.DecryptBd(0,jpgOriginal.ControlInterface);
if (success <> 1) then
  begin
    Memo1.Lines.Add(jwe2.LastErrorText);
    Exit;
  end;
Memo1.Lines.Add('Decrypted JPG size = ' + IntToStr(jpgOriginal.NumBytes));

// Save the decrypted JPG to a file.
success := jpgOriginal.WriteFile('qa_output/jwe_decrypted_starfish.jpg');

Memo1.Lines.Add('success = ' + IntToStr(Ord(success)));

// 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;