keccakf1600

package
v0.0.0-...-7833c67 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 25, 2024 License: GPL-3.0 Imports: 4 Imported by: 0

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

func (s *StateX2) Initialize(turbo bool) []uint64

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.

func (*StateX2) Permute

func (s *StateX2) Permute()

Permute performs the two parallel Keccak-f[1600]s interleaved on the slice returned from Initialize().

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

func (s *StateX4) Initialize(turbo bool) []uint64

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.

func (*StateX4) Permute

func (s *StateX4) Permute()

Permute performs the four parallel Keccak-f[1600]s interleaved on the slice returned from Initialize().

Directories

Path Synopsis
internal
asm Module

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL