1
// Copyright 2010 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.
5
// RIPEMD-160 block step.
6
// In its own file so that a faster assembly or C version
7
// can be substituted easily.
11
// work buffer indices and roll amounts for one line
13
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
14
7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
15
3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
16
1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
17
4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13,
21
11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
22
7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
23
11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
24
11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
25
9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6,
28
// same for the other parallel one
30
5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
31
6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
32
15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
33
8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
34
12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11,
38
8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
39
9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
40
9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
41
15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
42
8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11,
45
func _Block(md *digest, p []byte) int {
48
var alpha, beta uint32
49
for len(p) >= BlockSize {
50
a, b, c, d, e := md.s[0], md.s[1], md.s[2], md.s[3], md.s[4]
51
aa, bb, cc, dd, ee := a, b, c, d, e
53
for i := 0; i < 16; i++ {
54
x[i] = uint32(p[j]) | uint32(p[j+1])<<8 | uint32(p[j+2])<<16 | uint32(p[j+3])<<24
61
alpha = a + (b ^ c ^ d) + x[_n[i]]
63
alpha = (alpha<<s | alpha>>(32-s)) + e
65
a, b, c, d, e = e, alpha, b, beta, d
68
alpha = aa + (bb ^ (cc | ^dd)) + x[n_[i]] + 0x50a28be6
70
alpha = (alpha<<s | alpha>>(32-s)) + ee
71
beta = cc<<10 | cc>>22
72
aa, bb, cc, dd, ee = ee, alpha, bb, beta, dd
79
alpha = a + (b&c | ^b&d) + x[_n[i]] + 0x5a827999
81
alpha = (alpha<<s | alpha>>(32-s)) + e
83
a, b, c, d, e = e, alpha, b, beta, d
86
alpha = aa + (bb&dd | cc&^dd) + x[n_[i]] + 0x5c4dd124
88
alpha = (alpha<<s | alpha>>(32-s)) + ee
89
beta = cc<<10 | cc>>22
90
aa, bb, cc, dd, ee = ee, alpha, bb, beta, dd
97
alpha = a + (b | ^c ^ d) + x[_n[i]] + 0x6ed9eba1
99
alpha = (alpha<<s | alpha>>(32-s)) + e
101
a, b, c, d, e = e, alpha, b, beta, d
104
alpha = aa + (bb | ^cc ^ dd) + x[n_[i]] + 0x6d703ef3
106
alpha = (alpha<<s | alpha>>(32-s)) + ee
107
beta = cc<<10 | cc>>22
108
aa, bb, cc, dd, ee = ee, alpha, bb, beta, dd
115
alpha = a + (b&d | c&^d) + x[_n[i]] + 0x8f1bbcdc
117
alpha = (alpha<<s | alpha>>(32-s)) + e
119
a, b, c, d, e = e, alpha, b, beta, d
122
alpha = aa + (bb&cc | ^bb&dd) + x[n_[i]] + 0x7a6d76e9
124
alpha = (alpha<<s | alpha>>(32-s)) + ee
125
beta = cc<<10 | cc>>22
126
aa, bb, cc, dd, ee = ee, alpha, bb, beta, dd
133
alpha = a + (b ^ (c | ^d)) + x[_n[i]] + 0xa953fd4e
135
alpha = (alpha<<s | alpha>>(32-s)) + e
137
a, b, c, d, e = e, alpha, b, beta, d
140
alpha = aa + (bb ^ cc ^ dd) + x[n_[i]]
142
alpha = (alpha<<s | alpha>>(32-s)) + ee
143
beta = cc<<10 | cc>>22
144
aa, bb, cc, dd, ee = ee, alpha, bb, beta, dd
151
md.s[1] = md.s[2] + d + ee
152
md.s[2] = md.s[3] + e + aa
153
md.s[3] = md.s[4] + a + bb
154
md.s[4] = md.s[0] + b + cc