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); }
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); }
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); }
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); } }
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); }