Bouncy Castle Cryptography Library 1.77.0

org.bouncycastle.crypto.engines
Class Salsa20Engine

java.lang.Object
  |
  +--org.bouncycastle.crypto.engines.Salsa20Engine
All Implemented Interfaces:
SkippingCipher, SkippingStreamCipher, StreamCipher
Direct Known Subclasses:
ChaCha7539Engine, ChaChaEngine, XSalsa20Engine

public class Salsa20Engine
extends java.lang.Object
implements SkippingStreamCipher

Implementation of Daniel J. Bernstein's Salsa20 stream cipher, Snuffle 2005


Field Summary
static int DEFAULT_ROUNDS
           
protected  int[] engineState
           
protected  int rounds
           
protected static byte[] sigma
          Deprecated.  
protected static byte[] tau
          Deprecated.  
protected  int[] x
           
 
Constructor Summary
Salsa20Engine()
          Creates a 20 round Salsa20 engine.
Salsa20Engine(int rounds)
          Creates a Salsa20 engine with a specific number of rounds.
 
Method Summary
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.
protected  void packTauOrSigma(int keyLength, int[] state, int stateOffset)
           
 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.
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.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_ROUNDS

public static final int DEFAULT_ROUNDS

sigma

protected static final byte[] sigma
Deprecated.  


tau

protected static final byte[] tau
Deprecated.  


rounds

protected int rounds

engineState

protected int[] engineState

x

protected int[] x
Constructor Detail

Salsa20Engine

public Salsa20Engine()
Creates a 20 round Salsa20 engine.

Salsa20Engine

public Salsa20Engine(int rounds)
Creates a Salsa20 engine with a specific number of rounds.
Parameters:
rounds - the number of rounds (must be an even number).
Method Detail

packTauOrSigma

protected void packTauOrSigma(int keyLength,
                              int[] state,
                              int stateOffset)

init

public void init(boolean forEncryption,
                 CipherParameters params)
initialise a Salsa20 cipher.
Specified by:
init in interface StreamCipher
Parameters:
forEncryption - whether or not we are for encryption.
params - the parameters required to set up the cipher.
Throws:
java.lang.IllegalArgumentException - if the params argument is inappropriate.

getNonceSize

protected int getNonceSize()

getAlgorithmName

public java.lang.String getAlgorithmName()
Description copied from interface: StreamCipher
Return the name of the algorithm the cipher implements.
Specified by:
getAlgorithmName in interface StreamCipher
Following copied from interface: org.bouncycastle.crypto.StreamCipher
Returns:
the name of the algorithm the cipher implements.

returnByte

public byte returnByte(byte in)
Description copied from interface: StreamCipher
encrypt/decrypt a single byte returning the result.
Specified by:
returnByte in interface StreamCipher
Following copied from interface: org.bouncycastle.crypto.StreamCipher
Parameters:
in - the byte to be processed.
Returns:
the result of processing the input byte.

advanceCounter

protected void advanceCounter(long diff)

advanceCounter

protected void advanceCounter()

retreatCounter

protected void retreatCounter(long diff)

retreatCounter

protected void retreatCounter()

processBytes

public int processBytes(byte[] in,
                        int inOff,
                        int len,
                        byte[] out,
                        int outOff)
Description copied from interface: StreamCipher
process a block of bytes from in putting the result into out.
Specified by:
processBytes in interface StreamCipher
Following copied from interface: org.bouncycastle.crypto.StreamCipher
Parameters:
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.
Returns:
the number of bytes produced - should always be len.
Throws:
DataLengthException - if the output buffer is too small.

skip

public long skip(long numberOfBytes)
Description copied from interface: SkippingCipher
Skip numberOfBytes forwards, or backwards.
Specified by:
skip in interface SkippingCipher
Following copied from interface: org.bouncycastle.crypto.SkippingCipher
Parameters:
numberOfBytes - the number of bytes to skip (positive forward, negative backwards).
Returns:
the number of bytes actually skipped.
Throws:
java.lang.IllegalArgumentException - if numberOfBytes is an invalid value.

seekTo

public long seekTo(long position)
Description copied from interface: SkippingCipher
Reset the cipher and then skip forward to a given position.
Specified by:
seekTo in interface SkippingCipher
Following copied from interface: org.bouncycastle.crypto.SkippingCipher
Parameters:
position - the number of bytes in to set the cipher state to.
Returns:
the byte position moved to.

getPosition

public long getPosition()
Description copied from interface: SkippingCipher
Return the current "position" of the cipher
Specified by:
getPosition in interface SkippingCipher
Following copied from interface: org.bouncycastle.crypto.SkippingCipher
Returns:
the current byte position.

reset

public void reset()
Description copied from interface: StreamCipher
reset the cipher. This leaves it in the same state it was at after the last init (if there was one).
Specified by:
reset in interface StreamCipher

getCounter

protected long getCounter()

resetCounter

protected void resetCounter()

setKey

protected void setKey(byte[] keyBytes,
                      byte[] ivBytes)

generateKeyStream

protected void generateKeyStream(byte[] output)

salsaCore

public static void salsaCore(int rounds,
                             int[] input,
                             int[] x)
Salsa20 function
Parameters:
input - input data

Bouncy Castle Cryptography Library 1.77.0