/* Template for recompress method; run through cpp. */ #define ROUND1_STEP(a, b, c, d, e, T) {e += s1(a,b,c,d,w2[T]); b = rotateLeft(b, 30);} #define ROUND2_STEP(a, b, c, d, e, T) {e += s2(a,b,c,d,w2[T]); b = rotateLeft(b, 30);} #define ROUND3_STEP(a, b, c, d, e, T) {e += s3(a,b,c,d,w2[T]); b = rotateLeft(b, 30);} #define ROUND4_STEP(a, b, c, d, e, T) {e += s4(a,b,c,d,w2[T]); b = rotateLeft(b, 30);} #define ROUND1_STEP_BW(a, b, c, d, e, T) {b = rotateRight(b, 30); e -= s1(a,b,c,d,w2[T]);} #define ROUND2_STEP_BW(a, b, c, d, e, T) {b = rotateRight(b, 30); e -= s2(a,b,c,d,w2[T]);} #define ROUND3_STEP_BW(a, b, c, d, e, T) {b = rotateRight(b, 30); e -= s3(a,b,c,d,w2[T]);} #define ROUND4_STEP_BW(a, b, c, d, e, T) {b = rotateRight(b, 30); e -= s4(a,b,c,d,w2[T]);} /* Condition to go backwards: if (t > step) */ /* t=80-66 have no identified DV; skip. ROUND4_STEP_BW(b, c, d, e, a, 79) ROUND4_STEP_BW(c, d, e, a, b, 78) ROUND4_STEP_BW(d, e, a, b, c, 77) ROUND4_STEP_BW(e, a, b, c, d, 76) ROUND4_STEP_BW(a, b, c, d, e, 75) ROUND4_STEP_BW(b, c, d, e, a, 74) ROUND4_STEP_BW(c, d, e, a, b, 73) ROUND4_STEP_BW(d, e, a, b, c, 72) ROUND4_STEP_BW(e, a, b, c, d, 71) ROUND4_STEP_BW(a, b, c, d, e, 70) ROUND4_STEP_BW(b, c, d, e, a, 69) ROUND4_STEP_BW(c, d, e, a, b, 68) ROUND4_STEP_BW(d, e, a, b, c, 67) ROUND4_STEP_BW(e, a, b, c, d, 66) ROUND4_STEP_BW(a, b, c, d, e, 65) */ if (t == 65) { ROUND4_STEP_BW(b, c, d, e, a, 64) ROUND4_STEP_BW(c, d, e, a, b, 63) ROUND4_STEP_BW(d, e, a, b, c, 62) ROUND4_STEP_BW(e, a, b, c, d, 61) ROUND4_STEP_BW(a, b, c, d, e, 60) ROUND3_STEP_BW(b, c, d, e, a, 59) ROUND3_STEP_BW(c, d, e, a, b, 58) } ROUND3_STEP_BW(d, e, a, b, c, 57) ROUND3_STEP_BW(e, a, b, c, d, 56) ROUND3_STEP_BW(a, b, c, d, e, 55) ROUND3_STEP_BW(b, c, d, e, a, 54) ROUND3_STEP_BW(c, d, e, a, b, 53) ROUND3_STEP_BW(d, e, a, b, c, 52) ROUND3_STEP_BW(e, a, b, c, d, 51) ROUND3_STEP_BW(a, b, c, d, e, 50) ROUND3_STEP_BW(b, c, d, e, a, 49) ROUND3_STEP_BW(c, d, e, a, b, 48) ROUND3_STEP_BW(d, e, a, b, c, 47) ROUND3_STEP_BW(e, a, b, c, d, 46) ROUND3_STEP_BW(a, b, c, d, e, 45) ROUND3_STEP_BW(b, c, d, e, a, 44) ROUND3_STEP_BW(c, d, e, a, b, 43) ROUND3_STEP_BW(d, e, a, b, c, 42) ROUND3_STEP_BW(e, a, b, c, d, 41) ROUND3_STEP_BW(a, b, c, d, e, 40) ROUND2_STEP_BW(b, c, d, e, a, 39) ROUND2_STEP_BW(c, d, e, a, b, 38) ROUND2_STEP_BW(d, e, a, b, c, 37) ROUND2_STEP_BW(e, a, b, c, d, 36) ROUND2_STEP_BW(a, b, c, d, e, 35) ROUND2_STEP_BW(b, c, d, e, a, 34) ROUND2_STEP_BW(c, d, e, a, b, 33) ROUND2_STEP_BW(d, e, a, b, c, 32) ROUND2_STEP_BW(e, a, b, c, d, 31) ROUND2_STEP_BW(a, b, c, d, e, 30) ROUND2_STEP_BW(b, c, d, e, a, 29) ROUND2_STEP_BW(c, d, e, a, b, 28) ROUND2_STEP_BW(d, e, a, b, c, 27) ROUND2_STEP_BW(e, a, b, c, d, 26) ROUND2_STEP_BW(a, b, c, d, e, 25) ROUND2_STEP_BW(b, c, d, e, a, 24) ROUND2_STEP_BW(c, d, e, a, b, 23) ROUND2_STEP_BW(d, e, a, b, c, 22) ROUND2_STEP_BW(e, a, b, c, d, 21) ROUND2_STEP_BW(a, b, c, d, e, 20) ROUND1_STEP_BW(b, c, d, e, a, 19) ROUND1_STEP_BW(c, d, e, a, b, 18) ROUND1_STEP_BW(d, e, a, b, c, 17) ROUND1_STEP_BW(e, a, b, c, d, 16) ROUND1_STEP_BW(a, b, c, d, e, 15) ROUND1_STEP_BW(b, c, d, e, a, 14) ROUND1_STEP_BW(c, d, e, a, b, 13) ROUND1_STEP_BW(d, e, a, b, c, 12) ROUND1_STEP_BW(e, a, b, c, d, 11) ROUND1_STEP_BW(a, b, c, d, e, 10) ROUND1_STEP_BW(b, c, d, e, a, 9) ROUND1_STEP_BW(c, d, e, a, b, 8) ROUND1_STEP_BW(d, e, a, b, c, 7) ROUND1_STEP_BW(e, a, b, c, d, 6) ROUND1_STEP_BW(a, b, c, d, e, 5) ROUND1_STEP_BW(b, c, d, e, a, 4) ROUND1_STEP_BW(c, d, e, a, b, 3) ROUND1_STEP_BW(d, e, a, b, c, 2) ROUND1_STEP_BW(e, a, b, c, d, 1) ROUND1_STEP_BW(a, b, c, d, e, 0) hIn.save(a, b, c, d, e); a = s.a; b = s.b; c = s.c; d = s.d; e = s.e; /* Condition to go fowards: if (t <= step) */ /* Earliest restart is T=58; skip. ROUND1_STEP(a, b, c, d, e, 0) ROUND1_STEP(e, a, b, c, d, 1) ROUND1_STEP(d, e, a, b, c, 2) ROUND1_STEP(c, d, e, a, b, 3) ROUND1_STEP(b, c, d, e, a, 4) ROUND1_STEP(a, b, c, d, e, 5) ROUND1_STEP(e, a, b, c, d, 6) ROUND1_STEP(d, e, a, b, c, 7) ROUND1_STEP(c, d, e, a, b, 8) ROUND1_STEP(b, c, d, e, a, 9) ROUND1_STEP(a, b, c, d, e, 10) ROUND1_STEP(e, a, b, c, d, 11) ROUND1_STEP(d, e, a, b, c, 12) ROUND1_STEP(c, d, e, a, b, 13) ROUND1_STEP(b, c, d, e, a, 14) ROUND1_STEP(a, b, c, d, e, 15) ROUND1_STEP(e, a, b, c, d, 16) ROUND1_STEP(d, e, a, b, c, 17) ROUND1_STEP(c, d, e, a, b, 18) ROUND1_STEP(b, c, d, e, a, 19) ROUND2_STEP(a, b, c, d, e, 20) ROUND2_STEP(e, a, b, c, d, 21) ROUND2_STEP(d, e, a, b, c, 22) ROUND2_STEP(c, d, e, a, b, 23) ROUND2_STEP(b, c, d, e, a, 24) ROUND2_STEP(a, b, c, d, e, 25) ROUND2_STEP(e, a, b, c, d, 26) ROUND2_STEP(d, e, a, b, c, 27) ROUND2_STEP(c, d, e, a, b, 28) ROUND2_STEP(b, c, d, e, a, 29) ROUND2_STEP(a, b, c, d, e, 30) ROUND2_STEP(e, a, b, c, d, 31) ROUND2_STEP(d, e, a, b, c, 32) ROUND2_STEP(c, d, e, a, b, 33) ROUND2_STEP(b, c, d, e, a, 34) ROUND2_STEP(a, b, c, d, e, 35) ROUND2_STEP(e, a, b, c, d, 36) ROUND2_STEP(d, e, a, b, c, 37) ROUND2_STEP(c, d, e, a, b, 38) ROUND2_STEP(b, c, d, e, a, 39) ROUND3_STEP(a, b, c, d, e, 40) ROUND3_STEP(e, a, b, c, d, 41) ROUND3_STEP(d, e, a, b, c, 42) ROUND3_STEP(c, d, e, a, b, 43) ROUND3_STEP(b, c, d, e, a, 44) ROUND3_STEP(a, b, c, d, e, 45) ROUND3_STEP(e, a, b, c, d, 46) ROUND3_STEP(d, e, a, b, c, 47) ROUND3_STEP(c, d, e, a, b, 48) ROUND3_STEP(b, c, d, e, a, 49) ROUND3_STEP(a, b, c, d, e, 50) ROUND3_STEP(e, a, b, c, d, 51) ROUND3_STEP(d, e, a, b, c, 52) ROUND3_STEP(c, d, e, a, b, 53) ROUND3_STEP(b, c, d, e, a, 54) ROUND3_STEP(a, b, c, d, e, 55) ROUND3_STEP(e, a, b, c, d, 56) ROUND3_STEP(d, e, a, b, c, 57) */ if (t == 58) { ROUND3_STEP(c, d, e, a, b, 58) ROUND3_STEP(b, c, d, e, a, 59) ROUND4_STEP(a, b, c, d, e, 60) ROUND4_STEP(e, a, b, c, d, 61) ROUND4_STEP(d, e, a, b, c, 62) ROUND4_STEP(c, d, e, a, b, 63) ROUND4_STEP(b, c, d, e, a, 64) } ROUND4_STEP(a, b, c, d, e, 65) ROUND4_STEP(e, a, b, c, d, 66) ROUND4_STEP(d, e, a, b, c, 67) ROUND4_STEP(c, d, e, a, b, 68) ROUND4_STEP(b, c, d, e, a, 69) ROUND4_STEP(a, b, c, d, e, 70) ROUND4_STEP(e, a, b, c, d, 71) ROUND4_STEP(d, e, a, b, c, 72) ROUND4_STEP(c, d, e, a, b, 73) ROUND4_STEP(b, c, d, e, a, 74) ROUND4_STEP(a, b, c, d, e, 75) ROUND4_STEP(e, a, b, c, d, 76) ROUND4_STEP(d, e, a, b, c, 77) ROUND4_STEP(c, d, e, a, b, 78) ROUND4_STEP(b, c, d, e, a, 79)