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
-
Constructor Summary
Constructors Constructor Description FortunaRandomSource(I2PAppContext context)May block up to 10 seconds or forever -
Method Summary
Modifier and Type Method Description voidfeedEntropy(String source, byte[] data, int offset, int len)reseed the fortunavoidfeedEntropy(String source, long data, int bitoffset, int bits)reseed the fortunaEntropyHarvesterharvester()static voidmain(String[] args)Outputs to stdout for dieharder:java -cp build/i2p.jar net.i2p.util.FortunaRandomSource | dieharder -a -g 200protected intnextBits(int numBits)Pull the next numBits of random data off the fortuna instance (returning 0 through 2^numBits-1 Caller must synchronize!booleannextBoolean()bytenextByte()Not part of java.util.SecureRandom, but added for efficiency, since Fortuna supports it.voidnextBytes(byte[] buf)voidnextBytes(byte[] buf, int offset, int length)Not part of java.util.SecureRandom, but added for efficiency, since Fortuna supports it.doublenextDouble()Implementation from sun's java.util.Random javadocsfloatnextFloat()Implementation from sun's java.util.Random javadocsdoublenextGaussian()Implementation from sun's java.util.Random javadocsintnextInt()intnextInt(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).longnextLong()longnextLong(long n)Like the modified nextInt, nextLong(n) returns a random number from 0 through n, including 0, excluding n.voidsetSeed(byte[] buf)voidshutdown()Note - methods may hang or NPE or throw IllegalStateExceptions after thisMethods inherited from class net.i2p.util.RandomSource
getInstance, initSeed, loadSeed, saveSeed, writeSeedMethods 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 Details
-
FortunaRandomSource
May block up to 10 seconds or forever
-
-
Method Details
-
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:
setSeedin 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:
nextIntin classRandomSource
-
nextInt
public int nextInt() -
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:
nextLongin classRandomSource
-
nextLong
public long nextLong() -
nextBoolean
public boolean nextBoolean()- Overrides:
nextBooleanin classRandom
-
nextBytes
public void nextBytes(byte[] buf)- Overrides:
nextBytesin 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:
nextBytesin 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:
nextDoublein 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:
nextGaussianin 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
- Overrides:
harvesterin classRandomSource
-
feedEntropy
reseed the fortuna- Specified by:
feedEntropyin interfaceEntropyHarvester- Overrides:
feedEntropyin 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
reseed the fortuna- Specified by:
feedEntropyin interfaceEntropyHarvester- Overrides:
feedEntropyin 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
Outputs to stdout for dieharder:java -cp build/i2p.jar net.i2p.util.FortunaRandomSource | dieharder -a -g 200
-