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 35.5-round unkeyed permutation (encryption function) to the state. This consists of 35 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.
It is well suited to a bit slicing implementation using the SSE2 instruction set, giving speeds of 16.8 Cycles per byte.