// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package blake2b

import (
	
	
)

// the precomputed values for BLAKE2b
// there are 12 16-byte arrays - one for each round
// the entries are calculated from the sigma constants.
var precomputed = [12][16]byte{
	{0, 2, 4, 6, 1, 3, 5, 7, 8, 10, 12, 14, 9, 11, 13, 15},
	{14, 4, 9, 13, 10, 8, 15, 6, 1, 0, 11, 5, 12, 2, 7, 3},
	{11, 12, 5, 15, 8, 0, 2, 13, 10, 3, 7, 9, 14, 6, 1, 4},
	{7, 3, 13, 11, 9, 1, 12, 14, 2, 5, 4, 15, 6, 10, 0, 8},
	{9, 5, 2, 10, 0, 7, 4, 15, 14, 11, 6, 3, 1, 12, 8, 13},
	{2, 6, 0, 8, 12, 10, 11, 3, 4, 7, 15, 1, 13, 5, 14, 9},
	{12, 1, 14, 4, 5, 15, 13, 10, 0, 6, 9, 8, 7, 3, 2, 11},
	{13, 7, 12, 3, 11, 14, 1, 9, 5, 15, 8, 2, 0, 4, 6, 10},
	{6, 14, 11, 0, 15, 9, 3, 8, 12, 13, 1, 10, 2, 7, 4, 5},
	{10, 8, 7, 1, 2, 4, 6, 5, 15, 9, 3, 13, 11, 14, 12, 0},
	{0, 2, 4, 6, 1, 3, 5, 7, 8, 10, 12, 14, 9, 11, 13, 15}, // equal to the first
	{14, 4, 9, 13, 10, 8, 15, 6, 1, 0, 11, 5, 12, 2, 7, 3}, // equal to the second
}

func ( *[8]uint64,  *[2]uint64,  uint64,  []byte) {
	var  [16]uint64
	,  := [0], [1]

	for  := 0;  < len(); {
		 += BlockSize
		if  < BlockSize {
			++
		}

		, , , , , , ,  := [0], [1], [2], [3], [4], [5], [6], [7]
		, , , , , , ,  := iv[0], iv[1], iv[2], iv[3], iv[4], iv[5], iv[6], iv[7]
		 ^= 
		 ^= 
		 ^= 

		for  := range  {
			[] = binary.LittleEndian.Uint64([:])
			 += 8
		}

		for  := range precomputed {
			 := &(precomputed[])

			 += [[0]]
			 += 
			 ^= 
			 = bits.RotateLeft64(, -32)
			 += 
			 ^= 
			 = bits.RotateLeft64(, -24)
			 += [[1]]
			 += 
			 ^= 
			 = bits.RotateLeft64(, -32)
			 += 
			 ^= 
			 = bits.RotateLeft64(, -24)
			 += [[2]]
			 += 
			 ^= 
			 = bits.RotateLeft64(, -32)
			 += 
			 ^= 
			 = bits.RotateLeft64(, -24)
			 += [[3]]
			 += 
			 ^= 
			 = bits.RotateLeft64(, -32)
			 += 
			 ^= 
			 = bits.RotateLeft64(, -24)

			 += [[4]]
			 += 
			 ^= 
			 = bits.RotateLeft64(, -16)
			 += 
			 ^= 
			 = bits.RotateLeft64(, -63)
			 += [[5]]
			 += 
			 ^= 
			 = bits.RotateLeft64(, -16)
			 += 
			 ^= 
			 = bits.RotateLeft64(, -63)
			 += [[6]]
			 += 
			 ^= 
			 = bits.RotateLeft64(, -16)
			 += 
			 ^= 
			 = bits.RotateLeft64(, -63)
			 += [[7]]
			 += 
			 ^= 
			 = bits.RotateLeft64(, -16)
			 += 
			 ^= 
			 = bits.RotateLeft64(, -63)

			 += [[8]]
			 += 
			 ^= 
			 = bits.RotateLeft64(, -32)
			 += 
			 ^= 
			 = bits.RotateLeft64(, -24)
			 += [[9]]
			 += 
			 ^= 
			 = bits.RotateLeft64(, -32)
			 += 
			 ^= 
			 = bits.RotateLeft64(, -24)
			 += [[10]]
			 += 
			 ^= 
			 = bits.RotateLeft64(, -32)
			 += 
			 ^= 
			 = bits.RotateLeft64(, -24)
			 += [[11]]
			 += 
			 ^= 
			 = bits.RotateLeft64(, -32)
			 += 
			 ^= 
			 = bits.RotateLeft64(, -24)

			 += [[12]]
			 += 
			 ^= 
			 = bits.RotateLeft64(, -16)
			 += 
			 ^= 
			 = bits.RotateLeft64(, -63)
			 += [[13]]
			 += 
			 ^= 
			 = bits.RotateLeft64(, -16)
			 += 
			 ^= 
			 = bits.RotateLeft64(, -63)
			 += [[14]]
			 += 
			 ^= 
			 = bits.RotateLeft64(, -16)
			 += 
			 ^= 
			 = bits.RotateLeft64(, -63)
			 += [[15]]
			 += 
			 ^= 
			 = bits.RotateLeft64(, -16)
			 += 
			 ^= 
			 = bits.RotateLeft64(, -63)

		}

		[0] ^=  ^ 
		[1] ^=  ^ 
		[2] ^=  ^ 
		[3] ^=  ^ 
		[4] ^=  ^ 
		[5] ^=  ^ 
		[6] ^=  ^ 
		[7] ^=  ^ 
	}
	[0], [1] = , 
}