22extern void KeccakF1600(
word64 *state);
24extern const word64 KeccakF1600Constants[24];
31const
word64 KeccakF1600Constants[24] =
47void KeccakF1600(
word64 *state)
49 word64 Aba, Abe, Abi, Abo, Abu;
50 word64 Aga, Age, Agi, Ago, Agu;
51 word64 Aka, Ake, Aki, Ako, Aku;
52 word64 Ama, Ame, Ami, Amo, Amu;
53 word64 Asa, Ase, Asi, Aso, Asu;
54 word64 BCa, BCe, BCi, BCo, BCu;
56 word64 Eba, Ebe, Ebi, Ebo, Ebu;
57 word64 Ega, Ege, Egi, Ego, Egu;
58 word64 Eka, Eke, Eki, Eko, Eku;
59 word64 Ema, Eme, Emi, Emo, Emu;
60 word64 Esa, Ese, Esi, Eso, Esu;
63 Block::Get(state)(Aba)(Abe)(Abi)(Abo)(Abu)(Aga)(Age)(Agi)(Ago)(Agu)(Aka)(Ake)(Aki)(Ako)(Aku)(Ama)(Ame)(Ami)(Amo)(Amu)(Asa)(Ase)(Asi)(Aso)(Asu);
65 for(
unsigned int round = 0; round < 24; round += 2 )
68 BCa = Aba^Aga^Aka^Ama^Asa;
69 BCe = Abe^Age^Ake^Ame^Ase;
70 BCi = Abi^Agi^Aki^Ami^Asi;
71 BCo = Abo^Ago^Ako^Amo^Aso;
72 BCu = Abu^Agu^Aku^Amu^Asu;
91 Eba = BCa ^((~BCe)& BCi );
92 Eba ^= KeccakF1600Constants[round];
93 Ebe = BCe ^((~BCi)& BCo );
94 Ebi = BCi ^((~BCo)& BCu );
95 Ebo = BCo ^((~BCu)& BCa );
96 Ebu = BCu ^((~BCa)& BCe );
108 Ega = BCa ^((~BCe)& BCi );
109 Ege = BCe ^((~BCi)& BCo );
110 Egi = BCi ^((~BCo)& BCu );
111 Ego = BCo ^((~BCu)& BCa );
112 Egu = BCu ^((~BCa)& BCe );
124 Eka = BCa ^((~BCe)& BCi );
125 Eke = BCe ^((~BCi)& BCo );
126 Eki = BCi ^((~BCo)& BCu );
127 Eko = BCo ^((~BCu)& BCa );
128 Eku = BCu ^((~BCa)& BCe );
140 Ema = BCa ^((~BCe)& BCi );
141 Eme = BCe ^((~BCi)& BCo );
142 Emi = BCi ^((~BCo)& BCu );
143 Emo = BCo ^((~BCu)& BCa );
144 Emu = BCu ^((~BCa)& BCe );
156 Esa = BCa ^((~BCe)& BCi );
157 Ese = BCe ^((~BCi)& BCo );
158 Esi = BCi ^((~BCo)& BCu );
159 Eso = BCo ^((~BCu)& BCa );
160 Esu = BCu ^((~BCa)& BCe );
163 BCa = Eba^Ega^Eka^Ema^Esa;
164 BCe = Ebe^Ege^Eke^Eme^Ese;
165 BCi = Ebi^Egi^Eki^Emi^Esi;
166 BCo = Ebo^Ego^Eko^Emo^Eso;
167 BCu = Ebu^Egu^Eku^Emu^Esu;
186 Aba = BCa ^((~BCe)& BCi );
187 Aba ^= KeccakF1600Constants[round+1];
188 Abe = BCe ^((~BCi)& BCo );
189 Abi = BCi ^((~BCo)& BCu );
190 Abo = BCo ^((~BCu)& BCa );
191 Abu = BCu ^((~BCa)& BCe );
203 Aga = BCa ^((~BCe)& BCi );
204 Age = BCe ^((~BCi)& BCo );
205 Agi = BCi ^((~BCo)& BCu );
206 Ago = BCo ^((~BCu)& BCa );
207 Agu = BCu ^((~BCa)& BCe );
219 Aka = BCa ^((~BCe)& BCi );
220 Ake = BCe ^((~BCi)& BCo );
221 Aki = BCi ^((~BCo)& BCu );
222 Ako = BCo ^((~BCu)& BCa );
223 Aku = BCu ^((~BCa)& BCe );
235 Ama = BCa ^((~BCe)& BCi );
236 Ame = BCe ^((~BCi)& BCo );
237 Ami = BCi ^((~BCo)& BCu );
238 Amo = BCo ^((~BCu)& BCa );
239 Amu = BCu ^((~BCa)& BCe );
251 Asa = BCa ^((~BCe)& BCi );
252 Ase = BCe ^((~BCi)& BCo );
253 Asi = BCi ^((~BCo)& BCu );
254 Aso = BCo ^((~BCu)& BCa );
255 Asu = BCu ^((~BCa)& BCe );
258 Block::Put(NULLPTR, state)(Aba)(Abe)(Abi)(Abo)(Abu)(Aga)(Age)(Agi)(Ago)(Agu)(Aka)(Ake)(Aki)(Ako)(Aku)(Ama)(Ame)(Ami)(Amo)(Amu)(Asa)(Ase)(Asi)(Aso)(Asu);
#define W64LIT(x)
Declare an unsigned word64.
unsigned long long word64
64-bit unsigned datatype
Classes for Keccak message digests.
T rotlConstant(T x)
Performs a left rotate.
Crypto++ library namespace.
Access a block of memory.