public class Salsa20Engine extends java.lang.Object implements StreamCipher
Modifier and Type | Field and Description |
---|---|
private int |
cW0 |
private int |
cW1 |
private int |
cW2 |
private int[] |
engineState |
private int |
index |
private boolean |
initialised |
private byte[] |
keyStream |
private static byte[] |
sigma |
private static int |
STATE_SIZE
Constants
|
private static byte[] |
tau |
private byte[] |
workingIV |
private byte[] |
workingKey |
private int[] |
x |
Constructor and Description |
---|
Salsa20Engine() |
Modifier and Type | Method and Description |
---|---|
private void |
generateKeyStream(byte[] output) |
java.lang.String |
getAlgorithmName()
Return the name of the algorithm the cipher implements.
|
void |
init(boolean forEncryption,
CipherParameters params)
initialise a Salsa20 cipher.
|
private boolean |
limitExceeded() |
private boolean |
limitExceeded(int len) |
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.
|
private void |
resetCounter() |
byte |
returnByte(byte in)
encrypt/decrypt a single byte returning the result.
|
private static int |
rotl(int x,
int y)
Rotate left
|
static void |
salsaCore(int rounds,
int[] input,
int[] x)
Salsa20 function
|
private void |
setKey(byte[] keyBytes,
byte[] ivBytes) |
private static final int STATE_SIZE
private static final byte[] sigma
private static final byte[] tau
private int index
private int[] engineState
private int[] x
private byte[] keyStream
private byte[] workingKey
private byte[] workingIV
private boolean initialised
private int cW0
private int cW1
private int cW2
public void init(boolean forEncryption, CipherParameters params)
init
in interface StreamCipher
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()
StreamCipher
getAlgorithmName
in interface StreamCipher
public byte returnByte(byte in)
StreamCipher
returnByte
in interface StreamCipher
in
- the byte to be processed.public void processBytes(byte[] in, int inOff, int len, byte[] out, int outOff)
StreamCipher
processBytes
in interface StreamCipher
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.public void reset()
StreamCipher
reset
in interface StreamCipher
private void setKey(byte[] keyBytes, byte[] ivBytes)
private void generateKeyStream(byte[] output)
public static void salsaCore(int rounds, int[] input, int[] x)
input
- input dataprivate static int rotl(int x, int y)
x
- value to rotatey
- amount to rotate xprivate void resetCounter()
private boolean limitExceeded()
private boolean limitExceeded(int len)