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

RSA Signature with Certificate's Private Key from PFX

See more RSA Examples

Demonstrates how to use a certificate's private key from a PFX file to create an RSA signature.

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.PrivateKey,
  Chilkat.Rsa,
  Chilkat.Cert,
  Chilkat.CertStore,
  Chilkat.JsonObject;

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

procedure RunDemo;
var
  success: Boolean;
  certStore: TCertStore;
  jsonCN: TJsonObject;
  cert: TCert;
  privKey: TPrivateKey;
  rsa: TRsa;
  strData: string;
  hexSig: string;

begin
  success := False;

  //  This example requires the Chilkat API to have been previously unlocked.
  //  See Global Unlock Sample for sample code.

  //  Create an instance of a certificate store object, load a PFX file,
  //  locate the certificate we need, and use it for signing.
  //  (a PFX file may contain more than one certificate.)
  certStore := TCertStore.Create;

  //  The 1st argument is the filename, the 2nd arg is the 
  //  PFX file's password:
  success := certStore.LoadPfxFile('chilkat.pfx','test');
  if (success = False) then
    begin
      WriteLn(certStore.LastErrorText);
      Exit;
    end;

  //  Find the certificate by the subject common name:
  jsonCN := TJsonObject.Create;
  jsonCN.UpdateString('CN','cert common name');

  cert := TCert.Create;
  success := certStore.FindCert(jsonCN,cert);
  if (success = False) then
    begin
      WriteLn(certStore.LastErrorText);
      Exit;
    end;

  privKey := TPrivateKey.Create;
  success := cert.GetPrivateKey(privKey);
  if (success = False) then
    begin
      WriteLn(cert.LastErrorText);
      Exit;
    end;

  rsa := TRsa.Create;

  success := rsa.UsePrivateKey(privKey);
  if (success = False) then
    begin
      WriteLn(rsa.LastErrorText);
      Exit;
    end;

  //  Encode the signature as a hex string
  rsa.EncodingMode := 'hex';

  strData := 'This is the string to be signed.';

  //  Sign the string using the sha-1 hash algorithm.
  //  Other valid choices are "sha-256", "md2" and "md5".
  hexSig := rsa.SignStringENC(strData,'sha-1');

  WriteLn(hexSig);

  WriteLn('Success!');


  certStore.Free;
  jsonCN.Free;
  cert.Free;
  privKey.Free;
  rsa.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.