~ubuntu-branches/ubuntu/hardy/openssl/hardy-security

« back to all changes in this revision

Viewing changes to crypto/ripemd/rmd_dgst.c

  • Committer: Bazaar Package Importer
  • Author(s): Christoph Martin
  • Date: 2004-05-24 17:02:29 UTC
  • Revision ID: james.westby@ubuntu.com-20040524170229-ixlo08bbbly0xied
Tags: upstream-0.9.7d
ImportĀ upstreamĀ versionĀ 0.9.7d

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* crypto/ripemd/rmd_dgst.c */
 
2
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
 
3
 * All rights reserved.
 
4
 *
 
5
 * This package is an SSL implementation written
 
6
 * by Eric Young (eay@cryptsoft.com).
 
7
 * The implementation was written so as to conform with Netscapes SSL.
 
8
 * 
 
9
 * This library is free for commercial and non-commercial use as long as
 
10
 * the following conditions are aheared to.  The following conditions
 
11
 * apply to all code found in this distribution, be it the RC4, RSA,
 
12
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 
13
 * included with this distribution is covered by the same copyright terms
 
14
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 
15
 * 
 
16
 * Copyright remains Eric Young's, and as such any Copyright notices in
 
17
 * the code are not to be removed.
 
18
 * If this package is used in a product, Eric Young should be given attribution
 
19
 * as the author of the parts of the library used.
 
20
 * This can be in the form of a textual message at program startup or
 
21
 * in documentation (online or textual) provided with the package.
 
22
 * 
 
23
 * Redistribution and use in source and binary forms, with or without
 
24
 * modification, are permitted provided that the following conditions
 
25
 * are met:
 
26
 * 1. Redistributions of source code must retain the copyright
 
27
 *    notice, this list of conditions and the following disclaimer.
 
28
 * 2. Redistributions in binary form must reproduce the above copyright
 
29
 *    notice, this list of conditions and the following disclaimer in the
 
30
 *    documentation and/or other materials provided with the distribution.
 
31
 * 3. All advertising materials mentioning features or use of this software
 
32
 *    must display the following acknowledgement:
 
33
 *    "This product includes cryptographic software written by
 
34
 *     Eric Young (eay@cryptsoft.com)"
 
35
 *    The word 'cryptographic' can be left out if the rouines from the library
 
36
 *    being used are not cryptographic related :-).
 
37
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 
38
 *    the apps directory (application code) you must include an acknowledgement:
 
39
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 
40
 * 
 
41
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 
42
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 
43
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 
44
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 
45
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 
46
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 
47
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 
48
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 
49
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 
50
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 
51
 * SUCH DAMAGE.
 
52
 * 
 
53
 * The licence and distribution terms for any publically available version or
 
54
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 
55
 * copied and put under another distribution licence
 
56
 * [including the GNU Public Licence.]
 
57
 */
 
58
 
 
59
#include <stdio.h>
 
60
#include "rmd_locl.h"
 
61
#include <openssl/opensslv.h>
 
62
 
 
63
const char *RMD160_version="RIPE-MD160" OPENSSL_VERSION_PTEXT;
 
64
 
 
65
#  ifdef RMD160_ASM
 
66
     void ripemd160_block_x86(RIPEMD160_CTX *c, unsigned long *p,int num);
 
67
#    define ripemd160_block ripemd160_block_x86
 
68
#  else
 
69
     void ripemd160_block(RIPEMD160_CTX *c, unsigned long *p,int num);
 
70
#  endif
 
71
 
 
72
int RIPEMD160_Init(RIPEMD160_CTX *c)
 
73
        {
 
74
        c->A=RIPEMD160_A;
 
75
        c->B=RIPEMD160_B;
 
76
        c->C=RIPEMD160_C;
 
77
        c->D=RIPEMD160_D;
 
78
        c->E=RIPEMD160_E;
 
79
        c->Nl=0;
 
80
        c->Nh=0;
 
81
        c->num=0;
 
82
        return 1;
 
83
        }
 
84
 
 
85
#ifndef ripemd160_block_host_order
 
86
#ifdef X
 
87
#undef X
 
88
#endif
 
89
#define X(i)    XX[i]
 
90
void ripemd160_block_host_order (RIPEMD160_CTX *ctx, const void *p, int num)
 
91
        {
 
92
        const RIPEMD160_LONG *XX=p;
 
93
        register unsigned MD32_REG_T A,B,C,D,E;
 
94
        register unsigned MD32_REG_T a,b,c,d,e;
 
95
 
 
96
        for (;num--;XX+=HASH_LBLOCK)
 
97
                {
 
98
 
 
99
        A=ctx->A; B=ctx->B; C=ctx->C; D=ctx->D; E=ctx->E;
 
100
 
 
101
        RIP1(A,B,C,D,E,WL00,SL00);
 
102
        RIP1(E,A,B,C,D,WL01,SL01);
 
103
        RIP1(D,E,A,B,C,WL02,SL02);
 
104
        RIP1(C,D,E,A,B,WL03,SL03);
 
105
        RIP1(B,C,D,E,A,WL04,SL04);
 
106
        RIP1(A,B,C,D,E,WL05,SL05);
 
107
        RIP1(E,A,B,C,D,WL06,SL06);
 
108
        RIP1(D,E,A,B,C,WL07,SL07);
 
109
        RIP1(C,D,E,A,B,WL08,SL08);
 
110
        RIP1(B,C,D,E,A,WL09,SL09);
 
111
        RIP1(A,B,C,D,E,WL10,SL10);
 
112
        RIP1(E,A,B,C,D,WL11,SL11);
 
113
        RIP1(D,E,A,B,C,WL12,SL12);
 
114
        RIP1(C,D,E,A,B,WL13,SL13);
 
115
        RIP1(B,C,D,E,A,WL14,SL14);
 
116
        RIP1(A,B,C,D,E,WL15,SL15);
 
117
 
 
118
        RIP2(E,A,B,C,D,WL16,SL16,KL1);
 
119
        RIP2(D,E,A,B,C,WL17,SL17,KL1);
 
120
        RIP2(C,D,E,A,B,WL18,SL18,KL1);
 
121
        RIP2(B,C,D,E,A,WL19,SL19,KL1);
 
122
        RIP2(A,B,C,D,E,WL20,SL20,KL1);
 
123
        RIP2(E,A,B,C,D,WL21,SL21,KL1);
 
124
        RIP2(D,E,A,B,C,WL22,SL22,KL1);
 
125
        RIP2(C,D,E,A,B,WL23,SL23,KL1);
 
126
        RIP2(B,C,D,E,A,WL24,SL24,KL1);
 
127
        RIP2(A,B,C,D,E,WL25,SL25,KL1);
 
128
        RIP2(E,A,B,C,D,WL26,SL26,KL1);
 
129
        RIP2(D,E,A,B,C,WL27,SL27,KL1);
 
130
        RIP2(C,D,E,A,B,WL28,SL28,KL1);
 
131
        RIP2(B,C,D,E,A,WL29,SL29,KL1);
 
132
        RIP2(A,B,C,D,E,WL30,SL30,KL1);
 
133
        RIP2(E,A,B,C,D,WL31,SL31,KL1);
 
134
 
 
135
        RIP3(D,E,A,B,C,WL32,SL32,KL2);
 
136
        RIP3(C,D,E,A,B,WL33,SL33,KL2);
 
137
        RIP3(B,C,D,E,A,WL34,SL34,KL2);
 
138
        RIP3(A,B,C,D,E,WL35,SL35,KL2);
 
139
        RIP3(E,A,B,C,D,WL36,SL36,KL2);
 
140
        RIP3(D,E,A,B,C,WL37,SL37,KL2);
 
141
        RIP3(C,D,E,A,B,WL38,SL38,KL2);
 
142
        RIP3(B,C,D,E,A,WL39,SL39,KL2);
 
143
        RIP3(A,B,C,D,E,WL40,SL40,KL2);
 
144
        RIP3(E,A,B,C,D,WL41,SL41,KL2);
 
145
        RIP3(D,E,A,B,C,WL42,SL42,KL2);
 
146
        RIP3(C,D,E,A,B,WL43,SL43,KL2);
 
147
        RIP3(B,C,D,E,A,WL44,SL44,KL2);
 
148
        RIP3(A,B,C,D,E,WL45,SL45,KL2);
 
149
        RIP3(E,A,B,C,D,WL46,SL46,KL2);
 
150
        RIP3(D,E,A,B,C,WL47,SL47,KL2);
 
151
 
 
152
        RIP4(C,D,E,A,B,WL48,SL48,KL3);
 
153
        RIP4(B,C,D,E,A,WL49,SL49,KL3);
 
154
        RIP4(A,B,C,D,E,WL50,SL50,KL3);
 
155
        RIP4(E,A,B,C,D,WL51,SL51,KL3);
 
156
        RIP4(D,E,A,B,C,WL52,SL52,KL3);
 
157
        RIP4(C,D,E,A,B,WL53,SL53,KL3);
 
158
        RIP4(B,C,D,E,A,WL54,SL54,KL3);
 
159
        RIP4(A,B,C,D,E,WL55,SL55,KL3);
 
160
        RIP4(E,A,B,C,D,WL56,SL56,KL3);
 
161
        RIP4(D,E,A,B,C,WL57,SL57,KL3);
 
162
        RIP4(C,D,E,A,B,WL58,SL58,KL3);
 
163
        RIP4(B,C,D,E,A,WL59,SL59,KL3);
 
164
        RIP4(A,B,C,D,E,WL60,SL60,KL3);
 
165
        RIP4(E,A,B,C,D,WL61,SL61,KL3);
 
166
        RIP4(D,E,A,B,C,WL62,SL62,KL3);
 
167
        RIP4(C,D,E,A,B,WL63,SL63,KL3);
 
168
 
 
169
        RIP5(B,C,D,E,A,WL64,SL64,KL4);
 
170
        RIP5(A,B,C,D,E,WL65,SL65,KL4);
 
171
        RIP5(E,A,B,C,D,WL66,SL66,KL4);
 
172
        RIP5(D,E,A,B,C,WL67,SL67,KL4);
 
173
        RIP5(C,D,E,A,B,WL68,SL68,KL4);
 
174
        RIP5(B,C,D,E,A,WL69,SL69,KL4);
 
175
        RIP5(A,B,C,D,E,WL70,SL70,KL4);
 
176
        RIP5(E,A,B,C,D,WL71,SL71,KL4);
 
177
        RIP5(D,E,A,B,C,WL72,SL72,KL4);
 
178
        RIP5(C,D,E,A,B,WL73,SL73,KL4);
 
179
        RIP5(B,C,D,E,A,WL74,SL74,KL4);
 
180
        RIP5(A,B,C,D,E,WL75,SL75,KL4);
 
181
        RIP5(E,A,B,C,D,WL76,SL76,KL4);
 
182
        RIP5(D,E,A,B,C,WL77,SL77,KL4);
 
183
        RIP5(C,D,E,A,B,WL78,SL78,KL4);
 
184
        RIP5(B,C,D,E,A,WL79,SL79,KL4);
 
185
 
 
186
        a=A; b=B; c=C; d=D; e=E;
 
187
        /* Do other half */
 
188
        A=ctx->A; B=ctx->B; C=ctx->C; D=ctx->D; E=ctx->E;
 
189
 
 
190
        RIP5(A,B,C,D,E,WR00,SR00,KR0);
 
191
        RIP5(E,A,B,C,D,WR01,SR01,KR0);
 
192
        RIP5(D,E,A,B,C,WR02,SR02,KR0);
 
193
        RIP5(C,D,E,A,B,WR03,SR03,KR0);
 
194
        RIP5(B,C,D,E,A,WR04,SR04,KR0);
 
195
        RIP5(A,B,C,D,E,WR05,SR05,KR0);
 
196
        RIP5(E,A,B,C,D,WR06,SR06,KR0);
 
197
        RIP5(D,E,A,B,C,WR07,SR07,KR0);
 
198
        RIP5(C,D,E,A,B,WR08,SR08,KR0);
 
199
        RIP5(B,C,D,E,A,WR09,SR09,KR0);
 
200
        RIP5(A,B,C,D,E,WR10,SR10,KR0);
 
201
        RIP5(E,A,B,C,D,WR11,SR11,KR0);
 
202
        RIP5(D,E,A,B,C,WR12,SR12,KR0);
 
203
        RIP5(C,D,E,A,B,WR13,SR13,KR0);
 
204
        RIP5(B,C,D,E,A,WR14,SR14,KR0);
 
205
        RIP5(A,B,C,D,E,WR15,SR15,KR0);
 
206
 
 
207
        RIP4(E,A,B,C,D,WR16,SR16,KR1);
 
208
        RIP4(D,E,A,B,C,WR17,SR17,KR1);
 
209
        RIP4(C,D,E,A,B,WR18,SR18,KR1);
 
210
        RIP4(B,C,D,E,A,WR19,SR19,KR1);
 
211
        RIP4(A,B,C,D,E,WR20,SR20,KR1);
 
212
        RIP4(E,A,B,C,D,WR21,SR21,KR1);
 
213
        RIP4(D,E,A,B,C,WR22,SR22,KR1);
 
214
        RIP4(C,D,E,A,B,WR23,SR23,KR1);
 
215
        RIP4(B,C,D,E,A,WR24,SR24,KR1);
 
216
        RIP4(A,B,C,D,E,WR25,SR25,KR1);
 
217
        RIP4(E,A,B,C,D,WR26,SR26,KR1);
 
218
        RIP4(D,E,A,B,C,WR27,SR27,KR1);
 
219
        RIP4(C,D,E,A,B,WR28,SR28,KR1);
 
220
        RIP4(B,C,D,E,A,WR29,SR29,KR1);
 
221
        RIP4(A,B,C,D,E,WR30,SR30,KR1);
 
222
        RIP4(E,A,B,C,D,WR31,SR31,KR1);
 
223
 
 
224
        RIP3(D,E,A,B,C,WR32,SR32,KR2);
 
225
        RIP3(C,D,E,A,B,WR33,SR33,KR2);
 
226
        RIP3(B,C,D,E,A,WR34,SR34,KR2);
 
227
        RIP3(A,B,C,D,E,WR35,SR35,KR2);
 
228
        RIP3(E,A,B,C,D,WR36,SR36,KR2);
 
229
        RIP3(D,E,A,B,C,WR37,SR37,KR2);
 
230
        RIP3(C,D,E,A,B,WR38,SR38,KR2);
 
231
        RIP3(B,C,D,E,A,WR39,SR39,KR2);
 
232
        RIP3(A,B,C,D,E,WR40,SR40,KR2);
 
233
        RIP3(E,A,B,C,D,WR41,SR41,KR2);
 
234
        RIP3(D,E,A,B,C,WR42,SR42,KR2);
 
235
        RIP3(C,D,E,A,B,WR43,SR43,KR2);
 
236
        RIP3(B,C,D,E,A,WR44,SR44,KR2);
 
237
        RIP3(A,B,C,D,E,WR45,SR45,KR2);
 
238
        RIP3(E,A,B,C,D,WR46,SR46,KR2);
 
239
        RIP3(D,E,A,B,C,WR47,SR47,KR2);
 
240
 
 
241
        RIP2(C,D,E,A,B,WR48,SR48,KR3);
 
242
        RIP2(B,C,D,E,A,WR49,SR49,KR3);
 
243
        RIP2(A,B,C,D,E,WR50,SR50,KR3);
 
244
        RIP2(E,A,B,C,D,WR51,SR51,KR3);
 
245
        RIP2(D,E,A,B,C,WR52,SR52,KR3);
 
246
        RIP2(C,D,E,A,B,WR53,SR53,KR3);
 
247
        RIP2(B,C,D,E,A,WR54,SR54,KR3);
 
248
        RIP2(A,B,C,D,E,WR55,SR55,KR3);
 
249
        RIP2(E,A,B,C,D,WR56,SR56,KR3);
 
250
        RIP2(D,E,A,B,C,WR57,SR57,KR3);
 
251
        RIP2(C,D,E,A,B,WR58,SR58,KR3);
 
252
        RIP2(B,C,D,E,A,WR59,SR59,KR3);
 
253
        RIP2(A,B,C,D,E,WR60,SR60,KR3);
 
254
        RIP2(E,A,B,C,D,WR61,SR61,KR3);
 
255
        RIP2(D,E,A,B,C,WR62,SR62,KR3);
 
256
        RIP2(C,D,E,A,B,WR63,SR63,KR3);
 
257
 
 
258
        RIP1(B,C,D,E,A,WR64,SR64);
 
259
        RIP1(A,B,C,D,E,WR65,SR65);
 
260
        RIP1(E,A,B,C,D,WR66,SR66);
 
261
        RIP1(D,E,A,B,C,WR67,SR67);
 
262
        RIP1(C,D,E,A,B,WR68,SR68);
 
263
        RIP1(B,C,D,E,A,WR69,SR69);
 
264
        RIP1(A,B,C,D,E,WR70,SR70);
 
265
        RIP1(E,A,B,C,D,WR71,SR71);
 
266
        RIP1(D,E,A,B,C,WR72,SR72);
 
267
        RIP1(C,D,E,A,B,WR73,SR73);
 
268
        RIP1(B,C,D,E,A,WR74,SR74);
 
269
        RIP1(A,B,C,D,E,WR75,SR75);
 
270
        RIP1(E,A,B,C,D,WR76,SR76);
 
271
        RIP1(D,E,A,B,C,WR77,SR77);
 
272
        RIP1(C,D,E,A,B,WR78,SR78);
 
273
        RIP1(B,C,D,E,A,WR79,SR79);
 
274
 
 
275
        D     =ctx->B+c+D;
 
276
        ctx->B=ctx->C+d+E;
 
277
        ctx->C=ctx->D+e+A;
 
278
        ctx->D=ctx->E+a+B;
 
279
        ctx->E=ctx->A+b+C;
 
280
        ctx->A=D;
 
281
 
 
282
                }
 
283
        }
 
284
#endif
 
285
 
 
286
#ifndef ripemd160_block_data_order
 
287
#ifdef X
 
288
#undef X
 
289
#endif
 
290
void ripemd160_block_data_order (RIPEMD160_CTX *ctx, const void *p, int num)
 
291
        {
 
292
        const unsigned char *data=p;
 
293
        register unsigned MD32_REG_T A,B,C,D,E;
 
294
        unsigned MD32_REG_T a,b,c,d,e,l;
 
295
#ifndef MD32_XARRAY
 
296
        /* See comment in crypto/sha/sha_locl.h for details. */
 
297
        unsigned MD32_REG_T     XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7,
 
298
                                XX8, XX9,XX10,XX11,XX12,XX13,XX14,XX15;
 
299
# define X(i)   XX##i
 
300
#else
 
301
        RIPEMD160_LONG  XX[16];
 
302
# define X(i)   XX[i]
 
303
#endif
 
304
 
 
305
        for (;num--;)
 
306
                {
 
307
 
 
308
        A=ctx->A; B=ctx->B; C=ctx->C; D=ctx->D; E=ctx->E;
 
309
 
 
310
        HOST_c2l(data,l); X( 0)=l;      HOST_c2l(data,l); X( 1)=l;
 
311
        RIP1(A,B,C,D,E,WL00,SL00);      HOST_c2l(data,l); X( 2)=l;
 
312
        RIP1(E,A,B,C,D,WL01,SL01);      HOST_c2l(data,l); X( 3)=l;
 
313
        RIP1(D,E,A,B,C,WL02,SL02);      HOST_c2l(data,l); X( 4)=l;
 
314
        RIP1(C,D,E,A,B,WL03,SL03);      HOST_c2l(data,l); X( 5)=l;
 
315
        RIP1(B,C,D,E,A,WL04,SL04);      HOST_c2l(data,l); X( 6)=l;
 
316
        RIP1(A,B,C,D,E,WL05,SL05);      HOST_c2l(data,l); X( 7)=l;
 
317
        RIP1(E,A,B,C,D,WL06,SL06);      HOST_c2l(data,l); X( 8)=l;
 
318
        RIP1(D,E,A,B,C,WL07,SL07);      HOST_c2l(data,l); X( 9)=l;
 
319
        RIP1(C,D,E,A,B,WL08,SL08);      HOST_c2l(data,l); X(10)=l;
 
320
        RIP1(B,C,D,E,A,WL09,SL09);      HOST_c2l(data,l); X(11)=l;
 
321
        RIP1(A,B,C,D,E,WL10,SL10);      HOST_c2l(data,l); X(12)=l;
 
322
        RIP1(E,A,B,C,D,WL11,SL11);      HOST_c2l(data,l); X(13)=l;
 
323
        RIP1(D,E,A,B,C,WL12,SL12);      HOST_c2l(data,l); X(14)=l;
 
324
        RIP1(C,D,E,A,B,WL13,SL13);      HOST_c2l(data,l); X(15)=l;
 
325
        RIP1(B,C,D,E,A,WL14,SL14);
 
326
        RIP1(A,B,C,D,E,WL15,SL15);
 
327
 
 
328
        RIP2(E,A,B,C,D,WL16,SL16,KL1);
 
329
        RIP2(D,E,A,B,C,WL17,SL17,KL1);
 
330
        RIP2(C,D,E,A,B,WL18,SL18,KL1);
 
331
        RIP2(B,C,D,E,A,WL19,SL19,KL1);
 
332
        RIP2(A,B,C,D,E,WL20,SL20,KL1);
 
333
        RIP2(E,A,B,C,D,WL21,SL21,KL1);
 
334
        RIP2(D,E,A,B,C,WL22,SL22,KL1);
 
335
        RIP2(C,D,E,A,B,WL23,SL23,KL1);
 
336
        RIP2(B,C,D,E,A,WL24,SL24,KL1);
 
337
        RIP2(A,B,C,D,E,WL25,SL25,KL1);
 
338
        RIP2(E,A,B,C,D,WL26,SL26,KL1);
 
339
        RIP2(D,E,A,B,C,WL27,SL27,KL1);
 
340
        RIP2(C,D,E,A,B,WL28,SL28,KL1);
 
341
        RIP2(B,C,D,E,A,WL29,SL29,KL1);
 
342
        RIP2(A,B,C,D,E,WL30,SL30,KL1);
 
343
        RIP2(E,A,B,C,D,WL31,SL31,KL1);
 
344
 
 
345
        RIP3(D,E,A,B,C,WL32,SL32,KL2);
 
346
        RIP3(C,D,E,A,B,WL33,SL33,KL2);
 
347
        RIP3(B,C,D,E,A,WL34,SL34,KL2);
 
348
        RIP3(A,B,C,D,E,WL35,SL35,KL2);
 
349
        RIP3(E,A,B,C,D,WL36,SL36,KL2);
 
350
        RIP3(D,E,A,B,C,WL37,SL37,KL2);
 
351
        RIP3(C,D,E,A,B,WL38,SL38,KL2);
 
352
        RIP3(B,C,D,E,A,WL39,SL39,KL2);
 
353
        RIP3(A,B,C,D,E,WL40,SL40,KL2);
 
354
        RIP3(E,A,B,C,D,WL41,SL41,KL2);
 
355
        RIP3(D,E,A,B,C,WL42,SL42,KL2);
 
356
        RIP3(C,D,E,A,B,WL43,SL43,KL2);
 
357
        RIP3(B,C,D,E,A,WL44,SL44,KL2);
 
358
        RIP3(A,B,C,D,E,WL45,SL45,KL2);
 
359
        RIP3(E,A,B,C,D,WL46,SL46,KL2);
 
360
        RIP3(D,E,A,B,C,WL47,SL47,KL2);
 
361
 
 
362
        RIP4(C,D,E,A,B,WL48,SL48,KL3);
 
363
        RIP4(B,C,D,E,A,WL49,SL49,KL3);
 
364
        RIP4(A,B,C,D,E,WL50,SL50,KL3);
 
365
        RIP4(E,A,B,C,D,WL51,SL51,KL3);
 
366
        RIP4(D,E,A,B,C,WL52,SL52,KL3);
 
367
        RIP4(C,D,E,A,B,WL53,SL53,KL3);
 
368
        RIP4(B,C,D,E,A,WL54,SL54,KL3);
 
369
        RIP4(A,B,C,D,E,WL55,SL55,KL3);
 
370
        RIP4(E,A,B,C,D,WL56,SL56,KL3);
 
371
        RIP4(D,E,A,B,C,WL57,SL57,KL3);
 
372
        RIP4(C,D,E,A,B,WL58,SL58,KL3);
 
373
        RIP4(B,C,D,E,A,WL59,SL59,KL3);
 
374
        RIP4(A,B,C,D,E,WL60,SL60,KL3);
 
375
        RIP4(E,A,B,C,D,WL61,SL61,KL3);
 
376
        RIP4(D,E,A,B,C,WL62,SL62,KL3);
 
377
        RIP4(C,D,E,A,B,WL63,SL63,KL3);
 
378
 
 
379
        RIP5(B,C,D,E,A,WL64,SL64,KL4);
 
380
        RIP5(A,B,C,D,E,WL65,SL65,KL4);
 
381
        RIP5(E,A,B,C,D,WL66,SL66,KL4);
 
382
        RIP5(D,E,A,B,C,WL67,SL67,KL4);
 
383
        RIP5(C,D,E,A,B,WL68,SL68,KL4);
 
384
        RIP5(B,C,D,E,A,WL69,SL69,KL4);
 
385
        RIP5(A,B,C,D,E,WL70,SL70,KL4);
 
386
        RIP5(E,A,B,C,D,WL71,SL71,KL4);
 
387
        RIP5(D,E,A,B,C,WL72,SL72,KL4);
 
388
        RIP5(C,D,E,A,B,WL73,SL73,KL4);
 
389
        RIP5(B,C,D,E,A,WL74,SL74,KL4);
 
390
        RIP5(A,B,C,D,E,WL75,SL75,KL4);
 
391
        RIP5(E,A,B,C,D,WL76,SL76,KL4);
 
392
        RIP5(D,E,A,B,C,WL77,SL77,KL4);
 
393
        RIP5(C,D,E,A,B,WL78,SL78,KL4);
 
394
        RIP5(B,C,D,E,A,WL79,SL79,KL4);
 
395
 
 
396
        a=A; b=B; c=C; d=D; e=E;
 
397
        /* Do other half */
 
398
        A=ctx->A; B=ctx->B; C=ctx->C; D=ctx->D; E=ctx->E;
 
399
 
 
400
        RIP5(A,B,C,D,E,WR00,SR00,KR0);
 
401
        RIP5(E,A,B,C,D,WR01,SR01,KR0);
 
402
        RIP5(D,E,A,B,C,WR02,SR02,KR0);
 
403
        RIP5(C,D,E,A,B,WR03,SR03,KR0);
 
404
        RIP5(B,C,D,E,A,WR04,SR04,KR0);
 
405
        RIP5(A,B,C,D,E,WR05,SR05,KR0);
 
406
        RIP5(E,A,B,C,D,WR06,SR06,KR0);
 
407
        RIP5(D,E,A,B,C,WR07,SR07,KR0);
 
408
        RIP5(C,D,E,A,B,WR08,SR08,KR0);
 
409
        RIP5(B,C,D,E,A,WR09,SR09,KR0);
 
410
        RIP5(A,B,C,D,E,WR10,SR10,KR0);
 
411
        RIP5(E,A,B,C,D,WR11,SR11,KR0);
 
412
        RIP5(D,E,A,B,C,WR12,SR12,KR0);
 
413
        RIP5(C,D,E,A,B,WR13,SR13,KR0);
 
414
        RIP5(B,C,D,E,A,WR14,SR14,KR0);
 
415
        RIP5(A,B,C,D,E,WR15,SR15,KR0);
 
416
 
 
417
        RIP4(E,A,B,C,D,WR16,SR16,KR1);
 
418
        RIP4(D,E,A,B,C,WR17,SR17,KR1);
 
419
        RIP4(C,D,E,A,B,WR18,SR18,KR1);
 
420
        RIP4(B,C,D,E,A,WR19,SR19,KR1);
 
421
        RIP4(A,B,C,D,E,WR20,SR20,KR1);
 
422
        RIP4(E,A,B,C,D,WR21,SR21,KR1);
 
423
        RIP4(D,E,A,B,C,WR22,SR22,KR1);
 
424
        RIP4(C,D,E,A,B,WR23,SR23,KR1);
 
425
        RIP4(B,C,D,E,A,WR24,SR24,KR1);
 
426
        RIP4(A,B,C,D,E,WR25,SR25,KR1);
 
427
        RIP4(E,A,B,C,D,WR26,SR26,KR1);
 
428
        RIP4(D,E,A,B,C,WR27,SR27,KR1);
 
429
        RIP4(C,D,E,A,B,WR28,SR28,KR1);
 
430
        RIP4(B,C,D,E,A,WR29,SR29,KR1);
 
431
        RIP4(A,B,C,D,E,WR30,SR30,KR1);
 
432
        RIP4(E,A,B,C,D,WR31,SR31,KR1);
 
433
 
 
434
        RIP3(D,E,A,B,C,WR32,SR32,KR2);
 
435
        RIP3(C,D,E,A,B,WR33,SR33,KR2);
 
436
        RIP3(B,C,D,E,A,WR34,SR34,KR2);
 
437
        RIP3(A,B,C,D,E,WR35,SR35,KR2);
 
438
        RIP3(E,A,B,C,D,WR36,SR36,KR2);
 
439
        RIP3(D,E,A,B,C,WR37,SR37,KR2);
 
440
        RIP3(C,D,E,A,B,WR38,SR38,KR2);
 
441
        RIP3(B,C,D,E,A,WR39,SR39,KR2);
 
442
        RIP3(A,B,C,D,E,WR40,SR40,KR2);
 
443
        RIP3(E,A,B,C,D,WR41,SR41,KR2);
 
444
        RIP3(D,E,A,B,C,WR42,SR42,KR2);
 
445
        RIP3(C,D,E,A,B,WR43,SR43,KR2);
 
446
        RIP3(B,C,D,E,A,WR44,SR44,KR2);
 
447
        RIP3(A,B,C,D,E,WR45,SR45,KR2);
 
448
        RIP3(E,A,B,C,D,WR46,SR46,KR2);
 
449
        RIP3(D,E,A,B,C,WR47,SR47,KR2);
 
450
 
 
451
        RIP2(C,D,E,A,B,WR48,SR48,KR3);
 
452
        RIP2(B,C,D,E,A,WR49,SR49,KR3);
 
453
        RIP2(A,B,C,D,E,WR50,SR50,KR3);
 
454
        RIP2(E,A,B,C,D,WR51,SR51,KR3);
 
455
        RIP2(D,E,A,B,C,WR52,SR52,KR3);
 
456
        RIP2(C,D,E,A,B,WR53,SR53,KR3);
 
457
        RIP2(B,C,D,E,A,WR54,SR54,KR3);
 
458
        RIP2(A,B,C,D,E,WR55,SR55,KR3);
 
459
        RIP2(E,A,B,C,D,WR56,SR56,KR3);
 
460
        RIP2(D,E,A,B,C,WR57,SR57,KR3);
 
461
        RIP2(C,D,E,A,B,WR58,SR58,KR3);
 
462
        RIP2(B,C,D,E,A,WR59,SR59,KR3);
 
463
        RIP2(A,B,C,D,E,WR60,SR60,KR3);
 
464
        RIP2(E,A,B,C,D,WR61,SR61,KR3);
 
465
        RIP2(D,E,A,B,C,WR62,SR62,KR3);
 
466
        RIP2(C,D,E,A,B,WR63,SR63,KR3);
 
467
 
 
468
        RIP1(B,C,D,E,A,WR64,SR64);
 
469
        RIP1(A,B,C,D,E,WR65,SR65);
 
470
        RIP1(E,A,B,C,D,WR66,SR66);
 
471
        RIP1(D,E,A,B,C,WR67,SR67);
 
472
        RIP1(C,D,E,A,B,WR68,SR68);
 
473
        RIP1(B,C,D,E,A,WR69,SR69);
 
474
        RIP1(A,B,C,D,E,WR70,SR70);
 
475
        RIP1(E,A,B,C,D,WR71,SR71);
 
476
        RIP1(D,E,A,B,C,WR72,SR72);
 
477
        RIP1(C,D,E,A,B,WR73,SR73);
 
478
        RIP1(B,C,D,E,A,WR74,SR74);
 
479
        RIP1(A,B,C,D,E,WR75,SR75);
 
480
        RIP1(E,A,B,C,D,WR76,SR76);
 
481
        RIP1(D,E,A,B,C,WR77,SR77);
 
482
        RIP1(C,D,E,A,B,WR78,SR78);
 
483
        RIP1(B,C,D,E,A,WR79,SR79);
 
484
 
 
485
        D     =ctx->B+c+D;
 
486
        ctx->B=ctx->C+d+E;
 
487
        ctx->C=ctx->D+e+A;
 
488
        ctx->D=ctx->E+a+B;
 
489
        ctx->E=ctx->A+b+C;
 
490
        ctx->A=D;
 
491
 
 
492
                }
 
493
        }
 
494
#endif