org.bouncycastle.crypto.engines
Class ISAACEngine

java.lang.Object
  extended by org.bouncycastle.crypto.engines.ISAACEngine
All Implemented Interfaces:
StreamCipher

public class ISAACEngine
extends java.lang.Object
implements StreamCipher

Implementation of Bob Jenkin's ISAAC (Indirection Shift Accumulate Add and Count). see: http://www.burtleburtle.net/bob/rand/isaacafa.html


Field Summary
private  int a
           
private  int b
           
private  int c
           
private  int[] engineState
           
private  int index
           
private  boolean initialised
           
private  byte[] keyStream
           
private  int[] results
           
private  int sizeL
           
private  int stateArraySize
           
private  byte[] workingKey
           
 
Constructor Summary
ISAACEngine()
           
 
Method Summary
private  int byteToIntLittle(byte[] x, int offset)
           
 java.lang.String getAlgorithmName()
          Return the name of the algorithm the cipher implements.
 void init(boolean forEncryption, CipherParameters params)
          initialise an ISAAC cipher.
private  byte[] intToByteLittle(int x)
           
private  byte[] intToByteLittle(int[] x)
           
private  void isaac()
           
private  void mix(int[] x)
           
 void processBytes(byte[] in, int inOff, int len, byte[] out, int outOff)
          process a block of bytes from in putting the result into out.
 void reset()
          reset the cipher.
 byte returnByte(byte in)
          encrypt/decrypt a single byte returning the result.
private  void setKey(byte[] keyBytes)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

sizeL

private final int sizeL
See Also:
Constant Field Values

stateArraySize

private final int stateArraySize
See Also:
Constant Field Values

engineState

private int[] engineState

results

private int[] results

a

private int a

b

private int b

c

private int c

index

private int index

keyStream

private byte[] keyStream

workingKey

private byte[] workingKey

initialised

private boolean initialised
Constructor Detail

ISAACEngine

public ISAACEngine()
Method Detail

init

public void init(boolean forEncryption,
                 CipherParameters params)
initialise an ISAAC cipher.

Specified by:
init in interface StreamCipher
Parameters:
forEncryption - whether or not we are for encryption.
params - the parameters required to set up the cipher.
Throws:
java.lang.IllegalArgumentException - if the params argument is inappropriate.

returnByte

public byte returnByte(byte in)
Description copied from interface: StreamCipher
encrypt/decrypt a single byte returning the result.

Specified by:
returnByte in interface StreamCipher
Parameters:
in - the byte to be processed.
Returns:
the result of processing the input byte.

processBytes

public void processBytes(byte[] in,
                         int inOff,
                         int len,
                         byte[] out,
                         int outOff)
Description copied from interface: StreamCipher
process a block of bytes from in putting the result into out.

Specified by:
processBytes in interface StreamCipher
Parameters:
in - the input byte array.
inOff - the offset into the in array where the data to be processed starts.
len - the number of bytes to be processed.
out - the output buffer the processed bytes go into.
outOff - the offset into the output byte array the processed data starts at.

getAlgorithmName

public java.lang.String getAlgorithmName()
Description copied from interface: StreamCipher
Return the name of the algorithm the cipher implements.

Specified by:
getAlgorithmName in interface StreamCipher
Returns:
the name of the algorithm the cipher implements.

reset

public void reset()
Description copied from interface: StreamCipher
reset the cipher. This leaves it in the same state it was at after the last init (if there was one).

Specified by:
reset in interface StreamCipher

setKey

private void setKey(byte[] keyBytes)

isaac

private void isaac()

mix

private void mix(int[] x)

byteToIntLittle

private int byteToIntLittle(byte[] x,
                            int offset)

intToByteLittle

private byte[] intToByteLittle(int x)

intToByteLittle

private byte[] intToByteLittle(int[] x)