31#ifdef HAVE_SYS_ENDIAN_H_
32#include <sys/endian.h>
35#ifdef HAVE_MACHINE_ENDIAN_H_
36#include <machine/endian.h>
47#define _DIAGASSERT(cond) assert(cond)
56#define BYTES_TO_DWORD(strptr) \
57 (((uint32_t) *((strptr)+3) << 24) | \
58 ((uint32_t) *((strptr)+2) << 16) | \
59 ((uint32_t) *((strptr)+1) << 8) | \
60 ((uint32_t) *(strptr)))
64#define ROL(x, n) (((x) << (n)) | ((x) >> (32-(n))))
67#define F(x, y, z) ((x) ^ (y) ^ (z))
68#define G(x, y, z) (((x) & (y)) | (~(x) & (z)))
69#define H(x, y, z) (((x) | ~(y)) ^ (z))
70#define I(x, y, z) (((x) & (z)) | ((y) & ~(z)))
71#define J(x, y, z) ((x) ^ ((y) | ~(z)))
74#define FF(a, b, c, d, e, x, s) { \
75 (a) += F((b), (c), (d)) + (x); \
76 (a) = ROL((a), (s)) + (e); \
79#define GG(a, b, c, d, e, x, s) { \
80 (a) += G((b), (c), (d)) + (x) + 0x5a827999U; \
81 (a) = ROL((a), (s)) + (e); \
84#define HH(a, b, c, d, e, x, s) { \
85 (a) += H((b), (c), (d)) + (x) + 0x6ed9eba1U; \
86 (a) = ROL((a), (s)) + (e); \
89#define II(a, b, c, d, e, x, s) { \
90 (a) += I((b), (c), (d)) + (x) + 0x8f1bbcdcU; \
91 (a) = ROL((a), (s)) + (e); \
94#define JJ(a, b, c, d, e, x, s) { \
95 (a) += J((b), (c), (d)) + (x) + 0xa953fd4eU; \
96 (a) = ROL((a), (s)) + (e); \
99#define FFF(a, b, c, d, e, x, s) { \
100 (a) += F((b), (c), (d)) + (x); \
101 (a) = ROL((a), (s)) + (e); \
102 (c) = ROL((c), 10); \
104#define GGG(a, b, c, d, e, x, s) { \
105 (a) += G((b), (c), (d)) + (x) + 0x7a6d76e9U; \
106 (a) = ROL((a), (s)) + (e); \
107 (c) = ROL((c), 10); \
109#define HHH(a, b, c, d, e, x, s) { \
110 (a) += H((b), (c), (d)) + (x) + 0x6d703ef3U; \
111 (a) = ROL((a), (s)) + (e); \
112 (c) = ROL((c), 10); \
114#define III(a, b, c, d, e, x, s) { \
115 (a) += I((b), (c), (d)) + (x) + 0x5c4dd124U; \
116 (a) = ROL((a), (s)) + (e); \
117 (c) = ROL((c), 10); \
119#define JJJ(a, b, c, d, e, x, s) { \
120 (a) += J((b), (c), (d)) + (x) + 0x50a28be6U; \
121 (a) = ROL((a), (s)) + (e); \
122 (c) = ROL((c), 10); \
134 context->
state[0] = 0x67452301U;
135 context->
state[1] = 0xefcdab89U;
136 context->
state[2] = 0x98badcfeU;
137 context->
state[3] = 0x10325476U;
138 context->
state[4] = 0xc3d2e1f0U;
162 FF(aa, bb,
cc, dd, ee, block[ 0], 11);
163 FF(ee, aa, bb,
cc, dd, block[ 1], 14);
164 FF(dd, ee, aa, bb,
cc, block[ 2], 15);
165 FF(
cc, dd, ee, aa, bb, block[ 3], 12);
166 FF(bb,
cc, dd, ee, aa, block[ 4], 5);
167 FF(aa, bb,
cc, dd, ee, block[ 5], 8);
168 FF(ee, aa, bb,
cc, dd, block[ 6], 7);
169 FF(dd, ee, aa, bb,
cc, block[ 7], 9);
170 FF(
cc, dd, ee, aa, bb, block[ 8], 11);
171 FF(bb,
cc, dd, ee, aa, block[ 9], 13);
172 FF(aa, bb,
cc, dd, ee, block[10], 14);
173 FF(ee, aa, bb,
cc, dd, block[11], 15);
174 FF(dd, ee, aa, bb,
cc, block[12], 6);
175 FF(
cc, dd, ee, aa, bb, block[13], 7);
176 FF(bb,
cc, dd, ee, aa, block[14], 9);
177 FF(aa, bb,
cc, dd, ee, block[15], 8);
180 GG(ee, aa, bb,
cc, dd, block[ 7], 7);
181 GG(dd, ee, aa, bb,
cc, block[ 4], 6);
182 GG(
cc, dd, ee, aa, bb, block[13], 8);
183 GG(bb,
cc, dd, ee, aa, block[ 1], 13);
184 GG(aa, bb,
cc, dd, ee, block[10], 11);
185 GG(ee, aa, bb,
cc, dd, block[ 6], 9);
186 GG(dd, ee, aa, bb,
cc, block[15], 7);
187 GG(
cc, dd, ee, aa, bb, block[ 3], 15);
188 GG(bb,
cc, dd, ee, aa, block[12], 7);
189 GG(aa, bb,
cc, dd, ee, block[ 0], 12);
190 GG(ee, aa, bb,
cc, dd, block[ 9], 15);
191 GG(dd, ee, aa, bb,
cc, block[ 5], 9);
192 GG(
cc, dd, ee, aa, bb, block[ 2], 11);
193 GG(bb,
cc, dd, ee, aa, block[14], 7);
194 GG(aa, bb,
cc, dd, ee, block[11], 13);
195 GG(ee, aa, bb,
cc, dd, block[ 8], 12);
198 HH(dd, ee, aa, bb,
cc, block[ 3], 11);
199 HH(
cc, dd, ee, aa, bb, block[10], 13);
200 HH(bb,
cc, dd, ee, aa, block[14], 6);
201 HH(aa, bb,
cc, dd, ee, block[ 4], 7);
202 HH(ee, aa, bb,
cc, dd, block[ 9], 14);
203 HH(dd, ee, aa, bb,
cc, block[15], 9);
204 HH(
cc, dd, ee, aa, bb, block[ 8], 13);
205 HH(bb,
cc, dd, ee, aa, block[ 1], 15);
206 HH(aa, bb,
cc, dd, ee, block[ 2], 14);
207 HH(ee, aa, bb,
cc, dd, block[ 7], 8);
208 HH(dd, ee, aa, bb,
cc, block[ 0], 13);
209 HH(
cc, dd, ee, aa, bb, block[ 6], 6);
210 HH(bb,
cc, dd, ee, aa, block[13], 5);
211 HH(aa, bb,
cc, dd, ee, block[11], 12);
212 HH(ee, aa, bb,
cc, dd, block[ 5], 7);
213 HH(dd, ee, aa, bb,
cc, block[12], 5);
216 II(
cc, dd, ee, aa, bb, block[ 1], 11);
217 II(bb,
cc, dd, ee, aa, block[ 9], 12);
218 II(aa, bb,
cc, dd, ee, block[11], 14);
219 II(ee, aa, bb,
cc, dd, block[10], 15);
220 II(dd, ee, aa, bb,
cc, block[ 0], 14);
221 II(
cc, dd, ee, aa, bb, block[ 8], 15);
222 II(bb,
cc, dd, ee, aa, block[12], 9);
223 II(aa, bb,
cc, dd, ee, block[ 4], 8);
224 II(ee, aa, bb,
cc, dd, block[13], 9);
225 II(dd, ee, aa, bb,
cc, block[ 3], 14);
226 II(
cc, dd, ee, aa, bb, block[ 7], 5);
227 II(bb,
cc, dd, ee, aa, block[15], 6);
228 II(aa, bb,
cc, dd, ee, block[14], 8);
229 II(ee, aa, bb,
cc, dd, block[ 5], 6);
230 II(dd, ee, aa, bb,
cc, block[ 6], 5);
231 II(
cc, dd, ee, aa, bb, block[ 2], 12);
234 JJ(bb,
cc, dd, ee, aa, block[ 4], 9);
235 JJ(aa, bb,
cc, dd, ee, block[ 0], 15);
236 JJ(ee, aa, bb,
cc, dd, block[ 5], 5);
237 JJ(dd, ee, aa, bb,
cc, block[ 9], 11);
238 JJ(
cc, dd, ee, aa, bb, block[ 7], 6);
239 JJ(bb,
cc, dd, ee, aa, block[12], 8);
240 JJ(aa, bb,
cc, dd, ee, block[ 2], 13);
241 JJ(ee, aa, bb,
cc, dd, block[10], 12);
242 JJ(dd, ee, aa, bb,
cc, block[14], 5);
243 JJ(
cc, dd, ee, aa, bb, block[ 1], 12);
244 JJ(bb,
cc, dd, ee, aa, block[ 3], 13);
245 JJ(aa, bb,
cc, dd, ee, block[ 8], 14);
246 JJ(ee, aa, bb,
cc, dd, block[11], 11);
247 JJ(dd, ee, aa, bb,
cc, block[ 6], 8);
248 JJ(
cc, dd, ee, aa, bb, block[15], 5);
249 JJ(bb,
cc, dd, ee, aa, block[13], 6);
252 JJJ(aaa, bbb, ccc, ddd, eee, block[ 5], 8);
253 JJJ(eee, aaa, bbb, ccc, ddd, block[14], 9);
254 JJJ(ddd, eee, aaa, bbb, ccc, block[ 7], 9);
255 JJJ(ccc, ddd, eee, aaa, bbb, block[ 0], 11);
256 JJJ(bbb, ccc, ddd, eee, aaa, block[ 9], 13);
257 JJJ(aaa, bbb, ccc, ddd, eee, block[ 2], 15);
258 JJJ(eee, aaa, bbb, ccc, ddd, block[11], 15);
259 JJJ(ddd, eee, aaa, bbb, ccc, block[ 4], 5);
260 JJJ(ccc, ddd, eee, aaa, bbb, block[13], 7);
261 JJJ(bbb, ccc, ddd, eee, aaa, block[ 6], 7);
262 JJJ(aaa, bbb, ccc, ddd, eee, block[15], 8);
263 JJJ(eee, aaa, bbb, ccc, ddd, block[ 8], 11);
264 JJJ(ddd, eee, aaa, bbb, ccc, block[ 1], 14);
265 JJJ(ccc, ddd, eee, aaa, bbb, block[10], 14);
266 JJJ(bbb, ccc, ddd, eee, aaa, block[ 3], 12);
267 JJJ(aaa, bbb, ccc, ddd, eee, block[12], 6);
270 III(eee, aaa, bbb, ccc, ddd, block[ 6], 9);
271 III(ddd, eee, aaa, bbb, ccc, block[11], 13);
272 III(ccc, ddd, eee, aaa, bbb, block[ 3], 15);
273 III(bbb, ccc, ddd, eee, aaa, block[ 7], 7);
274 III(aaa, bbb, ccc, ddd, eee, block[ 0], 12);
275 III(eee, aaa, bbb, ccc, ddd, block[13], 8);
276 III(ddd, eee, aaa, bbb, ccc, block[ 5], 9);
277 III(ccc, ddd, eee, aaa, bbb, block[10], 11);
278 III(bbb, ccc, ddd, eee, aaa, block[14], 7);
279 III(aaa, bbb, ccc, ddd, eee, block[15], 7);
280 III(eee, aaa, bbb, ccc, ddd, block[ 8], 12);
281 III(ddd, eee, aaa, bbb, ccc, block[12], 7);
282 III(ccc, ddd, eee, aaa, bbb, block[ 4], 6);
283 III(bbb, ccc, ddd, eee, aaa, block[ 9], 15);
284 III(aaa, bbb, ccc, ddd, eee, block[ 1], 13);
285 III(eee, aaa, bbb, ccc, ddd, block[ 2], 11);
288 HHH(ddd, eee, aaa, bbb, ccc, block[15], 9);
289 HHH(ccc, ddd, eee, aaa, bbb, block[ 5], 7);
290 HHH(bbb, ccc, ddd, eee, aaa, block[ 1], 15);
291 HHH(aaa, bbb, ccc, ddd, eee, block[ 3], 11);
292 HHH(eee, aaa, bbb, ccc, ddd, block[ 7], 8);
293 HHH(ddd, eee, aaa, bbb, ccc, block[14], 6);
294 HHH(ccc, ddd, eee, aaa, bbb, block[ 6], 6);
295 HHH(bbb, ccc, ddd, eee, aaa, block[ 9], 14);
296 HHH(aaa, bbb, ccc, ddd, eee, block[11], 12);
297 HHH(eee, aaa, bbb, ccc, ddd, block[ 8], 13);
298 HHH(ddd, eee, aaa, bbb, ccc, block[12], 5);
299 HHH(ccc, ddd, eee, aaa, bbb, block[ 2], 14);
300 HHH(bbb, ccc, ddd, eee, aaa, block[10], 13);
301 HHH(aaa, bbb, ccc, ddd, eee, block[ 0], 13);
302 HHH(eee, aaa, bbb, ccc, ddd, block[ 4], 7);
303 HHH(ddd, eee, aaa, bbb, ccc, block[13], 5);
306 GGG(ccc, ddd, eee, aaa, bbb, block[ 8], 15);
307 GGG(bbb, ccc, ddd, eee, aaa, block[ 6], 5);
308 GGG(aaa, bbb, ccc, ddd, eee, block[ 4], 8);
309 GGG(eee, aaa, bbb, ccc, ddd, block[ 1], 11);
310 GGG(ddd, eee, aaa, bbb, ccc, block[ 3], 14);
311 GGG(ccc, ddd, eee, aaa, bbb, block[11], 14);
312 GGG(bbb, ccc, ddd, eee, aaa, block[15], 6);
313 GGG(aaa, bbb, ccc, ddd, eee, block[ 0], 14);
314 GGG(eee, aaa, bbb, ccc, ddd, block[ 5], 6);
315 GGG(ddd, eee, aaa, bbb, ccc, block[12], 9);
316 GGG(ccc, ddd, eee, aaa, bbb, block[ 2], 12);
317 GGG(bbb, ccc, ddd, eee, aaa, block[13], 9);
318 GGG(aaa, bbb, ccc, ddd, eee, block[ 9], 12);
319 GGG(eee, aaa, bbb, ccc, ddd, block[ 7], 5);
320 GGG(ddd, eee, aaa, bbb, ccc, block[10], 15);
321 GGG(ccc, ddd, eee, aaa, bbb, block[14], 8);
324 FFF(bbb, ccc, ddd, eee, aaa, block[12] , 8);
325 FFF(aaa, bbb, ccc, ddd, eee, block[15] , 5);
326 FFF(eee, aaa, bbb, ccc, ddd, block[10] , 12);
327 FFF(ddd, eee, aaa, bbb, ccc, block[ 4] , 9);
328 FFF(ccc, ddd, eee, aaa, bbb, block[ 1] , 12);
329 FFF(bbb, ccc, ddd, eee, aaa, block[ 5] , 5);
330 FFF(aaa, bbb, ccc, ddd, eee, block[ 8] , 14);
331 FFF(eee, aaa, bbb, ccc, ddd, block[ 7] , 6);
332 FFF(ddd, eee, aaa, bbb, ccc, block[ 6] , 8);
333 FFF(ccc, ddd, eee, aaa, bbb, block[ 2] , 13);
334 FFF(bbb, ccc, ddd, eee, aaa, block[13] , 6);
335 FFF(aaa, bbb, ccc, ddd, eee, block[14] , 5);
336 FFF(eee, aaa, bbb, ccc, ddd, block[ 0] , 15);
337 FFF(ddd, eee, aaa, bbb, ccc, block[ 3] , 13);
338 FFF(ccc, ddd, eee, aaa, bbb, block[ 9] , 11);
339 FFF(bbb, ccc, ddd, eee, aaa, block[11] , 11);
342 ddd +=
cc + state[1];
343 state[1] = state[2] + dd + eee;
344 state[2] = state[3] + ee + aaa;
345 state[3] = state[4] + aa + bbb;
346 state[4] = state[0] + bb + ccc;
358#ifdef WORDS_BIGENDIAN
366#if SIZEOF_SIZE_T * CHAR_BIT > 32
369 if (context->
length[0] + nbytes < context->length[0])
376 if ( context->
buflen + nbytes < 64 )
384 ofs = 64 - context->
buflen;
386#ifndef WORDS_BIGENDIAN
389 for (j=0; j < 16; j++)
396 for (
i = 0;
i < (nbytes >> 6);
i++) {
397#ifndef WORDS_BIGENDIAN
400 for (j=0; j < 16; j++)
421#ifdef WORDS_BIGENDIAN
433#ifndef WORDS_BIGENDIAN
436 for (j=0; j < 16; j++)
439 if ((context->
buflen) > 55) {
446 X[14] = context->
length[0] << 3;
447 X[15] = (context->
length[0] >> 29) |
448 (context->
length[1] << 3);
451 if (digest !=
NULL) {
452 for (
i = 0;
i < 20;
i += 4) {
454 digest[
i] = context->
state[
i>>2];
455 digest[
i + 1] = (context->
state[
i>>2] >> 8);
456 digest[
i + 2] = (context->
state[
i>>2] >> 16);
457 digest[
i + 3] = (context->
state[
i>>2] >> 24);
#define GG(a, b, c, d, e, x, s)
#define JJJ(a, b, c, d, e, x, s)
#define III(a, b, c, d, e, x, s)
#define JJ(a, b, c, d, e, x, s)
int RMD160_Init(RMD160_CTX *context)
#define HH(a, b, c, d, e, x, s)
#define II(a, b, c, d, e, x, s)
#define HHH(a, b, c, d, e, x, s)
int RMD160_Finish(RMD160_CTX *context, uint8_t digest[20])
#define BYTES_TO_DWORD(strptr)
#define FF(a, b, c, d, e, x, s)
#define GGG(a, b, c, d, e, x, s)
#define _DIAGASSERT(cond)
void RMD160_Transform(uint32_t state[5], const uint32_t block[16])
void RMD160_Update(RMD160_CTX *context, const uint8_t *data, size_t nbytes)
#define FFF(a, b, c, d, e, x, s)