Example #1
0
static void
fugue2_core(sph_fugue_context *sc, const void *data, size_t len)
{
	DECL_STATE_SMALL
	CORE_ENTRY
	READ_STATE_SMALL(sc);
	rshift = sc->round_shift;
	switch (rshift) {
		for (;;) {
			sph_u32 q;

		case 0:
			q = p;
			TIX2(q, S00, S01, S08, S10, S24);
			CMIX30(S27, S28, S29, S01, S02, S03, S12, S13, S14);
			SMIX(S27, S28, S29, S00);
			CMIX30(S24, S25, S26, S28, S29, S00, S09, S10, S11);
			SMIX(S24, S25, S26, S27);
			NEXT(1);
			/* fall through */
		case 1:
			q = p;
			TIX2(q, S24, S25, S02, S04, S18);
			CMIX30(S21, S22, S23, S25, S26, S27, S06, S07, S08);
			SMIX(S21, S22, S23, S24);
			CMIX30(S18, S19, S20, S22, S23, S24, S03, S04, S05);
			SMIX(S18, S19, S20, S21);
			NEXT(2);
			/* fall through */
		case 2:
			q = p;
			TIX2(q, S18, S19, S26, S28, S12);
			CMIX30(S15, S16, S17, S19, S20, S21, S00, S01, S02);
			SMIX(S15, S16, S17, S18);
			CMIX30(S12, S13, S14, S16, S17, S18, S27, S28, S29);
			SMIX(S12, S13, S14, S15);
			NEXT(3);
			/* fall through */
		case 3:
			q = p;
			TIX2(q, S12, S13, S20, S22, S06);
			CMIX30(S09, S10, S11, S13, S14, S15, S24, S25, S26);
			SMIX(S09, S10, S11, S12);
			CMIX30(S06, S07, S08, S10, S11, S12, S21, S22, S23);
			SMIX(S06, S07, S08, S09);
			NEXT(4);
			/* fall through */
		case 4:
			q = p;
			TIX2(q, S06, S07, S14, S16, S00);
			CMIX30(S03, S04, S05, S07, S08, S09, S18, S19, S20);
			SMIX(S03, S04, S05, S06);
			CMIX30(S00, S01, S02, S04, S05, S06, S15, S16, S17);
			SMIX(S00, S01, S02, S03);
			NEXT(0);
		}
	}
	CORE_EXIT
	WRITE_STATE_SMALL(sc);
}
Example #2
0
static void
fugue4_close(sph_fugue_context *sc, unsigned ub, unsigned n, void *dst)
{
	int i;

	CLOSE_ENTRY(36, 12, fugue4_core)
	for (i = 0; i < 32; i ++) {
		ROR(3, 36);
		CMIX36(S[0], S[1], S[2], S[4], S[5], S[6], S[18], S[19], S[20]);
		SMIX(S[0], S[1], S[2], S[3]);
	}
	for (i = 0; i < 13; i ++) {
		S[4] ^= S[0];
		S[9] ^= S[0];
		S[18] ^= S[0];
		S[27] ^= S[0];
		ROR(9, 36);
		SMIX(S[0], S[1], S[2], S[3]);
		S[4] ^= S[0];
		S[10] ^= S[0];
		S[18] ^= S[0];
		S[27] ^= S[0];
		ROR(9, 36);
		SMIX(S[0], S[1], S[2], S[3]);
		S[4] ^= S[0];
		S[10] ^= S[0];
		S[19] ^= S[0];
		S[27] ^= S[0];
		ROR(9, 36);
		SMIX(S[0], S[1], S[2], S[3]);
		S[4] ^= S[0];
		S[10] ^= S[0];
		S[19] ^= S[0];
		S[28] ^= S[0];
		ROR(8, 36);
		SMIX(S[0], S[1], S[2], S[3]);
	}
	S[4] ^= S[0];
	S[9] ^= S[0];
	S[18] ^= S[0];
	S[27] ^= S[0];
	out = dst;
	sph_enc32be(out +  0, S[ 1]);
	sph_enc32be(out +  4, S[ 2]);
	sph_enc32be(out +  8, S[ 3]);
	sph_enc32be(out + 12, S[ 4]);
	sph_enc32be(out + 16, S[ 9]);
	sph_enc32be(out + 20, S[10]);
	sph_enc32be(out + 24, S[11]);
	sph_enc32be(out + 28, S[12]);
	sph_enc32be(out + 32, S[18]);
	sph_enc32be(out + 36, S[19]);
	sph_enc32be(out + 40, S[20]);
	sph_enc32be(out + 44, S[21]);
	sph_enc32be(out + 48, S[27]);
	sph_enc32be(out + 52, S[28]);
	sph_enc32be(out + 56, S[29]);
	sph_enc32be(out + 60, S[30]);
	sph_fugue512_init(sc);
}
Example #3
0
static void
fugue3_close(sph_fugue_context *sc, unsigned ub, unsigned n, void *dst)
{
	int i;

	CLOSE_ENTRY(36, 9, fugue3_core)
	for (i = 0; i < 18; i ++) {
		ROR(3, 36);
		CMIX36(S[0], S[1], S[2], S[4], S[5], S[6], S[18], S[19], S[20]);
		SMIX(S[0], S[1], S[2], S[3]);
	}
	for (i = 0; i < 13; i ++) {
		S[4] ^= S[0];
		S[12] ^= S[0];
		S[24] ^= S[0];
		ROR(12, 36);
		SMIX(S[0], S[1], S[2], S[3]);
		S[4] ^= S[0];
		S[13] ^= S[0];
		S[24] ^= S[0];
		ROR(12, 36);
		SMIX(S[0], S[1], S[2], S[3]);
		S[4] ^= S[0];
		S[13] ^= S[0];
		S[25] ^= S[0];
		ROR(11, 36);
		SMIX(S[0], S[1], S[2], S[3]);
	}
	S[4] ^= S[0];
	S[12] ^= S[0];
	S[24] ^= S[0];
	out = dst;
	sph_enc32be(out +  0, S[ 1]);
	sph_enc32be(out +  4, S[ 2]);
	sph_enc32be(out +  8, S[ 3]);
	sph_enc32be(out + 12, S[ 4]);
	sph_enc32be(out + 16, S[12]);
	sph_enc32be(out + 20, S[13]);
	sph_enc32be(out + 24, S[14]);
	sph_enc32be(out + 28, S[15]);
	sph_enc32be(out + 32, S[24]);
	sph_enc32be(out + 36, S[25]);
	sph_enc32be(out + 40, S[26]);
	sph_enc32be(out + 44, S[27]);
	sph_fugue384_init(sc);
}
Example #4
0
static void
fugue2_close(sph_fugue_context *sc, unsigned ub, unsigned n,
	void *dst, size_t out_size_w32)
{
	int i;

	CLOSE_ENTRY(30, 6, fugue2_core)
	for (i = 0; i < 10; i ++) {
		ROR(3, 30);
		CMIX30(S[0], S[1], S[2], S[4], S[5], S[6], S[15], S[16], S[17]);
		SMIX(S[0], S[1], S[2], S[3]);
	}
	for (i = 0; i < 13; i ++) {
		S[4] ^= S[0];
		S[15] ^= S[0];
		ROR(15, 30);
		SMIX(S[0], S[1], S[2], S[3]);
		S[4] ^= S[0];
		S[16] ^= S[0];
		ROR(14, 30);
		SMIX(S[0], S[1], S[2], S[3]);
	}
	S[4] ^= S[0];
	S[15] ^= S[0];
	out = dst;
	sph_enc32be(out +  0, S[ 1]);
	sph_enc32be(out +  4, S[ 2]);
	sph_enc32be(out +  8, S[ 3]);
	sph_enc32be(out + 12, S[ 4]);
	sph_enc32be(out + 16, S[15]);
	sph_enc32be(out + 20, S[16]);
	sph_enc32be(out + 24, S[17]);
	if (out_size_w32 == 8) {
		sph_enc32be(out + 28, S[18]);
		sph_fugue256_init(sc);
	} else {
		sph_fugue224_init(sc);
	}
}
Example #5
0
static void
metis4_core(sph_metis_context *sc, const void *data, size_t len)
{
	DECL_STATE_BIG
	CORE_ENTRY
	READ_STATE_BIG(sc);
	rshift = sc->round_shift;
	switch (rshift) {
		for (;;) {
			sph_u32 q;

		case 0:
			q = p;
			TIX4(q, S00, S01, S04, S07, S08, S22, S24, S27, S30);
			CMIX36(S33, S34, S35, S01, S02, S03, S15, S16, S17);
			SMIX(S33, S34, S35, S00);
			CMIX36(S30, S31, S32, S34, S35, S00, S12, S13, S14);
			SMIX(S30, S31, S32, S33);
			CMIX36(S27, S28, S29, S31, S32, S33, S09, S10, S11);
			SMIX(S27, S28, S29, S30);
			CMIX36(S24, S25, S26, S28, S29, S30, S06, S07, S08);
			SMIX(S24, S25, S26, S27);
			NEXT(1);
			/* fall through */
		case 1:
			q = p;
			TIX4(q, S24, S25, S28, S31, S32, S10, S12, S15, S18);
			CMIX36(S21, S22, S23, S25, S26, S27, S03, S04, S05);
			SMIX(S21, S22, S23, S24);
			CMIX36(S18, S19, S20, S22, S23, S24, S00, S01, S02);
			SMIX(S18, S19, S20, S21);
			CMIX36(S15, S16, S17, S19, S20, S21, S33, S34, S35);
			SMIX(S15, S16, S17, S18);
			CMIX36(S12, S13, S14, S16, S17, S18, S30, S31, S32);
			SMIX(S12, S13, S14, S15);
			NEXT(2);
			/* fall through */
		case 2:
			q = p;
			TIX4(q, S12, S13, S16, S19, S20, S34, S00, S03, S06);
			CMIX36(S09, S10, S11, S13, S14, S15, S27, S28, S29);
			SMIX(S09, S10, S11, S12);
			CMIX36(S06, S07, S08, S10, S11, S12, S24, S25, S26);
			SMIX(S06, S07, S08, S09);
			CMIX36(S03, S04, S05, S07, S08, S09, S21, S22, S23);
			SMIX(S03, S04, S05, S06);
			CMIX36(S00, S01, S02, S04, S05, S06, S18, S19, S20);
			SMIX(S00, S01, S02, S03);
			NEXT(0);
		}
	}
	CORE_EXIT
	WRITE_STATE_BIG(sc);
}