Coverage Report

Created: 2023-02-22 06:14

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