Coverage Report

Created: 2024-11-21 07:03

/src/cryptopp/ripemd.cpp
Line
Count
Source
1
// ripemd.cpp
2
// RIPEMD-160 written and placed in the public domain by Wei Dai
3
// RIPEMD-320, RIPEMD-128, RIPEMD-256 written by Kevin Springle
4
// and also placed in the public domain
5
6
#include "pch.h"
7
#include "ripemd.h"
8
#include "misc.h"
9
10
NAMESPACE_BEGIN(CryptoPP)
11
12
80.9M
#define F(x, y, z)    (x ^ y ^ z)
13
80.9M
#define G(x, y, z)    (z ^ (x & (y^z)))
14
80.9M
#define H(x, y, z)    (z ^ (x | ~y))
15
80.9M
#define I(x, y, z)    (y ^ (z & (x^y)))
16
42.9M
#define J(x, y, z)    (x ^ (y | ~z))
17
18
#define k0 0
19
#define k1 0x5a827999UL
20
#define k2 0x6ed9eba1UL
21
#define k3 0x8f1bbcdcUL
22
#define k4 0xa953fd4eUL
23
#define k5 0x50a28be6UL
24
#define k6 0x5c4dd124UL
25
#define k7 0x6d703ef3UL
26
#define k8 0x7a6d76e9UL
27
#define k9 0
28
29
// *************************************************************
30
31
// for 160 and 320
32
#define Subround(f, a, b, c, d, e, x, s, k)        \
33
214M
  a += f(b, c, d) + x + k;\
34
214M
  a = rotlVariable((word32)a, s) + e;\
35
214M
  c = rotlConstant<10>((word32)c)
36
37
void RIPEMD160::InitState(HashWordType *state)
38
16.8k
{
39
16.8k
  state[0] = 0x67452301L;
40
16.8k
  state[1] = 0xefcdab89L;
41
16.8k
  state[2] = 0x98badcfeL;
42
16.8k
  state[3] = 0x10325476L;
43
16.8k
  state[4] = 0xc3d2e1f0L;
44
16.8k
}
45
46
void RIPEMD160::Transform (word32 *digest, const word32 *X)
47
905k
{
48
905k
  unsigned long a1, b1, c1, d1, e1, a2, b2, c2, d2, e2;
49
905k
  a1 = a2 = digest[0];
50
905k
  b1 = b2 = digest[1];
51
905k
  c1 = c2 = digest[2];
52
905k
  d1 = d2 = digest[3];
53
905k
  e1 = e2 = digest[4];
54
55
905k
  Subround(F, a1, b1, c1, d1, e1, X[ 0], 11, k0);
56
905k
  Subround(F, e1, a1, b1, c1, d1, X[ 1], 14, k0);
57
905k
  Subround(F, d1, e1, a1, b1, c1, X[ 2], 15, k0);
58
905k
  Subround(F, c1, d1, e1, a1, b1, X[ 3], 12, k0);
59
905k
  Subround(F, b1, c1, d1, e1, a1, X[ 4],  5, k0);
60
905k
  Subround(F, a1, b1, c1, d1, e1, X[ 5],  8, k0);
61
905k
  Subround(F, e1, a1, b1, c1, d1, X[ 6],  7, k0);
62
905k
  Subround(F, d1, e1, a1, b1, c1, X[ 7],  9, k0);
63
905k
  Subround(F, c1, d1, e1, a1, b1, X[ 8], 11, k0);
64
905k
  Subround(F, b1, c1, d1, e1, a1, X[ 9], 13, k0);
65
905k
  Subround(F, a1, b1, c1, d1, e1, X[10], 14, k0);
66
905k
  Subround(F, e1, a1, b1, c1, d1, X[11], 15, k0);
67
905k
  Subround(F, d1, e1, a1, b1, c1, X[12],  6, k0);
68
905k
  Subround(F, c1, d1, e1, a1, b1, X[13],  7, k0);
69
905k
  Subround(F, b1, c1, d1, e1, a1, X[14],  9, k0);
70
905k
  Subround(F, a1, b1, c1, d1, e1, X[15],  8, k0);
71
72
905k
  Subround(G, e1, a1, b1, c1, d1, X[ 7],  7, k1);
73
905k
  Subround(G, d1, e1, a1, b1, c1, X[ 4],  6, k1);
74
905k
  Subround(G, c1, d1, e1, a1, b1, X[13],  8, k1);
75
905k
  Subround(G, b1, c1, d1, e1, a1, X[ 1], 13, k1);
76
905k
  Subround(G, a1, b1, c1, d1, e1, X[10], 11, k1);
77
905k
  Subround(G, e1, a1, b1, c1, d1, X[ 6],  9, k1);
78
905k
  Subround(G, d1, e1, a1, b1, c1, X[15],  7, k1);
79
905k
  Subround(G, c1, d1, e1, a1, b1, X[ 3], 15, k1);
80
905k
  Subround(G, b1, c1, d1, e1, a1, X[12],  7, k1);
81
905k
  Subround(G, a1, b1, c1, d1, e1, X[ 0], 12, k1);
82
905k
  Subround(G, e1, a1, b1, c1, d1, X[ 9], 15, k1);
83
905k
  Subround(G, d1, e1, a1, b1, c1, X[ 5],  9, k1);
84
905k
  Subround(G, c1, d1, e1, a1, b1, X[ 2], 11, k1);
85
905k
  Subround(G, b1, c1, d1, e1, a1, X[14],  7, k1);
86
905k
  Subround(G, a1, b1, c1, d1, e1, X[11], 13, k1);
87
905k
  Subround(G, e1, a1, b1, c1, d1, X[ 8], 12, k1);
88
89
905k
  Subround(H, d1, e1, a1, b1, c1, X[ 3], 11, k2);
90
905k
  Subround(H, c1, d1, e1, a1, b1, X[10], 13, k2);
91
905k
  Subround(H, b1, c1, d1, e1, a1, X[14],  6, k2);
92
905k
  Subround(H, a1, b1, c1, d1, e1, X[ 4],  7, k2);
93
905k
  Subround(H, e1, a1, b1, c1, d1, X[ 9], 14, k2);
94
905k
  Subround(H, d1, e1, a1, b1, c1, X[15],  9, k2);
95
905k
  Subround(H, c1, d1, e1, a1, b1, X[ 8], 13, k2);
96
905k
  Subround(H, b1, c1, d1, e1, a1, X[ 1], 15, k2);
97
905k
  Subround(H, a1, b1, c1, d1, e1, X[ 2], 14, k2);
98
905k
  Subround(H, e1, a1, b1, c1, d1, X[ 7],  8, k2);
99
905k
  Subround(H, d1, e1, a1, b1, c1, X[ 0], 13, k2);
100
905k
  Subround(H, c1, d1, e1, a1, b1, X[ 6],  6, k2);
101
905k
  Subround(H, b1, c1, d1, e1, a1, X[13],  5, k2);
102
905k
  Subround(H, a1, b1, c1, d1, e1, X[11], 12, k2);
103
905k
  Subround(H, e1, a1, b1, c1, d1, X[ 5],  7, k2);
104
905k
  Subround(H, d1, e1, a1, b1, c1, X[12],  5, k2);
105
106
905k
  Subround(I, c1, d1, e1, a1, b1, X[ 1], 11, k3);
107
905k
  Subround(I, b1, c1, d1, e1, a1, X[ 9], 12, k3);
108
905k
  Subround(I, a1, b1, c1, d1, e1, X[11], 14, k3);
109
905k
  Subround(I, e1, a1, b1, c1, d1, X[10], 15, k3);
110
905k
  Subround(I, d1, e1, a1, b1, c1, X[ 0], 14, k3);
111
905k
  Subround(I, c1, d1, e1, a1, b1, X[ 8], 15, k3);
112
905k
  Subround(I, b1, c1, d1, e1, a1, X[12],  9, k3);
113
905k
  Subround(I, a1, b1, c1, d1, e1, X[ 4],  8, k3);
114
905k
  Subround(I, e1, a1, b1, c1, d1, X[13],  9, k3);
115
905k
  Subround(I, d1, e1, a1, b1, c1, X[ 3], 14, k3);
116
905k
  Subround(I, c1, d1, e1, a1, b1, X[ 7],  5, k3);
117
905k
  Subround(I, b1, c1, d1, e1, a1, X[15],  6, k3);
118
905k
  Subround(I, a1, b1, c1, d1, e1, X[14],  8, k3);
119
905k
  Subround(I, e1, a1, b1, c1, d1, X[ 5],  6, k3);
120
905k
  Subround(I, d1, e1, a1, b1, c1, X[ 6],  5, k3);
121
905k
  Subround(I, c1, d1, e1, a1, b1, X[ 2], 12, k3);
122
123
905k
  Subround(J, b1, c1, d1, e1, a1, X[ 4],  9, k4);
124
905k
  Subround(J, a1, b1, c1, d1, e1, X[ 0], 15, k4);
125
905k
  Subround(J, e1, a1, b1, c1, d1, X[ 5],  5, k4);
126
905k
  Subround(J, d1, e1, a1, b1, c1, X[ 9], 11, k4);
127
905k
  Subround(J, c1, d1, e1, a1, b1, X[ 7],  6, k4);
128
905k
  Subround(J, b1, c1, d1, e1, a1, X[12],  8, k4);
129
905k
  Subround(J, a1, b1, c1, d1, e1, X[ 2], 13, k4);
130
905k
  Subround(J, e1, a1, b1, c1, d1, X[10], 12, k4);
131
905k
  Subround(J, d1, e1, a1, b1, c1, X[14],  5, k4);
132
905k
  Subround(J, c1, d1, e1, a1, b1, X[ 1], 12, k4);
133
905k
  Subround(J, b1, c1, d1, e1, a1, X[ 3], 13, k4);
134
905k
  Subround(J, a1, b1, c1, d1, e1, X[ 8], 14, k4);
135
905k
  Subround(J, e1, a1, b1, c1, d1, X[11], 11, k4);
136
905k
  Subround(J, d1, e1, a1, b1, c1, X[ 6],  8, k4);
137
905k
  Subround(J, c1, d1, e1, a1, b1, X[15],  5, k4);
138
905k
  Subround(J, b1, c1, d1, e1, a1, X[13],  6, k4);
139
140
905k
  Subround(J, a2, b2, c2, d2, e2, X[ 5],  8, k5);
141
905k
  Subround(J, e2, a2, b2, c2, d2, X[14],  9, k5);
142
905k
  Subround(J, d2, e2, a2, b2, c2, X[ 7],  9, k5);
143
905k
  Subround(J, c2, d2, e2, a2, b2, X[ 0], 11, k5);
144
905k
  Subround(J, b2, c2, d2, e2, a2, X[ 9], 13, k5);
145
905k
  Subround(J, a2, b2, c2, d2, e2, X[ 2], 15, k5);
146
905k
  Subround(J, e2, a2, b2, c2, d2, X[11], 15, k5);
147
905k
  Subround(J, d2, e2, a2, b2, c2, X[ 4],  5, k5);
148
905k
  Subround(J, c2, d2, e2, a2, b2, X[13],  7, k5);
149
905k
  Subround(J, b2, c2, d2, e2, a2, X[ 6],  7, k5);
150
905k
  Subround(J, a2, b2, c2, d2, e2, X[15],  8, k5);
151
905k
  Subround(J, e2, a2, b2, c2, d2, X[ 8], 11, k5);
152
905k
  Subround(J, d2, e2, a2, b2, c2, X[ 1], 14, k5);
153
905k
  Subround(J, c2, d2, e2, a2, b2, X[10], 14, k5);
154
905k
  Subround(J, b2, c2, d2, e2, a2, X[ 3], 12, k5);
155
905k
  Subround(J, a2, b2, c2, d2, e2, X[12],  6, k5);
156
157
905k
  Subround(I, e2, a2, b2, c2, d2, X[ 6],  9, k6);
158
905k
  Subround(I, d2, e2, a2, b2, c2, X[11], 13, k6);
159
905k
  Subround(I, c2, d2, e2, a2, b2, X[ 3], 15, k6);
160
905k
  Subround(I, b2, c2, d2, e2, a2, X[ 7],  7, k6);
161
905k
  Subround(I, a2, b2, c2, d2, e2, X[ 0], 12, k6);
162
905k
  Subround(I, e2, a2, b2, c2, d2, X[13],  8, k6);
163
905k
  Subround(I, d2, e2, a2, b2, c2, X[ 5],  9, k6);
164
905k
  Subround(I, c2, d2, e2, a2, b2, X[10], 11, k6);
165
905k
  Subround(I, b2, c2, d2, e2, a2, X[14],  7, k6);
166
905k
  Subround(I, a2, b2, c2, d2, e2, X[15],  7, k6);
167
905k
  Subround(I, e2, a2, b2, c2, d2, X[ 8], 12, k6);
168
905k
  Subround(I, d2, e2, a2, b2, c2, X[12],  7, k6);
169
905k
  Subround(I, c2, d2, e2, a2, b2, X[ 4],  6, k6);
170
905k
  Subround(I, b2, c2, d2, e2, a2, X[ 9], 15, k6);
171
905k
  Subround(I, a2, b2, c2, d2, e2, X[ 1], 13, k6);
172
905k
  Subround(I, e2, a2, b2, c2, d2, X[ 2], 11, k6);
173
174
905k
  Subround(H, d2, e2, a2, b2, c2, X[15],  9, k7);
175
905k
  Subround(H, c2, d2, e2, a2, b2, X[ 5],  7, k7);
176
905k
  Subround(H, b2, c2, d2, e2, a2, X[ 1], 15, k7);
177
905k
  Subround(H, a2, b2, c2, d2, e2, X[ 3], 11, k7);
178
905k
  Subround(H, e2, a2, b2, c2, d2, X[ 7],  8, k7);
179
905k
  Subround(H, d2, e2, a2, b2, c2, X[14],  6, k7);
180
905k
  Subround(H, c2, d2, e2, a2, b2, X[ 6],  6, k7);
181
905k
  Subround(H, b2, c2, d2, e2, a2, X[ 9], 14, k7);
182
905k
  Subround(H, a2, b2, c2, d2, e2, X[11], 12, k7);
183
905k
  Subround(H, e2, a2, b2, c2, d2, X[ 8], 13, k7);
184
905k
  Subround(H, d2, e2, a2, b2, c2, X[12],  5, k7);
185
905k
  Subround(H, c2, d2, e2, a2, b2, X[ 2], 14, k7);
186
905k
  Subround(H, b2, c2, d2, e2, a2, X[10], 13, k7);
187
905k
  Subround(H, a2, b2, c2, d2, e2, X[ 0], 13, k7);
188
905k
  Subround(H, e2, a2, b2, c2, d2, X[ 4],  7, k7);
189
905k
  Subround(H, d2, e2, a2, b2, c2, X[13],  5, k7);
190
191
905k
  Subround(G, c2, d2, e2, a2, b2, X[ 8], 15, k8);
192
905k
  Subround(G, b2, c2, d2, e2, a2, X[ 6],  5, k8);
193
905k
  Subround(G, a2, b2, c2, d2, e2, X[ 4],  8, k8);
194
905k
  Subround(G, e2, a2, b2, c2, d2, X[ 1], 11, k8);
195
905k
  Subround(G, d2, e2, a2, b2, c2, X[ 3], 14, k8);
196
905k
  Subround(G, c2, d2, e2, a2, b2, X[11], 14, k8);
197
905k
  Subround(G, b2, c2, d2, e2, a2, X[15],  6, k8);
198
905k
  Subround(G, a2, b2, c2, d2, e2, X[ 0], 14, k8);
199
905k
  Subround(G, e2, a2, b2, c2, d2, X[ 5],  6, k8);
200
905k
  Subround(G, d2, e2, a2, b2, c2, X[12],  9, k8);
201
905k
  Subround(G, c2, d2, e2, a2, b2, X[ 2], 12, k8);
202
905k
  Subround(G, b2, c2, d2, e2, a2, X[13],  9, k8);
203
905k
  Subround(G, a2, b2, c2, d2, e2, X[ 9], 12, k8);
204
905k
  Subround(G, e2, a2, b2, c2, d2, X[ 7],  5, k8);
205
905k
  Subround(G, d2, e2, a2, b2, c2, X[10], 15, k8);
206
905k
  Subround(G, c2, d2, e2, a2, b2, X[14],  8, k8);
207
208
905k
  Subround(F, b2, c2, d2, e2, a2, X[12],  8, k9);
209
905k
  Subround(F, a2, b2, c2, d2, e2, X[15],  5, k9);
210
905k
  Subround(F, e2, a2, b2, c2, d2, X[10], 12, k9);
211
905k
  Subround(F, d2, e2, a2, b2, c2, X[ 4],  9, k9);
212
905k
  Subround(F, c2, d2, e2, a2, b2, X[ 1], 12, k9);
213
905k
  Subround(F, b2, c2, d2, e2, a2, X[ 5],  5, k9);
214
905k
  Subround(F, a2, b2, c2, d2, e2, X[ 8], 14, k9);
215
905k
  Subround(F, e2, a2, b2, c2, d2, X[ 7],  6, k9);
216
905k
  Subround(F, d2, e2, a2, b2, c2, X[ 6],  8, k9);
217
905k
  Subround(F, c2, d2, e2, a2, b2, X[ 2], 13, k9);
218
905k
  Subround(F, b2, c2, d2, e2, a2, X[13],  6, k9);
219
905k
  Subround(F, a2, b2, c2, d2, e2, X[14],  5, k9);
220
905k
  Subround(F, e2, a2, b2, c2, d2, X[ 0], 15, k9);
221
905k
  Subround(F, d2, e2, a2, b2, c2, X[ 3], 13, k9);
222
905k
  Subround(F, c2, d2, e2, a2, b2, X[ 9], 11, k9);
223
905k
  Subround(F, b2, c2, d2, e2, a2, X[11], 11, k9);
224
225
905k
  c1        = digest[1] + c1 + d2;
226
905k
  digest[1] = digest[2] + d1 + e2;
227
905k
  digest[2] = digest[3] + e1 + a2;
228
905k
  digest[3] = digest[4] + a1 + b2;
229
905k
  digest[4] = digest[0] + b1 + c2;
230
905k
  digest[0] = c1;
231
905k
}
232
233
// *************************************************************
234
235
void RIPEMD320::InitState(HashWordType *state)
236
8.98k
{
237
8.98k
  state[0] = 0x67452301L;
238
8.98k
  state[1] = 0xefcdab89L;
239
8.98k
  state[2] = 0x98badcfeL;
240
8.98k
  state[3] = 0x10325476L;
241
8.98k
  state[4] = 0xc3d2e1f0L;
242
8.98k
  state[5] = 0x76543210L;
243
8.98k
  state[6] = 0xfedcba98L;
244
8.98k
  state[7] = 0x89abcdefL;
245
8.98k
  state[8] = 0x01234567L;
246
8.98k
  state[9] = 0x3c2d1e0fL;
247
8.98k
}
248
249
void RIPEMD320::Transform (word32 *digest, const word32 *X)
250
437k
{
251
437k
  unsigned long a1, b1, c1, d1, e1, a2, b2, c2, d2, e2, t;
252
437k
  a1 = digest[0];
253
437k
  b1 = digest[1];
254
437k
  c1 = digest[2];
255
437k
  d1 = digest[3];
256
437k
  e1 = digest[4];
257
437k
  a2 = digest[5];
258
437k
  b2 = digest[6];
259
437k
  c2 = digest[7];
260
437k
  d2 = digest[8];
261
437k
  e2 = digest[9];
262
263
437k
  Subround(F, a1, b1, c1, d1, e1, X[ 0], 11, k0);
264
437k
  Subround(F, e1, a1, b1, c1, d1, X[ 1], 14, k0);
265
437k
  Subround(F, d1, e1, a1, b1, c1, X[ 2], 15, k0);
266
437k
  Subround(F, c1, d1, e1, a1, b1, X[ 3], 12, k0);
267
437k
  Subround(F, b1, c1, d1, e1, a1, X[ 4],  5, k0);
268
437k
  Subround(F, a1, b1, c1, d1, e1, X[ 5],  8, k0);
269
437k
  Subround(F, e1, a1, b1, c1, d1, X[ 6],  7, k0);
270
437k
  Subround(F, d1, e1, a1, b1, c1, X[ 7],  9, k0);
271
437k
  Subround(F, c1, d1, e1, a1, b1, X[ 8], 11, k0);
272
437k
  Subround(F, b1, c1, d1, e1, a1, X[ 9], 13, k0);
273
437k
  Subround(F, a1, b1, c1, d1, e1, X[10], 14, k0);
274
437k
  Subround(F, e1, a1, b1, c1, d1, X[11], 15, k0);
275
437k
  Subround(F, d1, e1, a1, b1, c1, X[12],  6, k0);
276
437k
  Subround(F, c1, d1, e1, a1, b1, X[13],  7, k0);
277
437k
  Subround(F, b1, c1, d1, e1, a1, X[14],  9, k0);
278
437k
  Subround(F, a1, b1, c1, d1, e1, X[15],  8, k0);
279
280
437k
  Subround(J, a2, b2, c2, d2, e2, X[ 5],  8, k5);
281
437k
  Subround(J, e2, a2, b2, c2, d2, X[14],  9, k5);
282
437k
  Subround(J, d2, e2, a2, b2, c2, X[ 7],  9, k5);
283
437k
  Subround(J, c2, d2, e2, a2, b2, X[ 0], 11, k5);
284
437k
  Subround(J, b2, c2, d2, e2, a2, X[ 9], 13, k5);
285
437k
  Subround(J, a2, b2, c2, d2, e2, X[ 2], 15, k5);
286
437k
  Subround(J, e2, a2, b2, c2, d2, X[11], 15, k5);
287
437k
  Subround(J, d2, e2, a2, b2, c2, X[ 4],  5, k5);
288
437k
  Subround(J, c2, d2, e2, a2, b2, X[13],  7, k5);
289
437k
  Subround(J, b2, c2, d2, e2, a2, X[ 6],  7, k5);
290
437k
  Subround(J, a2, b2, c2, d2, e2, X[15],  8, k5);
291
437k
  Subround(J, e2, a2, b2, c2, d2, X[ 8], 11, k5);
292
437k
  Subround(J, d2, e2, a2, b2, c2, X[ 1], 14, k5);
293
437k
  Subround(J, c2, d2, e2, a2, b2, X[10], 14, k5);
294
437k
  Subround(J, b2, c2, d2, e2, a2, X[ 3], 12, k5);
295
437k
  Subround(J, a2, b2, c2, d2, e2, X[12],  6, k5);
296
297
437k
  t = a1; a1 = a2; a2 = t;
298
299
437k
  Subround(G, e1, a1, b1, c1, d1, X[ 7],  7, k1);
300
437k
  Subround(G, d1, e1, a1, b1, c1, X[ 4],  6, k1);
301
437k
  Subround(G, c1, d1, e1, a1, b1, X[13],  8, k1);
302
437k
  Subround(G, b1, c1, d1, e1, a1, X[ 1], 13, k1);
303
437k
  Subround(G, a1, b1, c1, d1, e1, X[10], 11, k1);
304
437k
  Subround(G, e1, a1, b1, c1, d1, X[ 6],  9, k1);
305
437k
  Subround(G, d1, e1, a1, b1, c1, X[15],  7, k1);
306
437k
  Subround(G, c1, d1, e1, a1, b1, X[ 3], 15, k1);
307
437k
  Subround(G, b1, c1, d1, e1, a1, X[12],  7, k1);
308
437k
  Subround(G, a1, b1, c1, d1, e1, X[ 0], 12, k1);
309
437k
  Subround(G, e1, a1, b1, c1, d1, X[ 9], 15, k1);
310
437k
  Subround(G, d1, e1, a1, b1, c1, X[ 5],  9, k1);
311
437k
  Subround(G, c1, d1, e1, a1, b1, X[ 2], 11, k1);
312
437k
  Subround(G, b1, c1, d1, e1, a1, X[14],  7, k1);
313
437k
  Subround(G, a1, b1, c1, d1, e1, X[11], 13, k1);
314
437k
  Subround(G, e1, a1, b1, c1, d1, X[ 8], 12, k1);
315
316
437k
  Subround(I, e2, a2, b2, c2, d2, X[ 6],  9, k6);
317
437k
  Subround(I, d2, e2, a2, b2, c2, X[11], 13, k6);
318
437k
  Subround(I, c2, d2, e2, a2, b2, X[ 3], 15, k6);
319
437k
  Subround(I, b2, c2, d2, e2, a2, X[ 7],  7, k6);
320
437k
  Subround(I, a2, b2, c2, d2, e2, X[ 0], 12, k6);
321
437k
  Subround(I, e2, a2, b2, c2, d2, X[13],  8, k6);
322
437k
  Subround(I, d2, e2, a2, b2, c2, X[ 5],  9, k6);
323
437k
  Subround(I, c2, d2, e2, a2, b2, X[10], 11, k6);
324
437k
  Subround(I, b2, c2, d2, e2, a2, X[14],  7, k6);
325
437k
  Subround(I, a2, b2, c2, d2, e2, X[15],  7, k6);
326
437k
  Subround(I, e2, a2, b2, c2, d2, X[ 8], 12, k6);
327
437k
  Subround(I, d2, e2, a2, b2, c2, X[12],  7, k6);
328
437k
  Subround(I, c2, d2, e2, a2, b2, X[ 4],  6, k6);
329
437k
  Subround(I, b2, c2, d2, e2, a2, X[ 9], 15, k6);
330
437k
  Subround(I, a2, b2, c2, d2, e2, X[ 1], 13, k6);
331
437k
  Subround(I, e2, a2, b2, c2, d2, X[ 2], 11, k6);
332
333
437k
  t = b1; b1 = b2; b2 = t;
334
335
437k
  Subround(H, d1, e1, a1, b1, c1, X[ 3], 11, k2);
336
437k
  Subround(H, c1, d1, e1, a1, b1, X[10], 13, k2);
337
437k
  Subround(H, b1, c1, d1, e1, a1, X[14],  6, k2);
338
437k
  Subround(H, a1, b1, c1, d1, e1, X[ 4],  7, k2);
339
437k
  Subround(H, e1, a1, b1, c1, d1, X[ 9], 14, k2);
340
437k
  Subround(H, d1, e1, a1, b1, c1, X[15],  9, k2);
341
437k
  Subround(H, c1, d1, e1, a1, b1, X[ 8], 13, k2);
342
437k
  Subround(H, b1, c1, d1, e1, a1, X[ 1], 15, k2);
343
437k
  Subround(H, a1, b1, c1, d1, e1, X[ 2], 14, k2);
344
437k
  Subround(H, e1, a1, b1, c1, d1, X[ 7],  8, k2);
345
437k
  Subround(H, d1, e1, a1, b1, c1, X[ 0], 13, k2);
346
437k
  Subround(H, c1, d1, e1, a1, b1, X[ 6],  6, k2);
347
437k
  Subround(H, b1, c1, d1, e1, a1, X[13],  5, k2);
348
437k
  Subround(H, a1, b1, c1, d1, e1, X[11], 12, k2);
349
437k
  Subround(H, e1, a1, b1, c1, d1, X[ 5],  7, k2);
350
437k
  Subround(H, d1, e1, a1, b1, c1, X[12],  5, k2);
351
352
437k
  Subround(H, d2, e2, a2, b2, c2, X[15],  9, k7);
353
437k
  Subround(H, c2, d2, e2, a2, b2, X[ 5],  7, k7);
354
437k
  Subround(H, b2, c2, d2, e2, a2, X[ 1], 15, k7);
355
437k
  Subround(H, a2, b2, c2, d2, e2, X[ 3], 11, k7);
356
437k
  Subround(H, e2, a2, b2, c2, d2, X[ 7],  8, k7);
357
437k
  Subround(H, d2, e2, a2, b2, c2, X[14],  6, k7);
358
437k
  Subround(H, c2, d2, e2, a2, b2, X[ 6],  6, k7);
359
437k
  Subround(H, b2, c2, d2, e2, a2, X[ 9], 14, k7);
360
437k
  Subround(H, a2, b2, c2, d2, e2, X[11], 12, k7);
361
437k
  Subround(H, e2, a2, b2, c2, d2, X[ 8], 13, k7);
362
437k
  Subround(H, d2, e2, a2, b2, c2, X[12],  5, k7);
363
437k
  Subround(H, c2, d2, e2, a2, b2, X[ 2], 14, k7);
364
437k
  Subround(H, b2, c2, d2, e2, a2, X[10], 13, k7);
365
437k
  Subround(H, a2, b2, c2, d2, e2, X[ 0], 13, k7);
366
437k
  Subround(H, e2, a2, b2, c2, d2, X[ 4],  7, k7);
367
437k
  Subround(H, d2, e2, a2, b2, c2, X[13],  5, k7);
368
369
437k
  t = c1; c1 = c2; c2 = t;
370
371
437k
  Subround(I, c1, d1, e1, a1, b1, X[ 1], 11, k3);
372
437k
  Subround(I, b1, c1, d1, e1, a1, X[ 9], 12, k3);
373
437k
  Subround(I, a1, b1, c1, d1, e1, X[11], 14, k3);
374
437k
  Subround(I, e1, a1, b1, c1, d1, X[10], 15, k3);
375
437k
  Subround(I, d1, e1, a1, b1, c1, X[ 0], 14, k3);
376
437k
  Subround(I, c1, d1, e1, a1, b1, X[ 8], 15, k3);
377
437k
  Subround(I, b1, c1, d1, e1, a1, X[12],  9, k3);
378
437k
  Subround(I, a1, b1, c1, d1, e1, X[ 4],  8, k3);
379
437k
  Subround(I, e1, a1, b1, c1, d1, X[13],  9, k3);
380
437k
  Subround(I, d1, e1, a1, b1, c1, X[ 3], 14, k3);
381
437k
  Subround(I, c1, d1, e1, a1, b1, X[ 7],  5, k3);
382
437k
  Subround(I, b1, c1, d1, e1, a1, X[15],  6, k3);
383
437k
  Subround(I, a1, b1, c1, d1, e1, X[14],  8, k3);
384
437k
  Subround(I, e1, a1, b1, c1, d1, X[ 5],  6, k3);
385
437k
  Subround(I, d1, e1, a1, b1, c1, X[ 6],  5, k3);
386
437k
  Subround(I, c1, d1, e1, a1, b1, X[ 2], 12, k3);
387
388
437k
  Subround(G, c2, d2, e2, a2, b2, X[ 8], 15, k8);
389
437k
  Subround(G, b2, c2, d2, e2, a2, X[ 6],  5, k8);
390
437k
  Subround(G, a2, b2, c2, d2, e2, X[ 4],  8, k8);
391
437k
  Subround(G, e2, a2, b2, c2, d2, X[ 1], 11, k8);
392
437k
  Subround(G, d2, e2, a2, b2, c2, X[ 3], 14, k8);
393
437k
  Subround(G, c2, d2, e2, a2, b2, X[11], 14, k8);
394
437k
  Subround(G, b2, c2, d2, e2, a2, X[15],  6, k8);
395
437k
  Subround(G, a2, b2, c2, d2, e2, X[ 0], 14, k8);
396
437k
  Subround(G, e2, a2, b2, c2, d2, X[ 5],  6, k8);
397
437k
  Subround(G, d2, e2, a2, b2, c2, X[12],  9, k8);
398
437k
  Subround(G, c2, d2, e2, a2, b2, X[ 2], 12, k8);
399
437k
  Subround(G, b2, c2, d2, e2, a2, X[13],  9, k8);
400
437k
  Subround(G, a2, b2, c2, d2, e2, X[ 9], 12, k8);
401
437k
  Subround(G, e2, a2, b2, c2, d2, X[ 7],  5, k8);
402
437k
  Subround(G, d2, e2, a2, b2, c2, X[10], 15, k8);
403
437k
  Subround(G, c2, d2, e2, a2, b2, X[14],  8, k8);
404
405
437k
  t = d1; d1 = d2; d2 = t;
406
407
437k
  Subround(J, b1, c1, d1, e1, a1, X[ 4],  9, k4);
408
437k
  Subround(J, a1, b1, c1, d1, e1, X[ 0], 15, k4);
409
437k
  Subround(J, e1, a1, b1, c1, d1, X[ 5],  5, k4);
410
437k
  Subround(J, d1, e1, a1, b1, c1, X[ 9], 11, k4);
411
437k
  Subround(J, c1, d1, e1, a1, b1, X[ 7],  6, k4);
412
437k
  Subround(J, b1, c1, d1, e1, a1, X[12],  8, k4);
413
437k
  Subround(J, a1, b1, c1, d1, e1, X[ 2], 13, k4);
414
437k
  Subround(J, e1, a1, b1, c1, d1, X[10], 12, k4);
415
437k
  Subround(J, d1, e1, a1, b1, c1, X[14],  5, k4);
416
437k
  Subround(J, c1, d1, e1, a1, b1, X[ 1], 12, k4);
417
437k
  Subround(J, b1, c1, d1, e1, a1, X[ 3], 13, k4);
418
437k
  Subround(J, a1, b1, c1, d1, e1, X[ 8], 14, k4);
419
437k
  Subround(J, e1, a1, b1, c1, d1, X[11], 11, k4);
420
437k
  Subround(J, d1, e1, a1, b1, c1, X[ 6],  8, k4);
421
437k
  Subround(J, c1, d1, e1, a1, b1, X[15],  5, k4);
422
437k
  Subround(J, b1, c1, d1, e1, a1, X[13],  6, k4);
423
424
437k
  Subround(F, b2, c2, d2, e2, a2, X[12],  8, k9);
425
437k
  Subround(F, a2, b2, c2, d2, e2, X[15],  5, k9);
426
437k
  Subround(F, e2, a2, b2, c2, d2, X[10], 12, k9);
427
437k
  Subround(F, d2, e2, a2, b2, c2, X[ 4],  9, k9);
428
437k
  Subround(F, c2, d2, e2, a2, b2, X[ 1], 12, k9);
429
437k
  Subround(F, b2, c2, d2, e2, a2, X[ 5],  5, k9);
430
437k
  Subround(F, a2, b2, c2, d2, e2, X[ 8], 14, k9);
431
437k
  Subround(F, e2, a2, b2, c2, d2, X[ 7],  6, k9);
432
437k
  Subround(F, d2, e2, a2, b2, c2, X[ 6],  8, k9);
433
437k
  Subround(F, c2, d2, e2, a2, b2, X[ 2], 13, k9);
434
437k
  Subround(F, b2, c2, d2, e2, a2, X[13],  6, k9);
435
437k
  Subround(F, a2, b2, c2, d2, e2, X[14],  5, k9);
436
437k
  Subround(F, e2, a2, b2, c2, d2, X[ 0], 15, k9);
437
437k
  Subround(F, d2, e2, a2, b2, c2, X[ 3], 13, k9);
438
437k
  Subround(F, c2, d2, e2, a2, b2, X[ 9], 11, k9);
439
437k
  Subround(F, b2, c2, d2, e2, a2, X[11], 11, k9);
440
441
437k
  t = e1; e1 = e2; e2 = t;
442
443
437k
  digest[0] += a1;
444
437k
  digest[1] += b1;
445
437k
  digest[2] += c1;
446
437k
  digest[3] += d1;
447
437k
  digest[4] += e1;
448
437k
  digest[5] += a2;
449
437k
  digest[6] += b2;
450
437k
  digest[7] += c2;
451
437k
  digest[8] += d2;
452
437k
  digest[9] += e2;
453
437k
}
454
455
#undef Subround
456
457
// *************************************************************
458
459
// for 128 and 256
460
#define Subround(f, a, b, c, d, x, s, k)        \
461
152M
  a += f(b, c, d) + x + k;\
462
152M
  a = rotlVariable((word32)a, s);
463
464
void RIPEMD128::InitState(HashWordType *state)
465
18.2k
{
466
18.2k
  state[0] = 0x67452301L;
467
18.2k
  state[1] = 0xefcdab89L;
468
18.2k
  state[2] = 0x98badcfeL;
469
18.2k
  state[3] = 0x10325476L;
470
18.2k
}
471
472
void RIPEMD128::Transform (word32 *digest, const word32 *X)
473
759k
{
474
759k
  unsigned long a1, b1, c1, d1, a2, b2, c2, d2;
475
759k
  a1 = a2 = digest[0];
476
759k
  b1 = b2 = digest[1];
477
759k
  c1 = c2 = digest[2];
478
759k
  d1 = d2 = digest[3];
479
480
759k
  Subround(F, a1, b1, c1, d1, X[ 0], 11, k0);
481
759k
  Subround(F, d1, a1, b1, c1, X[ 1], 14, k0);
482
759k
  Subround(F, c1, d1, a1, b1, X[ 2], 15, k0);
483
759k
  Subround(F, b1, c1, d1, a1, X[ 3], 12, k0);
484
759k
  Subround(F, a1, b1, c1, d1, X[ 4],  5, k0);
485
759k
  Subround(F, d1, a1, b1, c1, X[ 5],  8, k0);
486
759k
  Subround(F, c1, d1, a1, b1, X[ 6],  7, k0);
487
759k
  Subround(F, b1, c1, d1, a1, X[ 7],  9, k0);
488
759k
  Subround(F, a1, b1, c1, d1, X[ 8], 11, k0);
489
759k
  Subround(F, d1, a1, b1, c1, X[ 9], 13, k0);
490
759k
  Subround(F, c1, d1, a1, b1, X[10], 14, k0);
491
759k
  Subround(F, b1, c1, d1, a1, X[11], 15, k0);
492
759k
  Subround(F, a1, b1, c1, d1, X[12],  6, k0);
493
759k
  Subround(F, d1, a1, b1, c1, X[13],  7, k0);
494
759k
  Subround(F, c1, d1, a1, b1, X[14],  9, k0);
495
759k
  Subround(F, b1, c1, d1, a1, X[15],  8, k0);
496
497
759k
  Subround(G, a1, b1, c1, d1, X[ 7],  7, k1);
498
759k
  Subround(G, d1, a1, b1, c1, X[ 4],  6, k1);
499
759k
  Subround(G, c1, d1, a1, b1, X[13],  8, k1);
500
759k
  Subround(G, b1, c1, d1, a1, X[ 1], 13, k1);
501
759k
  Subround(G, a1, b1, c1, d1, X[10], 11, k1);
502
759k
  Subround(G, d1, a1, b1, c1, X[ 6],  9, k1);
503
759k
  Subround(G, c1, d1, a1, b1, X[15],  7, k1);
504
759k
  Subround(G, b1, c1, d1, a1, X[ 3], 15, k1);
505
759k
  Subround(G, a1, b1, c1, d1, X[12],  7, k1);
506
759k
  Subround(G, d1, a1, b1, c1, X[ 0], 12, k1);
507
759k
  Subround(G, c1, d1, a1, b1, X[ 9], 15, k1);
508
759k
  Subround(G, b1, c1, d1, a1, X[ 5],  9, k1);
509
759k
  Subround(G, a1, b1, c1, d1, X[ 2], 11, k1);
510
759k
  Subround(G, d1, a1, b1, c1, X[14],  7, k1);
511
759k
  Subround(G, c1, d1, a1, b1, X[11], 13, k1);
512
759k
  Subround(G, b1, c1, d1, a1, X[ 8], 12, k1);
513
514
759k
  Subround(H, a1, b1, c1, d1, X[ 3], 11, k2);
515
759k
  Subround(H, d1, a1, b1, c1, X[10], 13, k2);
516
759k
  Subround(H, c1, d1, a1, b1, X[14],  6, k2);
517
759k
  Subround(H, b1, c1, d1, a1, X[ 4],  7, k2);
518
759k
  Subround(H, a1, b1, c1, d1, X[ 9], 14, k2);
519
759k
  Subround(H, d1, a1, b1, c1, X[15],  9, k2);
520
759k
  Subround(H, c1, d1, a1, b1, X[ 8], 13, k2);
521
759k
  Subround(H, b1, c1, d1, a1, X[ 1], 15, k2);
522
759k
  Subround(H, a1, b1, c1, d1, X[ 2], 14, k2);
523
759k
  Subround(H, d1, a1, b1, c1, X[ 7],  8, k2);
524
759k
  Subround(H, c1, d1, a1, b1, X[ 0], 13, k2);
525
759k
  Subround(H, b1, c1, d1, a1, X[ 6],  6, k2);
526
759k
  Subround(H, a1, b1, c1, d1, X[13],  5, k2);
527
759k
  Subround(H, d1, a1, b1, c1, X[11], 12, k2);
528
759k
  Subround(H, c1, d1, a1, b1, X[ 5],  7, k2);
529
759k
  Subround(H, b1, c1, d1, a1, X[12],  5, k2);
530
531
759k
  Subround(I, a1, b1, c1, d1, X[ 1], 11, k3);
532
759k
  Subround(I, d1, a1, b1, c1, X[ 9], 12, k3);
533
759k
  Subround(I, c1, d1, a1, b1, X[11], 14, k3);
534
759k
  Subround(I, b1, c1, d1, a1, X[10], 15, k3);
535
759k
  Subround(I, a1, b1, c1, d1, X[ 0], 14, k3);
536
759k
  Subround(I, d1, a1, b1, c1, X[ 8], 15, k3);
537
759k
  Subround(I, c1, d1, a1, b1, X[12],  9, k3);
538
759k
  Subround(I, b1, c1, d1, a1, X[ 4],  8, k3);
539
759k
  Subround(I, a1, b1, c1, d1, X[13],  9, k3);
540
759k
  Subround(I, d1, a1, b1, c1, X[ 3], 14, k3);
541
759k
  Subround(I, c1, d1, a1, b1, X[ 7],  5, k3);
542
759k
  Subround(I, b1, c1, d1, a1, X[15],  6, k3);
543
759k
  Subround(I, a1, b1, c1, d1, X[14],  8, k3);
544
759k
  Subround(I, d1, a1, b1, c1, X[ 5],  6, k3);
545
759k
  Subround(I, c1, d1, a1, b1, X[ 6],  5, k3);
546
759k
  Subround(I, b1, c1, d1, a1, X[ 2], 12, k3);
547
548
759k
  Subround(I, a2, b2, c2, d2, X[ 5],  8, k5);
549
759k
  Subround(I, d2, a2, b2, c2, X[14],  9, k5);
550
759k
  Subround(I, c2, d2, a2, b2, X[ 7],  9, k5);
551
759k
  Subround(I, b2, c2, d2, a2, X[ 0], 11, k5);
552
759k
  Subround(I, a2, b2, c2, d2, X[ 9], 13, k5);
553
759k
  Subround(I, d2, a2, b2, c2, X[ 2], 15, k5);
554
759k
  Subround(I, c2, d2, a2, b2, X[11], 15, k5);
555
759k
  Subround(I, b2, c2, d2, a2, X[ 4],  5, k5);
556
759k
  Subround(I, a2, b2, c2, d2, X[13],  7, k5);
557
759k
  Subround(I, d2, a2, b2, c2, X[ 6],  7, k5);
558
759k
  Subround(I, c2, d2, a2, b2, X[15],  8, k5);
559
759k
  Subround(I, b2, c2, d2, a2, X[ 8], 11, k5);
560
759k
  Subround(I, a2, b2, c2, d2, X[ 1], 14, k5);
561
759k
  Subround(I, d2, a2, b2, c2, X[10], 14, k5);
562
759k
  Subround(I, c2, d2, a2, b2, X[ 3], 12, k5);
563
759k
  Subround(I, b2, c2, d2, a2, X[12],  6, k5);
564
565
759k
  Subround(H, a2, b2, c2, d2, X[ 6],  9, k6);
566
759k
  Subround(H, d2, a2, b2, c2, X[11], 13, k6);
567
759k
  Subround(H, c2, d2, a2, b2, X[ 3], 15, k6);
568
759k
  Subround(H, b2, c2, d2, a2, X[ 7],  7, k6);
569
759k
  Subround(H, a2, b2, c2, d2, X[ 0], 12, k6);
570
759k
  Subround(H, d2, a2, b2, c2, X[13],  8, k6);
571
759k
  Subround(H, c2, d2, a2, b2, X[ 5],  9, k6);
572
759k
  Subround(H, b2, c2, d2, a2, X[10], 11, k6);
573
759k
  Subround(H, a2, b2, c2, d2, X[14],  7, k6);
574
759k
  Subround(H, d2, a2, b2, c2, X[15],  7, k6);
575
759k
  Subround(H, c2, d2, a2, b2, X[ 8], 12, k6);
576
759k
  Subround(H, b2, c2, d2, a2, X[12],  7, k6);
577
759k
  Subround(H, a2, b2, c2, d2, X[ 4],  6, k6);
578
759k
  Subround(H, d2, a2, b2, c2, X[ 9], 15, k6);
579
759k
  Subround(H, c2, d2, a2, b2, X[ 1], 13, k6);
580
759k
  Subround(H, b2, c2, d2, a2, X[ 2], 11, k6);
581
582
759k
  Subround(G, a2, b2, c2, d2, X[15],  9, k7);
583
759k
  Subround(G, d2, a2, b2, c2, X[ 5],  7, k7);
584
759k
  Subround(G, c2, d2, a2, b2, X[ 1], 15, k7);
585
759k
  Subround(G, b2, c2, d2, a2, X[ 3], 11, k7);
586
759k
  Subround(G, a2, b2, c2, d2, X[ 7],  8, k7);
587
759k
  Subround(G, d2, a2, b2, c2, X[14],  6, k7);
588
759k
  Subround(G, c2, d2, a2, b2, X[ 6],  6, k7);
589
759k
  Subround(G, b2, c2, d2, a2, X[ 9], 14, k7);
590
759k
  Subround(G, a2, b2, c2, d2, X[11], 12, k7);
591
759k
  Subround(G, d2, a2, b2, c2, X[ 8], 13, k7);
592
759k
  Subround(G, c2, d2, a2, b2, X[12],  5, k7);
593
759k
  Subround(G, b2, c2, d2, a2, X[ 2], 14, k7);
594
759k
  Subround(G, a2, b2, c2, d2, X[10], 13, k7);
595
759k
  Subround(G, d2, a2, b2, c2, X[ 0], 13, k7);
596
759k
  Subround(G, c2, d2, a2, b2, X[ 4],  7, k7);
597
759k
  Subround(G, b2, c2, d2, a2, X[13],  5, k7);
598
599
759k
  Subround(F, a2, b2, c2, d2, X[ 8], 15, k9);
600
759k
  Subround(F, d2, a2, b2, c2, X[ 6],  5, k9);
601
759k
  Subround(F, c2, d2, a2, b2, X[ 4],  8, k9);
602
759k
  Subround(F, b2, c2, d2, a2, X[ 1], 11, k9);
603
759k
  Subround(F, a2, b2, c2, d2, X[ 3], 14, k9);
604
759k
  Subround(F, d2, a2, b2, c2, X[11], 14, k9);
605
759k
  Subround(F, c2, d2, a2, b2, X[15],  6, k9);
606
759k
  Subround(F, b2, c2, d2, a2, X[ 0], 14, k9);
607
759k
  Subround(F, a2, b2, c2, d2, X[ 5],  6, k9);
608
759k
  Subround(F, d2, a2, b2, c2, X[12],  9, k9);
609
759k
  Subround(F, c2, d2, a2, b2, X[ 2], 12, k9);
610
759k
  Subround(F, b2, c2, d2, a2, X[13],  9, k9);
611
759k
  Subround(F, a2, b2, c2, d2, X[ 9], 12, k9);
612
759k
  Subround(F, d2, a2, b2, c2, X[ 7],  5, k9);
613
759k
  Subround(F, c2, d2, a2, b2, X[10], 15, k9);
614
759k
  Subround(F, b2, c2, d2, a2, X[14],  8, k9);
615
616
759k
  c1        = digest[1] + c1 + d2;
617
759k
  digest[1] = digest[2] + d1 + a2;
618
759k
  digest[2] = digest[3] + a1 + b2;
619
759k
  digest[3] = digest[0] + b1 + c2;
620
759k
  digest[0] = c1;
621
759k
}
622
623
// *************************************************************
624
625
void RIPEMD256::InitState(HashWordType *state)
626
9.87k
{
627
9.87k
  state[0] = 0x67452301L;
628
9.87k
  state[1] = 0xefcdab89L;
629
9.87k
  state[2] = 0x98badcfeL;
630
9.87k
  state[3] = 0x10325476L;
631
9.87k
  state[4] = 0x76543210L;
632
9.87k
  state[5] = 0xfedcba98L;
633
9.87k
  state[6] = 0x89abcdefL;
634
9.87k
  state[7] = 0x01234567L;
635
9.87k
}
636
637
void RIPEMD256::Transform (word32 *digest, const word32 *X)
638
428k
{
639
428k
  unsigned long a1, b1, c1, d1, a2, b2, c2, d2, t;
640
428k
  a1 = digest[0];
641
428k
  b1 = digest[1];
642
428k
  c1 = digest[2];
643
428k
  d1 = digest[3];
644
428k
  a2 = digest[4];
645
428k
  b2 = digest[5];
646
428k
  c2 = digest[6];
647
428k
  d2 = digest[7];
648
649
428k
  Subround(F, a1, b1, c1, d1, X[ 0], 11, k0);
650
428k
  Subround(F, d1, a1, b1, c1, X[ 1], 14, k0);
651
428k
  Subround(F, c1, d1, a1, b1, X[ 2], 15, k0);
652
428k
  Subround(F, b1, c1, d1, a1, X[ 3], 12, k0);
653
428k
  Subround(F, a1, b1, c1, d1, X[ 4],  5, k0);
654
428k
  Subround(F, d1, a1, b1, c1, X[ 5],  8, k0);
655
428k
  Subround(F, c1, d1, a1, b1, X[ 6],  7, k0);
656
428k
  Subround(F, b1, c1, d1, a1, X[ 7],  9, k0);
657
428k
  Subround(F, a1, b1, c1, d1, X[ 8], 11, k0);
658
428k
  Subround(F, d1, a1, b1, c1, X[ 9], 13, k0);
659
428k
  Subround(F, c1, d1, a1, b1, X[10], 14, k0);
660
428k
  Subround(F, b1, c1, d1, a1, X[11], 15, k0);
661
428k
  Subround(F, a1, b1, c1, d1, X[12],  6, k0);
662
428k
  Subround(F, d1, a1, b1, c1, X[13],  7, k0);
663
428k
  Subround(F, c1, d1, a1, b1, X[14],  9, k0);
664
428k
  Subround(F, b1, c1, d1, a1, X[15],  8, k0);
665
666
428k
  Subround(I, a2, b2, c2, d2, X[ 5],  8, k5);
667
428k
  Subround(I, d2, a2, b2, c2, X[14],  9, k5);
668
428k
  Subround(I, c2, d2, a2, b2, X[ 7],  9, k5);
669
428k
  Subround(I, b2, c2, d2, a2, X[ 0], 11, k5);
670
428k
  Subround(I, a2, b2, c2, d2, X[ 9], 13, k5);
671
428k
  Subround(I, d2, a2, b2, c2, X[ 2], 15, k5);
672
428k
  Subround(I, c2, d2, a2, b2, X[11], 15, k5);
673
428k
  Subround(I, b2, c2, d2, a2, X[ 4],  5, k5);
674
428k
  Subround(I, a2, b2, c2, d2, X[13],  7, k5);
675
428k
  Subround(I, d2, a2, b2, c2, X[ 6],  7, k5);
676
428k
  Subround(I, c2, d2, a2, b2, X[15],  8, k5);
677
428k
  Subround(I, b2, c2, d2, a2, X[ 8], 11, k5);
678
428k
  Subround(I, a2, b2, c2, d2, X[ 1], 14, k5);
679
428k
  Subround(I, d2, a2, b2, c2, X[10], 14, k5);
680
428k
  Subround(I, c2, d2, a2, b2, X[ 3], 12, k5);
681
428k
  Subround(I, b2, c2, d2, a2, X[12],  6, k5);
682
683
428k
  t = a1; a1 = a2; a2 = t;
684
685
428k
  Subround(G, a1, b1, c1, d1, X[ 7],  7, k1);
686
428k
  Subround(G, d1, a1, b1, c1, X[ 4],  6, k1);
687
428k
  Subround(G, c1, d1, a1, b1, X[13],  8, k1);
688
428k
  Subround(G, b1, c1, d1, a1, X[ 1], 13, k1);
689
428k
  Subround(G, a1, b1, c1, d1, X[10], 11, k1);
690
428k
  Subround(G, d1, a1, b1, c1, X[ 6],  9, k1);
691
428k
  Subround(G, c1, d1, a1, b1, X[15],  7, k1);
692
428k
  Subround(G, b1, c1, d1, a1, X[ 3], 15, k1);
693
428k
  Subround(G, a1, b1, c1, d1, X[12],  7, k1);
694
428k
  Subround(G, d1, a1, b1, c1, X[ 0], 12, k1);
695
428k
  Subround(G, c1, d1, a1, b1, X[ 9], 15, k1);
696
428k
  Subround(G, b1, c1, d1, a1, X[ 5],  9, k1);
697
428k
  Subround(G, a1, b1, c1, d1, X[ 2], 11, k1);
698
428k
  Subround(G, d1, a1, b1, c1, X[14],  7, k1);
699
428k
  Subround(G, c1, d1, a1, b1, X[11], 13, k1);
700
428k
  Subround(G, b1, c1, d1, a1, X[ 8], 12, k1);
701
702
428k
  Subround(H, a2, b2, c2, d2, X[ 6],  9, k6);
703
428k
  Subround(H, d2, a2, b2, c2, X[11], 13, k6);
704
428k
  Subround(H, c2, d2, a2, b2, X[ 3], 15, k6);
705
428k
  Subround(H, b2, c2, d2, a2, X[ 7],  7, k6);
706
428k
  Subround(H, a2, b2, c2, d2, X[ 0], 12, k6);
707
428k
  Subround(H, d2, a2, b2, c2, X[13],  8, k6);
708
428k
  Subround(H, c2, d2, a2, b2, X[ 5],  9, k6);
709
428k
  Subround(H, b2, c2, d2, a2, X[10], 11, k6);
710
428k
  Subround(H, a2, b2, c2, d2, X[14],  7, k6);
711
428k
  Subround(H, d2, a2, b2, c2, X[15],  7, k6);
712
428k
  Subround(H, c2, d2, a2, b2, X[ 8], 12, k6);
713
428k
  Subround(H, b2, c2, d2, a2, X[12],  7, k6);
714
428k
  Subround(H, a2, b2, c2, d2, X[ 4],  6, k6);
715
428k
  Subround(H, d2, a2, b2, c2, X[ 9], 15, k6);
716
428k
  Subround(H, c2, d2, a2, b2, X[ 1], 13, k6);
717
428k
  Subround(H, b2, c2, d2, a2, X[ 2], 11, k6);
718
719
428k
  t = b1; b1 = b2; b2 = t;
720
721
428k
  Subround(H, a1, b1, c1, d1, X[ 3], 11, k2);
722
428k
  Subround(H, d1, a1, b1, c1, X[10], 13, k2);
723
428k
  Subround(H, c1, d1, a1, b1, X[14],  6, k2);
724
428k
  Subround(H, b1, c1, d1, a1, X[ 4],  7, k2);
725
428k
  Subround(H, a1, b1, c1, d1, X[ 9], 14, k2);
726
428k
  Subround(H, d1, a1, b1, c1, X[15],  9, k2);
727
428k
  Subround(H, c1, d1, a1, b1, X[ 8], 13, k2);
728
428k
  Subround(H, b1, c1, d1, a1, X[ 1], 15, k2);
729
428k
  Subround(H, a1, b1, c1, d1, X[ 2], 14, k2);
730
428k
  Subround(H, d1, a1, b1, c1, X[ 7],  8, k2);
731
428k
  Subround(H, c1, d1, a1, b1, X[ 0], 13, k2);
732
428k
  Subround(H, b1, c1, d1, a1, X[ 6],  6, k2);
733
428k
  Subround(H, a1, b1, c1, d1, X[13],  5, k2);
734
428k
  Subround(H, d1, a1, b1, c1, X[11], 12, k2);
735
428k
  Subround(H, c1, d1, a1, b1, X[ 5],  7, k2);
736
428k
  Subround(H, b1, c1, d1, a1, X[12],  5, k2);
737
738
428k
  Subround(G, a2, b2, c2, d2, X[15],  9, k7);
739
428k
  Subround(G, d2, a2, b2, c2, X[ 5],  7, k7);
740
428k
  Subround(G, c2, d2, a2, b2, X[ 1], 15, k7);
741
428k
  Subround(G, b2, c2, d2, a2, X[ 3], 11, k7);
742
428k
  Subround(G, a2, b2, c2, d2, X[ 7],  8, k7);
743
428k
  Subround(G, d2, a2, b2, c2, X[14],  6, k7);
744
428k
  Subround(G, c2, d2, a2, b2, X[ 6],  6, k7);
745
428k
  Subround(G, b2, c2, d2, a2, X[ 9], 14, k7);
746
428k
  Subround(G, a2, b2, c2, d2, X[11], 12, k7);
747
428k
  Subround(G, d2, a2, b2, c2, X[ 8], 13, k7);
748
428k
  Subround(G, c2, d2, a2, b2, X[12],  5, k7);
749
428k
  Subround(G, b2, c2, d2, a2, X[ 2], 14, k7);
750
428k
  Subround(G, a2, b2, c2, d2, X[10], 13, k7);
751
428k
  Subround(G, d2, a2, b2, c2, X[ 0], 13, k7);
752
428k
  Subround(G, c2, d2, a2, b2, X[ 4],  7, k7);
753
428k
  Subround(G, b2, c2, d2, a2, X[13],  5, k7);
754
755
428k
  t = c1; c1 = c2; c2 = t;
756
757
428k
  Subround(I, a1, b1, c1, d1, X[ 1], 11, k3);
758
428k
  Subround(I, d1, a1, b1, c1, X[ 9], 12, k3);
759
428k
  Subround(I, c1, d1, a1, b1, X[11], 14, k3);
760
428k
  Subround(I, b1, c1, d1, a1, X[10], 15, k3);
761
428k
  Subround(I, a1, b1, c1, d1, X[ 0], 14, k3);
762
428k
  Subround(I, d1, a1, b1, c1, X[ 8], 15, k3);
763
428k
  Subround(I, c1, d1, a1, b1, X[12],  9, k3);
764
428k
  Subround(I, b1, c1, d1, a1, X[ 4],  8, k3);
765
428k
  Subround(I, a1, b1, c1, d1, X[13],  9, k3);
766
428k
  Subround(I, d1, a1, b1, c1, X[ 3], 14, k3);
767
428k
  Subround(I, c1, d1, a1, b1, X[ 7],  5, k3);
768
428k
  Subround(I, b1, c1, d1, a1, X[15],  6, k3);
769
428k
  Subround(I, a1, b1, c1, d1, X[14],  8, k3);
770
428k
  Subround(I, d1, a1, b1, c1, X[ 5],  6, k3);
771
428k
  Subround(I, c1, d1, a1, b1, X[ 6],  5, k3);
772
428k
  Subround(I, b1, c1, d1, a1, X[ 2], 12, k3);
773
774
428k
  Subround(F, a2, b2, c2, d2, X[ 8], 15, k9);
775
428k
  Subround(F, d2, a2, b2, c2, X[ 6],  5, k9);
776
428k
  Subround(F, c2, d2, a2, b2, X[ 4],  8, k9);
777
428k
  Subround(F, b2, c2, d2, a2, X[ 1], 11, k9);
778
428k
  Subround(F, a2, b2, c2, d2, X[ 3], 14, k9);
779
428k
  Subround(F, d2, a2, b2, c2, X[11], 14, k9);
780
428k
  Subround(F, c2, d2, a2, b2, X[15],  6, k9);
781
428k
  Subround(F, b2, c2, d2, a2, X[ 0], 14, k9);
782
428k
  Subround(F, a2, b2, c2, d2, X[ 5],  6, k9);
783
428k
  Subround(F, d2, a2, b2, c2, X[12],  9, k9);
784
428k
  Subround(F, c2, d2, a2, b2, X[ 2], 12, k9);
785
428k
  Subround(F, b2, c2, d2, a2, X[13],  9, k9);
786
428k
  Subround(F, a2, b2, c2, d2, X[ 9], 12, k9);
787
428k
  Subround(F, d2, a2, b2, c2, X[ 7],  5, k9);
788
428k
  Subround(F, c2, d2, a2, b2, X[10], 15, k9);
789
428k
  Subround(F, b2, c2, d2, a2, X[14],  8, k9);
790
791
428k
  t = d1; d1 = d2; d2 = t;
792
793
428k
  digest[0] += a1;
794
428k
  digest[1] += b1;
795
428k
  digest[2] += c1;
796
428k
  digest[3] += d1;
797
428k
  digest[4] += a2;
798
428k
  digest[5] += b2;
799
428k
  digest[6] += c2;
800
428k
  digest[7] += d2;
801
428k
}
802
803
NAMESPACE_END