20 ANONYMOUS_NAMESPACE_BEGIN
22 using CryptoPP::word64;
24 const word64 KeccakF_RoundConstants[24] =
26 W64LIT(0x0000000000000001), W64LIT(0x0000000000008082), W64LIT(0x800000000000808a),
27 W64LIT(0x8000000080008000), W64LIT(0x000000000000808b), W64LIT(0x0000000080000001),
28 W64LIT(0x8000000080008081), W64LIT(0x8000000000008009), W64LIT(0x000000000000008a),
29 W64LIT(0x0000000000000088), W64LIT(0x0000000080008009), W64LIT(0x000000008000000a),
30 W64LIT(0x000000008000808b), W64LIT(0x800000000000008b), W64LIT(0x8000000000008089),
31 W64LIT(0x8000000000008003), W64LIT(0x8000000000008002), W64LIT(0x8000000000000080),
32 W64LIT(0x000000000000800a), W64LIT(0x800000008000000a), W64LIT(0x8000000080008081),
33 W64LIT(0x8000000000008080), W64LIT(0x0000000080000001), W64LIT(0x8000000080008008)
36 ANONYMOUS_NAMESPACE_END
40 void KeccakF1600(word64 *state)
43 word64 Aba, Abe, Abi, Abo, Abu;
44 word64 Aga, Age, Agi, Ago, Agu;
45 word64 Aka, Ake, Aki, Ako, Aku;
46 word64 Ama, Ame, Ami, Amo, Amu;
47 word64 Asa, Ase, Asi, Aso, Asu;
48 word64 BCa, BCe, BCi, BCo, BCu;
49 word64 Da, De, Di, Do, Du;
50 word64 Eba, Ebe, Ebi, Ebo, Ebu;
51 word64 Ega, Ege, Egi, Ego, Egu;
52 word64 Eka, Eke, Eki, Eko, Eku;
53 word64 Ema, Eme, Emi, Emo, Emu;
54 word64 Esa, Ese, Esi, Eso, Esu;
58 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);
60 for(
unsigned int round = 0; round < 24; round += 2 )
63 BCa = Aba^Aga^Aka^Ama^Asa;
64 BCe = Abe^Age^Ake^Ame^Ase;
65 BCi = Abi^Agi^Aki^Ami^Asi;
66 BCo = Abo^Ago^Ako^Amo^Aso;
67 BCu = Abu^Agu^Aku^Amu^Asu;
70 Da = BCu^rotlConstant<1>(BCe);
71 De = BCa^rotlConstant<1>(BCi);
72 Di = BCe^rotlConstant<1>(BCo);
73 Do = BCi^rotlConstant<1>(BCu);
74 Du = BCo^rotlConstant<1>(BCa);
79 BCe = rotlConstant<44>(Age);
81 BCi = rotlConstant<43>(Aki);
83 BCo = rotlConstant<21>(Amo);
85 BCu = rotlConstant<14>(Asu);
86 Eba = BCa ^((~BCe)& BCi );
87 Eba ^= (word64)KeccakF_RoundConstants[round];
88 Ebe = BCe ^((~BCi)& BCo );
89 Ebi = BCi ^((~BCo)& BCu );
90 Ebo = BCo ^((~BCu)& BCa );
91 Ebu = BCu ^((~BCa)& BCe );
94 BCa = rotlConstant<28>(Abo);
96 BCe = rotlConstant<20>(Agu);
98 BCi = rotlConstant<3>(Aka);
100 BCo = rotlConstant<45>(Ame);
102 BCu = rotlConstant<61>(Asi);
103 Ega = BCa ^((~BCe)& BCi );
104 Ege = BCe ^((~BCi)& BCo );
105 Egi = BCi ^((~BCo)& BCu );
106 Ego = BCo ^((~BCu)& BCa );
107 Egu = BCu ^((~BCa)& BCe );
110 BCa = rotlConstant<1>(Abe);
112 BCe = rotlConstant<6>(Agi);
114 BCi = rotlConstant<25>(Ako);
116 BCo = rotlConstant<8>(Amu);
118 BCu = rotlConstant<18>(Asa);
119 Eka = BCa ^((~BCe)& BCi );
120 Eke = BCe ^((~BCi)& BCo );
121 Eki = BCi ^((~BCo)& BCu );
122 Eko = BCo ^((~BCu)& BCa );
123 Eku = BCu ^((~BCa)& BCe );
126 BCa = rotlConstant<27>(Abu);
128 BCe = rotlConstant<36>(Aga);
130 BCi = rotlConstant<10>(Ake);
132 BCo = rotlConstant<15>(Ami);
134 BCu = rotlConstant<56>(Aso);
135 Ema = BCa ^((~BCe)& BCi );
136 Eme = BCe ^((~BCi)& BCo );
137 Emi = BCi ^((~BCo)& BCu );
138 Emo = BCo ^((~BCu)& BCa );
139 Emu = BCu ^((~BCa)& BCe );
142 BCa = rotlConstant<62>(Abi);
144 BCe = rotlConstant<55>(Ago);
146 BCi = rotlConstant<39>(Aku);
148 BCo = rotlConstant<41>(Ama);
150 BCu = rotlConstant<2>(Ase);
151 Esa = BCa ^((~BCe)& BCi );
152 Ese = BCe ^((~BCi)& BCo );
153 Esi = BCi ^((~BCo)& BCu );
154 Eso = BCo ^((~BCu)& BCa );
155 Esu = BCu ^((~BCa)& BCe );
158 BCa = Eba^Ega^Eka^Ema^Esa;
159 BCe = Ebe^Ege^Eke^Eme^Ese;
160 BCi = Ebi^Egi^Eki^Emi^Esi;
161 BCo = Ebo^Ego^Eko^Emo^Eso;
162 BCu = Ebu^Egu^Eku^Emu^Esu;
165 Da = BCu^rotlConstant<1>(BCe);
166 De = BCa^rotlConstant<1>(BCi);
167 Di = BCe^rotlConstant<1>(BCo);
168 Do = BCi^rotlConstant<1>(BCu);
169 Du = BCo^rotlConstant<1>(BCa);
174 BCe = rotlConstant<44>(Ege);
176 BCi = rotlConstant<43>(Eki);
178 BCo = rotlConstant<21>(Emo);
180 BCu = rotlConstant<14>(Esu);
181 Aba = BCa ^((~BCe)& BCi );
182 Aba ^= (word64)KeccakF_RoundConstants[round+1];
183 Abe = BCe ^((~BCi)& BCo );
184 Abi = BCi ^((~BCo)& BCu );
185 Abo = BCo ^((~BCu)& BCa );
186 Abu = BCu ^((~BCa)& BCe );
189 BCa = rotlConstant<28>(Ebo);
191 BCe = rotlConstant<20>(Egu);
193 BCi = rotlConstant<3>(Eka);
195 BCo = rotlConstant<45>(Eme);
197 BCu = rotlConstant<61>(Esi);
198 Aga = BCa ^((~BCe)& BCi );
199 Age = BCe ^((~BCi)& BCo );
200 Agi = BCi ^((~BCo)& BCu );
201 Ago = BCo ^((~BCu)& BCa );
202 Agu = BCu ^((~BCa)& BCe );
205 BCa = rotlConstant<1>(Ebe);
207 BCe = rotlConstant<6>(Egi);
209 BCi = rotlConstant<25>(Eko);
211 BCo = rotlConstant<8>(Emu);
213 BCu = rotlConstant<18>(Esa);
214 Aka = BCa ^((~BCe)& BCi );
215 Ake = BCe ^((~BCi)& BCo );
216 Aki = BCi ^((~BCo)& BCu );
217 Ako = BCo ^((~BCu)& BCa );
218 Aku = BCu ^((~BCa)& BCe );
221 BCa = rotlConstant<27>(Ebu);
223 BCe = rotlConstant<36>(Ega);
225 BCi = rotlConstant<10>(Eke);
227 BCo = rotlConstant<15>(Emi);
229 BCu = rotlConstant<56>(Eso);
230 Ama = BCa ^((~BCe)& BCi );
231 Ame = BCe ^((~BCi)& BCo );
232 Ami = BCi ^((~BCo)& BCu );
233 Amo = BCo ^((~BCu)& BCa );
234 Amu = BCu ^((~BCa)& BCe );
237 BCa = rotlConstant<62>(Ebi);
239 BCe = rotlConstant<55>(Ego);
241 BCi = rotlConstant<39>(Eku);
243 BCo = rotlConstant<41>(Ema);
245 BCu = rotlConstant<2>(Ese);
246 Asa = BCa ^((~BCe)& BCi );
247 Ase = BCe ^((~BCi)& BCo );
248 Asi = BCi ^((~BCo)& BCu );
249 Aso = BCo ^((~BCu)& BCa );
250 Asu = BCu ^((~BCa)& BCe );
254 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);
Classes for Keccak message digests.
Access a block of memory.
Access a block of memory.
Crypto++ library namespace.