For the latest news and information visit
The GNU Crypto project

gnu.crypto.mode
Class ICM

java.lang.Object
  extended bygnu.crypto.mode.BaseMode
      extended bygnu.crypto.mode.ICM
All Implemented Interfaces:
java.lang.Cloneable, IBlockCipher, IMode

public class ICM
extends BaseMode
implements java.lang.Cloneable

An implementation of David McGrew Integer Counter Mode (ICM) as an IMode.

ICM 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 the case of this class, it is used as additive encryption, XOR-ing the keystream with the input text --for both encryption and decryption.

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. ICM also allows a variety of configurations based, among other things, on two parameters: the block index length and the segment index length. A constraint on those two values exists: The sum of segment index length and block index length must not half the block size of the underlying cipher. This requirement protects the ICM keystream generator from potentially failing to be pseudorandom.

For simplicity, this implementation, fixes these two values to the following:

For a 128-bit block cipher, the above values imply a maximum keystream length of 295,147,905,179,352,825,856 octets, since in ICM, each segment must not exceed the value (256 ^ block index length) * block length octets.

Finally, for this implementation of the ICM, the IV placeholder will be used to pass the value of the Offset in the keystream segment.

References:

  1. Integer Counter Mode, David A. McGrew.

Version:
$Revision: 1.2 $

Field Summary
 
Fields inherited from class gnu.crypto.mode.BaseMode
cipher, cipherBlockSize, iv, lock, modeBlockSize, name, state
 
Fields inherited from interface gnu.crypto.mode.IMode
DECRYPTION, ENCRYPTION, IV, MODE_BLOCK_SIZE, STATE
 
Fields inherited from interface gnu.crypto.cipher.IBlockCipher
CIPHER_BLOCK_SIZE, KEY_MATERIAL
 
Constructor Summary
(package private) ICM(IBlockCipher underlyingCipher, int cipherBlockSize)
          Trivial package-private constructor for use by the Factory class.
 
Method Summary
 java.lang.Object clone()
          Returns a clone of this instance.
 void decryptBlock(byte[] in, int i, byte[] out, int o)
          Decrypts exactly one block of ciphertext.
 void encryptBlock(byte[] in, int i, byte[] out, int o)
          Encrypts exactly one block of plaintext.
 void setup()
          The initialisation phase of the concrete mode implementation.
 void teardown()
          The termination phase of the concrete mode implementation.
 
Methods inherited from class gnu.crypto.mode.BaseMode
blockSizes, currentBlockSize, defaultBlockSize, defaultKeySize, init, keySizes, name, reset, selfTest, update
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ICM

ICM(IBlockCipher underlyingCipher,
    int cipherBlockSize)

Trivial package-private constructor for use by the Factory class.

Parameters:
underlyingCipher - the underlying cipher implementation.
cipherBlockSize - the underlying cipher block size to use.
Method Detail

clone

public java.lang.Object clone()
Description copied from interface: IBlockCipher

Returns a clone of this instance.

Specified by:
clone in interface IBlockCipher
Specified by:
clone in class BaseMode

setup

public void setup()
Description copied from class: BaseMode
The initialisation phase of the concrete mode implementation.

Specified by:
setup in class BaseMode

teardown

public void teardown()
Description copied from class: BaseMode
The termination phase of the concrete mode implementation.

Specified by:
teardown in class BaseMode

encryptBlock

public void encryptBlock(byte[] in,
                         int i,
                         byte[] out,
                         int o)
Description copied from interface: IBlockCipher

Encrypts exactly one block of plaintext.

Specified by:
encryptBlock in interface IBlockCipher
Specified by:
encryptBlock in class BaseMode

decryptBlock

public void decryptBlock(byte[] in,
                         int i,
                         byte[] out,
                         int o)
Description copied from interface: IBlockCipher

Decrypts exactly one block of ciphertext.

Specified by:
decryptBlock in interface IBlockCipher
Specified by:
decryptBlock in class BaseMode

For the latest news and information visit
The GNU Crypto project

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