Coverage Report

Created: 2023-02-22 06:14

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