cryptix.provider.mode
Class FeedbackMode

java.lang.Object
  |
  +--xjava.security.IJCE_Traceable
        |
        +--xjava.security.Cipher
              |
              +--xjava.security.Mode
                    |
                    +--cryptix.provider.mode.FeedbackMode
All Implemented Interfaces:
FeedbackCipher, Parameterized, SymmetricCipher
Direct Known Subclasses:
CBC, CFB, OFB, PCBC

abstract class FeedbackMode
extends Mode
implements FeedbackCipher, SymmetricCipher

FeedbackMode is used to provide the functionality of an encryption mode, such as CBC, CFB, or OFB, that works as a feedback cipher, where the size of the IV and feedback buffer are equal to the cipher's block size.

It is internal to Cryptix, and not intended to be used directly by applications.

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

$Revision: 1.5 $

Since:
Cryptix 2.2.2
Author:
David Hopwood, Raif S. Naffah

Field Summary
protected  int currentByte
          Index into the ivBlock.
protected  byte[] ivBlock
          Value of the current feedback register/queue/buffer.
protected  byte[] ivStart
          Value of the IV at initialisation phase as supplied by user.
protected  int length
          Size of the feedback register/queue/buffer.
 
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
protected FeedbackMode(boolean implBuffering, boolean implPadding, java.lang.String provider)
          Constructor for a Mode.
 
Method Summary
protected  void engineSetCipher(Cipher cipher)
          SPI: Sets the underlying cipher.
 byte[] getInitializationVector()
          Gets a copy of the starting initialization vector.
 int getInitializationVectorLength()
          Returns the size of the initialization vector expected by setInitializationVector.
 void setInitializationVector(byte[] iv)
          Sets the initialization vector.
 
Methods inherited from class xjava.security.Mode
engineGetParameter, 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, engineInBufferSize, engineInitDecrypt, engineInitEncrypt, engineOutBufferSize, enginePlaintextBlockSize, engineSetPaddingScheme, engineUpdate, getAlgorithm, getCiphertextBlockSize, getInputBlockSize, getInstance, getMode, getOutputBlockSize, getPadding, getPaddingScheme, getParameter, getPlaintextBlockSize, getProvider, getState, inBufferSize, inBufferSizeFinal, initDecrypt, initEncrypt, isPaddingBlockCipher, outBufferSize, outBufferSizeFinal, setParameter, update, update, update, update
 
Methods inherited from class xjava.security.IJCE_Traceable
, disableTracing, enableTracing, traceMethod, traceResult, traceResult, traceVoidMethod
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

ivBlock

protected byte[] ivBlock
Value of the current feedback register/queue/buffer.

ivStart

protected byte[] ivStart
Value of the IV at initialisation phase as supplied by user.

currentByte

protected int currentByte
Index into the ivBlock.

length

protected int length
Size of the feedback register/queue/buffer.
Constructor Detail

FeedbackMode

protected FeedbackMode(boolean implBuffering,
                       boolean implPadding,
                       java.lang.String provider)
Constructor for a Mode. This constructor is only for use by subclasses, which should pass the correct arguments to convey their behaviour to the superclass. Applications typically do not use Mode classes directly; they should call one of the Cipher.getInstance factory methods instead.
Parameters:
implBuffering - if true, this argument indicates that data will be passed from update/crypt to engineUpdate/engineCrypt without modification.
implPadding - if true, this argument indicates that the implementation can perform padding, and that the engineCrypt method will be called when padding is required.
provider - the name of the provider of the underlying cryptographic engine.
Throws:
NullPointerException - if provider == null
Method Detail

engineSetCipher

protected void engineSetCipher(Cipher cipher)
SPI: Sets the underlying cipher.

For example, to create an IDEA cipher in CBC mode, the cipher for "IDEA" would be passed to the mode for "CBC" using this method. It is called once, immediately after the mode object is constructed.

Subclasses that override this method (to do initialization that depends on the cipher being set) should call super.engineSetCipher(cipher) first.

Overrides:
engineSetCipher in class Mode
Parameters:
cipher - the underlying cipher object
Throws:
NullPointerException - if cipher == null

setInitializationVector

public void setInitializationVector(byte[] iv)
                             throws java.security.InvalidParameterException
Sets the initialization vector.

Note: in JavaSoft's version of JCE, this method may only be called when the cipher is in the UNINITIALIZED state. In IJCE that is relaxed to also allow it to be called after initEncrypt/initDecrypt, but before the first call to update or crypt, provided that the IV is not set twice.

Specified by:
setInitializationVector in interface FeedbackCipher
Parameters:
iv - the initialization vector.
Throws:
java.security.InvalidParameterException - if the initialization vector is of the wrong length or has already been set.

getInitializationVector

public byte[] getInitializationVector()
Gets a copy of the starting initialization vector. It will return null if the initialization vector has not been set.
Specified by:
getInitializationVector in interface FeedbackCipher
Returns:
a copy of the initialization vector for this cipher object.

getInitializationVectorLength

public int getInitializationVectorLength()
Returns the size of the initialization vector expected by setInitializationVector. For this class, that is the block size of the underlying cipher.
Specified by:
getInitializationVectorLength in interface FeedbackCipher
Returns:
the required size of the argument to setInitializationVector.