You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. /* Template for recompress method; run through cpp. */
  2. #define ROUND1_STEP(a, b, c, d, e, T) {e += s1(a,b,c,d,w2[T]); b = rotateLeft(b, 30);}
  3. #define ROUND2_STEP(a, b, c, d, e, T) {e += s2(a,b,c,d,w2[T]); b = rotateLeft(b, 30);}
  4. #define ROUND3_STEP(a, b, c, d, e, T) {e += s3(a,b,c,d,w2[T]); b = rotateLeft(b, 30);}
  5. #define ROUND4_STEP(a, b, c, d, e, T) {e += s4(a,b,c,d,w2[T]); b = rotateLeft(b, 30);}
  6. #define ROUND1_STEP_BW(a, b, c, d, e, T) {b = rotateRight(b, 30); e -= s1(a,b,c,d,w2[T]);}
  7. #define ROUND2_STEP_BW(a, b, c, d, e, T) {b = rotateRight(b, 30); e -= s2(a,b,c,d,w2[T]);}
  8. #define ROUND3_STEP_BW(a, b, c, d, e, T) {b = rotateRight(b, 30); e -= s3(a,b,c,d,w2[T]);}
  9. #define ROUND4_STEP_BW(a, b, c, d, e, T) {b = rotateRight(b, 30); e -= s4(a,b,c,d,w2[T]);}
  10. /* Condition to go backwards: if (t > step) */
  11. /* t=80-66 have no identified DV; skip.
  12. ROUND4_STEP_BW(b, c, d, e, a, 79)
  13. ROUND4_STEP_BW(c, d, e, a, b, 78)
  14. ROUND4_STEP_BW(d, e, a, b, c, 77)
  15. ROUND4_STEP_BW(e, a, b, c, d, 76)
  16. ROUND4_STEP_BW(a, b, c, d, e, 75)
  17. ROUND4_STEP_BW(b, c, d, e, a, 74)
  18. ROUND4_STEP_BW(c, d, e, a, b, 73)
  19. ROUND4_STEP_BW(d, e, a, b, c, 72)
  20. ROUND4_STEP_BW(e, a, b, c, d, 71)
  21. ROUND4_STEP_BW(a, b, c, d, e, 70)
  22. ROUND4_STEP_BW(b, c, d, e, a, 69)
  23. ROUND4_STEP_BW(c, d, e, a, b, 68)
  24. ROUND4_STEP_BW(d, e, a, b, c, 67)
  25. ROUND4_STEP_BW(e, a, b, c, d, 66)
  26. ROUND4_STEP_BW(a, b, c, d, e, 65)
  27. */
  28. if (t == 65) {
  29. ROUND4_STEP_BW(b, c, d, e, a, 64)
  30. ROUND4_STEP_BW(c, d, e, a, b, 63)
  31. ROUND4_STEP_BW(d, e, a, b, c, 62)
  32. ROUND4_STEP_BW(e, a, b, c, d, 61)
  33. ROUND4_STEP_BW(a, b, c, d, e, 60)
  34. ROUND3_STEP_BW(b, c, d, e, a, 59)
  35. ROUND3_STEP_BW(c, d, e, a, b, 58)
  36. }
  37. ROUND3_STEP_BW(d, e, a, b, c, 57)
  38. ROUND3_STEP_BW(e, a, b, c, d, 56)
  39. ROUND3_STEP_BW(a, b, c, d, e, 55)
  40. ROUND3_STEP_BW(b, c, d, e, a, 54)
  41. ROUND3_STEP_BW(c, d, e, a, b, 53)
  42. ROUND3_STEP_BW(d, e, a, b, c, 52)
  43. ROUND3_STEP_BW(e, a, b, c, d, 51)
  44. ROUND3_STEP_BW(a, b, c, d, e, 50)
  45. ROUND3_STEP_BW(b, c, d, e, a, 49)
  46. ROUND3_STEP_BW(c, d, e, a, b, 48)
  47. ROUND3_STEP_BW(d, e, a, b, c, 47)
  48. ROUND3_STEP_BW(e, a, b, c, d, 46)
  49. ROUND3_STEP_BW(a, b, c, d, e, 45)
  50. ROUND3_STEP_BW(b, c, d, e, a, 44)
  51. ROUND3_STEP_BW(c, d, e, a, b, 43)
  52. ROUND3_STEP_BW(d, e, a, b, c, 42)
  53. ROUND3_STEP_BW(e, a, b, c, d, 41)
  54. ROUND3_STEP_BW(a, b, c, d, e, 40)
  55. ROUND2_STEP_BW(b, c, d, e, a, 39)
  56. ROUND2_STEP_BW(c, d, e, a, b, 38)
  57. ROUND2_STEP_BW(d, e, a, b, c, 37)
  58. ROUND2_STEP_BW(e, a, b, c, d, 36)
  59. ROUND2_STEP_BW(a, b, c, d, e, 35)
  60. ROUND2_STEP_BW(b, c, d, e, a, 34)
  61. ROUND2_STEP_BW(c, d, e, a, b, 33)
  62. ROUND2_STEP_BW(d, e, a, b, c, 32)
  63. ROUND2_STEP_BW(e, a, b, c, d, 31)
  64. ROUND2_STEP_BW(a, b, c, d, e, 30)
  65. ROUND2_STEP_BW(b, c, d, e, a, 29)
  66. ROUND2_STEP_BW(c, d, e, a, b, 28)
  67. ROUND2_STEP_BW(d, e, a, b, c, 27)
  68. ROUND2_STEP_BW(e, a, b, c, d, 26)
  69. ROUND2_STEP_BW(a, b, c, d, e, 25)
  70. ROUND2_STEP_BW(b, c, d, e, a, 24)
  71. ROUND2_STEP_BW(c, d, e, a, b, 23)
  72. ROUND2_STEP_BW(d, e, a, b, c, 22)
  73. ROUND2_STEP_BW(e, a, b, c, d, 21)
  74. ROUND2_STEP_BW(a, b, c, d, e, 20)
  75. ROUND1_STEP_BW(b, c, d, e, a, 19)
  76. ROUND1_STEP_BW(c, d, e, a, b, 18)
  77. ROUND1_STEP_BW(d, e, a, b, c, 17)
  78. ROUND1_STEP_BW(e, a, b, c, d, 16)
  79. ROUND1_STEP_BW(a, b, c, d, e, 15)
  80. ROUND1_STEP_BW(b, c, d, e, a, 14)
  81. ROUND1_STEP_BW(c, d, e, a, b, 13)
  82. ROUND1_STEP_BW(d, e, a, b, c, 12)
  83. ROUND1_STEP_BW(e, a, b, c, d, 11)
  84. ROUND1_STEP_BW(a, b, c, d, e, 10)
  85. ROUND1_STEP_BW(b, c, d, e, a, 9)
  86. ROUND1_STEP_BW(c, d, e, a, b, 8)
  87. ROUND1_STEP_BW(d, e, a, b, c, 7)
  88. ROUND1_STEP_BW(e, a, b, c, d, 6)
  89. ROUND1_STEP_BW(a, b, c, d, e, 5)
  90. ROUND1_STEP_BW(b, c, d, e, a, 4)
  91. ROUND1_STEP_BW(c, d, e, a, b, 3)
  92. ROUND1_STEP_BW(d, e, a, b, c, 2)
  93. ROUND1_STEP_BW(e, a, b, c, d, 1)
  94. ROUND1_STEP_BW(a, b, c, d, e, 0)
  95. hIn.save(a, b, c, d, e);
  96. a = s.a; b = s.b; c = s.c; d = s.d; e = s.e;
  97. /* Condition to go fowards: if (t <= step) */
  98. /* Earliest restart is T=58; skip.
  99. ROUND1_STEP(a, b, c, d, e, 0)
  100. ROUND1_STEP(e, a, b, c, d, 1)
  101. ROUND1_STEP(d, e, a, b, c, 2)
  102. ROUND1_STEP(c, d, e, a, b, 3)
  103. ROUND1_STEP(b, c, d, e, a, 4)
  104. ROUND1_STEP(a, b, c, d, e, 5)
  105. ROUND1_STEP(e, a, b, c, d, 6)
  106. ROUND1_STEP(d, e, a, b, c, 7)
  107. ROUND1_STEP(c, d, e, a, b, 8)
  108. ROUND1_STEP(b, c, d, e, a, 9)
  109. ROUND1_STEP(a, b, c, d, e, 10)
  110. ROUND1_STEP(e, a, b, c, d, 11)
  111. ROUND1_STEP(d, e, a, b, c, 12)
  112. ROUND1_STEP(c, d, e, a, b, 13)
  113. ROUND1_STEP(b, c, d, e, a, 14)
  114. ROUND1_STEP(a, b, c, d, e, 15)
  115. ROUND1_STEP(e, a, b, c, d, 16)
  116. ROUND1_STEP(d, e, a, b, c, 17)
  117. ROUND1_STEP(c, d, e, a, b, 18)
  118. ROUND1_STEP(b, c, d, e, a, 19)
  119. ROUND2_STEP(a, b, c, d, e, 20)
  120. ROUND2_STEP(e, a, b, c, d, 21)
  121. ROUND2_STEP(d, e, a, b, c, 22)
  122. ROUND2_STEP(c, d, e, a, b, 23)
  123. ROUND2_STEP(b, c, d, e, a, 24)
  124. ROUND2_STEP(a, b, c, d, e, 25)
  125. ROUND2_STEP(e, a, b, c, d, 26)
  126. ROUND2_STEP(d, e, a, b, c, 27)
  127. ROUND2_STEP(c, d, e, a, b, 28)
  128. ROUND2_STEP(b, c, d, e, a, 29)
  129. ROUND2_STEP(a, b, c, d, e, 30)
  130. ROUND2_STEP(e, a, b, c, d, 31)
  131. ROUND2_STEP(d, e, a, b, c, 32)
  132. ROUND2_STEP(c, d, e, a, b, 33)
  133. ROUND2_STEP(b, c, d, e, a, 34)
  134. ROUND2_STEP(a, b, c, d, e, 35)
  135. ROUND2_STEP(e, a, b, c, d, 36)
  136. ROUND2_STEP(d, e, a, b, c, 37)
  137. ROUND2_STEP(c, d, e, a, b, 38)
  138. ROUND2_STEP(b, c, d, e, a, 39)
  139. ROUND3_STEP(a, b, c, d, e, 40)
  140. ROUND3_STEP(e, a, b, c, d, 41)
  141. ROUND3_STEP(d, e, a, b, c, 42)
  142. ROUND3_STEP(c, d, e, a, b, 43)
  143. ROUND3_STEP(b, c, d, e, a, 44)
  144. ROUND3_STEP(a, b, c, d, e, 45)
  145. ROUND3_STEP(e, a, b, c, d, 46)
  146. ROUND3_STEP(d, e, a, b, c, 47)
  147. ROUND3_STEP(c, d, e, a, b, 48)
  148. ROUND3_STEP(b, c, d, e, a, 49)
  149. ROUND3_STEP(a, b, c, d, e, 50)
  150. ROUND3_STEP(e, a, b, c, d, 51)
  151. ROUND3_STEP(d, e, a, b, c, 52)
  152. ROUND3_STEP(c, d, e, a, b, 53)
  153. ROUND3_STEP(b, c, d, e, a, 54)
  154. ROUND3_STEP(a, b, c, d, e, 55)
  155. ROUND3_STEP(e, a, b, c, d, 56)
  156. ROUND3_STEP(d, e, a, b, c, 57)
  157. */
  158. if (t == 58) {
  159. ROUND3_STEP(c, d, e, a, b, 58)
  160. ROUND3_STEP(b, c, d, e, a, 59)
  161. ROUND4_STEP(a, b, c, d, e, 60)
  162. ROUND4_STEP(e, a, b, c, d, 61)
  163. ROUND4_STEP(d, e, a, b, c, 62)
  164. ROUND4_STEP(c, d, e, a, b, 63)
  165. ROUND4_STEP(b, c, d, e, a, 64)
  166. }
  167. ROUND4_STEP(a, b, c, d, e, 65)
  168. ROUND4_STEP(e, a, b, c, d, 66)
  169. ROUND4_STEP(d, e, a, b, c, 67)
  170. ROUND4_STEP(c, d, e, a, b, 68)
  171. ROUND4_STEP(b, c, d, e, a, 69)
  172. ROUND4_STEP(a, b, c, d, e, 70)
  173. ROUND4_STEP(e, a, b, c, d, 71)
  174. ROUND4_STEP(d, e, a, b, c, 72)
  175. ROUND4_STEP(c, d, e, a, b, 73)
  176. ROUND4_STEP(b, c, d, e, a, 74)
  177. ROUND4_STEP(a, b, c, d, e, 75)
  178. ROUND4_STEP(e, a, b, c, d, 76)
  179. ROUND4_STEP(d, e, a, b, c, 77)
  180. ROUND4_STEP(c, d, e, a, b, 78)
  181. ROUND4_STEP(b, c, d, e, a, 79)