|
|
@@ -4,7 +4,10 @@
|
|
|
|
|
|
package blake2b
|
|
|
|
|
|
-import "encoding/binary"
|
|
|
+import (
|
|
|
+ "encoding/binary"
|
|
|
+ "math/bits"
|
|
|
+)
|
|
|
|
|
|
// the precomputed values for BLAKE2b
|
|
|
// there are 12 16-byte arrays - one for each round
|
|
|
@@ -51,118 +54,118 @@ func hashBlocksGeneric(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) {
|
|
|
v0 += m[s[0]]
|
|
|
v0 += v4
|
|
|
v12 ^= v0
|
|
|
- v12 = v12<<(64-32) | v12>>32
|
|
|
+ v12 = bits.RotateLeft64(v12, -32)
|
|
|
v8 += v12
|
|
|
v4 ^= v8
|
|
|
- v4 = v4<<(64-24) | v4>>24
|
|
|
+ v4 = bits.RotateLeft64(v4, -24)
|
|
|
v1 += m[s[1]]
|
|
|
v1 += v5
|
|
|
v13 ^= v1
|
|
|
- v13 = v13<<(64-32) | v13>>32
|
|
|
+ v13 = bits.RotateLeft64(v13, -32)
|
|
|
v9 += v13
|
|
|
v5 ^= v9
|
|
|
- v5 = v5<<(64-24) | v5>>24
|
|
|
+ v5 = bits.RotateLeft64(v5, -24)
|
|
|
v2 += m[s[2]]
|
|
|
v2 += v6
|
|
|
v14 ^= v2
|
|
|
- v14 = v14<<(64-32) | v14>>32
|
|
|
+ v14 = bits.RotateLeft64(v14, -32)
|
|
|
v10 += v14
|
|
|
v6 ^= v10
|
|
|
- v6 = v6<<(64-24) | v6>>24
|
|
|
+ v6 = bits.RotateLeft64(v6, -24)
|
|
|
v3 += m[s[3]]
|
|
|
v3 += v7
|
|
|
v15 ^= v3
|
|
|
- v15 = v15<<(64-32) | v15>>32
|
|
|
+ v15 = bits.RotateLeft64(v15, -32)
|
|
|
v11 += v15
|
|
|
v7 ^= v11
|
|
|
- v7 = v7<<(64-24) | v7>>24
|
|
|
+ v7 = bits.RotateLeft64(v7, -24)
|
|
|
|
|
|
v0 += m[s[4]]
|
|
|
v0 += v4
|
|
|
v12 ^= v0
|
|
|
- v12 = v12<<(64-16) | v12>>16
|
|
|
+ v12 = bits.RotateLeft64(v12, -16)
|
|
|
v8 += v12
|
|
|
v4 ^= v8
|
|
|
- v4 = v4<<(64-63) | v4>>63
|
|
|
+ v4 = bits.RotateLeft64(v4, -63)
|
|
|
v1 += m[s[5]]
|
|
|
v1 += v5
|
|
|
v13 ^= v1
|
|
|
- v13 = v13<<(64-16) | v13>>16
|
|
|
+ v13 = bits.RotateLeft64(v13, -16)
|
|
|
v9 += v13
|
|
|
v5 ^= v9
|
|
|
- v5 = v5<<(64-63) | v5>>63
|
|
|
+ v5 = bits.RotateLeft64(v5, -63)
|
|
|
v2 += m[s[6]]
|
|
|
v2 += v6
|
|
|
v14 ^= v2
|
|
|
- v14 = v14<<(64-16) | v14>>16
|
|
|
+ v14 = bits.RotateLeft64(v14, -16)
|
|
|
v10 += v14
|
|
|
v6 ^= v10
|
|
|
- v6 = v6<<(64-63) | v6>>63
|
|
|
+ v6 = bits.RotateLeft64(v6, -63)
|
|
|
v3 += m[s[7]]
|
|
|
v3 += v7
|
|
|
v15 ^= v3
|
|
|
- v15 = v15<<(64-16) | v15>>16
|
|
|
+ v15 = bits.RotateLeft64(v15, -16)
|
|
|
v11 += v15
|
|
|
v7 ^= v11
|
|
|
- v7 = v7<<(64-63) | v7>>63
|
|
|
+ v7 = bits.RotateLeft64(v7, -63)
|
|
|
|
|
|
v0 += m[s[8]]
|
|
|
v0 += v5
|
|
|
v15 ^= v0
|
|
|
- v15 = v15<<(64-32) | v15>>32
|
|
|
+ v15 = bits.RotateLeft64(v15, -32)
|
|
|
v10 += v15
|
|
|
v5 ^= v10
|
|
|
- v5 = v5<<(64-24) | v5>>24
|
|
|
+ v5 = bits.RotateLeft64(v5, -24)
|
|
|
v1 += m[s[9]]
|
|
|
v1 += v6
|
|
|
v12 ^= v1
|
|
|
- v12 = v12<<(64-32) | v12>>32
|
|
|
+ v12 = bits.RotateLeft64(v12, -32)
|
|
|
v11 += v12
|
|
|
v6 ^= v11
|
|
|
- v6 = v6<<(64-24) | v6>>24
|
|
|
+ v6 = bits.RotateLeft64(v6, -24)
|
|
|
v2 += m[s[10]]
|
|
|
v2 += v7
|
|
|
v13 ^= v2
|
|
|
- v13 = v13<<(64-32) | v13>>32
|
|
|
+ v13 = bits.RotateLeft64(v13, -32)
|
|
|
v8 += v13
|
|
|
v7 ^= v8
|
|
|
- v7 = v7<<(64-24) | v7>>24
|
|
|
+ v7 = bits.RotateLeft64(v7, -24)
|
|
|
v3 += m[s[11]]
|
|
|
v3 += v4
|
|
|
v14 ^= v3
|
|
|
- v14 = v14<<(64-32) | v14>>32
|
|
|
+ v14 = bits.RotateLeft64(v14, -32)
|
|
|
v9 += v14
|
|
|
v4 ^= v9
|
|
|
- v4 = v4<<(64-24) | v4>>24
|
|
|
+ v4 = bits.RotateLeft64(v4, -24)
|
|
|
|
|
|
v0 += m[s[12]]
|
|
|
v0 += v5
|
|
|
v15 ^= v0
|
|
|
- v15 = v15<<(64-16) | v15>>16
|
|
|
+ v15 = bits.RotateLeft64(v15, -16)
|
|
|
v10 += v15
|
|
|
v5 ^= v10
|
|
|
- v5 = v5<<(64-63) | v5>>63
|
|
|
+ v5 = bits.RotateLeft64(v5, -63)
|
|
|
v1 += m[s[13]]
|
|
|
v1 += v6
|
|
|
v12 ^= v1
|
|
|
- v12 = v12<<(64-16) | v12>>16
|
|
|
+ v12 = bits.RotateLeft64(v12, -16)
|
|
|
v11 += v12
|
|
|
v6 ^= v11
|
|
|
- v6 = v6<<(64-63) | v6>>63
|
|
|
+ v6 = bits.RotateLeft64(v6, -63)
|
|
|
v2 += m[s[14]]
|
|
|
v2 += v7
|
|
|
v13 ^= v2
|
|
|
- v13 = v13<<(64-16) | v13>>16
|
|
|
+ v13 = bits.RotateLeft64(v13, -16)
|
|
|
v8 += v13
|
|
|
v7 ^= v8
|
|
|
- v7 = v7<<(64-63) | v7>>63
|
|
|
+ v7 = bits.RotateLeft64(v7, -63)
|
|
|
v3 += m[s[15]]
|
|
|
v3 += v4
|
|
|
v14 ^= v3
|
|
|
- v14 = v14<<(64-16) | v14>>16
|
|
|
+ v14 = bits.RotateLeft64(v14, -16)
|
|
|
v9 += v14
|
|
|
v4 ^= v9
|
|
|
- v4 = v4<<(64-63) | v4>>63
|
|
|
+ v4 = bits.RotateLeft64(v4, -63)
|
|
|
|
|
|
}
|
|
|
|