Home | History | Annotate | Download | only in ripemd
      1 /* Copyright (C) 1995-1998 Eric Young (eay (at) cryptsoft.com)
      2  * All rights reserved.
      3  *
      4  * This package is an SSL implementation written
      5  * by Eric Young (eay (at) 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 (at) 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 (at) 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 (at) 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 (at) 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