OpenSSL
1.0.1c
Main Page
Classes
Files
File List
File Members
All
Classes
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
crypto
ripemd
rmd_dgst.c
Go to the documentation of this file.
1
/* crypto/ripemd/rmd_dgst.c */
2
/* Copyright (C) 1995-1998 Eric Young (
[email protected]
)
3
* All rights reserved.
4
*
5
* This package is an SSL implementation written
6
* by Eric Young (
[email protected]
).
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 (
[email protected]
).
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 (
[email protected]
)"
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 (
[email protected]
)"
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
#include <
openssl/crypto.h
>
63
64
const
char
RMD160_version
[]=
"RIPE-MD160"
OPENSSL_VERSION_PTEXT
;
65
66
# ifdef RMD160_ASM
67
void
ripemd160_block_x86
(
RIPEMD160_CTX
*c,
unsigned
long
*
p
,
size_t
num
);
68
# define ripemd160_block ripemd160_block_x86
69
# else
70
void
ripemd160_block
(
RIPEMD160_CTX
*c,
unsigned
long
*
p
,
size_t
num
);
71
# endif
72
73
fips_md_init
(
RIPEMD160
)
74
{
75
memset (
c
,0,
sizeof
(*
c
));
76
c
->A=
RIPEMD160_A
;
77
c
->B=
RIPEMD160_B
;
78
c
->C=
RIPEMD160_C
;
79
c
->D=
RIPEMD160_D
;
80
c
->E=
RIPEMD160_E
;
81
return
1;
82
}
83
84
#ifndef ripemd160_block_data_order
85
#ifdef X
86
#undef X
87
#endif
88
void
ripemd160_block_data_order
(
RIPEMD160_CTX
*ctx,
const
void
*
p
,
size_t
num
)
89
{
90
const
unsigned
char
*
data
=
p
;
91
register
unsigned
MD32_REG_T
A,
B
,C,D,E;
92
unsigned
MD32_REG_T
a
,
b
,
c
,d,
e
,l;
93
#ifndef MD32_XARRAY
94
/* See comment in crypto/sha/sha_locl.h for details. */
95
unsigned
MD32_REG_T
XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7,
96
XX8, XX9,XX10,XX11,XX12,XX13,XX14,XX15;
97
# define X(i) XX##i
98
#else
99
RIPEMD160_LONG
XX[16];
100
# define X(i) XX[i]
101
#endif
102
103
for
(;num--;)
104
{
105
106
A=ctx->
A
; B=ctx->
B
; C=ctx->
C
; D=ctx->
D
; E=ctx->
E
;
107
108
HOST_c2l(data,l);
X
( 0)=l; HOST_c2l(data,l);
X
( 1)=l;
109
RIP1
(A,B,C,D,E,
WL00
,
SL00
); HOST_c2l(data,l);
X
( 2)=l;
110
RIP1
(E,A,B,C,D,
WL01
,
SL01
); HOST_c2l(data,l);
X
( 3)=l;
111
RIP1
(D,E,A,B,C,
WL02
,
SL02
); HOST_c2l(data,l);
X
( 4)=l;
112
RIP1
(C,D,E,A,B,
WL03
,
SL03
); HOST_c2l(data,l);
X
( 5)=l;
113
RIP1
(B,C,D,E,A,
WL04
,
SL04
); HOST_c2l(data,l);
X
( 6)=l;
114
RIP1
(A,B,C,D,E,
WL05
,
SL05
); HOST_c2l(data,l);
X
( 7)=l;
115
RIP1
(E,A,B,C,D,
WL06
,
SL06
); HOST_c2l(data,l);
X
( 8)=l;
116
RIP1
(D,E,A,B,C,
WL07
,
SL07
); HOST_c2l(data,l);
X
( 9)=l;
117
RIP1
(C,D,E,A,B,
WL08
,
SL08
); HOST_c2l(data,l);
X
(10)=l;
118
RIP1
(B,C,D,E,A,
WL09
,
SL09
); HOST_c2l(data,l);
X
(11)=l;
119
RIP1
(A,B,C,D,E,
WL10
,
SL10
); HOST_c2l(data,l);
X
(12)=l;
120
RIP1
(E,A,B,C,D,
WL11
,
SL11
); HOST_c2l(data,l);
X
(13)=l;
121
RIP1
(D,E,A,B,C,
WL12
,
SL12
); HOST_c2l(data,l);
X
(14)=l;
122
RIP1
(C,D,E,A,B,
WL13
,
SL13
); HOST_c2l(data,l);
X
(15)=l;
123
RIP1
(B,C,D,E,A,
WL14
,
SL14
);
124
RIP1
(A,B,C,D,E,
WL15
,
SL15
);
125
126
RIP2
(E,A,B,C,D,
WL16
,
SL16
,
KL1
);
127
RIP2
(D,E,A,B,C,
WL17
,
SL17
,
KL1
);
128
RIP2
(C,D,E,A,B,
WL18
,
SL18
,
KL1
);
129
RIP2
(B,C,D,E,A,
WL19
,
SL19
,
KL1
);
130
RIP2
(A,B,C,D,E,
WL20
,
SL20
,
KL1
);
131
RIP2
(E,A,B,C,D,
WL21
,
SL21
,
KL1
);
132
RIP2
(D,E,A,B,C,
WL22
,
SL22
,
KL1
);
133
RIP2
(C,D,E,A,B,
WL23
,
SL23
,
KL1
);
134
RIP2
(B,C,D,E,A,
WL24
,
SL24
,
KL1
);
135
RIP2
(A,B,C,D,E,
WL25
,
SL25
,
KL1
);
136
RIP2
(E,A,B,C,D,
WL26
,
SL26
,
KL1
);
137
RIP2
(D,E,A,B,C,
WL27
,
SL27
,
KL1
);
138
RIP2
(C,D,E,A,B,
WL28
,
SL28
,
KL1
);
139
RIP2
(B,C,D,E,A,
WL29
,
SL29
,
KL1
);
140
RIP2
(A,B,C,D,E,
WL30
,
SL30
,
KL1
);
141
RIP2
(E,A,B,C,D,
WL31
,
SL31
,
KL1
);
142
143
RIP3
(D,E,A,B,C,
WL32
,
SL32
,
KL2
);
144
RIP3
(C,D,E,A,B,
WL33
,
SL33
,
KL2
);
145
RIP3
(B,C,D,E,A,
WL34
,
SL34
,
KL2
);
146
RIP3
(A,B,C,D,E,
WL35
,
SL35
,
KL2
);
147
RIP3
(E,A,B,C,D,
WL36
,
SL36
,
KL2
);
148
RIP3
(D,E,A,B,C,
WL37
,
SL37
,
KL2
);
149
RIP3
(C,D,E,A,B,
WL38
,
SL38
,
KL2
);
150
RIP3
(B,C,D,E,A,
WL39
,
SL39
,
KL2
);
151
RIP3
(A,B,C,D,E,
WL40
,
SL40
,
KL2
);
152
RIP3
(E,A,B,C,D,
WL41
,
SL41
,
KL2
);
153
RIP3
(D,E,A,B,C,
WL42
,
SL42
,
KL2
);
154
RIP3
(C,D,E,A,B,
WL43
,
SL43
,
KL2
);
155
RIP3
(B,C,D,E,A,
WL44
,
SL44
,
KL2
);
156
RIP3
(A,B,C,D,E,
WL45
,
SL45
,
KL2
);
157
RIP3
(E,A,B,C,D,
WL46
,
SL46
,
KL2
);
158
RIP3
(D,E,A,B,C,
WL47
,
SL47
,
KL2
);
159
160
RIP4
(C,D,E,A,B,
WL48
,
SL48
,
KL3
);
161
RIP4
(B,C,D,E,A,
WL49
,
SL49
,
KL3
);
162
RIP4
(A,B,C,D,E,
WL50
,
SL50
,
KL3
);
163
RIP4
(E,A,B,C,D,
WL51
,
SL51
,
KL3
);
164
RIP4
(D,E,A,B,C,
WL52
,
SL52
,
KL3
);
165
RIP4
(C,D,E,A,B,
WL53
,
SL53
,
KL3
);
166
RIP4
(B,C,D,E,A,
WL54
,
SL54
,
KL3
);
167
RIP4
(A,B,C,D,E,
WL55
,
SL55
,
KL3
);
168
RIP4
(E,A,B,C,D,
WL56
,
SL56
,
KL3
);
169
RIP4
(D,E,A,B,C,
WL57
,
SL57
,
KL3
);
170
RIP4
(C,D,E,A,B,
WL58
,
SL58
,
KL3
);
171
RIP4
(B,C,D,E,A,
WL59
,
SL59
,
KL3
);
172
RIP4
(A,B,C,D,E,
WL60
,
SL60
,
KL3
);
173
RIP4
(E,A,B,C,D,
WL61
,
SL61
,
KL3
);
174
RIP4
(D,E,A,B,C,
WL62
,
SL62
,
KL3
);
175
RIP4
(C,D,E,A,B,
WL63
,
SL63
,
KL3
);
176
177
RIP5
(B,C,D,E,A,
WL64
,
SL64
,
KL4
);
178
RIP5
(A,B,C,D,E,
WL65
,
SL65
,
KL4
);
179
RIP5
(E,A,B,C,D,
WL66
,
SL66
,
KL4
);
180
RIP5
(D,E,A,B,C,
WL67
,
SL67
,
KL4
);
181
RIP5
(C,D,E,A,B,
WL68
,
SL68
,
KL4
);
182
RIP5
(B,C,D,E,A,
WL69
,
SL69
,
KL4
);
183
RIP5
(A,B,C,D,E,
WL70
,
SL70
,
KL4
);
184
RIP5
(E,A,B,C,D,
WL71
,
SL71
,
KL4
);
185
RIP5
(D,E,A,B,C,
WL72
,
SL72
,
KL4
);
186
RIP5
(C,D,E,A,B,
WL73
,
SL73
,
KL4
);
187
RIP5
(B,C,D,E,A,
WL74
,
SL74
,
KL4
);
188
RIP5
(A,B,C,D,E,
WL75
,
SL75
,
KL4
);
189
RIP5
(E,A,B,C,D,
WL76
,
SL76
,
KL4
);
190
RIP5
(D,E,A,B,C,
WL77
,
SL77
,
KL4
);
191
RIP5
(C,D,E,A,B,
WL78
,
SL78
,
KL4
);
192
RIP5
(B,C,D,E,A,
WL79
,
SL79
,
KL4
);
193
194
a=A; b=
B
; c=C; d=D; e=E;
195
/* Do other half */
196
A=ctx->
A
; B=ctx->
B
; C=ctx->
C
; D=ctx->
D
; E=ctx->
E
;
197
198
RIP5
(A,B,C,D,E,
WR00
,
SR00
,
KR0
);
199
RIP5
(E,A,B,C,D,
WR01
,
SR01
,
KR0
);
200
RIP5
(D,E,A,B,C,
WR02
,
SR02
,
KR0
);
201
RIP5
(C,D,E,A,B,
WR03
,
SR03
,
KR0
);
202
RIP5
(B,C,D,E,A,
WR04
,
SR04
,
KR0
);
203
RIP5
(A,B,C,D,E,
WR05
,
SR05
,
KR0
);
204
RIP5
(E,A,B,C,D,
WR06
,
SR06
,
KR0
);
205
RIP5
(D,E,A,B,C,
WR07
,
SR07
,
KR0
);
206
RIP5
(C,D,E,A,B,
WR08
,
SR08
,
KR0
);
207
RIP5
(B,C,D,E,A,
WR09
,
SR09
,
KR0
);
208
RIP5
(A,B,C,D,E,
WR10
,
SR10
,
KR0
);
209
RIP5
(E,A,B,C,D,
WR11
,
SR11
,
KR0
);
210
RIP5
(D,E,A,B,C,
WR12
,
SR12
,
KR0
);
211
RIP5
(C,D,E,A,B,
WR13
,
SR13
,
KR0
);
212
RIP5
(B,C,D,E,A,
WR14
,
SR14
,
KR0
);
213
RIP5
(A,B,C,D,E,
WR15
,
SR15
,
KR0
);
214
215
RIP4
(E,A,B,C,D,
WR16
,
SR16
,
KR1
);
216
RIP4
(D,E,A,B,C,
WR17
,
SR17
,
KR1
);
217
RIP4
(C,D,E,A,B,
WR18
,
SR18
,
KR1
);
218
RIP4
(B,C,D,E,A,
WR19
,
SR19
,
KR1
);
219
RIP4
(A,B,C,D,E,
WR20
,
SR20
,
KR1
);
220
RIP4
(E,A,B,C,D,
WR21
,
SR21
,
KR1
);
221
RIP4
(D,E,A,B,C,
WR22
,
SR22
,
KR1
);
222
RIP4
(C,D,E,A,B,
WR23
,
SR23
,
KR1
);
223
RIP4
(B,C,D,E,A,
WR24
,
SR24
,
KR1
);
224
RIP4
(A,B,C,D,E,
WR25
,
SR25
,
KR1
);
225
RIP4
(E,A,B,C,D,
WR26
,
SR26
,
KR1
);
226
RIP4
(D,E,A,B,C,
WR27
,
SR27
,
KR1
);
227
RIP4
(C,D,E,A,B,
WR28
,
SR28
,
KR1
);
228
RIP4
(B,C,D,E,A,
WR29
,
SR29
,
KR1
);
229
RIP4
(A,B,C,D,E,
WR30
,
SR30
,
KR1
);
230
RIP4
(E,A,B,C,D,
WR31
,
SR31
,
KR1
);
231
232
RIP3
(D,E,A,B,C,
WR32
,
SR32
,
KR2
);
233
RIP3
(C,D,E,A,B,
WR33
,
SR33
,
KR2
);
234
RIP3
(B,C,D,E,A,
WR34
,
SR34
,
KR2
);
235
RIP3
(A,B,C,D,E,
WR35
,
SR35
,
KR2
);
236
RIP3
(E,A,B,C,D,
WR36
,
SR36
,
KR2
);
237
RIP3
(D,E,A,B,C,
WR37
,
SR37
,
KR2
);
238
RIP3
(C,D,E,A,B,
WR38
,
SR38
,
KR2
);
239
RIP3
(B,C,D,E,A,
WR39
,
SR39
,
KR2
);
240
RIP3
(A,B,C,D,E,
WR40
,
SR40
,
KR2
);
241
RIP3
(E,A,B,C,D,
WR41
,
SR41
,
KR2
);
242
RIP3
(D,E,A,B,C,
WR42
,
SR42
,
KR2
);
243
RIP3
(C,D,E,A,B,
WR43
,
SR43
,
KR2
);
244
RIP3
(B,C,D,E,A,
WR44
,
SR44
,
KR2
);
245
RIP3
(A,B,C,D,E,
WR45
,
SR45
,
KR2
);
246
RIP3
(E,A,B,C,D,
WR46
,
SR46
,
KR2
);
247
RIP3
(D,E,A,B,C,
WR47
,
SR47
,
KR2
);
248
249
RIP2
(C,D,E,A,B,
WR48
,
SR48
,
KR3
);
250
RIP2
(B,C,D,E,A,
WR49
,
SR49
,
KR3
);
251
RIP2
(A,B,C,D,E,
WR50
,
SR50
,
KR3
);
252
RIP2
(E,A,B,C,D,
WR51
,
SR51
,
KR3
);
253
RIP2
(D,E,A,B,C,
WR52
,
SR52
,
KR3
);
254
RIP2
(C,D,E,A,B,
WR53
,
SR53
,
KR3
);
255
RIP2
(B,C,D,E,A,
WR54
,
SR54
,
KR3
);
256
RIP2
(A,B,C,D,E,
WR55
,
SR55
,
KR3
);
257
RIP2
(E,A,B,C,D,
WR56
,
SR56
,
KR3
);
258
RIP2
(D,E,A,B,C,
WR57
,
SR57
,
KR3
);
259
RIP2
(C,D,E,A,B,
WR58
,
SR58
,
KR3
);
260
RIP2
(B,C,D,E,A,
WR59
,
SR59
,
KR3
);
261
RIP2
(A,B,C,D,E,
WR60
,
SR60
,
KR3
);
262
RIP2
(E,A,B,C,D,
WR61
,
SR61
,
KR3
);
263
RIP2
(D,E,A,B,C,
WR62
,
SR62
,
KR3
);
264
RIP2
(C,D,E,A,B,
WR63
,
SR63
,
KR3
);
265
266
RIP1
(B,C,D,E,A,
WR64
,
SR64
);
267
RIP1
(A,B,C,D,E,
WR65
,
SR65
);
268
RIP1
(E,A,B,C,D,
WR66
,
SR66
);
269
RIP1
(D,E,A,B,C,
WR67
,
SR67
);
270
RIP1
(C,D,E,A,B,
WR68
,
SR68
);
271
RIP1
(B,C,D,E,A,
WR69
,
SR69
);
272
RIP1
(A,B,C,D,E,
WR70
,
SR70
);
273
RIP1
(E,A,B,C,D,
WR71
,
SR71
);
274
RIP1
(D,E,A,B,C,
WR72
,
SR72
);
275
RIP1
(C,D,E,A,B,
WR73
,
SR73
);
276
RIP1
(B,C,D,E,A,
WR74
,
SR74
);
277
RIP1
(A,B,C,D,E,
WR75
,
SR75
);
278
RIP1
(E,A,B,C,D,
WR76
,
SR76
);
279
RIP1
(D,E,A,B,C,
WR77
,
SR77
);
280
RIP1
(C,D,E,A,B,
WR78
,
SR78
);
281
RIP1
(B,C,D,E,A,
WR79
,
SR79
);
282
283
D =ctx->
B
+c+D;
284
ctx->
B
=ctx->
C
+d+E;
285
ctx->
C
=ctx->
D
+e+A;
286
ctx->
D
=ctx->
E
+a+
B
;
287
ctx->
E
=ctx->
A
+b+C;
288
ctx->
A
=D;
289
290
}
291
}
292
#endif
Generated on Thu Jan 10 2013 09:53:38 for OpenSSL by
1.8.2