Documentation ¶
Overview ¶
Package keccakf1600 provides a two and four-way Keccak-f[1600] permutation in parallel.
Keccak-f[1600] is the permutation underlying several algorithms such as Keccak, SHA3 and SHAKE. Running two or four permutations in parallel is useful in some scenarios like in hash-based signatures.
Limitations ¶
Note that not all the architectures support SIMD instructions. This package uses AVX2 instructions that are available in some AMD64 architectures and NEON instructions that are available in some ARM64 architectures.
For those systems not supporting these, the package still provides the expected functionality by means of a generic and slow implementation. The recommendation is to beforehand verify IsEnabledX4() and IsEnabledX2() to determine if the current system supports the SIMD implementation.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func IsEnabledX2 ¶
func IsEnabledX2() bool
IsEnabledX2 returns true if the architecture supports a two-way SIMD implementation provided in this package.
func IsEnabledX4 ¶
func IsEnabledX4() bool
IsEnabledX4 returns true if the architecture supports a four-way SIMD implementation provided in this package.
Types ¶
type StateX2 ¶
type StateX2 struct {
// contains filtered or unexported fields
}
StateX2 contains state for the two-way permutation including the two interleaved [25]uint64 buffers. Call Initialize() before use to initialize and get a pointer to the interleaved buffer.
func (*StateX2) Initialize ¶
Initialize the state and returns the buffer on which the two permutations will act: a uint64 slice of length 50. The first permutation will act on {a[0], a[2], ..., a[48]} and the second on {a[1], a[3], ..., a[49]}. If turbo is true, applies 12-round variant instead of the usual 24.
type StateX4 ¶
type StateX4 struct {
// contains filtered or unexported fields
}
StateX4 contains state for the four-way permutation including the four interleaved [25]uint64 buffers. Call Initialize() before use to initialize and get a pointer to the interleaved buffer.
func (*StateX4) Initialize ¶
Initialize the state and returns the buffer on which the four permutations will act: a uint64 slice of length 100. The first permutation will act on {a[0], a[4], ..., a[96]}, the second on {a[1], a[5], ..., a[97]}, etc. If turbo is true, applies 12-round variant instead of the usual 24.