public class RC564Engine extends java.lang.Object implements BlockCipher
RC5 Encryption Algorithm
publication in RSA CryptoBytes, Spring of 1995.
http://www.rsasecurity.com/rsalabs/cryptobytes.
This implementation is set to work with a 64 bit word size.
Implementation courtesy of Tito Pena.
Modifier and Type | Field and Description |
---|---|
private int |
_noRounds |
private long[] |
_S |
private static int |
bytesPerWord |
private boolean |
forEncryption |
private static long |
P64 |
private static long |
Q64 |
private static int |
wordSize |
Constructor and Description |
---|
RC564Engine()
Create an instance of the RC5 encryption algorithm
and set some defaults
|
Modifier and Type | Method and Description |
---|---|
private long |
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-64 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 long |
rotateLeft(long x,
long y)
Perform a left "spin" of the word.
|
private long |
rotateRight(long x,
long y)
Perform a right "spin" of the word.
|
private void |
setKey(byte[] key)
Re-key the cipher.
|
private void |
wordToBytes(long word,
byte[] dst,
int dstOff) |
private static final int wordSize
private static final int bytesPerWord
private int _noRounds
private long[] _S
private static final long P64
private static final long Q64
private boolean forEncryption
public RC564Engine()
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 long rotateLeft(long x, long y)
x
- word to rotatey
- number of bits to rotate % wordSizeprivate long rotateRight(long x, long y)
x
- word to rotatey
- number of bits to rotate % wordSizeprivate long bytesToWord(byte[] src, int srcOff)
private void wordToBytes(long word, byte[] dst, int dstOff)