cryptix.provider.mode

Class CFB

Implemented Interfaces:
FeedbackCipher, Parameterized, SymmetricCipher
Known Direct Subclasses:
CFB_PGP

public class CFB
extends FeedbackMode

Implements a byte-oriented stream cipher using n-bit CFB with an n-bit-sized block cipher.

The full block size of the supplied cipher is used for the Cipher Feedback Mode. The bytes supplied are processed and returned immediately.

References:

  1. Bruce Schneier, "Section 9.6 Cipher Feedback Mode," and "Section 9.11 Choosing a Cipher Mode," Applied Cryptography, 2nd edition, John Wiley & Sons, 1996

  2. sci.crypt FAQ, "Part 5: Product Ciphers," ftp://ftp.rtfm.mit.edu/pub/usenet/news.answers/cryptography-faq/part05

  3. National Bureau of Standards (now NIST), "DES Modes of Operation," NBS FIPS PUB 81, U.S. Department of Commerce, December 1980

Copyright © 1995-1997 Systemics Ltd on behalf of the Cryptix Development Team.
All rights reserved.

$Revision: 1.5 $

Authors:
David Hopwood
Raif S. Naffah

Since:
Cryptix 2.2.2

Field Summary

Fields inherited from class cryptix.provider.mode.FeedbackMode

currentByte, ivBlock, ivStart, length

Fields inherited from class xjava.security.Mode

cipher

Fields inherited from class xjava.security.Cipher

DECRYPT, ENCRYPT, UNINITIALIZED

Fields inherited from class xjava.security.IJCE_Traceable

tracing

Constructor Summary

CFB()
Constructs a CFB mode object.
CFB(Cipher cipher)
Constructs a CFB cipher, assuming that the IV will be provided via setInitializationVector.
CFB(Cipher cipher, byte[] iv)
Constructs a CFB cipher, using an initialization vector provided in the constructor.

Method Summary

protected int
engineBlockSize()
protected void
engineInitDecrypt(Key newkey)
protected void
engineInitEncrypt(Key newkey)
protected void
engineSetCipher(Cipher cipher)
protected int
engineUpdate(byte[] in, int inOffset, int inLen, byte[] out, int outOffset)
SPI: This is the main engine method for updating data.
protected void
next_block()
Rotates the IV left by currentByte bytes, to mimic the V2.2 behaviour.

Methods inherited from class cryptix.provider.mode.FeedbackMode

engineSetCipher, getInitializationVector, getInitializationVectorLength, setInitializationVector

Methods inherited from class xjava.security.Mode

engineGetParameter, engineSetCipher, engineSetParameter, getAlgorithms, getAlgorithms, getInstance, getInstance, toString

Methods inherited from class xjava.security.Cipher

blockSize, clone, crypt, crypt, crypt, doFinal, doFinal, doFinal, doFinal, engineBlockSize, engineCiphertextBlockSize, engineCrypt, engineGetParameter, engineInBufferSize, engineInitDecrypt, engineInitEncrypt, engineOutBufferSize, enginePlaintextBlockSize, engineSetPaddingScheme, engineSetParameter, engineUpdate, getAlgorithm, getAlgorithms, getAlgorithms, getCiphertextBlockSize, getInputBlockSize, getInstance, getInstance, getInstance, getMode, getOutputBlockSize, getPadding, getPaddingScheme, getParameter, getPlaintextBlockSize, getProvider, getState, inBufferSize, inBufferSizeFinal, initDecrypt, initEncrypt, isPaddingBlockCipher, outBufferSize, outBufferSizeFinal, setParameter, toString, update, update, update, update

Methods inherited from class xjava.security.IJCE_Traceable

disableTracing, enableTracing, traceMethod, traceResult, traceResult, traceVoidMethod

Constructor Details

CFB

public CFB()
Constructs a CFB mode object.

The IV is provided via setInitializationVector. This IV must be unique during the lifetime of the key. If it is not unique, at least the first block of the plaintext can be recovered.


CFB

public CFB(Cipher cipher)
Constructs a CFB cipher, assuming that the IV will be provided via setInitializationVector. See the previous constructor for more details.

Parameters:
cipher - the cipher object to use in CFB mode.


CFB

public CFB(Cipher cipher,
           byte[] iv)
Constructs a CFB cipher, using an initialization vector provided in the constructor.

Parameters:
cipher - the block cipher to use
iv - the initial value for the shift register (IV)

Method Details

engineBlockSize

protected int engineBlockSize()
Overrides:
engineBlockSize in interface Cipher


engineInitDecrypt

protected void engineInitDecrypt(Key newkey)
            throws KeyException
Overrides:
engineInitDecrypt in interface Cipher


engineInitEncrypt

protected void engineInitEncrypt(Key newkey)
            throws KeyException
Overrides:
engineInitEncrypt in interface Cipher


engineSetCipher

protected void engineSetCipher(Cipher cipher)
Overrides:
engineSetCipher in interface FeedbackMode


engineUpdate

protected int engineUpdate(byte[] in,
                           int inOffset,
                           int inLen,
                           byte[] out,
                           int outOffset)
SPI: This is the main engine method for updating data. It may be called with any size of input.

in and out may be the same array, and the input and output regions may overlap.

Overrides:
engineUpdate in interface Cipher

Parameters:
in - the input data.
inOffset - the offset into in specifying where the data starts.
inLen - the length of the subarray.
out - the output array.
outOffset - the offset indicating where to start writing into the out array.

Returns:
the number of bytes written.


next_block

protected void next_block()
Rotates the IV left by currentByte bytes, to mimic the V2.2 behaviour. This is needed in order to implement the variant of CFB used by PGP.

See Also:
CFB_PGP