1*8fb009dcSAndroid Build Coastguard Worker /* Copyright (C) 1995-1998 Eric Young ([email protected])
2*8fb009dcSAndroid Build Coastguard Worker * All rights reserved.
3*8fb009dcSAndroid Build Coastguard Worker *
4*8fb009dcSAndroid Build Coastguard Worker * This package is an SSL implementation written
5*8fb009dcSAndroid Build Coastguard Worker * by Eric Young ([email protected]).
6*8fb009dcSAndroid Build Coastguard Worker * The implementation was written so as to conform with Netscapes SSL.
7*8fb009dcSAndroid Build Coastguard Worker *
8*8fb009dcSAndroid Build Coastguard Worker * This library is free for commercial and non-commercial use as long as
9*8fb009dcSAndroid Build Coastguard Worker * the following conditions are aheared to. The following conditions
10*8fb009dcSAndroid Build Coastguard Worker * apply to all code found in this distribution, be it the RC4, RSA,
11*8fb009dcSAndroid Build Coastguard Worker * lhash, DES, etc., code; not just the SSL code. The SSL documentation
12*8fb009dcSAndroid Build Coastguard Worker * included with this distribution is covered by the same copyright terms
13*8fb009dcSAndroid Build Coastguard Worker * except that the holder is Tim Hudson ([email protected]).
14*8fb009dcSAndroid Build Coastguard Worker *
15*8fb009dcSAndroid Build Coastguard Worker * Copyright remains Eric Young's, and as such any Copyright notices in
16*8fb009dcSAndroid Build Coastguard Worker * the code are not to be removed.
17*8fb009dcSAndroid Build Coastguard Worker * If this package is used in a product, Eric Young should be given attribution
18*8fb009dcSAndroid Build Coastguard Worker * as the author of the parts of the library used.
19*8fb009dcSAndroid Build Coastguard Worker * This can be in the form of a textual message at program startup or
20*8fb009dcSAndroid Build Coastguard Worker * in documentation (online or textual) provided with the package.
21*8fb009dcSAndroid Build Coastguard Worker *
22*8fb009dcSAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without
23*8fb009dcSAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions
24*8fb009dcSAndroid Build Coastguard Worker * are met:
25*8fb009dcSAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the copyright
26*8fb009dcSAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer.
27*8fb009dcSAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright
28*8fb009dcSAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the
29*8fb009dcSAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution.
30*8fb009dcSAndroid Build Coastguard Worker * 3. All advertising materials mentioning features or use of this software
31*8fb009dcSAndroid Build Coastguard Worker * must display the following acknowledgement:
32*8fb009dcSAndroid Build Coastguard Worker * "This product includes cryptographic software written by
33*8fb009dcSAndroid Build Coastguard Worker * Eric Young ([email protected])"
34*8fb009dcSAndroid Build Coastguard Worker * The word 'cryptographic' can be left out if the rouines from the library
35*8fb009dcSAndroid Build Coastguard Worker * being used are not cryptographic related :-).
36*8fb009dcSAndroid Build Coastguard Worker * 4. If you include any Windows specific code (or a derivative thereof) from
37*8fb009dcSAndroid Build Coastguard Worker * the apps directory (application code) you must include an acknowledgement:
38*8fb009dcSAndroid Build Coastguard Worker * "This product includes software written by Tim Hudson ([email protected])"
39*8fb009dcSAndroid Build Coastguard Worker *
40*8fb009dcSAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
41*8fb009dcSAndroid Build Coastguard Worker * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42*8fb009dcSAndroid Build Coastguard Worker * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
43*8fb009dcSAndroid Build Coastguard Worker * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
44*8fb009dcSAndroid Build Coastguard Worker * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
45*8fb009dcSAndroid Build Coastguard Worker * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
46*8fb009dcSAndroid Build Coastguard Worker * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47*8fb009dcSAndroid Build Coastguard Worker * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
48*8fb009dcSAndroid Build Coastguard Worker * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
49*8fb009dcSAndroid Build Coastguard Worker * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
50*8fb009dcSAndroid Build Coastguard Worker * SUCH DAMAGE.
51*8fb009dcSAndroid Build Coastguard Worker *
52*8fb009dcSAndroid Build Coastguard Worker * The licence and distribution terms for any publically available version or
53*8fb009dcSAndroid Build Coastguard Worker * derivative of this code cannot be changed. i.e. this code cannot simply be
54*8fb009dcSAndroid Build Coastguard Worker * copied and put under another distribution licence
55*8fb009dcSAndroid Build Coastguard Worker * [including the GNU Public Licence.] */
56*8fb009dcSAndroid Build Coastguard Worker
57*8fb009dcSAndroid Build Coastguard Worker #include <openssl/ripemd.h>
58*8fb009dcSAndroid Build Coastguard Worker
59*8fb009dcSAndroid Build Coastguard Worker #include <string.h>
60*8fb009dcSAndroid Build Coastguard Worker
61*8fb009dcSAndroid Build Coastguard Worker #include "../../crypto/internal.h"
62*8fb009dcSAndroid Build Coastguard Worker #include "../../crypto/fipsmodule/digest/md32_common.h"
63*8fb009dcSAndroid Build Coastguard Worker
64*8fb009dcSAndroid Build Coastguard Worker
65*8fb009dcSAndroid Build Coastguard Worker #define RIPEMD160_A 0x67452301L
66*8fb009dcSAndroid Build Coastguard Worker #define RIPEMD160_B 0xEFCDAB89L
67*8fb009dcSAndroid Build Coastguard Worker #define RIPEMD160_C 0x98BADCFEL
68*8fb009dcSAndroid Build Coastguard Worker #define RIPEMD160_D 0x10325476L
69*8fb009dcSAndroid Build Coastguard Worker #define RIPEMD160_E 0xC3D2E1F0L
70*8fb009dcSAndroid Build Coastguard Worker
RIPEMD160_Init(RIPEMD160_CTX * ctx)71*8fb009dcSAndroid Build Coastguard Worker int RIPEMD160_Init(RIPEMD160_CTX *ctx) {
72*8fb009dcSAndroid Build Coastguard Worker OPENSSL_memset(ctx, 0, sizeof(*ctx));
73*8fb009dcSAndroid Build Coastguard Worker ctx->h[0] = RIPEMD160_A;
74*8fb009dcSAndroid Build Coastguard Worker ctx->h[1] = RIPEMD160_B;
75*8fb009dcSAndroid Build Coastguard Worker ctx->h[2] = RIPEMD160_C;
76*8fb009dcSAndroid Build Coastguard Worker ctx->h[3] = RIPEMD160_D;
77*8fb009dcSAndroid Build Coastguard Worker ctx->h[4] = RIPEMD160_E;
78*8fb009dcSAndroid Build Coastguard Worker return 1;
79*8fb009dcSAndroid Build Coastguard Worker }
80*8fb009dcSAndroid Build Coastguard Worker
81*8fb009dcSAndroid Build Coastguard Worker static void ripemd160_block_data_order(uint32_t h[5], const uint8_t *data,
82*8fb009dcSAndroid Build Coastguard Worker size_t num);
83*8fb009dcSAndroid Build Coastguard Worker
RIPEMD160_Transform(RIPEMD160_CTX * c,const uint8_t data[RIPEMD160_CBLOCK])84*8fb009dcSAndroid Build Coastguard Worker void RIPEMD160_Transform(RIPEMD160_CTX *c,
85*8fb009dcSAndroid Build Coastguard Worker const uint8_t data[RIPEMD160_CBLOCK]) {
86*8fb009dcSAndroid Build Coastguard Worker ripemd160_block_data_order(c->h, data, 1);
87*8fb009dcSAndroid Build Coastguard Worker }
88*8fb009dcSAndroid Build Coastguard Worker
RIPEMD160_Update(RIPEMD160_CTX * c,const void * data,size_t len)89*8fb009dcSAndroid Build Coastguard Worker int RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, size_t len) {
90*8fb009dcSAndroid Build Coastguard Worker crypto_md32_update(&ripemd160_block_data_order, c->h, c->data,
91*8fb009dcSAndroid Build Coastguard Worker RIPEMD160_CBLOCK, &c->num, &c->Nh, &c->Nl, data, len);
92*8fb009dcSAndroid Build Coastguard Worker return 1;
93*8fb009dcSAndroid Build Coastguard Worker }
94*8fb009dcSAndroid Build Coastguard Worker
RIPEMD160_Final(uint8_t out[RIPEMD160_DIGEST_LENGTH],RIPEMD160_CTX * c)95*8fb009dcSAndroid Build Coastguard Worker int RIPEMD160_Final(uint8_t out[RIPEMD160_DIGEST_LENGTH], RIPEMD160_CTX *c) {
96*8fb009dcSAndroid Build Coastguard Worker crypto_md32_final(&ripemd160_block_data_order, c->h, c->data,
97*8fb009dcSAndroid Build Coastguard Worker RIPEMD160_CBLOCK, &c->num, c->Nh, c->Nl,
98*8fb009dcSAndroid Build Coastguard Worker /*is_big_endian=*/0);
99*8fb009dcSAndroid Build Coastguard Worker
100*8fb009dcSAndroid Build Coastguard Worker CRYPTO_store_u32_le(out, c->h[0]);
101*8fb009dcSAndroid Build Coastguard Worker CRYPTO_store_u32_le(out + 4, c->h[1]);
102*8fb009dcSAndroid Build Coastguard Worker CRYPTO_store_u32_le(out + 8, c->h[2]);
103*8fb009dcSAndroid Build Coastguard Worker CRYPTO_store_u32_le(out + 12, c->h[3]);
104*8fb009dcSAndroid Build Coastguard Worker CRYPTO_store_u32_le(out + 16, c->h[4]);
105*8fb009dcSAndroid Build Coastguard Worker return 1;
106*8fb009dcSAndroid Build Coastguard Worker }
107*8fb009dcSAndroid Build Coastguard Worker
108*8fb009dcSAndroid Build Coastguard Worker // Transformed F2 and F4 are courtesy of Wei Dai <[email protected]>
109*8fb009dcSAndroid Build Coastguard Worker #define F1(x, y, z) ((x) ^ (y) ^ (z))
110*8fb009dcSAndroid Build Coastguard Worker #define F2(x, y, z) ((((y) ^ (z)) & (x)) ^ (z))
111*8fb009dcSAndroid Build Coastguard Worker #define F3(x, y, z) (((~(y)) | (x)) ^ (z))
112*8fb009dcSAndroid Build Coastguard Worker #define F4(x, y, z) ((((x) ^ (y)) & (z)) ^ (y))
113*8fb009dcSAndroid Build Coastguard Worker #define F5(x, y, z) (((~(z)) | (y)) ^ (x))
114*8fb009dcSAndroid Build Coastguard Worker
115*8fb009dcSAndroid Build Coastguard Worker #define RIP1(a, b, c, d, e, w, s) \
116*8fb009dcSAndroid Build Coastguard Worker { \
117*8fb009dcSAndroid Build Coastguard Worker a += F1(b, c, d) + X(w); \
118*8fb009dcSAndroid Build Coastguard Worker a = CRYPTO_rotl_u32(a, s) + e; \
119*8fb009dcSAndroid Build Coastguard Worker c = CRYPTO_rotl_u32(c, 10); \
120*8fb009dcSAndroid Build Coastguard Worker }
121*8fb009dcSAndroid Build Coastguard Worker
122*8fb009dcSAndroid Build Coastguard Worker #define RIP2(a, b, c, d, e, w, s, K) \
123*8fb009dcSAndroid Build Coastguard Worker { \
124*8fb009dcSAndroid Build Coastguard Worker a += F2(b, c, d) + X(w) + K; \
125*8fb009dcSAndroid Build Coastguard Worker a = CRYPTO_rotl_u32(a, s) + e; \
126*8fb009dcSAndroid Build Coastguard Worker c = CRYPTO_rotl_u32(c, 10); \
127*8fb009dcSAndroid Build Coastguard Worker }
128*8fb009dcSAndroid Build Coastguard Worker
129*8fb009dcSAndroid Build Coastguard Worker #define RIP3(a, b, c, d, e, w, s, K) \
130*8fb009dcSAndroid Build Coastguard Worker { \
131*8fb009dcSAndroid Build Coastguard Worker a += F3(b, c, d) + X(w) + K; \
132*8fb009dcSAndroid Build Coastguard Worker a = CRYPTO_rotl_u32(a, s) + e; \
133*8fb009dcSAndroid Build Coastguard Worker c = CRYPTO_rotl_u32(c, 10); \
134*8fb009dcSAndroid Build Coastguard Worker }
135*8fb009dcSAndroid Build Coastguard Worker
136*8fb009dcSAndroid Build Coastguard Worker #define RIP4(a, b, c, d, e, w, s, K) \
137*8fb009dcSAndroid Build Coastguard Worker { \
138*8fb009dcSAndroid Build Coastguard Worker a += F4(b, c, d) + X(w) + K; \
139*8fb009dcSAndroid Build Coastguard Worker a = CRYPTO_rotl_u32(a, s) + e; \
140*8fb009dcSAndroid Build Coastguard Worker c = CRYPTO_rotl_u32(c, 10); \
141*8fb009dcSAndroid Build Coastguard Worker }
142*8fb009dcSAndroid Build Coastguard Worker
143*8fb009dcSAndroid Build Coastguard Worker #define RIP5(a, b, c, d, e, w, s, K) \
144*8fb009dcSAndroid Build Coastguard Worker { \
145*8fb009dcSAndroid Build Coastguard Worker a += F5(b, c, d) + X(w) + K; \
146*8fb009dcSAndroid Build Coastguard Worker a = CRYPTO_rotl_u32(a, s) + e; \
147*8fb009dcSAndroid Build Coastguard Worker c = CRYPTO_rotl_u32(c, 10); \
148*8fb009dcSAndroid Build Coastguard Worker }
149*8fb009dcSAndroid Build Coastguard Worker
150*8fb009dcSAndroid Build Coastguard Worker #define KL0 0x00000000L
151*8fb009dcSAndroid Build Coastguard Worker #define KL1 0x5A827999L
152*8fb009dcSAndroid Build Coastguard Worker #define KL2 0x6ED9EBA1L
153*8fb009dcSAndroid Build Coastguard Worker #define KL3 0x8F1BBCDCL
154*8fb009dcSAndroid Build Coastguard Worker #define KL4 0xA953FD4EL
155*8fb009dcSAndroid Build Coastguard Worker
156*8fb009dcSAndroid Build Coastguard Worker #define KR0 0x50A28BE6L
157*8fb009dcSAndroid Build Coastguard Worker #define KR1 0x5C4DD124L
158*8fb009dcSAndroid Build Coastguard Worker #define KR2 0x6D703EF3L
159*8fb009dcSAndroid Build Coastguard Worker #define KR3 0x7A6D76E9L
160*8fb009dcSAndroid Build Coastguard Worker #define KR4 0x00000000L
161*8fb009dcSAndroid Build Coastguard Worker
162*8fb009dcSAndroid Build Coastguard Worker #define WL00 0
163*8fb009dcSAndroid Build Coastguard Worker #define SL00 11
164*8fb009dcSAndroid Build Coastguard Worker #define WL01 1
165*8fb009dcSAndroid Build Coastguard Worker #define SL01 14
166*8fb009dcSAndroid Build Coastguard Worker #define WL02 2
167*8fb009dcSAndroid Build Coastguard Worker #define SL02 15
168*8fb009dcSAndroid Build Coastguard Worker #define WL03 3
169*8fb009dcSAndroid Build Coastguard Worker #define SL03 12
170*8fb009dcSAndroid Build Coastguard Worker #define WL04 4
171*8fb009dcSAndroid Build Coastguard Worker #define SL04 5
172*8fb009dcSAndroid Build Coastguard Worker #define WL05 5
173*8fb009dcSAndroid Build Coastguard Worker #define SL05 8
174*8fb009dcSAndroid Build Coastguard Worker #define WL06 6
175*8fb009dcSAndroid Build Coastguard Worker #define SL06 7
176*8fb009dcSAndroid Build Coastguard Worker #define WL07 7
177*8fb009dcSAndroid Build Coastguard Worker #define SL07 9
178*8fb009dcSAndroid Build Coastguard Worker #define WL08 8
179*8fb009dcSAndroid Build Coastguard Worker #define SL08 11
180*8fb009dcSAndroid Build Coastguard Worker #define WL09 9
181*8fb009dcSAndroid Build Coastguard Worker #define SL09 13
182*8fb009dcSAndroid Build Coastguard Worker #define WL10 10
183*8fb009dcSAndroid Build Coastguard Worker #define SL10 14
184*8fb009dcSAndroid Build Coastguard Worker #define WL11 11
185*8fb009dcSAndroid Build Coastguard Worker #define SL11 15
186*8fb009dcSAndroid Build Coastguard Worker #define WL12 12
187*8fb009dcSAndroid Build Coastguard Worker #define SL12 6
188*8fb009dcSAndroid Build Coastguard Worker #define WL13 13
189*8fb009dcSAndroid Build Coastguard Worker #define SL13 7
190*8fb009dcSAndroid Build Coastguard Worker #define WL14 14
191*8fb009dcSAndroid Build Coastguard Worker #define SL14 9
192*8fb009dcSAndroid Build Coastguard Worker #define WL15 15
193*8fb009dcSAndroid Build Coastguard Worker #define SL15 8
194*8fb009dcSAndroid Build Coastguard Worker
195*8fb009dcSAndroid Build Coastguard Worker #define WL16 7
196*8fb009dcSAndroid Build Coastguard Worker #define SL16 7
197*8fb009dcSAndroid Build Coastguard Worker #define WL17 4
198*8fb009dcSAndroid Build Coastguard Worker #define SL17 6
199*8fb009dcSAndroid Build Coastguard Worker #define WL18 13
200*8fb009dcSAndroid Build Coastguard Worker #define SL18 8
201*8fb009dcSAndroid Build Coastguard Worker #define WL19 1
202*8fb009dcSAndroid Build Coastguard Worker #define SL19 13
203*8fb009dcSAndroid Build Coastguard Worker #define WL20 10
204*8fb009dcSAndroid Build Coastguard Worker #define SL20 11
205*8fb009dcSAndroid Build Coastguard Worker #define WL21 6
206*8fb009dcSAndroid Build Coastguard Worker #define SL21 9
207*8fb009dcSAndroid Build Coastguard Worker #define WL22 15
208*8fb009dcSAndroid Build Coastguard Worker #define SL22 7
209*8fb009dcSAndroid Build Coastguard Worker #define WL23 3
210*8fb009dcSAndroid Build Coastguard Worker #define SL23 15
211*8fb009dcSAndroid Build Coastguard Worker #define WL24 12
212*8fb009dcSAndroid Build Coastguard Worker #define SL24 7
213*8fb009dcSAndroid Build Coastguard Worker #define WL25 0
214*8fb009dcSAndroid Build Coastguard Worker #define SL25 12
215*8fb009dcSAndroid Build Coastguard Worker #define WL26 9
216*8fb009dcSAndroid Build Coastguard Worker #define SL26 15
217*8fb009dcSAndroid Build Coastguard Worker #define WL27 5
218*8fb009dcSAndroid Build Coastguard Worker #define SL27 9
219*8fb009dcSAndroid Build Coastguard Worker #define WL28 2
220*8fb009dcSAndroid Build Coastguard Worker #define SL28 11
221*8fb009dcSAndroid Build Coastguard Worker #define WL29 14
222*8fb009dcSAndroid Build Coastguard Worker #define SL29 7
223*8fb009dcSAndroid Build Coastguard Worker #define WL30 11
224*8fb009dcSAndroid Build Coastguard Worker #define SL30 13
225*8fb009dcSAndroid Build Coastguard Worker #define WL31 8
226*8fb009dcSAndroid Build Coastguard Worker #define SL31 12
227*8fb009dcSAndroid Build Coastguard Worker
228*8fb009dcSAndroid Build Coastguard Worker #define WL32 3
229*8fb009dcSAndroid Build Coastguard Worker #define SL32 11
230*8fb009dcSAndroid Build Coastguard Worker #define WL33 10
231*8fb009dcSAndroid Build Coastguard Worker #define SL33 13
232*8fb009dcSAndroid Build Coastguard Worker #define WL34 14
233*8fb009dcSAndroid Build Coastguard Worker #define SL34 6
234*8fb009dcSAndroid Build Coastguard Worker #define WL35 4
235*8fb009dcSAndroid Build Coastguard Worker #define SL35 7
236*8fb009dcSAndroid Build Coastguard Worker #define WL36 9
237*8fb009dcSAndroid Build Coastguard Worker #define SL36 14
238*8fb009dcSAndroid Build Coastguard Worker #define WL37 15
239*8fb009dcSAndroid Build Coastguard Worker #define SL37 9
240*8fb009dcSAndroid Build Coastguard Worker #define WL38 8
241*8fb009dcSAndroid Build Coastguard Worker #define SL38 13
242*8fb009dcSAndroid Build Coastguard Worker #define WL39 1
243*8fb009dcSAndroid Build Coastguard Worker #define SL39 15
244*8fb009dcSAndroid Build Coastguard Worker #define WL40 2
245*8fb009dcSAndroid Build Coastguard Worker #define SL40 14
246*8fb009dcSAndroid Build Coastguard Worker #define WL41 7
247*8fb009dcSAndroid Build Coastguard Worker #define SL41 8
248*8fb009dcSAndroid Build Coastguard Worker #define WL42 0
249*8fb009dcSAndroid Build Coastguard Worker #define SL42 13
250*8fb009dcSAndroid Build Coastguard Worker #define WL43 6
251*8fb009dcSAndroid Build Coastguard Worker #define SL43 6
252*8fb009dcSAndroid Build Coastguard Worker #define WL44 13
253*8fb009dcSAndroid Build Coastguard Worker #define SL44 5
254*8fb009dcSAndroid Build Coastguard Worker #define WL45 11
255*8fb009dcSAndroid Build Coastguard Worker #define SL45 12
256*8fb009dcSAndroid Build Coastguard Worker #define WL46 5
257*8fb009dcSAndroid Build Coastguard Worker #define SL46 7
258*8fb009dcSAndroid Build Coastguard Worker #define WL47 12
259*8fb009dcSAndroid Build Coastguard Worker #define SL47 5
260*8fb009dcSAndroid Build Coastguard Worker
261*8fb009dcSAndroid Build Coastguard Worker #define WL48 1
262*8fb009dcSAndroid Build Coastguard Worker #define SL48 11
263*8fb009dcSAndroid Build Coastguard Worker #define WL49 9
264*8fb009dcSAndroid Build Coastguard Worker #define SL49 12
265*8fb009dcSAndroid Build Coastguard Worker #define WL50 11
266*8fb009dcSAndroid Build Coastguard Worker #define SL50 14
267*8fb009dcSAndroid Build Coastguard Worker #define WL51 10
268*8fb009dcSAndroid Build Coastguard Worker #define SL51 15
269*8fb009dcSAndroid Build Coastguard Worker #define WL52 0
270*8fb009dcSAndroid Build Coastguard Worker #define SL52 14
271*8fb009dcSAndroid Build Coastguard Worker #define WL53 8
272*8fb009dcSAndroid Build Coastguard Worker #define SL53 15
273*8fb009dcSAndroid Build Coastguard Worker #define WL54 12
274*8fb009dcSAndroid Build Coastguard Worker #define SL54 9
275*8fb009dcSAndroid Build Coastguard Worker #define WL55 4
276*8fb009dcSAndroid Build Coastguard Worker #define SL55 8
277*8fb009dcSAndroid Build Coastguard Worker #define WL56 13
278*8fb009dcSAndroid Build Coastguard Worker #define SL56 9
279*8fb009dcSAndroid Build Coastguard Worker #define WL57 3
280*8fb009dcSAndroid Build Coastguard Worker #define SL57 14
281*8fb009dcSAndroid Build Coastguard Worker #define WL58 7
282*8fb009dcSAndroid Build Coastguard Worker #define SL58 5
283*8fb009dcSAndroid Build Coastguard Worker #define WL59 15
284*8fb009dcSAndroid Build Coastguard Worker #define SL59 6
285*8fb009dcSAndroid Build Coastguard Worker #define WL60 14
286*8fb009dcSAndroid Build Coastguard Worker #define SL60 8
287*8fb009dcSAndroid Build Coastguard Worker #define WL61 5
288*8fb009dcSAndroid Build Coastguard Worker #define SL61 6
289*8fb009dcSAndroid Build Coastguard Worker #define WL62 6
290*8fb009dcSAndroid Build Coastguard Worker #define SL62 5
291*8fb009dcSAndroid Build Coastguard Worker #define WL63 2
292*8fb009dcSAndroid Build Coastguard Worker #define SL63 12
293*8fb009dcSAndroid Build Coastguard Worker
294*8fb009dcSAndroid Build Coastguard Worker #define WL64 4
295*8fb009dcSAndroid Build Coastguard Worker #define SL64 9
296*8fb009dcSAndroid Build Coastguard Worker #define WL65 0
297*8fb009dcSAndroid Build Coastguard Worker #define SL65 15
298*8fb009dcSAndroid Build Coastguard Worker #define WL66 5
299*8fb009dcSAndroid Build Coastguard Worker #define SL66 5
300*8fb009dcSAndroid Build Coastguard Worker #define WL67 9
301*8fb009dcSAndroid Build Coastguard Worker #define SL67 11
302*8fb009dcSAndroid Build Coastguard Worker #define WL68 7
303*8fb009dcSAndroid Build Coastguard Worker #define SL68 6
304*8fb009dcSAndroid Build Coastguard Worker #define WL69 12
305*8fb009dcSAndroid Build Coastguard Worker #define SL69 8
306*8fb009dcSAndroid Build Coastguard Worker #define WL70 2
307*8fb009dcSAndroid Build Coastguard Worker #define SL70 13
308*8fb009dcSAndroid Build Coastguard Worker #define WL71 10
309*8fb009dcSAndroid Build Coastguard Worker #define SL71 12
310*8fb009dcSAndroid Build Coastguard Worker #define WL72 14
311*8fb009dcSAndroid Build Coastguard Worker #define SL72 5
312*8fb009dcSAndroid Build Coastguard Worker #define WL73 1
313*8fb009dcSAndroid Build Coastguard Worker #define SL73 12
314*8fb009dcSAndroid Build Coastguard Worker #define WL74 3
315*8fb009dcSAndroid Build Coastguard Worker #define SL74 13
316*8fb009dcSAndroid Build Coastguard Worker #define WL75 8
317*8fb009dcSAndroid Build Coastguard Worker #define SL75 14
318*8fb009dcSAndroid Build Coastguard Worker #define WL76 11
319*8fb009dcSAndroid Build Coastguard Worker #define SL76 11
320*8fb009dcSAndroid Build Coastguard Worker #define WL77 6
321*8fb009dcSAndroid Build Coastguard Worker #define SL77 8
322*8fb009dcSAndroid Build Coastguard Worker #define WL78 15
323*8fb009dcSAndroid Build Coastguard Worker #define SL78 5
324*8fb009dcSAndroid Build Coastguard Worker #define WL79 13
325*8fb009dcSAndroid Build Coastguard Worker #define SL79 6
326*8fb009dcSAndroid Build Coastguard Worker
327*8fb009dcSAndroid Build Coastguard Worker #define WR00 5
328*8fb009dcSAndroid Build Coastguard Worker #define SR00 8
329*8fb009dcSAndroid Build Coastguard Worker #define WR01 14
330*8fb009dcSAndroid Build Coastguard Worker #define SR01 9
331*8fb009dcSAndroid Build Coastguard Worker #define WR02 7
332*8fb009dcSAndroid Build Coastguard Worker #define SR02 9
333*8fb009dcSAndroid Build Coastguard Worker #define WR03 0
334*8fb009dcSAndroid Build Coastguard Worker #define SR03 11
335*8fb009dcSAndroid Build Coastguard Worker #define WR04 9
336*8fb009dcSAndroid Build Coastguard Worker #define SR04 13
337*8fb009dcSAndroid Build Coastguard Worker #define WR05 2
338*8fb009dcSAndroid Build Coastguard Worker #define SR05 15
339*8fb009dcSAndroid Build Coastguard Worker #define WR06 11
340*8fb009dcSAndroid Build Coastguard Worker #define SR06 15
341*8fb009dcSAndroid Build Coastguard Worker #define WR07 4
342*8fb009dcSAndroid Build Coastguard Worker #define SR07 5
343*8fb009dcSAndroid Build Coastguard Worker #define WR08 13
344*8fb009dcSAndroid Build Coastguard Worker #define SR08 7
345*8fb009dcSAndroid Build Coastguard Worker #define WR09 6
346*8fb009dcSAndroid Build Coastguard Worker #define SR09 7
347*8fb009dcSAndroid Build Coastguard Worker #define WR10 15
348*8fb009dcSAndroid Build Coastguard Worker #define SR10 8
349*8fb009dcSAndroid Build Coastguard Worker #define WR11 8
350*8fb009dcSAndroid Build Coastguard Worker #define SR11 11
351*8fb009dcSAndroid Build Coastguard Worker #define WR12 1
352*8fb009dcSAndroid Build Coastguard Worker #define SR12 14
353*8fb009dcSAndroid Build Coastguard Worker #define WR13 10
354*8fb009dcSAndroid Build Coastguard Worker #define SR13 14
355*8fb009dcSAndroid Build Coastguard Worker #define WR14 3
356*8fb009dcSAndroid Build Coastguard Worker #define SR14 12
357*8fb009dcSAndroid Build Coastguard Worker #define WR15 12
358*8fb009dcSAndroid Build Coastguard Worker #define SR15 6
359*8fb009dcSAndroid Build Coastguard Worker
360*8fb009dcSAndroid Build Coastguard Worker #define WR16 6
361*8fb009dcSAndroid Build Coastguard Worker #define SR16 9
362*8fb009dcSAndroid Build Coastguard Worker #define WR17 11
363*8fb009dcSAndroid Build Coastguard Worker #define SR17 13
364*8fb009dcSAndroid Build Coastguard Worker #define WR18 3
365*8fb009dcSAndroid Build Coastguard Worker #define SR18 15
366*8fb009dcSAndroid Build Coastguard Worker #define WR19 7
367*8fb009dcSAndroid Build Coastguard Worker #define SR19 7
368*8fb009dcSAndroid Build Coastguard Worker #define WR20 0
369*8fb009dcSAndroid Build Coastguard Worker #define SR20 12
370*8fb009dcSAndroid Build Coastguard Worker #define WR21 13
371*8fb009dcSAndroid Build Coastguard Worker #define SR21 8
372*8fb009dcSAndroid Build Coastguard Worker #define WR22 5
373*8fb009dcSAndroid Build Coastguard Worker #define SR22 9
374*8fb009dcSAndroid Build Coastguard Worker #define WR23 10
375*8fb009dcSAndroid Build Coastguard Worker #define SR23 11
376*8fb009dcSAndroid Build Coastguard Worker #define WR24 14
377*8fb009dcSAndroid Build Coastguard Worker #define SR24 7
378*8fb009dcSAndroid Build Coastguard Worker #define WR25 15
379*8fb009dcSAndroid Build Coastguard Worker #define SR25 7
380*8fb009dcSAndroid Build Coastguard Worker #define WR26 8
381*8fb009dcSAndroid Build Coastguard Worker #define SR26 12
382*8fb009dcSAndroid Build Coastguard Worker #define WR27 12
383*8fb009dcSAndroid Build Coastguard Worker #define SR27 7
384*8fb009dcSAndroid Build Coastguard Worker #define WR28 4
385*8fb009dcSAndroid Build Coastguard Worker #define SR28 6
386*8fb009dcSAndroid Build Coastguard Worker #define WR29 9
387*8fb009dcSAndroid Build Coastguard Worker #define SR29 15
388*8fb009dcSAndroid Build Coastguard Worker #define WR30 1
389*8fb009dcSAndroid Build Coastguard Worker #define SR30 13
390*8fb009dcSAndroid Build Coastguard Worker #define WR31 2
391*8fb009dcSAndroid Build Coastguard Worker #define SR31 11
392*8fb009dcSAndroid Build Coastguard Worker
393*8fb009dcSAndroid Build Coastguard Worker #define WR32 15
394*8fb009dcSAndroid Build Coastguard Worker #define SR32 9
395*8fb009dcSAndroid Build Coastguard Worker #define WR33 5
396*8fb009dcSAndroid Build Coastguard Worker #define SR33 7
397*8fb009dcSAndroid Build Coastguard Worker #define WR34 1
398*8fb009dcSAndroid Build Coastguard Worker #define SR34 15
399*8fb009dcSAndroid Build Coastguard Worker #define WR35 3
400*8fb009dcSAndroid Build Coastguard Worker #define SR35 11
401*8fb009dcSAndroid Build Coastguard Worker #define WR36 7
402*8fb009dcSAndroid Build Coastguard Worker #define SR36 8
403*8fb009dcSAndroid Build Coastguard Worker #define WR37 14
404*8fb009dcSAndroid Build Coastguard Worker #define SR37 6
405*8fb009dcSAndroid Build Coastguard Worker #define WR38 6
406*8fb009dcSAndroid Build Coastguard Worker #define SR38 6
407*8fb009dcSAndroid Build Coastguard Worker #define WR39 9
408*8fb009dcSAndroid Build Coastguard Worker #define SR39 14
409*8fb009dcSAndroid Build Coastguard Worker #define WR40 11
410*8fb009dcSAndroid Build Coastguard Worker #define SR40 12
411*8fb009dcSAndroid Build Coastguard Worker #define WR41 8
412*8fb009dcSAndroid Build Coastguard Worker #define SR41 13
413*8fb009dcSAndroid Build Coastguard Worker #define WR42 12
414*8fb009dcSAndroid Build Coastguard Worker #define SR42 5
415*8fb009dcSAndroid Build Coastguard Worker #define WR43 2
416*8fb009dcSAndroid Build Coastguard Worker #define SR43 14
417*8fb009dcSAndroid Build Coastguard Worker #define WR44 10
418*8fb009dcSAndroid Build Coastguard Worker #define SR44 13
419*8fb009dcSAndroid Build Coastguard Worker #define WR45 0
420*8fb009dcSAndroid Build Coastguard Worker #define SR45 13
421*8fb009dcSAndroid Build Coastguard Worker #define WR46 4
422*8fb009dcSAndroid Build Coastguard Worker #define SR46 7
423*8fb009dcSAndroid Build Coastguard Worker #define WR47 13
424*8fb009dcSAndroid Build Coastguard Worker #define SR47 5
425*8fb009dcSAndroid Build Coastguard Worker
426*8fb009dcSAndroid Build Coastguard Worker #define WR48 8
427*8fb009dcSAndroid Build Coastguard Worker #define SR48 15
428*8fb009dcSAndroid Build Coastguard Worker #define WR49 6
429*8fb009dcSAndroid Build Coastguard Worker #define SR49 5
430*8fb009dcSAndroid Build Coastguard Worker #define WR50 4
431*8fb009dcSAndroid Build Coastguard Worker #define SR50 8
432*8fb009dcSAndroid Build Coastguard Worker #define WR51 1
433*8fb009dcSAndroid Build Coastguard Worker #define SR51 11
434*8fb009dcSAndroid Build Coastguard Worker #define WR52 3
435*8fb009dcSAndroid Build Coastguard Worker #define SR52 14
436*8fb009dcSAndroid Build Coastguard Worker #define WR53 11
437*8fb009dcSAndroid Build Coastguard Worker #define SR53 14
438*8fb009dcSAndroid Build Coastguard Worker #define WR54 15
439*8fb009dcSAndroid Build Coastguard Worker #define SR54 6
440*8fb009dcSAndroid Build Coastguard Worker #define WR55 0
441*8fb009dcSAndroid Build Coastguard Worker #define SR55 14
442*8fb009dcSAndroid Build Coastguard Worker #define WR56 5
443*8fb009dcSAndroid Build Coastguard Worker #define SR56 6
444*8fb009dcSAndroid Build Coastguard Worker #define WR57 12
445*8fb009dcSAndroid Build Coastguard Worker #define SR57 9
446*8fb009dcSAndroid Build Coastguard Worker #define WR58 2
447*8fb009dcSAndroid Build Coastguard Worker #define SR58 12
448*8fb009dcSAndroid Build Coastguard Worker #define WR59 13
449*8fb009dcSAndroid Build Coastguard Worker #define SR59 9
450*8fb009dcSAndroid Build Coastguard Worker #define WR60 9
451*8fb009dcSAndroid Build Coastguard Worker #define SR60 12
452*8fb009dcSAndroid Build Coastguard Worker #define WR61 7
453*8fb009dcSAndroid Build Coastguard Worker #define SR61 5
454*8fb009dcSAndroid Build Coastguard Worker #define WR62 10
455*8fb009dcSAndroid Build Coastguard Worker #define SR62 15
456*8fb009dcSAndroid Build Coastguard Worker #define WR63 14
457*8fb009dcSAndroid Build Coastguard Worker #define SR63 8
458*8fb009dcSAndroid Build Coastguard Worker
459*8fb009dcSAndroid Build Coastguard Worker #define WR64 12
460*8fb009dcSAndroid Build Coastguard Worker #define SR64 8
461*8fb009dcSAndroid Build Coastguard Worker #define WR65 15
462*8fb009dcSAndroid Build Coastguard Worker #define SR65 5
463*8fb009dcSAndroid Build Coastguard Worker #define WR66 10
464*8fb009dcSAndroid Build Coastguard Worker #define SR66 12
465*8fb009dcSAndroid Build Coastguard Worker #define WR67 4
466*8fb009dcSAndroid Build Coastguard Worker #define SR67 9
467*8fb009dcSAndroid Build Coastguard Worker #define WR68 1
468*8fb009dcSAndroid Build Coastguard Worker #define SR68 12
469*8fb009dcSAndroid Build Coastguard Worker #define WR69 5
470*8fb009dcSAndroid Build Coastguard Worker #define SR69 5
471*8fb009dcSAndroid Build Coastguard Worker #define WR70 8
472*8fb009dcSAndroid Build Coastguard Worker #define SR70 14
473*8fb009dcSAndroid Build Coastguard Worker #define WR71 7
474*8fb009dcSAndroid Build Coastguard Worker #define SR71 6
475*8fb009dcSAndroid Build Coastguard Worker #define WR72 6
476*8fb009dcSAndroid Build Coastguard Worker #define SR72 8
477*8fb009dcSAndroid Build Coastguard Worker #define WR73 2
478*8fb009dcSAndroid Build Coastguard Worker #define SR73 13
479*8fb009dcSAndroid Build Coastguard Worker #define WR74 13
480*8fb009dcSAndroid Build Coastguard Worker #define SR74 6
481*8fb009dcSAndroid Build Coastguard Worker #define WR75 14
482*8fb009dcSAndroid Build Coastguard Worker #define SR75 5
483*8fb009dcSAndroid Build Coastguard Worker #define WR76 0
484*8fb009dcSAndroid Build Coastguard Worker #define SR76 15
485*8fb009dcSAndroid Build Coastguard Worker #define WR77 3
486*8fb009dcSAndroid Build Coastguard Worker #define SR77 13
487*8fb009dcSAndroid Build Coastguard Worker #define WR78 9
488*8fb009dcSAndroid Build Coastguard Worker #define SR78 11
489*8fb009dcSAndroid Build Coastguard Worker #define WR79 11
490*8fb009dcSAndroid Build Coastguard Worker #define SR79 11
491*8fb009dcSAndroid Build Coastguard Worker
ripemd160_block_data_order(uint32_t h[5],const uint8_t * data,size_t num)492*8fb009dcSAndroid Build Coastguard Worker static void ripemd160_block_data_order(uint32_t h[5], const uint8_t *data,
493*8fb009dcSAndroid Build Coastguard Worker size_t num) {
494*8fb009dcSAndroid Build Coastguard Worker uint32_t A, B, C, D, E;
495*8fb009dcSAndroid Build Coastguard Worker uint32_t a, b, c, d, e;
496*8fb009dcSAndroid Build Coastguard Worker uint32_t XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7, XX8, XX9, XX10, XX11, XX12,
497*8fb009dcSAndroid Build Coastguard Worker XX13, XX14, XX15;
498*8fb009dcSAndroid Build Coastguard Worker #define X(i) XX##i
499*8fb009dcSAndroid Build Coastguard Worker
500*8fb009dcSAndroid Build Coastguard Worker for (; num--;) {
501*8fb009dcSAndroid Build Coastguard Worker A = h[0];
502*8fb009dcSAndroid Build Coastguard Worker B = h[1];
503*8fb009dcSAndroid Build Coastguard Worker C = h[2];
504*8fb009dcSAndroid Build Coastguard Worker D = h[3];
505*8fb009dcSAndroid Build Coastguard Worker E = h[4];
506*8fb009dcSAndroid Build Coastguard Worker
507*8fb009dcSAndroid Build Coastguard Worker X(0) = CRYPTO_load_u32_le(data);
508*8fb009dcSAndroid Build Coastguard Worker data += 4;
509*8fb009dcSAndroid Build Coastguard Worker X(1) = CRYPTO_load_u32_le(data);
510*8fb009dcSAndroid Build Coastguard Worker data += 4;
511*8fb009dcSAndroid Build Coastguard Worker RIP1(A, B, C, D, E, WL00, SL00);
512*8fb009dcSAndroid Build Coastguard Worker X(2) = CRYPTO_load_u32_le(data);
513*8fb009dcSAndroid Build Coastguard Worker data += 4;
514*8fb009dcSAndroid Build Coastguard Worker RIP1(E, A, B, C, D, WL01, SL01);
515*8fb009dcSAndroid Build Coastguard Worker X(3) = CRYPTO_load_u32_le(data);
516*8fb009dcSAndroid Build Coastguard Worker data += 4;
517*8fb009dcSAndroid Build Coastguard Worker RIP1(D, E, A, B, C, WL02, SL02);
518*8fb009dcSAndroid Build Coastguard Worker X(4) = CRYPTO_load_u32_le(data);
519*8fb009dcSAndroid Build Coastguard Worker data += 4;
520*8fb009dcSAndroid Build Coastguard Worker RIP1(C, D, E, A, B, WL03, SL03);
521*8fb009dcSAndroid Build Coastguard Worker X(5) = CRYPTO_load_u32_le(data);
522*8fb009dcSAndroid Build Coastguard Worker data += 4;
523*8fb009dcSAndroid Build Coastguard Worker RIP1(B, C, D, E, A, WL04, SL04);
524*8fb009dcSAndroid Build Coastguard Worker X(6) = CRYPTO_load_u32_le(data);
525*8fb009dcSAndroid Build Coastguard Worker data += 4;
526*8fb009dcSAndroid Build Coastguard Worker RIP1(A, B, C, D, E, WL05, SL05);
527*8fb009dcSAndroid Build Coastguard Worker X(7) = CRYPTO_load_u32_le(data);
528*8fb009dcSAndroid Build Coastguard Worker data += 4;
529*8fb009dcSAndroid Build Coastguard Worker RIP1(E, A, B, C, D, WL06, SL06);
530*8fb009dcSAndroid Build Coastguard Worker X(8) = CRYPTO_load_u32_le(data);
531*8fb009dcSAndroid Build Coastguard Worker data += 4;
532*8fb009dcSAndroid Build Coastguard Worker RIP1(D, E, A, B, C, WL07, SL07);
533*8fb009dcSAndroid Build Coastguard Worker X(9) = CRYPTO_load_u32_le(data);
534*8fb009dcSAndroid Build Coastguard Worker data += 4;
535*8fb009dcSAndroid Build Coastguard Worker RIP1(C, D, E, A, B, WL08, SL08);
536*8fb009dcSAndroid Build Coastguard Worker X(10) = CRYPTO_load_u32_le(data);
537*8fb009dcSAndroid Build Coastguard Worker data += 4;
538*8fb009dcSAndroid Build Coastguard Worker RIP1(B, C, D, E, A, WL09, SL09);
539*8fb009dcSAndroid Build Coastguard Worker X(11) = CRYPTO_load_u32_le(data);
540*8fb009dcSAndroid Build Coastguard Worker data += 4;
541*8fb009dcSAndroid Build Coastguard Worker RIP1(A, B, C, D, E, WL10, SL10);
542*8fb009dcSAndroid Build Coastguard Worker X(12) = CRYPTO_load_u32_le(data);
543*8fb009dcSAndroid Build Coastguard Worker data += 4;
544*8fb009dcSAndroid Build Coastguard Worker RIP1(E, A, B, C, D, WL11, SL11);
545*8fb009dcSAndroid Build Coastguard Worker X(13) = CRYPTO_load_u32_le(data);
546*8fb009dcSAndroid Build Coastguard Worker data += 4;
547*8fb009dcSAndroid Build Coastguard Worker RIP1(D, E, A, B, C, WL12, SL12);
548*8fb009dcSAndroid Build Coastguard Worker X(14) = CRYPTO_load_u32_le(data);
549*8fb009dcSAndroid Build Coastguard Worker data += 4;
550*8fb009dcSAndroid Build Coastguard Worker RIP1(C, D, E, A, B, WL13, SL13);
551*8fb009dcSAndroid Build Coastguard Worker X(15) = CRYPTO_load_u32_le(data);
552*8fb009dcSAndroid Build Coastguard Worker data += 4;
553*8fb009dcSAndroid Build Coastguard Worker RIP1(B, C, D, E, A, WL14, SL14);
554*8fb009dcSAndroid Build Coastguard Worker RIP1(A, B, C, D, E, WL15, SL15);
555*8fb009dcSAndroid Build Coastguard Worker
556*8fb009dcSAndroid Build Coastguard Worker RIP2(E, A, B, C, D, WL16, SL16, KL1);
557*8fb009dcSAndroid Build Coastguard Worker RIP2(D, E, A, B, C, WL17, SL17, KL1);
558*8fb009dcSAndroid Build Coastguard Worker RIP2(C, D, E, A, B, WL18, SL18, KL1);
559*8fb009dcSAndroid Build Coastguard Worker RIP2(B, C, D, E, A, WL19, SL19, KL1);
560*8fb009dcSAndroid Build Coastguard Worker RIP2(A, B, C, D, E, WL20, SL20, KL1);
561*8fb009dcSAndroid Build Coastguard Worker RIP2(E, A, B, C, D, WL21, SL21, KL1);
562*8fb009dcSAndroid Build Coastguard Worker RIP2(D, E, A, B, C, WL22, SL22, KL1);
563*8fb009dcSAndroid Build Coastguard Worker RIP2(C, D, E, A, B, WL23, SL23, KL1);
564*8fb009dcSAndroid Build Coastguard Worker RIP2(B, C, D, E, A, WL24, SL24, KL1);
565*8fb009dcSAndroid Build Coastguard Worker RIP2(A, B, C, D, E, WL25, SL25, KL1);
566*8fb009dcSAndroid Build Coastguard Worker RIP2(E, A, B, C, D, WL26, SL26, KL1);
567*8fb009dcSAndroid Build Coastguard Worker RIP2(D, E, A, B, C, WL27, SL27, KL1);
568*8fb009dcSAndroid Build Coastguard Worker RIP2(C, D, E, A, B, WL28, SL28, KL1);
569*8fb009dcSAndroid Build Coastguard Worker RIP2(B, C, D, E, A, WL29, SL29, KL1);
570*8fb009dcSAndroid Build Coastguard Worker RIP2(A, B, C, D, E, WL30, SL30, KL1);
571*8fb009dcSAndroid Build Coastguard Worker RIP2(E, A, B, C, D, WL31, SL31, KL1);
572*8fb009dcSAndroid Build Coastguard Worker
573*8fb009dcSAndroid Build Coastguard Worker RIP3(D, E, A, B, C, WL32, SL32, KL2);
574*8fb009dcSAndroid Build Coastguard Worker RIP3(C, D, E, A, B, WL33, SL33, KL2);
575*8fb009dcSAndroid Build Coastguard Worker RIP3(B, C, D, E, A, WL34, SL34, KL2);
576*8fb009dcSAndroid Build Coastguard Worker RIP3(A, B, C, D, E, WL35, SL35, KL2);
577*8fb009dcSAndroid Build Coastguard Worker RIP3(E, A, B, C, D, WL36, SL36, KL2);
578*8fb009dcSAndroid Build Coastguard Worker RIP3(D, E, A, B, C, WL37, SL37, KL2);
579*8fb009dcSAndroid Build Coastguard Worker RIP3(C, D, E, A, B, WL38, SL38, KL2);
580*8fb009dcSAndroid Build Coastguard Worker RIP3(B, C, D, E, A, WL39, SL39, KL2);
581*8fb009dcSAndroid Build Coastguard Worker RIP3(A, B, C, D, E, WL40, SL40, KL2);
582*8fb009dcSAndroid Build Coastguard Worker RIP3(E, A, B, C, D, WL41, SL41, KL2);
583*8fb009dcSAndroid Build Coastguard Worker RIP3(D, E, A, B, C, WL42, SL42, KL2);
584*8fb009dcSAndroid Build Coastguard Worker RIP3(C, D, E, A, B, WL43, SL43, KL2);
585*8fb009dcSAndroid Build Coastguard Worker RIP3(B, C, D, E, A, WL44, SL44, KL2);
586*8fb009dcSAndroid Build Coastguard Worker RIP3(A, B, C, D, E, WL45, SL45, KL2);
587*8fb009dcSAndroid Build Coastguard Worker RIP3(E, A, B, C, D, WL46, SL46, KL2);
588*8fb009dcSAndroid Build Coastguard Worker RIP3(D, E, A, B, C, WL47, SL47, KL2);
589*8fb009dcSAndroid Build Coastguard Worker
590*8fb009dcSAndroid Build Coastguard Worker RIP4(C, D, E, A, B, WL48, SL48, KL3);
591*8fb009dcSAndroid Build Coastguard Worker RIP4(B, C, D, E, A, WL49, SL49, KL3);
592*8fb009dcSAndroid Build Coastguard Worker RIP4(A, B, C, D, E, WL50, SL50, KL3);
593*8fb009dcSAndroid Build Coastguard Worker RIP4(E, A, B, C, D, WL51, SL51, KL3);
594*8fb009dcSAndroid Build Coastguard Worker RIP4(D, E, A, B, C, WL52, SL52, KL3);
595*8fb009dcSAndroid Build Coastguard Worker RIP4(C, D, E, A, B, WL53, SL53, KL3);
596*8fb009dcSAndroid Build Coastguard Worker RIP4(B, C, D, E, A, WL54, SL54, KL3);
597*8fb009dcSAndroid Build Coastguard Worker RIP4(A, B, C, D, E, WL55, SL55, KL3);
598*8fb009dcSAndroid Build Coastguard Worker RIP4(E, A, B, C, D, WL56, SL56, KL3);
599*8fb009dcSAndroid Build Coastguard Worker RIP4(D, E, A, B, C, WL57, SL57, KL3);
600*8fb009dcSAndroid Build Coastguard Worker RIP4(C, D, E, A, B, WL58, SL58, KL3);
601*8fb009dcSAndroid Build Coastguard Worker RIP4(B, C, D, E, A, WL59, SL59, KL3);
602*8fb009dcSAndroid Build Coastguard Worker RIP4(A, B, C, D, E, WL60, SL60, KL3);
603*8fb009dcSAndroid Build Coastguard Worker RIP4(E, A, B, C, D, WL61, SL61, KL3);
604*8fb009dcSAndroid Build Coastguard Worker RIP4(D, E, A, B, C, WL62, SL62, KL3);
605*8fb009dcSAndroid Build Coastguard Worker RIP4(C, D, E, A, B, WL63, SL63, KL3);
606*8fb009dcSAndroid Build Coastguard Worker
607*8fb009dcSAndroid Build Coastguard Worker RIP5(B, C, D, E, A, WL64, SL64, KL4);
608*8fb009dcSAndroid Build Coastguard Worker RIP5(A, B, C, D, E, WL65, SL65, KL4);
609*8fb009dcSAndroid Build Coastguard Worker RIP5(E, A, B, C, D, WL66, SL66, KL4);
610*8fb009dcSAndroid Build Coastguard Worker RIP5(D, E, A, B, C, WL67, SL67, KL4);
611*8fb009dcSAndroid Build Coastguard Worker RIP5(C, D, E, A, B, WL68, SL68, KL4);
612*8fb009dcSAndroid Build Coastguard Worker RIP5(B, C, D, E, A, WL69, SL69, KL4);
613*8fb009dcSAndroid Build Coastguard Worker RIP5(A, B, C, D, E, WL70, SL70, KL4);
614*8fb009dcSAndroid Build Coastguard Worker RIP5(E, A, B, C, D, WL71, SL71, KL4);
615*8fb009dcSAndroid Build Coastguard Worker RIP5(D, E, A, B, C, WL72, SL72, KL4);
616*8fb009dcSAndroid Build Coastguard Worker RIP5(C, D, E, A, B, WL73, SL73, KL4);
617*8fb009dcSAndroid Build Coastguard Worker RIP5(B, C, D, E, A, WL74, SL74, KL4);
618*8fb009dcSAndroid Build Coastguard Worker RIP5(A, B, C, D, E, WL75, SL75, KL4);
619*8fb009dcSAndroid Build Coastguard Worker RIP5(E, A, B, C, D, WL76, SL76, KL4);
620*8fb009dcSAndroid Build Coastguard Worker RIP5(D, E, A, B, C, WL77, SL77, KL4);
621*8fb009dcSAndroid Build Coastguard Worker RIP5(C, D, E, A, B, WL78, SL78, KL4);
622*8fb009dcSAndroid Build Coastguard Worker RIP5(B, C, D, E, A, WL79, SL79, KL4);
623*8fb009dcSAndroid Build Coastguard Worker
624*8fb009dcSAndroid Build Coastguard Worker a = A;
625*8fb009dcSAndroid Build Coastguard Worker b = B;
626*8fb009dcSAndroid Build Coastguard Worker c = C;
627*8fb009dcSAndroid Build Coastguard Worker d = D;
628*8fb009dcSAndroid Build Coastguard Worker e = E;
629*8fb009dcSAndroid Build Coastguard Worker // Do other half
630*8fb009dcSAndroid Build Coastguard Worker A = h[0];
631*8fb009dcSAndroid Build Coastguard Worker B = h[1];
632*8fb009dcSAndroid Build Coastguard Worker C = h[2];
633*8fb009dcSAndroid Build Coastguard Worker D = h[3];
634*8fb009dcSAndroid Build Coastguard Worker E = h[4];
635*8fb009dcSAndroid Build Coastguard Worker
636*8fb009dcSAndroid Build Coastguard Worker RIP5(A, B, C, D, E, WR00, SR00, KR0);
637*8fb009dcSAndroid Build Coastguard Worker RIP5(E, A, B, C, D, WR01, SR01, KR0);
638*8fb009dcSAndroid Build Coastguard Worker RIP5(D, E, A, B, C, WR02, SR02, KR0);
639*8fb009dcSAndroid Build Coastguard Worker RIP5(C, D, E, A, B, WR03, SR03, KR0);
640*8fb009dcSAndroid Build Coastguard Worker RIP5(B, C, D, E, A, WR04, SR04, KR0);
641*8fb009dcSAndroid Build Coastguard Worker RIP5(A, B, C, D, E, WR05, SR05, KR0);
642*8fb009dcSAndroid Build Coastguard Worker RIP5(E, A, B, C, D, WR06, SR06, KR0);
643*8fb009dcSAndroid Build Coastguard Worker RIP5(D, E, A, B, C, WR07, SR07, KR0);
644*8fb009dcSAndroid Build Coastguard Worker RIP5(C, D, E, A, B, WR08, SR08, KR0);
645*8fb009dcSAndroid Build Coastguard Worker RIP5(B, C, D, E, A, WR09, SR09, KR0);
646*8fb009dcSAndroid Build Coastguard Worker RIP5(A, B, C, D, E, WR10, SR10, KR0);
647*8fb009dcSAndroid Build Coastguard Worker RIP5(E, A, B, C, D, WR11, SR11, KR0);
648*8fb009dcSAndroid Build Coastguard Worker RIP5(D, E, A, B, C, WR12, SR12, KR0);
649*8fb009dcSAndroid Build Coastguard Worker RIP5(C, D, E, A, B, WR13, SR13, KR0);
650*8fb009dcSAndroid Build Coastguard Worker RIP5(B, C, D, E, A, WR14, SR14, KR0);
651*8fb009dcSAndroid Build Coastguard Worker RIP5(A, B, C, D, E, WR15, SR15, KR0);
652*8fb009dcSAndroid Build Coastguard Worker
653*8fb009dcSAndroid Build Coastguard Worker RIP4(E, A, B, C, D, WR16, SR16, KR1);
654*8fb009dcSAndroid Build Coastguard Worker RIP4(D, E, A, B, C, WR17, SR17, KR1);
655*8fb009dcSAndroid Build Coastguard Worker RIP4(C, D, E, A, B, WR18, SR18, KR1);
656*8fb009dcSAndroid Build Coastguard Worker RIP4(B, C, D, E, A, WR19, SR19, KR1);
657*8fb009dcSAndroid Build Coastguard Worker RIP4(A, B, C, D, E, WR20, SR20, KR1);
658*8fb009dcSAndroid Build Coastguard Worker RIP4(E, A, B, C, D, WR21, SR21, KR1);
659*8fb009dcSAndroid Build Coastguard Worker RIP4(D, E, A, B, C, WR22, SR22, KR1);
660*8fb009dcSAndroid Build Coastguard Worker RIP4(C, D, E, A, B, WR23, SR23, KR1);
661*8fb009dcSAndroid Build Coastguard Worker RIP4(B, C, D, E, A, WR24, SR24, KR1);
662*8fb009dcSAndroid Build Coastguard Worker RIP4(A, B, C, D, E, WR25, SR25, KR1);
663*8fb009dcSAndroid Build Coastguard Worker RIP4(E, A, B, C, D, WR26, SR26, KR1);
664*8fb009dcSAndroid Build Coastguard Worker RIP4(D, E, A, B, C, WR27, SR27, KR1);
665*8fb009dcSAndroid Build Coastguard Worker RIP4(C, D, E, A, B, WR28, SR28, KR1);
666*8fb009dcSAndroid Build Coastguard Worker RIP4(B, C, D, E, A, WR29, SR29, KR1);
667*8fb009dcSAndroid Build Coastguard Worker RIP4(A, B, C, D, E, WR30, SR30, KR1);
668*8fb009dcSAndroid Build Coastguard Worker RIP4(E, A, B, C, D, WR31, SR31, KR1);
669*8fb009dcSAndroid Build Coastguard Worker
670*8fb009dcSAndroid Build Coastguard Worker RIP3(D, E, A, B, C, WR32, SR32, KR2);
671*8fb009dcSAndroid Build Coastguard Worker RIP3(C, D, E, A, B, WR33, SR33, KR2);
672*8fb009dcSAndroid Build Coastguard Worker RIP3(B, C, D, E, A, WR34, SR34, KR2);
673*8fb009dcSAndroid Build Coastguard Worker RIP3(A, B, C, D, E, WR35, SR35, KR2);
674*8fb009dcSAndroid Build Coastguard Worker RIP3(E, A, B, C, D, WR36, SR36, KR2);
675*8fb009dcSAndroid Build Coastguard Worker RIP3(D, E, A, B, C, WR37, SR37, KR2);
676*8fb009dcSAndroid Build Coastguard Worker RIP3(C, D, E, A, B, WR38, SR38, KR2);
677*8fb009dcSAndroid Build Coastguard Worker RIP3(B, C, D, E, A, WR39, SR39, KR2);
678*8fb009dcSAndroid Build Coastguard Worker RIP3(A, B, C, D, E, WR40, SR40, KR2);
679*8fb009dcSAndroid Build Coastguard Worker RIP3(E, A, B, C, D, WR41, SR41, KR2);
680*8fb009dcSAndroid Build Coastguard Worker RIP3(D, E, A, B, C, WR42, SR42, KR2);
681*8fb009dcSAndroid Build Coastguard Worker RIP3(C, D, E, A, B, WR43, SR43, KR2);
682*8fb009dcSAndroid Build Coastguard Worker RIP3(B, C, D, E, A, WR44, SR44, KR2);
683*8fb009dcSAndroid Build Coastguard Worker RIP3(A, B, C, D, E, WR45, SR45, KR2);
684*8fb009dcSAndroid Build Coastguard Worker RIP3(E, A, B, C, D, WR46, SR46, KR2);
685*8fb009dcSAndroid Build Coastguard Worker RIP3(D, E, A, B, C, WR47, SR47, KR2);
686*8fb009dcSAndroid Build Coastguard Worker
687*8fb009dcSAndroid Build Coastguard Worker RIP2(C, D, E, A, B, WR48, SR48, KR3);
688*8fb009dcSAndroid Build Coastguard Worker RIP2(B, C, D, E, A, WR49, SR49, KR3);
689*8fb009dcSAndroid Build Coastguard Worker RIP2(A, B, C, D, E, WR50, SR50, KR3);
690*8fb009dcSAndroid Build Coastguard Worker RIP2(E, A, B, C, D, WR51, SR51, KR3);
691*8fb009dcSAndroid Build Coastguard Worker RIP2(D, E, A, B, C, WR52, SR52, KR3);
692*8fb009dcSAndroid Build Coastguard Worker RIP2(C, D, E, A, B, WR53, SR53, KR3);
693*8fb009dcSAndroid Build Coastguard Worker RIP2(B, C, D, E, A, WR54, SR54, KR3);
694*8fb009dcSAndroid Build Coastguard Worker RIP2(A, B, C, D, E, WR55, SR55, KR3);
695*8fb009dcSAndroid Build Coastguard Worker RIP2(E, A, B, C, D, WR56, SR56, KR3);
696*8fb009dcSAndroid Build Coastguard Worker RIP2(D, E, A, B, C, WR57, SR57, KR3);
697*8fb009dcSAndroid Build Coastguard Worker RIP2(C, D, E, A, B, WR58, SR58, KR3);
698*8fb009dcSAndroid Build Coastguard Worker RIP2(B, C, D, E, A, WR59, SR59, KR3);
699*8fb009dcSAndroid Build Coastguard Worker RIP2(A, B, C, D, E, WR60, SR60, KR3);
700*8fb009dcSAndroid Build Coastguard Worker RIP2(E, A, B, C, D, WR61, SR61, KR3);
701*8fb009dcSAndroid Build Coastguard Worker RIP2(D, E, A, B, C, WR62, SR62, KR3);
702*8fb009dcSAndroid Build Coastguard Worker RIP2(C, D, E, A, B, WR63, SR63, KR3);
703*8fb009dcSAndroid Build Coastguard Worker
704*8fb009dcSAndroid Build Coastguard Worker RIP1(B, C, D, E, A, WR64, SR64);
705*8fb009dcSAndroid Build Coastguard Worker RIP1(A, B, C, D, E, WR65, SR65);
706*8fb009dcSAndroid Build Coastguard Worker RIP1(E, A, B, C, D, WR66, SR66);
707*8fb009dcSAndroid Build Coastguard Worker RIP1(D, E, A, B, C, WR67, SR67);
708*8fb009dcSAndroid Build Coastguard Worker RIP1(C, D, E, A, B, WR68, SR68);
709*8fb009dcSAndroid Build Coastguard Worker RIP1(B, C, D, E, A, WR69, SR69);
710*8fb009dcSAndroid Build Coastguard Worker RIP1(A, B, C, D, E, WR70, SR70);
711*8fb009dcSAndroid Build Coastguard Worker RIP1(E, A, B, C, D, WR71, SR71);
712*8fb009dcSAndroid Build Coastguard Worker RIP1(D, E, A, B, C, WR72, SR72);
713*8fb009dcSAndroid Build Coastguard Worker RIP1(C, D, E, A, B, WR73, SR73);
714*8fb009dcSAndroid Build Coastguard Worker RIP1(B, C, D, E, A, WR74, SR74);
715*8fb009dcSAndroid Build Coastguard Worker RIP1(A, B, C, D, E, WR75, SR75);
716*8fb009dcSAndroid Build Coastguard Worker RIP1(E, A, B, C, D, WR76, SR76);
717*8fb009dcSAndroid Build Coastguard Worker RIP1(D, E, A, B, C, WR77, SR77);
718*8fb009dcSAndroid Build Coastguard Worker RIP1(C, D, E, A, B, WR78, SR78);
719*8fb009dcSAndroid Build Coastguard Worker RIP1(B, C, D, E, A, WR79, SR79);
720*8fb009dcSAndroid Build Coastguard Worker
721*8fb009dcSAndroid Build Coastguard Worker D = h[1] + c + D;
722*8fb009dcSAndroid Build Coastguard Worker h[1] = h[2] + d + E;
723*8fb009dcSAndroid Build Coastguard Worker h[2] = h[3] + e + A;
724*8fb009dcSAndroid Build Coastguard Worker h[3] = h[4] + a + B;
725*8fb009dcSAndroid Build Coastguard Worker h[4] = h[0] + b + C;
726*8fb009dcSAndroid Build Coastguard Worker h[0] = D;
727*8fb009dcSAndroid Build Coastguard Worker }
728*8fb009dcSAndroid Build Coastguard Worker
729*8fb009dcSAndroid Build Coastguard Worker #undef X
730*8fb009dcSAndroid Build Coastguard Worker }
731*8fb009dcSAndroid Build Coastguard Worker
RIPEMD160(const uint8_t * data,size_t len,uint8_t out[RIPEMD160_DIGEST_LENGTH])732*8fb009dcSAndroid Build Coastguard Worker uint8_t *RIPEMD160(const uint8_t *data, size_t len,
733*8fb009dcSAndroid Build Coastguard Worker uint8_t out[RIPEMD160_DIGEST_LENGTH]) {
734*8fb009dcSAndroid Build Coastguard Worker RIPEMD160_CTX ctx;
735*8fb009dcSAndroid Build Coastguard Worker
736*8fb009dcSAndroid Build Coastguard Worker if (!RIPEMD160_Init(&ctx)) {
737*8fb009dcSAndroid Build Coastguard Worker return NULL;
738*8fb009dcSAndroid Build Coastguard Worker }
739*8fb009dcSAndroid Build Coastguard Worker
740*8fb009dcSAndroid Build Coastguard Worker RIPEMD160_Update(&ctx, data, len);
741*8fb009dcSAndroid Build Coastguard Worker RIPEMD160_Final(out, &ctx);
742*8fb009dcSAndroid Build Coastguard Worker return out;
743*8fb009dcSAndroid Build Coastguard Worker }
744