gnu.crypto.hash
Class BaseHashStandalone

java.lang.Object
  extended by gnu.crypto.hash.BaseHashStandalone
All Implemented Interfaces:
IMessageDigestStandalone, java.lang.Cloneable
Direct Known Subclasses:
Sha256Standalone

public abstract class BaseHashStandalone
extends java.lang.Object
implements IMessageDigestStandalone

A base abstract class to facilitate hash implementations.

Version:
$Revision: 1.1 $

Field Summary
protected  int blockSize
          The hash (inner) block size in bytes.
protected  byte[] buffer
          Temporary input buffer.
protected  long count
          Number of bytes processed so far.
protected  int hashSize
          The hash (output) size in bytes.
protected  java.lang.String name
          The canonical name prefix of the hash.
 
Constructor Summary
protected BaseHashStandalone(java.lang.String name, int hashSize, int blockSize)
          Trivial constructor for use by concrete subclasses.
 
Method Summary
 int blockSize()
          Returns the algorithm's (inner) block size in bytes.
abstract  java.lang.Object clone()
          Returns a clone copy of this instance.
 byte[] digest()
          Completes the message digest by performing final operations such as padding and resetting the instance.
protected abstract  byte[] getResult()
          Constructs the result from the contents of the current context.
 int hashSize()
          Returns the output length in bytes of this message digest algorithm.
 java.lang.String name()
          Returns the canonical name of this algorithm.
protected abstract  byte[] padBuffer()
          Returns the byte array to use as padding before completing a hash operation.
 void reset()
          Resets the current context of this instance clearing any eventually cached intermediary values.
protected abstract  void resetContext()
          Resets the instance for future re-use.
abstract  boolean selfTest()
          A basic test.
protected abstract  void transform(byte[] in, int offset)
          The block digest transformation per se.
 void update(byte b)
          Continues a message digest operation using the input byte.
 void update(byte[] b)
          Continues a message digest operation, by filling the buffer, processing data in the algorithm's HASH_SIZE-bit block(s), updating the context and count, and buffering the remaining bytes in buffer for the next operation.
 void update(byte[] b, int offset, int len)
          Continues a message digest operation, by filling the buffer, processing data in the algorithm's HASH_SIZE-bit block(s), updating the context and count, and buffering the remaining bytes in buffer for the next operation.
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

name

protected java.lang.String name
The canonical name prefix of the hash.


hashSize

protected int hashSize
The hash (output) size in bytes.


blockSize

protected int blockSize
The hash (inner) block size in bytes.


count

protected long count
Number of bytes processed so far.


buffer

protected byte[] buffer
Temporary input buffer.

Constructor Detail

BaseHashStandalone

protected BaseHashStandalone(java.lang.String name,
                             int hashSize,
                             int blockSize)

Trivial constructor for use by concrete subclasses.

Parameters:
name - the canonical name prefix of this instance.
hashSize - the block size of the output in bytes.
blockSize - the block size of the internal transform.
Method Detail

name

public java.lang.String name()
Description copied from interface: IMessageDigestStandalone

Returns the canonical name of this algorithm.

Specified by:
name in interface IMessageDigestStandalone
Returns:
the canonical name of this instance.

hashSize

public int hashSize()
Description copied from interface: IMessageDigestStandalone

Returns the output length in bytes of this message digest algorithm.

Specified by:
hashSize in interface IMessageDigestStandalone
Returns:
the output length in bytes of this message digest algorithm.

blockSize

public int blockSize()
Description copied from interface: IMessageDigestStandalone

Returns the algorithm's (inner) block size in bytes.

Specified by:
blockSize in interface IMessageDigestStandalone
Returns:
the algorithm's inner block size in bytes.

update

public void update(byte b)
Description copied from interface: IMessageDigestStandalone

Continues a message digest operation using the input byte.

Specified by:
update in interface IMessageDigestStandalone
Parameters:
b - the input byte to digest.

update

public void update(byte[] b)
Description copied from interface: IMessageDigestStandalone

Continues a message digest operation, by filling the buffer, processing data in the algorithm's HASH_SIZE-bit block(s), updating the context and count, and buffering the remaining bytes in buffer for the next operation.

Specified by:
update in interface IMessageDigestStandalone
Parameters:
b - the input block.

update

public void update(byte[] b,
                   int offset,
                   int len)
Description copied from interface: IMessageDigestStandalone

Continues a message digest operation, by filling the buffer, processing data in the algorithm's HASH_SIZE-bit block(s), updating the context and count, and buffering the remaining bytes in buffer for the next operation.

Specified by:
update in interface IMessageDigestStandalone
Parameters:
b - the input block.
offset - start of meaningful bytes in input block.
len - number of bytes, in input block, to consider.

digest

public byte[] digest()
Description copied from interface: IMessageDigestStandalone

Completes the message digest by performing final operations such as padding and resetting the instance.

Specified by:
digest in interface IMessageDigestStandalone
Returns:
the array of bytes representing the hash value.

reset

public void reset()
Description copied from interface: IMessageDigestStandalone

Resets the current context of this instance clearing any eventually cached intermediary values.

Specified by:
reset in interface IMessageDigestStandalone

clone

public abstract java.lang.Object clone()
Description copied from interface: IMessageDigestStandalone

Returns a clone copy of this instance.

Specified by:
clone in interface IMessageDigestStandalone
Overrides:
clone in class java.lang.Object
Returns:
a clone copy of this instance.

selfTest

public abstract boolean selfTest()
Description copied from interface: IMessageDigestStandalone

A basic test. Ensures that the digest of a pre-determined message is equal to a known pre-computed value.

Specified by:
selfTest in interface IMessageDigestStandalone
Returns:
true if the implementation passes a basic self-test. Returns false otherwise.

padBuffer

protected abstract byte[] padBuffer()

Returns the byte array to use as padding before completing a hash operation.

Returns:
the bytes to pad the remaining bytes in the buffer before completing a hash operation.

getResult

protected abstract byte[] getResult()

Constructs the result from the contents of the current context.

Returns:
the output of the completed hash operation.

resetContext

protected abstract void resetContext()
Resets the instance for future re-use.


transform

protected abstract void transform(byte[] in,
                                  int offset)

The block digest transformation per se.

Parameters:
in - the blockSize long block, as an array of bytes to digest.
offset - the index where the data to digest is located within the input buffer.