public class Salsa20Engine extends java.lang.Object implements StreamCipher
Modifier and Type | Field and Description |
---|---|
static int |
DEFAULT_ROUNDS |
protected int[] |
engineState |
protected int |
rounds |
protected static byte[] |
sigma |
protected static byte[] |
tau |
protected int[] |
x |
Constructor and Description |
---|
Salsa20Engine()
Creates a 20 round Salsa20 engine.
|
Salsa20Engine(int rounds)
Creates a Salsa20 engine with a specific number of rounds.
|
Modifier and Type | Method and Description |
---|---|
protected void |
advanceCounter() |
protected void |
generateKeyStream(byte[] output) |
java.lang.String |
getAlgorithmName()
Return the name of the algorithm the cipher implements.
|
protected int |
getNonceSize() |
void |
init(boolean forEncryption,
CipherParameters params)
initialise a Salsa20 cipher.
|
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.
|
protected void |
resetCounter() |
byte |
returnByte(byte in)
encrypt/decrypt a single byte returning the result.
|
protected static int |
rotl(int x,
int y)
Rotate left
|
static void |
salsaCore(int rounds,
int[] input,
int[] x)
Salsa20 function
|
protected void |
setKey(byte[] keyBytes,
byte[] ivBytes) |
public static final int DEFAULT_ROUNDS
protected static final byte[] sigma
protected static final byte[] tau
protected int rounds
protected int[] engineState
protected int[] x
public Salsa20Engine()
public Salsa20Engine(int rounds)
rounds
- the number of rounds (must be an even number).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.protected int getNonceSize()
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.protected void advanceCounter()
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
protected void resetCounter()
protected void setKey(byte[] keyBytes, byte[] ivBytes)
protected void generateKeyStream(byte[] output)
public static void salsaCore(int rounds, int[] input, int[] x)
input
- input dataprotected static int rotl(int x, int y)
x
- value to rotatey
- amount to rotate x