public class RC532Engine extends java.lang.Object implements BlockCipher
RC5 Encryption Algorithm
publication in RSA CryptoBytes, Spring of 1995.
http://www.rsasecurity.com/rsalabs/cryptobytes.
This implementation has a word size of 32 bits.
Implementation courtesy of Tito Pena.
Modifier and Type | Field and Description |
---|---|
private int |
_noRounds |
private int[] |
_S |
private boolean |
forEncryption |
private static int |
P32 |
private static int |
Q32 |
Constructor and Description |
---|
RC532Engine()
Create an instance of the RC5 encryption algorithm
and set some defaults
|
Modifier and Type | Method and Description |
---|---|
private int |
bytesToWord(byte[] src,
int srcOff) |
private int |
decryptBlock(byte[] in,
int inOff,
byte[] out,
int outOff) |
private int |
encryptBlock(byte[] in,
int inOff,
byte[] out,
int outOff)
Encrypt the given block starting at the given offset and place
the result in the provided buffer starting at the given offset.
|
java.lang.String |
getAlgorithmName()
Return the name of the algorithm the cipher implements.
|
int |
getBlockSize()
Return the block size for this cipher (in bytes).
|
void |
init(boolean forEncryption,
CipherParameters params)
initialise a RC5-32 cipher.
|
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 int |
rotateLeft(int x,
int y)
Perform a left "spin" of the word.
|
private int |
rotateRight(int x,
int y)
Perform a right "spin" of the word.
|
private void |
setKey(byte[] key)
Re-key the cipher.
|
private void |
wordToBytes(int word,
byte[] dst,
int dstOff) |
private int _noRounds
private int[] _S
private static final int P32
private static final int Q32
private boolean forEncryption
public RC532Engine()
public java.lang.String getAlgorithmName()
BlockCipher
getAlgorithmName
in interface BlockCipher
public int getBlockSize()
BlockCipher
getBlockSize
in interface BlockCipher
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 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 void setKey(byte[] key)
key
- the key to be usedprivate int encryptBlock(byte[] in, int inOff, byte[] out, int outOff)
in
- in byte buffer containing data to encryptinOff
- offset into src bufferout
- out buffer where encrypted data is writtenoutOff
- offset into out bufferprivate int decryptBlock(byte[] in, int inOff, byte[] out, int outOff)
private int rotateLeft(int x, int y)
x
- word to rotatey
- number of bits to rotate % 32private int rotateRight(int x, int y)
x
- word to rotatey
- number of bits to rotate % 32private int bytesToWord(byte[] src, int srcOff)
private void wordToBytes(int word, byte[] dst, int dstOff)