Sample code for 30+ languages & platforms
Lazarus Pascal Requires Chilkat v11.0.0+

About RSA Public/Private Keys

See more RSA Examples

This example provides some additional information for understanding public/private key pairs. In demonstrates how a private key is a superset of the public key. A public key contains the modulus and exponent. The matching private key also contains the modulus and exponent, but also contains the additional private key parts.

Chilkat Lazarus Pascal Downloads

Lazarus Pascal
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.PublicKey,
  Chilkat.Cert;

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

procedure RunDemo;
var
  success: Boolean;
  cert: TCert;
  pubKey: TPublicKey;
  privKey: TPrivateKey;

begin
  success := False;

  cert := TCert.Create;

  //  Load a digital certificate.
  success := cert.LoadFromFile('digitalCert.cer');
  if (success = False) then
    begin
      WriteLn(cert.LastErrorText);
      Exit;
    end;

  //  A .cer file does not contain the private key.  It should contain
  //  the public key...
  pubKey := TPublicKey.Create;
  cert.GetPublicKey(pubKey);

  //  Let's have a look at it (in XML format).
  WriteLn('Public Key from Certificate:');
  WriteLn(pubKey.GetXml());

  //  An RSA public key consists of a modulus and exponent.

  //  An RSA private key includes both the modulus and exponent,
  //  as well as other "big" numbers: P, Q, D, etc.

  //  Let's load an RSA private key from a DER-encoded file:
  privKey := TPrivateKey.Create;

  success := privKey.LoadAnyFormatFile('PrivateKey.key','');
  if (success <> True) then
    begin
      WriteLn(privKey.LastErrorText);
      Exit;
    end;

  //  If this private key is the matching half to the public key from
  //  the certificate, then the modulus and exponent should
  //  be identical.  (Thus, a "private key" really contains both the public part as well as the private parts...).
  WriteLn('Private Key from DER:');
  WriteLn(privKey.GetXml());


  cert.Free;
  pubKey.Free;
  privKey.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.