|
For the latest news and information visit The GNU Crypto project |
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object gnu.crypto.mac.BaseMac gnu.crypto.mac.UHash32
UHASH is a keyed hash function, which takes as input a string of arbitrary length, and produces as output a string of fixed length (such as 8 bytes). The actual output length depends on the parameter UMAC-OUTPUT-LEN.
UHASH has been shown to be epsilon-ASU ("Almost Strongly Universal"), where epsilon is a small (parameter-dependent) real number. Informally, saying that a keyed hash function is epsilon-ASU means that for any two distinct fixed input strings, the two outputs of the hash function with a random key "look almost like a pair of random strings". The number epsilon measures how non-random the output strings may be.
UHASH has been designed to be fast by exploiting several architectural features of modern commodity processors. It was specifically designed for use in UMAC. But UHASH is useful beyond that domain, and can be easily adopted for other purposes. UHASH does its work in three layers. First, a hash function calledNH
is used to compress input messages into strings which are
typically many times smaller than the input message. Second, the compressed
message is hashed with an optimized polynomial hash function into a
fixed-length 16-byte string. Finally, the 16-byte string is hashed using an
inner-product hash into a string of length WORD-LEN bytes. These three
layers are repeated (with a modified key) until the outputs total
UMAC-OUTPUT-LEN bytes.
References:
Nested Class Summary | |
(package private) class |
UHash32.L1Hash32
First hash stage of the UHash32 algorithm. |
(package private) class |
UHash32.L2Hash32
Second hash stage of the UHash32 algorithm. |
(package private) class |
UHash32.L3Hash32
Third hash stage of the UHash32 algorithm. |
Field Summary | |
(package private) static byte[] |
ALL_ZEROES
|
(package private) static long |
BOUNDARY
|
(package private) UHash32.L1Hash32[] |
l1hash
|
(package private) static java.math.BigInteger |
LOWER_RANGE
|
(package private) int |
streams
|
(package private) static java.math.BigInteger |
TWO
|
(package private) static java.math.BigInteger |
UPPER_RANGE
|
Fields inherited from class gnu.crypto.mac.BaseMac |
name, truncatedSize, underlyingHash |
Fields inherited from interface gnu.crypto.mac.IMac |
MAC_KEY_MATERIAL, TRUNCATED_SIZE |
Constructor Summary | |
UHash32()
Trivial 0-arguments constructor. |
Method Summary | |
java.lang.Object |
clone()
Returns a clone copy of this instance. |
byte[] |
digest()
Completes the MAC by performing final operations such as padding and resetting the instance. |
void |
init(java.util.Map attributes)
Initialises the algorithm with designated attributes. |
int |
macSize()
Returns the output length in bytes of this MAC algorithm. |
(package private) static java.math.BigInteger |
prime(int n)
The prime numbers used in UMAC are: +-----+--------------------+---------------------------------------+ | x | prime(x) [Decimal] | prime(x) [Hexadecimal] | +-----+--------------------+---------------------------------------+ | 19 | 2^19 - 1 | 0x0007FFFF | | 32 | 2^32 - 5 | 0xFFFFFFFB | | 36 | 2^36 - 5 | 0x0000000F FFFFFFFB | | 64 | 2^64 - 59 | 0xFFFFFFFF FFFFFFC5 | | 128 | 2^128 - 159 | 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFF61 | +-----+--------------------+---------------------------------------+ |
void |
reset()
Resets the algorithm instance for re-initialisation and use with other characteristics. |
boolean |
selfTest()
A basic test. |
void |
update(byte b)
Continues a MAC operation using the input byte. |
void |
update(byte[] b,
int offset,
int len)
Continues a MAC operation, by filling the buffer, processing data in the algorithm's MAC_SIZE-bit block(s), updating the context and count, and buffering the remaining bytes in buffer for the next operation. |
Methods inherited from class gnu.crypto.mac.BaseMac |
name |
Methods inherited from class java.lang.Object |
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
static final java.math.BigInteger TWO
static final long BOUNDARY
static final java.math.BigInteger LOWER_RANGE
static final java.math.BigInteger UPPER_RANGE
static final byte[] ALL_ZEROES
int streams
UHash32.L1Hash32[] l1hash
Constructor Detail |
public UHash32()
Method Detail |
static final java.math.BigInteger prime(int n)
The prime numbers used in UMAC are:
+-----+--------------------+---------------------------------------+ | x | prime(x) [Decimal] | prime(x) [Hexadecimal] | +-----+--------------------+---------------------------------------+ | 19 | 2^19 - 1 | 0x0007FFFF | | 32 | 2^32 - 5 | 0xFFFFFFFB | | 36 | 2^36 - 5 | 0x0000000F FFFFFFFB | | 64 | 2^64 - 59 | 0xFFFFFFFF FFFFFFC5 | | 128 | 2^128 - 159 | 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFF61 | +-----+--------------------+---------------------------------------+
n
- a number of bits.
public java.lang.Object clone()
IMac
Returns a clone copy of this instance.
clone
in interface IMac
clone
in class BaseMac
public int macSize()
IMac
Returns the output length in bytes of this MAC algorithm.
macSize
in interface IMac
macSize
in class BaseMac
public void init(java.util.Map attributes) throws java.security.InvalidKeyException, java.lang.IllegalStateException
IMac
Initialises the algorithm with designated attributes. Permissible names and values are described in the class documentation above.
init
in interface IMac
init
in class BaseMac
java.security.InvalidKeyException
java.lang.IllegalStateException
public void update(byte b)
IMac
Continues a MAC operation using the input byte.
update
in interface IMac
update
in class BaseMac
public void update(byte[] b, int offset, int len)
IMac
Continues a MAC operation, by filling the buffer, processing data in the algorithm's MAC_SIZE-bit block(s), updating the context and count, and buffering the remaining bytes in buffer for the next operation.
update
in interface IMac
update
in class BaseMac
public byte[] digest()
IMac
Completes the MAC by performing final operations such as padding and resetting the instance.
digest
in interface IMac
digest
in class BaseMac
public void reset()
IMac
Resets the algorithm instance for re-initialisation and use with other characteristics. This method always succeeds.
reset
in interface IMac
reset
in class BaseMac
public boolean selfTest()
IMac
A basic test. Ensures that the MAC of a pre-determined message is equal to a known pre-computed value.
selfTest
in interface IMac
selfTest
in class BaseMac
|
For the latest news and information visit The GNU Crypto project |
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |