/src/cryptopp/whrlpool.cpp
Line | Count | Source (jump to first uncovered line) |
1 | | // whrlpool.cpp - originally modified by Kevin Springle from Paulo Barreto and Vincent Rijmen's |
2 | | // public domain code, whirlpool.c. Updated to Whirlpool version 3.0, optimized |
3 | | // and SSE version added by WD. All modifications are placed in the public domain. |
4 | | // |
5 | | // This is the original introductory comment: |
6 | | |
7 | | /** |
8 | | * The Whirlpool hashing function. |
9 | | * |
10 | | * <P> |
11 | | * <b>References</b> |
12 | | * |
13 | | * <P> |
14 | | * The Whirlpool algorithm was developed by |
15 | | * <a href="mailto:pbarreto@scopus.com.br">Paulo S. L. M. Barreto</a> and |
16 | | * <a href="mailto:vincent.rijmen@cryptomathic.com">Vincent Rijmen</a>. |
17 | | * |
18 | | * See |
19 | | * P.S.L.M. Barreto, V. Rijmen, |
20 | | * ``The Whirlpool hashing function,'' |
21 | | * NESSIE submission, 2000 (tweaked version, 2001), |
22 | | * <https://www.cosic.esat.kuleuven.ac.be/nessie/workshop/submissions/whirlpool.zip> |
23 | | * |
24 | | * @author Paulo S.L.M. Barreto |
25 | | * @author Vincent Rijmen. |
26 | | * |
27 | | * @version 3.0 (2003.03.12) |
28 | | * |
29 | | * ============================================================================= |
30 | | * |
31 | | * Differences from version 2.1: |
32 | | * |
33 | | * - Suboptimal diffusion matrix replaced by cir(1, 1, 4, 1, 8, 5, 2, 9). |
34 | | * |
35 | | * ============================================================================= |
36 | | * |
37 | | * Differences from version 2.0: |
38 | | * |
39 | | * - Generation of ISO/IEC 10118-3 test vectors. |
40 | | * - Bug fix: nonzero carry was ignored when tallying the data length |
41 | | * (this bug apparently only manifested itself when feeding data |
42 | | * in pieces rather than in a single chunk at once). |
43 | | * - Support for MS Visual C++ 64-bit integer arithmetic. |
44 | | * |
45 | | * Differences from version 1.0: |
46 | | * |
47 | | * - Original S-box replaced by the tweaked, hardware-efficient version. |
48 | | * |
49 | | * ============================================================================= |
50 | | * |
51 | | * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS |
52 | | * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
53 | | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
54 | | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE |
55 | | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
56 | | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
57 | | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR |
58 | | * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
59 | | * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE |
60 | | * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
61 | | * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
62 | | * |
63 | | */ |
64 | | |
65 | | #include "pch.h" |
66 | | #include "config.h" |
67 | | |
68 | | #if CRYPTOPP_MSC_VERSION |
69 | | # pragma warning(disable: 4127) |
70 | | #endif |
71 | | |
72 | | #include "whrlpool.h" |
73 | | #include "misc.h" |
74 | | #include "cpu.h" |
75 | | |
76 | | #if defined(CRYPTOPP_DISABLE_WHIRLPOOL_ASM) |
77 | | # undef CRYPTOPP_X86_ASM_AVAILABLE |
78 | | # undef CRYPTOPP_X32_ASM_AVAILABLE |
79 | | # undef CRYPTOPP_X64_ASM_AVAILABLE |
80 | | # undef CRYPTOPP_SSE2_ASM_AVAILABLE |
81 | | #endif |
82 | | |
83 | | NAMESPACE_BEGIN(CryptoPP) |
84 | | |
85 | | #if defined(CRYPTOPP_DEBUG) && !defined(CRYPTOPP_DOXYGEN_PROCESSING) |
86 | | void Whirlpool_TestInstantiations() |
87 | | { |
88 | | Whirlpool x; |
89 | | } |
90 | | #endif |
91 | | |
92 | | std::string Whirlpool::AlgorithmProvider() const |
93 | 0 | { |
94 | | #if CRYPTOPP_SSE2_ASM_AVAILABLE |
95 | | if (HasSSE2()) |
96 | | return "SSE2"; |
97 | | #endif |
98 | 0 | return "C++"; |
99 | 0 | } |
100 | | |
101 | | void Whirlpool::InitState(HashWordType *state) |
102 | 16.9k | { |
103 | 16.9k | std::memset(state, 0, 8*sizeof(state[0])); |
104 | 16.9k | } |
105 | | |
106 | | void Whirlpool::TruncatedFinal(byte *hash, size_t size) |
107 | 16.6k | { |
108 | 16.6k | CRYPTOPP_ASSERT(hash != NULLPTR); |
109 | 16.6k | ThrowIfInvalidTruncatedSize(size); |
110 | | |
111 | 16.6k | PadLastBlock(32); |
112 | 16.6k | CorrectEndianess(m_data, m_data, 32); |
113 | | |
114 | 16.6k | m_data[m_data.size()-4] = 0; |
115 | 16.6k | m_data[m_data.size()-3] = 0; |
116 | 16.6k | m_data[m_data.size()-2] = GetBitCountHi(); |
117 | 16.6k | m_data[m_data.size()-1] = GetBitCountLo(); |
118 | | |
119 | 16.6k | Transform(m_state, m_data); |
120 | 16.6k | CorrectEndianess(m_state, m_state, DigestSize()); |
121 | 16.6k | std::memcpy(hash, m_state, size); |
122 | | |
123 | 16.6k | Restart(); // reinit for next use |
124 | 16.6k | } |
125 | | |
126 | | /* |
127 | | * The number of rounds of the internal dedicated block cipher. |
128 | | */ |
129 | 5.07M | #define R 10 |
130 | | |
131 | | /* |
132 | | * Though Whirlpool is endianness-neutral, the encryption tables are listed |
133 | | * in BIG-ENDIAN format, which is adopted throughout this implementation |
134 | | * (but little-endian notation would be equally suitable if consistently |
135 | | * employed). |
136 | | */ |
137 | | |
138 | | #if CRYPTOPP_SSE2_ASM_AVAILABLE |
139 | | CRYPTOPP_ALIGN_DATA(16) |
140 | | CRYPTOPP_TABLE |
141 | | const word64 Whirlpool_C[4*256+R] = { |
142 | | #else |
143 | | const word64 Whirlpool_C[4*256+R] = { |
144 | | #endif |
145 | | W64LIT(0x18186018c07830d8), W64LIT(0x23238c2305af4626), W64LIT(0xc6c63fc67ef991b8), W64LIT(0xe8e887e8136fcdfb), |
146 | | W64LIT(0x878726874ca113cb), W64LIT(0xb8b8dab8a9626d11), W64LIT(0x0101040108050209), W64LIT(0x4f4f214f426e9e0d), |
147 | | W64LIT(0x3636d836adee6c9b), W64LIT(0xa6a6a2a6590451ff), W64LIT(0xd2d26fd2debdb90c), W64LIT(0xf5f5f3f5fb06f70e), |
148 | | W64LIT(0x7979f979ef80f296), W64LIT(0x6f6fa16f5fcede30), W64LIT(0x91917e91fcef3f6d), W64LIT(0x52525552aa07a4f8), |
149 | | W64LIT(0x60609d6027fdc047), W64LIT(0xbcbccabc89766535), W64LIT(0x9b9b569baccd2b37), W64LIT(0x8e8e028e048c018a), |
150 | | W64LIT(0xa3a3b6a371155bd2), W64LIT(0x0c0c300c603c186c), W64LIT(0x7b7bf17bff8af684), W64LIT(0x3535d435b5e16a80), |
151 | | W64LIT(0x1d1d741de8693af5), W64LIT(0xe0e0a7e05347ddb3), W64LIT(0xd7d77bd7f6acb321), W64LIT(0xc2c22fc25eed999c), |
152 | | W64LIT(0x2e2eb82e6d965c43), W64LIT(0x4b4b314b627a9629), W64LIT(0xfefedffea321e15d), W64LIT(0x575741578216aed5), |
153 | | W64LIT(0x15155415a8412abd), W64LIT(0x7777c1779fb6eee8), W64LIT(0x3737dc37a5eb6e92), W64LIT(0xe5e5b3e57b56d79e), |
154 | | W64LIT(0x9f9f469f8cd92313), W64LIT(0xf0f0e7f0d317fd23), W64LIT(0x4a4a354a6a7f9420), W64LIT(0xdada4fda9e95a944), |
155 | | W64LIT(0x58587d58fa25b0a2), W64LIT(0xc9c903c906ca8fcf), W64LIT(0x2929a429558d527c), W64LIT(0x0a0a280a5022145a), |
156 | | W64LIT(0xb1b1feb1e14f7f50), W64LIT(0xa0a0baa0691a5dc9), W64LIT(0x6b6bb16b7fdad614), W64LIT(0x85852e855cab17d9), |
157 | | W64LIT(0xbdbdcebd8173673c), W64LIT(0x5d5d695dd234ba8f), W64LIT(0x1010401080502090), W64LIT(0xf4f4f7f4f303f507), |
158 | | W64LIT(0xcbcb0bcb16c08bdd), W64LIT(0x3e3ef83eedc67cd3), W64LIT(0x0505140528110a2d), W64LIT(0x676781671fe6ce78), |
159 | | W64LIT(0xe4e4b7e47353d597), W64LIT(0x27279c2725bb4e02), W64LIT(0x4141194132588273), W64LIT(0x8b8b168b2c9d0ba7), |
160 | | W64LIT(0xa7a7a6a7510153f6), W64LIT(0x7d7de97dcf94fab2), W64LIT(0x95956e95dcfb3749), W64LIT(0xd8d847d88e9fad56), |
161 | | W64LIT(0xfbfbcbfb8b30eb70), W64LIT(0xeeee9fee2371c1cd), W64LIT(0x7c7ced7cc791f8bb), W64LIT(0x6666856617e3cc71), |
162 | | W64LIT(0xdddd53dda68ea77b), W64LIT(0x17175c17b84b2eaf), W64LIT(0x4747014702468e45), W64LIT(0x9e9e429e84dc211a), |
163 | | W64LIT(0xcaca0fca1ec589d4), W64LIT(0x2d2db42d75995a58), W64LIT(0xbfbfc6bf9179632e), W64LIT(0x07071c07381b0e3f), |
164 | | W64LIT(0xadad8ead012347ac), W64LIT(0x5a5a755aea2fb4b0), W64LIT(0x838336836cb51bef), W64LIT(0x3333cc3385ff66b6), |
165 | | W64LIT(0x636391633ff2c65c), W64LIT(0x02020802100a0412), W64LIT(0xaaaa92aa39384993), W64LIT(0x7171d971afa8e2de), |
166 | | W64LIT(0xc8c807c80ecf8dc6), W64LIT(0x19196419c87d32d1), W64LIT(0x494939497270923b), W64LIT(0xd9d943d9869aaf5f), |
167 | | W64LIT(0xf2f2eff2c31df931), W64LIT(0xe3e3abe34b48dba8), W64LIT(0x5b5b715be22ab6b9), W64LIT(0x88881a8834920dbc), |
168 | | W64LIT(0x9a9a529aa4c8293e), W64LIT(0x262698262dbe4c0b), W64LIT(0x3232c8328dfa64bf), W64LIT(0xb0b0fab0e94a7d59), |
169 | | W64LIT(0xe9e983e91b6acff2), W64LIT(0x0f0f3c0f78331e77), W64LIT(0xd5d573d5e6a6b733), W64LIT(0x80803a8074ba1df4), |
170 | | W64LIT(0xbebec2be997c6127), W64LIT(0xcdcd13cd26de87eb), W64LIT(0x3434d034bde46889), W64LIT(0x48483d487a759032), |
171 | | W64LIT(0xffffdbffab24e354), W64LIT(0x7a7af57af78ff48d), W64LIT(0x90907a90f4ea3d64), W64LIT(0x5f5f615fc23ebe9d), |
172 | | W64LIT(0x202080201da0403d), W64LIT(0x6868bd6867d5d00f), W64LIT(0x1a1a681ad07234ca), W64LIT(0xaeae82ae192c41b7), |
173 | | W64LIT(0xb4b4eab4c95e757d), W64LIT(0x54544d549a19a8ce), W64LIT(0x93937693ece53b7f), W64LIT(0x222288220daa442f), |
174 | | W64LIT(0x64648d6407e9c863), W64LIT(0xf1f1e3f1db12ff2a), W64LIT(0x7373d173bfa2e6cc), W64LIT(0x12124812905a2482), |
175 | | W64LIT(0x40401d403a5d807a), W64LIT(0x0808200840281048), W64LIT(0xc3c32bc356e89b95), W64LIT(0xecec97ec337bc5df), |
176 | | W64LIT(0xdbdb4bdb9690ab4d), W64LIT(0xa1a1bea1611f5fc0), W64LIT(0x8d8d0e8d1c830791), W64LIT(0x3d3df43df5c97ac8), |
177 | | W64LIT(0x97976697ccf1335b), W64LIT(0x0000000000000000), W64LIT(0xcfcf1bcf36d483f9), W64LIT(0x2b2bac2b4587566e), |
178 | | W64LIT(0x7676c57697b3ece1), W64LIT(0x8282328264b019e6), W64LIT(0xd6d67fd6fea9b128), W64LIT(0x1b1b6c1bd87736c3), |
179 | | W64LIT(0xb5b5eeb5c15b7774), W64LIT(0xafaf86af112943be), W64LIT(0x6a6ab56a77dfd41d), W64LIT(0x50505d50ba0da0ea), |
180 | | W64LIT(0x45450945124c8a57), W64LIT(0xf3f3ebf3cb18fb38), W64LIT(0x3030c0309df060ad), W64LIT(0xefef9bef2b74c3c4), |
181 | | W64LIT(0x3f3ffc3fe5c37eda), W64LIT(0x55554955921caac7), W64LIT(0xa2a2b2a2791059db), W64LIT(0xeaea8fea0365c9e9), |
182 | | W64LIT(0x656589650fecca6a), W64LIT(0xbabad2bab9686903), W64LIT(0x2f2fbc2f65935e4a), W64LIT(0xc0c027c04ee79d8e), |
183 | | W64LIT(0xdede5fdebe81a160), W64LIT(0x1c1c701ce06c38fc), W64LIT(0xfdfdd3fdbb2ee746), W64LIT(0x4d4d294d52649a1f), |
184 | | W64LIT(0x92927292e4e03976), W64LIT(0x7575c9758fbceafa), W64LIT(0x06061806301e0c36), W64LIT(0x8a8a128a249809ae), |
185 | | W64LIT(0xb2b2f2b2f940794b), W64LIT(0xe6e6bfe66359d185), W64LIT(0x0e0e380e70361c7e), W64LIT(0x1f1f7c1ff8633ee7), |
186 | | W64LIT(0x6262956237f7c455), W64LIT(0xd4d477d4eea3b53a), W64LIT(0xa8a89aa829324d81), W64LIT(0x96966296c4f43152), |
187 | | W64LIT(0xf9f9c3f99b3aef62), W64LIT(0xc5c533c566f697a3), W64LIT(0x2525942535b14a10), W64LIT(0x59597959f220b2ab), |
188 | | W64LIT(0x84842a8454ae15d0), W64LIT(0x7272d572b7a7e4c5), W64LIT(0x3939e439d5dd72ec), W64LIT(0x4c4c2d4c5a619816), |
189 | | W64LIT(0x5e5e655eca3bbc94), W64LIT(0x7878fd78e785f09f), W64LIT(0x3838e038ddd870e5), W64LIT(0x8c8c0a8c14860598), |
190 | | W64LIT(0xd1d163d1c6b2bf17), W64LIT(0xa5a5aea5410b57e4), W64LIT(0xe2e2afe2434dd9a1), W64LIT(0x616199612ff8c24e), |
191 | | W64LIT(0xb3b3f6b3f1457b42), W64LIT(0x2121842115a54234), W64LIT(0x9c9c4a9c94d62508), W64LIT(0x1e1e781ef0663cee), |
192 | | W64LIT(0x4343114322528661), W64LIT(0xc7c73bc776fc93b1), W64LIT(0xfcfcd7fcb32be54f), W64LIT(0x0404100420140824), |
193 | | W64LIT(0x51515951b208a2e3), W64LIT(0x99995e99bcc72f25), W64LIT(0x6d6da96d4fc4da22), W64LIT(0x0d0d340d68391a65), |
194 | | W64LIT(0xfafacffa8335e979), W64LIT(0xdfdf5bdfb684a369), W64LIT(0x7e7ee57ed79bfca9), W64LIT(0x242490243db44819), |
195 | | W64LIT(0x3b3bec3bc5d776fe), W64LIT(0xabab96ab313d4b9a), W64LIT(0xcece1fce3ed181f0), W64LIT(0x1111441188552299), |
196 | | W64LIT(0x8f8f068f0c890383), W64LIT(0x4e4e254e4a6b9c04), W64LIT(0xb7b7e6b7d1517366), W64LIT(0xebeb8beb0b60cbe0), |
197 | | W64LIT(0x3c3cf03cfdcc78c1), W64LIT(0x81813e817cbf1ffd), W64LIT(0x94946a94d4fe3540), W64LIT(0xf7f7fbf7eb0cf31c), |
198 | | W64LIT(0xb9b9deb9a1676f18), W64LIT(0x13134c13985f268b), W64LIT(0x2c2cb02c7d9c5851), W64LIT(0xd3d36bd3d6b8bb05), |
199 | | W64LIT(0xe7e7bbe76b5cd38c), W64LIT(0x6e6ea56e57cbdc39), W64LIT(0xc4c437c46ef395aa), W64LIT(0x03030c03180f061b), |
200 | | W64LIT(0x565645568a13acdc), W64LIT(0x44440d441a49885e), W64LIT(0x7f7fe17fdf9efea0), W64LIT(0xa9a99ea921374f88), |
201 | | W64LIT(0x2a2aa82a4d825467), W64LIT(0xbbbbd6bbb16d6b0a), W64LIT(0xc1c123c146e29f87), W64LIT(0x53535153a202a6f1), |
202 | | W64LIT(0xdcdc57dcae8ba572), W64LIT(0x0b0b2c0b58271653), W64LIT(0x9d9d4e9d9cd32701), W64LIT(0x6c6cad6c47c1d82b), |
203 | | W64LIT(0x3131c43195f562a4), W64LIT(0x7474cd7487b9e8f3), W64LIT(0xf6f6fff6e309f115), W64LIT(0x464605460a438c4c), |
204 | | W64LIT(0xacac8aac092645a5), W64LIT(0x89891e893c970fb5), W64LIT(0x14145014a04428b4), W64LIT(0xe1e1a3e15b42dfba), |
205 | | W64LIT(0x16165816b04e2ca6), W64LIT(0x3a3ae83acdd274f7), W64LIT(0x6969b9696fd0d206), W64LIT(0x09092409482d1241), |
206 | | W64LIT(0x7070dd70a7ade0d7), W64LIT(0xb6b6e2b6d954716f), W64LIT(0xd0d067d0ceb7bd1e), W64LIT(0xeded93ed3b7ec7d6), |
207 | | W64LIT(0xcccc17cc2edb85e2), W64LIT(0x424215422a578468), W64LIT(0x98985a98b4c22d2c), W64LIT(0xa4a4aaa4490e55ed), |
208 | | W64LIT(0x2828a0285d885075), W64LIT(0x5c5c6d5cda31b886), W64LIT(0xf8f8c7f8933fed6b), W64LIT(0x8686228644a411c2), |
209 | | |
210 | | W64LIT(0xd818186018c07830), W64LIT(0x2623238c2305af46), W64LIT(0xb8c6c63fc67ef991), W64LIT(0xfbe8e887e8136fcd), |
211 | | W64LIT(0xcb878726874ca113), W64LIT(0x11b8b8dab8a9626d), W64LIT(0x0901010401080502), W64LIT(0x0d4f4f214f426e9e), |
212 | | W64LIT(0x9b3636d836adee6c), W64LIT(0xffa6a6a2a6590451), W64LIT(0x0cd2d26fd2debdb9), W64LIT(0x0ef5f5f3f5fb06f7), |
213 | | W64LIT(0x967979f979ef80f2), W64LIT(0x306f6fa16f5fcede), W64LIT(0x6d91917e91fcef3f), W64LIT(0xf852525552aa07a4), |
214 | | W64LIT(0x4760609d6027fdc0), W64LIT(0x35bcbccabc897665), W64LIT(0x379b9b569baccd2b), W64LIT(0x8a8e8e028e048c01), |
215 | | W64LIT(0xd2a3a3b6a371155b), W64LIT(0x6c0c0c300c603c18), W64LIT(0x847b7bf17bff8af6), W64LIT(0x803535d435b5e16a), |
216 | | W64LIT(0xf51d1d741de8693a), W64LIT(0xb3e0e0a7e05347dd), W64LIT(0x21d7d77bd7f6acb3), W64LIT(0x9cc2c22fc25eed99), |
217 | | W64LIT(0x432e2eb82e6d965c), W64LIT(0x294b4b314b627a96), W64LIT(0x5dfefedffea321e1), W64LIT(0xd5575741578216ae), |
218 | | W64LIT(0xbd15155415a8412a), W64LIT(0xe87777c1779fb6ee), W64LIT(0x923737dc37a5eb6e), W64LIT(0x9ee5e5b3e57b56d7), |
219 | | W64LIT(0x139f9f469f8cd923), W64LIT(0x23f0f0e7f0d317fd), W64LIT(0x204a4a354a6a7f94), W64LIT(0x44dada4fda9e95a9), |
220 | | W64LIT(0xa258587d58fa25b0), W64LIT(0xcfc9c903c906ca8f), W64LIT(0x7c2929a429558d52), W64LIT(0x5a0a0a280a502214), |
221 | | W64LIT(0x50b1b1feb1e14f7f), W64LIT(0xc9a0a0baa0691a5d), W64LIT(0x146b6bb16b7fdad6), W64LIT(0xd985852e855cab17), |
222 | | W64LIT(0x3cbdbdcebd817367), W64LIT(0x8f5d5d695dd234ba), W64LIT(0x9010104010805020), W64LIT(0x07f4f4f7f4f303f5), |
223 | | W64LIT(0xddcbcb0bcb16c08b), W64LIT(0xd33e3ef83eedc67c), W64LIT(0x2d0505140528110a), W64LIT(0x78676781671fe6ce), |
224 | | W64LIT(0x97e4e4b7e47353d5), W64LIT(0x0227279c2725bb4e), W64LIT(0x7341411941325882), W64LIT(0xa78b8b168b2c9d0b), |
225 | | W64LIT(0xf6a7a7a6a7510153), W64LIT(0xb27d7de97dcf94fa), W64LIT(0x4995956e95dcfb37), W64LIT(0x56d8d847d88e9fad), |
226 | | W64LIT(0x70fbfbcbfb8b30eb), W64LIT(0xcdeeee9fee2371c1), W64LIT(0xbb7c7ced7cc791f8), W64LIT(0x716666856617e3cc), |
227 | | W64LIT(0x7bdddd53dda68ea7), W64LIT(0xaf17175c17b84b2e), W64LIT(0x454747014702468e), W64LIT(0x1a9e9e429e84dc21), |
228 | | W64LIT(0xd4caca0fca1ec589), W64LIT(0x582d2db42d75995a), W64LIT(0x2ebfbfc6bf917963), W64LIT(0x3f07071c07381b0e), |
229 | | W64LIT(0xacadad8ead012347), W64LIT(0xb05a5a755aea2fb4), W64LIT(0xef838336836cb51b), W64LIT(0xb63333cc3385ff66), |
230 | | W64LIT(0x5c636391633ff2c6), W64LIT(0x1202020802100a04), W64LIT(0x93aaaa92aa393849), W64LIT(0xde7171d971afa8e2), |
231 | | W64LIT(0xc6c8c807c80ecf8d), W64LIT(0xd119196419c87d32), W64LIT(0x3b49493949727092), W64LIT(0x5fd9d943d9869aaf), |
232 | | W64LIT(0x31f2f2eff2c31df9), W64LIT(0xa8e3e3abe34b48db), W64LIT(0xb95b5b715be22ab6), W64LIT(0xbc88881a8834920d), |
233 | | W64LIT(0x3e9a9a529aa4c829), W64LIT(0x0b262698262dbe4c), W64LIT(0xbf3232c8328dfa64), W64LIT(0x59b0b0fab0e94a7d), |
234 | | W64LIT(0xf2e9e983e91b6acf), W64LIT(0x770f0f3c0f78331e), W64LIT(0x33d5d573d5e6a6b7), W64LIT(0xf480803a8074ba1d), |
235 | | W64LIT(0x27bebec2be997c61), W64LIT(0xebcdcd13cd26de87), W64LIT(0x893434d034bde468), W64LIT(0x3248483d487a7590), |
236 | | W64LIT(0x54ffffdbffab24e3), W64LIT(0x8d7a7af57af78ff4), W64LIT(0x6490907a90f4ea3d), W64LIT(0x9d5f5f615fc23ebe), |
237 | | W64LIT(0x3d202080201da040), W64LIT(0x0f6868bd6867d5d0), W64LIT(0xca1a1a681ad07234), W64LIT(0xb7aeae82ae192c41), |
238 | | W64LIT(0x7db4b4eab4c95e75), W64LIT(0xce54544d549a19a8), W64LIT(0x7f93937693ece53b), W64LIT(0x2f222288220daa44), |
239 | | W64LIT(0x6364648d6407e9c8), W64LIT(0x2af1f1e3f1db12ff), W64LIT(0xcc7373d173bfa2e6), W64LIT(0x8212124812905a24), |
240 | | W64LIT(0x7a40401d403a5d80), W64LIT(0x4808082008402810), W64LIT(0x95c3c32bc356e89b), W64LIT(0xdfecec97ec337bc5), |
241 | | W64LIT(0x4ddbdb4bdb9690ab), W64LIT(0xc0a1a1bea1611f5f), W64LIT(0x918d8d0e8d1c8307), W64LIT(0xc83d3df43df5c97a), |
242 | | W64LIT(0x5b97976697ccf133), W64LIT(0x0000000000000000), W64LIT(0xf9cfcf1bcf36d483), W64LIT(0x6e2b2bac2b458756), |
243 | | W64LIT(0xe17676c57697b3ec), W64LIT(0xe68282328264b019), W64LIT(0x28d6d67fd6fea9b1), W64LIT(0xc31b1b6c1bd87736), |
244 | | W64LIT(0x74b5b5eeb5c15b77), W64LIT(0xbeafaf86af112943), W64LIT(0x1d6a6ab56a77dfd4), W64LIT(0xea50505d50ba0da0), |
245 | | W64LIT(0x5745450945124c8a), W64LIT(0x38f3f3ebf3cb18fb), W64LIT(0xad3030c0309df060), W64LIT(0xc4efef9bef2b74c3), |
246 | | W64LIT(0xda3f3ffc3fe5c37e), W64LIT(0xc755554955921caa), W64LIT(0xdba2a2b2a2791059), W64LIT(0xe9eaea8fea0365c9), |
247 | | W64LIT(0x6a656589650fecca), W64LIT(0x03babad2bab96869), W64LIT(0x4a2f2fbc2f65935e), W64LIT(0x8ec0c027c04ee79d), |
248 | | W64LIT(0x60dede5fdebe81a1), W64LIT(0xfc1c1c701ce06c38), W64LIT(0x46fdfdd3fdbb2ee7), W64LIT(0x1f4d4d294d52649a), |
249 | | W64LIT(0x7692927292e4e039), W64LIT(0xfa7575c9758fbcea), W64LIT(0x3606061806301e0c), W64LIT(0xae8a8a128a249809), |
250 | | W64LIT(0x4bb2b2f2b2f94079), W64LIT(0x85e6e6bfe66359d1), W64LIT(0x7e0e0e380e70361c), W64LIT(0xe71f1f7c1ff8633e), |
251 | | W64LIT(0x556262956237f7c4), W64LIT(0x3ad4d477d4eea3b5), W64LIT(0x81a8a89aa829324d), W64LIT(0x5296966296c4f431), |
252 | | W64LIT(0x62f9f9c3f99b3aef), W64LIT(0xa3c5c533c566f697), W64LIT(0x102525942535b14a), W64LIT(0xab59597959f220b2), |
253 | | W64LIT(0xd084842a8454ae15), W64LIT(0xc57272d572b7a7e4), W64LIT(0xec3939e439d5dd72), W64LIT(0x164c4c2d4c5a6198), |
254 | | W64LIT(0x945e5e655eca3bbc), W64LIT(0x9f7878fd78e785f0), W64LIT(0xe53838e038ddd870), W64LIT(0x988c8c0a8c148605), |
255 | | W64LIT(0x17d1d163d1c6b2bf), W64LIT(0xe4a5a5aea5410b57), W64LIT(0xa1e2e2afe2434dd9), W64LIT(0x4e616199612ff8c2), |
256 | | W64LIT(0x42b3b3f6b3f1457b), W64LIT(0x342121842115a542), W64LIT(0x089c9c4a9c94d625), W64LIT(0xee1e1e781ef0663c), |
257 | | W64LIT(0x6143431143225286), W64LIT(0xb1c7c73bc776fc93), W64LIT(0x4ffcfcd7fcb32be5), W64LIT(0x2404041004201408), |
258 | | W64LIT(0xe351515951b208a2), W64LIT(0x2599995e99bcc72f), W64LIT(0x226d6da96d4fc4da), W64LIT(0x650d0d340d68391a), |
259 | | W64LIT(0x79fafacffa8335e9), W64LIT(0x69dfdf5bdfb684a3), W64LIT(0xa97e7ee57ed79bfc), W64LIT(0x19242490243db448), |
260 | | W64LIT(0xfe3b3bec3bc5d776), W64LIT(0x9aabab96ab313d4b), W64LIT(0xf0cece1fce3ed181), W64LIT(0x9911114411885522), |
261 | | W64LIT(0x838f8f068f0c8903), W64LIT(0x044e4e254e4a6b9c), W64LIT(0x66b7b7e6b7d15173), W64LIT(0xe0ebeb8beb0b60cb), |
262 | | W64LIT(0xc13c3cf03cfdcc78), W64LIT(0xfd81813e817cbf1f), W64LIT(0x4094946a94d4fe35), W64LIT(0x1cf7f7fbf7eb0cf3), |
263 | | W64LIT(0x18b9b9deb9a1676f), W64LIT(0x8b13134c13985f26), W64LIT(0x512c2cb02c7d9c58), W64LIT(0x05d3d36bd3d6b8bb), |
264 | | W64LIT(0x8ce7e7bbe76b5cd3), W64LIT(0x396e6ea56e57cbdc), W64LIT(0xaac4c437c46ef395), W64LIT(0x1b03030c03180f06), |
265 | | W64LIT(0xdc565645568a13ac), W64LIT(0x5e44440d441a4988), W64LIT(0xa07f7fe17fdf9efe), W64LIT(0x88a9a99ea921374f), |
266 | | W64LIT(0x672a2aa82a4d8254), W64LIT(0x0abbbbd6bbb16d6b), W64LIT(0x87c1c123c146e29f), W64LIT(0xf153535153a202a6), |
267 | | W64LIT(0x72dcdc57dcae8ba5), W64LIT(0x530b0b2c0b582716), W64LIT(0x019d9d4e9d9cd327), W64LIT(0x2b6c6cad6c47c1d8), |
268 | | W64LIT(0xa43131c43195f562), W64LIT(0xf37474cd7487b9e8), W64LIT(0x15f6f6fff6e309f1), W64LIT(0x4c464605460a438c), |
269 | | W64LIT(0xa5acac8aac092645), W64LIT(0xb589891e893c970f), W64LIT(0xb414145014a04428), W64LIT(0xbae1e1a3e15b42df), |
270 | | W64LIT(0xa616165816b04e2c), W64LIT(0xf73a3ae83acdd274), W64LIT(0x066969b9696fd0d2), W64LIT(0x4109092409482d12), |
271 | | W64LIT(0xd77070dd70a7ade0), W64LIT(0x6fb6b6e2b6d95471), W64LIT(0x1ed0d067d0ceb7bd), W64LIT(0xd6eded93ed3b7ec7), |
272 | | W64LIT(0xe2cccc17cc2edb85), W64LIT(0x68424215422a5784), W64LIT(0x2c98985a98b4c22d), W64LIT(0xeda4a4aaa4490e55), |
273 | | W64LIT(0x752828a0285d8850), W64LIT(0x865c5c6d5cda31b8), W64LIT(0x6bf8f8c7f8933fed), W64LIT(0xc28686228644a411), |
274 | | |
275 | | W64LIT(0x30d818186018c078), W64LIT(0x462623238c2305af), W64LIT(0x91b8c6c63fc67ef9), W64LIT(0xcdfbe8e887e8136f), |
276 | | W64LIT(0x13cb878726874ca1), W64LIT(0x6d11b8b8dab8a962), W64LIT(0x0209010104010805), W64LIT(0x9e0d4f4f214f426e), |
277 | | W64LIT(0x6c9b3636d836adee), W64LIT(0x51ffa6a6a2a65904), W64LIT(0xb90cd2d26fd2debd), W64LIT(0xf70ef5f5f3f5fb06), |
278 | | W64LIT(0xf2967979f979ef80), W64LIT(0xde306f6fa16f5fce), W64LIT(0x3f6d91917e91fcef), W64LIT(0xa4f852525552aa07), |
279 | | W64LIT(0xc04760609d6027fd), W64LIT(0x6535bcbccabc8976), W64LIT(0x2b379b9b569baccd), W64LIT(0x018a8e8e028e048c), |
280 | | W64LIT(0x5bd2a3a3b6a37115), W64LIT(0x186c0c0c300c603c), W64LIT(0xf6847b7bf17bff8a), W64LIT(0x6a803535d435b5e1), |
281 | | W64LIT(0x3af51d1d741de869), W64LIT(0xddb3e0e0a7e05347), W64LIT(0xb321d7d77bd7f6ac), W64LIT(0x999cc2c22fc25eed), |
282 | | W64LIT(0x5c432e2eb82e6d96), W64LIT(0x96294b4b314b627a), W64LIT(0xe15dfefedffea321), W64LIT(0xaed5575741578216), |
283 | | W64LIT(0x2abd15155415a841), W64LIT(0xeee87777c1779fb6), W64LIT(0x6e923737dc37a5eb), W64LIT(0xd79ee5e5b3e57b56), |
284 | | W64LIT(0x23139f9f469f8cd9), W64LIT(0xfd23f0f0e7f0d317), W64LIT(0x94204a4a354a6a7f), W64LIT(0xa944dada4fda9e95), |
285 | | W64LIT(0xb0a258587d58fa25), W64LIT(0x8fcfc9c903c906ca), W64LIT(0x527c2929a429558d), W64LIT(0x145a0a0a280a5022), |
286 | | W64LIT(0x7f50b1b1feb1e14f), W64LIT(0x5dc9a0a0baa0691a), W64LIT(0xd6146b6bb16b7fda), W64LIT(0x17d985852e855cab), |
287 | | W64LIT(0x673cbdbdcebd8173), W64LIT(0xba8f5d5d695dd234), W64LIT(0x2090101040108050), W64LIT(0xf507f4f4f7f4f303), |
288 | | W64LIT(0x8bddcbcb0bcb16c0), W64LIT(0x7cd33e3ef83eedc6), W64LIT(0x0a2d050514052811), W64LIT(0xce78676781671fe6), |
289 | | W64LIT(0xd597e4e4b7e47353), W64LIT(0x4e0227279c2725bb), W64LIT(0x8273414119413258), W64LIT(0x0ba78b8b168b2c9d), |
290 | | W64LIT(0x53f6a7a7a6a75101), W64LIT(0xfab27d7de97dcf94), W64LIT(0x374995956e95dcfb), W64LIT(0xad56d8d847d88e9f), |
291 | | W64LIT(0xeb70fbfbcbfb8b30), W64LIT(0xc1cdeeee9fee2371), W64LIT(0xf8bb7c7ced7cc791), W64LIT(0xcc716666856617e3), |
292 | | W64LIT(0xa77bdddd53dda68e), W64LIT(0x2eaf17175c17b84b), W64LIT(0x8e45474701470246), W64LIT(0x211a9e9e429e84dc), |
293 | | W64LIT(0x89d4caca0fca1ec5), W64LIT(0x5a582d2db42d7599), W64LIT(0x632ebfbfc6bf9179), W64LIT(0x0e3f07071c07381b), |
294 | | W64LIT(0x47acadad8ead0123), W64LIT(0xb4b05a5a755aea2f), W64LIT(0x1bef838336836cb5), W64LIT(0x66b63333cc3385ff), |
295 | | W64LIT(0xc65c636391633ff2), W64LIT(0x041202020802100a), W64LIT(0x4993aaaa92aa3938), W64LIT(0xe2de7171d971afa8), |
296 | | W64LIT(0x8dc6c8c807c80ecf), W64LIT(0x32d119196419c87d), W64LIT(0x923b494939497270), W64LIT(0xaf5fd9d943d9869a), |
297 | | W64LIT(0xf931f2f2eff2c31d), W64LIT(0xdba8e3e3abe34b48), W64LIT(0xb6b95b5b715be22a), W64LIT(0x0dbc88881a883492), |
298 | | W64LIT(0x293e9a9a529aa4c8), W64LIT(0x4c0b262698262dbe), W64LIT(0x64bf3232c8328dfa), W64LIT(0x7d59b0b0fab0e94a), |
299 | | W64LIT(0xcff2e9e983e91b6a), W64LIT(0x1e770f0f3c0f7833), W64LIT(0xb733d5d573d5e6a6), W64LIT(0x1df480803a8074ba), |
300 | | W64LIT(0x6127bebec2be997c), W64LIT(0x87ebcdcd13cd26de), W64LIT(0x68893434d034bde4), W64LIT(0x903248483d487a75), |
301 | | W64LIT(0xe354ffffdbffab24), W64LIT(0xf48d7a7af57af78f), W64LIT(0x3d6490907a90f4ea), W64LIT(0xbe9d5f5f615fc23e), |
302 | | W64LIT(0x403d202080201da0), W64LIT(0xd00f6868bd6867d5), W64LIT(0x34ca1a1a681ad072), W64LIT(0x41b7aeae82ae192c), |
303 | | W64LIT(0x757db4b4eab4c95e), W64LIT(0xa8ce54544d549a19), W64LIT(0x3b7f93937693ece5), W64LIT(0x442f222288220daa), |
304 | | W64LIT(0xc86364648d6407e9), W64LIT(0xff2af1f1e3f1db12), W64LIT(0xe6cc7373d173bfa2), W64LIT(0x248212124812905a), |
305 | | W64LIT(0x807a40401d403a5d), W64LIT(0x1048080820084028), W64LIT(0x9b95c3c32bc356e8), W64LIT(0xc5dfecec97ec337b), |
306 | | W64LIT(0xab4ddbdb4bdb9690), W64LIT(0x5fc0a1a1bea1611f), W64LIT(0x07918d8d0e8d1c83), W64LIT(0x7ac83d3df43df5c9), |
307 | | W64LIT(0x335b97976697ccf1), W64LIT(0x0000000000000000), W64LIT(0x83f9cfcf1bcf36d4), W64LIT(0x566e2b2bac2b4587), |
308 | | W64LIT(0xece17676c57697b3), W64LIT(0x19e68282328264b0), W64LIT(0xb128d6d67fd6fea9), W64LIT(0x36c31b1b6c1bd877), |
309 | | W64LIT(0x7774b5b5eeb5c15b), W64LIT(0x43beafaf86af1129), W64LIT(0xd41d6a6ab56a77df), W64LIT(0xa0ea50505d50ba0d), |
310 | | W64LIT(0x8a5745450945124c), W64LIT(0xfb38f3f3ebf3cb18), W64LIT(0x60ad3030c0309df0), W64LIT(0xc3c4efef9bef2b74), |
311 | | W64LIT(0x7eda3f3ffc3fe5c3), W64LIT(0xaac755554955921c), W64LIT(0x59dba2a2b2a27910), W64LIT(0xc9e9eaea8fea0365), |
312 | | W64LIT(0xca6a656589650fec), W64LIT(0x6903babad2bab968), W64LIT(0x5e4a2f2fbc2f6593), W64LIT(0x9d8ec0c027c04ee7), |
313 | | W64LIT(0xa160dede5fdebe81), W64LIT(0x38fc1c1c701ce06c), W64LIT(0xe746fdfdd3fdbb2e), W64LIT(0x9a1f4d4d294d5264), |
314 | | W64LIT(0x397692927292e4e0), W64LIT(0xeafa7575c9758fbc), W64LIT(0x0c3606061806301e), W64LIT(0x09ae8a8a128a2498), |
315 | | W64LIT(0x794bb2b2f2b2f940), W64LIT(0xd185e6e6bfe66359), W64LIT(0x1c7e0e0e380e7036), W64LIT(0x3ee71f1f7c1ff863), |
316 | | W64LIT(0xc4556262956237f7), W64LIT(0xb53ad4d477d4eea3), W64LIT(0x4d81a8a89aa82932), W64LIT(0x315296966296c4f4), |
317 | | W64LIT(0xef62f9f9c3f99b3a), W64LIT(0x97a3c5c533c566f6), W64LIT(0x4a102525942535b1), W64LIT(0xb2ab59597959f220), |
318 | | W64LIT(0x15d084842a8454ae), W64LIT(0xe4c57272d572b7a7), W64LIT(0x72ec3939e439d5dd), W64LIT(0x98164c4c2d4c5a61), |
319 | | W64LIT(0xbc945e5e655eca3b), W64LIT(0xf09f7878fd78e785), W64LIT(0x70e53838e038ddd8), W64LIT(0x05988c8c0a8c1486), |
320 | | W64LIT(0xbf17d1d163d1c6b2), W64LIT(0x57e4a5a5aea5410b), W64LIT(0xd9a1e2e2afe2434d), W64LIT(0xc24e616199612ff8), |
321 | | W64LIT(0x7b42b3b3f6b3f145), W64LIT(0x42342121842115a5), W64LIT(0x25089c9c4a9c94d6), W64LIT(0x3cee1e1e781ef066), |
322 | | W64LIT(0x8661434311432252), W64LIT(0x93b1c7c73bc776fc), W64LIT(0xe54ffcfcd7fcb32b), W64LIT(0x0824040410042014), |
323 | | W64LIT(0xa2e351515951b208), W64LIT(0x2f2599995e99bcc7), W64LIT(0xda226d6da96d4fc4), W64LIT(0x1a650d0d340d6839), |
324 | | W64LIT(0xe979fafacffa8335), W64LIT(0xa369dfdf5bdfb684), W64LIT(0xfca97e7ee57ed79b), W64LIT(0x4819242490243db4), |
325 | | W64LIT(0x76fe3b3bec3bc5d7), W64LIT(0x4b9aabab96ab313d), W64LIT(0x81f0cece1fce3ed1), W64LIT(0x2299111144118855), |
326 | | W64LIT(0x03838f8f068f0c89), W64LIT(0x9c044e4e254e4a6b), W64LIT(0x7366b7b7e6b7d151), W64LIT(0xcbe0ebeb8beb0b60), |
327 | | W64LIT(0x78c13c3cf03cfdcc), W64LIT(0x1ffd81813e817cbf), W64LIT(0x354094946a94d4fe), W64LIT(0xf31cf7f7fbf7eb0c), |
328 | | W64LIT(0x6f18b9b9deb9a167), W64LIT(0x268b13134c13985f), W64LIT(0x58512c2cb02c7d9c), W64LIT(0xbb05d3d36bd3d6b8), |
329 | | W64LIT(0xd38ce7e7bbe76b5c), W64LIT(0xdc396e6ea56e57cb), W64LIT(0x95aac4c437c46ef3), W64LIT(0x061b03030c03180f), |
330 | | W64LIT(0xacdc565645568a13), W64LIT(0x885e44440d441a49), W64LIT(0xfea07f7fe17fdf9e), W64LIT(0x4f88a9a99ea92137), |
331 | | W64LIT(0x54672a2aa82a4d82), W64LIT(0x6b0abbbbd6bbb16d), W64LIT(0x9f87c1c123c146e2), W64LIT(0xa6f153535153a202), |
332 | | W64LIT(0xa572dcdc57dcae8b), W64LIT(0x16530b0b2c0b5827), W64LIT(0x27019d9d4e9d9cd3), W64LIT(0xd82b6c6cad6c47c1), |
333 | | W64LIT(0x62a43131c43195f5), W64LIT(0xe8f37474cd7487b9), W64LIT(0xf115f6f6fff6e309), W64LIT(0x8c4c464605460a43), |
334 | | W64LIT(0x45a5acac8aac0926), W64LIT(0x0fb589891e893c97), W64LIT(0x28b414145014a044), W64LIT(0xdfbae1e1a3e15b42), |
335 | | W64LIT(0x2ca616165816b04e), W64LIT(0x74f73a3ae83acdd2), W64LIT(0xd2066969b9696fd0), W64LIT(0x124109092409482d), |
336 | | W64LIT(0xe0d77070dd70a7ad), W64LIT(0x716fb6b6e2b6d954), W64LIT(0xbd1ed0d067d0ceb7), W64LIT(0xc7d6eded93ed3b7e), |
337 | | W64LIT(0x85e2cccc17cc2edb), W64LIT(0x8468424215422a57), W64LIT(0x2d2c98985a98b4c2), W64LIT(0x55eda4a4aaa4490e), |
338 | | W64LIT(0x50752828a0285d88), W64LIT(0xb8865c5c6d5cda31), W64LIT(0xed6bf8f8c7f8933f), W64LIT(0x11c28686228644a4), |
339 | | |
340 | | W64LIT(0x7830d818186018c0), W64LIT(0xaf462623238c2305), W64LIT(0xf991b8c6c63fc67e), W64LIT(0x6fcdfbe8e887e813), |
341 | | W64LIT(0xa113cb878726874c), W64LIT(0x626d11b8b8dab8a9), W64LIT(0x0502090101040108), W64LIT(0x6e9e0d4f4f214f42), |
342 | | W64LIT(0xee6c9b3636d836ad), W64LIT(0x0451ffa6a6a2a659), W64LIT(0xbdb90cd2d26fd2de), W64LIT(0x06f70ef5f5f3f5fb), |
343 | | W64LIT(0x80f2967979f979ef), W64LIT(0xcede306f6fa16f5f), W64LIT(0xef3f6d91917e91fc), W64LIT(0x07a4f852525552aa), |
344 | | W64LIT(0xfdc04760609d6027), W64LIT(0x766535bcbccabc89), W64LIT(0xcd2b379b9b569bac), W64LIT(0x8c018a8e8e028e04), |
345 | | W64LIT(0x155bd2a3a3b6a371), W64LIT(0x3c186c0c0c300c60), W64LIT(0x8af6847b7bf17bff), W64LIT(0xe16a803535d435b5), |
346 | | W64LIT(0x693af51d1d741de8), W64LIT(0x47ddb3e0e0a7e053), W64LIT(0xacb321d7d77bd7f6), W64LIT(0xed999cc2c22fc25e), |
347 | | W64LIT(0x965c432e2eb82e6d), W64LIT(0x7a96294b4b314b62), W64LIT(0x21e15dfefedffea3), W64LIT(0x16aed55757415782), |
348 | | W64LIT(0x412abd15155415a8), W64LIT(0xb6eee87777c1779f), W64LIT(0xeb6e923737dc37a5), W64LIT(0x56d79ee5e5b3e57b), |
349 | | W64LIT(0xd923139f9f469f8c), W64LIT(0x17fd23f0f0e7f0d3), W64LIT(0x7f94204a4a354a6a), W64LIT(0x95a944dada4fda9e), |
350 | | W64LIT(0x25b0a258587d58fa), W64LIT(0xca8fcfc9c903c906), W64LIT(0x8d527c2929a42955), W64LIT(0x22145a0a0a280a50), |
351 | | W64LIT(0x4f7f50b1b1feb1e1), W64LIT(0x1a5dc9a0a0baa069), W64LIT(0xdad6146b6bb16b7f), W64LIT(0xab17d985852e855c), |
352 | | W64LIT(0x73673cbdbdcebd81), W64LIT(0x34ba8f5d5d695dd2), W64LIT(0x5020901010401080), W64LIT(0x03f507f4f4f7f4f3), |
353 | | W64LIT(0xc08bddcbcb0bcb16), W64LIT(0xc67cd33e3ef83eed), W64LIT(0x110a2d0505140528), W64LIT(0xe6ce78676781671f), |
354 | | W64LIT(0x53d597e4e4b7e473), W64LIT(0xbb4e0227279c2725), W64LIT(0x5882734141194132), W64LIT(0x9d0ba78b8b168b2c), |
355 | | W64LIT(0x0153f6a7a7a6a751), W64LIT(0x94fab27d7de97dcf), W64LIT(0xfb374995956e95dc), W64LIT(0x9fad56d8d847d88e), |
356 | | W64LIT(0x30eb70fbfbcbfb8b), W64LIT(0x71c1cdeeee9fee23), W64LIT(0x91f8bb7c7ced7cc7), W64LIT(0xe3cc716666856617), |
357 | | W64LIT(0x8ea77bdddd53dda6), W64LIT(0x4b2eaf17175c17b8), W64LIT(0x468e454747014702), W64LIT(0xdc211a9e9e429e84), |
358 | | W64LIT(0xc589d4caca0fca1e), W64LIT(0x995a582d2db42d75), W64LIT(0x79632ebfbfc6bf91), W64LIT(0x1b0e3f07071c0738), |
359 | | W64LIT(0x2347acadad8ead01), W64LIT(0x2fb4b05a5a755aea), W64LIT(0xb51bef838336836c), W64LIT(0xff66b63333cc3385), |
360 | | W64LIT(0xf2c65c636391633f), W64LIT(0x0a04120202080210), W64LIT(0x384993aaaa92aa39), W64LIT(0xa8e2de7171d971af), |
361 | | W64LIT(0xcf8dc6c8c807c80e), W64LIT(0x7d32d119196419c8), W64LIT(0x70923b4949394972), W64LIT(0x9aaf5fd9d943d986), |
362 | | W64LIT(0x1df931f2f2eff2c3), W64LIT(0x48dba8e3e3abe34b), W64LIT(0x2ab6b95b5b715be2), W64LIT(0x920dbc88881a8834), |
363 | | W64LIT(0xc8293e9a9a529aa4), W64LIT(0xbe4c0b262698262d), W64LIT(0xfa64bf3232c8328d), W64LIT(0x4a7d59b0b0fab0e9), |
364 | | W64LIT(0x6acff2e9e983e91b), W64LIT(0x331e770f0f3c0f78), W64LIT(0xa6b733d5d573d5e6), W64LIT(0xba1df480803a8074), |
365 | | W64LIT(0x7c6127bebec2be99), W64LIT(0xde87ebcdcd13cd26), W64LIT(0xe468893434d034bd), W64LIT(0x75903248483d487a), |
366 | | W64LIT(0x24e354ffffdbffab), W64LIT(0x8ff48d7a7af57af7), W64LIT(0xea3d6490907a90f4), W64LIT(0x3ebe9d5f5f615fc2), |
367 | | W64LIT(0xa0403d202080201d), W64LIT(0xd5d00f6868bd6867), W64LIT(0x7234ca1a1a681ad0), W64LIT(0x2c41b7aeae82ae19), |
368 | | W64LIT(0x5e757db4b4eab4c9), W64LIT(0x19a8ce54544d549a), W64LIT(0xe53b7f93937693ec), W64LIT(0xaa442f222288220d), |
369 | | W64LIT(0xe9c86364648d6407), W64LIT(0x12ff2af1f1e3f1db), W64LIT(0xa2e6cc7373d173bf), W64LIT(0x5a24821212481290), |
370 | | W64LIT(0x5d807a40401d403a), W64LIT(0x2810480808200840), W64LIT(0xe89b95c3c32bc356), W64LIT(0x7bc5dfecec97ec33), |
371 | | W64LIT(0x90ab4ddbdb4bdb96), W64LIT(0x1f5fc0a1a1bea161), W64LIT(0x8307918d8d0e8d1c), W64LIT(0xc97ac83d3df43df5), |
372 | | W64LIT(0xf1335b97976697cc), W64LIT(0x0000000000000000), W64LIT(0xd483f9cfcf1bcf36), W64LIT(0x87566e2b2bac2b45), |
373 | | W64LIT(0xb3ece17676c57697), W64LIT(0xb019e68282328264), W64LIT(0xa9b128d6d67fd6fe), W64LIT(0x7736c31b1b6c1bd8), |
374 | | W64LIT(0x5b7774b5b5eeb5c1), W64LIT(0x2943beafaf86af11), W64LIT(0xdfd41d6a6ab56a77), W64LIT(0x0da0ea50505d50ba), |
375 | | W64LIT(0x4c8a574545094512), W64LIT(0x18fb38f3f3ebf3cb), W64LIT(0xf060ad3030c0309d), W64LIT(0x74c3c4efef9bef2b), |
376 | | W64LIT(0xc37eda3f3ffc3fe5), W64LIT(0x1caac75555495592), W64LIT(0x1059dba2a2b2a279), W64LIT(0x65c9e9eaea8fea03), |
377 | | W64LIT(0xecca6a656589650f), W64LIT(0x686903babad2bab9), W64LIT(0x935e4a2f2fbc2f65), W64LIT(0xe79d8ec0c027c04e), |
378 | | W64LIT(0x81a160dede5fdebe), W64LIT(0x6c38fc1c1c701ce0), W64LIT(0x2ee746fdfdd3fdbb), W64LIT(0x649a1f4d4d294d52), |
379 | | W64LIT(0xe0397692927292e4), W64LIT(0xbceafa7575c9758f), W64LIT(0x1e0c360606180630), W64LIT(0x9809ae8a8a128a24), |
380 | | W64LIT(0x40794bb2b2f2b2f9), W64LIT(0x59d185e6e6bfe663), W64LIT(0x361c7e0e0e380e70), W64LIT(0x633ee71f1f7c1ff8), |
381 | | W64LIT(0xf7c4556262956237), W64LIT(0xa3b53ad4d477d4ee), W64LIT(0x324d81a8a89aa829), W64LIT(0xf4315296966296c4), |
382 | | W64LIT(0x3aef62f9f9c3f99b), W64LIT(0xf697a3c5c533c566), W64LIT(0xb14a102525942535), W64LIT(0x20b2ab59597959f2), |
383 | | W64LIT(0xae15d084842a8454), W64LIT(0xa7e4c57272d572b7), W64LIT(0xdd72ec3939e439d5), W64LIT(0x6198164c4c2d4c5a), |
384 | | W64LIT(0x3bbc945e5e655eca), W64LIT(0x85f09f7878fd78e7), W64LIT(0xd870e53838e038dd), W64LIT(0x8605988c8c0a8c14), |
385 | | W64LIT(0xb2bf17d1d163d1c6), W64LIT(0x0b57e4a5a5aea541), W64LIT(0x4dd9a1e2e2afe243), W64LIT(0xf8c24e616199612f), |
386 | | W64LIT(0x457b42b3b3f6b3f1), W64LIT(0xa542342121842115), W64LIT(0xd625089c9c4a9c94), W64LIT(0x663cee1e1e781ef0), |
387 | | W64LIT(0x5286614343114322), W64LIT(0xfc93b1c7c73bc776), W64LIT(0x2be54ffcfcd7fcb3), W64LIT(0x1408240404100420), |
388 | | W64LIT(0x08a2e351515951b2), W64LIT(0xc72f2599995e99bc), W64LIT(0xc4da226d6da96d4f), W64LIT(0x391a650d0d340d68), |
389 | | W64LIT(0x35e979fafacffa83), W64LIT(0x84a369dfdf5bdfb6), W64LIT(0x9bfca97e7ee57ed7), W64LIT(0xb44819242490243d), |
390 | | W64LIT(0xd776fe3b3bec3bc5), W64LIT(0x3d4b9aabab96ab31), W64LIT(0xd181f0cece1fce3e), W64LIT(0x5522991111441188), |
391 | | W64LIT(0x8903838f8f068f0c), W64LIT(0x6b9c044e4e254e4a), W64LIT(0x517366b7b7e6b7d1), W64LIT(0x60cbe0ebeb8beb0b), |
392 | | W64LIT(0xcc78c13c3cf03cfd), W64LIT(0xbf1ffd81813e817c), W64LIT(0xfe354094946a94d4), W64LIT(0x0cf31cf7f7fbf7eb), |
393 | | W64LIT(0x676f18b9b9deb9a1), W64LIT(0x5f268b13134c1398), W64LIT(0x9c58512c2cb02c7d), W64LIT(0xb8bb05d3d36bd3d6), |
394 | | W64LIT(0x5cd38ce7e7bbe76b), W64LIT(0xcbdc396e6ea56e57), W64LIT(0xf395aac4c437c46e), W64LIT(0x0f061b03030c0318), |
395 | | W64LIT(0x13acdc565645568a), W64LIT(0x49885e44440d441a), W64LIT(0x9efea07f7fe17fdf), W64LIT(0x374f88a9a99ea921), |
396 | | W64LIT(0x8254672a2aa82a4d), W64LIT(0x6d6b0abbbbd6bbb1), W64LIT(0xe29f87c1c123c146), W64LIT(0x02a6f153535153a2), |
397 | | W64LIT(0x8ba572dcdc57dcae), W64LIT(0x2716530b0b2c0b58), W64LIT(0xd327019d9d4e9d9c), W64LIT(0xc1d82b6c6cad6c47), |
398 | | W64LIT(0xf562a43131c43195), W64LIT(0xb9e8f37474cd7487), W64LIT(0x09f115f6f6fff6e3), W64LIT(0x438c4c464605460a), |
399 | | W64LIT(0x2645a5acac8aac09), W64LIT(0x970fb589891e893c), W64LIT(0x4428b414145014a0), W64LIT(0x42dfbae1e1a3e15b), |
400 | | W64LIT(0x4e2ca616165816b0), W64LIT(0xd274f73a3ae83acd), W64LIT(0xd0d2066969b9696f), W64LIT(0x2d12410909240948), |
401 | | W64LIT(0xade0d77070dd70a7), W64LIT(0x54716fb6b6e2b6d9), W64LIT(0xb7bd1ed0d067d0ce), W64LIT(0x7ec7d6eded93ed3b), |
402 | | W64LIT(0xdb85e2cccc17cc2e), W64LIT(0x578468424215422a), W64LIT(0xc22d2c98985a98b4), W64LIT(0x0e55eda4a4aaa449), |
403 | | W64LIT(0x8850752828a0285d), W64LIT(0x31b8865c5c6d5cda), W64LIT(0x3fed6bf8f8c7f893), W64LIT(0xa411c28686228644), |
404 | | |
405 | | W64LIT(0x1823c6e887b8014f), |
406 | | W64LIT(0x36a6d2f5796f9152), |
407 | | W64LIT(0x60bc9b8ea30c7b35), |
408 | | W64LIT(0x1de0d7c22e4bfe57), |
409 | | W64LIT(0x157737e59ff04ada), |
410 | | W64LIT(0x58c9290ab1a06b85), |
411 | | W64LIT(0xbd5d10f4cb3e0567), |
412 | | W64LIT(0xe427418ba77d95d8), |
413 | | W64LIT(0xfbee7c66dd17479e), |
414 | | W64LIT(0xca2dbf07ad5a8333) |
415 | | }; |
416 | | |
417 | | // Whirlpool basic transformation. Transforms state based on block. |
418 | | void Whirlpool::Transform(word64 *digest, const word64 *block) |
419 | 507k | { |
420 | 507k | CRYPTOPP_ASSERT(digest != NULLPTR); |
421 | 507k | CRYPTOPP_ASSERT(block != NULLPTR); |
422 | | |
423 | | #if CRYPTOPP_SSE2_ASM_AVAILABLE |
424 | | if (HasSSE2()) |
425 | | { |
426 | | // MMX version has the same structure as C version below |
427 | | #ifdef __GNUC__ |
428 | | #if CRYPTOPP_BOOL_X64 |
429 | | word64 workspace[16]; |
430 | | #endif |
431 | | __asm__ __volatile__ |
432 | | ( |
433 | | INTEL_NOPREFIX |
434 | | AS_PUSH_IF86( bx) |
435 | | AS2( mov AS_REG_6, WORD_REG(ax)) |
436 | | #else |
437 | | AS2( lea AS_REG_6, [Whirlpool_C]) |
438 | | AS2( mov WORD_REG(cx), digest) |
439 | | AS2( mov WORD_REG(dx), block) |
440 | | #endif |
441 | | #if CRYPTOPP_BOOL_X86 |
442 | | AS2( mov eax, esp) |
443 | | AS2( and esp, -16) |
444 | | AS2( sub esp, 16*8) |
445 | | AS_PUSH_IF86( ax) |
446 | | #if CRYPTOPP_BOOL_X86 |
447 | | #define SSE2_workspace esp+WORD_SZ |
448 | | #endif |
449 | | #else |
450 | | #define SSE2_workspace %3 |
451 | | #endif |
452 | | AS2( xor esi, esi) |
453 | | ASL(0) |
454 | | AS2( movq mm0, [WORD_REG(cx)+8*WORD_REG(si)]) |
455 | | AS2( movq [SSE2_workspace+8*WORD_REG(si)], mm0) // k |
456 | | AS2( pxor mm0, [WORD_REG(dx)+8*WORD_REG(si)]) |
457 | | AS2( movq [SSE2_workspace+64+8*WORD_REG(si)], mm0) // s |
458 | | AS2( movq [WORD_REG(cx)+8*WORD_REG(si)], mm0) |
459 | | AS1( inc WORD_REG(si)) |
460 | | AS2( cmp WORD_REG(si), 8) |
461 | | ASJ( jne, 0, b) |
462 | | |
463 | | AS2( xor esi, esi) |
464 | | ASL(1) |
465 | | |
466 | | #define KSL0(a, b) AS2(movq mm##a, b) |
467 | | #define KSL1(a, b) AS2(pxor mm##a, b) |
468 | | |
469 | | #define KSL(op, i, a, b, c, d) \ |
470 | | AS2(mov eax, [SSE2_workspace+8*i])\ |
471 | | AS2(movzx edi, al)\ |
472 | | KSL##op(a, [AS_REG_6+3*2048+8*WORD_REG(di)])\ |
473 | | AS2(movzx edi, ah)\ |
474 | | KSL##op(b, [AS_REG_6+2*2048+8*WORD_REG(di)])\ |
475 | | AS2(shr eax, 16)\ |
476 | | AS2(movzx edi, al)\ |
477 | | AS2(shr eax, 8)\ |
478 | | KSL##op(c, [AS_REG_6+1*2048+8*WORD_REG(di)])\ |
479 | | KSL##op(d, [AS_REG_6+0*2048+8*WORD_REG(ax)]) |
480 | | |
481 | | #define KSH0(a, b) \ |
482 | | ASS(pshufw mm##a, mm##a, 1, 0, 3, 2)\ |
483 | | AS2(pxor mm##a, b) |
484 | | #define KSH1(a, b) \ |
485 | | AS2(pxor mm##a, b) |
486 | | #define KSH2(a, b) \ |
487 | | AS2(pxor mm##a, b)\ |
488 | | AS2(movq [SSE2_workspace+8*a], mm##a) |
489 | | |
490 | | #define KSH(op, i, a, b, c, d) \ |
491 | | AS2(mov eax, [SSE2_workspace+8*((i+4)-8*((i+4)/8))+4])\ |
492 | | AS2(movzx edi, al)\ |
493 | | KSH##op(a, [AS_REG_6+3*2048+8*WORD_REG(di)])\ |
494 | | AS2(movzx edi, ah)\ |
495 | | KSH##op(b, [AS_REG_6+2*2048+8*WORD_REG(di)])\ |
496 | | AS2(shr eax, 16)\ |
497 | | AS2(movzx edi, al)\ |
498 | | AS2(shr eax, 8)\ |
499 | | KSH##op(c, [AS_REG_6+1*2048+8*WORD_REG(di)])\ |
500 | | KSH##op(d, [AS_REG_6+0*2048+8*WORD_REG(ax)]) |
501 | | |
502 | | #define TSL(op, i, a, b, c, d) \ |
503 | | AS2(mov eax, [SSE2_workspace+64+8*i])\ |
504 | | AS2(movzx edi, al)\ |
505 | | KSL##op(a, [AS_REG_6+3*2048+8*WORD_REG(di)])\ |
506 | | AS2(movzx edi, ah)\ |
507 | | KSL##op(b, [AS_REG_6+2*2048+8*WORD_REG(di)])\ |
508 | | AS2(shr eax, 16)\ |
509 | | AS2(movzx edi, al)\ |
510 | | AS2(shr eax, 8)\ |
511 | | KSL##op(c, [AS_REG_6+1*2048+8*WORD_REG(di)])\ |
512 | | KSL##op(d, [AS_REG_6+0*2048+8*WORD_REG(ax)]) |
513 | | |
514 | | #define TSH0(a, b) \ |
515 | | ASS(pshufw mm##a, mm##a, 1, 0, 3, 2)\ |
516 | | AS2(pxor mm##a, [SSE2_workspace+8*a])\ |
517 | | AS2(pxor mm##a, b) |
518 | | #define TSH1(a, b) \ |
519 | | AS2(pxor mm##a, b) |
520 | | #define TSH2(a, b) \ |
521 | | AS2(pxor mm##a, b)\ |
522 | | AS2(movq [SSE2_workspace+64+8*a], mm##a) |
523 | | #define TSH3(a, b) \ |
524 | | AS2(pxor mm##a, b)\ |
525 | | AS2(pxor mm##a, [WORD_REG(cx)+8*a])\ |
526 | | AS2(movq [WORD_REG(cx)+8*a], mm##a) |
527 | | |
528 | | #define TSH(op, i, a, b, c, d) \ |
529 | | AS2(mov eax, [SSE2_workspace+64+8*((i+4)-8*((i+4)/8))+4])\ |
530 | | AS2(movzx edi, al)\ |
531 | | TSH##op(a, [AS_REG_6+3*2048+8*WORD_REG(di)])\ |
532 | | AS2(movzx edi, ah)\ |
533 | | TSH##op(b, [AS_REG_6+2*2048+8*WORD_REG(di)])\ |
534 | | AS2(shr eax, 16)\ |
535 | | AS2(movzx edi, al)\ |
536 | | AS2(shr eax, 8)\ |
537 | | TSH##op(c, [AS_REG_6+1*2048+8*WORD_REG(di)])\ |
538 | | TSH##op(d, [AS_REG_6+0*2048+8*WORD_REG(ax)]) |
539 | | |
540 | | KSL(0, 4, 3, 2, 1, 0) |
541 | | KSL(0, 0, 7, 6, 5, 4) |
542 | | KSL(1, 1, 0, 7, 6, 5) |
543 | | KSL(1, 2, 1, 0, 7, 6) |
544 | | KSL(1, 3, 2, 1, 0, 7) |
545 | | KSL(1, 5, 4, 3, 2, 1) |
546 | | KSL(1, 6, 5, 4, 3, 2) |
547 | | KSL(1, 7, 6, 5, 4, 3) |
548 | | KSH(0, 0, 7, 6, 5, 4) |
549 | | KSH(0, 4, 3, 2, 1, 0) |
550 | | KSH(1, 1, 0, 7, 6, 5) |
551 | | KSH(1, 2, 1, 0, 7, 6) |
552 | | KSH(1, 5, 4, 3, 2, 1) |
553 | | KSH(1, 6, 5, 4, 3, 2) |
554 | | KSH(2, 3, 2, 1, 0, 7) |
555 | | KSH(2, 7, 6, 5, 4, 3) |
556 | | |
557 | | AS2( pxor mm0, [AS_REG_6 + 8*1024 + WORD_REG(si)*8]) |
558 | | AS2( movq [SSE2_workspace], mm0) |
559 | | |
560 | | TSL(0, 4, 3, 2, 1, 0) |
561 | | TSL(0, 0, 7, 6, 5, 4) |
562 | | TSL(1, 1, 0, 7, 6, 5) |
563 | | TSL(1, 2, 1, 0, 7, 6) |
564 | | TSL(1, 3, 2, 1, 0, 7) |
565 | | TSL(1, 5, 4, 3, 2, 1) |
566 | | TSL(1, 6, 5, 4, 3, 2) |
567 | | TSL(1, 7, 6, 5, 4, 3) |
568 | | TSH(0, 0, 7, 6, 5, 4) |
569 | | TSH(0, 4, 3, 2, 1, 0) |
570 | | TSH(1, 1, 0, 7, 6, 5) |
571 | | TSH(1, 2, 1, 0, 7, 6) |
572 | | TSH(1, 5, 4, 3, 2, 1) |
573 | | TSH(1, 6, 5, 4, 3, 2) |
574 | | |
575 | | AS1( inc WORD_REG(si)) |
576 | | AS2( cmp WORD_REG(si), 10) |
577 | | ASJ( je, 2, f) |
578 | | |
579 | | TSH(2, 3, 2, 1, 0, 7) |
580 | | TSH(2, 7, 6, 5, 4, 3) |
581 | | |
582 | | ASJ( jmp, 1, b) |
583 | | ASL(2) |
584 | | |
585 | | TSH(3, 3, 2, 1, 0, 7) |
586 | | TSH(3, 7, 6, 5, 4, 3) |
587 | | |
588 | | #undef KSL |
589 | | #undef KSH |
590 | | #undef TSL |
591 | | #undef TSH |
592 | | |
593 | | AS_POP_IF86( sp) |
594 | | AS1( emms) |
595 | | |
596 | | #if defined(__GNUC__) |
597 | | AS_POP_IF86( bx) |
598 | | #endif |
599 | | #ifdef __GNUC__ |
600 | | ATT_PREFIX |
601 | | : |
602 | | : "a" (Whirlpool_C), "c" (digest), "d" (block) |
603 | | #if CRYPTOPP_BOOL_X64 |
604 | | , "r" (workspace) |
605 | | #endif |
606 | | : "%esi", "%edi", "memory", "cc" |
607 | | #if CRYPTOPP_BOOL_X64 |
608 | | , "%r9" |
609 | | #endif |
610 | | ); |
611 | | #endif |
612 | | } |
613 | | else |
614 | | #endif // #ifdef CRYPTOPP_X86_ASM_AVAILABLE |
615 | 507k | { |
616 | 507k | word64 s[8]; // the cipher state |
617 | 507k | word64 k[8]; // the round key |
618 | | |
619 | | // Compute and apply K^0 to the cipher state |
620 | | // Also apply part of the Miyaguchi-Preneel compression function |
621 | 4.56M | for (int i=0; i<8; i++) |
622 | 4.05M | digest[i] = s[i] = block[i] ^ (k[i] = digest[i]); |
623 | | |
624 | 507k | #define KSL(op, i, a, b, c, d) \ |
625 | 40.5M | t = (word32)k[i];\ |
626 | 40.5M | w##a = Whirlpool_C[3*256 + (byte)t] ^ (op ? w##a : 0);\ |
627 | 40.5M | t >>= 8;\ |
628 | 40.5M | w##b = Whirlpool_C[2*256 + (byte)t] ^ (op ? w##b : 0);\ |
629 | 40.5M | t >>= 8;\ |
630 | 40.5M | w##c = Whirlpool_C[1*256 + (byte)t] ^ (op ? w##c : 0);\ |
631 | 40.5M | t >>= 8;\ |
632 | 40.5M | w##d = Whirlpool_C[0*256 + t] ^ (op ? w##d : 0); |
633 | | |
634 | 507k | #define KSH(op, i, a, b, c, d) \ |
635 | 40.5M | t = (word32)(k[(i+4)%8]>>32);\ |
636 | 40.5M | w##a = Whirlpool_C[3*256 + (byte)t] ^ (op ? w##a : rotrConstant<32>(w##a));\ |
637 | 40.5M | if (op==2) k[a] = w##a;\ |
638 | 40.5M | t >>= 8;\ |
639 | 40.5M | w##b = Whirlpool_C[2*256 + (byte)t] ^ (op ? w##b : rotrConstant<32>(w##b));\ |
640 | 40.5M | if (op==2) k[b] = w##b;\ |
641 | 40.5M | t >>= 8;\ |
642 | 40.5M | w##c = Whirlpool_C[1*256 + (byte)t] ^ (op ? w##c : rotrConstant<32>(w##c));\ |
643 | 40.5M | if (op==2) k[c] = w##c;\ |
644 | 40.5M | t >>= 8;\ |
645 | 40.5M | w##d = Whirlpool_C[0*256 + t] ^ (op ? w##d : rotrConstant<32>(w##d));\ |
646 | 40.5M | if (op==2) k[d] = w##d;\ |
647 | 507k | |
648 | 507k | #define TSL(op, i, a, b, c, d) \ |
649 | 40.5M | t = (word32)s[i];\ |
650 | 40.5M | w##a = Whirlpool_C[3*256 + (byte)t] ^ (op ? w##a : 0);\ |
651 | 40.5M | t >>= 8;\ |
652 | 40.5M | w##b = Whirlpool_C[2*256 + (byte)t] ^ (op ? w##b : 0);\ |
653 | 40.5M | t >>= 8;\ |
654 | 40.5M | w##c = Whirlpool_C[1*256 + (byte)t] ^ (op ? w##c : 0);\ |
655 | 40.5M | t >>= 8;\ |
656 | 40.5M | w##d = Whirlpool_C[0*256 + t] ^ (op ? w##d : 0); |
657 | | |
658 | 507k | #define TSH_OP(op, a, b) \ |
659 | 162M | w##a = Whirlpool_C[b*256 + (byte)t] ^ (op ? w##a : rotrConstant<32>(w##a) ^ k[a]);\ |
660 | 162M | if (op==2) s[a] = w##a;\ |
661 | 162M | if (op==3) digest[a] ^= w##a;\ |
662 | 507k | |
663 | 507k | #define TSH(op, i, a, b, c, d) \ |
664 | 40.5M | t = (word32)(s[(i+4)%8]>>32);\ |
665 | 40.5M | TSH_OP(op, a, 3);\ |
666 | 40.5M | t >>= 8;\ |
667 | 40.5M | TSH_OP(op, b, 2);\ |
668 | 40.5M | t >>= 8;\ |
669 | 40.5M | TSH_OP(op, c, 1);\ |
670 | 40.5M | t >>= 8;\ |
671 | 40.5M | TSH_OP(op, d, 0);\ |
672 | 507k | |
673 | | // Iterate over all rounds: |
674 | 507k | int r=0; |
675 | 5.07M | while (true) |
676 | 5.07M | { |
677 | | // Added initialization due to Coverity findings. |
678 | 5.07M | word64 w0=0, w1=0, w2=0, w3=0, w4=0, w5=0, w6=0, w7=0; |
679 | 5.07M | word32 t=0; |
680 | | |
681 | 5.07M | KSL(0, 4, 3, 2, 1, 0) |
682 | 5.07M | KSL(0, 0, 7, 6, 5, 4) |
683 | 5.07M | KSL(1, 1, 0, 7, 6, 5) |
684 | 5.07M | KSL(1, 2, 1, 0, 7, 6) |
685 | 5.07M | KSL(1, 3, 2, 1, 0, 7) |
686 | 5.07M | KSL(1, 5, 4, 3, 2, 1) |
687 | 5.07M | KSL(1, 6, 5, 4, 3, 2) |
688 | 5.07M | KSL(1, 7, 6, 5, 4, 3) |
689 | 5.07M | KSH(0, 0, 7, 6, 5, 4) |
690 | 5.07M | KSH(0, 4, 3, 2, 1, 0) |
691 | 5.07M | KSH(1, 1, 0, 7, 6, 5) |
692 | 5.07M | KSH(1, 2, 1, 0, 7, 6) |
693 | 5.07M | KSH(1, 5, 4, 3, 2, 1) |
694 | 5.07M | KSH(1, 6, 5, 4, 3, 2) |
695 | 5.07M | KSH(2, 3, 2, 1, 0, 7) |
696 | 5.07M | KSH(2, 7, 6, 5, 4, 3) |
697 | | |
698 | 5.07M | k[0] ^= Whirlpool_C[1024+r]; |
699 | | |
700 | 5.07M | TSL(0, 4, 3, 2, 1, 0) |
701 | 5.07M | TSL(0, 0, 7, 6, 5, 4) |
702 | 5.07M | TSL(1, 1, 0, 7, 6, 5) |
703 | 5.07M | TSL(1, 2, 1, 0, 7, 6) |
704 | 5.07M | TSL(1, 3, 2, 1, 0, 7) |
705 | 5.07M | TSL(1, 5, 4, 3, 2, 1) |
706 | 5.07M | TSL(1, 6, 5, 4, 3, 2) |
707 | 5.07M | TSL(1, 7, 6, 5, 4, 3) |
708 | 5.07M | TSH(0, 0, 7, 6, 5, 4) |
709 | 5.07M | TSH(0, 4, 3, 2, 1, 0) |
710 | 5.07M | TSH(1, 1, 0, 7, 6, 5) |
711 | 5.07M | TSH(1, 2, 1, 0, 7, 6) |
712 | 5.07M | TSH(1, 5, 4, 3, 2, 1) |
713 | 5.07M | TSH(1, 6, 5, 4, 3, 2) |
714 | | |
715 | 5.07M | if (++r < R) |
716 | 4.56M | { |
717 | 4.56M | TSH(2, 3, 2, 1, 0, 7) |
718 | 4.56M | TSH(2, 7, 6, 5, 4, 3) |
719 | 4.56M | } |
720 | 507k | else |
721 | 507k | { |
722 | 507k | TSH(3, 3, 2, 1, 0, 7) |
723 | 507k | TSH(3, 7, 6, 5, 4, 3) |
724 | 507k | break; |
725 | 507k | } |
726 | 5.07M | } |
727 | 507k | } |
728 | 507k | } |
729 | | |
730 | | NAMESPACE_END |