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