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

DSA Generate Key

See more DSA Examples

Generates a DSA public/private key pair and saves to PEM and DER file formats (both encrypted and non-encrypted).
An encrypted DSA PEM looks like this:

-----BEGIN DSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,9DAFD5C4CD62A5D0

QwDdp66sB0qKXQli7FbVcKL/eo3wu7kGRlV2sI8XbkNa1RTLiwnwTWDB0dqyWRQ8
...
Bx0HVfxKiNgCbL6BQEnYD+GOmMcckuj9Uhgloe/YuXCIDJBGhjUt/li3hvR/PXeC

V2xxNl1XKBE88njqi+UXt4vjGVNLpvXM
-----END DSA PRIVATE KEY-----

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.Dsa;

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

procedure RunDemo;
var
  success: Boolean;
  dsa: TDsa;
  pemStr: string;
  xmlStr: string;
  bPublicOnly: Boolean;

begin
  success := False;

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

  dsa := TDsa.Create;

  //  Call GenKey to generate a new DSA key.
  //  The number of bits should be at least 1024 and a multiple
  //  of 64.   Typical values are either 1024 or 2048.
  //  DSA key generation is compute intensive and may take
  //  a short while to complete.
  success := dsa.GenKey(2048);
  if (success <> True) then
    begin
      WriteLn(dsa.LastErrorText);
      Exit;
    end;

  //  Extract the private and public parts to PEM or DER format
  //  and save to files...

  //  First for the public key...
  //  The public key never needs to be encrypted.

  //  Save the public key in PEM format:
  pemStr := dsa.ToPublicPem();
  //  This example will not check the return value of SaveText...
  success := dsa.SaveText(pemStr,'dsa_pub.pem');

  //  Save the public key in DER format:
  success := dsa.ToPublicDerFile('dsa_pub.der');

  bPublicOnly := True;
  //  Save to XML
  xmlStr := dsa.ToXml(bPublicOnly);
  success := dsa.SaveText(xmlStr,'dsa_pub.xml');

  //  ------------------------------------
  //  Now for the private key....
  //  ------------------------------------

  //  Unencrypted PEM:
  pemStr := dsa.ToPem();
  success := dsa.SaveText(pemStr,'dsa_priv.pem');

  //  Encrypted PEM:
  pemStr := dsa.ToEncryptedPem('myPassword');
  success := dsa.SaveText(pemStr,'dsa_privEncrypted.pem');

  //  DER:
  success := dsa.ToDerFile('dsa_priv.der');

  //  XML:
  bPublicOnly := False;
  xmlStr := dsa.ToXml(bPublicOnly);
  success := dsa.SaveText(xmlStr,'dsa_priv.xml');

  WriteLn('Finished!');


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