We are announcing today an important update of the SwiftRNG Software Kit. Beginning with version 4.5, the SwiftRNG API contains device cluster scalability and fail-over capabilities for 64-bit Windows. This makes it possible to use multiple SwiftRNG devices to increase the total random number generation speed. This new API feature seamlessly integrates multiple devices on Windows and uses them concurrently as a single stream of random numbers.

The software update comes with a new entropy-cl-server.exe, which is a Windows based pipe server that uses a duplex-named pipe for distributing random bytes generated by two or more SwiftRNG devices. Windows applications can concurrently access entropy-cl-server through the provided SwiftRNG.dll. Applications written in languages such as C/C++, C#, and Java can concurrently retrieve true random bytes generated by a cluster of SwiftRNG devices by connecting with the entropy-cl-server directly through the named pipe. Source code examples are available here.

In this post, we will show how to use four SwiftRNG Pro devices to generate a high quality random number stream at a speed of 800 Mbps (Fig. 1).

SwiftRNG Pro cluster at 800 Mbps speed

We recommend the following computer hardware configuration for testing:

  • A fast CPU, with at least 6 logical processors. (We used an I7-3630QM CPU @ 2.4 GHz.)
  • 4 USB highspeed ports. USB 3 type is recommended for best results. (We used a Toshiba Satellite Laptop P878-S7102.)
  • Windows 10 64-bit
  • Four SwiftRNG Pro devices: each device should be plugged directly into a USB port. Do not use USB hubs.
  • entropy-cl-server.exe available from a command line.

To test your SwiftRNG Pro device cluster performance, start entropy-cl-server.exe by entering the following in the command line:

entropy-cl-server.exe -cs 4 

The output may look like this:

Entropy server started using a cluster of 4 devices, post processing: 'default', on named pipe: \\.\pipe\SwiftRNG

Open a new command line window and enter the following:

entropy-client-test.exe

The output may look like this:

----------------------------------------------------------------------------
-------------------------- entropy-client-test -----------------------------
--- A program utility for testing the connectivity to the entropy server. --
--- Usage: entropy-client-test [pipe endpoint] -----------------------------
----------------------------------------------------------------------------

Using named pipe:  \\.\pipe\SwiftRNG

-------- Testing connectivity to the entropy server using named pipes ------
Connecting to the entropy server pipe .............................. SUCCESS
Retrieving 100000 bytes from the entropy server .................... SUCCESS
Running pipe communication diagnostics ............................. SUCCESS
Calculating entropy download speed ................................. 800.00 Mbps

------------ Testing connectivity to the entropy server using DLL ----------
Loading SwiftRNG.dll ............................................... SUCCESS
Getting proc addr swftSetEntropyServerPipeEndpointSynchronized() ... SUCCESS
Calling swftSetEntropyServerPipeEndpointSynchronized() ............. SUCCESS
Getting proc address swftGetByteFromEntropyServerSynchronized() .... SUCCESS
Testing swftGetByteFromEntropyServerSynchronized() ................. SUCCESS
swftGetByteFromEntropyServerSynchronized() download speed .......... 266.67 Mbps
Testing swftGetByteFromEntropyServerSynchronized()  50 threads ----- SUCCESS
Getting proc address swftGetEntropyFromEntropyServer() ............. SUCCESS
swftGetEntropyFromEntropyServer() download speed ................... 800 Mbps