Ejemplo n.º 1
0
static void ripemd160_transform(uint32_t *state, const uint8_t buffer[64], int ext)
{
    uint32_t a, b, c, d, e, f, g, h, i, j, t;
    uint32_t block[16];
    int n;

    if (ext) {
        a = state[0]; b = state[1]; c = state[2]; d = state[3]; e = state[4];
        f = state[5]; g = state[6]; h = state[7]; i = state[8]; j = state[9];
    } else {
        a = f = state[0];
        b = g = state[1];
        c = h = state[2];
        d = i = state[3];
        e = j = state[4];
    }

    for (n = 0; n < 16; n++)
        block[n] = AV_RL32(buffer + 4 * n);
    n = 0;

#if CONFIG_SMALL
    for (; n < 16;) {
        ROUND160_0_TO_15(a,b,c,d,e,f,g,h,i,j);
        t = e; e = d; d = c; c = b; b = a; a = t;
        t = j; j = i; i = h; h = g; g = f; f = t;
    }
    SWAP(b,g)

    for (; n < 32;) {
        ROUND160_16_TO_31(a,b,c,d,e,f,g,h,i,j);
        t = e; e = d; d = c; c = b; b = a; a = t;
        t = j; j = i; i = h; h = g; g = f; f = t;
    }
    SWAP(d,i)

    for (; n < 48;) {
        ROUND160_32_TO_47(a,b,c,d,e,f,g,h,i,j);
        t = e; e = d; d = c; c = b; b = a; a = t;
        t = j; j = i; i = h; h = g; g = f; f = t;
    }
    SWAP(a,f)

    for (; n < 64;) {
        ROUND160_48_TO_63(a,b,c,d,e,f,g,h,i,j);
        t = e; e = d; d = c; c = b; b = a; a = t;
        t = j; j = i; i = h; h = g; g = f; f = t;
    }
    SWAP(c,h)

    for (; n < 80;) {
        ROUND160_64_TO_79(a,b,c,d,e,f,g,h,i,j);
        t = e; e = d; d = c; c = b; b = a; a = t;
        t = j; j = i; i = h; h = g; g = f; f = t;
    }
    SWAP(e,j)
#else

#define R160_0                             \
    ROUND160_0_TO_15(a,b,c,d,e,f,g,h,i,j); \
    ROUND160_0_TO_15(e,a,b,c,d,j,f,g,h,i); \
    ROUND160_0_TO_15(d,e,a,b,c,i,j,f,g,h); \
    ROUND160_0_TO_15(c,d,e,a,b,h,i,j,f,g); \
    ROUND160_0_TO_15(b,c,d,e,a,g,h,i,j,f)

    R160_0; R160_0; R160_0;
    ROUND160_0_TO_15(a,b,c,d,e,f,g,h,i,j);
    SWAP(a,f)

#define R160_16                             \
    ROUND160_16_TO_31(e,a,b,c,d,j,f,g,h,i); \
    ROUND160_16_TO_31(d,e,a,b,c,i,j,f,g,h); \
    ROUND160_16_TO_31(c,d,e,a,b,h,i,j,f,g); \
    ROUND160_16_TO_31(b,c,d,e,a,g,h,i,j,f); \
    ROUND160_16_TO_31(a,b,c,d,e,f,g,h,i,j)

    R160_16; R160_16; R160_16;
    ROUND160_16_TO_31(e,a,b,c,d,j,f,g,h,i);
    SWAP(b,g)

#define R160_32                             \
    ROUND160_32_TO_47(d,e,a,b,c,i,j,f,g,h); \
    ROUND160_32_TO_47(c,d,e,a,b,h,i,j,f,g); \
    ROUND160_32_TO_47(b,c,d,e,a,g,h,i,j,f); \
    ROUND160_32_TO_47(a,b,c,d,e,f,g,h,i,j); \
    ROUND160_32_TO_47(e,a,b,c,d,j,f,g,h,i)

    R160_32; R160_32; R160_32;
    ROUND160_32_TO_47(d,e,a,b,c,i,j,f,g,h);
    SWAP(c,h)

#define R160_48                             \
    ROUND160_48_TO_63(c,d,e,a,b,h,i,j,f,g); \
    ROUND160_48_TO_63(b,c,d,e,a,g,h,i,j,f); \
    ROUND160_48_TO_63(a,b,c,d,e,f,g,h,i,j); \
    ROUND160_48_TO_63(e,a,b,c,d,j,f,g,h,i); \
    ROUND160_48_TO_63(d,e,a,b,c,i,j,f,g,h)

    R160_48; R160_48; R160_48;
    ROUND160_48_TO_63(c,d,e,a,b,h,i,j,f,g);
    SWAP(d,i)

#define R160_64                             \
    ROUND160_64_TO_79(b,c,d,e,a,g,h,i,j,f); \
    ROUND160_64_TO_79(a,b,c,d,e,f,g,h,i,j); \
    ROUND160_64_TO_79(e,a,b,c,d,j,f,g,h,i); \
    ROUND160_64_TO_79(d,e,a,b,c,i,j,f,g,h); \
    ROUND160_64_TO_79(c,d,e,a,b,h,i,j,f,g)

    R160_64; R160_64; R160_64;
    ROUND160_64_TO_79(b,c,d,e,a,g,h,i,j,f);
    SWAP(e,j)
#endif

    if (ext) {
        state[0] += a; state[1] += b; state[2] += c; state[3] += d; state[4] += e;
        state[5] += f; state[6] += g; state[7] += h; state[8] += i; state[9] += j;
    } else {
        i += c + state[1];
        state[1] = state[2] + d + j;
        state[2] = state[3] + e + f;
        state[3] = state[4] + a + g;
        state[4] = state[0] + b + h;
        state[0] = i;
    }
}
Ejemplo n.º 2
0
static void ripemd160_transform(uint32_t *state, const uint8_t buffer[64], int ext)
{
    uint32_t a, b, c, d, e, f, g, h, i, j;
    uint32_t block[16];
    int n;

    if (ext) {
        a = state[0]; b = state[1]; c = state[2]; d = state[3]; e = state[4];
        f = state[5]; g = state[6]; h = state[7]; i = state[8]; j = state[9];
    } else {
        a = f = state[0];
        b = g = state[1];
        c = h = state[2];
        d = i = state[3];
        e = j = state[4];
    }

    for (n = 0; n < 16; n++)
        block[n] = AV_RL32(buffer + 4 * n);

    for (n = 0; n < 16 - 1;) {
        ROUND160_0_TO_15(a,b,c,d,e,f,g,h,i,j);
        ROUND160_0_TO_15(e,a,b,c,d,j,f,g,h,i);
        ROUND160_0_TO_15(d,e,a,b,c,i,j,f,g,h);
        ROUND160_0_TO_15(c,d,e,a,b,h,i,j,f,g);
        ROUND160_0_TO_15(b,c,d,e,a,g,h,i,j,f);
    }
    ROUND160_0_TO_15(a,b,c,d,e,f,g,h,i,j);
    SWAP(a,f)

    for (; n < 32 - 1;) {
        ROUND160_16_TO_31(e,a,b,c,d,j,f,g,h,i);
        ROUND160_16_TO_31(d,e,a,b,c,i,j,f,g,h);
        ROUND160_16_TO_31(c,d,e,a,b,h,i,j,f,g);
        ROUND160_16_TO_31(b,c,d,e,a,g,h,i,j,f);
        ROUND160_16_TO_31(a,b,c,d,e,f,g,h,i,j);
    }
    ROUND160_16_TO_31(e,a,b,c,d,j,f,g,h,i);
    SWAP(b,g)

    for (; n < 48 - 1;) {
        ROUND160_32_TO_47(d,e,a,b,c,i,j,f,g,h);
        ROUND160_32_TO_47(c,d,e,a,b,h,i,j,f,g);
        ROUND160_32_TO_47(b,c,d,e,a,g,h,i,j,f);
        ROUND160_32_TO_47(a,b,c,d,e,f,g,h,i,j);
        ROUND160_32_TO_47(e,a,b,c,d,j,f,g,h,i);
    }
    ROUND160_32_TO_47(d,e,a,b,c,i,j,f,g,h);
    SWAP(c,h)

    for (; n < 64 - 1;) {
        ROUND160_48_TO_63(c,d,e,a,b,h,i,j,f,g);
        ROUND160_48_TO_63(b,c,d,e,a,g,h,i,j,f);
        ROUND160_48_TO_63(a,b,c,d,e,f,g,h,i,j);
        ROUND160_48_TO_63(e,a,b,c,d,j,f,g,h,i);
        ROUND160_48_TO_63(d,e,a,b,c,i,j,f,g,h);
    }
    ROUND160_48_TO_63(c,d,e,a,b,h,i,j,f,g);
    SWAP(d,i)

    for (; n < 80 - 1;) {
        ROUND160_64_TO_79(b,c,d,e,a,g,h,i,j,f);
        ROUND160_64_TO_79(a,b,c,d,e,f,g,h,i,j);
        ROUND160_64_TO_79(e,a,b,c,d,j,f,g,h,i);
        ROUND160_64_TO_79(d,e,a,b,c,i,j,f,g,h);
        ROUND160_64_TO_79(c,d,e,a,b,h,i,j,f,g);
    }
    ROUND160_64_TO_79(b,c,d,e,a,g,h,i,j,f);
    SWAP(e,j)

    if (ext) {
        state[0] += a; state[1] += b; state[2] += c; state[3] += d; state[4] += e;
        state[5] += f; state[6] += g; state[7] += h; state[8] += i; state[9] += j;
    } else {
        i += c + state[1];
        state[1] = state[2] + d + j;
        state[2] = state[3] + e + f;
        state[3] = state[4] + a + g;
        state[4] = state[0] + b + h;
        state[0] = i;
    }
}