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