Skip to content

A SecureRandomSPI that makes SwiftRNG devices available to SecureRandom

License

Notifications You must be signed in to change notification settings

catap/swrng-provider

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SwiftRNG SecureRandomSPI

A SecureRandomSPI that makes SwiftRNG devices available to SecureRandom.

This code automatically detect attached devices on Linux and macOS, and when a machine has more of one SwiftRNG it uses round-robin algorithm to balance getRandomBytes calls between devices.

To use it you should add this provider to dependency like

<dependency>
  <groupId>ky.korins</groupId>
  <artifactId>swrng-provider</artifactId>
  <version>1.0.0</version>
</dependency>

and use via specified instance:

  SecureRandom random = SecureRandom.getInstance("SwiftRNG");

But you should configure it. The easy way is adding this security provider by hand:

  Security.addProvider(new SwiftRNGProvider());

or you can add it to java.security as

security.provider.N=SwiftRNG

where N should be the value of the last provider incremented by 1.

You can also select one or more devices that this code should use. For example we would like to use SwiftRNG that attached as /dev/cu.usbmodemSWRNGP000A0061 we can do:

SecureRandom random = SecureRandom.getInstance("SwiftRNG", new SwiftRNGParameters(Collections.singletonList("/dev/cu.usbmodemSWRNGP000A0061")));

or you can specified at java.security comma separated list of used devices such as:

securerandom.swiftrng.devices=/dev/cu.usbmodemSWRNGP000A0061,/dev/cu.usbmodemSWRNGP000A0062

and this is the only way to use this provider at Windows where you can get path to the device by mode.

Thus, this code is using locking to prevent parallel using the device and this add limitation that only one SecureRandom instance can be created per device that is thread safe.

You also can test your configuration by running a main method from ky.korins.swrng.SwiftRNGDevices that returns all found devices like that

SwiftRNGDevice{path=/dev/cu.usbmodemSWRNGP000A0061, model='SWRNGPRO', version='V2.1', serialNumber='XXX'}
SwiftRNGDevice{path=/dev/cu.usbmodemSWRNGP000A0062, model='SWRNGPRO', version='V2.1', serialNumber='XXX'}

About

A SecureRandomSPI that makes SwiftRNG devices available to SecureRandom

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages