You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
2.0 KiB

// 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)
}