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.