JH (hash function)
Appearance
General | |
---|---|
Designers | Hongjun Wu |
Certification | SHA-3 finalist |
Detail | |
Digest sizes | 224, 256, 384, 512 |
Speed | 16.1 cpb on Core 2 in 64-bit mode using SSE2; 37.3 cpb using ANSI C. |
JH is a cryptographic hash function submitted to the NIST hash function competition by Hongjun Wu. JH was chosen as one of the five finalists of the competition. JH has a 1024-bit state, and works on 512-bit input blocks. Processing an input block consists of three steps:
- XOR the input block into the left half of the state.
- Apply a 42-round unkeyed permutation (encryption function) to the state. This consists of 42 repetitions of:
- Break the input into 256 4-bit blocks, and map each through one of two 4-bit S-boxes, the choice being made by a 256-bit round-dependent key schedule. Equivalently, combine each input block with a key bit, and map the result through a 5→4 bit S-box.
- Mix adjacent 4-bit blocks using a maximum distance separable code over GF(24).
- Permute 4-bit blocks so that they will be adjacent to different blocks in following rounds.
- The final half-round consists of an S-box substitution without a following MDS or permutation step.
- XOR the input block into the right half of the state.
The resulting digest is the first 224, 256, 384 or 512 bits from the 1024-bit final value. It is well suited to a bit slicing implementation using the SSE2 instruction set, giving speeds of 16.8 Cycles per byte.
External links
- The JH web site
- JH page on the SHA-3 Zoo
- A VHDL source codes developed in the Cryptographic Engineering Research Group (CERG) at George Mason University