Coverage Report

Created: 2024-11-21 07:00

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