Beispiel #1
0
func (s *hashFunc) update(block *[16]uint64) {
	threefish.IncrementTweak(&(s.tweak), threefish.BlockSize1024)

	threefish.UBI1024(block, &(s.hVal), &(s.tweak))

	s.tweak[1] &^= skein.FirstBlock
}
Beispiel #2
0
func (s *hashFunc) output(dst *[threefish.BlockSize1024]byte, counter uint64) {
	var block [16]uint64
	block[0] = counter

	hVal := s.hVal
	var outTweak = [3]uint64{8, skein.CfgOutput<<56 | skein.FirstBlock | skein.FinalBlock, 0}

	threefish.UBI1024(&block, &hVal, &outTweak)
	block[0] ^= counter

	blockToBytes(dst[:], &block)
}
Beispiel #3
0
func (s *hashFunc) finalizeHash() {
	threefish.IncrementTweak(&(s.tweak), uint64(s.off))
	s.tweak[1] |= skein.FinalBlock // set the last block flag

	for i := s.off; i < len(s.block); i++ {
		s.block[i] = 0
	}
	s.off = 0

	var block [16]uint64
	bytesToBlock(&block, s.block[:])

	threefish.UBI1024(&block, &(s.hVal), &(s.tweak))
}