For the latest news and information visit The GNU Crypto project

## Package gnu.crypto.mode

Provides a basic API for using block cipher Modes of Operation.

See:
Description

Interface Summary
IMode: The basic visible methods of any block cipher mode.

Class Summary
BaseMode: A basic abstract class to facilitate implementing block cipher modes of operations.
CBC: The Cipher Block Chaining mode.
CFB: The cipher feedback mode.
CTR: The implementation of the Counter Mode.
ECB: The implementation of the Electronic Codebook mode.
ICM: An implementation of David McGrew Integer Counter Mode (ICM) as an `IMode`.
ModeFactory: A Factory to instantiate block cipher modes of operations.
OFB: The Output Feedback (OFB) mode is a confidentiality mode that requires a unique `IV` for every message that is ever encrypted under the given key.

## Package gnu.crypto.mode Description

Provides a basic API for using block cipher Modes of Operation.

## Package overview

Cipher modes operate on the next level up from the underlying block cipher. They transform the blocks going in and out of the cipher in ways to give them desirable properties in certain circumstances.

The following diagram shows the important classes participating in this package:

The following example encrypts and decrypts a byte array with the AES in CFB mode. See the `gnu.crypto.pad` package for instances where the input is not a multiple of the cipher or mode's block size.

    IMode mode = ModeFactory.getInstance("CFB", "AES", 16);
    Map attributes = new HashMap();

    // These attributes are defined in gnu.crypto.cipher.IBlockCipher.
    attributes.put(IMode.KEY_MATERIAL, key_bytes);
    attributes.put(IMode.CIPHER_BLOCK_SIZE, new Integer(16));

    // These attributes are defined in IMode.
    attributes.put(IMode.STATE, new Integer(IMode.ENCRYPTION));
    attributes.put(IMode.IV, iv_bytes);

    mode.init(attributes);
    int bs = mode.currentBlockSize();

    for (int i = 0; i + bs < pt.length; i += bs)
      {
        mode.update(pt, i, ct, i);
      }

    mode.reset();
    attributes.put(IMode.STATE, new Integer(IMode.DECRYPTION);
    mode.init(attributes);

    for (int i = 0; i + bs < ct.length; i += bs)
      {
        mode.update(ct, i, cpt, i);
      }

For the latest news and information visit The GNU Crypto project

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