32 #define TRACE_LEVEL CRYPTO_TRACE_LEVEL
39 #if (RIPEMD160_SUPPORT == ENABLED)
42 #define F(x, y, z) ((x) ^ (y) ^ (z))
43 #define G(x, y, z) (((x) & (y)) | (~(x) & (z)))
44 #define H(x, y, z) (((x) | ~(y)) ^ (z))
45 #define I(x, y, z) (((x) & (z)) | ((y) & ~(z)))
46 #define J(x, y, z) ((x) ^ ((y) | ~(z)))
48 #define FF(a, b, c, d, e, x, s) a += F(b, c, d) + (x), a = ROL32(a, s) + (e), c = ROL32(c, 10)
49 #define GG(a, b, c, d, e, x, s) a += G(b, c, d) + (x) + 0x5A827999, a = ROL32(a, s) + (e), c = ROL32(c, 10)
50 #define HH(a, b, c, d, e, x, s) a += H(b, c, d) + (x) + 0x6ED9EBA1, a = ROL32(a, s) + (e), c = ROL32(c, 10)
51 #define II(a, b, c, d, e, x, s) a += I(b, c, d) + (x) + 0x8F1BBCDC, a = ROL32(a, s) + (e), c = ROL32(c, 10)
52 #define JJ(a, b, c, d, e, x, s) a += J(b, c, d) + (x) + 0xA953FD4E, a = ROL32(a, s) + (e), c = ROL32(c, 10)
54 #define FFF(a, b, c, d, e, x, s) a += F(b, c, d) + (x), a = ROL32(a, s) + (e), c = ROL32(c, 10)
55 #define GGG(a, b, c, d, e, x, s) a += G(b, c, d) + (x) + 0x7A6D76E9, a = ROL32(a, s) + (e), c = ROL32(c, 10)
56 #define HHH(a, b, c, d, e, x, s) a += H(b, c, d) + (x) + 0x6D703EF3, a = ROL32(a, s) + (e), c = ROL32(c, 10)
57 #define III(a, b, c, d, e, x, s) a += I(b, c, d) + (x) + 0x5C4DD124, a = ROL32(a, s) + (e), c = ROL32(c, 10)
58 #define JJJ(a, b, c, d, e, x, s) a += J(b, c, d) + (x) + 0x50A28BE6, a = ROL32(a, s) + (e), c = ROL32(c, 10)
61 static const uint8_t padding[64] =
63 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
64 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
65 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
66 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
101 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
114 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
129 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
147 context->
h[0] = 0x67452301;
148 context->
h[1] = 0xEFCDAB89;
149 context->
h[2] = 0x98BADCFE;
150 context->
h[3] = 0x10325476;
151 context->
h[4] = 0xC3D2E1F0;
189 if(context->
size == 64)
216 if(context->
size < 56)
218 paddingSize = 56 - context->
size;
222 paddingSize = 64 + 56 - context->
size;
229 for(i = 0; i < 8; i++)
231 context->
buffer[56 + i] = totalSize & 0xFF;
256 uint32_t
aa= context->
h[0];
257 uint32_t bb = context->
h[1];
258 uint32_t cc = context->
h[2];
259 uint32_t dd = context->
h[3];
260 uint32_t ee = context->
h[4];
261 uint32_t aaa = context->
h[0];
262 uint32_t bbb = context->
h[1];
263 uint32_t ccc = context->
h[2];
264 uint32_t ddd = context->
h[3];
265 uint32_t eee = context->
h[4];
268 uint32_t *
x = context->
x;
271 for(i = 0; i < 16; i++)
277 FF(
aa, bb, cc, dd, ee,
x[0], 11);
278 FF(ee,
aa, bb, cc, dd,
x[1], 14);
279 FF(dd, ee,
aa, bb, cc,
x[2], 15);
280 FF(cc, dd, ee,
aa, bb,
x[3], 12);
281 FF(bb, cc, dd, ee,
aa,
x[4], 5);
282 FF(
aa, bb, cc, dd, ee,
x[5], 8);
283 FF(ee,
aa, bb, cc, dd,
x[6], 7);
284 FF(dd, ee,
aa, bb, cc,
x[7], 9);
285 FF(cc, dd, ee,
aa, bb,
x[8], 11);
286 FF(bb, cc, dd, ee,
aa,
x[9], 13);
287 FF(
aa, bb, cc, dd, ee,
x[10], 14);
288 FF(ee,
aa, bb, cc, dd,
x[11], 15);
289 FF(dd, ee,
aa, bb, cc,
x[12], 6);
290 FF(cc, dd, ee,
aa, bb,
x[13], 7);
291 FF(bb, cc, dd, ee,
aa,
x[14], 9);
292 FF(
aa, bb, cc, dd, ee,
x[15], 8);
295 GG(ee,
aa, bb, cc, dd,
x[7], 7);
296 GG(dd, ee,
aa, bb, cc,
x[4], 6);
297 GG(cc, dd, ee,
aa, bb,
x[13], 8);
298 GG(bb, cc, dd, ee,
aa,
x[1], 13);
299 GG(
aa, bb, cc, dd, ee,
x[10], 11);
300 GG(ee,
aa, bb, cc, dd,
x[6], 9);
301 GG(dd, ee,
aa, bb, cc,
x[15], 7);
302 GG(cc, dd, ee,
aa, bb,
x[3], 15);
303 GG(bb, cc, dd, ee,
aa,
x[12], 7);
304 GG(
aa, bb, cc, dd, ee,
x[0], 12);
305 GG(ee,
aa, bb, cc, dd,
x[9], 15);
306 GG(dd, ee,
aa, bb, cc,
x[5], 9);
307 GG(cc, dd, ee,
aa, bb,
x[2], 11);
308 GG(bb, cc, dd, ee,
aa,
x[14], 7);
309 GG(
aa, bb, cc, dd, ee,
x[11], 13);
310 GG(ee,
aa, bb, cc, dd,
x[8], 12);
313 HH(dd, ee,
aa, bb, cc,
x[3], 11);
314 HH(cc, dd, ee,
aa, bb,
x[10], 13);
315 HH(bb, cc, dd, ee,
aa,
x[14], 6);
316 HH(
aa, bb, cc, dd, ee,
x[4], 7);
317 HH(ee,
aa, bb, cc, dd,
x[9], 14);
318 HH(dd, ee,
aa, bb, cc,
x[15], 9);
319 HH(cc, dd, ee,
aa, bb,
x[8], 13);
320 HH(bb, cc, dd, ee,
aa,
x[1], 15);
321 HH(
aa, bb, cc, dd, ee,
x[2], 14);
322 HH(ee,
aa, bb, cc, dd,
x[7], 8);
323 HH(dd, ee,
aa, bb, cc,
x[0], 13);
324 HH(cc, dd, ee,
aa, bb,
x[6], 6);
325 HH(bb, cc, dd, ee,
aa,
x[13], 5);
326 HH(
aa, bb, cc, dd, ee,
x[11], 12);
327 HH(ee,
aa, bb, cc, dd,
x[5], 7);
328 HH(dd, ee,
aa, bb, cc,
x[12], 5);
331 II(cc, dd, ee,
aa, bb,
x[1], 11);
332 II(bb, cc, dd, ee,
aa,
x[9], 12);
333 II(
aa, bb, cc, dd, ee,
x[11], 14);
334 II(ee,
aa, bb, cc, dd,
x[10], 15);
335 II(dd, ee,
aa, bb, cc,
x[0], 14);
336 II(cc, dd, ee,
aa, bb,
x[8], 15);
337 II(bb, cc, dd, ee,
aa,
x[12], 9);
338 II(
aa, bb, cc, dd, ee,
x[4], 8);
339 II(ee,
aa, bb, cc, dd,
x[13], 9);
340 II(dd, ee,
aa, bb, cc,
x[3], 14);
341 II(cc, dd, ee,
aa, bb,
x[7], 5);
342 II(bb, cc, dd, ee,
aa,
x[15], 6);
343 II(
aa, bb, cc, dd, ee,
x[14], 8);
344 II(ee,
aa, bb, cc, dd,
x[5], 6);
345 II(dd, ee,
aa, bb, cc,
x[6], 5);
346 II(cc, dd, ee,
aa, bb,
x[2], 12);
349 JJ(bb, cc, dd, ee,
aa,
x[4], 9);
350 JJ(
aa, bb, cc, dd, ee,
x[0], 15);
351 JJ(ee,
aa, bb, cc, dd,
x[5], 5);
352 JJ(dd, ee,
aa, bb, cc,
x[9], 11);
353 JJ(cc, dd, ee,
aa, bb,
x[7], 6);
354 JJ(bb, cc, dd, ee,
aa,
x[12], 8);
355 JJ(
aa, bb, cc, dd, ee,
x[2], 13);
356 JJ(ee,
aa, bb, cc, dd,
x[10], 12);
357 JJ(dd, ee,
aa, bb, cc,
x[14], 5);
358 JJ(cc, dd, ee,
aa, bb,
x[1], 12);
359 JJ(bb, cc, dd, ee,
aa,
x[3], 13);
360 JJ(
aa, bb, cc, dd, ee,
x[8], 14);
361 JJ(ee,
aa, bb, cc, dd,
x[11], 11);
362 JJ(dd, ee,
aa, bb, cc,
x[6], 8);
363 JJ(cc, dd, ee,
aa, bb,
x[15], 5);
364 JJ(bb, cc, dd, ee,
aa,
x[13], 6);
367 JJJ(aaa, bbb, ccc, ddd, eee,
x[5], 8);
368 JJJ(eee, aaa, bbb, ccc, ddd,
x[14], 9);
369 JJJ(ddd, eee, aaa, bbb, ccc,
x[7], 9);
370 JJJ(ccc, ddd, eee, aaa, bbb,
x[0], 11);
371 JJJ(bbb, ccc, ddd, eee, aaa,
x[9], 13);
372 JJJ(aaa, bbb, ccc, ddd, eee,
x[2], 15);
373 JJJ(eee, aaa, bbb, ccc, ddd,
x[11], 15);
374 JJJ(ddd, eee, aaa, bbb, ccc,
x[4], 5);
375 JJJ(ccc, ddd, eee, aaa, bbb,
x[13], 7);
376 JJJ(bbb, ccc, ddd, eee, aaa,
x[6], 7);
377 JJJ(aaa, bbb, ccc, ddd, eee,
x[15], 8);
378 JJJ(eee, aaa, bbb, ccc, ddd,
x[8], 11);
379 JJJ(ddd, eee, aaa, bbb, ccc,
x[1], 14);
380 JJJ(ccc, ddd, eee, aaa, bbb,
x[10], 14);
381 JJJ(bbb, ccc, ddd, eee, aaa,
x[3], 12);
382 JJJ(aaa, bbb, ccc, ddd, eee,
x[12], 6);
385 III(eee, aaa, bbb, ccc, ddd,
x[6], 9);
386 III(ddd, eee, aaa, bbb, ccc,
x[11], 13);
387 III(ccc, ddd, eee, aaa, bbb,
x[3], 15);
388 III(bbb, ccc, ddd, eee, aaa,
x[7], 7);
389 III(aaa, bbb, ccc, ddd, eee,
x[0], 12);
390 III(eee, aaa, bbb, ccc, ddd,
x[13], 8);
391 III(ddd, eee, aaa, bbb, ccc,
x[5], 9);
392 III(ccc, ddd, eee, aaa, bbb,
x[10], 11);
393 III(bbb, ccc, ddd, eee, aaa,
x[14], 7);
394 III(aaa, bbb, ccc, ddd, eee,
x[15], 7);
395 III(eee, aaa, bbb, ccc, ddd,
x[8], 12);
396 III(ddd, eee, aaa, bbb, ccc,
x[12], 7);
397 III(ccc, ddd, eee, aaa, bbb,
x[4], 6);
398 III(bbb, ccc, ddd, eee, aaa,
x[9], 15);
399 III(aaa, bbb, ccc, ddd, eee,
x[1], 13);
400 III(eee, aaa, bbb, ccc, ddd,
x[2], 11);
403 HHH(ddd, eee, aaa, bbb, ccc,
x[15], 9);
404 HHH(ccc, ddd, eee, aaa, bbb,
x[5], 7);
405 HHH(bbb, ccc, ddd, eee, aaa,
x[1], 15);
406 HHH(aaa, bbb, ccc, ddd, eee,
x[3], 11);
407 HHH(eee, aaa, bbb, ccc, ddd,
x[7], 8);
408 HHH(ddd, eee, aaa, bbb, ccc,
x[14], 6);
409 HHH(ccc, ddd, eee, aaa, bbb,
x[6], 6);
410 HHH(bbb, ccc, ddd, eee, aaa,
x[9], 14);
411 HHH(aaa, bbb, ccc, ddd, eee,
x[11], 12);
412 HHH(eee, aaa, bbb, ccc, ddd,
x[8], 13);
413 HHH(ddd, eee, aaa, bbb, ccc,
x[12], 5);
414 HHH(ccc, ddd, eee, aaa, bbb,
x[2], 14);
415 HHH(bbb, ccc, ddd, eee, aaa,
x[10], 13);
416 HHH(aaa, bbb, ccc, ddd, eee,
x[0], 13);
417 HHH(eee, aaa, bbb, ccc, ddd,
x[4], 7);
418 HHH(ddd, eee, aaa, bbb, ccc,
x[13], 5);
421 GGG(ccc, ddd, eee, aaa, bbb,
x[8], 15);
422 GGG(bbb, ccc, ddd, eee, aaa,
x[6], 5);
423 GGG(aaa, bbb, ccc, ddd, eee,
x[4], 8);
424 GGG(eee, aaa, bbb, ccc, ddd,
x[1], 11);
425 GGG(ddd, eee, aaa, bbb, ccc,
x[3], 14);
426 GGG(ccc, ddd, eee, aaa, bbb,
x[11], 14);
427 GGG(bbb, ccc, ddd, eee, aaa,
x[15], 6);
428 GGG(aaa, bbb, ccc, ddd, eee,
x[0], 14);
429 GGG(eee, aaa, bbb, ccc, ddd,
x[5], 6);
430 GGG(ddd, eee, aaa, bbb, ccc,
x[12], 9);
431 GGG(ccc, ddd, eee, aaa, bbb,
x[2], 12);
432 GGG(bbb, ccc, ddd, eee, aaa,
x[13], 9);
433 GGG(aaa, bbb, ccc, ddd, eee,
x[9], 12);
434 GGG(eee, aaa, bbb, ccc, ddd,
x[7], 5);
435 GGG(ddd, eee, aaa, bbb, ccc,
x[10], 15);
436 GGG(ccc, ddd, eee, aaa, bbb,
x[14], 8);
439 FFF(bbb, ccc, ddd, eee, aaa,
x[12], 8);
440 FFF(aaa, bbb, ccc, ddd, eee,
x[15], 5);
441 FFF(eee, aaa, bbb, ccc, ddd,
x[10], 12);
442 FFF(ddd, eee, aaa, bbb, ccc,
x[4], 9);
443 FFF(ccc, ddd, eee, aaa, bbb,
x[1], 12);
444 FFF(bbb, ccc, ddd, eee, aaa,
x[5], 5);
445 FFF(aaa, bbb, ccc, ddd, eee,
x[8], 14);
446 FFF(eee, aaa, bbb, ccc, ddd,
x[7], 6);
447 FFF(ddd, eee, aaa, bbb, ccc,
x[6], 8);
448 FFF(ccc, ddd, eee, aaa, bbb,
x[2], 13);
449 FFF(bbb, ccc, ddd, eee, aaa,
x[13], 6);
450 FFF(aaa, bbb, ccc, ddd, eee,
x[14], 5);
451 FFF(eee, aaa, bbb, ccc, ddd,
x[0], 15);
452 FFF(ddd, eee, aaa, bbb, ccc,
x[3], 13);
453 FFF(ccc, ddd, eee, aaa, bbb,
x[9], 11);
454 FFF(bbb, ccc, ddd, eee, aaa,
x[11], 11);
457 ddd = context->
h[1] + cc + ddd;
458 context->
h[1] = context->
h[2] + dd + eee;
459 context->
h[2] = context->
h[3] + ee + aaa;
460 context->
h[3] = context->
h[4] +
aa + bbb;
461 context->
h[4] = context->
h[0] + bb + ccc;