gnu.crypto.assembly

Class Cascade


public class Cascade
extends java.lang.Object

A Cascade Cipher is the concatenation of two or more block ciphers each with independent keys. Plaintext is input to the first stage; the output of stage i is input to stage i + 1; and the output of the last stage is the Cascade's ciphertext output.

In the simplest case, all stages in a Cascade have k-bit keys, and the stage inputs and outputs are all n-bit quantities. The stage ciphers may differ (general cascade of ciphers), or all be identical (cascade of identical ciphers).

The term "block ciphers" used above refers to implementations of IMode, including the ECB mode which basically exposes a symmetric-key block cipher algorithm as a Mode of Operations.

References:

  1. [HAC]: Handbook of Applied Cryptography.
    CRC Press, Inc. ISBN 0-8493-8523-7, 1997
    Menezes, A., van Oorschot, P. and S. Vanstone.

Version:
$Revision: 1.7 $

Field Summary

static String
DIRECTION
protected int
blockSize
The curently set block-size for this instance.
protected LinkedList
stageKeys
The ordered list of Stage UIDs to their attribute maps.
protected HashMap
stages
The map of Stages chained in this cascade.
protected Direction
wired
The current operational direction of this instance.

Constructor Summary

Cascade()

Method Summary

Object
append(Stage stage)
Adds to the end of the current chain, a designated Stage.
Set
blockSizes()
Returns the Set of supported block sizes for this Cascade that are common to all of its chained stages.
int
currentBlockSize()
Returns the currently set block size for the chain.
void
init(Map attributes)
Initialises the chain for operation with specific characteristics.
Object
insert(int index, Stage stage)
Inserts a Stage into the current chain, at the specified index (zero-based) position.
Object
prepend(Stage stage)
Adds to the begining of the current chain, a designated Stage.
void
reset()
Resets the chain for re-initialisation and use with other characteristics.
boolean
selfTest()
Conducts a simple correctness test that consists of basic symmetric encryption / decryption test(s) for all supported block and key sizes of underlying block cipher(s) wrapped by Mode leafs.
int
size()
Returns the current number of stages in this chain.
Iterator
stages()
Returns an Iterator over the stages contained in this instance.
void
update(byte[] in, int inOffset, byte[] out, int outOffset)
Processes exactly one block of plaintext (if initialised in the Direction.FORWARD state) or ciphertext (if initialised in the Direction.REVERSED state).

Field Details

DIRECTION

public static final String DIRECTION


blockSize

protected int blockSize
The curently set block-size for this instance.


stageKeys

protected LinkedList stageKeys
The ordered list of Stage UIDs to their attribute maps.


stages

protected HashMap stages
The map of Stages chained in this cascade.


wired

protected Direction wired
The current operational direction of this instance.

Constructor Details

Cascade

public Cascade()

Method Details

append

public Object append(Stage stage)
            throws IllegalArgumentException
Adds to the end of the current chain, a designated Stage.

Parameters:
stage - the Stage to append to the chain.

Returns:
a unique identifier for this stage, within this cascade.


blockSizes

public Set blockSizes()
Returns the Set of supported block sizes for this Cascade that are common to all of its chained stages. Each element in the returned Set is an instance of Integer.

Returns:
a Set of supported block sizes common to all the stages of the chain.


currentBlockSize

public int currentBlockSize()
Returns the currently set block size for the chain.

Returns:
the current block size for the chain.


init

public void init(Map attributes)
            throws InvalidKeyException
Initialises the chain for operation with specific characteristics.

Parameters:
attributes - a set of name-value pairs that describes the desired future behaviour of this instance.

See Also:
Direction.FORWARD, Direction.REVERSED


insert

public Object insert(int index,
                     Stage stage)
            throws IllegalArgumentException,
                   IndexOutOfBoundsException
Inserts a Stage into the current chain, at the specified index (zero-based) position.

Parameters:
stage - the Stage to insert into the chain.

Returns:
a unique identifier for this stage, within this cascade.


prepend

public Object prepend(Stage stage)
            throws IllegalArgumentException
Adds to the begining of the current chain, a designated Stage.

Parameters:
stage - the Stage to prepend to the chain.

Returns:
a unique identifier for this stage, within this cascade.


reset

public void reset()
Resets the chain for re-initialisation and use with other characteristics. This method always succeeds.


selfTest

public boolean selfTest()
Conducts a simple correctness test that consists of basic symmetric encryption / decryption test(s) for all supported block and key sizes of underlying block cipher(s) wrapped by Mode leafs. The test also includes one (1) variable key Known Answer Test (KAT) for each block cipher.

Returns:
true if the implementation passes simple correctness tests. Returns false otherwise.


size

public int size()
Returns the current number of stages in this chain.

Returns:
the current count of stages in this chain.


stages

public Iterator stages()

Returns:
an Iterator over the stages contained in this instance. Each element of the returned iterator is a concrete instance of a Stage.


update

public void update(byte[] in,
                   int inOffset,
                   byte[] out,
                   int outOffset)

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.


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