net.i2p.util

## Class RandomSource

- java.lang.Object
- - java.util.Random
  - - java.security.SecureRandom
    - - net.i2p.util.RandomSource

- All Implemented Interfaces:
    Serializable, EntropyHarvester
  Direct Known Subclasses:
    FortunaRandomSource

      public class RandomSource
      extends SecureRandom
      implements EntropyHarvester

  Singleton for whatever PRNG i2p uses.
  See Also:
    Serialized Form

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected I2PAppContext` | `_context`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `RandomSource(I2PAppContext context)` Deprecated - do not instantiate this directly, as you won't get the good one (Fortuna).

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `feedEntropy(String source, byte[] data, int offset, int len)` Feed the entropy pools with data[offset:offset+len]
    `void` | `feedEntropy(String source, long data, int bitoffset, int bits)` Feed the entropy pools with the bits in the data
    `static RandomSource` | `getInstance()` Singleton for whatever PRNG i2p uses.
    `EntropyHarvester` | `harvester()`
    `boolean` | `initSeed(byte[] buf)` May block up to 10 seconds
    `void` | `loadSeed()` May block up to 10 seconds
    `void` | `nextBytes(byte[] buf, int offset, int length)` Not part of java.util.SecureRandom, but added since Fortuna supports it.
    `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 n)` Like the modified nextInt, nextLong(n) returns a random number from 0 through n, including 0, excluding n.
    `void` | `saveSeed()`
    `int` | `signedNextInt()` This code unused, see FortunaRandomSource override
    `static void` | `writeSeed(byte[] buf)`

    - ### Methods inherited from class java.security.SecureRandom

      `generateSeed, getAlgorithm, getInstance, getInstance, getInstance, getInstanceStrong, getProvider, getSeed, next, nextBytes, setSeed, setSeed`

    - ### Methods inherited from class java.util.Random

      `doubles, doubles, doubles, doubles, ints, ints, ints, ints, longs, longs, longs, longs, nextBoolean, nextDouble, nextFloat, nextGaussian, nextInt, nextLong`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### _context

          protected final transient I2PAppContext _context

  - ### Constructor Detail

    - #### RandomSource

          public RandomSource(I2PAppContext context)

      Deprecated - do not instantiate this directly, as you won't get the good one (Fortuna). Use getInstance() or I2PAppContext.getGlobalContext().random() to get the FortunaRandomSource instance.

  - ### Method Detail

    - #### feedEntropy

          public void feedEntropy(String source,
                                  byte[] data,
                                  int offset,
                                  int len)

      Description copied from interface: `EntropyHarvester`
      Feed the entropy pools with data[offset:offset+len]
      Specified by:
        `feedEntropy` in interface `EntropyHarvester`
      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

    - #### feedEntropy

          public void feedEntropy(String source,
                                  long data,
                                  int bitoffset,
                                  int bits)

      Description copied from interface: `EntropyHarvester`
      Feed the entropy pools with the bits in the data
      Specified by:
        `feedEntropy` in interface `EntropyHarvester`
      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

    - #### getInstance

          public static RandomSource getInstance()

      Singleton for whatever PRNG i2p uses. Same as I2PAppContext.getGlobalContext().random(); use context.random() if you have a context already.
      Returns:
        I2PAppContext.getGlobalContext().random()

    - #### harvester

          public EntropyHarvester harvester()

    - #### initSeed

          public final boolean initSeed(byte[] buf)

      May block up to 10 seconds

    - #### loadSeed

          public void loadSeed()

      May block up to 10 seconds

    - #### nextBytes

          public void nextBytes(byte[] buf,
                                int offset,
                                int length)

      Not part of java.util.SecureRandom, but added since Fortuna supports it. This code unused, see FortunaRandomSource override

    - #### 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. This code unused, see FortunaRandomSource override
      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. This code unused, see FortunaRandomSource override

    - #### saveSeed

          public void saveSeed()

    - #### signedNextInt

          public int signedNextInt()

      This code unused, see FortunaRandomSource override
      Returns:
        all possible int values, positive and negative

    - #### writeSeed

          public static final void writeSeed(byte[] buf)