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
17.5k
{
54
17.5k
  register uint32_t a,b,c,d,e;
55
17.5k
  uint32_t aa,bb,cc,dd,ee,t;
56
17.5k
  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
17.5k
  memcpy(x, data, sizeof(x));
68
17.5k
#endif
69
70
71
17.5k
#define K0  0x00000000
72
17.5k
#define K1  0x5A827999
73
17.5k
#define K2  0x6ED9EBA1
74
17.5k
#define K3  0x8F1BBCDC
75
17.5k
#define K4  0xA953FD4E
76
17.5k
#define KK0 0x50A28BE6
77
17.5k
#define KK1 0x5C4DD124
78
17.5k
#define KK2 0x6D703EF3
79
17.5k
#define KK3 0x7A6D76E9
80
17.5k
#define KK4 0x00000000
81
561k
#define F0(x,y,z)   ( (x) ^ (y) ^ (z) )
82
561k
#define F1(x,y,z)   ( ((x) & (y)) | (~(x) & (z)) )
83
561k
#define F2(x,y,z)   ( ((x) | ~(y)) ^ (z) )
84
561k
#define F3(x,y,z)   ( ((x) & (z)) | ((y) & ~(z)) )
85
561k
#define F4(x,y,z)   ( (x) ^ ((y) | ~(z)) )
86
2.80M
#define R(a,b,c,d,e,f,k,r,s) do { t = a + f(b,c,d) + k + x[r]; \
87
2.80M
          a = ROTL32(s,t) + e;        \
88
2.80M
          c = ROTL32(10,c);         \
89
2.80M
        } while(0)
90
91
  /* left lane */
92
17.5k
  a = state[0];
93
17.5k
  b = state[1];
94
17.5k
  c = state[2];
95
17.5k
  d = state[3];
96
17.5k
  e = state[4];
97
17.5k
  R( a, b, c, d, e, F0, K0,  0, 11 );
98
17.5k
  R( e, a, b, c, d, F0, K0,  1, 14 );
99
17.5k
  R( d, e, a, b, c, F0, K0,  2, 15 );
100
17.5k
  R( c, d, e, a, b, F0, K0,  3, 12 );
101
17.5k
  R( b, c, d, e, a, F0, K0,  4,  5 );
102
17.5k
  R( a, b, c, d, e, F0, K0,  5,  8 );
103
17.5k
  R( e, a, b, c, d, F0, K0,  6,  7 );
104
17.5k
  R( d, e, a, b, c, F0, K0,  7,  9 );
105
17.5k
  R( c, d, e, a, b, F0, K0,  8, 11 );
106
17.5k
  R( b, c, d, e, a, F0, K0,  9, 13 );
107
17.5k
  R( a, b, c, d, e, F0, K0, 10, 14 );
108
17.5k
  R( e, a, b, c, d, F0, K0, 11, 15 );
109
17.5k
  R( d, e, a, b, c, F0, K0, 12,  6 );
110
17.5k
  R( c, d, e, a, b, F0, K0, 13,  7 );
111
17.5k
  R( b, c, d, e, a, F0, K0, 14,  9 );
112
17.5k
  R( a, b, c, d, e, F0, K0, 15,  8 );
113
17.5k
  R( e, a, b, c, d, F1, K1,  7,  7 );
114
17.5k
  R( d, e, a, b, c, F1, K1,  4,  6 );
115
17.5k
  R( c, d, e, a, b, F1, K1, 13,  8 );
116
17.5k
  R( b, c, d, e, a, F1, K1,  1, 13 );
117
17.5k
  R( a, b, c, d, e, F1, K1, 10, 11 );
118
17.5k
  R( e, a, b, c, d, F1, K1,  6,  9 );
119
17.5k
  R( d, e, a, b, c, F1, K1, 15,  7 );
120
17.5k
  R( c, d, e, a, b, F1, K1,  3, 15 );
121
17.5k
  R( b, c, d, e, a, F1, K1, 12,  7 );
122
17.5k
  R( a, b, c, d, e, F1, K1,  0, 12 );
123
17.5k
  R( e, a, b, c, d, F1, K1,  9, 15 );
124
17.5k
  R( d, e, a, b, c, F1, K1,  5,  9 );
125
17.5k
  R( c, d, e, a, b, F1, K1,  2, 11 );
126
17.5k
  R( b, c, d, e, a, F1, K1, 14,  7 );
127
17.5k
  R( a, b, c, d, e, F1, K1, 11, 13 );
128
17.5k
  R( e, a, b, c, d, F1, K1,  8, 12 );
129
17.5k
  R( d, e, a, b, c, F2, K2,  3, 11 );
130
17.5k
  R( c, d, e, a, b, F2, K2, 10, 13 );
131
17.5k
  R( b, c, d, e, a, F2, K2, 14,  6 );
132
17.5k
  R( a, b, c, d, e, F2, K2,  4,  7 );
133
17.5k
  R( e, a, b, c, d, F2, K2,  9, 14 );
134
17.5k
  R( d, e, a, b, c, F2, K2, 15,  9 );
135
17.5k
  R( c, d, e, a, b, F2, K2,  8, 13 );
136
17.5k
  R( b, c, d, e, a, F2, K2,  1, 15 );
137
17.5k
  R( a, b, c, d, e, F2, K2,  2, 14 );
138
17.5k
  R( e, a, b, c, d, F2, K2,  7,  8 );
139
17.5k
  R( d, e, a, b, c, F2, K2,  0, 13 );
140
17.5k
  R( c, d, e, a, b, F2, K2,  6,  6 );
141
17.5k
  R( b, c, d, e, a, F2, K2, 13,  5 );
142
17.5k
  R( a, b, c, d, e, F2, K2, 11, 12 );
143
17.5k
  R( e, a, b, c, d, F2, K2,  5,  7 );
144
17.5k
  R( d, e, a, b, c, F2, K2, 12,  5 );
145
17.5k
  R( c, d, e, a, b, F3, K3,  1, 11 );
146
17.5k
  R( b, c, d, e, a, F3, K3,  9, 12 );
147
17.5k
  R( a, b, c, d, e, F3, K3, 11, 14 );
148
17.5k
  R( e, a, b, c, d, F3, K3, 10, 15 );
149
17.5k
  R( d, e, a, b, c, F3, K3,  0, 14 );
150
17.5k
  R( c, d, e, a, b, F3, K3,  8, 15 );
151
17.5k
  R( b, c, d, e, a, F3, K3, 12,  9 );
152
17.5k
  R( a, b, c, d, e, F3, K3,  4,  8 );
153
17.5k
  R( e, a, b, c, d, F3, K3, 13,  9 );
154
17.5k
  R( d, e, a, b, c, F3, K3,  3, 14 );
155
17.5k
  R( c, d, e, a, b, F3, K3,  7,  5 );
156
17.5k
  R( b, c, d, e, a, F3, K3, 15,  6 );
157
17.5k
  R( a, b, c, d, e, F3, K3, 14,  8 );
158
17.5k
  R( e, a, b, c, d, F3, K3,  5,  6 );
159
17.5k
  R( d, e, a, b, c, F3, K3,  6,  5 );
160
17.5k
  R( c, d, e, a, b, F3, K3,  2, 12 );
161
17.5k
  R( b, c, d, e, a, F4, K4,  4,  9 );
162
17.5k
  R( a, b, c, d, e, F4, K4,  0, 15 );
163
17.5k
  R( e, a, b, c, d, F4, K4,  5,  5 );
164
17.5k
  R( d, e, a, b, c, F4, K4,  9, 11 );
165
17.5k
  R( c, d, e, a, b, F4, K4,  7,  6 );
166
17.5k
  R( b, c, d, e, a, F4, K4, 12,  8 );
167
17.5k
  R( a, b, c, d, e, F4, K4,  2, 13 );
168
17.5k
  R( e, a, b, c, d, F4, K4, 10, 12 );
169
17.5k
  R( d, e, a, b, c, F4, K4, 14,  5 );
170
17.5k
  R( c, d, e, a, b, F4, K4,  1, 12 );
171
17.5k
  R( b, c, d, e, a, F4, K4,  3, 13 );
172
17.5k
  R( a, b, c, d, e, F4, K4,  8, 14 );
173
17.5k
  R( e, a, b, c, d, F4, K4, 11, 11 );
174
17.5k
  R( d, e, a, b, c, F4, K4,  6,  8 );
175
17.5k
  R( c, d, e, a, b, F4, K4, 15,  5 );
176
17.5k
  R( b, c, d, e, a, F4, K4, 13,  6 );
177
178
17.5k
  aa = a; bb = b; cc = c; dd = d; ee = e;
179
180
  /* right lane */
181
17.5k
  a = state[0];
182
17.5k
  b = state[1];
183
17.5k
  c = state[2];
184
17.5k
  d = state[3];
185
17.5k
  e = state[4];
186
17.5k
  R( a, b, c, d, e, F4, KK0,  5,  8);
187
17.5k
  R( e, a, b, c, d, F4, KK0, 14,  9);
188
17.5k
  R( d, e, a, b, c, F4, KK0,  7,  9);
189
17.5k
  R( c, d, e, a, b, F4, KK0,  0, 11);
190
17.5k
  R( b, c, d, e, a, F4, KK0,  9, 13);
191
17.5k
  R( a, b, c, d, e, F4, KK0,  2, 15);
192
17.5k
  R( e, a, b, c, d, F4, KK0, 11, 15);
193
17.5k
  R( d, e, a, b, c, F4, KK0,  4,  5);
194
17.5k
  R( c, d, e, a, b, F4, KK0, 13,  7);
195
17.5k
  R( b, c, d, e, a, F4, KK0,  6,  7);
196
17.5k
  R( a, b, c, d, e, F4, KK0, 15,  8);
197
17.5k
  R( e, a, b, c, d, F4, KK0,  8, 11);
198
17.5k
  R( d, e, a, b, c, F4, KK0,  1, 14);
199
17.5k
  R( c, d, e, a, b, F4, KK0, 10, 14);
200
17.5k
  R( b, c, d, e, a, F4, KK0,  3, 12);
201
17.5k
  R( a, b, c, d, e, F4, KK0, 12,  6);
202
17.5k
  R( e, a, b, c, d, F3, KK1,  6,  9);
203
17.5k
  R( d, e, a, b, c, F3, KK1, 11, 13);
204
17.5k
  R( c, d, e, a, b, F3, KK1,  3, 15);
205
17.5k
  R( b, c, d, e, a, F3, KK1,  7,  7);
206
17.5k
  R( a, b, c, d, e, F3, KK1,  0, 12);
207
17.5k
  R( e, a, b, c, d, F3, KK1, 13,  8);
208
17.5k
  R( d, e, a, b, c, F3, KK1,  5,  9);
209
17.5k
  R( c, d, e, a, b, F3, KK1, 10, 11);
210
17.5k
  R( b, c, d, e, a, F3, KK1, 14,  7);
211
17.5k
  R( a, b, c, d, e, F3, KK1, 15,  7);
212
17.5k
  R( e, a, b, c, d, F3, KK1,  8, 12);
213
17.5k
  R( d, e, a, b, c, F3, KK1, 12,  7);
214
17.5k
  R( c, d, e, a, b, F3, KK1,  4,  6);
215
17.5k
  R( b, c, d, e, a, F3, KK1,  9, 15);
216
17.5k
  R( a, b, c, d, e, F3, KK1,  1, 13);
217
17.5k
  R( e, a, b, c, d, F3, KK1,  2, 11);
218
17.5k
  R( d, e, a, b, c, F2, KK2, 15,  9);
219
17.5k
  R( c, d, e, a, b, F2, KK2,  5,  7);
220
17.5k
  R( b, c, d, e, a, F2, KK2,  1, 15);
221
17.5k
  R( a, b, c, d, e, F2, KK2,  3, 11);
222
17.5k
  R( e, a, b, c, d, F2, KK2,  7,  8);
223
17.5k
  R( d, e, a, b, c, F2, KK2, 14,  6);
224
17.5k
  R( c, d, e, a, b, F2, KK2,  6,  6);
225
17.5k
  R( b, c, d, e, a, F2, KK2,  9, 14);
226
17.5k
  R( a, b, c, d, e, F2, KK2, 11, 12);
227
17.5k
  R( e, a, b, c, d, F2, KK2,  8, 13);
228
17.5k
  R( d, e, a, b, c, F2, KK2, 12,  5);
229
17.5k
  R( c, d, e, a, b, F2, KK2,  2, 14);
230
17.5k
  R( b, c, d, e, a, F2, KK2, 10, 13);
231
17.5k
  R( a, b, c, d, e, F2, KK2,  0, 13);
232
17.5k
  R( e, a, b, c, d, F2, KK2,  4,  7);
233
17.5k
  R( d, e, a, b, c, F2, KK2, 13,  5);
234
17.5k
  R( c, d, e, a, b, F1, KK3,  8, 15);
235
17.5k
  R( b, c, d, e, a, F1, KK3,  6,  5);
236
17.5k
  R( a, b, c, d, e, F1, KK3,  4,  8);
237
17.5k
  R( e, a, b, c, d, F1, KK3,  1, 11);
238
17.5k
  R( d, e, a, b, c, F1, KK3,  3, 14);
239
17.5k
  R( c, d, e, a, b, F1, KK3, 11, 14);
240
17.5k
  R( b, c, d, e, a, F1, KK3, 15,  6);
241
17.5k
  R( a, b, c, d, e, F1, KK3,  0, 14);
242
17.5k
  R( e, a, b, c, d, F1, KK3,  5,  6);
243
17.5k
  R( d, e, a, b, c, F1, KK3, 12,  9);
244
17.5k
  R( c, d, e, a, b, F1, KK3,  2, 12);
245
17.5k
  R( b, c, d, e, a, F1, KK3, 13,  9);
246
17.5k
  R( a, b, c, d, e, F1, KK3,  9, 12);
247
17.5k
  R( e, a, b, c, d, F1, KK3,  7,  5);
248
17.5k
  R( d, e, a, b, c, F1, KK3, 10, 15);
249
17.5k
  R( c, d, e, a, b, F1, KK3, 14,  8);
250
17.5k
  R( b, c, d, e, a, F0, KK4, 12,  8);
251
17.5k
  R( a, b, c, d, e, F0, KK4, 15,  5);
252
17.5k
  R( e, a, b, c, d, F0, KK4, 10, 12);
253
17.5k
  R( d, e, a, b, c, F0, KK4,  4,  9);
254
17.5k
  R( c, d, e, a, b, F0, KK4,  1, 12);
255
17.5k
  R( b, c, d, e, a, F0, KK4,  5,  5);
256
17.5k
  R( a, b, c, d, e, F0, KK4,  8, 14);
257
17.5k
  R( e, a, b, c, d, F0, KK4,  7,  6);
258
17.5k
  R( d, e, a, b, c, F0, KK4,  6,  8);
259
17.5k
  R( c, d, e, a, b, F0, KK4,  2, 13);
260
17.5k
  R( b, c, d, e, a, F0, KK4, 13,  6);
261
17.5k
  R( a, b, c, d, e, F0, KK4, 14,  5);
262
17.5k
  R( e, a, b, c, d, F0, KK4,  0, 15);
263
17.5k
  R( d, e, a, b, c, F0, KK4,  3, 13);
264
17.5k
  R( c, d, e, a, b, F0, KK4,  9, 11);
265
17.5k
  R( b, c, d, e, a, F0, KK4, 11, 11);
266
267
268
17.5k
  t    = state[1] + d + cc;
269
17.5k
  state[1] = state[2] + e + dd;
270
17.5k
  state[2] = state[3] + a + ee;
271
17.5k
  state[3] = state[4] + b + aa;
272
17.5k
  state[4] = state[0] + c + bb;
273
17.5k
  state[0] = t;
274
17.5k
}