62{
63 int round;
64
65 uint64_t Aba, Abe, Abi, Abo, Abu;
66 uint64_t Aga, Age, Agi, Ago, Agu;
67 uint64_t Aka, Ake, Aki, Ako, Aku;
68 uint64_t Ama, Ame, Ami, Amo, Amu;
69 uint64_t Asa, Ase, Asi, Aso, Asu;
70 uint64_t BCa, BCe, BCi, BCo, BCu;
71 uint64_t Da, De, Di, Do, Du;
72 uint64_t Eba, Ebe, Ebi, Ebo, Ebu;
73 uint64_t Ega, Ege, Egi, Ego, Egu;
74 uint64_t Eka, Eke, Eki, Eko, Eku;
75 uint64_t Ema, Eme, Emi, Emo, Emu;
76 uint64_t Esa, Ese, Esi, Eso, Esu;
77
78
79 Aba = state[ 0];
80 Abe = state[ 1];
81 Abi = state[ 2];
82 Abo = state[ 3];
83 Abu = state[ 4];
84 Aga = state[ 5];
85 Age = state[ 6];
86 Agi = state[ 7];
87 Ago = state[ 8];
88 Agu = state[ 9];
89 Aka = state[10];
90 Ake = state[11];
91 Aki = state[12];
92 Ako = state[13];
93 Aku = state[14];
94 Ama = state[15];
95 Ame = state[16];
96 Ami = state[17];
97 Amo = state[18];
98 Amu = state[19];
99 Asa = state[20];
100 Ase = state[21];
101 Asi = state[22];
102 Aso = state[23];
103 Asu = state[24];
104
105 for( round = 0; round <
NROUNDS; round += 2 )
106 {
107
108 BCa = Aba^Aga^Aka^Ama^Asa;
109 BCe = Abe^Age^Ake^Ame^Ase;
110 BCi = Abi^Agi^Aki^Ami^Asi;
111 BCo = Abo^Ago^Ako^Amo^Aso;
112 BCu = Abu^Agu^Aku^Amu^Asu;
113
114
115 Da = BCu^
ROL(BCe, 1);
116 De = BCa^
ROL(BCi, 1);
117 Di = BCe^
ROL(BCo, 1);
118 Do = BCi^
ROL(BCu, 1);
119 Du = BCo^
ROL(BCa, 1);
120
121 Aba ^= Da;
122 BCa = Aba;
123 Age ^= De;
125 Aki ^= Di;
127 Amo ^= Do;
129 Asu ^= Du;
131 Eba = BCa ^((~BCe)& BCi );
132 Eba ^= (uint64_t)KeccakF_RoundConstants[round];
133 Ebe = BCe ^((~BCi)& BCo );
134 Ebi = BCi ^((~BCo)& BCu );
135 Ebo = BCo ^((~BCu)& BCa );
136 Ebu = BCu ^((~BCa)& BCe );
137
138 Abo ^= Do;
140 Agu ^= Du;
142 Aka ^= Da;
144 Ame ^= De;
146 Asi ^= Di;
148 Ega = BCa ^((~BCe)& BCi );
149 Ege = BCe ^((~BCi)& BCo );
150 Egi = BCi ^((~BCo)& BCu );
151 Ego = BCo ^((~BCu)& BCa );
152 Egu = BCu ^((~BCa)& BCe );
153
154 Abe ^= De;
156 Agi ^= Di;
158 Ako ^= Do;
160 Amu ^= Du;
162 Asa ^= Da;
164 Eka = BCa ^((~BCe)& BCi );
165 Eke = BCe ^((~BCi)& BCo );
166 Eki = BCi ^((~BCo)& BCu );
167 Eko = BCo ^((~BCu)& BCa );
168 Eku = BCu ^((~BCa)& BCe );
169
170 Abu ^= Du;
172 Aga ^= Da;
174 Ake ^= De;
176 Ami ^= Di;
178 Aso ^= Do;
180 Ema = BCa ^((~BCe)& BCi );
181 Eme = BCe ^((~BCi)& BCo );
182 Emi = BCi ^((~BCo)& BCu );
183 Emo = BCo ^((~BCu)& BCa );
184 Emu = BCu ^((~BCa)& BCe );
185
186 Abi ^= Di;
188 Ago ^= Do;
190 Aku ^= Du;
192 Ama ^= Da;
194 Ase ^= De;
196 Esa = BCa ^((~BCe)& BCi );
197 Ese = BCe ^((~BCi)& BCo );
198 Esi = BCi ^((~BCo)& BCu );
199 Eso = BCo ^((~BCu)& BCa );
200 Esu = BCu ^((~BCa)& BCe );
201
202
203 BCa = Eba^Ega^Eka^Ema^Esa;
204 BCe = Ebe^Ege^Eke^Eme^Ese;
205 BCi = Ebi^Egi^Eki^Emi^Esi;
206 BCo = Ebo^Ego^Eko^Emo^Eso;
207 BCu = Ebu^Egu^Eku^Emu^Esu;
208
209
210 Da = BCu^
ROL(BCe, 1);
211 De = BCa^
ROL(BCi, 1);
212 Di = BCe^
ROL(BCo, 1);
213 Do = BCi^
ROL(BCu, 1);
214 Du = BCo^
ROL(BCa, 1);
215
216 Eba ^= Da;
217 BCa = Eba;
218 Ege ^= De;
220 Eki ^= Di;
222 Emo ^= Do;
224 Esu ^= Du;
226 Aba = BCa ^((~BCe)& BCi );
227 Aba ^= (uint64_t)KeccakF_RoundConstants[round+1];
228 Abe = BCe ^((~BCi)& BCo );
229 Abi = BCi ^((~BCo)& BCu );
230 Abo = BCo ^((~BCu)& BCa );
231 Abu = BCu ^((~BCa)& BCe );
232
233 Ebo ^= Do;
235 Egu ^= Du;
237 Eka ^= Da;
239 Eme ^= De;
241 Esi ^= Di;
243 Aga = BCa ^((~BCe)& BCi );
244 Age = BCe ^((~BCi)& BCo );
245 Agi = BCi ^((~BCo)& BCu );
246 Ago = BCo ^((~BCu)& BCa );
247 Agu = BCu ^((~BCa)& BCe );
248
249 Ebe ^= De;
251 Egi ^= Di;
253 Eko ^= Do;
255 Emu ^= Du;
257 Esa ^= Da;
259 Aka = BCa ^((~BCe)& BCi );
260 Ake = BCe ^((~BCi)& BCo );
261 Aki = BCi ^((~BCo)& BCu );
262 Ako = BCo ^((~BCu)& BCa );
263 Aku = BCu ^((~BCa)& BCe );
264
265 Ebu ^= Du;
267 Ega ^= Da;
269 Eke ^= De;
271 Emi ^= Di;
273 Eso ^= Do;
275 Ama = BCa ^((~BCe)& BCi );
276 Ame = BCe ^((~BCi)& BCo );
277 Ami = BCi ^((~BCo)& BCu );
278 Amo = BCo ^((~BCu)& BCa );
279 Amu = BCu ^((~BCa)& BCe );
280
281 Ebi ^= Di;
283 Ego ^= Do;
285 Eku ^= Du;
287 Ema ^= Da;
289 Ese ^= De;
291 Asa = BCa ^((~BCe)& BCi );
292 Ase = BCe ^((~BCi)& BCo );
293 Asi = BCi ^((~BCo)& BCu );
294 Aso = BCo ^((~BCu)& BCa );
295 Asu = BCu ^((~BCa)& BCe );
296 }
297
298
299 state[ 0] = Aba;
300 state[ 1] = Abe;
301 state[ 2] = Abi;
302 state[ 3] = Abo;
303 state[ 4] = Abu;
304 state[ 5] = Aga;
305 state[ 6] = Age;
306 state[ 7] = Agi;
307 state[ 8] = Ago;
308 state[ 9] = Agu;
309 state[10] = Aka;
310 state[11] = Ake;
311 state[12] = Aki;
312 state[13] = Ako;
313 state[14] = Aku;
314 state[15] = Ama;
315 state[16] = Ame;
316 state[17] = Ami;
317 state[18] = Amo;
318 state[19] = Amu;
319 state[20] = Asa;
320 state[21] = Ase;
321 state[22] = Asi;
322 state[23] = Aso;
323 state[24] = Asu;
324
325 #undef round
326}