Package net.i2p.util

Class 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
    • 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
      • 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 class RandomSource
      • nextInt

        public int nextInt()
        Overrides:
        nextInt in class Random
      • 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 class RandomSource
      • nextLong

        public long nextLong()
        Overrides:
        nextLong in class Random
      • nextBoolean

        public boolean nextBoolean()
        Overrides:
        nextBoolean in class Random
      • 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 class RandomSource
        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 class Random
      • nextFloat

        public float nextFloat()
        Implementation from sun's java.util.Random javadocs
        Overrides:
        nextFloat in class Random
      • nextGaussian

        public double nextGaussian()
        Implementation from sun's java.util.Random javadocs
        Overrides:
        nextGaussian in class Random
      • 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!
      • feedEntropy

        public void feedEntropy​(String source,
                                long data,
                                int bitoffset,
                                int bits)
        reseed the fortuna
        Specified by:
        feedEntropy in interface EntropyHarvester
        Overrides:
        feedEntropy in class RandomSource
        Parameters:
        source - origin of the entropy, allowing the harvester to determine how much to value the data
        bitoffset - 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 interface EntropyHarvester
        Overrides:
        feedEntropy in class RandomSource
        Parameters:
        source - origin of the entropy, allowing the harvester to determine how much to value the data
        offset - index into the data array to start
        len - 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