For the latest news and information visit The GNU Crypto project

## gnu.crypto.prng
Class ICMGenerator

    java.lang.Object
      |
      +--gnu.crypto.prng.BasePRNG
            |
            +--gnu.crypto.prng.ICMGenerator

All Implemented Interfaces:
  java.lang.Cloneable, IRandom

public class ICMGenerator
extends BasePRNG

Counter Mode is a way to define a pseudorandom keystream generator using a block cipher. The keystream can be used for additive encryption, key derivation, or any other application requiring pseudorandom data.

In ICM, the keystream is logically broken into segments. Each segment is identified with a segment index, and the segments have equal lengths. This segmentation makes ICM especially appropriate for securing packet-based protocols.

This implementation adheres to the definition of the ICM keystream generation function that allows for any symetric key block cipher algorithm (initialisation parameter `gnu.crypto.prng.icm.cipher.name` taken to be an instance of `String`) to be used. If such a parameter is not defined/included in the initialisation `Map`, then the "Rijndael" algorithm is used. Furthermore, if the initialisation parameter `gnu.crypto.cipher.block.size` (taken to be a instance of `Integer`) is missing or undefined in the initialisation `Map`, then the cipher's default block size is used.

The practical limits and constraints of such generator are:

- The number of blocks in any segment MUST NOT exceed `256 ** BLOCK_INDEX_LENGTH`. The number of segments MUST NOT exceed `256 ** SEGMENT_INDEX_LENGTH`. These restrictions ensure the uniqueness of each block cipher input.
- Each segment contains `SEGMENT_LENGTH` octets; this value MUST NOT exceed the value `(256 ** BLOCK_INDEX_LENGTH) * BLOCK_LENGTH`.
- The sum of `SEGMENT_INDEX_LENGTH` and `BLOCK_INDEX_LENGTH` MUST NOT exceed `BLOCK_LENGTH / 2`. This requirement protects the ICM keystream generator from potentially failing to be pseudorandom.

NOTE: Rijndael is used as the default symmetric key block cipher algorithm because, with its default block and key sizes, it is the AES. Yet being Rijndael, the algorithm offers more versatile block and key sizes which may prove to be useful for generating longer key streams.

References:

1. Integer Counter Mode, David A. McGrew.

Field Summary
`static java.lang.String` `BLOCK_INDEX_LENGTH` Property name of ICM's block index length.
`static java.lang.String` `CIPHER` Property name of underlying block cipher for this ICM generator.
`static java.lang.String` `OFFSET` Property name of ICM's offset.
`static java.lang.String` `SEGMENT_INDEX` Property name of ICM's segment index.
`static java.lang.String` `SEGMENT_INDEX_LENGTH` Property name of ICM's segment index length.

Fields inherited from class gnu.crypto.prng.BasePRNG
`buffer, initialised, name, ndx`

Constructor Summary
`ICMGenerator()` Trivial 0-arguments constructor.

Method Summary
`java.lang.Object` `clone()` Returns a clone copy of this instance.
`void` `fillBlock()`
`void` `setup(java.util.Map attributes)`

Methods inherited from class gnu.crypto.prng.BasePRNG
`init, isInitialised, name, nextByte, nextBytes`

Methods inherited from class java.lang.Object
`equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### CIPHER

    public static final java.lang.String CIPHER

  Property name of underlying block cipher for this ICM generator.

  See Also:
    Constant Field Values

### BLOCK_INDEX_LENGTH

    public static final java.lang.String BLOCK_INDEX_LENGTH

  Property name of ICM's block index length.

  See Also:
    Constant Field Values

### SEGMENT_INDEX_LENGTH

    public static final java.lang.String SEGMENT_INDEX_LENGTH

  Property name of ICM's segment index length.

  See Also:
    Constant Field Values

### OFFSET

    public static final java.lang.String OFFSET

  Property name of ICM's offset.

  See Also:
    Constant Field Values

### SEGMENT_INDEX

    public static final java.lang.String SEGMENT_INDEX

  Property name of ICM's segment index.

  See Also:
    Constant Field Values

Constructor Detail

### ICMGenerator

    public ICMGenerator()

  Trivial 0-arguments constructor.

Method Detail

### clone

    public java.lang.Object clone()

  Description copied from interface: `IRandom`

  Returns a clone copy of this instance.

  Specified by:
    `clone` in interface `IRandom`
  Specified by:
    `clone` in class `BasePRNG`
  Returns:
    a clone copy of this instance.

### setup

    public void setup(java.util.Map attributes)

  Specified by:
    `setup` in class `BasePRNG`

### fillBlock

    public void fillBlock()
                   throws LimitReachedException

  Specified by:
    `fillBlock` in class `BasePRNG`
    `LimitReachedException`

For the latest news and information visit The GNU Crypto project

Copyright © 2001, 2002, 2003, 2004 Free Software Foundation, Inc.