|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectorg.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 BlockCipherforEncryption - 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 BlockCipherpublic int getBlockSize()
BlockCipher
getBlockSize in interface BlockCipher
public int processBlock(byte[] in,
int inOff,
byte[] out,
int outOff)
BlockCipher
processBlock in interface BlockCipherin - 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 | ||||||||