Beispiel #1
0
static void sha1_compress(ccdigest_state_t s, size_t num, const void *buf)
{
	const unsigned char *data=buf;
    register uint32_t A,B,C,D,E,T,l;
#ifndef MD32_XARRAY
	uint32_t    XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7,
				XX8, XX9,XX10,XX11,XX12,XX13,XX14,XX15;
#else
	uint32_t    XX[16];
#endif
    uint32_t *state=ccdigest_u32(s);

	A=state[0];
	B=state[1];
	C=state[2];
	D=state[3];
	E=state[4];

	for (;;)
		{

	HOST_c2l(data,l); X( 0)=l;		HOST_c2l(data,l); X( 1)=l;
	BODY_00_15( 0,A,B,C,D,E,T,X( 0));	HOST_c2l(data,l); X( 2)=l;
	BODY_00_15( 1,T,A,B,C,D,E,X( 1));	HOST_c2l(data,l); X( 3)=l;
	BODY_00_15( 2,E,T,A,B,C,D,X( 2));	HOST_c2l(data,l); X( 4)=l;
	BODY_00_15( 3,D,E,T,A,B,C,X( 3));	HOST_c2l(data,l); X( 5)=l;
	BODY_00_15( 4,C,D,E,T,A,B,X( 4));	HOST_c2l(data,l); X( 6)=l;
	BODY_00_15( 5,B,C,D,E,T,A,X( 5));	HOST_c2l(data,l); X( 7)=l;
	BODY_00_15( 6,A,B,C,D,E,T,X( 6));	HOST_c2l(data,l); X( 8)=l;
	BODY_00_15( 7,T,A,B,C,D,E,X( 7));	HOST_c2l(data,l); X( 9)=l;
	BODY_00_15( 8,E,T,A,B,C,D,X( 8));	HOST_c2l(data,l); X(10)=l;
	BODY_00_15( 9,D,E,T,A,B,C,X( 9));	HOST_c2l(data,l); X(11)=l;
	BODY_00_15(10,C,D,E,T,A,B,X(10));	HOST_c2l(data,l); X(12)=l;
	BODY_00_15(11,B,C,D,E,T,A,X(11));	HOST_c2l(data,l); X(13)=l;
	BODY_00_15(12,A,B,C,D,E,T,X(12));	HOST_c2l(data,l); X(14)=l;
	BODY_00_15(13,T,A,B,C,D,E,X(13));	HOST_c2l(data,l); X(15)=l;
	BODY_00_15(14,E,T,A,B,C,D,X(14));
	BODY_00_15(15,D,E,T,A,B,C,X(15));

	BODY_16_19(16,C,D,E,T,A,B,X( 0),X( 0),X( 2),X( 8),X(13));
	BODY_16_19(17,B,C,D,E,T,A,X( 1),X( 1),X( 3),X( 9),X(14));
	BODY_16_19(18,A,B,C,D,E,T,X( 2),X( 2),X( 4),X(10),X(15));
	BODY_16_19(19,T,A,B,C,D,E,X( 3),X( 3),X( 5),X(11),X( 0));

	BODY_20_31(20,E,T,A,B,C,D,X( 4),X( 4),X( 6),X(12),X( 1));
	BODY_20_31(21,D,E,T,A,B,C,X( 5),X( 5),X( 7),X(13),X( 2));
	BODY_20_31(22,C,D,E,T,A,B,X( 6),X( 6),X( 8),X(14),X( 3));
	BODY_20_31(23,B,C,D,E,T,A,X( 7),X( 7),X( 9),X(15),X( 4));
	BODY_20_31(24,A,B,C,D,E,T,X( 8),X( 8),X(10),X( 0),X( 5));
	BODY_20_31(25,T,A,B,C,D,E,X( 9),X( 9),X(11),X( 1),X( 6));
	BODY_20_31(26,E,T,A,B,C,D,X(10),X(10),X(12),X( 2),X( 7));
	BODY_20_31(27,D,E,T,A,B,C,X(11),X(11),X(13),X( 3),X( 8));
	BODY_20_31(28,C,D,E,T,A,B,X(12),X(12),X(14),X( 4),X( 9));
	BODY_20_31(29,B,C,D,E,T,A,X(13),X(13),X(15),X( 5),X(10));
	BODY_20_31(30,A,B,C,D,E,T,X(14),X(14),X( 0),X( 6),X(11));
	BODY_20_31(31,T,A,B,C,D,E,X(15),X(15),X( 1),X( 7),X(12));

	BODY_32_39(32,E,T,A,B,C,D,X( 0),X( 2),X( 8),X(13));
	BODY_32_39(33,D,E,T,A,B,C,X( 1),X( 3),X( 9),X(14));
	BODY_32_39(34,C,D,E,T,A,B,X( 2),X( 4),X(10),X(15));
	BODY_32_39(35,B,C,D,E,T,A,X( 3),X( 5),X(11),X( 0));
	BODY_32_39(36,A,B,C,D,E,T,X( 4),X( 6),X(12),X( 1));
	BODY_32_39(37,T,A,B,C,D,E,X( 5),X( 7),X(13),X( 2));
	BODY_32_39(38,E,T,A,B,C,D,X( 6),X( 8),X(14),X( 3));
	BODY_32_39(39,D,E,T,A,B,C,X( 7),X( 9),X(15),X( 4));

	BODY_40_59(40,C,D,E,T,A,B,X( 8),X(10),X( 0),X( 5));
	BODY_40_59(41,B,C,D,E,T,A,X( 9),X(11),X( 1),X( 6));
	BODY_40_59(42,A,B,C,D,E,T,X(10),X(12),X( 2),X( 7));
	BODY_40_59(43,T,A,B,C,D,E,X(11),X(13),X( 3),X( 8));
	BODY_40_59(44,E,T,A,B,C,D,X(12),X(14),X( 4),X( 9));
	BODY_40_59(45,D,E,T,A,B,C,X(13),X(15),X( 5),X(10));
	BODY_40_59(46,C,D,E,T,A,B,X(14),X( 0),X( 6),X(11));
	BODY_40_59(47,B,C,D,E,T,A,X(15),X( 1),X( 7),X(12));
	BODY_40_59(48,A,B,C,D,E,T,X( 0),X( 2),X( 8),X(13));
	BODY_40_59(49,T,A,B,C,D,E,X( 1),X( 3),X( 9),X(14));
	BODY_40_59(50,E,T,A,B,C,D,X( 2),X( 4),X(10),X(15));
	BODY_40_59(51,D,E,T,A,B,C,X( 3),X( 5),X(11),X( 0));
	BODY_40_59(52,C,D,E,T,A,B,X( 4),X( 6),X(12),X( 1));
	BODY_40_59(53,B,C,D,E,T,A,X( 5),X( 7),X(13),X( 2));
	BODY_40_59(54,A,B,C,D,E,T,X( 6),X( 8),X(14),X( 3));
	BODY_40_59(55,T,A,B,C,D,E,X( 7),X( 9),X(15),X( 4));
	BODY_40_59(56,E,T,A,B,C,D,X( 8),X(10),X( 0),X( 5));
	BODY_40_59(57,D,E,T,A,B,C,X( 9),X(11),X( 1),X( 6));
	BODY_40_59(58,C,D,E,T,A,B,X(10),X(12),X( 2),X( 7));
	BODY_40_59(59,B,C,D,E,T,A,X(11),X(13),X( 3),X( 8));

	BODY_60_79(60,A,B,C,D,E,T,X(12),X(14),X( 4),X( 9));
	BODY_60_79(61,T,A,B,C,D,E,X(13),X(15),X( 5),X(10));
	BODY_60_79(62,E,T,A,B,C,D,X(14),X( 0),X( 6),X(11));
	BODY_60_79(63,D,E,T,A,B,C,X(15),X( 1),X( 7),X(12));
	BODY_60_79(64,C,D,E,T,A,B,X( 0),X( 2),X( 8),X(13));
	BODY_60_79(65,B,C,D,E,T,A,X( 1),X( 3),X( 9),X(14));
	BODY_60_79(66,A,B,C,D,E,T,X( 2),X( 4),X(10),X(15));
	BODY_60_79(67,T,A,B,C,D,E,X( 3),X( 5),X(11),X( 0));
	BODY_60_79(68,E,T,A,B,C,D,X( 4),X( 6),X(12),X( 1));
	BODY_60_79(69,D,E,T,A,B,C,X( 5),X( 7),X(13),X( 2));
	BODY_60_79(70,C,D,E,T,A,B,X( 6),X( 8),X(14),X( 3));
	BODY_60_79(71,B,C,D,E,T,A,X( 7),X( 9),X(15),X( 4));
	BODY_60_79(72,A,B,C,D,E,T,X( 8),X(10),X( 0),X( 5));
	BODY_60_79(73,T,A,B,C,D,E,X( 9),X(11),X( 1),X( 6));
	BODY_60_79(74,E,T,A,B,C,D,X(10),X(12),X( 2),X( 7));
	BODY_60_79(75,D,E,T,A,B,C,X(11),X(13),X( 3),X( 8));
	BODY_60_79(76,C,D,E,T,A,B,X(12),X(14),X( 4),X( 9));
	BODY_60_79(77,B,C,D,E,T,A,X(13),X(15),X( 5),X(10));
	BODY_60_79(78,A,B,C,D,E,T,X(14),X( 0),X( 6),X(11));
	BODY_60_79(79,T,A,B,C,D,E,X(15),X( 1),X( 7),X(12));

	state[0]=(state[0]+E)&0xffffffff;
	state[1]=(state[1]+T)&0xffffffff;
	state[2]=(state[2]+A)&0xffffffff;
	state[3]=(state[3]+B)&0xffffffff;
	state[4]=(state[4]+C)&0xffffffff;

	if (--num <= 0) break;

	A=state[0];
	B=state[1];
	C=state[2];
	D=state[3];
	E=state[4];

	}
}
Beispiel #2
0
static void rmd128_compress(ccdigest_state_t state, unsigned long nblocks, const void *in)
{
    uint32_t aa,bb,cc,dd,aaa,bbb,ccc,ddd,X[16];
    int i;
    uint32_t *s = ccdigest_u32(state);
    const unsigned char *buf = in;

    while(nblocks--) {

        /* load words X */
        for (i = 0; i < 16; i++){
            CC_LOAD32_LE(X[i], buf + (4 * i));
        }

        /* load state */
        aa = aaa = s[0];
        bb = bbb = s[1];
        cc = ccc = s[2];
        dd = ddd = s[3];

        /* round 1 */
        FF(aa, bb, cc, dd, X[ 0], 11);
        FF(dd, aa, bb, cc, X[ 1], 14);
        FF(cc, dd, aa, bb, X[ 2], 15);
        FF(bb, cc, dd, aa, X[ 3], 12);
        FF(aa, bb, cc, dd, X[ 4],  5);
        FF(dd, aa, bb, cc, X[ 5],  8);
        FF(cc, dd, aa, bb, X[ 6],  7);
        FF(bb, cc, dd, aa, X[ 7],  9);
        FF(aa, bb, cc, dd, X[ 8], 11);
        FF(dd, aa, bb, cc, X[ 9], 13);
        FF(cc, dd, aa, bb, X[10], 14);
        FF(bb, cc, dd, aa, X[11], 15);
        FF(aa, bb, cc, dd, X[12],  6);
        FF(dd, aa, bb, cc, X[13],  7);
        FF(cc, dd, aa, bb, X[14],  9);
        FF(bb, cc, dd, aa, X[15],  8);

        /* round 2 */
        GG(aa, bb, cc, dd, X[ 7],  7);
        GG(dd, aa, bb, cc, X[ 4],  6);
        GG(cc, dd, aa, bb, X[13],  8);
        GG(bb, cc, dd, aa, X[ 1], 13);
        GG(aa, bb, cc, dd, X[10], 11);
        GG(dd, aa, bb, cc, X[ 6],  9);
        GG(cc, dd, aa, bb, X[15],  7);
        GG(bb, cc, dd, aa, X[ 3], 15);
        GG(aa, bb, cc, dd, X[12],  7);
        GG(dd, aa, bb, cc, X[ 0], 12);
        GG(cc, dd, aa, bb, X[ 9], 15);
        GG(bb, cc, dd, aa, X[ 5],  9);
        GG(aa, bb, cc, dd, X[ 2], 11);
        GG(dd, aa, bb, cc, X[14],  7);
        GG(cc, dd, aa, bb, X[11], 13);
        GG(bb, cc, dd, aa, X[ 8], 12);

        /* round 3 */
        HH(aa, bb, cc, dd, X[ 3], 11);
        HH(dd, aa, bb, cc, X[10], 13);
        HH(cc, dd, aa, bb, X[14],  6);
        HH(bb, cc, dd, aa, X[ 4],  7);
        HH(aa, bb, cc, dd, X[ 9], 14);
        HH(dd, aa, bb, cc, X[15],  9);
        HH(cc, dd, aa, bb, X[ 8], 13);
        HH(bb, cc, dd, aa, X[ 1], 15);
        HH(aa, bb, cc, dd, X[ 2], 14);
        HH(dd, aa, bb, cc, X[ 7],  8);
        HH(cc, dd, aa, bb, X[ 0], 13);
        HH(bb, cc, dd, aa, X[ 6],  6);
        HH(aa, bb, cc, dd, X[13],  5);
        HH(dd, aa, bb, cc, X[11], 12);
        HH(cc, dd, aa, bb, X[ 5],  7);
        HH(bb, cc, dd, aa, X[12],  5);

        /* round 4 */
        II(aa, bb, cc, dd, X[ 1], 11);
        II(dd, aa, bb, cc, X[ 9], 12);
        II(cc, dd, aa, bb, X[11], 14);
        II(bb, cc, dd, aa, X[10], 15);
        II(aa, bb, cc, dd, X[ 0], 14);
        II(dd, aa, bb, cc, X[ 8], 15);
        II(cc, dd, aa, bb, X[12],  9);
        II(bb, cc, dd, aa, X[ 4],  8);
        II(aa, bb, cc, dd, X[13],  9);
        II(dd, aa, bb, cc, X[ 3], 14);
        II(cc, dd, aa, bb, X[ 7],  5);
        II(bb, cc, dd, aa, X[15],  6);
        II(aa, bb, cc, dd, X[14],  8);
        II(dd, aa, bb, cc, X[ 5],  6);
        II(cc, dd, aa, bb, X[ 6],  5);
        II(bb, cc, dd, aa, X[ 2], 12);

        /* parallel round 1 */
        III(aaa, bbb, ccc, ddd, X[ 5],  8);
        III(ddd, aaa, bbb, ccc, X[14],  9);
        III(ccc, ddd, aaa, bbb, X[ 7],  9);
        III(bbb, ccc, ddd, aaa, X[ 0], 11);
        III(aaa, bbb, ccc, ddd, X[ 9], 13);
        III(ddd, aaa, bbb, ccc, X[ 2], 15);
        III(ccc, ddd, aaa, bbb, X[11], 15);
        III(bbb, ccc, ddd, aaa, X[ 4],  5);
        III(aaa, bbb, ccc, ddd, X[13],  7);
        III(ddd, aaa, bbb, ccc, X[ 6],  7);
        III(ccc, ddd, aaa, bbb, X[15],  8);
        III(bbb, ccc, ddd, aaa, X[ 8], 11);
        III(aaa, bbb, ccc, ddd, X[ 1], 14);
        III(ddd, aaa, bbb, ccc, X[10], 14);
        III(ccc, ddd, aaa, bbb, X[ 3], 12);
        III(bbb, ccc, ddd, aaa, X[12],  6);

        /* parallel round 2 */
        HHH(aaa, bbb, ccc, ddd, X[ 6],  9);
        HHH(ddd, aaa, bbb, ccc, X[11], 13);
        HHH(ccc, ddd, aaa, bbb, X[ 3], 15);
        HHH(bbb, ccc, ddd, aaa, X[ 7],  7);
        HHH(aaa, bbb, ccc, ddd, X[ 0], 12);
        HHH(ddd, aaa, bbb, ccc, X[13],  8);
        HHH(ccc, ddd, aaa, bbb, X[ 5],  9);
        HHH(bbb, ccc, ddd, aaa, X[10], 11);
        HHH(aaa, bbb, ccc, ddd, X[14],  7);
        HHH(ddd, aaa, bbb, ccc, X[15],  7);
        HHH(ccc, ddd, aaa, bbb, X[ 8], 12);
        HHH(bbb, ccc, ddd, aaa, X[12],  7);
        HHH(aaa, bbb, ccc, ddd, X[ 4],  6);
        HHH(ddd, aaa, bbb, ccc, X[ 9], 15);
        HHH(ccc, ddd, aaa, bbb, X[ 1], 13);
        HHH(bbb, ccc, ddd, aaa, X[ 2], 11);

        /* parallel round 3 */
        GGG(aaa, bbb, ccc, ddd, X[15],  9);
        GGG(ddd, aaa, bbb, ccc, X[ 5],  7);
        GGG(ccc, ddd, aaa, bbb, X[ 1], 15);
        GGG(bbb, ccc, ddd, aaa, X[ 3], 11);
        GGG(aaa, bbb, ccc, ddd, X[ 7],  8);
        GGG(ddd, aaa, bbb, ccc, X[14],  6);
        GGG(ccc, ddd, aaa, bbb, X[ 6],  6);
        GGG(bbb, ccc, ddd, aaa, X[ 9], 14);
        GGG(aaa, bbb, ccc, ddd, X[11], 12);
        GGG(ddd, aaa, bbb, ccc, X[ 8], 13);
        GGG(ccc, ddd, aaa, bbb, X[12],  5);
        GGG(bbb, ccc, ddd, aaa, X[ 2], 14);
        GGG(aaa, bbb, ccc, ddd, X[10], 13);
        GGG(ddd, aaa, bbb, ccc, X[ 0], 13);
        GGG(ccc, ddd, aaa, bbb, X[ 4],  7);
        GGG(bbb, ccc, ddd, aaa, X[13],  5);

        /* parallel round 4 */
        FFF(aaa, bbb, ccc, ddd, X[ 8], 15);
        FFF(ddd, aaa, bbb, ccc, X[ 6],  5);
        FFF(ccc, ddd, aaa, bbb, X[ 4],  8);
        FFF(bbb, ccc, ddd, aaa, X[ 1], 11);
        FFF(aaa, bbb, ccc, ddd, X[ 3], 14);
        FFF(ddd, aaa, bbb, ccc, X[11], 14);
        FFF(ccc, ddd, aaa, bbb, X[15],  6);
        FFF(bbb, ccc, ddd, aaa, X[ 0], 14);
        FFF(aaa, bbb, ccc, ddd, X[ 5],  6);
        FFF(ddd, aaa, bbb, ccc, X[12],  9);
        FFF(ccc, ddd, aaa, bbb, X[ 2], 12);
        FFF(bbb, ccc, ddd, aaa, X[13],  9);
        FFF(aaa, bbb, ccc, ddd, X[ 9], 12);
        FFF(ddd, aaa, bbb, ccc, X[ 7],  5);
        FFF(ccc, ddd, aaa, bbb, X[10], 15);
        FFF(bbb, ccc, ddd, aaa, X[14],  8);

        /* combine results */
        ddd += cc + s[1];               /* final result for MDbuf[0] */
        s[1] = s[2] + dd + aaa;
        s[2] = s[3] + aa + bbb;
        s[3] = s[0] + bb + ccc;
        s[0] = ddd;

        buf+=CCRMD_BLOCK_SIZE;
    }
}