Package net.i2p.util
Class FortunaRandomSource
- java.lang.Object
-
- java.util.Random
-
- java.security.SecureRandom
-
- net.i2p.util.RandomSource
-
- net.i2p.util.FortunaRandomSource
-
- All Implemented Interfaces:
Serializable
,EntropyHarvester
public class FortunaRandomSource extends RandomSource implements EntropyHarvester
Wrapper around GNU-Crypto's Fortuna PRNG. This seeds from /dev/urandom and ./prngseed.rnd on startup (if they exist), writing a new seed to ./prngseed.rnd on an explicit call to saveSeed().- See Also:
- Serialized Form
-
-
Field Summary
-
Fields inherited from class net.i2p.util.RandomSource
_context
-
-
Constructor Summary
Constructors Constructor Description FortunaRandomSource(I2PAppContext context)
May block up to 10 seconds or forever
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
feedEntropy(String source, byte[] data, int offset, int len)
reseed the fortunavoid
feedEntropy(String source, long data, int bitoffset, int bits)
reseed the fortunaEntropyHarvester
harvester()
static void
main(String[] args)
Outputs to stdout for dieharder:java -cp build/i2p.jar net.i2p.util.FortunaRandomSource | dieharder -a -g 200
protected int
nextBits(int numBits)
Pull the next numBits of random data off the fortuna instance (returning 0 through 2^numBits-1 Caller must synchronize!boolean
nextBoolean()
byte
nextByte()
Not part of java.util.SecureRandom, but added for efficiency, since Fortuna supports it.void
nextBytes(byte[] buf)
void
nextBytes(byte[] buf, int offset, int length)
Not part of java.util.SecureRandom, but added for efficiency, since Fortuna supports it.double
nextDouble()
Implementation from sun's java.util.Random javadocsfloat
nextFloat()
Implementation from sun's java.util.Random javadocsdouble
nextGaussian()
Implementation from sun's java.util.Random javadocsint
nextInt()
int
nextInt(int n)
According to the java docs (http://java.sun.com/j2se/1.4.1/docs/api/java/util/Random.html#nextInt(int)) nextInt(n) should return a number between 0 and n (including 0 and excluding n).long
nextLong()
long
nextLong(long n)
Like the modified nextInt, nextLong(n) returns a random number from 0 through n, including 0, excluding n.void
setSeed(byte[] buf)
void
shutdown()
Note - methods may hang or NPE or throw IllegalStateExceptions after this-
Methods inherited from class net.i2p.util.RandomSource
getInstance, initSeed, loadSeed, saveSeed, writeSeed
-
Methods inherited from class java.security.SecureRandom
generateSeed, getAlgorithm, getInstance, getInstance, getInstance, getInstance, getInstance, getInstance, getInstanceStrong, getParameters, getProvider, getSeed, next, nextBytes, reseed, reseed, setSeed, toString
-
-
-
-
Constructor Detail
-
FortunaRandomSource
public FortunaRandomSource(I2PAppContext context)
May block up to 10 seconds or forever
-
-
Method Detail
-
shutdown
public void shutdown()
Note - methods may hang or NPE or throw IllegalStateExceptions after this- Since:
- 0.8.8
-
setSeed
public void setSeed(byte[] buf)
- Overrides:
setSeed
in classSecureRandom
-
nextInt
public int nextInt(int n)
According to the java docs (http://java.sun.com/j2se/1.4.1/docs/api/java/util/Random.html#nextInt(int)) nextInt(n) should return a number between 0 and n (including 0 and excluding n). However, their pseudocode, as well as sun's, kaffe's, and classpath's implementation INCLUDES NEGATIVE VALUES. Ok, so we're going to have it return between 0 and n (including 0, excluding n), since thats what it has been used for.- Overrides:
nextInt
in classRandomSource
-
nextLong
public long nextLong(long n)
Like the modified nextInt, nextLong(n) returns a random number from 0 through n, including 0, excluding n.- Overrides:
nextLong
in classRandomSource
-
nextBoolean
public boolean nextBoolean()
- Overrides:
nextBoolean
in classRandom
-
nextBytes
public void nextBytes(byte[] buf)
- Overrides:
nextBytes
in classSecureRandom
-
nextBytes
public void nextBytes(byte[] buf, int offset, int length)
Not part of java.util.SecureRandom, but added for efficiency, since Fortuna supports it.- Overrides:
nextBytes
in classRandomSource
- Since:
- 0.8.12
-
nextByte
public byte nextByte()
Not part of java.util.SecureRandom, but added for efficiency, since Fortuna supports it.- Since:
- 0.9.24
-
nextDouble
public double nextDouble()
Implementation from sun's java.util.Random javadocs- Overrides:
nextDouble
in classRandom
-
nextFloat
public float nextFloat()
Implementation from sun's java.util.Random javadocs
-
nextGaussian
public double nextGaussian()
Implementation from sun's java.util.Random javadocs- Overrides:
nextGaussian
in classRandom
-
nextBits
protected int nextBits(int numBits)
Pull the next numBits of random data off the fortuna instance (returning 0 through 2^numBits-1 Caller must synchronize!
-
harvester
public EntropyHarvester harvester()
- Overrides:
harvester
in classRandomSource
-
feedEntropy
public void feedEntropy(String source, long data, int bitoffset, int bits)
reseed the fortuna- Specified by:
feedEntropy
in interfaceEntropyHarvester
- Overrides:
feedEntropy
in classRandomSource
- Parameters:
source
- origin of the entropy, allowing the harvester to determine how much to value the databitoffset
- bit index into the data array to start (using java standard big-endian)bits
- how many bits to use
-
feedEntropy
public void feedEntropy(String source, byte[] data, int offset, int len)
reseed the fortuna- Specified by:
feedEntropy
in interfaceEntropyHarvester
- Overrides:
feedEntropy
in classRandomSource
- Parameters:
source
- origin of the entropy, allowing the harvester to determine how much to value the dataoffset
- index into the data array to startlen
- how many bytes to use
-
main
public static void main(String[] args)
Outputs to stdout for dieharder:java -cp build/i2p.jar net.i2p.util.FortunaRandomSource | dieharder -a -g 200
-
-