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 Details

  • 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:
      setSeed in class SecureRandom
    • 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)
      Overrides:
      nextBytes in class SecureRandom
    • 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!
    • harvester

      public EntropyHarvester harvester()
      Overrides:
      harvester in class RandomSource
    • 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