public class Salsa20Engine extends java.lang.Object implements SkippingStreamCipher
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 |
advanceCounter(long diff) |
protected void |
generateKeyStream(byte[] output) |
java.lang.String |
getAlgorithmName()
Return the name of the algorithm the cipher implements.
|
protected long |
getCounter() |
protected int |
getNonceSize() |
long |
getPosition()
Return the current "position" of the cipher
|
void |
init(boolean forEncryption,
CipherParameters params)
initialise a Salsa20 cipher.
|
int |
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() |
protected void |
retreatCounter() |
protected void |
retreatCounter(long diff) |
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
|
long |
seekTo(long position)
Reset the cipher and then skip forward to a given position.
|
protected void |
setKey(byte[] keyBytes,
byte[] ivBytes) |
long |
skip(long numberOfBytes)
Skip numberOfBytes forwards, or backwards.
|
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(long diff)
protected void advanceCounter()
protected void retreatCounter(long diff)
protected void retreatCounter()
public int 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 long skip(long numberOfBytes)
SkippingCipher
skip
in interface SkippingCipher
numberOfBytes
- the number of bytes to skip (positive forward, negative backwards).public long seekTo(long position)
SkippingCipher
seekTo
in interface SkippingCipher
position
- the number of bytes in to set the cipher state to.public long getPosition()
SkippingCipher
getPosition
in interface SkippingCipher
public void reset()
StreamCipher
reset
in interface StreamCipher
protected long getCounter()
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