prysm-pulse/beacon-chain/state/stateutil/hash_function.go
Preston Van Loon 49a0d3caf0
Refactor dependencies, make Prysm "go gettable" (#6053)
* Fix a few deps to work with go.mod, check in generated files

* Update Gossipsub to 1.1 (#5998)

* update libs

* add new validators

* add new deps

* new set of deps

* tls

* further fix gossip update

* get everything to build

* clean up

* gaz

* fix build

* fix all tests

* add deps to images

* imports

Co-authored-by: rauljordan <raul@prysmaticlabs.com>

* Beacon chain builds with go build

* fix bazel

* fix dep

* lint

* Add github action for testing go

* on PR for any branch

* fix libp2p test failure

* Fix TestProcessBlock_PassesProcessingConditions by updating the proposer index in test

* Revert "Fix TestProcessBlock_PassesProcessingConditions by updating the proposer index in test"

This reverts commit 43676894ab01f03fe90a9b8ee3ecfbc2ec1ec4e4.

* Compute and set proposer index instead of hard code

* Add back go mod/sum, fix deps

* go build ./...

* Temporarily skip two tests

* Fix kafka confluent patch

* Fix kafka confluent patch

* fix kafka build

* fix kafka

* Add info in DEPENDENCIES. Added a stub link for Why Bazel? until https://github.com/prysmaticlabs/documentation/issues/138

* Update fuzz ssz files as well

* Update fuzz ssz files as well

* getting closer

* rollback rules_go and gazelle

* fix gogo protobuf

* install librdkafka-dev as part of github actions

* Update kafka to a recent version where librkafkfa is not required for go modules

* clarify comment

* fix kafka build

* disable go tests

* comment

* Fix geth dependencies for end to end

* rename word

* lint

* fix docker

Co-authored-by: Nishant Das <nishdas93@gmail.com>
Co-authored-by: rauljordan <raul@prysmaticlabs.com>
Co-authored-by: terence tsao <terence@prysmaticlabs.com>
2020-05-31 14:44:34 +08:00

52 lines
1.3 KiB
Go

package stateutil
import "encoding/binary"
// HashFn is the generic hash function signature.
type HashFn func(input []byte) [32]byte
// Hasher describes an interface through which we can
// perform hash operations on byte arrays,indices,etc.
type Hasher interface {
Hash(a []byte) [32]byte
Combi(a [32]byte, b [32]byte) [32]byte
MixIn(a [32]byte, i uint64) [32]byte
}
// HasherFunc defines a structure to hold a hash function and can be used for multiple rounds of
// hashing.
type HasherFunc struct {
b [64]byte
hashFunc HashFn
}
// NewHasherFunc is the constructor for the object
// that fulfills the Hasher interface.
func NewHasherFunc(h HashFn) *HasherFunc {
return &HasherFunc{
b: [64]byte{},
hashFunc: h,
}
}
// Hash utilizes the provided hash function for
// the object.
func (h *HasherFunc) Hash(a []byte) [32]byte {
return h.hashFunc(a)
}
// Combi appends the two inputs and hashes them.
func (h *HasherFunc) Combi(a [32]byte, b [32]byte) [32]byte {
copy(h.b[:32], a[:])
copy(h.b[32:], b[:])
return h.Hash(h.b[:])
}
// MixIn works like Combi, but using an integer as the second input.
func (h *HasherFunc) MixIn(a [32]byte, i uint64) [32]byte {
copy(h.b[:32], a[:])
copy(h.b[32:], make([]byte, 32, 32))
binary.LittleEndian.PutUint64(h.b[32:], i)
return h.Hash(h.b[:])
}