Sample code for 30+ languages & platforms
Delphi DLL

Create JWS using the Flattened JSON Serialization Format

See more JSON Web Signatures (JWS) Examples

Creates a JSON Web Signature (JWS) containing 1 signature and output using the flattened JSON serialization format.

Note: This example requires Chilkat v9.5.0.66 or greater.

Chilkat Delphi DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, StringBuilder, PrivateKey, Jws, JsonObject;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
sbEccJwk: HCkStringBuilder;
eccKey: HCkPrivateKey;
jwsProtHdr: HCkJsonObject;
jwsUnprotHdr: HCkJsonObject;
jws: HCkJws;
bIncludeBom: Boolean;
payloadStr: PWideChar;
jwsStr: PWideChar;
json: HCkJsonObject;

begin
success := False;

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

// The JWS to be created will contain one signature using an ECDSA key.

sbEccJwk := CkStringBuilder_Create();
CkStringBuilder_Append(sbEccJwk,'{"kty":"EC",');
CkStringBuilder_Append(sbEccJwk,'"crv":"P-256",');
CkStringBuilder_Append(sbEccJwk,'"x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU",');
CkStringBuilder_Append(sbEccJwk,'"y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0",');
CkStringBuilder_Append(sbEccJwk,'"d":"jpsQnnGQmL-YBIffH1136cspYG6-0iY7X1fCE9-E9LI"');
CkStringBuilder_Append(sbEccJwk,'}');

eccKey := CkPrivateKey_Create();
// Note: This example loads the ECDSA key from JWK format.  Any format can be loaded
// into the private key object. (See the online reference documentation..)
success := CkPrivateKey_LoadJwk(eccKey,CkStringBuilder__getAsString(sbEccJwk));
if (success <> True) then
  begin
    Memo1.Lines.Add(CkPrivateKey__lastErrorText(eccKey));
    Exit;
  end;

// ---------------------------------------------------
// Prepare both a protected and unprotected header.

jwsProtHdr := CkJsonObject_Create();
CkJsonObject_AppendString(jwsProtHdr,'alg','ES256');

jwsUnprotHdr := CkJsonObject_Create();
CkJsonObject_AppendString(jwsUnprotHdr,'kid','myEcKey');

// ---------------------------------------------------
jws := CkJws_Create();

CkJws_SetProtectedHeader(jws,0,jwsProtHdr);
CkJws_SetUnprotectedHeader(jws,0,jwsUnprotHdr);

CkJws_SetPrivateKey(jws,0,eccKey);

bIncludeBom := False;
payloadStr := 'In our village, folks say God crumbles up the old moon into stars.';
CkJws_SetPayload(jws,payloadStr,'utf-8',bIncludeBom);

// ---------------------------------------------------
// Create the JWS.
// Indicate we prefer the non-compact, flattened serialization.
CkJws_putPreferCompact(jws,False);
CkJws_putPreferFlattened(jws,True);

jwsStr := CkJws__createJws(jws);
if (CkJws_getLastMethodSuccess(jws) <> True) then
  begin
    Memo1.Lines.Add(CkJws__lastErrorText(jws));
    Exit;
  end;

// The jwsStr is contains the flattened JSON in the smallest possible size, which is a single line.
// To get in human-readable format, load into a Chilkat JSON object and emit..
json := CkJsonObject_Create();
CkJsonObject_Load(json,jwsStr);
CkJsonObject_putEmitCompact(json,False);
Memo1.Lines.Add(CkJsonObject__emit(json));

// Sample output:

// { 
//   "payload": "SW4gb3VyIHZpbGxhZ2UsIGZvbGtzIHNheSBHb2QgY3J1bWJsZXMgdXAgdGhlIG9sZCBtb29uIGludG8gc3RhcnMu",
//   "protected": "eyJhbGciOiJFUzI1NiJ9",
//   "header": { 
//     "kid": "myEcKey"
//   },
//   "signature": "b7V2UpDPytr-kMnM_YjiQ3E0J2ucOI9LYA7mt57vccrK1rb84j9areqgQcJwOA00aWGoz4hf6sMTBfobdcJEGg"
// }

CkStringBuilder_Dispose(sbEccJwk);
CkPrivateKey_Dispose(eccKey);
CkJsonObject_Dispose(jwsProtHdr);
CkJsonObject_Dispose(jwsUnprotHdr);
CkJws_Dispose(jws);
CkJsonObject_Dispose(json);

end;