Coverage Report

Created: 2024-02-25 06:16

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