1 // Copyright 2016 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
7 // the precomputed values for BLAKE2s
8 // there are 10 16-byte arrays - one for each round
9 // the entries are calculated from the sigma constants.
10 var precomputed = [10][16]byte{
11 {0, 2, 4, 6, 1, 3, 5, 7, 8, 10, 12, 14, 9, 11, 13, 15},
12 {14, 4, 9, 13, 10, 8, 15, 6, 1, 0, 11, 5, 12, 2, 7, 3},
13 {11, 12, 5, 15, 8, 0, 2, 13, 10, 3, 7, 9, 14, 6, 1, 4},
14 {7, 3, 13, 11, 9, 1, 12, 14, 2, 5, 4, 15, 6, 10, 0, 8},
15 {9, 5, 2, 10, 0, 7, 4, 15, 14, 11, 6, 3, 1, 12, 8, 13},
16 {2, 6, 0, 8, 12, 10, 11, 3, 4, 7, 15, 1, 13, 5, 14, 9},
17 {12, 1, 14, 4, 5, 15, 13, 10, 0, 6, 9, 8, 7, 3, 2, 11},
18 {13, 7, 12, 3, 11, 14, 1, 9, 5, 15, 8, 2, 0, 4, 6, 10},
19 {6, 14, 11, 0, 15, 9, 3, 8, 12, 13, 1, 10, 2, 7, 4, 5},
20 {10, 8, 7, 1, 2, 4, 6, 5, 15, 9, 3, 13, 11, 14, 12, 0},
23 func hashBlocksGeneric(h *[8]uint32, c *[2]uint32, flag uint32, blocks []byte) {
27 for i := 0; i < len(blocks); {
33 v0, v1, v2, v3, v4, v5, v6, v7 := h[0], h[1], h[2], h[3], h[4], h[5], h[6], h[7]
34 v8, v9, v10, v11, v12, v13, v14, v15 := iv[0], iv[1], iv[2], iv[3], iv[4], iv[5], iv[6], iv[7]
40 m[j] = uint32(blocks[i]) | uint32(blocks[i+1])<<8 | uint32(blocks[i+2])<<16 | uint32(blocks[i+3])<<24
44 for k := range precomputed {
45 s := &(precomputed[k])
50 v12 = v12<<(32-16) | v12>>16
53 v4 = v4<<(32-12) | v4>>12
57 v13 = v13<<(32-16) | v13>>16
60 v5 = v5<<(32-12) | v5>>12
64 v14 = v14<<(32-16) | v14>>16
67 v6 = v6<<(32-12) | v6>>12
71 v15 = v15<<(32-16) | v15>>16
74 v7 = v7<<(32-12) | v7>>12
79 v12 = v12<<(32-8) | v12>>8
82 v4 = v4<<(32-7) | v4>>7
86 v13 = v13<<(32-8) | v13>>8
89 v5 = v5<<(32-7) | v5>>7
93 v14 = v14<<(32-8) | v14>>8
96 v6 = v6<<(32-7) | v6>>7
100 v15 = v15<<(32-8) | v15>>8
103 v7 = v7<<(32-7) | v7>>7
108 v15 = v15<<(32-16) | v15>>16
111 v5 = v5<<(32-12) | v5>>12
115 v12 = v12<<(32-16) | v12>>16
118 v6 = v6<<(32-12) | v6>>12
122 v13 = v13<<(32-16) | v13>>16
125 v7 = v7<<(32-12) | v7>>12
129 v14 = v14<<(32-16) | v14>>16
132 v4 = v4<<(32-12) | v4>>12
137 v15 = v15<<(32-8) | v15>>8
140 v5 = v5<<(32-7) | v5>>7
144 v12 = v12<<(32-8) | v12>>8
147 v6 = v6<<(32-7) | v6>>7
151 v13 = v13<<(32-8) | v13>>8
154 v7 = v7<<(32-7) | v7>>7
158 v14 = v14<<(32-8) | v14>>8
161 v4 = v4<<(32-7) | v4>>7