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 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 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:
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
-
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
-
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
public EntropyHarvester harvester()
- Overrides:
harvesterin classRandomSource
-
feedEntropy
public void feedEntropy(String source, long data, int bitoffset, int bits)
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
public void feedEntropy(String source, byte[] data, int offset, int len)
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
public static void main(String[] args)
Outputs to stdout for dieharder:java -cp build/i2p.jar net.i2p.util.FortunaRandomSource | dieharder -a -g 200
-
-