Coverage Report

Created: 2023-09-25 06:34

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