|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.bouncycastle.crypto.engines.IDEAEngine
public class IDEAEngine
A class that provides a basic International Data Encryption Algorithm (IDEA) engine.
This implementation is based on the "HOWTO: INTERNATIONAL DATA ENCRYPTION ALGORITHM" implementation summary by Fauzan Mirza (F.U.Mirza@sheffield.ac.uk). (baring 1 typo at the end of the mulinv function!).
It can be found at ftp://ftp.funet.fi/pub/crypt/cryptography/symmetric/idea/
Note: This algorithm is patented in the USA, Japan, and Europe including at least Austria, France, Germany, Italy, Netherlands, Spain, Sweden, Switzerland and the United Kingdom. Non-commercial use is free, however any commercial products are liable for royalties. Please see www.mediacrypt.com for further details. This announcement has been included at the request of the patent holders.
Field Summary | |
---|---|
private static int |
BASE
|
protected static int |
BLOCK_SIZE
|
private static int |
MASK
|
private int[] |
workingKey
|
Constructor Summary | |
---|---|
IDEAEngine()
standard constructor. |
Method Summary | |
---|---|
(package private) int |
addInv(int x)
Return the additive inverse of x. |
private int |
bytesToWord(byte[] in,
int inOff)
|
private int[] |
expandKey(byte[] uKey)
The following function is used to expand the user key to the encryption subkey. |
private int[] |
generateWorkingKey(boolean forEncryption,
byte[] userKey)
|
java.lang.String |
getAlgorithmName()
Return the name of the algorithm the cipher implements. |
int |
getBlockSize()
Return the block size for this cipher (in bytes). |
private void |
ideaFunc(int[] workingKey,
byte[] in,
int inOff,
byte[] out,
int outOff)
|
void |
init(boolean forEncryption,
CipherParameters params)
initialise an IDEA cipher. |
private int[] |
invertKey(int[] inKey)
The function to invert the encryption subkey to the decryption subkey. |
private int |
mul(int x,
int y)
return x = x * y where the multiplication is done modulo 65537 (0x10001) (as defined in the IDEA specification) and a zero input is taken to be 65536 (0x10000). |
private int |
mulInv(int x)
This function computes multiplicative inverse using Euclid's Greatest Common Divisor algorithm. |
int |
processBlock(byte[] in,
int inOff,
byte[] out,
int outOff)
Process one block of input from the array in and write it to the out array. |
void |
reset()
Reset the cipher. |
private void |
wordToBytes(int word,
byte[] out,
int outOff)
|
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected static final int BLOCK_SIZE
private int[] workingKey
private static final int MASK
private static final int BASE
Constructor Detail |
---|
public IDEAEngine()
Method Detail |
---|
public void init(boolean forEncryption, CipherParameters params)
init
in interface BlockCipher
forEncryption
- whether or not we are for encryption.params
- the parameters required to set up the cipher.
java.lang.IllegalArgumentException
- if the params argument is
inappropriate.public java.lang.String getAlgorithmName()
BlockCipher
getAlgorithmName
in interface BlockCipher
public int getBlockSize()
BlockCipher
getBlockSize
in interface BlockCipher
public int processBlock(byte[] in, int inOff, byte[] out, int outOff)
BlockCipher
processBlock
in interface BlockCipher
in
- the array containing the input data.inOff
- offset into the in array the data starts at.out
- the array the output data will be copied into.outOff
- the offset into the out array the output will start at.
public void reset()
BlockCipher
reset
in interface BlockCipher
private int bytesToWord(byte[] in, int inOff)
private void wordToBytes(int word, byte[] out, int outOff)
private int mul(int x, int y)
x
- the x valuey
- the y value
private void ideaFunc(int[] workingKey, byte[] in, int inOff, byte[] out, int outOff)
private int[] expandKey(byte[] uKey)
private int mulInv(int x)
i.e. x * mulInv(x) == 1 (modulo BASE)
int addInv(int x)
i.e. x + addInv(x) == 0
private int[] invertKey(int[] inKey)
private int[] generateWorkingKey(boolean forEncryption, byte[] userKey)
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |