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