// Use of this source code is governed by an ISC
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package x11
|
|
|
|
import (
|
|
"gitlab.com/nitya-sattva/go-x11/blake"
|
|
"gitlab.com/nitya-sattva/go-x11/bmw"
|
|
"gitlab.com/nitya-sattva/go-x11/cubed"
|
|
"gitlab.com/nitya-sattva/go-x11/echo"
|
|
"gitlab.com/nitya-sattva/go-x11/groest"
|
|
"gitlab.com/nitya-sattva/go-x11/hash"
|
|
"gitlab.com/nitya-sattva/go-x11/jhash"
|
|
"gitlab.com/nitya-sattva/go-x11/keccak"
|
|
"gitlab.com/nitya-sattva/go-x11/luffa"
|
|
"gitlab.com/nitya-sattva/go-x11/shavite"
|
|
"gitlab.com/nitya-sattva/go-x11/simd"
|
|
"gitlab.com/nitya-sattva/go-x11/skein"
|
|
)
|
|
|
|
////////////////
|
|
|
|
// Hash contains the state objects
|
|
// required to perform the x11.Hash.
|
|
type Hash struct {
|
|
tha [64]byte
|
|
thb [64]byte
|
|
|
|
blake hash.Digest
|
|
bmw hash.Digest
|
|
cubed hash.Digest
|
|
echo hash.Digest
|
|
groest hash.Digest
|
|
jhash hash.Digest
|
|
keccak hash.Digest
|
|
luffa hash.Digest
|
|
shavite hash.Digest
|
|
simd hash.Digest
|
|
skein hash.Digest
|
|
}
|
|
|
|
// New returns a new object to compute a x11 hash.
|
|
func New() *Hash {
|
|
ref := &Hash{}
|
|
ref.blake = blake.New()
|
|
ref.bmw = bmw.New()
|
|
ref.cubed = cubed.New()
|
|
ref.echo = echo.New()
|
|
ref.groest = groest.New()
|
|
ref.jhash = jhash.New()
|
|
ref.keccak = keccak.New()
|
|
ref.luffa = luffa.New()
|
|
ref.shavite = shavite.New()
|
|
ref.simd = simd.New()
|
|
ref.skein = skein.New()
|
|
return ref
|
|
}
|
|
|
|
// Hash computes the hash from the src bytes and stores the result in dst.
|
|
func (ref *Hash) Hash(src []byte, dst []byte) {
|
|
ta := ref.tha[:]
|
|
tb := ref.thb[:]
|
|
|
|
ref.blake.Write(src)
|
|
ref.blake.Close(tb, 0, 0)
|
|
|
|
ref.bmw.Write(tb)
|
|
ref.bmw.Close(ta, 0, 0)
|
|
|
|
ref.groest.Write(ta)
|
|
ref.groest.Close(tb, 0, 0)
|
|
|
|
ref.skein.Write(tb)
|
|
ref.skein.Close(ta, 0, 0)
|
|
|
|
ref.jhash.Write(ta)
|
|
ref.jhash.Close(tb, 0, 0)
|
|
|
|
ref.keccak.Write(tb)
|
|
ref.keccak.Close(ta, 0, 0)
|
|
|
|
ref.luffa.Write(ta)
|
|
ref.luffa.Close(tb, 0, 0)
|
|
|
|
ref.cubed.Write(tb)
|
|
ref.cubed.Close(ta, 0, 0)
|
|
|
|
ref.shavite.Write(ta)
|
|
ref.shavite.Close(tb, 0, 0)
|
|
|
|
ref.simd.Write(tb)
|
|
ref.simd.Close(ta, 0, 0)
|
|
|
|
ref.echo.Write(ta)
|
|
ref.echo.Close(tb, 0, 0)
|
|
|
|
copy(dst, tb)
|
|
}
|