Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Load JWK into PublicKey Object

See more JSON Web Signatures (JWS) Examples

Demonstrates how to load a Java Web Key (JWK) into a Chilkat public key object.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.StringBuilder,
  Chilkat.PublicKey,
  Chilkat.JsonObject;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  sbJwk: TStringBuilder;
  pubkey: TPublicKey;
  sbJwk2: TStringBuilder;
  json: TJsonObject;
  jsonJwk: TJsonObject;
  pubkey2: TPublicKey;

begin
  success := False;

  //  Imagine we have this JWK:

  //  {
  //  "kty":"RSA",
  //  "kid":"bilbo.baggins@hobbiton.example",
  //  "use":"sig",
  //  "n":"26381066103266289976070039679240841999340706859156341823971393693544846472963839705790075117105560154606562987481050889935247188300178764426769543782451174831475924241862817098997865881169498995546309260357488285676768114714548754913374731868063116787903918383610614912211576698081222844057810710088656983077876282582286966085572172471849443305250452393766960762340311496052418952315081937000716222751229644449475751932222180738210988190709824209639002026650048655399108647971010890335494074025258268035713167380057822555485524738518699437692145859633592396626258745090144803752145540471688039673495588314804430463791",
  //  "e":"65537"
  //  }
  //  

  sbJwk := TStringBuilder.Create;
  success := sbJwk.LoadFile('qa_data/jwk/simple_jwk_rsa.json','utf-8');
  if (success <> True) then
    begin
      WriteLn('Failed to load simple JWK file.');
      Exit;
    end;

  //  Loading it into a Chilkat public key object is easy:
  pubkey := TPublicKey.Create;
  success := pubkey.LoadFromString(sbJwk.GetAsString());
  if (success = False) then
    begin
      WriteLn(pubkey.LastErrorText);
      Exit;
    end;

  WriteLn('Simple JWK loaded into public key object.');

  //  ----------------------------------------------------------------------------------------------------------
  //  Demonstrate how to load a JWK that is contained within JSON into a public key object.

  //  {
  //    "alg":"RS256",
  //    "jwk":  {
  //            "kty":"RSA",
  //            "kid":"bilbo.baggins@hobbiton.example",
  //            "use":"sig",
  //            "n":"26381066103266289976070039679240841999340706859156341823971393693544846472963839705790075117105560154606562987481050889935247188300178764426769543782451174831475924241862817098997865881169498995546309260357488285676768114714548754913374731868063116787903918383610614912211576698081222844057810710088656983077876282582286966085572172471849443305250452393766960762340311496052418952315081937000716222751229644449475751932222180738210988190709824209639002026650048655399108647971010890335494074025258268035713167380057822555485524738518699437692145859633592396626258745090144803752145540471688039673495588314804430463791",
  //            "e":"65537"
  //            }
  //  }

  sbJwk2 := TStringBuilder.Create;
  success := sbJwk2.LoadFile('qa_data/jwk/contained_jwk_rsa.json','utf-8');
  if (success = False) then
    begin
      WriteLn(sbJwk2.LastErrorText);
      Exit;
    end;

  //  Get the "jwk" part of the JSON..
  json := TJsonObject.Create;
  json.Load(sbJwk2.GetAsString());

  jsonJwk := TJsonObject.Create;
  success := json.ObjectOf2('jwk',jsonJwk);
  if (success = False) then
    begin
      WriteLn(json.LastErrorText);
      Exit;
    end;

  pubkey2 := TPublicKey.Create;
  success := pubkey2.LoadFromString(jsonJwk.Emit());
  if (success = False) then
    begin
      WriteLn(pubkey2.LastErrorText);
      Exit;
    end;

  WriteLn('Contained JWK loaded into public key object.');


  sbJwk.Free;
  pubkey.Free;
  sbJwk2.Free;
  json.Free;
  jsonJwk.Free;
  pubkey2.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.