gnu.crypto.prng

Class CSPRNG

Implemented Interfaces:
Cloneable, IRandom

public class CSPRNG
extends BasePRNG

An entropy pool-based pseudo-random number generator based on the PRNG in Peter Gutmann's cryptlib (http://www.cs.auckland.ac.nz/~pgut001/cryptlib/).

The basic properties of this generator are:

  1. The internal state cannot be determined by knowledge of the input.
  2. It is resistant to bias introduced by specific inputs.
  3. The output does not reveal the state of the generator.

Field Summary

static String
BLOCKING
Property name for whether or not to wait for the slow poll to complete, passed as a Boolean.
static String
FILE_SOURCES
Property name for the list of files to read for random values.
static String
OTHER_SOURCES
Property name for a list of other sources of entropy.
static String
PROGRAM_SOURCES
Property name for the list of programs to execute, and use the output as new random bytes.
static String
URL_SOURCES
Property name for the list of URLs to poll for random values.

Fields inherited from class gnu.crypto.prng.BasePRNG

buffer, initialised, name, ndx

Constructor Summary

CSPRNG()

Method Summary

(package private) void
addQuality(double quality)
void
addRandomByte(byte b)
Add a single random byte to the randomness pool.
void
addRandomBytes(byte[] buf, int off, int len)
Add an array of bytes into the randomness pool.
Object
clone()
void
fillBlock()
protected void
finalize()
(package private) double
getQuality()
static IRandom
getSystemInstance()
Create and initialize a CSPRNG instance with the "system" parameters; the files, URLs, programs, and EntropySource sources used by the instance are derived from properties set in the system Properties.

All properties are of the from name.N, where name is the name of the source, and N is an integer (staring at 1) that indicates the preference number for that source.

The following vales for name are used here:

FILE_SOURCES

void
setup(Map attrib)

Methods inherited from class gnu.crypto.prng.BasePRNG

addRandomByte, addRandomBytes, addRandomBytes, clone, fillBlock, init, isInitialised, name, nextByte, nextBytes, nextBytes, setup

Field Details

BLOCKING

public static final String BLOCKING
Property name for whether or not to wait for the slow poll to complete, passed as a Boolean. The default value is true.

FILE_SOURCES

public static final String FILE_SOURCES
Property name for the list of files to read for random values. The mapped value is a list with the following values:
  1. A Double, indicating the suggested quality of this source. This value must be between 0 and 100.
  2. An Integer, indicating the number of bytes to skip in the file before reading bytes. This can be any nonnegative value.
  3. An Integer, indicating the number of bytes to read.
  4. A String, indicating the path to the file.

OTHER_SOURCES

public static final String OTHER_SOURCES

PROGRAM_SOURCES

public static final String PROGRAM_SOURCES

URL_SOURCES

public static final String URL_SOURCES

Constructor Details

CSPRNG

public CSPRNG()

Method Details

addQuality

(package private)  void addQuality(double quality)

addRandomByte

public void addRandomByte(byte b)
Add a single random byte to the randomness pool. Note that this method will not increment the pool's quality counter (this can only be done via a source provided to the setup method).
Specified by:
addRandomByte in interface IRandom
Overrides:
addRandomByte in interface BasePRNG
Parameters:
b - The byte to add.

addRandomBytes

public void addRandomBytes(byte[] buf,
                           int off,
                           int len)
Add an array of bytes into the randomness pool. Note that this method will not increment the pool's quality counter (this can only be done via a source provided to the setup method).
Specified by:
addRandomBytes in interface IRandom
Overrides:
addRandomBytes in interface BasePRNG
Parameters:
buf - The byte array.
off - The offset from whence to start reading bytes.
len - The number of bytes to add.

clone

public Object clone()
Specified by:
clone in interface IRandom
Overrides:
clone in interface BasePRNG

fillBlock

public void fillBlock()
            throws LimitReachedException
Overrides:
fillBlock in interface BasePRNG

finalize

protected void finalize()
            throws Throwable

getQuality

(package private)  double getQuality()

getSystemInstance

public static IRandom getSystemInstance()
            throws ClassNotFoundException,
                   MalformedURLException,
                   NumberFormatException
Create and initialize a CSPRNG instance with the "system" parameters; the files, URLs, programs, and EntropySource sources used by the instance are derived from properties set in the system Properties.

All properties are of the from name.N, where name is the name of the source, and N is an integer (staring at 1) that indicates the preference number for that source.

The following vales for name are used here:

FILE_SOURCES

quality ; offset ; count ; path

FILE_SOURCES

URL_SOURCESpath

PROGRAM_SOURCES

OTHER_SOURCESEntropySource

Finally, a boolean property "gnu.crypto.csprng.blocking" can be set to the desired value of BLOCKING.

An example of valid properties would be:

 gnu.crypto.csprng.blocking=true

 gnu.crypto.csprng.file.1=75.0;0;256;/dev/random
 gnu.crypto.csprng.file.2=10.0;0;100;/home/user/file

 gnu.crypto.csprng.url.1=5.0;0;256;http://www.random.org/cgi-bin/randbyte?nbytes=256
 gnu.crypto.csprng.url.2=0;256;256;http://slashdot.org/

 gnu.crypto.csprng.program.1=0.5;0;10;last -n 50
 gnu.crypto.csprng.program.2=0.5;0;10;tcpdump -c 5

 gnu.crypto.csprng.other.1=foo.bar.MyEntropySource
 gnu.crypto.csprng.other.2=com.company.OtherEntropySource
 

setup

public void setup(Map attrib)
Overrides:
setup in interface BasePRNG

Copyright © 2001, 2002, 2003 Free Software Foundation, Inc. All Rights Reserved.