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