1420 lines
24 KiB
Go
1420 lines
24 KiB
Go
|
// Written in 2012 by Dmitry Chestnykh.
|
||
|
//
|
||
|
// To the extent possible under law, the author have dedicated all copyright
|
||
|
// and related and neighboring rights to this software to the public domain
|
||
|
// worldwide. This software is distributed without any warranty.
|
||
|
// http://creativecommons.org/publicdomain/zero/1.0/
|
||
|
|
||
|
package blake2b
|
||
|
|
||
|
func compressGeneric(d *digest, p []uint8) {
|
||
|
h0, h1, h2, h3, h4, h5, h6, h7 := d.h[0], d.h[1], d.h[2], d.h[3], d.h[4], d.h[5], d.h[6], d.h[7]
|
||
|
|
||
|
for len(p) >= BlockSize {
|
||
|
// Increment counter.
|
||
|
d.t[0] += BlockSize
|
||
|
if d.t[0] < BlockSize {
|
||
|
d.t[1]++
|
||
|
}
|
||
|
// Initialize compression function.
|
||
|
v0, v1, v2, v3, v4, v5, v6, v7 := h0, h1, h2, h3, h4, h5, h6, h7
|
||
|
v8 := iv[0]
|
||
|
v9 := iv[1]
|
||
|
v10 := iv[2]
|
||
|
v11 := iv[3]
|
||
|
v12 := iv[4] ^ d.t[0]
|
||
|
v13 := iv[5] ^ d.t[1]
|
||
|
v14 := iv[6] ^ d.f[0]
|
||
|
v15 := iv[7] ^ d.f[1]
|
||
|
|
||
|
j := 0
|
||
|
var m [16]uint64
|
||
|
for i := range m {
|
||
|
m[i] = uint64(p[j]) | uint64(p[j+1])<<8 | uint64(p[j+2])<<16 |
|
||
|
uint64(p[j+3])<<24 | uint64(p[j+4])<<32 | uint64(p[j+5])<<40 |
|
||
|
uint64(p[j+6])<<48 | uint64(p[j+7])<<56
|
||
|
j += 8
|
||
|
}
|
||
|
|
||
|
// Round 1.
|
||
|
v0 += m[0]
|
||
|
v0 += v4
|
||
|
v12 ^= v0
|
||
|
v12 = v12<<(64-32) | v12>>32
|
||
|
v8 += v12
|
||
|
v4 ^= v8
|
||
|
v4 = v4<<(64-24) | v4>>24
|
||
|
v1 += m[2]
|
||
|
v1 += v5
|
||
|
v13 ^= v1
|
||
|
v13 = v13<<(64-32) | v13>>32
|
||
|
v9 += v13
|
||
|
v5 ^= v9
|
||
|
v5 = v5<<(64-24) | v5>>24
|
||
|
v2 += m[4]
|
||
|
v2 += v6
|
||
|
v14 ^= v2
|
||
|
v14 = v14<<(64-32) | v14>>32
|
||
|
v10 += v14
|
||
|
v6 ^= v10
|
||
|
v6 = v6<<(64-24) | v6>>24
|
||
|
v3 += m[6]
|
||
|
v3 += v7
|
||
|
v15 ^= v3
|
||
|
v15 = v15<<(64-32) | v15>>32
|
||
|
v11 += v15
|
||
|
v7 ^= v11
|
||
|
v7 = v7<<(64-24) | v7>>24
|
||
|
v2 += m[5]
|
||
|
v2 += v6
|
||
|
v14 ^= v2
|
||
|
v14 = v14<<(64-16) | v14>>16
|
||
|
v10 += v14
|
||
|
v6 ^= v10
|
||
|
v6 = v6<<(64-63) | v6>>63
|
||
|
v3 += m[7]
|
||
|
v3 += v7
|
||
|
v15 ^= v3
|
||
|
v15 = v15<<(64-16) | v15>>16
|
||
|
v11 += v15
|
||
|
v7 ^= v11
|
||
|
v7 = v7<<(64-63) | v7>>63
|
||
|
v1 += m[3]
|
||
|
v1 += v5
|
||
|
v13 ^= v1
|
||
|
v13 = v13<<(64-16) | v13>>16
|
||
|
v9 += v13
|
||
|
v5 ^= v9
|
||
|
v5 = v5<<(64-63) | v5>>63
|
||
|
v0 += m[1]
|
||
|
v0 += v4
|
||
|
v12 ^= v0
|
||
|
v12 = v12<<(64-16) | v12>>16
|
||
|
v8 += v12
|
||
|
v4 ^= v8
|
||
|
v4 = v4<<(64-63) | v4>>63
|
||
|
v0 += m[8]
|
||
|
v0 += v5
|
||
|
v15 ^= v0
|
||
|
v15 = v15<<(64-32) | v15>>32
|
||
|
v10 += v15
|
||
|
v5 ^= v10
|
||
|
v5 = v5<<(64-24) | v5>>24
|
||
|
v1 += m[10]
|
||
|
v1 += v6
|
||
|
v12 ^= v1
|
||
|
v12 = v12<<(64-32) | v12>>32
|
||
|
v11 += v12
|
||
|
v6 ^= v11
|
||
|
v6 = v6<<(64-24) | v6>>24
|
||
|
v2 += m[12]
|
||
|
v2 += v7
|
||
|
v13 ^= v2
|
||
|
v13 = v13<<(64-32) | v13>>32
|
||
|
v8 += v13
|
||
|
v7 ^= v8
|
||
|
v7 = v7<<(64-24) | v7>>24
|
||
|
v3 += m[14]
|
||
|
v3 += v4
|
||
|
v14 ^= v3
|
||
|
v14 = v14<<(64-32) | v14>>32
|
||
|
v9 += v14
|
||
|
v4 ^= v9
|
||
|
v4 = v4<<(64-24) | v4>>24
|
||
|
v2 += m[13]
|
||
|
v2 += v7
|
||
|
v13 ^= v2
|
||
|
v13 = v13<<(64-16) | v13>>16
|
||
|
v8 += v13
|
||
|
v7 ^= v8
|
||
|
v7 = v7<<(64-63) | v7>>63
|
||
|
v3 += m[15]
|
||
|
v3 += v4
|
||
|
v14 ^= v3
|
||
|
v14 = v14<<(64-16) | v14>>16
|
||
|
v9 += v14
|
||
|
v4 ^= v9
|
||
|
v4 = v4<<(64-63) | v4>>63
|
||
|
v1 += m[11]
|
||
|
v1 += v6
|
||
|
v12 ^= v1
|
||
|
v12 = v12<<(64-16) | v12>>16
|
||
|
v11 += v12
|
||
|
v6 ^= v11
|
||
|
v6 = v6<<(64-63) | v6>>63
|
||
|
v0 += m[9]
|
||
|
v0 += v5
|
||
|
v15 ^= v0
|
||
|
v15 = v15<<(64-16) | v15>>16
|
||
|
v10 += v15
|
||
|
v5 ^= v10
|
||
|
v5 = v5<<(64-63) | v5>>63
|
||
|
|
||
|
// Round 2.
|
||
|
v0 += m[14]
|
||
|
v0 += v4
|
||
|
v12 ^= v0
|
||
|
v12 = v12<<(64-32) | v12>>32
|
||
|
v8 += v12
|
||
|
v4 ^= v8
|
||
|
v4 = v4<<(64-24) | v4>>24
|
||
|
v1 += m[4]
|
||
|
v1 += v5
|
||
|
v13 ^= v1
|
||
|
v13 = v13<<(64-32) | v13>>32
|
||
|
v9 += v13
|
||
|
v5 ^= v9
|
||
|
v5 = v5<<(64-24) | v5>>24
|
||
|
v2 += m[9]
|
||
|
v2 += v6
|
||
|
v14 ^= v2
|
||
|
v14 = v14<<(64-32) | v14>>32
|
||
|
v10 += v14
|
||
|
v6 ^= v10
|
||
|
v6 = v6<<(64-24) | v6>>24
|
||
|
v3 += m[13]
|
||
|
v3 += v7
|
||
|
v15 ^= v3
|
||
|
v15 = v15<<(64-32) | v15>>32
|
||
|
v11 += v15
|
||
|
v7 ^= v11
|
||
|
v7 = v7<<(64-24) | v7>>24
|
||
|
v2 += m[15]
|
||
|
v2 += v6
|
||
|
v14 ^= v2
|
||
|
v14 = v14<<(64-16) | v14>>16
|
||
|
v10 += v14
|
||
|
v6 ^= v10
|
||
|
v6 = v6<<(64-63) | v6>>63
|
||
|
v3 += m[6]
|
||
|
v3 += v7
|
||
|
v15 ^= v3
|
||
|
v15 = v15<<(64-16) | v15>>16
|
||
|
v11 += v15
|
||
|
v7 ^= v11
|
||
|
v7 = v7<<(64-63) | v7>>63
|
||
|
v1 += m[8]
|
||
|
v1 += v5
|
||
|
v13 ^= v1
|
||
|
v13 = v13<<(64-16) | v13>>16
|
||
|
v9 += v13
|
||
|
v5 ^= v9
|
||
|
v5 = v5<<(64-63) | v5>>63
|
||
|
v0 += m[10]
|
||
|
v0 += v4
|
||
|
v12 ^= v0
|
||
|
v12 = v12<<(64-16) | v12>>16
|
||
|
v8 += v12
|
||
|
v4 ^= v8
|
||
|
v4 = v4<<(64-63) | v4>>63
|
||
|
v0 += m[1]
|
||
|
v0 += v5
|
||
|
v15 ^= v0
|
||
|
v15 = v15<<(64-32) | v15>>32
|
||
|
v10 += v15
|
||
|
v5 ^= v10
|
||
|
v5 = v5<<(64-24) | v5>>24
|
||
|
v1 += m[0]
|
||
|
v1 += v6
|
||
|
v12 ^= v1
|
||
|
v12 = v12<<(64-32) | v12>>32
|
||
|
v11 += v12
|
||
|
v6 ^= v11
|
||
|
v6 = v6<<(64-24) | v6>>24
|
||
|
v2 += m[11]
|
||
|
v2 += v7
|
||
|
v13 ^= v2
|
||
|
v13 = v13<<(64-32) | v13>>32
|
||
|
v8 += v13
|
||
|
v7 ^= v8
|
||
|
v7 = v7<<(64-24) | v7>>24
|
||
|
v3 += m[5]
|
||
|
v3 += v4
|
||
|
v14 ^= v3
|
||
|
v14 = v14<<(64-32) | v14>>32
|
||
|
v9 += v14
|
||
|
v4 ^= v9
|
||
|
v4 = v4<<(64-24) | v4>>24
|
||
|
v2 += m[7]
|
||
|
v2 += v7
|
||
|
v13 ^= v2
|
||
|
v13 = v13<<(64-16) | v13>>16
|
||
|
v8 += v13
|
||
|
v7 ^= v8
|
||
|
v7 = v7<<(64-63) | v7>>63
|
||
|
v3 += m[3]
|
||
|
v3 += v4
|
||
|
v14 ^= v3
|
||
|
v14 = v14<<(64-16) | v14>>16
|
||
|
v9 += v14
|
||
|
v4 ^= v9
|
||
|
v4 = v4<<(64-63) | v4>>63
|
||
|
v1 += m[2]
|
||
|
v1 += v6
|
||
|
v12 ^= v1
|
||
|
v12 = v12<<(64-16) | v12>>16
|
||
|
v11 += v12
|
||
|
v6 ^= v11
|
||
|
v6 = v6<<(64-63) | v6>>63
|
||
|
v0 += m[12]
|
||
|
v0 += v5
|
||
|
v15 ^= v0
|
||
|
v15 = v15<<(64-16) | v15>>16
|
||
|
v10 += v15
|
||
|
v5 ^= v10
|
||
|
v5 = v5<<(64-63) | v5>>63
|
||
|
|
||
|
// Round 3.
|
||
|
v0 += m[11]
|
||
|
v0 += v4
|
||
|
v12 ^= v0
|
||
|
v12 = v12<<(64-32) | v12>>32
|
||
|
v8 += v12
|
||
|
v4 ^= v8
|
||
|
v4 = v4<<(64-24) | v4>>24
|
||
|
v1 += m[12]
|
||
|
v1 += v5
|
||
|
v13 ^= v1
|
||
|
v13 = v13<<(64-32) | v13>>32
|
||
|
v9 += v13
|
||
|
v5 ^= v9
|
||
|
v5 = v5<<(64-24) | v5>>24
|
||
|
v2 += m[5]
|
||
|
v2 += v6
|
||
|
v14 ^= v2
|
||
|
v14 = v14<<(64-32) | v14>>32
|
||
|
v10 += v14
|
||
|
v6 ^= v10
|
||
|
v6 = v6<<(64-24) | v6>>24
|
||
|
v3 += m[15]
|
||
|
v3 += v7
|
||
|
v15 ^= v3
|
||
|
v15 = v15<<(64-32) | v15>>32
|
||
|
v11 += v15
|
||
|
v7 ^= v11
|
||
|
v7 = v7<<(64-24) | v7>>24
|
||
|
v2 += m[2]
|
||
|
v2 += v6
|
||
|
v14 ^= v2
|
||
|
v14 = v14<<(64-16) | v14>>16
|
||
|
v10 += v14
|
||
|
v6 ^= v10
|
||
|
v6 = v6<<(64-63) | v6>>63
|
||
|
v3 += m[13]
|
||
|
v3 += v7
|
||
|
v15 ^= v3
|
||
|
v15 = v15<<(64-16) | v15>>16
|
||
|
v11 += v15
|
||
|
v7 ^= v11
|
||
|
v7 = v7<<(64-63) | v7>>63
|
||
|
v1 += m[0]
|
||
|
v1 += v5
|
||
|
v13 ^= v1
|
||
|
v13 = v13<<(64-16) | v13>>16
|
||
|
v9 += v13
|
||
|
v5 ^= v9
|
||
|
v5 = v5<<(64-63) | v5>>63
|
||
|
v0 += m[8]
|
||
|
v0 += v4
|
||
|
v12 ^= v0
|
||
|
v12 = v12<<(64-16) | v12>>16
|
||
|
v8 += v12
|
||
|
v4 ^= v8
|
||
|
v4 = v4<<(64-63) | v4>>63
|
||
|
v0 += m[10]
|
||
|
v0 += v5
|
||
|
v15 ^= v0
|
||
|
v15 = v15<<(64-32) | v15>>32
|
||
|
v10 += v15
|
||
|
v5 ^= v10
|
||
|
v5 = v5<<(64-24) | v5>>24
|
||
|
v1 += m[3]
|
||
|
v1 += v6
|
||
|
v12 ^= v1
|
||
|
v12 = v12<<(64-32) | v12>>32
|
||
|
v11 += v12
|
||
|
v6 ^= v11
|
||
|
v6 = v6<<(64-24) | v6>>24
|
||
|
v2 += m[7]
|
||
|
v2 += v7
|
||
|
v13 ^= v2
|
||
|
v13 = v13<<(64-32) | v13>>32
|
||
|
v8 += v13
|
||
|
v7 ^= v8
|
||
|
v7 = v7<<(64-24) | v7>>24
|
||
|
v3 += m[9]
|
||
|
v3 += v4
|
||
|
v14 ^= v3
|
||
|
v14 = v14<<(64-32) | v14>>32
|
||
|
v9 += v14
|
||
|
v4 ^= v9
|
||
|
v4 = v4<<(64-24) | v4>>24
|
||
|
v2 += m[1]
|
||
|
v2 += v7
|
||
|
v13 ^= v2
|
||
|
v13 = v13<<(64-16) | v13>>16
|
||
|
v8 += v13
|
||
|
v7 ^= v8
|
||
|
v7 = v7<<(64-63) | v7>>63
|
||
|
v3 += m[4]
|
||
|
v3 += v4
|
||
|
v14 ^= v3
|
||
|
v14 = v14<<(64-16) | v14>>16
|
||
|
v9 += v14
|
||
|
v4 ^= v9
|
||
|
v4 = v4<<(64-63) | v4>>63
|
||
|
v1 += m[6]
|
||
|
v1 += v6
|
||
|
v12 ^= v1
|
||
|
v12 = v12<<(64-16) | v12>>16
|
||
|
v11 += v12
|
||
|
v6 ^= v11
|
||
|
v6 = v6<<(64-63) | v6>>63
|
||
|
v0 += m[14]
|
||
|
v0 += v5
|
||
|
v15 ^= v0
|
||
|
v15 = v15<<(64-16) | v15>>16
|
||
|
v10 += v15
|
||
|
v5 ^= v10
|
||
|
v5 = v5<<(64-63) | v5>>63
|
||
|
|
||
|
// Round 4.
|
||
|
v0 += m[7]
|
||
|
v0 += v4
|
||
|
v12 ^= v0
|
||
|
v12 = v12<<(64-32) | v12>>32
|
||
|
v8 += v12
|
||
|
v4 ^= v8
|
||
|
v4 = v4<<(64-24) | v4>>24
|
||
|
v1 += m[3]
|
||
|
v1 += v5
|
||
|
v13 ^= v1
|
||
|
v13 = v13<<(64-32) | v13>>32
|
||
|
v9 += v13
|
||
|
v5 ^= v9
|
||
|
v5 = v5<<(64-24) | v5>>24
|
||
|
v2 += m[13]
|
||
|
v2 += v6
|
||
|
v14 ^= v2
|
||
|
v14 = v14<<(64-32) | v14>>32
|
||
|
v10 += v14
|
||
|
v6 ^= v10
|
||
|
v6 = v6<<(64-24) | v6>>24
|
||
|
v3 += m[11]
|
||
|
v3 += v7
|
||
|
v15 ^= v3
|
||
|
v15 = v15<<(64-32) | v15>>32
|
||
|
v11 += v15
|
||
|
v7 ^= v11
|
||
|
v7 = v7<<(64-24) | v7>>24
|
||
|
v2 += m[12]
|
||
|
v2 += v6
|
||
|
v14 ^= v2
|
||
|
v14 = v14<<(64-16) | v14>>16
|
||
|
v10 += v14
|
||
|
v6 ^= v10
|
||
|
v6 = v6<<(64-63) | v6>>63
|
||
|
v3 += m[14]
|
||
|
v3 += v7
|
||
|
v15 ^= v3
|
||
|
v15 = v15<<(64-16) | v15>>16
|
||
|
v11 += v15
|
||
|
v7 ^= v11
|
||
|
v7 = v7<<(64-63) | v7>>63
|
||
|
v1 += m[1]
|
||
|
v1 += v5
|
||
|
v13 ^= v1
|
||
|
v13 = v13<<(64-16) | v13>>16
|
||
|
v9 += v13
|
||
|
v5 ^= v9
|
||
|
v5 = v5<<(64-63) | v5>>63
|
||
|
v0 += m[9]
|
||
|
v0 += v4
|
||
|
v12 ^= v0
|
||
|
v12 = v12<<(64-16) | v12>>16
|
||
|
v8 += v12
|
||
|
v4 ^= v8
|
||
|
v4 = v4<<(64-63) | v4>>63
|
||
|
v0 += m[2]
|
||
|
v0 += v5
|
||
|
v15 ^= v0
|
||
|
v15 = v15<<(64-32) | v15>>32
|
||
|
v10 += v15
|
||
|
v5 ^= v10
|
||
|
v5 = v5<<(64-24) | v5>>24
|
||
|
v1 += m[5]
|
||
|
v1 += v6
|
||
|
v12 ^= v1
|
||
|
v12 = v12<<(64-32) | v12>>32
|
||
|
v11 += v12
|
||
|
v6 ^= v11
|
||
|
v6 = v6<<(64-24) | v6>>24
|
||
|
v2 += m[4]
|
||
|
v2 += v7
|
||
|
v13 ^= v2
|
||
|
v13 = v13<<(64-32) | v13>>32
|
||
|
v8 += v13
|
||
|
v7 ^= v8
|
||
|
v7 = v7<<(64-24) | v7>>24
|
||
|
v3 += m[15]
|
||
|
v3 += v4
|
||
|
v14 ^= v3
|
||
|
v14 = v14<<(64-32) | v14>>32
|
||
|
v9 += v14
|
||
|
v4 ^= v9
|
||
|
v4 = v4<<(64-24) | v4>>24
|
||
|
v2 += m[0]
|
||
|
v2 += v7
|
||
|
v13 ^= v2
|
||
|
v13 = v13<<(64-16) | v13>>16
|
||
|
v8 += v13
|
||
|
v7 ^= v8
|
||
|
v7 = v7<<(64-63) | v7>>63
|
||
|
v3 += m[8]
|
||
|
v3 += v4
|
||
|
v14 ^= v3
|
||
|
v14 = v14<<(64-16) | v14>>16
|
||
|
v9 += v14
|
||
|
v4 ^= v9
|
||
|
v4 = v4<<(64-63) | v4>>63
|
||
|
v1 += m[10]
|
||
|
v1 += v6
|
||
|
v12 ^= v1
|
||
|
v12 = v12<<(64-16) | v12>>16
|
||
|
v11 += v12
|
||
|
v6 ^= v11
|
||
|
v6 = v6<<(64-63) | v6>>63
|
||
|
v0 += m[6]
|
||
|
v0 += v5
|
||
|
v15 ^= v0
|
||
|
v15 = v15<<(64-16) | v15>>16
|
||
|
v10 += v15
|
||
|
v5 ^= v10
|
||
|
v5 = v5<<(64-63) | v5>>63
|
||
|
|
||
|
// Round 5.
|
||
|
v0 += m[9]
|
||
|
v0 += v4
|
||
|
v12 ^= v0
|
||
|
v12 = v12<<(64-32) | v12>>32
|
||
|
v8 += v12
|
||
|
v4 ^= v8
|
||
|
v4 = v4<<(64-24) | v4>>24
|
||
|
v1 += m[5]
|
||
|
v1 += v5
|
||
|
v13 ^= v1
|
||
|
v13 = v13<<(64-32) | v13>>32
|
||
|
v9 += v13
|
||
|
v5 ^= v9
|
||
|
v5 = v5<<(64-24) | v5>>24
|
||
|
v2 += m[2]
|
||
|
v2 += v6
|
||
|
v14 ^= v2
|
||
|
v14 = v14<<(64-32) | v14>>32
|
||
|
v10 += v14
|
||
|
v6 ^= v10
|
||
|
v6 = v6<<(64-24) | v6>>24
|
||
|
v3 += m[10]
|
||
|
v3 += v7
|
||
|
v15 ^= v3
|
||
|
v15 = v15<<(64-32) | v15>>32
|
||
|
v11 += v15
|
||
|
v7 ^= v11
|
||
|
v7 = v7<<(64-24) | v7>>24
|
||
|
v2 += m[4]
|
||
|
v2 += v6
|
||
|
v14 ^= v2
|
||
|
v14 = v14<<(64-16) | v14>>16
|
||
|
v10 += v14
|
||
|
v6 ^= v10
|
||
|
v6 = v6<<(64-63) | v6>>63
|
||
|
v3 += m[15]
|
||
|
v3 += v7
|
||
|
v15 ^= v3
|
||
|
v15 = v15<<(64-16) | v15>>16
|
||
|
v11 += v15
|
||
|
v7 ^= v11
|
||
|
v7 = v7<<(64-63) | v7>>63
|
||
|
v1 += m[7]
|
||
|
v1 += v5
|
||
|
v13 ^= v1
|
||
|
v13 = v13<<(64-16) | v13>>16
|
||
|
v9 += v13
|
||
|
v5 ^= v9
|
||
|
v5 = v5<<(64-63) | v5>>63
|
||
|
v0 += m[0]
|
||
|
v0 += v4
|
||
|
v12 ^= v0
|
||
|
v12 = v12<<(64-16) | v12>>16
|
||
|
v8 += v12
|
||
|
v4 ^= v8
|
||
|
v4 = v4<<(64-63) | v4>>63
|
||
|
v0 += m[14]
|
||
|
v0 += v5
|
||
|
v15 ^= v0
|
||
|
v15 = v15<<(64-32) | v15>>32
|
||
|
v10 += v15
|
||
|
v5 ^= v10
|
||
|
v5 = v5<<(64-24) | v5>>24
|
||
|
v1 += m[11]
|
||
|
v1 += v6
|
||
|
v12 ^= v1
|
||
|
v12 = v12<<(64-32) | v12>>32
|
||
|
v11 += v12
|
||
|
v6 ^= v11
|
||
|
v6 = v6<<(64-24) | v6>>24
|
||
|
v2 += m[6]
|
||
|
v2 += v7
|
||
|
v13 ^= v2
|
||
|
v13 = v13<<(64-32) | v13>>32
|
||
|
v8 += v13
|
||
|
v7 ^= v8
|
||
|
v7 = v7<<(64-24) | v7>>24
|
||
|
v3 += m[3]
|
||
|
v3 += v4
|
||
|
v14 ^= v3
|
||
|
v14 = v14<<(64-32) | v14>>32
|
||
|
v9 += v14
|
||
|
v4 ^= v9
|
||
|
v4 = v4<<(64-24) | v4>>24
|
||
|
v2 += m[8]
|
||
|
v2 += v7
|
||
|
v13 ^= v2
|
||
|
v13 = v13<<(64-16) | v13>>16
|
||
|
v8 += v13
|
||
|
v7 ^= v8
|
||
|
v7 = v7<<(64-63) | v7>>63
|
||
|
v3 += m[13]
|
||
|
v3 += v4
|
||
|
v14 ^= v3
|
||
|
v14 = v14<<(64-16) | v14>>16
|
||
|
v9 += v14
|
||
|
v4 ^= v9
|
||
|
v4 = v4<<(64-63) | v4>>63
|
||
|
v1 += m[12]
|
||
|
v1 += v6
|
||
|
v12 ^= v1
|
||
|
v12 = v12<<(64-16) | v12>>16
|
||
|
v11 += v12
|
||
|
v6 ^= v11
|
||
|
v6 = v6<<(64-63) | v6>>63
|
||
|
v0 += m[1]
|
||
|
v0 += v5
|
||
|
v15 ^= v0
|
||
|
v15 = v15<<(64-16) | v15>>16
|
||
|
v10 += v15
|
||
|
v5 ^= v10
|
||
|
v5 = v5<<(64-63) | v5>>63
|
||
|
|
||
|
// Round 6.
|
||
|
v0 += m[2]
|
||
|
v0 += v4
|
||
|
v12 ^= v0
|
||
|
v12 = v12<<(64-32) | v12>>32
|
||
|
v8 += v12
|
||
|
v4 ^= v8
|
||
|
v4 = v4<<(64-24) | v4>>24
|
||
|
v1 += m[6]
|
||
|
v1 += v5
|
||
|
v13 ^= v1
|
||
|
v13 = v13<<(64-32) | v13>>32
|
||
|
v9 += v13
|
||
|
v5 ^= v9
|
||
|
v5 = v5<<(64-24) | v5>>24
|
||
|
v2 += m[0]
|
||
|
v2 += v6
|
||
|
v14 ^= v2
|
||
|
v14 = v14<<(64-32) | v14>>32
|
||
|
v10 += v14
|
||
|
v6 ^= v10
|
||
|
v6 = v6<<(64-24) | v6>>24
|
||
|
v3 += m[8]
|
||
|
v3 += v7
|
||
|
v15 ^= v3
|
||
|
v15 = v15<<(64-32) | v15>>32
|
||
|
v11 += v15
|
||
|
v7 ^= v11
|
||
|
v7 = v7<<(64-24) | v7>>24
|
||
|
v2 += m[11]
|
||
|
v2 += v6
|
||
|
v14 ^= v2
|
||
|
v14 = v14<<(64-16) | v14>>16
|
||
|
v10 += v14
|
||
|
v6 ^= v10
|
||
|
v6 = v6<<(64-63) | v6>>63
|
||
|
v3 += m[3]
|
||
|
v3 += v7
|
||
|
v15 ^= v3
|
||
|
v15 = v15<<(64-16) | v15>>16
|
||
|
v11 += v15
|
||
|
v7 ^= v11
|
||
|
v7 = v7<<(64-63) | v7>>63
|
||
|
v1 += m[10]
|
||
|
v1 += v5
|
||
|
v13 ^= v1
|
||
|
v13 = v13<<(64-16) | v13>>16
|
||
|
v9 += v13
|
||
|
v5 ^= v9
|
||
|
v5 = v5<<(64-63) | v5>>63
|
||
|
v0 += m[12]
|
||
|
v0 += v4
|
||
|
v12 ^= v0
|
||
|
v12 = v12<<(64-16) | v12>>16
|
||
|
v8 += v12
|
||
|
v4 ^= v8
|
||
|
v4 = v4<<(64-63) | v4>>63
|
||
|
v0 += m[4]
|
||
|
v0 += v5
|
||
|
v15 ^= v0
|
||
|
v15 = v15<<(64-32) | v15>>32
|
||
|
v10 += v15
|
||
|
v5 ^= v10
|
||
|
v5 = v5<<(64-24) | v5>>24
|
||
|
v1 += m[7]
|
||
|
v1 += v6
|
||
|
v12 ^= v1
|
||
|
v12 = v12<<(64-32) | v12>>32
|
||
|
v11 += v12
|
||
|
v6 ^= v11
|
||
|
v6 = v6<<(64-24) | v6>>24
|
||
|
v2 += m[15]
|
||
|
v2 += v7
|
||
|
v13 ^= v2
|
||
|
v13 = v13<<(64-32) | v13>>32
|
||
|
v8 += v13
|
||
|
v7 ^= v8
|
||
|
v7 = v7<<(64-24) | v7>>24
|
||
|
v3 += m[1]
|
||
|
v3 += v4
|
||
|
v14 ^= v3
|
||
|
v14 = v14<<(64-32) | v14>>32
|
||
|
v9 += v14
|
||
|
v4 ^= v9
|
||
|
v4 = v4<<(64-24) | v4>>24
|
||
|
v2 += m[14]
|
||
|
v2 += v7
|
||
|
v13 ^= v2
|
||
|
v13 = v13<<(64-16) | v13>>16
|
||
|
v8 += v13
|
||
|
v7 ^= v8
|
||
|
v7 = v7<<(64-63) | v7>>63
|
||
|
v3 += m[9]
|
||
|
v3 += v4
|
||
|
v14 ^= v3
|
||
|
v14 = v14<<(64-16) | v14>>16
|
||
|
v9 += v14
|
||
|
v4 ^= v9
|
||
|
v4 = v4<<(64-63) | v4>>63
|
||
|
v1 += m[5]
|
||
|
v1 += v6
|
||
|
v12 ^= v1
|
||
|
v12 = v12<<(64-16) | v12>>16
|
||
|
v11 += v12
|
||
|
v6 ^= v11
|
||
|
v6 = v6<<(64-63) | v6>>63
|
||
|
v0 += m[13]
|
||
|
v0 += v5
|
||
|
v15 ^= v0
|
||
|
v15 = v15<<(64-16) | v15>>16
|
||
|
v10 += v15
|
||
|
v5 ^= v10
|
||
|
v5 = v5<<(64-63) | v5>>63
|
||
|
|
||
|
// Round 7.
|
||
|
v0 += m[12]
|
||
|
v0 += v4
|
||
|
v12 ^= v0
|
||
|
v12 = v12<<(64-32) | v12>>32
|
||
|
v8 += v12
|
||
|
v4 ^= v8
|
||
|
v4 = v4<<(64-24) | v4>>24
|
||
|
v1 += m[1]
|
||
|
v1 += v5
|
||
|
v13 ^= v1
|
||
|
v13 = v13<<(64-32) | v13>>32
|
||
|
v9 += v13
|
||
|
v5 ^= v9
|
||
|
v5 = v5<<(64-24) | v5>>24
|
||
|
v2 += m[14]
|
||
|
v2 += v6
|
||
|
v14 ^= v2
|
||
|
v14 = v14<<(64-32) | v14>>32
|
||
|
v10 += v14
|
||
|
v6 ^= v10
|
||
|
v6 = v6<<(64-24) | v6>>24
|
||
|
v3 += m[4]
|
||
|
v3 += v7
|
||
|
v15 ^= v3
|
||
|
v15 = v15<<(64-32) | v15>>32
|
||
|
v11 += v15
|
||
|
v7 ^= v11
|
||
|
v7 = v7<<(64-24) | v7>>24
|
||
|
v2 += m[13]
|
||
|
v2 += v6
|
||
|
v14 ^= v2
|
||
|
v14 = v14<<(64-16) | v14>>16
|
||
|
v10 += v14
|
||
|
v6 ^= v10
|
||
|
v6 = v6<<(64-63) | v6>>63
|
||
|
v3 += m[10]
|
||
|
v3 += v7
|
||
|
v15 ^= v3
|
||
|
v15 = v15<<(64-16) | v15>>16
|
||
|
v11 += v15
|
||
|
v7 ^= v11
|
||
|
v7 = v7<<(64-63) | v7>>63
|
||
|
v1 += m[15]
|
||
|
v1 += v5
|
||
|
v13 ^= v1
|
||
|
v13 = v13<<(64-16) | v13>>16
|
||
|
v9 += v13
|
||
|
v5 ^= v9
|
||
|
v5 = v5<<(64-63) | v5>>63
|
||
|
v0 += m[5]
|
||
|
v0 += v4
|
||
|
v12 ^= v0
|
||
|
v12 = v12<<(64-16) | v12>>16
|
||
|
v8 += v12
|
||
|
v4 ^= v8
|
||
|
v4 = v4<<(64-63) | v4>>63
|
||
|
v0 += m[0]
|
||
|
v0 += v5
|
||
|
v15 ^= v0
|
||
|
v15 = v15<<(64-32) | v15>>32
|
||
|
v10 += v15
|
||
|
v5 ^= v10
|
||
|
v5 = v5<<(64-24) | v5>>24
|
||
|
v1 += m[6]
|
||
|
v1 += v6
|
||
|
v12 ^= v1
|
||
|
v12 = v12<<(64-32) | v12>>32
|
||
|
v11 += v12
|
||
|
v6 ^= v11
|
||
|
v6 = v6<<(64-24) | v6>>24
|
||
|
v2 += m[9]
|
||
|
v2 += v7
|
||
|
v13 ^= v2
|
||
|
v13 = v13<<(64-32) | v13>>32
|
||
|
v8 += v13
|
||
|
v7 ^= v8
|
||
|
v7 = v7<<(64-24) | v7>>24
|
||
|
v3 += m[8]
|
||
|
v3 += v4
|
||
|
v14 ^= v3
|
||
|
v14 = v14<<(64-32) | v14>>32
|
||
|
v9 += v14
|
||
|
v4 ^= v9
|
||
|
v4 = v4<<(64-24) | v4>>24
|
||
|
v2 += m[2]
|
||
|
v2 += v7
|
||
|
v13 ^= v2
|
||
|
v13 = v13<<(64-16) | v13>>16
|
||
|
v8 += v13
|
||
|
v7 ^= v8
|
||
|
v7 = v7<<(64-63) | v7>>63
|
||
|
v3 += m[11]
|
||
|
v3 += v4
|
||
|
v14 ^= v3
|
||
|
v14 = v14<<(64-16) | v14>>16
|
||
|
v9 += v14
|
||
|
v4 ^= v9
|
||
|
v4 = v4<<(64-63) | v4>>63
|
||
|
v1 += m[3]
|
||
|
v1 += v6
|
||
|
v12 ^= v1
|
||
|
v12 = v12<<(64-16) | v12>>16
|
||
|
v11 += v12
|
||
|
v6 ^= v11
|
||
|
v6 = v6<<(64-63) | v6>>63
|
||
|
v0 += m[7]
|
||
|
v0 += v5
|
||
|
v15 ^= v0
|
||
|
v15 = v15<<(64-16) | v15>>16
|
||
|
v10 += v15
|
||
|
v5 ^= v10
|
||
|
v5 = v5<<(64-63) | v5>>63
|
||
|
|
||
|
// Round 8.
|
||
|
v0 += m[13]
|
||
|
v0 += v4
|
||
|
v12 ^= v0
|
||
|
v12 = v12<<(64-32) | v12>>32
|
||
|
v8 += v12
|
||
|
v4 ^= v8
|
||
|
v4 = v4<<(64-24) | v4>>24
|
||
|
v1 += m[7]
|
||
|
v1 += v5
|
||
|
v13 ^= v1
|
||
|
v13 = v13<<(64-32) | v13>>32
|
||
|
v9 += v13
|
||
|
v5 ^= v9
|
||
|
v5 = v5<<(64-24) | v5>>24
|
||
|
v2 += m[12]
|
||
|
v2 += v6
|
||
|
v14 ^= v2
|
||
|
v14 = v14<<(64-32) | v14>>32
|
||
|
v10 += v14
|
||
|
v6 ^= v10
|
||
|
v6 = v6<<(64-24) | v6>>24
|
||
|
v3 += m[3]
|
||
|
v3 += v7
|
||
|
v15 ^= v3
|
||
|
v15 = v15<<(64-32) | v15>>32
|
||
|
v11 += v15
|
||
|
v7 ^= v11
|
||
|
v7 = v7<<(64-24) | v7>>24
|
||
|
v2 += m[1]
|
||
|
v2 += v6
|
||
|
v14 ^= v2
|
||
|
v14 = v14<<(64-16) | v14>>16
|
||
|
v10 += v14
|
||
|
v6 ^= v10
|
||
|
v6 = v6<<(64-63) | v6>>63
|
||
|
v3 += m[9]
|
||
|
v3 += v7
|
||
|
v15 ^= v3
|
||
|
v15 = v15<<(64-16) | v15>>16
|
||
|
v11 += v15
|
||
|
v7 ^= v11
|
||
|
v7 = v7<<(64-63) | v7>>63
|
||
|
v1 += m[14]
|
||
|
v1 += v5
|
||
|
v13 ^= v1
|
||
|
v13 = v13<<(64-16) | v13>>16
|
||
|
v9 += v13
|
||
|
v5 ^= v9
|
||
|
v5 = v5<<(64-63) | v5>>63
|
||
|
v0 += m[11]
|
||
|
v0 += v4
|
||
|
v12 ^= v0
|
||
|
v12 = v12<<(64-16) | v12>>16
|
||
|
v8 += v12
|
||
|
v4 ^= v8
|
||
|
v4 = v4<<(64-63) | v4>>63
|
||
|
v0 += m[5]
|
||
|
v0 += v5
|
||
|
v15 ^= v0
|
||
|
v15 = v15<<(64-32) | v15>>32
|
||
|
v10 += v15
|
||
|
v5 ^= v10
|
||
|
v5 = v5<<(64-24) | v5>>24
|
||
|
v1 += m[15]
|
||
|
v1 += v6
|
||
|
v12 ^= v1
|
||
|
v12 = v12<<(64-32) | v12>>32
|
||
|
v11 += v12
|
||
|
v6 ^= v11
|
||
|
v6 = v6<<(64-24) | v6>>24
|
||
|
v2 += m[8]
|
||
|
v2 += v7
|
||
|
v13 ^= v2
|
||
|
v13 = v13<<(64-32) | v13>>32
|
||
|
v8 += v13
|
||
|
v7 ^= v8
|
||
|
v7 = v7<<(64-24) | v7>>24
|
||
|
v3 += m[2]
|
||
|
v3 += v4
|
||
|
v14 ^= v3
|
||
|
v14 = v14<<(64-32) | v14>>32
|
||
|
v9 += v14
|
||
|
v4 ^= v9
|
||
|
v4 = v4<<(64-24) | v4>>24
|
||
|
v2 += m[6]
|
||
|
v2 += v7
|
||
|
v13 ^= v2
|
||
|
v13 = v13<<(64-16) | v13>>16
|
||
|
v8 += v13
|
||
|
v7 ^= v8
|
||
|
v7 = v7<<(64-63) | v7>>63
|
||
|
v3 += m[10]
|
||
|
v3 += v4
|
||
|
v14 ^= v3
|
||
|
v14 = v14<<(64-16) | v14>>16
|
||
|
v9 += v14
|
||
|
v4 ^= v9
|
||
|
v4 = v4<<(64-63) | v4>>63
|
||
|
v1 += m[4]
|
||
|
v1 += v6
|
||
|
v12 ^= v1
|
||
|
v12 = v12<<(64-16) | v12>>16
|
||
|
v11 += v12
|
||
|
v6 ^= v11
|
||
|
v6 = v6<<(64-63) | v6>>63
|
||
|
v0 += m[0]
|
||
|
v0 += v5
|
||
|
v15 ^= v0
|
||
|
v15 = v15<<(64-16) | v15>>16
|
||
|
v10 += v15
|
||
|
v5 ^= v10
|
||
|
v5 = v5<<(64-63) | v5>>63
|
||
|
|
||
|
// Round 9.
|
||
|
v0 += m[6]
|
||
|
v0 += v4
|
||
|
v12 ^= v0
|
||
|
v12 = v12<<(64-32) | v12>>32
|
||
|
v8 += v12
|
||
|
v4 ^= v8
|
||
|
v4 = v4<<(64-24) | v4>>24
|
||
|
v1 += m[14]
|
||
|
v1 += v5
|
||
|
v13 ^= v1
|
||
|
v13 = v13<<(64-32) | v13>>32
|
||
|
v9 += v13
|
||
|
v5 ^= v9
|
||
|
v5 = v5<<(64-24) | v5>>24
|
||
|
v2 += m[11]
|
||
|
v2 += v6
|
||
|
v14 ^= v2
|
||
|
v14 = v14<<(64-32) | v14>>32
|
||
|
v10 += v14
|
||
|
v6 ^= v10
|
||
|
v6 = v6<<(64-24) | v6>>24
|
||
|
v3 += m[0]
|
||
|
v3 += v7
|
||
|
v15 ^= v3
|
||
|
v15 = v15<<(64-32) | v15>>32
|
||
|
v11 += v15
|
||
|
v7 ^= v11
|
||
|
v7 = v7<<(64-24) | v7>>24
|
||
|
v2 += m[3]
|
||
|
v2 += v6
|
||
|
v14 ^= v2
|
||
|
v14 = v14<<(64-16) | v14>>16
|
||
|
v10 += v14
|
||
|
v6 ^= v10
|
||
|
v6 = v6<<(64-63) | v6>>63
|
||
|
v3 += m[8]
|
||
|
v3 += v7
|
||
|
v15 ^= v3
|
||
|
v15 = v15<<(64-16) | v15>>16
|
||
|
v11 += v15
|
||
|
v7 ^= v11
|
||
|
v7 = v7<<(64-63) | v7>>63
|
||
|
v1 += m[9]
|
||
|
v1 += v5
|
||
|
v13 ^= v1
|
||
|
v13 = v13<<(64-16) | v13>>16
|
||
|
v9 += v13
|
||
|
v5 ^= v9
|
||
|
v5 = v5<<(64-63) | v5>>63
|
||
|
v0 += m[15]
|
||
|
v0 += v4
|
||
|
v12 ^= v0
|
||
|
v12 = v12<<(64-16) | v12>>16
|
||
|
v8 += v12
|
||
|
v4 ^= v8
|
||
|
v4 = v4<<(64-63) | v4>>63
|
||
|
v0 += m[12]
|
||
|
v0 += v5
|
||
|
v15 ^= v0
|
||
|
v15 = v15<<(64-32) | v15>>32
|
||
|
v10 += v15
|
||
|
v5 ^= v10
|
||
|
v5 = v5<<(64-24) | v5>>24
|
||
|
v1 += m[13]
|
||
|
v1 += v6
|
||
|
v12 ^= v1
|
||
|
v12 = v12<<(64-32) | v12>>32
|
||
|
v11 += v12
|
||
|
v6 ^= v11
|
||
|
v6 = v6<<(64-24) | v6>>24
|
||
|
v2 += m[1]
|
||
|
v2 += v7
|
||
|
v13 ^= v2
|
||
|
v13 = v13<<(64-32) | v13>>32
|
||
|
v8 += v13
|
||
|
v7 ^= v8
|
||
|
v7 = v7<<(64-24) | v7>>24
|
||
|
v3 += m[10]
|
||
|
v3 += v4
|
||
|
v14 ^= v3
|
||
|
v14 = v14<<(64-32) | v14>>32
|
||
|
v9 += v14
|
||
|
v4 ^= v9
|
||
|
v4 = v4<<(64-24) | v4>>24
|
||
|
v2 += m[4]
|
||
|
v2 += v7
|
||
|
v13 ^= v2
|
||
|
v13 = v13<<(64-16) | v13>>16
|
||
|
v8 += v13
|
||
|
v7 ^= v8
|
||
|
v7 = v7<<(64-63) | v7>>63
|
||
|
v3 += m[5]
|
||
|
v3 += v4
|
||
|
v14 ^= v3
|
||
|
v14 = v14<<(64-16) | v14>>16
|
||
|
v9 += v14
|
||
|
v4 ^= v9
|
||
|
v4 = v4<<(64-63) | v4>>63
|
||
|
v1 += m[7]
|
||
|
v1 += v6
|
||
|
v12 ^= v1
|
||
|
v12 = v12<<(64-16) | v12>>16
|
||
|
v11 += v12
|
||
|
v6 ^= v11
|
||
|
v6 = v6<<(64-63) | v6>>63
|
||
|
v0 += m[2]
|
||
|
v0 += v5
|
||
|
v15 ^= v0
|
||
|
v15 = v15<<(64-16) | v15>>16
|
||
|
v10 += v15
|
||
|
v5 ^= v10
|
||
|
v5 = v5<<(64-63) | v5>>63
|
||
|
|
||
|
// Round 10.
|
||
|
v0 += m[10]
|
||
|
v0 += v4
|
||
|
v12 ^= v0
|
||
|
v12 = v12<<(64-32) | v12>>32
|
||
|
v8 += v12
|
||
|
v4 ^= v8
|
||
|
v4 = v4<<(64-24) | v4>>24
|
||
|
v1 += m[8]
|
||
|
v1 += v5
|
||
|
v13 ^= v1
|
||
|
v13 = v13<<(64-32) | v13>>32
|
||
|
v9 += v13
|
||
|
v5 ^= v9
|
||
|
v5 = v5<<(64-24) | v5>>24
|
||
|
v2 += m[7]
|
||
|
v2 += v6
|
||
|
v14 ^= v2
|
||
|
v14 = v14<<(64-32) | v14>>32
|
||
|
v10 += v14
|
||
|
v6 ^= v10
|
||
|
v6 = v6<<(64-24) | v6>>24
|
||
|
v3 += m[1]
|
||
|
v3 += v7
|
||
|
v15 ^= v3
|
||
|
v15 = v15<<(64-32) | v15>>32
|
||
|
v11 += v15
|
||
|
v7 ^= v11
|
||
|
v7 = v7<<(64-24) | v7>>24
|
||
|
v2 += m[6]
|
||
|
v2 += v6
|
||
|
v14 ^= v2
|
||
|
v14 = v14<<(64-16) | v14>>16
|
||
|
v10 += v14
|
||
|
v6 ^= v10
|
||
|
v6 = v6<<(64-63) | v6>>63
|
||
|
v3 += m[5]
|
||
|
v3 += v7
|
||
|
v15 ^= v3
|
||
|
v15 = v15<<(64-16) | v15>>16
|
||
|
v11 += v15
|
||
|
v7 ^= v11
|
||
|
v7 = v7<<(64-63) | v7>>63
|
||
|
v1 += m[4]
|
||
|
v1 += v5
|
||
|
v13 ^= v1
|
||
|
v13 = v13<<(64-16) | v13>>16
|
||
|
v9 += v13
|
||
|
v5 ^= v9
|
||
|
v5 = v5<<(64-63) | v5>>63
|
||
|
v0 += m[2]
|
||
|
v0 += v4
|
||
|
v12 ^= v0
|
||
|
v12 = v12<<(64-16) | v12>>16
|
||
|
v8 += v12
|
||
|
v4 ^= v8
|
||
|
v4 = v4<<(64-63) | v4>>63
|
||
|
v0 += m[15]
|
||
|
v0 += v5
|
||
|
v15 ^= v0
|
||
|
v15 = v15<<(64-32) | v15>>32
|
||
|
v10 += v15
|
||
|
v5 ^= v10
|
||
|
v5 = v5<<(64-24) | v5>>24
|
||
|
v1 += m[9]
|
||
|
v1 += v6
|
||
|
v12 ^= v1
|
||
|
v12 = v12<<(64-32) | v12>>32
|
||
|
v11 += v12
|
||
|
v6 ^= v11
|
||
|
v6 = v6<<(64-24) | v6>>24
|
||
|
v2 += m[3]
|
||
|
v2 += v7
|
||
|
v13 ^= v2
|
||
|
v13 = v13<<(64-32) | v13>>32
|
||
|
v8 += v13
|
||
|
v7 ^= v8
|
||
|
v7 = v7<<(64-24) | v7>>24
|
||
|
v3 += m[13]
|
||
|
v3 += v4
|
||
|
v14 ^= v3
|
||
|
v14 = v14<<(64-32) | v14>>32
|
||
|
v9 += v14
|
||
|
v4 ^= v9
|
||
|
v4 = v4<<(64-24) | v4>>24
|
||
|
v2 += m[12]
|
||
|
v2 += v7
|
||
|
v13 ^= v2
|
||
|
v13 = v13<<(64-16) | v13>>16
|
||
|
v8 += v13
|
||
|
v7 ^= v8
|
||
|
v7 = v7<<(64-63) | v7>>63
|
||
|
v3 += m[0]
|
||
|
v3 += v4
|
||
|
v14 ^= v3
|
||
|
v14 = v14<<(64-16) | v14>>16
|
||
|
v9 += v14
|
||
|
v4 ^= v9
|
||
|
v4 = v4<<(64-63) | v4>>63
|
||
|
v1 += m[14]
|
||
|
v1 += v6
|
||
|
v12 ^= v1
|
||
|
v12 = v12<<(64-16) | v12>>16
|
||
|
v11 += v12
|
||
|
v6 ^= v11
|
||
|
v6 = v6<<(64-63) | v6>>63
|
||
|
v0 += m[11]
|
||
|
v0 += v5
|
||
|
v15 ^= v0
|
||
|
v15 = v15<<(64-16) | v15>>16
|
||
|
v10 += v15
|
||
|
v5 ^= v10
|
||
|
v5 = v5<<(64-63) | v5>>63
|
||
|
|
||
|
// Round 11.
|
||
|
v0 += m[0]
|
||
|
v0 += v4
|
||
|
v12 ^= v0
|
||
|
v12 = v12<<(64-32) | v12>>32
|
||
|
v8 += v12
|
||
|
v4 ^= v8
|
||
|
v4 = v4<<(64-24) | v4>>24
|
||
|
v1 += m[2]
|
||
|
v1 += v5
|
||
|
v13 ^= v1
|
||
|
v13 = v13<<(64-32) | v13>>32
|
||
|
v9 += v13
|
||
|
v5 ^= v9
|
||
|
v5 = v5<<(64-24) | v5>>24
|
||
|
v2 += m[4]
|
||
|
v2 += v6
|
||
|
v14 ^= v2
|
||
|
v14 = v14<<(64-32) | v14>>32
|
||
|
v10 += v14
|
||
|
v6 ^= v10
|
||
|
v6 = v6<<(64-24) | v6>>24
|
||
|
v3 += m[6]
|
||
|
v3 += v7
|
||
|
v15 ^= v3
|
||
|
v15 = v15<<(64-32) | v15>>32
|
||
|
v11 += v15
|
||
|
v7 ^= v11
|
||
|
v7 = v7<<(64-24) | v7>>24
|
||
|
v2 += m[5]
|
||
|
v2 += v6
|
||
|
v14 ^= v2
|
||
|
v14 = v14<<(64-16) | v14>>16
|
||
|
v10 += v14
|
||
|
v6 ^= v10
|
||
|
v6 = v6<<(64-63) | v6>>63
|
||
|
v3 += m[7]
|
||
|
v3 += v7
|
||
|
v15 ^= v3
|
||
|
v15 = v15<<(64-16) | v15>>16
|
||
|
v11 += v15
|
||
|
v7 ^= v11
|
||
|
v7 = v7<<(64-63) | v7>>63
|
||
|
v1 += m[3]
|
||
|
v1 += v5
|
||
|
v13 ^= v1
|
||
|
v13 = v13<<(64-16) | v13>>16
|
||
|
v9 += v13
|
||
|
v5 ^= v9
|
||
|
v5 = v5<<(64-63) | v5>>63
|
||
|
v0 += m[1]
|
||
|
v0 += v4
|
||
|
v12 ^= v0
|
||
|
v12 = v12<<(64-16) | v12>>16
|
||
|
v8 += v12
|
||
|
v4 ^= v8
|
||
|
v4 = v4<<(64-63) | v4>>63
|
||
|
v0 += m[8]
|
||
|
v0 += v5
|
||
|
v15 ^= v0
|
||
|
v15 = v15<<(64-32) | v15>>32
|
||
|
v10 += v15
|
||
|
v5 ^= v10
|
||
|
v5 = v5<<(64-24) | v5>>24
|
||
|
v1 += m[10]
|
||
|
v1 += v6
|
||
|
v12 ^= v1
|
||
|
v12 = v12<<(64-32) | v12>>32
|
||
|
v11 += v12
|
||
|
v6 ^= v11
|
||
|
v6 = v6<<(64-24) | v6>>24
|
||
|
v2 += m[12]
|
||
|
v2 += v7
|
||
|
v13 ^= v2
|
||
|
v13 = v13<<(64-32) | v13>>32
|
||
|
v8 += v13
|
||
|
v7 ^= v8
|
||
|
v7 = v7<<(64-24) | v7>>24
|
||
|
v3 += m[14]
|
||
|
v3 += v4
|
||
|
v14 ^= v3
|
||
|
v14 = v14<<(64-32) | v14>>32
|
||
|
v9 += v14
|
||
|
v4 ^= v9
|
||
|
v4 = v4<<(64-24) | v4>>24
|
||
|
v2 += m[13]
|
||
|
v2 += v7
|
||
|
v13 ^= v2
|
||
|
v13 = v13<<(64-16) | v13>>16
|
||
|
v8 += v13
|
||
|
v7 ^= v8
|
||
|
v7 = v7<<(64-63) | v7>>63
|
||
|
v3 += m[15]
|
||
|
v3 += v4
|
||
|
v14 ^= v3
|
||
|
v14 = v14<<(64-16) | v14>>16
|
||
|
v9 += v14
|
||
|
v4 ^= v9
|
||
|
v4 = v4<<(64-63) | v4>>63
|
||
|
v1 += m[11]
|
||
|
v1 += v6
|
||
|
v12 ^= v1
|
||
|
v12 = v12<<(64-16) | v12>>16
|
||
|
v11 += v12
|
||
|
v6 ^= v11
|
||
|
v6 = v6<<(64-63) | v6>>63
|
||
|
v0 += m[9]
|
||
|
v0 += v5
|
||
|
v15 ^= v0
|
||
|
v15 = v15<<(64-16) | v15>>16
|
||
|
v10 += v15
|
||
|
v5 ^= v10
|
||
|
v5 = v5<<(64-63) | v5>>63
|
||
|
|
||
|
// Round 12.
|
||
|
v0 += m[14]
|
||
|
v0 += v4
|
||
|
v12 ^= v0
|
||
|
v12 = v12<<(64-32) | v12>>32
|
||
|
v8 += v12
|
||
|
v4 ^= v8
|
||
|
v4 = v4<<(64-24) | v4>>24
|
||
|
v1 += m[4]
|
||
|
v1 += v5
|
||
|
v13 ^= v1
|
||
|
v13 = v13<<(64-32) | v13>>32
|
||
|
v9 += v13
|
||
|
v5 ^= v9
|
||
|
v5 = v5<<(64-24) | v5>>24
|
||
|
v2 += m[9]
|
||
|
v2 += v6
|
||
|
v14 ^= v2
|
||
|
v14 = v14<<(64-32) | v14>>32
|
||
|
v10 += v14
|
||
|
v6 ^= v10
|
||
|
v6 = v6<<(64-24) | v6>>24
|
||
|
v3 += m[13]
|
||
|
v3 += v7
|
||
|
v15 ^= v3
|
||
|
v15 = v15<<(64-32) | v15>>32
|
||
|
v11 += v15
|
||
|
v7 ^= v11
|
||
|
v7 = v7<<(64-24) | v7>>24
|
||
|
v2 += m[15]
|
||
|
v2 += v6
|
||
|
v14 ^= v2
|
||
|
v14 = v14<<(64-16) | v14>>16
|
||
|
v10 += v14
|
||
|
v6 ^= v10
|
||
|
v6 = v6<<(64-63) | v6>>63
|
||
|
v3 += m[6]
|
||
|
v3 += v7
|
||
|
v15 ^= v3
|
||
|
v15 = v15<<(64-16) | v15>>16
|
||
|
v11 += v15
|
||
|
v7 ^= v11
|
||
|
v7 = v7<<(64-63) | v7>>63
|
||
|
v1 += m[8]
|
||
|
v1 += v5
|
||
|
v13 ^= v1
|
||
|
v13 = v13<<(64-16) | v13>>16
|
||
|
v9 += v13
|
||
|
v5 ^= v9
|
||
|
v5 = v5<<(64-63) | v5>>63
|
||
|
v0 += m[10]
|
||
|
v0 += v4
|
||
|
v12 ^= v0
|
||
|
v12 = v12<<(64-16) | v12>>16
|
||
|
v8 += v12
|
||
|
v4 ^= v8
|
||
|
v4 = v4<<(64-63) | v4>>63
|
||
|
v0 += m[1]
|
||
|
v0 += v5
|
||
|
v15 ^= v0
|
||
|
v15 = v15<<(64-32) | v15>>32
|
||
|
v10 += v15
|
||
|
v5 ^= v10
|
||
|
v5 = v5<<(64-24) | v5>>24
|
||
|
v1 += m[0]
|
||
|
v1 += v6
|
||
|
v12 ^= v1
|
||
|
v12 = v12<<(64-32) | v12>>32
|
||
|
v11 += v12
|
||
|
v6 ^= v11
|
||
|
v6 = v6<<(64-24) | v6>>24
|
||
|
v2 += m[11]
|
||
|
v2 += v7
|
||
|
v13 ^= v2
|
||
|
v13 = v13<<(64-32) | v13>>32
|
||
|
v8 += v13
|
||
|
v7 ^= v8
|
||
|
v7 = v7<<(64-24) | v7>>24
|
||
|
v3 += m[5]
|
||
|
v3 += v4
|
||
|
v14 ^= v3
|
||
|
v14 = v14<<(64-32) | v14>>32
|
||
|
v9 += v14
|
||
|
v4 ^= v9
|
||
|
v4 = v4<<(64-24) | v4>>24
|
||
|
v2 += m[7]
|
||
|
v2 += v7
|
||
|
v13 ^= v2
|
||
|
v13 = v13<<(64-16) | v13>>16
|
||
|
v8 += v13
|
||
|
v7 ^= v8
|
||
|
v7 = v7<<(64-63) | v7>>63
|
||
|
v3 += m[3]
|
||
|
v3 += v4
|
||
|
v14 ^= v3
|
||
|
v14 = v14<<(64-16) | v14>>16
|
||
|
v9 += v14
|
||
|
v4 ^= v9
|
||
|
v4 = v4<<(64-63) | v4>>63
|
||
|
v1 += m[2]
|
||
|
v1 += v6
|
||
|
v12 ^= v1
|
||
|
v12 = v12<<(64-16) | v12>>16
|
||
|
v11 += v12
|
||
|
v6 ^= v11
|
||
|
v6 = v6<<(64-63) | v6>>63
|
||
|
v0 += m[12]
|
||
|
v0 += v5
|
||
|
v15 ^= v0
|
||
|
v15 = v15<<(64-16) | v15>>16
|
||
|
v10 += v15
|
||
|
v5 ^= v10
|
||
|
v5 = v5<<(64-63) | v5>>63
|
||
|
|
||
|
h0 ^= v0 ^ v8
|
||
|
h1 ^= v1 ^ v9
|
||
|
h2 ^= v2 ^ v10
|
||
|
h3 ^= v3 ^ v11
|
||
|
h4 ^= v4 ^ v12
|
||
|
h5 ^= v5 ^ v13
|
||
|
h6 ^= v6 ^ v14
|
||
|
h7 ^= v7 ^ v15
|
||
|
|
||
|
p = p[BlockSize:]
|
||
|
}
|
||
|
d.h[0], d.h[1], d.h[2], d.h[3], d.h[4], d.h[5], d.h[6], d.h[7] = h0, h1, h2, h3, h4, h5, h6, h7
|
||
|
}
|