org.bouncycastle.crypto.engines
Class HC128Engine

java.lang.Object
  extended by org.bouncycastle.crypto.engines.HC128Engine
All Implemented Interfaces:
StreamCipher

public class HC128Engine
extends java.lang.Object
implements StreamCipher

HC-128 is a software-efficient stream cipher created by Hongjun Wu. It generates keystream from a 128-bit secret key and a 128-bit initialization vector.

http://www.ecrypt.eu.org/stream/p3ciphers/hc/hc256_p3.pdf

It is a third phase candidate in the eStream contest, and is patent-free. No attacks are known as of today (April 2007). See http://www.ecrypt.eu.org/stream/hcp3.html


Field Summary
private  byte[] buf
           
private  int cnt
           
private  int idx
           
private  boolean initialised
           
private  byte[] iv
           
private  byte[] key
           
private  int[] p
           
private  int[] q
           
 
Constructor Summary
HC128Engine()
           
 
Method Summary
private static int dim(int x, int y)
           
private static int f1(int x)
           
private static int f2(int x)
           
private  int g1(int x, int y, int z)
           
private  int g2(int x, int y, int z)
           
 java.lang.String getAlgorithmName()
          Return the name of the algorithm the cipher implements.
private  byte getByte()
           
private  int h1(int x)
           
private  int h2(int x)
           
private  void init()
           
 void init(boolean forEncryption, CipherParameters params)
          Initialise a HC-128 cipher.
private static int mod1024(int x)
           
private static int mod512(int x)
           
 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.
 byte returnByte(byte in)
          encrypt/decrypt a single byte returning the result.
private static int rotateLeft(int x, int bits)
           
private static int rotateRight(int x, int bits)
           
private  int step()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

p

private int[] p

q

private int[] q

cnt

private int cnt

key

private byte[] key

iv

private byte[] iv

initialised

private boolean initialised

buf

private byte[] buf

idx

private int idx
Constructor Detail

HC128Engine

public HC128Engine()
Method Detail

f1

private static int f1(int x)

f2

private static int f2(int x)

g1

private int g1(int x,
               int y,
               int z)

g2

private int g2(int x,
               int y,
               int z)

rotateLeft

private static int rotateLeft(int x,
                              int bits)

rotateRight

private static int rotateRight(int x,
                               int bits)

h1

private int h1(int x)

h2

private int h2(int x)

mod1024

private static int mod1024(int x)

mod512

private static int mod512(int x)

dim

private static int dim(int x,
                       int y)

step

private int step()

init

private void init()

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
Returns:
the name of the algorithm the cipher implements.

init

public void init(boolean forEncryption,
                 CipherParameters params)
          throws java.lang.IllegalArgumentException
Initialise a HC-128 cipher.

Specified by:
init in interface StreamCipher
Parameters:
forEncryption - whether or not we are for encryption. Irrelevant, as encryption and decryption are the same.
params - the parameters required to set up the cipher.
Throws:
java.lang.IllegalArgumentException - if the params argument is inappropriate (ie. the key is not 128 bit long).

getByte

private byte getByte()

processBytes

public void processBytes(byte[] in,
                         int inOff,
                         int len,
                         byte[] out,
                         int outOff)
                  throws DataLengthException
Description copied from interface: StreamCipher
process a block of bytes from in putting the result into out.

Specified by:
processBytes in interface 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.
Throws:
DataLengthException - if the output buffer is too small.

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

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
Parameters:
in - the byte to be processed.
Returns:
the result of processing the input byte.