Coverage Report

Created: 2024-06-28 06:39

/src/nettle-with-mini-gmp/ripemd160-compress.c
Line
Count
Source
1
/* ripemd160-compress.c
2
3
   RIPE-MD160 (Transform function)
4
5
   Copyright (C) 1998, 2001, 2002, 2003 Free Software Foundation, Inc.
6
7
   This file is part of GNU Nettle.
8
9
   GNU Nettle is free software: you can redistribute it and/or
10
   modify it under the terms of either:
11
12
     * the GNU Lesser General Public License as published by the Free
13
       Software Foundation; either version 3 of the License, or (at your
14
       option) any later version.
15
16
   or
17
18
     * the GNU General Public License as published by the Free
19
       Software Foundation; either version 2 of the License, or (at your
20
       option) any later version.
21
22
   or both in parallel, as here.
23
24
   GNU Nettle is distributed in the hope that it will be useful,
25
   but WITHOUT ANY WARRANTY; without even the implied warranty of
26
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
27
   General Public License for more details.
28
29
   You should have received copies of the GNU General Public License and
30
   the GNU Lesser General Public License along with this program.  If
31
   not, see http://www.gnu.org/licenses/.
32
*/
33
34
/* Ported from libgcrypt by Andres Mejia <mcitadel@gmail.com> */
35
36
#if HAVE_CONFIG_H
37
# include "config.h"
38
#endif
39
40
#include <string.h>
41
42
#include "ripemd160.h"
43
#include "ripemd160-internal.h"
44
45
#include "macros.h"
46
47
48
/****************
49
 * Transform the message X which consists of 16 32-bit-words
50
 */
51
void
52
_nettle_ripemd160_compress(uint32_t *state, const uint8_t *data)
53
29.4k
{
54
29.4k
  register uint32_t a,b,c,d,e;
55
29.4k
  uint32_t aa,bb,cc,dd,ee,t;
56
29.4k
  uint32_t x[16];
57
58
#ifdef WORDS_BIGENDIAN
59
  {
60
    int i;
61
    for (i=0; i < 16; i++, data += 4 )
62
      x[i] = LE_READ_UINT32(data);
63
  }
64
#else
65
  /* memcpy seems a bit faster. Benchmarked on Intel SU4100, it makes
66
     the entire update function roughly 6% faster. */
67
29.4k
  memcpy(x, data, sizeof(x));
68
29.4k
#endif
69
70
71
29.4k
#define K0  0x00000000
72
29.4k
#define K1  0x5A827999
73
29.4k
#define K2  0x6ED9EBA1
74
29.4k
#define K3  0x8F1BBCDC
75
29.4k
#define K4  0xA953FD4E
76
29.4k
#define KK0 0x50A28BE6
77
29.4k
#define KK1 0x5C4DD124
78
29.4k
#define KK2 0x6D703EF3
79
29.4k
#define KK3 0x7A6D76E9
80
29.4k
#define KK4 0x00000000
81
943k
#define F0(x,y,z)   ( (x) ^ (y) ^ (z) )
82
943k
#define F1(x,y,z)   ( ((x) & (y)) | (~(x) & (z)) )
83
943k
#define F2(x,y,z)   ( ((x) | ~(y)) ^ (z) )
84
943k
#define F3(x,y,z)   ( ((x) & (z)) | ((y) & ~(z)) )
85
943k
#define F4(x,y,z)   ( (x) ^ ((y) | ~(z)) )
86
4.71M
#define R(a,b,c,d,e,f,k,r,s) do { t = a + f(b,c,d) + k + x[r]; \
87
4.71M
          a = ROTL32(s,t) + e;        \
88
4.71M
          c = ROTL32(10,c);         \
89
4.71M
        } while(0)
90
91
  /* left lane */
92
29.4k
  a = state[0];
93
29.4k
  b = state[1];
94
29.4k
  c = state[2];
95
29.4k
  d = state[3];
96
29.4k
  e = state[4];
97
29.4k
  R( a, b, c, d, e, F0, K0,  0, 11 );
98
29.4k
  R( e, a, b, c, d, F0, K0,  1, 14 );
99
29.4k
  R( d, e, a, b, c, F0, K0,  2, 15 );
100
29.4k
  R( c, d, e, a, b, F0, K0,  3, 12 );
101
29.4k
  R( b, c, d, e, a, F0, K0,  4,  5 );
102
29.4k
  R( a, b, c, d, e, F0, K0,  5,  8 );
103
29.4k
  R( e, a, b, c, d, F0, K0,  6,  7 );
104
29.4k
  R( d, e, a, b, c, F0, K0,  7,  9 );
105
29.4k
  R( c, d, e, a, b, F0, K0,  8, 11 );
106
29.4k
  R( b, c, d, e, a, F0, K0,  9, 13 );
107
29.4k
  R( a, b, c, d, e, F0, K0, 10, 14 );
108
29.4k
  R( e, a, b, c, d, F0, K0, 11, 15 );
109
29.4k
  R( d, e, a, b, c, F0, K0, 12,  6 );
110
29.4k
  R( c, d, e, a, b, F0, K0, 13,  7 );
111
29.4k
  R( b, c, d, e, a, F0, K0, 14,  9 );
112
29.4k
  R( a, b, c, d, e, F0, K0, 15,  8 );
113
29.4k
  R( e, a, b, c, d, F1, K1,  7,  7 );
114
29.4k
  R( d, e, a, b, c, F1, K1,  4,  6 );
115
29.4k
  R( c, d, e, a, b, F1, K1, 13,  8 );
116
29.4k
  R( b, c, d, e, a, F1, K1,  1, 13 );
117
29.4k
  R( a, b, c, d, e, F1, K1, 10, 11 );
118
29.4k
  R( e, a, b, c, d, F1, K1,  6,  9 );
119
29.4k
  R( d, e, a, b, c, F1, K1, 15,  7 );
120
29.4k
  R( c, d, e, a, b, F1, K1,  3, 15 );
121
29.4k
  R( b, c, d, e, a, F1, K1, 12,  7 );
122
29.4k
  R( a, b, c, d, e, F1, K1,  0, 12 );
123
29.4k
  R( e, a, b, c, d, F1, K1,  9, 15 );
124
29.4k
  R( d, e, a, b, c, F1, K1,  5,  9 );
125
29.4k
  R( c, d, e, a, b, F1, K1,  2, 11 );
126
29.4k
  R( b, c, d, e, a, F1, K1, 14,  7 );
127
29.4k
  R( a, b, c, d, e, F1, K1, 11, 13 );
128
29.4k
  R( e, a, b, c, d, F1, K1,  8, 12 );
129
29.4k
  R( d, e, a, b, c, F2, K2,  3, 11 );
130
29.4k
  R( c, d, e, a, b, F2, K2, 10, 13 );
131
29.4k
  R( b, c, d, e, a, F2, K2, 14,  6 );
132
29.4k
  R( a, b, c, d, e, F2, K2,  4,  7 );
133
29.4k
  R( e, a, b, c, d, F2, K2,  9, 14 );
134
29.4k
  R( d, e, a, b, c, F2, K2, 15,  9 );
135
29.4k
  R( c, d, e, a, b, F2, K2,  8, 13 );
136
29.4k
  R( b, c, d, e, a, F2, K2,  1, 15 );
137
29.4k
  R( a, b, c, d, e, F2, K2,  2, 14 );
138
29.4k
  R( e, a, b, c, d, F2, K2,  7,  8 );
139
29.4k
  R( d, e, a, b, c, F2, K2,  0, 13 );
140
29.4k
  R( c, d, e, a, b, F2, K2,  6,  6 );
141
29.4k
  R( b, c, d, e, a, F2, K2, 13,  5 );
142
29.4k
  R( a, b, c, d, e, F2, K2, 11, 12 );
143
29.4k
  R( e, a, b, c, d, F2, K2,  5,  7 );
144
29.4k
  R( d, e, a, b, c, F2, K2, 12,  5 );
145
29.4k
  R( c, d, e, a, b, F3, K3,  1, 11 );
146
29.4k
  R( b, c, d, e, a, F3, K3,  9, 12 );
147
29.4k
  R( a, b, c, d, e, F3, K3, 11, 14 );
148
29.4k
  R( e, a, b, c, d, F3, K3, 10, 15 );
149
29.4k
  R( d, e, a, b, c, F3, K3,  0, 14 );
150
29.4k
  R( c, d, e, a, b, F3, K3,  8, 15 );
151
29.4k
  R( b, c, d, e, a, F3, K3, 12,  9 );
152
29.4k
  R( a, b, c, d, e, F3, K3,  4,  8 );
153
29.4k
  R( e, a, b, c, d, F3, K3, 13,  9 );
154
29.4k
  R( d, e, a, b, c, F3, K3,  3, 14 );
155
29.4k
  R( c, d, e, a, b, F3, K3,  7,  5 );
156
29.4k
  R( b, c, d, e, a, F3, K3, 15,  6 );
157
29.4k
  R( a, b, c, d, e, F3, K3, 14,  8 );
158
29.4k
  R( e, a, b, c, d, F3, K3,  5,  6 );
159
29.4k
  R( d, e, a, b, c, F3, K3,  6,  5 );
160
29.4k
  R( c, d, e, a, b, F3, K3,  2, 12 );
161
29.4k
  R( b, c, d, e, a, F4, K4,  4,  9 );
162
29.4k
  R( a, b, c, d, e, F4, K4,  0, 15 );
163
29.4k
  R( e, a, b, c, d, F4, K4,  5,  5 );
164
29.4k
  R( d, e, a, b, c, F4, K4,  9, 11 );
165
29.4k
  R( c, d, e, a, b, F4, K4,  7,  6 );
166
29.4k
  R( b, c, d, e, a, F4, K4, 12,  8 );
167
29.4k
  R( a, b, c, d, e, F4, K4,  2, 13 );
168
29.4k
  R( e, a, b, c, d, F4, K4, 10, 12 );
169
29.4k
  R( d, e, a, b, c, F4, K4, 14,  5 );
170
29.4k
  R( c, d, e, a, b, F4, K4,  1, 12 );
171
29.4k
  R( b, c, d, e, a, F4, K4,  3, 13 );
172
29.4k
  R( a, b, c, d, e, F4, K4,  8, 14 );
173
29.4k
  R( e, a, b, c, d, F4, K4, 11, 11 );
174
29.4k
  R( d, e, a, b, c, F4, K4,  6,  8 );
175
29.4k
  R( c, d, e, a, b, F4, K4, 15,  5 );
176
29.4k
  R( b, c, d, e, a, F4, K4, 13,  6 );
177
178
29.4k
  aa = a; bb = b; cc = c; dd = d; ee = e;
179
180
  /* right lane */
181
29.4k
  a = state[0];
182
29.4k
  b = state[1];
183
29.4k
  c = state[2];
184
29.4k
  d = state[3];
185
29.4k
  e = state[4];
186
29.4k
  R( a, b, c, d, e, F4, KK0,  5,  8);
187
29.4k
  R( e, a, b, c, d, F4, KK0, 14,  9);
188
29.4k
  R( d, e, a, b, c, F4, KK0,  7,  9);
189
29.4k
  R( c, d, e, a, b, F4, KK0,  0, 11);
190
29.4k
  R( b, c, d, e, a, F4, KK0,  9, 13);
191
29.4k
  R( a, b, c, d, e, F4, KK0,  2, 15);
192
29.4k
  R( e, a, b, c, d, F4, KK0, 11, 15);
193
29.4k
  R( d, e, a, b, c, F4, KK0,  4,  5);
194
29.4k
  R( c, d, e, a, b, F4, KK0, 13,  7);
195
29.4k
  R( b, c, d, e, a, F4, KK0,  6,  7);
196
29.4k
  R( a, b, c, d, e, F4, KK0, 15,  8);
197
29.4k
  R( e, a, b, c, d, F4, KK0,  8, 11);
198
29.4k
  R( d, e, a, b, c, F4, KK0,  1, 14);
199
29.4k
  R( c, d, e, a, b, F4, KK0, 10, 14);
200
29.4k
  R( b, c, d, e, a, F4, KK0,  3, 12);
201
29.4k
  R( a, b, c, d, e, F4, KK0, 12,  6);
202
29.4k
  R( e, a, b, c, d, F3, KK1,  6,  9);
203
29.4k
  R( d, e, a, b, c, F3, KK1, 11, 13);
204
29.4k
  R( c, d, e, a, b, F3, KK1,  3, 15);
205
29.4k
  R( b, c, d, e, a, F3, KK1,  7,  7);
206
29.4k
  R( a, b, c, d, e, F3, KK1,  0, 12);
207
29.4k
  R( e, a, b, c, d, F3, KK1, 13,  8);
208
29.4k
  R( d, e, a, b, c, F3, KK1,  5,  9);
209
29.4k
  R( c, d, e, a, b, F3, KK1, 10, 11);
210
29.4k
  R( b, c, d, e, a, F3, KK1, 14,  7);
211
29.4k
  R( a, b, c, d, e, F3, KK1, 15,  7);
212
29.4k
  R( e, a, b, c, d, F3, KK1,  8, 12);
213
29.4k
  R( d, e, a, b, c, F3, KK1, 12,  7);
214
29.4k
  R( c, d, e, a, b, F3, KK1,  4,  6);
215
29.4k
  R( b, c, d, e, a, F3, KK1,  9, 15);
216
29.4k
  R( a, b, c, d, e, F3, KK1,  1, 13);
217
29.4k
  R( e, a, b, c, d, F3, KK1,  2, 11);
218
29.4k
  R( d, e, a, b, c, F2, KK2, 15,  9);
219
29.4k
  R( c, d, e, a, b, F2, KK2,  5,  7);
220
29.4k
  R( b, c, d, e, a, F2, KK2,  1, 15);
221
29.4k
  R( a, b, c, d, e, F2, KK2,  3, 11);
222
29.4k
  R( e, a, b, c, d, F2, KK2,  7,  8);
223
29.4k
  R( d, e, a, b, c, F2, KK2, 14,  6);
224
29.4k
  R( c, d, e, a, b, F2, KK2,  6,  6);
225
29.4k
  R( b, c, d, e, a, F2, KK2,  9, 14);
226
29.4k
  R( a, b, c, d, e, F2, KK2, 11, 12);
227
29.4k
  R( e, a, b, c, d, F2, KK2,  8, 13);
228
29.4k
  R( d, e, a, b, c, F2, KK2, 12,  5);
229
29.4k
  R( c, d, e, a, b, F2, KK2,  2, 14);
230
29.4k
  R( b, c, d, e, a, F2, KK2, 10, 13);
231
29.4k
  R( a, b, c, d, e, F2, KK2,  0, 13);
232
29.4k
  R( e, a, b, c, d, F2, KK2,  4,  7);
233
29.4k
  R( d, e, a, b, c, F2, KK2, 13,  5);
234
29.4k
  R( c, d, e, a, b, F1, KK3,  8, 15);
235
29.4k
  R( b, c, d, e, a, F1, KK3,  6,  5);
236
29.4k
  R( a, b, c, d, e, F1, KK3,  4,  8);
237
29.4k
  R( e, a, b, c, d, F1, KK3,  1, 11);
238
29.4k
  R( d, e, a, b, c, F1, KK3,  3, 14);
239
29.4k
  R( c, d, e, a, b, F1, KK3, 11, 14);
240
29.4k
  R( b, c, d, e, a, F1, KK3, 15,  6);
241
29.4k
  R( a, b, c, d, e, F1, KK3,  0, 14);
242
29.4k
  R( e, a, b, c, d, F1, KK3,  5,  6);
243
29.4k
  R( d, e, a, b, c, F1, KK3, 12,  9);
244
29.4k
  R( c, d, e, a, b, F1, KK3,  2, 12);
245
29.4k
  R( b, c, d, e, a, F1, KK3, 13,  9);
246
29.4k
  R( a, b, c, d, e, F1, KK3,  9, 12);
247
29.4k
  R( e, a, b, c, d, F1, KK3,  7,  5);
248
29.4k
  R( d, e, a, b, c, F1, KK3, 10, 15);
249
29.4k
  R( c, d, e, a, b, F1, KK3, 14,  8);
250
29.4k
  R( b, c, d, e, a, F0, KK4, 12,  8);
251
29.4k
  R( a, b, c, d, e, F0, KK4, 15,  5);
252
29.4k
  R( e, a, b, c, d, F0, KK4, 10, 12);
253
29.4k
  R( d, e, a, b, c, F0, KK4,  4,  9);
254
29.4k
  R( c, d, e, a, b, F0, KK4,  1, 12);
255
29.4k
  R( b, c, d, e, a, F0, KK4,  5,  5);
256
29.4k
  R( a, b, c, d, e, F0, KK4,  8, 14);
257
29.4k
  R( e, a, b, c, d, F0, KK4,  7,  6);
258
29.4k
  R( d, e, a, b, c, F0, KK4,  6,  8);
259
29.4k
  R( c, d, e, a, b, F0, KK4,  2, 13);
260
29.4k
  R( b, c, d, e, a, F0, KK4, 13,  6);
261
29.4k
  R( a, b, c, d, e, F0, KK4, 14,  5);
262
29.4k
  R( e, a, b, c, d, F0, KK4,  0, 15);
263
29.4k
  R( d, e, a, b, c, F0, KK4,  3, 13);
264
29.4k
  R( c, d, e, a, b, F0, KK4,  9, 11);
265
29.4k
  R( b, c, d, e, a, F0, KK4, 11, 11);
266
267
268
29.4k
  t    = state[1] + d + cc;
269
29.4k
  state[1] = state[2] + e + dd;
270
29.4k
  state[2] = state[3] + a + ee;
271
29.4k
  state[3] = state[4] + b + aa;
272
29.4k
  state[4] = state[0] + c + bb;
273
29.4k
  state[0] = t;
274
29.4k
}