Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works
Anything · Lazarus or Delphi
Random projectRandom project

Renegade.Random

Random functions using the current os's built in methods.

View on GitHub

Member rating

No ratings yet.

Sign in to rate this project.

README

Free Pascal Random Bytes

This file is a part of Renegade BBS.

This will only work with Free Pascal version 3+. I Think namespacing is a good idea, and FPC 3+ is not hard to get your hands on for any platform. In fact, I believe its the most cross platform program that I have ever found, including ScummVM.

From the Free Pascal website :

Free Pascal is a 32, 64 and 16 bit professional Pascal compiler. It can target many processor architectures: Intel x86 (including 8086), AMD64/x86-64, PowerPC, PowerPC64, SPARC, ARM, AArch64, MIPS and the JVM. Supported operating systems include Linux, FreeBSD, Haiku, Mac OS X/iOS/iPhoneSimulator/Darwin, DOS (16 and 32 bit), Win32, Win64, WinCE, OS/2, MorphOS, Nintendo GBA, Nintendo DS, Nintendo Wii, Android, AIX and AROS. Additionally, support for the Motorola 68k architecture is available in the development versions.

Usage

Make sure to include {$mode objfpc}{$H+} in your header or compile with -S2 -Sh switches.

pascal
Program RandomTest;
{$mode objfpc}{$H+}

uses
  Renegade.Random,
  Classes;

var
  R : TRandom;
  S : AnsiString;
  T : TBytes;
begin
  R := TRandom.Init;
  S := R.GetString(22);
  T := R.GetBytes(22);
  R.Free;

You can also use a custom random generator. It needs to implement Random.RandomInterface;

pascal
Program RandomTest;
{$mode objfpc}{$H+}

uses
  Renegade.Random,
  MyCustomGenerator,
  Classes;

var
  R : TRandom;
  S : AnsiString;
  T : TBytes;
begin
  R := TRandom.Init;
  R.RandomGenerator := MyCustomGenerator.Create;
  S := R.GetString(22);
  T := R.GetBytes(22);
  R.SetDefaultGenerator; // To get back to the default Generator.
  S := R.GetString(22);
  T := R.GetBytes(22);
  R.Free;
  • On Linux systems TRandom trys to use syscall(SYS_getrandom) if that fails it reads from /dev/urandom and then /dev/random before failing.
  • On Windows systems TRandom uses Windows built in CryptGenRandom function.
  • On BSD systems TRandom uses arc4random_buf. (Done : read from arc4random_buf this is the same on Mac systems, because Mac = FreeBSD)

TRandom will fall back on Free Pascal's Random function which uses the Mersenne Twister algorithm to get random bytes.