For the latest news and information visit
The GNU Crypto project

gnu.crypto.mode
Class BaseMode

java.lang.Object
  extended bygnu.crypto.mode.BaseMode
All Implemented Interfaces:
java.lang.Cloneable, IBlockCipher, IMode
Direct Known Subclasses:
CBC, CFB, CTR, ECB, ICM, OFB

public abstract class BaseMode
extends java.lang.Object
implements IMode

A basic abstract class to facilitate implementing block cipher modes of operations.

Version:
$Revision: 1.2 $

Field Summary
protected  IBlockCipher cipher
          The underlying block cipher implementation.
protected  int cipherBlockSize
          The block size, in bytes, to operate the underlying block cipher in.
protected  byte[] iv
          The initialisation vector value.
protected  java.lang.Object lock
          The instance lock.
protected  int modeBlockSize
          The block size, in bytes, in which to operate the mode instance.
protected  java.lang.String name
          The canonical name prefix of this mode.
protected  int state
          The state indicator of this instance.
 
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
protected BaseMode(java.lang.String name, IBlockCipher underlyingCipher, int cipherBlockSize)
          Trivial constructor for use by concrete subclasses.
 
Method Summary
 java.util.Iterator blockSizes()
          Returns an Iterator over the supported block sizes.
abstract  java.lang.Object clone()
          Returns a clone of this instance.
 int currentBlockSize()
          Returns the currently set block size for this instance.
abstract  void decryptBlock(byte[] in, int i, byte[] out, int o)
          Decrypts exactly one block of ciphertext.
 int defaultBlockSize()
          Returns the default value, in bytes, of the mode's block size.
 int defaultKeySize()
          Returns the default value, in bytes, of the underlying block cipher key size.
abstract  void encryptBlock(byte[] in, int i, byte[] out, int o)
          Encrypts exactly one block of plaintext.
 void init(java.util.Map attributes)
          Initialises the algorithm with designated attributes.
 java.util.Iterator keySizes()
          Returns an Iterator over the supported underlying block cipher key sizes.
 java.lang.String name()
          Returns the canonical name of this instance.
 void reset()
          Resets the algorithm instance for re-initialisation and use with other characteristics.
 boolean selfTest()
          A correctness test that consists of basic symmetric encryption / decryption test(s) for all supported block and key sizes, as well as one (1) variable key Known Answer Test (KAT).
abstract  void setup()
          The initialisation phase of the concrete mode implementation.
abstract  void teardown()
          The termination phase of the concrete mode implementation.
 void update(byte[] in, int inOffset, byte[] out, int outOffset)
          A convenience method.
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

name

protected java.lang.String name
The canonical name prefix of this mode.


state

protected int state
The state indicator of this instance.


cipher

protected IBlockCipher cipher
The underlying block cipher implementation.


cipherBlockSize

protected int cipherBlockSize
The block size, in bytes, to operate the underlying block cipher in.


modeBlockSize

protected int modeBlockSize
The block size, in bytes, in which to operate the mode instance.


iv

protected byte[] iv
The initialisation vector value.


lock

protected java.lang.Object lock
The instance lock.

Constructor Detail

BaseMode

protected BaseMode(java.lang.String name,
                   IBlockCipher underlyingCipher,
                   int cipherBlockSize)

Trivial constructor for use by concrete subclasses.

Parameters:
name - the canonical name prefix of this mode.
underlyingCipher - the implementation of the underlying cipher.
cipherBlockSize - the block size, in bytes, in which to operate the underlying cipher.
Method Detail

update

public void update(byte[] in,
                   int inOffset,
                   byte[] out,
                   int outOffset)
            throws java.lang.IllegalStateException
Description copied from interface: IMode

A convenience method. Effectively invokes the encryptBlock() or decryptBlock() method depending on the operational state of the instance.

Specified by:
update in interface IMode
Parameters:
in - the plaintext.
inOffset - index of in from which to start considering data.
out - the ciphertext.
outOffset - index of out from which to store result.
Throws:
java.lang.IllegalStateException - if the instance is not initialised.

name

public java.lang.String name()
Description copied from interface: IBlockCipher

Returns the canonical name of this instance.

Specified by:
name in interface IBlockCipher
Returns:
the canonical name of this instance.

defaultBlockSize

public int defaultBlockSize()

Returns the default value, in bytes, of the mode's block size. This value is part of the construction arguments passed to the Factory methods in ModeFactory. Unless changed by an invocation of any of the init() methods, a Mode instance would operate with the same block size as its underlying block cipher. As mentioned earlier, the block size of the underlying block cipher itself is specified in one of the method(s) available in the factory class.

Specified by:
defaultBlockSize in interface IBlockCipher
Returns:
the default value, in bytes, of the mode's block size.
See Also:
ModeFactory

defaultKeySize

public int defaultKeySize()

Returns the default value, in bytes, of the underlying block cipher key size.

Specified by:
defaultKeySize in interface IBlockCipher
Returns:
the default value, in bytes, of the underlying cipher's key size.

blockSizes

public java.util.Iterator blockSizes()

Returns an Iterator over the supported block sizes. Each element returned by this object is an Integer.

The default behaviour is to return an iterator with just one value, which is that currently configured for the underlying block cipher. Concrete implementations may override this behaviour to signal their ability to support other values.

Specified by:
blockSizes in interface IBlockCipher
Returns:
an Iterator over the supported block sizes.

keySizes

public java.util.Iterator keySizes()

Returns an Iterator over the supported underlying block cipher key sizes. Each element returned by this object is an instance of Integer.

Specified by:
keySizes in interface IBlockCipher
Returns:
an Iterator over the supported key sizes.

init

public void init(java.util.Map attributes)
          throws java.security.InvalidKeyException,
                 java.lang.IllegalStateException
Description copied from interface: IBlockCipher

Initialises the algorithm with designated attributes. Permissible names and values are described in the class documentation above.

Specified by:
init in interface IBlockCipher
Parameters:
attributes - a set of name-value pairs that describes the desired future behaviour of this instance.
Throws:
java.security.InvalidKeyException - if the key data is invalid.
java.lang.IllegalStateException - if the instance is already initialised.
See Also:
IBlockCipher.KEY_MATERIAL, IBlockCipher.CIPHER_BLOCK_SIZE

currentBlockSize

public int currentBlockSize()
Description copied from interface: IBlockCipher

Returns the currently set block size for this instance.

Specified by:
currentBlockSize in interface IBlockCipher
Returns:
the current block size for this instance.

reset

public void reset()
Description copied from interface: IBlockCipher

Resets the algorithm instance for re-initialisation and use with other characteristics. This method always succeeds.

Specified by:
reset in interface IBlockCipher

selfTest

public boolean selfTest()
Description copied from interface: IBlockCipher

A correctness test that consists of basic symmetric encryption / decryption test(s) for all supported block and key sizes, as well as one (1) variable key Known Answer Test (KAT).

Specified by:
selfTest in interface IBlockCipher
Returns:
true if the implementation passes simple correctness tests. Returns false otherwise.

clone

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

Returns a clone of this instance.

Specified by:
clone in interface IBlockCipher

setup

public abstract void setup()
The initialisation phase of the concrete mode implementation.


teardown

public abstract void teardown()
The termination phase of the concrete mode implementation.


encryptBlock

public abstract 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
Parameters:
in - the plaintext.
i - index of in from which to start considering data.
out - the ciphertext.
o - index of out from which to store result.

decryptBlock

public abstract 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
Parameters:
in - the plaintext.
i - index of in from which to start considering data.
out - the ciphertext.
o - index of out from which to store result.

For the latest news and information visit
The GNU Crypto project

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