linux/crypto/rmd320.c
<<
>>
Prefs
   1/*
   2 * Cryptographic API.
   3 *
   4 * RIPEMD-320 - RACE Integrity Primitives Evaluation Message Digest.
   5 *
   6 * Based on the reference implementation by Antoon Bosselaers, ESAT-COSIC
   7 *
   8 * Copyright (c) 2008 Adrian-Ken Rueegsegger <ken@codelabs.ch>
   9 *
  10 * This program is free software; you can redistribute it and/or modify it
  11 * under the terms of the GNU General Public License as published by the Free
  12 * Software Foundation; either version 2 of the License, or (at your option)
  13 * any later version.
  14 *
  15 */
  16#include <crypto/internal/hash.h>
  17#include <linux/init.h>
  18#include <linux/module.h>
  19#include <linux/mm.h>
  20#include <linux/types.h>
  21#include <asm/byteorder.h>
  22
  23#include "ripemd.h"
  24
  25struct rmd320_ctx {
  26        u64 byte_count;
  27        u32 state[10];
  28        __le32 buffer[16];
  29};
  30
  31#define K1  RMD_K1
  32#define K2  RMD_K2
  33#define K3  RMD_K3
  34#define K4  RMD_K4
  35#define K5  RMD_K5
  36#define KK1 RMD_K6
  37#define KK2 RMD_K7
  38#define KK3 RMD_K8
  39#define KK4 RMD_K9
  40#define KK5 RMD_K1
  41
  42#define F1(x, y, z) (x ^ y ^ z)         /* XOR */
  43#define F2(x, y, z) (z ^ (x & (y ^ z))) /* x ? y : z */
  44#define F3(x, y, z) ((x | ~y) ^ z)
  45#define F4(x, y, z) (y ^ (z & (x ^ y))) /* z ? x : y */
  46#define F5(x, y, z) (x ^ (y | ~z))
  47
  48#define ROUND(a, b, c, d, e, f, k, x, s)  { \
  49        (a) += f((b), (c), (d)) + le32_to_cpup(&(x)) + (k); \
  50        (a) = rol32((a), (s)) + (e); \
  51        (c) = rol32((c), 10); \
  52}
  53
  54static void rmd320_transform(u32 *state, const __le32 *in)
  55{
  56        u32 aa, bb, cc, dd, ee, aaa, bbb, ccc, ddd, eee, tmp;
  57
  58        /* Initialize left lane */
  59        aa = state[0];
  60        bb = state[1];
  61        cc = state[2];
  62        dd = state[3];
  63        ee = state[4];
  64
  65        /* Initialize right lane */
  66        aaa = state[5];
  67        bbb = state[6];
  68        ccc = state[7];
  69        ddd = state[8];
  70        eee = state[9];
  71
  72        /* round 1: left lane */
  73        ROUND(aa, bb, cc, dd, ee, F1, K1, in[0],  11);
  74        ROUND(ee, aa, bb, cc, dd, F1, K1, in[1],  14);
  75        ROUND(dd, ee, aa, bb, cc, F1, K1, in[2],  15);
  76        ROUND(cc, dd, ee, aa, bb, F1, K1, in[3],  12);
  77        ROUND(bb, cc, dd, ee, aa, F1, K1, in[4],   5);
  78        ROUND(aa, bb, cc, dd, ee, F1, K1, in[5],   8);
  79        ROUND(ee, aa, bb, cc, dd, F1, K1, in[6],   7);
  80        ROUND(dd, ee, aa, bb, cc, F1, K1, in[7],   9);
  81        ROUND(cc, dd, ee, aa, bb, F1, K1, in[8],  11);
  82        ROUND(bb, cc, dd, ee, aa, F1, K1, in[9],  13);
  83        ROUND(aa, bb, cc, dd, ee, F1, K1, in[10], 14);
  84        ROUND(ee, aa, bb, cc, dd, F1, K1, in[11], 15);
  85        ROUND(dd, ee, aa, bb, cc, F1, K1, in[12],  6);
  86        ROUND(cc, dd, ee, aa, bb, F1, K1, in[13],  7);
  87        ROUND(bb, cc, dd, ee, aa, F1, K1, in[14],  9);
  88        ROUND(aa, bb, cc, dd, ee, F1, K1, in[15],  8);
  89
  90        /* round 1: right lane */
  91        ROUND(aaa, bbb, ccc, ddd, eee, F5, KK1, in[5],   8);
  92        ROUND(eee, aaa, bbb, ccc, ddd, F5, KK1, in[14],  9);
  93        ROUND(ddd, eee, aaa, bbb, ccc, F5, KK1, in[7],   9);
  94        ROUND(ccc, ddd, eee, aaa, bbb, F5, KK1, in[0],  11);
  95        ROUND(bbb, ccc, ddd, eee, aaa, F5, KK1, in[9],  13);
  96        ROUND(aaa, bbb, ccc, ddd, eee, F5, KK1, in[2],  15);
  97        ROUND(eee, aaa, bbb, ccc, ddd, F5, KK1, in[11], 15);
  98        ROUND(ddd, eee, aaa, bbb, ccc, F5, KK1, in[4],   5);
  99        ROUND(ccc, ddd, eee, aaa, bbb, F5, KK1, in[13],  7);
 100        ROUND(bbb, ccc, ddd, eee, aaa, F5, KK1, in[6],   7);
 101        ROUND(aaa, bbb, ccc, ddd, eee, F5, KK1, in[15],  8);
 102        ROUND(eee, aaa, bbb, ccc, ddd, F5, KK1, in[8],  11);
 103        ROUND(ddd, eee, aaa, bbb, ccc, F5, KK1, in[1],  14);
 104        ROUND(ccc, ddd, eee, aaa, bbb, F5, KK1, in[10], 14);
 105        ROUND(bbb, ccc, ddd, eee, aaa, F5, KK1, in[3],  12);
 106        ROUND(aaa, bbb, ccc, ddd, eee, F5, KK1, in[12],  6);
 107
 108        /* Swap contents of "a" registers */
 109        tmp = aa; aa = aaa; aaa = tmp;
 110
 111        /* round 2: left lane" */
 112        ROUND(ee, aa, bb, cc, dd, F2, K2, in[7],   7);
 113        ROUND(dd, ee, aa, bb, cc, F2, K2, in[4],   6);
 114        ROUND(cc, dd, ee, aa, bb, F2, K2, in[13],  8);
 115        ROUND(bb, cc, dd, ee, aa, F2, K2, in[1],  13);
 116        ROUND(aa, bb, cc, dd, ee, F2, K2, in[10], 11);
 117        ROUND(ee, aa, bb, cc, dd, F2, K2, in[6],   9);
 118        ROUND(dd, ee, aa, bb, cc, F2, K2, in[15],  7);
 119        ROUND(cc, dd, ee, aa, bb, F2, K2, in[3],  15);
 120        ROUND(bb, cc, dd, ee, aa, F2, K2, in[1]2sref">in[15],  7);
  21<11" class="line" name="L211">  12        ROUND(aa, bb, cc, dd, ee, F2, K2, in[10,  12);
  12        ROUND(ee, aa, bb, cc, dd, F2, K2, in[19,  15);
  12        ROUND(dd, ee, aa, bb, cc, F2, K2, in[15,   9);
  12        ROUND(cc, dd, ee, aa, bb, F2, K2, in[12,  11);
  12        ROUND(bb, cc, dd, ee, aa, F2, K2, in[1]4sref">in[15],  7);
  16        ROUND(aa, bb, cc, dd, ee, F2, K2, in[1]], 15);
  17        ROUND(ee, aa, bb, cc, dd, F2, K2, in[18,  12);
  12
  12        /* round 2: light lane */
  13        ROUND(eee, aaa, bbb, ccc, ddd, F4( KK2  in[6],   9);
  13        ROUND(ddd, eee, aaa, bbb, ccc, F4( KK2  in[6]], 15);
  13        ROUND(ccc, ddd, eee, aaa, bbb, F4( KK2  in[6],  15);
  13        ROUND(bbb, ccc, ddd, eee, aaa, F4( KK2  in[6],   7);
  13        ROUND(aaa, bbb, ccc, ddd, eee, F4( KK2  in[60,  12);
  13        ROUND(eee, aaa, bbb, ccc, ddd, F4( KK2  in[63],  8);
  13        ROUND(ddd, eee, aaa, bbb, ccc, F4( KK2  in[65,   9);
  13        ROUND(ccc, ddd, eee, aaa, bbb, F4( KK2  in[60], 11);
  13        ROUND(bbb, ccc, ddd, eee, aaa, F4( KK2  in[6]4sref">in[15],  7);
  13        ROUND(aaa, bbb, ccc, ddd, eee, F4( KK2  in[65],  7);
  14        ROUND(eee, aaa, bbb, ccc, ddd, F4( KK2  in[68,  12);
  14        ROUND(ddd, eee, aaa, bbb, ccc, F4( KK2  in[6]2sref">in[15],  7);
  14        ROUND(ccc, ddd, eee, aaa, bbb, F4( KK2  in[6],   6);
  14        ROUND(bbb, ccc, ddd, eee, aaa, F4( KK2  in[69,  15);
  14        ROUND(aaa, bbb, ccc, ddd, eee, F4( KK2  in[65,  13);
  14        ROUND(eee, aaa, bbb, ccc, ddd, F4( KK2  in[62,  11);
  14   14        /* Swap contents of "abquot; registers */
  14        tmp = bb, bb,= bbb, bbb,= tmp;
  14
  15        /* round 13 left lane" */
  15        ROUND(ddd/a>, eee/a>, aaa/a>, bb, cc, F43/a>( FK3/a>( in[6],  15);
  15        ROUND(cc, ddd/a>, eee/a>, aaa/a>, bb, F43/a>( FK3/a>( in[60], 11);
  15        ROUND(bb, cc, dd, ee, aa, F43/a>( FK3/a>( in[604,  6);
  15        ROUND(aaa/a>, bb, cc, dd, ee, F43/a>( FK3/a>( in[64,   7);
  15        ROUND(eee/a>, aaa/a>, bb, cc, dd, F43/a>( FK3/a>( in[69,  14);
  15        ROUND(ddd/a>, eee/a>, aaa/a>, bb, cc, F43/a>( FK3/a>( in[65],  7);
  15        ROUND(cc, dd, ee, aa, bb, F43/a>( FK3/a>( in[68,  13);
  15        ROUND(bb, cc, dd, ee, aa, F43/a>( FK3/a>( in[60,  15);
  15        ROUND(aaa/a>, bb, cc, dd, ee, F43/a>( FK3/a>( in[62,  14);
  16        ROUND(eee/a>, aaa/a>, bb, cc, dd, F43/a>( FK3/a>( in[67,   8);
  16        ROUND(ddd/a>, eee/a>, aaa/a>, bb, cc, F43/a>( FK3/a>( in[60,  13);
  16        ROUND(cc, ddd/a>, eee/a>, aaa/a>, bb, F43/a>( FK3/a>( in[66,   6);
  16        ROUND(bb, cc, dd, ee, aa, F43/a>( FK3/a>( in[60],  1);
  16        ROUND(aaa/a>, bb, cc, dd, ee, F43/a>( FK3/a>( in[60], 15);
  16        ROUND(eee/a>, aaa/a>, bb, cc, dd, F43/a>( FK3/a>( in[65,   7);
  16        ROUND(ddd/a>, eee/a>, aaa/a>, bb, cc, F43/a>( FK3/a>( in[602,  1);
  16
  16        /* Swap 2rsref">ddd">  16    ;
    ;
b,2>in[62,  14);
ROUND(ddd/a>, eee/a>, cc, dd, ee, KK2  in[6],   6);
  14          14        [62,  14);
ROUND(ddd/a>, aaa/a>, bb, cc, dd, KK2  in[69,  15);
  14          14        [62,  14);
ROUND(ddd/a>, cc, aaa/a>, bb, cc, KK2  in[65,  13);
  14          14        [62,  14);
ROUND(ddd/a>, eee/a>, eee/a>, aaa/a>, bb,   16        /* Swap 2rsref">ddd">  16    ;
    ;
b,2>in  14        [62,  14);
ROUND(ddd/a>, aaa/a>, dd, ee, aa, in[6],   6);
  14          14        b,2>in[62,  14);
ROUND(ddd/a>, cc, cc, dd, ee, in[69,  15);
  14          14          14        [62,  14);
ROUND(ddd/a>, ddd/a>, bb, cc, dd, in[65,  13);
  14          14          14        [62,  14);
ROUND(ddd/a>, aaa/a>, aaa/a>, bb, cc, /* Swap 2rsref">ddd">  16    ;
    ;
b,2>in  14          14        [62,  14);
ROUND(ddd/a>, bb, cc,7aa, bb,   14          14        b,2>in  14        [62,  14);
ROUND(ddd/a>, dd, [602,  1);
  16
  16        /* Swap 2rsref">ddd">  16    ;
    ;
b,2>in[62,  14);
ROUND(ddd/a>, eee/a>, cc, dd, ee, KK2  in[6],   6);
  14          14        [62,  14);
ROUND(ddd/a>, bb, bb, cc, dd, KK2  in[69,  15);
  14          14        [62,  14);
ROUND(ddd/a>, ddd/a>, aaa/a>, bb, cc, KK2  in[65,  13);
  14          14        [62,  14);
ROUND(ddd/a>, eee/a>, eee/a>, aaa/a>, bb,   16        /* Swap 2rsref">ddd">  16    ;
    ;
b,2>in  14        [62,  14);
ROUND(ddd/a>, bb, dd, ee, aa, in[6],   6);
  14          14        b,2>in[62,  14);
ROUND(ddd/a>, cc, cc, cc, bb, F4( KK2  in[62,8code=aaa 8lass="sref">aaa/a>, bb,4">  14   14        cc,8cc, [602,  1);
F2, bbb,= cc, dd, ee,   16 ref="+code=Kn" class="sref">in[60,  13);
  16  ref="+code=ROUND" class="sref">ROUNDref="+code=ROUNDK class="sref">ROUNDddd/a>, eee/a>, bb, cc, dd,   16 "+16" class="line" named320.c#L106" id="L216" class="line" name="L216">  16 ref="+code=Kn" class="sref">in[60,  13);
ROUNDref="+code=ROUNDK class="sref">ROUNDddd/a>, aaa, aaa/a>, bb, cc,   16 ref="+code=Kn" class="sref">in[60],  1);
  16  ref="+code=ROUND" class="sref">ROUNDref="+code=ROUNDK class="sref">ROUNDddd/a>, bb, eee/a>, aaa/a>, bb, in[60,  13);
  16 15);
  16  ref="+code=ROUND" class="sref">ROUNDref="+code=ROUNDK class="sref">ROUNDddd/a>, cc, dd, ee, aa,   16 ref="+code=Kn" class="sref">in[60,  13);
  16 L116" class="line" name="L216">  16  ref="+code=ROUND" class="sref">ROUNDref="+code=ROUNDK class="sref">ROUNDddd/a>, bb, cc, dd, ee,   16 ref="+code=Kn" class="sref">in[60,  13);
  16  ref="+code=ROUND" class="sref">ROUNDref="+code=ROUNDK class="sref">ROUNDddd/a>, cc, bb, cc, dd,   16 ref="+code=Kn" class="sref">in[60],  1);
  16 13);
ROUNDref="+code=ROUNDK class="sref">ROUNDddd/a>, eee/a>, aaa/a>, bb, cc,   16 15);
  16 L216" class="line" name="L216">  16  ref="+code=ROUND" class="sref">ROUNDref="+code=ROUNDK class="sref">ROUNDddd/a>, aaa/a>, cc,9aa, bb, in[60,  13);
  16 L116" class="line" name="L216">  16 L216" class="line" name="L216">  16  ref="+code=ROUND" class="sref">ROUNDref="+code=ROUNDK class="sref">ROUNDddd/a>, eee/a>, [602,  1);
  16
  16 ref="+code=Kn" class="sref">in[60,  13);
  16 L116" class="line" name="L216">  16  ref="+code=ROUND" class="sref">ROUNDref="+code=ROUNDK class="sref">ROUNDddd/a>, bb, [602,  1);
 20cde=dd" class="sref">dd, ee,   16 ref="+code=Kn" class="sref">in[60,  13);
  16  ref="+code=ROUND" class="sref">ROUNDref="+code=ROUNDK class="sref">ROUNDddd/a>, cc, bb,  20ode=cc" class="sref">cc, dd,   16 "+16" class="line" named320.c#L106" id="L216" class="line" name="L216">  16 ref="+code=Kn" class="sref">in[60,  13);
  16  ref="+code=ROUND" class="sref">ROUNDref="+code=ROUNDK class="sref">ROUNDddd/a>, cc, aaa/a>,  20ode=bbb class="sref">bb, cc,   16 ref="+code=Kn" class="sref">in[60],  1);
  16  ref="+code=ROUND" class="sref">ROUNDref="+code=ROUNDK class="sref">ROUNDddd/a>, aaa, eee/a>,  20ode=aaa class="sref">aaa/a>, bb, in[60,  13);
  16 15);
  16  ref="+code=ROUND" class="sref">ROUNDref="+code=ROUNDK class="sref">ROUNDddd/a>, ddd/a>, dd,  20ode=ee" class="sref">ee, aa,   16 ref="+code=Kn" class="sref">in[60,  13);
  16 L116" class="line" name="L216">  16  ref="+code=ROUND" class="sref">ROUNDref="+code=ROUNDK class="sref">ROUNDddd/a>, cc, cc,  20ode=dd" class="sref">dd, ee,   16 ref="+code=Kn" class="sref">in[60,  13);
  16  ref="+code=ROUND" class="sref">ROUNDref="+code=ROUNDK class="sref">ROUNDddd/a>, aaa, bb,  20c" class="sref">ccc, aaa/a>,  20"+code=F5" class="sref">F4( FK3/a>( cc20cc> 20ode=aa" class="sref">aa, bb, in[69,  15);
  14          14          14        ref="+code=ROUNDKK class="sref">ROUNDddd/a>, cc, [602,  1);
 20o/rmd320.c#L126" id="L216" class="line" name="L216">  16
in[65,  13);
  14          14          14        ref="+code=ROUNDKK class="sref">ROUNDddd/a>, cc, [602,  1);
 21cde=dd" class="sref">dd, ee, /* Swap 2rsref">ddd">  16    ;
    ;
b,2>in  14          14        ref="+code=ROUNDKK class="sref">ROUNDddd/a>, aaa/a>, bb,  21ode=cc" class="sref">cc, dd,   14          14        b,2>in  14        ref="+code=ROUNDKK class="sref">ROUNDddd/a>, eee/a>, aaa/a>,  21ode=bbb class="sref">bb, cc,   14          14          14        b,2>inref="+code=ROUNDKK class="sref">ROUNDddd/a>, bb, eee/a>,  21ode=aaa class="sref">aaa/a>, bb,   14          14          14          14        ref="+code=ROUNDKK class="sref">ROUNDddd/a>, bb, dd,  21ode=ee" class="sref">ee, aa,     ;
b,2>in  14          14          14        ref="+code=ROUNDKK class="sref">ROUNDddd/a>, cc, cc,  21ode=dd" class="sref">dd, ee,   14          14        b,2>in  14          14        ref="+code=ROUNDKK class="sref">ROUNDddd/a>, bb, bb,  21ode=cc" class="sref">cc, dd,   14          14          14        b,2>in  14        ref="+code=ROUNDKK class="sref">ROUNDddd/a>, ddd/a>, aaa/a>,  21ode=bbb class="sref">bb, cc,   14          14          14          14        b,2>inref="+code=ROUNDKK class="sref">ROUNDddd/a>, eee/a>, cc21cc> 21ode=aa" class="sref">aa, bb, in[69,  15);
  14          14          14        ref="+code=ROUNDKK class="sref">ROUNDddd/a>, aaa, [602,  1);
 21o/rmd320.c#L126" id="L216" class="line" name="L216">  16
in[65,  13);
  14          14          14        ref="+code=ROUNDKK class="sref">ROUNDddd/a>, eee/a>, [602,  1);
 22cde=dd" class="sref">dd, ee, /* Swap 2rsref">ddd">  16    ;
    ;
b,2>in  14          14        ref="+code=ROUNDKK class="sref">ROUNDddd/a>, aaa, bb,  22ode=cc" class="sref">cc, dd,   14          14        b,2>in  14        ref="+code=ROUNDKK class="sref">ROUNDddd/a>, cc, aaa/a>,  22ode=bbb class="sref">bb, cc,   14          14          14        b,2>inref="+code=ROUNDKK class="sref">ROUNDddd/a>, cc, eee/a>,  22ode=aaa class="sref">aaa/a>, bb,   14          14          14          14        ref="+code=ROUNDKK class="sref">ROUNDddd/a>, aaa, dd,  22 clas">aaa, cc,  22ode=dd" class=ss="sref">F4( KK2  in[62226ode=cc"22lass="sref">bb,  22ode=cc" class="sref">cc,4">  14    registers */  0.c#L104" id="L114" class="line" name="L214">  14        aaa/a>,  22ode=bbb class="sref">bb, cc22cc> 22f="+code=F23 class="sref">F43/a>( bbb,= [602,  1);
 22o/rmd320.c#L126" id="L216" class="line" name="L216">  16
  14          16 ref="+code=Kn" class="sref">in[60,  13);
ddd/a>, eee/a>, [602,  1);
 23cde=dd" class="sref">dd, ee,   14          16 ref="+code=Kn" class="sref">in[60,  F5     ddd/a>, cc, bb,  23ode=cc" class="sref">cc, dd, in[60,  13);
  16 15);
  16  5     ddd/a>, cc, aaa/a>,  23ode=bbb class="sref">bb, cc,   16 ref="+code=Kn" class="sref">in[60,  13);
  16 L116" class="line" name="L216">  16  5     ddd/a>, eee/a>, eee/a>,  23ode=aaa class="sref">aaa/a>, bb,   16 ref="+code=Kn" class="sref">in[60,  13);
  16  5     ddd/a>, ddd/a>, dd,  23ode=ee" class="sref">ee, aa,   14          16 ref="+code=Kn" class="sref">in[60,  13);
ddd/a>, aaa, cc,  23ode=dd" class="sref">dd, ee,   16 15);
  16 ref="+code=Kn" class="sref">in[60,  F5     ddd/a>, eee/a>, bb,  23ode=cc" class="sref">cc, dd, in[60,  13);
  16 L116" class="line" name="L216">  16 L216" class="line" name="L216">  16  5     ddd/a>, aaa, aaa/a>,  23ode=bbb class="sref">bb, cc,   16 ref="+code=Kn" class="sref">in[60,  13);
  16 L116" class="line" name="L216">  16  5     ddd/a>, cc, cc23cc> 23ode=aa" class="sref">aa, bb,   16 ref="+code=Kn" class="sref">in[60,  13);
  16  5     ddd/a>, aaa, [602,  1);
 23o/rmd320.c#L126" id="L216" class="line" name="L216">  16
  14          16 ref="+code=Kn" class="sref">in[60,  13);
  16  5     ddd/a>, eee/a>, [602,  1);
 24cde=dd" class="sref">dd, ee,   14          16 ref="+code=Kn" class="sreL216">  16  5     ddd/a>, bb, bb,  24ode=cc" class="sref">cc, dd, in[60,  13);
  16 15);
  16  5     ddd/a>, eee/a>, aaa/a>,  24ode=bbb class="sref">bb, cc,   16 ref="+code=Kn" class="sref">in[60,  13);
  16 L116" class="line" name="L216">  16  5     ddd/a>, aaa/a>, eee/a>,  24ode=aaa class="sref">aaa/a>, bb,   16 ref="+code=Kn" class="sref">in[60,  13);
  16  5     ddd/a>, cc, dd,  24ode=ee" class="sref">ee, aa,   14          16 ref="+code=Kn" class="sref">in[60,  13);
  16  5     ddd/a>, cc, cc,  24ode=dass="sref">cc, bb,  24ode=cc" class=ss="sref">F4( FK3/a>( aaa/a>,  24ode=bbb class="sref">bb, cc,     ;
b,2>in  14          14          14        ddd/a>, aaa, cc24cc> 24ode=aa" class="sref">aa, bb,   14          14        b,2>in  14          14        ddd/a>, cc, [602,  1);
 24o/rmd320.c#L126" id="L216" class="line" name="L216">  16
  14          14          14        b,2>in  14        ddd/a>, aaa, [602,  1);
 25cde=dd" class="sref">dd, ee,   14          14          14          14        b,2>inddd/a>, eee/a>, bb,  25ode=cc" class="sref">cc, dd, b,2>in  14          14          14          14        ddd/a>, aaa, aaa/a>,  25ode=bbb class="sref">bb, cc,   14        b,2>in  14          14          14        ddd/a>, cc, eee/a>,  25ode=aaa class="sref">aaa/a>, bb,   14          14        b,2>in  14          14        ddd/a>, bb, dd,  25ode=ee" class="sref">ee, aa,   14          14          14        b,2>in  14        ddd/a>, ddd/a>, cc,  25ode=dd" class="sref">dd, ee,   14          14          14          14        b,2>inddd/a>, aaa/a>, bb,  25ode=cc" class="sref">cc, dd, b,2>in  14          14          14          14        ddd/a>, eee/a>, aaa/a>,  25ode=bbb class="sref">bb, cc,     ;
b,2>in  14          14          14        ddd/a>, cc, cc25cc> 25ode=aa" class="sref">aa, bb,   14          14        b,2>in  14          14        ddd/a>, cc, [602,  1);
 25o/rmd320.c#L126" id="L216" class="line" name="L216">  16
  14          14          14        b,2>in  14        ddd/a>, cc, [602,  1);
 26cde=dd" class="sref">dd, ee,   14          14          14          14        b,2>inddd/a>, eee/a>, bb,  26ode=cc" class="sref">cc, dd, b,2>in  14          14          14          14        ddd/a>, eee/a>, aaa/a>,  26ode=bbb class="sref">bb, cc,   14        b,2>in  14          14          14        ddd/a>, eee/a>, eee/a>,  26ode=aass="sref">eee/a>, dd,  26ode=ee" class=ss="sref">F4( KK2  in[62265ode=cc"26lass="sref">cc,  26ode=dd" class="sref">dd,4">  14    registers */  0.c#L104" id="L114" class="line" name="L214">  14        bb,  26c" class="sref">ccc, aaa/a>,  26"+code=F5" class="sref">F4( aain[62268ode=cc"26cc" class="sref">cc26cc> 26ode=aa" class="sref">aa,stats="line" name="Lstats="+co0e +.c#L104" id="L11413);
  14        [602,  1);
 26o/rmd320.c#L126" id="L216" cstats="line" name="Lstats="+co1e +.c#L104" id="L114
<="line" name="L21">  ">  14        [602,  1);
 27cde=dd" class="sref">dd,stats="line" name="Lstats="+co2e +.c#L104" id="L114L116" class="line" name >  14        bb,  27ode=cc" class="sref">cc,stats="line" name="Lstats="+co3e +.c#L104" id="L114L216" class="line" name >  14        aaa/a>,  27ode=bbb class="sref">bb,stats="line" name="Lstats="+co4e +.c#L104" id="L114ref="+code=Kn" class="s >  14        eee/a>,  27ode=aaa class="sref">aaa/a>,stats="line" name="Lstats="+co5e +.c#L104" id="L11413s="line" name="L214">   >  14        dd,  27ode=ee" class="sref">ee,stats="line" name="Lstats="+co6e +.c#L104" id="L114
   >  14        cc,  27ode=dd" class="sref">dd,stats="line" name="Lstats="+co7e +.c#L104" id="L114L1  ;
  14        bb,  27ode=cc" class="sref">cc,stats="line" name="Lstats="+co8e +.c#L104" id="L114L2s="line" name="L214">   >  14        aaa/a>,  27ode=bbb class="sref">bb,stats="line" name="Lstats="+co9e +.c#L104" id="L114res="line" name="L214">   >  14        cc27cc> 278" class="sref">ccc, [602,  1);
 27o/rmd320.c#L1return >  14        [602,  1);
 28cde=d}>  14        bb,  281" class="sref">ccc, aaa/a>,  28ode=bstatic intc#L104" id="L114>, ccc, eee/a>,  28ode=a{ass="sref">ccc, dd,  28ode=ee" classstructc#L104" id="L114>, ee, cc,  28ode=dass="sref">cc, bb,  28ode=cc" class="sref">cc,rctx="line" name="L>ctx/rmd->#L104" id="L114
yte_count="line" name="L
yte_count/rmd3.c0 >  14        aaa/a>,  28ode=bbb class="sref">bb, cc28cc> 28ode=aa" class="sref">aa,rctx="line" name="L>ctx/rmd->#L104" id="L114stats="line" name="Lstats="+co0e .c#L104" id="L114RMD_H0="line" name="LRMD_H0">   >  14        [602,  1);
 28o/rmd320.c#L126" id="L216" crctx="line" name="L>ctx/rmd->#L104" id="L114stats="line" name="Lstats="+co1e .c#L104" id="L114RMD_H1        >  14        [602,  1);
 29cde=dd" class="sref">dd,rctx="line" name="L>ctx/rmd->#L104" id="L114stats="line" name="Lstats="+co2e .c#L104" id="L114RMD_H         >  14        bb,  29ode=cc" class="sref">cc,rctx="line" name="L>ctx/rmd->#L104" id="L114stats="line" name="Lstats="+co3e .c#L104" id="L114RMD_H3        >  14        aaa/a>,  29ode=bbb class="sref">bb,rctx="line" name="L>ctx/rmd->#L104" id="L114stats="line" name="Lstats="+co4e .c#L104" id="L114RMD_Href="+code=ROUNDRMD_Hr">   >  14        eee/a>,  29ode=aaa class="sref">aaa/a>,rctx="line" name="L>ctx/rmd->#L104" id="L114stats="line" name="Lstats="+co5e .c#L104" id="L114RMD_H5        >  14        dd,  29ode=ee" class="sref">ee,rctx="line" name="L>ctx/rmd->#L104" id="L114stats="line" name="Lstats="+co6e .c#L104" id="L114RMD_H6        >  14        cc,  29ode=dd" class="sref">dd,rctx="line" name="L>ctx/rmd->#L104" id="L114stats="line" name="Lstats="+co7e .c#L104" id="L114RMD_H7        >  14        bb,  29ode=cc" class="sref">cc,rctx="line" name="L>ctx/rmd->#L104" id="L114stats="line" name="Lstats="+co8e .c#L104" id="L114RMD_H8        >  14        aaa/a>,  29ode=bbb class="sref">bb,rctx="line" name="L>ctx/rmd->#L104" id="L114stats="line" name="Lstats="+co9e .c#L104" id="L114RMD_H9        >  14        cc29cc> 298" class="sref">ccc, [602,  1);
 29o/rmd320.c#L126" id="L216" cmemset="line" name="Lmemset="sref">ee, ee, [602,  1);
 30c" class="sref">ccc, bb,  30ode=cc" classreturnc0 >  14        aaa/a>,  30ode=b}>  14        eee/a>,  30ode=aass="sref">eee/a>, dd,  30ode=estatic intc#L104" id="L114>, eee/a>, cc,  30ode=dd" classsssssssssssssssssunsigned intc#L104" id="L114lef">ddd/a>, ccc, bb,  30c" cl{ass="sref">ccc, aaa/a>,  30"+code=F5" clstructc#L104" id="L114>, ee, cc30cc> 30ode=aa" classodestc#L104" id="L114u3      ee, ee, [602,  1);
 30o/rmd>  14        [602,  1);
 31cde=dd" class="sref">dd,rctx="line" name="L>ctx/rmd->#L104" id="L114
yte_count="line" name="L
yte_count/rmd3+.c#L104" id="L114lef">ddd/a>,   14        bb,  311" class="sref">ccc, aaa/a>,  31ode=bbb class=ss="sref">F4( FK3/a>( eee/a>,  31ode=aaa classif ef">ee, ddd/a>, ccc, dd,  31ode=ee" class320.c#L126" id="L216" cmemcpy="line" name="Lmemcpy="sre(char *)f">ee, ee, ee, eee/a>, cc,  31ode=dd" classsssssssssssssss#L104" id="L114Lats="line" name="LLats/rmd,c#L104" id="L114lef">ddd/a>,   14        bb,  31ode=cc" classssssssssgotoc#L104" id="L114out="line" name="Lout/rmd >  14        aaa/a>,  31ode=bbb class}>  14        cc31cc> 318" class="sref">ccc, [602,  1);
 31o/rmd320.c#L126" id="L216" cmemcpy="line" name="Lmemcpy="sre(char *)f">ee, ee, ee, eee/a>, [602,  1);
 32cde=dd" classsssssss#L104" id="L114Lats="line" name="LLats/rmd,c#L104" id="L1141vail="line" name="L2vail/rmd) >  14        bb,  321" class="sref">ccc, aaa/a>,  32ode=bbb class="sref">bb,>, ee, eee/a>,  32ode=aaa class="sref">aaa/a>,Lats="line" name="LLats/rmd +.c#L104" id="L1141vail="line" name="L2vail/rmd >  14        dd,  32ode=ee" class="sref">ee,lef">ddd/a>, cc,  32ode=dass="sref">cc, bb,  32ode=cc" classwhile ef">ee, ddd/a>, ee, ccc, aaa/a>,  327de=cc" classssssssss26" id="L216" cmemcpy="line" name="Lmemcpy="sref">ee, ee, cc32cc> 32f="+code=F23 bb class="sref">bb,>, ee, [602,  1);
 32o/rmd320.c#L1aa class="sref">aaa/a>,Lats="line" name="LLats/rmd +.csizeofef">ee, [602,  1);
 33cde=dd" classssssssss="sref">ee,lef">ddd/a>, ee, bb,  33ode=cc" class}>  14        aaa/a>,  33ode=b>  14        eee/a>,  33ode=aaa class="sref">aaa/a>,memcpy="line" name="Lmemcpy="sref">ee, ddd/a>,   14        dd,  33 clas">aaa, cc,  33ode=d#L104" id="L114out="line" name="Lout/rmd:">aaa, bb,  33ode=cc" classreturnc0 >  14        aaa/a>,  33ode=b}>  14        cc33cc> 338" class="sref">ccc, [602,  1);
 33o/rmd=ss="sref">F4( FK3/a>( [602,  1);
 34cde=dstatic intc#L104" id="L114>, ccc, bb,  34ode=c{ass="sref">ccc, aaa/a>,  34ode=bbb classstructc#L104" id="L114>, ee, eee/a>,  34ode=aaa class="sref">aaa/a>,u3      ddd/a>,   14        dd,  34ode=ee" class="sref">ee,__le6ref="+code=ROUND__le6rde=bb#L104" id="L114bits="line" name="L
its/rmd >  14        cc,  34ode=dd" class="sref">dd,__le3      ee, ee, bb,  34ode=cc" classstatic odestc#L104" id="L114u8     ddd/a>,   14        aaa/a>,  34ode=bbb class="sref">bb, cc34cc> 34ode=aa" class="sref">aa,bits="line" name="L
its/rmd3.c#L104" id="L114cpu_to_le6ref="+code=ROUNDcpu_to_le6r="sref">ee, eee/a>, [602,  1);
 34o/rmd>  14        [602,  1);
 35cde=dd" class=ss="sref">F4( FK3/a>( bb,  35ode=cc" class="sref">cc,index="line" name="Lindex/rmd3.c#L104" id="L114rctx="line" name="L>ctx/rmd->#L104" id="L114
yte_count="line" name="L
yte_count/rmd3& 0x3flass="sref">eee/a>, aaa/a>,  35ode=bbb class="sref">bb,padlef">ddd/a>, ee, ee, ee, eee/a>, eee/a>,  35ode=aaa class="sref">aaa/a>,>, ddd/a>, ddd/a>, eee/a>, dd,  35 clas">aaa, cc,  35ode=dd" class=ss="sref">F4( FK3/a>( bb,  35ode=cc" class="sref">cc,>, aa,bits="line" name="L
its/rmd,csizeofef">ee, aaa/a>,  35ode=bbb class="sref">bb, cc35cc> 35ode=aa" class=ss="sref">F4( FK3/a>( [602,  1);
 35o/rmd320.c#L1forcef">ee, ccc, [602,  1);
 36cde=dd" classssssssss="sref">ee,Lst="line" name="LLst/rmd[#L104" id="L114i     aa,rctx="line" name="L>ctx/rmd->#L104" id="L114stats="line" name="Lstats="+co#L104" id="L114i     bb,  361" class="sref">ccc, aaa/a>,  36ode=bbb class=ss="sref">F4( FK3/a>( eee/a>,  36ode=aaa class="sref">aaa/a>,memset="line" name="Lmemset="sref">ee, dd,  36 clas">aaa, cc,  36ode=dd" classreturnc0 >  14        bb,  36c" cl}>  14        aaa/a>,  36ode=bbb class="sref">bb, cc36cc> 36ode=astatic structc#L104" id="L114shash_alg">ddd/a>, ddd/a>, ccc, [602,  1);
 36o/rmd320.c#L1.="sref">ee,Ligestsize="line" name="LLigestsize/rmd320.c=a class="sref">aaa/a>,RMDccc, [602,  1);
 37cde=dd" class.="sref">ee,init="line" name="Linit="srassssssssss=a class="sref">aaa/a>,>, ccc, bb,  37ode=cc" class.="sref">ee,updats="line" name="Lupdats="srsssssssss=a class="sref">aaa/a>,>, ccc, aaa/a>,  37ode=bbb class.="sref">ee,final="line" name="Lfinal="srssssssssss=a class="sref">aaa/a>,>, ccc, eee/a>,  37ode=aaa class.="sref">ee,Les size="line" name="LLes sizede=aaa clas=a classsizeofestructc#L104" id="L114>, eee/a>, dd,  37ode=ee" class.="sref">ee,base="line" name="Lbase="srassssssssss=a class{ass="sref">ccc, cc,  37ode=dd" classssssssss.="sref">ee,cra_a>, lass="line" namcra_a>, de=dd" class=a clas=ss="sref">F4string">f">KK2>, KK2sref">F,ass="sref">eee/a>, bb,  37ode=cc" classssssssss.="sref">ee,cra_flags="line" name="Lcra_flagsde=aaa clas=a clas="sref">ee,CRYPTO_ALG_TYPE_SHASH="line" name="LCRYPTO_ALG_TYPE_SHASH="srOass="sref">ccc, aaa/a>,  377de=cc" classssssssss.="sref">ee,cra_blocksize="line" name="Lcra_blocksizede=cc" =a clas="sref">ee,RMDccc, cc37cc> 37f="+code=F23 bb class.="sref">ee,cra_module="line" name="Lcra_module="+code=F2=a clas="sref">ee,THIS_MODULE="line" name="LTHIS_MODULE="srOass="sref">ccc, [602,  1);
 37o/rmd320.c#L1}>  14        [602,  1);
 38cde=d} >  14        bb,  381" class="sref">ccc, aaa/a>,  38ode=bstatic intc#L104" id="L114__init="line" name="L__init="src#L104" id="L114>, ccc, eee/a>,  38ode=a{ass="sref">ccc, dd,  38ode=ee" classreturnc="sref">ee,crcc  aa,alg">ddd/a>,   14        cc,  38ode=d}>  14        bb,  38c" class="sref">ccc, aaa/a>,  38ode=bstatic voidc#L104" id="L114__exit="line" name="L__exit="src#L104" id="L114>, ccc, cc38cc> 38ode=a{ass="sref">ccc, [602,  1);
 38o/rmd320.c#L126" id="L216" ccrcc  aa,alg">ddd/a>,   14        [602,  1);
 39cde=d}>  14        bb,  391" class="sref">ccc, aaa/a>,  39ode=b="sref">aaa/a>,module_init="line" name="Lmodule_init="sref">ee,   14        eee/a>,  39ode=a="sref">aaa/a>,module_exit="line" name="Lmodule_exit="sref">ee,   14        dd,  39 clas">aaa, cc,  39ode=d#L104" id="L114MODULE_LICENSE="line" name="LMODULE_LICENSE="srefss="sref">F4string">f">KK2GPLf">KK2sref">F) >  14        bb,  39ode=c#L104" id="L114MODULE_AUTHOR="line" name="LMODULE_AUTHOR="srefss="sref">F4string">f">KK2Adrian-Ken Rueegsegger3<ken@"L11labs.ch>f">KK2sref">F) >  14        aaa/a>,  39ode=b#L104" id="L114MODULE_DESCRIPTION="line" name="LMODULE_DESCRIPTION="srefss="sref">F4string">f">KK2RIPEMD-hre Message Digestf">KK2sref">F) >  14        cc39cc> 398" cl


The original LXR software bycthe 14 http://sourceforge.net/projects/lx ">LXR unity/rmdOUthis experi>( mailto:lx @"srux.no">lx @"srux.no/rmd.
lx ."srux.no kindly ho http://www.redpill-"srpro.no">Redpill Lsrpro AS/rmdOUprovider3of Lsrux odesulting and operatides services since 1995.