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

Generate ed25519 Key and Save to PuTTY Format

See more SSH Key Examples

Generates an ED25519 key and saves to PuTTY format.

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

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

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

procedure RunDemo;
var
  success: Boolean;
  key: TSshKey;
  exportEncrypted: Boolean;
  exportedKey: string;

begin
  success := False;

  //  Note: Requires Chilkat v9.5.0.83 or greater.

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

  key := TSshKey.Create;

  success := key.GenerateEd25519Key();
  if (success <> True) then
    begin
      WriteLn(key.LastErrorText);
      Exit;
    end;

  //  We can optionally set a comment to be included in the exported key.
  key.Comment := 'This is my new ed25519 key.';

  //  Export the ed25519 private key to unencrypted PuTTY format:
  exportEncrypted := False;
  exportedKey := key.ToPuttyPrivateKey(exportEncrypted);
  success := key.SaveText(exportedKey,'qa_output/privkey_putty_unencrypted.ppk');

  //  The unencrypted PuTTY key looks like this:

  //  	PuTTY-User-Key-File-2: ssh-ed25519
  //  	Encryption: none
  //  	Comment: This is my new ed25519 key.
  //  	Public-Lines: 2
  //  	AAAAC3NzaC1lZDI1NTE5AAAAIJn6m7yKzkAAHXzzjE1zv4RqtdE8r5eTegcpbNDF
  //  	OPYs
  //  	Private-Lines: 1
  //  	AAAAIFgwbZ38AR9Oiw930wsCcCGymQRBa2Y7qBq6R3HCe9VL
  //  	Private-MAC: 892573676dd13ef70b6ab7ef219decdfbd5b1857

  //  Export the ed25519 private key to encrypted PuTTY format:
  key.Password := 'secret';
  exportEncrypted := True;
  exportedKey := key.ToPuttyPrivateKey(exportEncrypted);
  success := key.SaveText(exportedKey,'qa_output/privkey_putty_encrypted.ppk');

  //  The encrypted PuTTY key looks like this:

  //  	PuTTY-User-Key-File-2: ssh-ed25519
  //  	Encryption: aes256-cbc
  //  	Comment: This is my new ed25519 key.
  //  	Public-Lines: 2
  //  	AAAAC3NzaC1lZDI1NTE5AAAAIJn6m7yKzkAAHXzzjE1zv4RqtdE8r5eTegcpbNDF
  //  	OPYs
  //  	Private-Lines: 1
  //  	aIa9mY22htPElPgWhtXesp97662JECxaSsnNqvhD06P+o18immv8ohn73vI/bhQB
  //  	Private-MAC: 312221dc90660859fe68df300767f8f779046815

  WriteLn('Success!');


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