Class SecureRandomSeedGenerator
- java.lang.Object
-
- io.github.pr0methean.betterrandom.seed.SecureRandomSeedGenerator
-
- All Implemented Interfaces:
SeedGenerator
,Serializable
public class SecureRandomSeedGenerator extends Object implements SeedGenerator, Serializable
SeedGenerator
implementation that uses Java's bundledSecureRandom
RNG to generate random seed data.The advantage of using SecureRandom for seeding but not as the primary RNG is that we can use it to seed RNGs that are much faster than SecureRandom.
This is the only seeding strategy that is guaranteed to work on all platforms and therefore is provided as a fall-back option should none of the other provided
SeedGenerator
implementations be usable.On Oracle and OpenJDK, SecureRandom uses
sun.security.provider.SeedGenerator
; when/dev/random
isn't available, that SeedGenerator class in turn uses the timing of newly-launched threads as a source of randomness, relying on the unpredictable interactions between different configurations of hardware and software and their workloads.- Author:
- Daniel Dyer
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description static SecureRandomSeedGenerator
DEFAULT_INSTANCE
The default instance.-
Fields inherited from interface io.github.pr0methean.betterrandom.seed.SeedGenerator
EMPTY_SEED
-
-
Constructor Summary
Constructors Constructor Description SecureRandomSeedGenerator(SecureRandom source)
Creates an instance.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
equals(Object o)
void
generateSeed(byte[] output)
Generates a seed value for a random number generator in an existing array.byte[]
generateSeed(int length)
Generates and returns a seed value for a random number generator as a new array.int
hashCode()
boolean
isWorthTrying()
Returns true if we cannot determine quickly (i.e.protected Object
readResolve()
String
toString()
-
-
-
Field Detail
-
DEFAULT_INSTANCE
public static final SecureRandomSeedGenerator DEFAULT_INSTANCE
The default instance. (This class was formerly a singleton.)
-
-
Constructor Detail
-
SecureRandomSeedGenerator
public SecureRandomSeedGenerator(SecureRandom source)
Creates an instance.- Parameters:
source
- theSecureRandom
whoseSecureRandom.generateSeed(int)
method will provide seeds
-
-
Method Detail
-
readResolve
protected Object readResolve()
-
generateSeed
public byte[] generateSeed(int length)
Generates and returns a seed value for a random number generator as a new array.- Specified by:
generateSeed
in interfaceSeedGenerator
- Parameters:
length
- The length of the seed to generate (in bytes).- Returns:
- A byte array containing the seed data.
- Throws:
SeedException
- If a seed cannot be generated for any reason.
-
generateSeed
public void generateSeed(byte[] output)
Description copied from interface:SeedGenerator
Generates a seed value for a random number generator in an existing array.- Specified by:
generateSeed
in interfaceSeedGenerator
- Parameters:
output
- The array that is to be populated with the seed.
-
isWorthTrying
public boolean isWorthTrying()
Returns true if we cannot determine quickly (i.e. without I/O calls) that this SeedGenerator would throw aSeedException
ifgenerateSeed(int)
orgenerateSeed(byte[])
were being called right now.- Specified by:
isWorthTrying
in interfaceSeedGenerator
- Returns:
- true if this SeedGenerator will get as far as an I/O call or other slow operation in attempting to generate a seed immediately.
-
-