The following demonstrates how to use Delphi language using the new SwiftRNG-32.dll to download data from a SwiftRNG device when used with the SwiftRNG Entropy Server for Windows. We recommend using the new SwiftRNG-32.dll which provides a simplified and flexible API for interracting with SwiftRNG Entropy Server. Before using the following example, make sure your Delphi project is targeted for Windows 32 bit platform, a SwiftRNG device is plugged into one of USB ports available and the entropy server is running. Both SwiftRNG-32.dll and SwiftRNG-64.dll are included in the SwiftRNG software kit and can be downloaded from this location.

A sample source code for retrieving data from SwiftRNG device when using SwiftRNG Entropy Server for Windows and SwiftRNG-32.dll


//
//
// A sample Delphi program that demonstrates how to retrieve data from
// SwiftRNG device using SwiftRNG Entropy Server for Windows and SwiftRNG-32.dll
// when using 32-bit Windows as a target platform.
//
// For 64-bit applications use SwiftRNG-64.dll
//
//

program Project1;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils;

const
  randomNumberCount = 10; // How many random bytes to retrieve

type
  RandomBuffer = array [0 .. (randomNumberCount - 1)] of byte;
  xbuffer = ^RandomBuffer;
  IdentifierBuffer = array [0 .. 14] of byte;
  ibuffer = ^IdentifierBuffer;
  ModelBuffer = array [0 .. 14] of byte;
  mbuffer = ^ModelBuffer;

var
  i, status: integer;
  zbuffer: randombuffer;
  serialnumber: identifierbuffer;
  model: modelbuffer;

Function getEntropy(x: xbuffer; y: longword): integer; stdcall; external 'C:\tools\windows-binaries\windows-x86\SwiftRNG-32.dll';
Function getEntropyAsByte(): integer; stdcall; external 'C:\tools\windows-binaries\windows-x86\SwiftRNG-32.dll';
Function getDeviceIdentifier(p: ibuffer): integer; stdcall; external 'C:\tools\windows-binaries\windows-x86\SwiftRNG-32.dll';
Function getDeviceModel(p: mbuffer): integer; stdcall; external 'C:\tools\windows-binaries\windows-x86\SwiftRNG-32.dll';
Function getDeviceMajorVersion(): integer; stdcall; external 'C:\tools\windows-binaries\windows-x86\SwiftRNG-32.dll';
Function getDeviceMinorVersion(): integer; stdcall; external 'C:\tools\windows-binaries\windows-x86\SwiftRNG-32.dll';
Function getServerMajorVersion(): integer; stdcall; external 'C:\tools\windows-binaries\windows-x86\SwiftRNG-32.dll';
Function getServerMinorVersion(): integer; stdcall; external 'C:\tools\windows-binaries\windows-x86\SwiftRNG-32.dll';
Function getNoise(x: xbuffer; y: longword; z: integer): integer; stdcall; external 'C:\tools\windows-binaries\windows-x86\SwiftRNG-32.dll';

begin
  try

    status := getDeviceModel(@model);
    if status = 0 then
      begin
        writeln('Device model: ', TEncoding.ANSI.GetString(model));
        status := getDeviceIdentifier(@serialnumber);
        if status = 0 then
          begin
            writeln('Device identifier: ', TEncoding.ANSI.GetString(serialnumber));
          end
          else
            writeln('Could not retrieve device identifier');

        writeln('Device version: ', getDeviceMajorVersion(), '.', getDeviceMinorVersion());
        writeln('Entropy server version: ', getServerMajorVersion(), '.', getServerMinorVersion());
        writeln('Entropy sample byte: ', getEntropyAsByte);

        status := getEntropy(@zbuffer, randomNumberCount);
        if status = 0 then
          begin
            for i:=0 to randomNumberCount-1 do
              writeln('entropy byte[',i,'] = ', zbuffer[i]);
          end
          else
            writeln('Could not retrieve entropy');


        status := getNoise(@zbuffer, randomNumberCount, 1);
        if status = 0 then
          begin
            for i:=0 to randomNumberCount-1 do
              writeln('source noise 1 byte[',i,'] = ', zbuffer[i]);
          end
          else
            writeln('Could not retrieve bytes from noise source 1');


        status := getNoise(@zbuffer, randomNumberCount, 2);
        if status = 0 then
          begin
            for i:=0 to randomNumberCount-1 do
              writeln('source noise 2 byte[',i,'] = ', zbuffer[i]);
          end
          else
            writeln('Could not retrieve bytes from noise source 2');


      end
      else
        writeln('Could not retrieve device model, is entropy server running?');


  except
    on E: Exception do
      writeln(E.ClassName, ': ', E.Message);
  end;

end.