<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>Crypto++: whrlpool.cpp Source File</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.3.7 --> <div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical List</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a></div> <h1>whrlpool.cpp</h1><pre class="fragment"><div>00001 <span class="comment">// Whrlpool.cpp - modified by Kevin Springle from</span> 00002 <span class="comment">// Paulo Barreto and Vincent Rijmen's public domain code, whirlpool.c.</span> 00003 <span class="comment">// Any modifications are placed in the public domain</span> 00004 00005 <span class="comment">// This is the original introductory comment:</span> 00006 <span class="comment"></span> 00007 <span class="comment">/**</span> 00008 <span class="comment"> * The Whirlpool hashing function.</span> 00009 <span class="comment"> *</span> 00010 <span class="comment"> * <P></span> 00011 <span class="comment"> * <b>References</b></span> 00012 <span class="comment"> *</span> 00013 <span class="comment"> * <P></span> 00014 <span class="comment"> * The Whirlpool algorithm was developed by</span> 00015 <span class="comment"> * <a href="mailto:pbarreto@scopus.com.br">Paulo S. L. M. Barreto</a> and</span> 00016 <span class="comment"> * <a href="mailto:vincent.rijmen@cryptomathic.com">Vincent Rijmen</a>.</span> 00017 <span class="comment"> *</span> 00018 <span class="comment"> * See</span> 00019 <span class="comment"> * P.S.L.M. Barreto, V. Rijmen,</span> 00020 <span class="comment"> * ``The Whirlpool hashing function,''</span> 00021 <span class="comment"> * NESSIE submission, 2000 (tweaked version, 2001),</span> 00022 <span class="comment"> * <https://www.cosic.esat.kuleuven.ac.be/nessie/workshop/submissions/whirlpool.zip></span> 00023 <span class="comment"> *</span> 00024 <span class="comment"> * @author Paulo S.L.M. Barreto</span> 00025 <span class="comment"> * @author Vincent Rijmen.</span> 00026 <span class="comment"> *</span> 00027 <span class="comment"> * @version 2.1 (2001.09.01)</span> 00028 <span class="comment"> *</span> 00029 <span class="comment"> * =============================================================================</span> 00030 <span class="comment"> *</span> 00031 <span class="comment"> * Differences from version 1.0:</span> 00032 <span class="comment"> *</span> 00033 <span class="comment"> * - Original S-box replaced by the tweaked, hardware-efficient version.</span> 00034 <span class="comment"> *</span> 00035 <span class="comment"> * =============================================================================</span> 00036 <span class="comment"> *</span> 00037 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS</span> 00038 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span> 00039 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span> 00040 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE</span> 00041 <span class="comment"> * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR</span> 00042 <span class="comment"> * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF</span> 00043 <span class="comment"> * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR</span> 00044 <span class="comment"> * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span> 00045 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE</span> 00046 <span class="comment"> * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,</span> 00047 <span class="comment"> * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span> 00048 <span class="comment"> *</span> 00049 <span class="comment"> */</span> 00050 00051 <span class="preprocessor">#include "pch.h"</span> 00052 00053 <span class="preprocessor">#ifdef WORD64_AVAILABLE</span> 00054 <span class="preprocessor"></span> 00055 <span class="preprocessor">#include "whrlpool.h"</span> 00056 <span class="preprocessor">#include "misc.h"</span> 00057 00058 NAMESPACE_BEGIN(CryptoPP) 00059 00060 void Whirlpool_TestInstantiations() 00061 { 00062 <a class="code" href="class_whirlpool.html">Whirlpool</a> x; 00063 } 00064 00065 <span class="keywordtype">void</span> Whirlpool::InitState(HashWordType *state) 00066 { 00067 memset(state, 0, 8*<span class="keyword">sizeof</span>(state[0])); 00068 } 00069 <a name="l00070"></a><a class="code" href="class_whirlpool.html#_whirlpoola0">00070</a> <span class="keywordtype">void</span> <a class="code" href="class_whirlpool.html#_whirlpoola0">Whirlpool::TruncatedFinal</a>(byte *hash, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size) 00071 { 00072 ThrowIfInvalidTruncatedSize(size); 00073 00074 PadLastBlock(32); 00075 CorrectEndianess(m_data, m_data, 32); 00076 00077 m_data[m_data.<a class="code" href="class_sec_block.html#_sec_block_with_hinta15">size</a>()-4] = 0; 00078 m_data[m_data.<a class="code" href="class_sec_block.html#_sec_block_with_hinta15">size</a>()-3] = 0; 00079 m_data[m_data.<a class="code" href="class_sec_block.html#_sec_block_with_hinta15">size</a>()-2] = GetBitCountHi(); 00080 m_data[m_data.<a class="code" href="class_sec_block.html#_sec_block_with_hinta15">size</a>()-1] = GetBitCountLo(); 00081 00082 Transform(m_digest, m_data); 00083 CorrectEndianess(m_digest, m_digest, <a class="code" href="class_iterated_hash_with_static_transform.html#_iterated_hash_with_static_transforma0">DigestSize</a>()); 00084 memcpy(hash, m_digest, size); 00085 00086 <a class="code" href="class_hash_transformation.html#_two_bases_3_01_message_authentication_code_00_01_variable_key_length_3_0132_00_010_00_01_u_i_n_t___m_a_x_01_4_01_4a3">Restart</a>(); <span class="comment">// reinit for next use</span> 00087 } 00088 00089 <span class="comment">/*</span> 00090 <span class="comment"> * The number of rounds of the internal dedicated block cipher.</span> 00091 <span class="comment"> */</span> 00092 <span class="preprocessor">#define R 10</span> 00093 <span class="preprocessor"></span> 00094 <span class="comment">/*</span> 00095 <span class="comment"> * Though Whirlpool is endianness-neutral, the encryption tables are listed</span> 00096 <span class="comment"> * in BIG-ENDIAN format, which is adopted throughout this implementation</span> 00097 <span class="comment"> * (but little-endian notation would be equally suitable if consistently</span> 00098 <span class="comment"> * employed).</span> 00099 <span class="comment"> */</span> 00100 00101 <span class="keyword">static</span> <span class="keyword">const</span> word64 C0[256] = { 00102 W64LIT(0x1818281878c0d878), W64LIT(0x23236523af0526af), 00103 W64LIT(0xc6c657c6f97eb8f9), W64LIT(0xe8e825e86f13fb6f), 00104 W64LIT(0x87879487a14ccba1), W64LIT(0xb8b8d5b862a91162), 00105 W64LIT(0x0101030105080905), W64LIT(0x4f4fd14f6e420d6e), 00106 W64LIT(0x36365a36eead9bee), W64LIT(0xa6a6f7a60459ff04), 00107 W64LIT(0xd2d26bd2bdde0cbd), W64LIT(0xf5f502f506fb0e06), 00108 W64LIT(0x79798b7980ef9680), W64LIT(0x6f6fb16fce5f30ce), 00109 W64LIT(0x9191ae91effc6def), W64LIT(0x5252f65207aaf807), 00110 W64LIT(0x6060a060fd2747fd), W64LIT(0xbcbcd9bc76893576), 00111 W64LIT(0x9b9bb09bcdac37cd), W64LIT(0x8e8e8f8e8c048a8c), 00112 W64LIT(0xa3a3f8a31571d215), W64LIT(0x0c0c140c3c606c3c), 00113 W64LIT(0x7b7b8d7b8aff848a), W64LIT(0x35355f35e1b580e1), 00114 W64LIT(0x1d1d271d69e8f569), W64LIT(0xe0e03de04753b347), 00115 W64LIT(0xd7d764d7acf621ac), W64LIT(0xc2c25bc2ed5e9ced), 00116 W64LIT(0x2e2e722e966d4396), W64LIT(0x4b4bdd4b7a62297a), 00117 W64LIT(0xfefe1ffe21a35d21), W64LIT(0x5757f9571682d516), 00118 W64LIT(0x15153f1541a8bd41), W64LIT(0x77779977b69fe8b6), 00119 W64LIT(0x37375937eba592eb), W64LIT(0xe5e532e5567b9e56), 00120 W64LIT(0x9f9fbc9fd98c13d9), W64LIT(0xf0f00df017d32317), 00121 W64LIT(0x4a4ade4a7f6a207f), W64LIT(0xdada73da959e4495), 00122 W64LIT(0x5858e85825faa225), W64LIT(0xc9c946c9ca06cfca), 00123 W64LIT(0x29297b298d557c8d), W64LIT(0x0a0a1e0a22505a22), 00124 W64LIT(0xb1b1ceb14fe1504f), W64LIT(0xa0a0fda01a69c91a), 00125 W64LIT(0x6b6bbd6bda7f14da), W64LIT(0x85859285ab5cd9ab), 00126 W64LIT(0xbdbddabd73813c73), W64LIT(0x5d5de75d34d28f34), 00127 W64LIT(0x1010301050809050), W64LIT(0xf4f401f403f30703), 00128 W64LIT(0xcbcb40cbc016ddc0), W64LIT(0x3e3e423ec6edd3c6), 00129 W64LIT(0x05050f0511282d11), W64LIT(0x6767a967e61f78e6), 00130 W64LIT(0xe4e431e453739753), W64LIT(0x27276927bb2502bb), 00131 W64LIT(0x4141c34158327358), W64LIT(0x8b8b808b9d2ca79d), 00132 W64LIT(0xa7a7f4a70151f601), W64LIT(0x7d7d877d94cfb294), 00133 W64LIT(0x9595a295fbdc49fb), W64LIT(0xd8d875d89f8e569f), 00134 W64LIT(0xfbfb10fb308b7030), W64LIT(0xeeee2fee7123cd71), 00135 W64LIT(0x7c7c847c91c7bb91), W64LIT(0x6666aa66e31771e3), 00136 W64LIT(0xdddd7add8ea67b8e), W64LIT(0x171739174bb8af4b), 00137 W64LIT(0x4747c94746024546), W64LIT(0x9e9ebf9edc841adc), 00138 W64LIT(0xcaca43cac51ed4c5), W64LIT(0x2d2d772d99755899), 00139 W64LIT(0xbfbfdcbf79912e79), W64LIT(0x070709071b383f1b), 00140 W64LIT(0xadadeaad2301ac23), W64LIT(0x5a5aee5a2feab02f), 00141 W64LIT(0x83839883b56cefb5), W64LIT(0x33335533ff85b6ff), 00142 W64LIT(0x6363a563f23f5cf2), W64LIT(0x020206020a10120a), 00143 W64LIT(0xaaaae3aa38399338), W64LIT(0x71719371a8afdea8), 00144 W64LIT(0xc8c845c8cf0ec6cf), W64LIT(0x19192b197dc8d17d), 00145 W64LIT(0x4949db4970723b70), W64LIT(0xd9d976d99a865f9a), 00146 W64LIT(0xf2f20bf21dc3311d), W64LIT(0xe3e338e3484ba848), 00147 W64LIT(0x5b5bed5b2ae2b92a), W64LIT(0x888885889234bc92), 00148 W64LIT(0x9a9ab39ac8a43ec8), W64LIT(0x26266a26be2d0bbe), 00149 W64LIT(0x32325632fa8dbffa), W64LIT(0xb0b0cdb04ae9594a), 00150 W64LIT(0xe9e926e96a1bf26a), W64LIT(0x0f0f110f33787733), 00151 W64LIT(0xd5d562d5a6e633a6), W64LIT(0x80809d80ba74f4ba), 00152 W64LIT(0xbebedfbe7c99277c), W64LIT(0xcdcd4acdde26ebde), 00153 W64LIT(0x34345c34e4bd89e4), W64LIT(0x4848d848757a3275), 00154 W64LIT(0xffff1cff24ab5424), W64LIT(0x7a7a8e7a8ff78d8f), 00155 W64LIT(0x9090ad90eaf464ea), W64LIT(0x5f5fe15f3ec29d3e), 00156 W64LIT(0x20206020a01d3da0), W64LIT(0x6868b868d5670fd5), 00157 W64LIT(0x1a1a2e1a72d0ca72), W64LIT(0xaeaeefae2c19b72c), 00158 W64LIT(0xb4b4c1b45ec97d5e), W64LIT(0x5454fc54199ace19), 00159 W64LIT(0x9393a893e5ec7fe5), W64LIT(0x22226622aa0d2faa), 00160 W64LIT(0x6464ac64e90763e9), W64LIT(0xf1f10ef112db2a12), 00161 W64LIT(0x73739573a2bfcca2), W64LIT(0x121236125a90825a), 00162 W64LIT(0x4040c0405d3a7a5d), W64LIT(0x0808180828404828), 00163 W64LIT(0xc3c358c3e85695e8), W64LIT(0xecec29ec7b33df7b), 00164 W64LIT(0xdbdb70db90964d90), W64LIT(0xa1a1fea11f61c01f), 00165 W64LIT(0x8d8d8a8d831c9183), W64LIT(0x3d3d473dc9f5c8c9), 00166 W64LIT(0x9797a497f1cc5bf1), W64LIT(0x0000000000000000), 00167 W64LIT(0xcfcf4ccfd436f9d4), W64LIT(0x2b2b7d2b87456e87), 00168 W64LIT(0x76769a76b397e1b3), W64LIT(0x82829b82b064e6b0), 00169 W64LIT(0xd6d667d6a9fe28a9), W64LIT(0x1b1b2d1b77d8c377), 00170 W64LIT(0xb5b5c2b55bc1745b), W64LIT(0xafafecaf2911be29), 00171 W64LIT(0x6a6abe6adf771ddf), W64LIT(0x5050f0500dbaea0d), 00172 W64LIT(0x4545cf454c12574c), W64LIT(0xf3f308f318cb3818), 00173 W64LIT(0x30305030f09dadf0), W64LIT(0xefef2cef742bc474), 00174 W64LIT(0x3f3f413fc3e5dac3), W64LIT(0x5555ff551c92c71c), 00175 W64LIT(0xa2a2fba21079db10), W64LIT(0xeaea23ea6503e965), 00176 W64LIT(0x6565af65ec0f6aec), W64LIT(0xbabad3ba68b90368), 00177 W64LIT(0x2f2f712f93654a93), W64LIT(0xc0c05dc0e74e8ee7), 00178 W64LIT(0xdede7fde81be6081), W64LIT(0x1c1c241c6ce0fc6c), 00179 W64LIT(0xfdfd1afd2ebb462e), W64LIT(0x4d4dd74d64521f64), 00180 W64LIT(0x9292ab92e0e476e0), W64LIT(0x75759f75bc8ffabc), 00181 W64LIT(0x06060a061e30361e), W64LIT(0x8a8a838a9824ae98), 00182 W64LIT(0xb2b2cbb240f94b40), W64LIT(0xe6e637e659638559), 00183 W64LIT(0x0e0e120e36707e36), W64LIT(0x1f1f211f63f8e763), 00184 W64LIT(0x6262a662f73755f7), W64LIT(0xd4d461d4a3ee3aa3), 00185 W64LIT(0xa8a8e5a832298132), W64LIT(0x9696a796f4c452f4), 00186 W64LIT(0xf9f916f93a9b623a), W64LIT(0xc5c552c5f666a3f6), 00187 W64LIT(0x25256f25b13510b1), W64LIT(0x5959eb5920f2ab20), 00188 W64LIT(0x84849184ae54d0ae), W64LIT(0x72729672a7b7c5a7), 00189 W64LIT(0x39394b39ddd5ecdd), W64LIT(0x4c4cd44c615a1661), 00190 W64LIT(0x5e5ee25e3bca943b), W64LIT(0x7878887885e79f85), 00191 W64LIT(0x38384838d8dde5d8), W64LIT(0x8c8c898c86149886), 00192 W64LIT(0xd1d16ed1b2c617b2), W64LIT(0xa5a5f2a50b41e40b), 00193 W64LIT(0xe2e23be24d43a14d), W64LIT(0x6161a361f82f4ef8), 00194 W64LIT(0xb3b3c8b345f14245), W64LIT(0x21216321a51534a5), 00195 W64LIT(0x9c9cb99cd69408d6), W64LIT(0x1e1e221e66f0ee66), 00196 W64LIT(0x4343c54352226152), W64LIT(0xc7c754c7fc76b1fc), 00197 W64LIT(0xfcfc19fc2bb34f2b), W64LIT(0x04040c0414202414), 00198 W64LIT(0x5151f35108b2e308), W64LIT(0x9999b699c7bc25c7), 00199 W64LIT(0x6d6db76dc44f22c4), W64LIT(0x0d0d170d39686539), 00200 W64LIT(0xfafa13fa35837935), W64LIT(0xdfdf7cdf84b66984), 00201 W64LIT(0x7e7e827e9bd7a99b), W64LIT(0x24246c24b43d19b4), 00202 W64LIT(0x3b3b4d3bd7c5fed7), W64LIT(0xababe0ab3d319a3d), 00203 W64LIT(0xcece4fced13ef0d1), W64LIT(0x1111331155889955), 00204 W64LIT(0x8f8f8c8f890c8389), W64LIT(0x4e4ed24e6b4a046b), 00205 W64LIT(0xb7b7c4b751d16651), W64LIT(0xebeb20eb600be060), 00206 W64LIT(0x3c3c443cccfdc1cc), W64LIT(0x81819e81bf7cfdbf), 00207 W64LIT(0x9494a194fed440fe), W64LIT(0xf7f704f70ceb1c0c), 00208 W64LIT(0xb9b9d6b967a11867), W64LIT(0x131335135f988b5f), 00209 W64LIT(0x2c2c742c9c7d519c), W64LIT(0xd3d368d3b8d605b8), 00210 W64LIT(0xe7e734e75c6b8c5c), W64LIT(0x6e6eb26ecb5739cb), 00211 W64LIT(0xc4c451c4f36eaaf3), W64LIT(0x030305030f181b0f), 00212 W64LIT(0x5656fa56138adc13), W64LIT(0x4444cc44491a5e49), 00213 W64LIT(0x7f7f817f9edfa09e), W64LIT(0xa9a9e6a937218837), 00214 W64LIT(0x2a2a7e2a824d6782), W64LIT(0xbbbbd0bb6db10a6d), 00215 W64LIT(0xc1c15ec1e24687e2), W64LIT(0x5353f55302a2f102), 00216 W64LIT(0xdcdc79dc8bae728b), W64LIT(0x0b0b1d0b27585327), 00217 W64LIT(0x9d9dba9dd39c01d3), W64LIT(0x6c6cb46cc1472bc1), 00218 W64LIT(0x31315331f595a4f5), W64LIT(0x74749c74b987f3b9), 00219 W64LIT(0xf6f607f609e31509), W64LIT(0x4646ca46430a4c43), 00220 W64LIT(0xacace9ac2609a526), W64LIT(0x89898689973cb597), 00221 W64LIT(0x14143c1444a0b444), W64LIT(0xe1e13ee1425bba42), 00222 W64LIT(0x16163a164eb0a64e), W64LIT(0x3a3a4e3ad2cdf7d2), 00223 W64LIT(0x6969bb69d06f06d0), W64LIT(0x09091b092d48412d), 00224 W64LIT(0x70709070ada7d7ad), W64LIT(0xb6b6c7b654d96f54), 00225 W64LIT(0xd0d06dd0b7ce1eb7), W64LIT(0xeded2aed7e3bd67e), 00226 W64LIT(0xcccc49ccdb2ee2db), W64LIT(0x4242c642572a6857), 00227 W64LIT(0x9898b598c2b42cc2), W64LIT(0xa4a4f1a40e49ed0e), 00228 W64LIT(0x28287828885d7588), W64LIT(0x5c5ce45c31da8631), 00229 W64LIT(0xf8f815f83f936b3f), W64LIT(0x86869786a444c2a4), 00230 }; 00231 00232 <span class="keyword">static</span> <span class="keyword">const</span> word64 C1[256] = { 00233 W64LIT(0x781818281878c0d8), W64LIT(0xaf23236523af0526), 00234 W64LIT(0xf9c6c657c6f97eb8), W64LIT(0x6fe8e825e86f13fb), 00235 W64LIT(0xa187879487a14ccb), W64LIT(0x62b8b8d5b862a911), 00236 W64LIT(0x0501010301050809), W64LIT(0x6e4f4fd14f6e420d), 00237 W64LIT(0xee36365a36eead9b), W64LIT(0x04a6a6f7a60459ff), 00238 W64LIT(0xbdd2d26bd2bdde0c), W64LIT(0x06f5f502f506fb0e), 00239 W64LIT(0x8079798b7980ef96), W64LIT(0xce6f6fb16fce5f30), 00240 W64LIT(0xef9191ae91effc6d), W64LIT(0x075252f65207aaf8), 00241 W64LIT(0xfd6060a060fd2747), W64LIT(0x76bcbcd9bc768935), 00242 W64LIT(0xcd9b9bb09bcdac37), W64LIT(0x8c8e8e8f8e8c048a), 00243 W64LIT(0x15a3a3f8a31571d2), W64LIT(0x3c0c0c140c3c606c), 00244 W64LIT(0x8a7b7b8d7b8aff84), W64LIT(0xe135355f35e1b580), 00245 W64LIT(0x691d1d271d69e8f5), W64LIT(0x47e0e03de04753b3), 00246 W64LIT(0xacd7d764d7acf621), W64LIT(0xedc2c25bc2ed5e9c), 00247 W64LIT(0x962e2e722e966d43), W64LIT(0x7a4b4bdd4b7a6229), 00248 W64LIT(0x21fefe1ffe21a35d), W64LIT(0x165757f9571682d5), 00249 W64LIT(0x4115153f1541a8bd), W64LIT(0xb677779977b69fe8), 00250 W64LIT(0xeb37375937eba592), W64LIT(0x56e5e532e5567b9e), 00251 W64LIT(0xd99f9fbc9fd98c13), W64LIT(0x17f0f00df017d323), 00252 W64LIT(0x7f4a4ade4a7f6a20), W64LIT(0x95dada73da959e44), 00253 W64LIT(0x255858e85825faa2), W64LIT(0xcac9c946c9ca06cf), 00254 W64LIT(0x8d29297b298d557c), W64LIT(0x220a0a1e0a22505a), 00255 W64LIT(0x4fb1b1ceb14fe150), W64LIT(0x1aa0a0fda01a69c9), 00256 W64LIT(0xda6b6bbd6bda7f14), W64LIT(0xab85859285ab5cd9), 00257 W64LIT(0x73bdbddabd73813c), W64LIT(0x345d5de75d34d28f), 00258 W64LIT(0x5010103010508090), W64LIT(0x03f4f401f403f307), 00259 W64LIT(0xc0cbcb40cbc016dd), W64LIT(0xc63e3e423ec6edd3), 00260 W64LIT(0x1105050f0511282d), W64LIT(0xe66767a967e61f78), 00261 W64LIT(0x53e4e431e4537397), W64LIT(0xbb27276927bb2502), 00262 W64LIT(0x584141c341583273), W64LIT(0x9d8b8b808b9d2ca7), 00263 W64LIT(0x01a7a7f4a70151f6), W64LIT(0x947d7d877d94cfb2), 00264 W64LIT(0xfb9595a295fbdc49), W64LIT(0x9fd8d875d89f8e56), 00265 W64LIT(0x30fbfb10fb308b70), W64LIT(0x71eeee2fee7123cd), 00266 W64LIT(0x917c7c847c91c7bb), W64LIT(0xe36666aa66e31771), 00267 W64LIT(0x8edddd7add8ea67b), W64LIT(0x4b171739174bb8af), 00268 W64LIT(0x464747c947460245), W64LIT(0xdc9e9ebf9edc841a), 00269 W64LIT(0xc5caca43cac51ed4), W64LIT(0x992d2d772d997558), 00270 W64LIT(0x79bfbfdcbf79912e), W64LIT(0x1b070709071b383f), 00271 W64LIT(0x23adadeaad2301ac), W64LIT(0x2f5a5aee5a2feab0), 00272 W64LIT(0xb583839883b56cef), W64LIT(0xff33335533ff85b6), 00273 W64LIT(0xf26363a563f23f5c), W64LIT(0x0a020206020a1012), 00274 W64LIT(0x38aaaae3aa383993), W64LIT(0xa871719371a8afde), 00275 W64LIT(0xcfc8c845c8cf0ec6), W64LIT(0x7d19192b197dc8d1), 00276 W64LIT(0x704949db4970723b), W64LIT(0x9ad9d976d99a865f), 00277 W64LIT(0x1df2f20bf21dc331), W64LIT(0x48e3e338e3484ba8), 00278 W64LIT(0x2a5b5bed5b2ae2b9), W64LIT(0x92888885889234bc), 00279 W64LIT(0xc89a9ab39ac8a43e), W64LIT(0xbe26266a26be2d0b), 00280 W64LIT(0xfa32325632fa8dbf), W64LIT(0x4ab0b0cdb04ae959), 00281 W64LIT(0x6ae9e926e96a1bf2), W64LIT(0x330f0f110f337877), 00282 W64LIT(0xa6d5d562d5a6e633), W64LIT(0xba80809d80ba74f4), 00283 W64LIT(0x7cbebedfbe7c9927), W64LIT(0xdecdcd4acdde26eb), 00284 W64LIT(0xe434345c34e4bd89), W64LIT(0x754848d848757a32), 00285 W64LIT(0x24ffff1cff24ab54), W64LIT(0x8f7a7a8e7a8ff78d), 00286 W64LIT(0xea9090ad90eaf464), W64LIT(0x3e5f5fe15f3ec29d), 00287 W64LIT(0xa020206020a01d3d), W64LIT(0xd56868b868d5670f), 00288 W64LIT(0x721a1a2e1a72d0ca), W64LIT(0x2caeaeefae2c19b7), 00289 W64LIT(0x5eb4b4c1b45ec97d), W64LIT(0x195454fc54199ace), 00290 W64LIT(0xe59393a893e5ec7f), W64LIT(0xaa22226622aa0d2f), 00291 W64LIT(0xe96464ac64e90763), W64LIT(0x12f1f10ef112db2a), 00292 W64LIT(0xa273739573a2bfcc), W64LIT(0x5a121236125a9082), 00293 W64LIT(0x5d4040c0405d3a7a), W64LIT(0x2808081808284048), 00294 W64LIT(0xe8c3c358c3e85695), W64LIT(0x7becec29ec7b33df), 00295 W64LIT(0x90dbdb70db90964d), W64LIT(0x1fa1a1fea11f61c0), 00296 W64LIT(0x838d8d8a8d831c91), W64LIT(0xc93d3d473dc9f5c8), 00297 W64LIT(0xf19797a497f1cc5b), W64LIT(0x0000000000000000), 00298 W64LIT(0xd4cfcf4ccfd436f9), W64LIT(0x872b2b7d2b87456e), 00299 W64LIT(0xb376769a76b397e1), W64LIT(0xb082829b82b064e6), 00300 W64LIT(0xa9d6d667d6a9fe28), W64LIT(0x771b1b2d1b77d8c3), 00301 W64LIT(0x5bb5b5c2b55bc174), W64LIT(0x29afafecaf2911be), 00302 W64LIT(0xdf6a6abe6adf771d), W64LIT(0x0d5050f0500dbaea), 00303 W64LIT(0x4c4545cf454c1257), W64LIT(0x18f3f308f318cb38), 00304 W64LIT(0xf030305030f09dad), W64LIT(0x74efef2cef742bc4), 00305 W64LIT(0xc33f3f413fc3e5da), W64LIT(0x1c5555ff551c92c7), 00306 W64LIT(0x10a2a2fba21079db), W64LIT(0x65eaea23ea6503e9), 00307 W64LIT(0xec6565af65ec0f6a), W64LIT(0x68babad3ba68b903), 00308 W64LIT(0x932f2f712f93654a), W64LIT(0xe7c0c05dc0e74e8e), 00309 W64LIT(0x81dede7fde81be60), W64LIT(0x6c1c1c241c6ce0fc), 00310 W64LIT(0x2efdfd1afd2ebb46), W64LIT(0x644d4dd74d64521f), 00311 W64LIT(0xe09292ab92e0e476), W64LIT(0xbc75759f75bc8ffa), 00312 W64LIT(0x1e06060a061e3036), W64LIT(0x988a8a838a9824ae), 00313 W64LIT(0x40b2b2cbb240f94b), W64LIT(0x59e6e637e6596385), 00314 W64LIT(0x360e0e120e36707e), W64LIT(0x631f1f211f63f8e7), 00315 W64LIT(0xf76262a662f73755), W64LIT(0xa3d4d461d4a3ee3a), 00316 W64LIT(0x32a8a8e5a8322981), W64LIT(0xf49696a796f4c452), 00317 W64LIT(0x3af9f916f93a9b62), W64LIT(0xf6c5c552c5f666a3), 00318 W64LIT(0xb125256f25b13510), W64LIT(0x205959eb5920f2ab), 00319 W64LIT(0xae84849184ae54d0), W64LIT(0xa772729672a7b7c5), 00320 W64LIT(0xdd39394b39ddd5ec), W64LIT(0x614c4cd44c615a16), 00321 W64LIT(0x3b5e5ee25e3bca94), W64LIT(0x857878887885e79f), 00322 W64LIT(0xd838384838d8dde5), W64LIT(0x868c8c898c861498), 00323 W64LIT(0xb2d1d16ed1b2c617), W64LIT(0x0ba5a5f2a50b41e4), 00324 W64LIT(0x4de2e23be24d43a1), W64LIT(0xf86161a361f82f4e), 00325 W64LIT(0x45b3b3c8b345f142), W64LIT(0xa521216321a51534), 00326 W64LIT(0xd69c9cb99cd69408), W64LIT(0x661e1e221e66f0ee), 00327 W64LIT(0x524343c543522261), W64LIT(0xfcc7c754c7fc76b1), 00328 W64LIT(0x2bfcfc19fc2bb34f), W64LIT(0x1404040c04142024), 00329 W64LIT(0x085151f35108b2e3), W64LIT(0xc79999b699c7bc25), 00330 W64LIT(0xc46d6db76dc44f22), W64LIT(0x390d0d170d396865), 00331 W64LIT(0x35fafa13fa358379), W64LIT(0x84dfdf7cdf84b669), 00332 W64LIT(0x9b7e7e827e9bd7a9), W64LIT(0xb424246c24b43d19), 00333 W64LIT(0xd73b3b4d3bd7c5fe), W64LIT(0x3dababe0ab3d319a), 00334 W64LIT(0xd1cece4fced13ef0), W64LIT(0x5511113311558899), 00335 W64LIT(0x898f8f8c8f890c83), W64LIT(0x6b4e4ed24e6b4a04), 00336 W64LIT(0x51b7b7c4b751d166), W64LIT(0x60ebeb20eb600be0), 00337 W64LIT(0xcc3c3c443cccfdc1), W64LIT(0xbf81819e81bf7cfd), 00338 W64LIT(0xfe9494a194fed440), W64LIT(0x0cf7f704f70ceb1c), 00339 W64LIT(0x67b9b9d6b967a118), W64LIT(0x5f131335135f988b), 00340 W64LIT(0x9c2c2c742c9c7d51), W64LIT(0xb8d3d368d3b8d605), 00341 W64LIT(0x5ce7e734e75c6b8c), W64LIT(0xcb6e6eb26ecb5739), 00342 W64LIT(0xf3c4c451c4f36eaa), W64LIT(0x0f030305030f181b), 00343 W64LIT(0x135656fa56138adc), W64LIT(0x494444cc44491a5e), 00344 W64LIT(0x9e7f7f817f9edfa0), W64LIT(0x37a9a9e6a9372188), 00345 W64LIT(0x822a2a7e2a824d67), W64LIT(0x6dbbbbd0bb6db10a), 00346 W64LIT(0xe2c1c15ec1e24687), W64LIT(0x025353f55302a2f1), 00347 W64LIT(0x8bdcdc79dc8bae72), W64LIT(0x270b0b1d0b275853), 00348 W64LIT(0xd39d9dba9dd39c01), W64LIT(0xc16c6cb46cc1472b), 00349 W64LIT(0xf531315331f595a4), W64LIT(0xb974749c74b987f3), 00350 W64LIT(0x09f6f607f609e315), W64LIT(0x434646ca46430a4c), 00351 W64LIT(0x26acace9ac2609a5), W64LIT(0x9789898689973cb5), 00352 W64LIT(0x4414143c1444a0b4), W64LIT(0x42e1e13ee1425bba), 00353 W64LIT(0x4e16163a164eb0a6), W64LIT(0xd23a3a4e3ad2cdf7), 00354 W64LIT(0xd06969bb69d06f06), W64LIT(0x2d09091b092d4841), 00355 W64LIT(0xad70709070ada7d7), W64LIT(0x54b6b6c7b654d96f), 00356 W64LIT(0xb7d0d06dd0b7ce1e), W64LIT(0x7eeded2aed7e3bd6), 00357 W64LIT(0xdbcccc49ccdb2ee2), W64LIT(0x574242c642572a68), 00358 W64LIT(0xc29898b598c2b42c), W64LIT(0x0ea4a4f1a40e49ed), 00359 W64LIT(0x8828287828885d75), W64LIT(0x315c5ce45c31da86), 00360 W64LIT(0x3ff8f815f83f936b), W64LIT(0xa486869786a444c2), 00361 }; 00362 00363 <span class="keyword">static</span> <span class="keyword">const</span> word64 C2[256] = { 00364 W64LIT(0xd8781818281878c0), W64LIT(0x26af23236523af05), 00365 W64LIT(0xb8f9c6c657c6f97e), W64LIT(0xfb6fe8e825e86f13), 00366 W64LIT(0xcba187879487a14c), W64LIT(0x1162b8b8d5b862a9), 00367 W64LIT(0x0905010103010508), W64LIT(0x0d6e4f4fd14f6e42), 00368 W64LIT(0x9bee36365a36eead), W64LIT(0xff04a6a6f7a60459), 00369 W64LIT(0x0cbdd2d26bd2bdde), W64LIT(0x0e06f5f502f506fb), 00370 W64LIT(0x968079798b7980ef), W64LIT(0x30ce6f6fb16fce5f), 00371 W64LIT(0x6def9191ae91effc), W64LIT(0xf8075252f65207aa), 00372 W64LIT(0x47fd6060a060fd27), W64LIT(0x3576bcbcd9bc7689), 00373 W64LIT(0x37cd9b9bb09bcdac), W64LIT(0x8a8c8e8e8f8e8c04), 00374 W64LIT(0xd215a3a3f8a31571), W64LIT(0x6c3c0c0c140c3c60), 00375 W64LIT(0x848a7b7b8d7b8aff), W64LIT(0x80e135355f35e1b5), 00376 W64LIT(0xf5691d1d271d69e8), W64LIT(0xb347e0e03de04753), 00377 W64LIT(0x21acd7d764d7acf6), W64LIT(0x9cedc2c25bc2ed5e), 00378 W64LIT(0x43962e2e722e966d), W64LIT(0x297a4b4bdd4b7a62), 00379 W64LIT(0x5d21fefe1ffe21a3), W64LIT(0xd5165757f9571682), 00380 W64LIT(0xbd4115153f1541a8), W64LIT(0xe8b677779977b69f), 00381 W64LIT(0x92eb37375937eba5), W64LIT(0x9e56e5e532e5567b), 00382 W64LIT(0x13d99f9fbc9fd98c), W64LIT(0x2317f0f00df017d3), 00383 W64LIT(0x207f4a4ade4a7f6a), W64LIT(0x4495dada73da959e), 00384 W64LIT(0xa2255858e85825fa), W64LIT(0xcfcac9c946c9ca06), 00385 W64LIT(0x7c8d29297b298d55), W64LIT(0x5a220a0a1e0a2250), 00386 W64LIT(0x504fb1b1ceb14fe1), W64LIT(0xc91aa0a0fda01a69), 00387 W64LIT(0x14da6b6bbd6bda7f), W64LIT(0xd9ab85859285ab5c), 00388 W64LIT(0x3c73bdbddabd7381), W64LIT(0x8f345d5de75d34d2), 00389 W64LIT(0x9050101030105080), W64LIT(0x0703f4f401f403f3), 00390 W64LIT(0xddc0cbcb40cbc016), W64LIT(0xd3c63e3e423ec6ed), 00391 W64LIT(0x2d1105050f051128), W64LIT(0x78e66767a967e61f), 00392 W64LIT(0x9753e4e431e45373), W64LIT(0x02bb27276927bb25), 00393 W64LIT(0x73584141c3415832), W64LIT(0xa79d8b8b808b9d2c), 00394 W64LIT(0xf601a7a7f4a70151), W64LIT(0xb2947d7d877d94cf), 00395 W64LIT(0x49fb9595a295fbdc), W64LIT(0x569fd8d875d89f8e), 00396 W64LIT(0x7030fbfb10fb308b), W64LIT(0xcd71eeee2fee7123), 00397 W64LIT(0xbb917c7c847c91c7), W64LIT(0x71e36666aa66e317), 00398 W64LIT(0x7b8edddd7add8ea6), W64LIT(0xaf4b171739174bb8), 00399 W64LIT(0x45464747c9474602), W64LIT(0x1adc9e9ebf9edc84), 00400 W64LIT(0xd4c5caca43cac51e), W64LIT(0x58992d2d772d9975), 00401 W64LIT(0x2e79bfbfdcbf7991), W64LIT(0x3f1b070709071b38), 00402 W64LIT(0xac23adadeaad2301), W64LIT(0xb02f5a5aee5a2fea), 00403 W64LIT(0xefb583839883b56c), W64LIT(0xb6ff33335533ff85), 00404 W64LIT(0x5cf26363a563f23f), W64LIT(0x120a020206020a10), 00405 W64LIT(0x9338aaaae3aa3839), W64LIT(0xdea871719371a8af), 00406 W64LIT(0xc6cfc8c845c8cf0e), W64LIT(0xd17d19192b197dc8), 00407 W64LIT(0x3b704949db497072), W64LIT(0x5f9ad9d976d99a86), 00408 W64LIT(0x311df2f20bf21dc3), W64LIT(0xa848e3e338e3484b), 00409 W64LIT(0xb92a5b5bed5b2ae2), W64LIT(0xbc92888885889234), 00410 W64LIT(0x3ec89a9ab39ac8a4), W64LIT(0x0bbe26266a26be2d), 00411 W64LIT(0xbffa32325632fa8d), W64LIT(0x594ab0b0cdb04ae9), 00412 W64LIT(0xf26ae9e926e96a1b), W64LIT(0x77330f0f110f3378), 00413 W64LIT(0x33a6d5d562d5a6e6), W64LIT(0xf4ba80809d80ba74), 00414 W64LIT(0x277cbebedfbe7c99), W64LIT(0xebdecdcd4acdde26), 00415 W64LIT(0x89e434345c34e4bd), W64LIT(0x32754848d848757a), 00416 W64LIT(0x5424ffff1cff24ab), W64LIT(0x8d8f7a7a8e7a8ff7), 00417 W64LIT(0x64ea9090ad90eaf4), W64LIT(0x9d3e5f5fe15f3ec2), 00418 W64LIT(0x3da020206020a01d), W64LIT(0x0fd56868b868d567), 00419 W64LIT(0xca721a1a2e1a72d0), W64LIT(0xb72caeaeefae2c19), 00420 W64LIT(0x7d5eb4b4c1b45ec9), W64LIT(0xce195454fc54199a), 00421 W64LIT(0x7fe59393a893e5ec), W64LIT(0x2faa22226622aa0d), 00422 W64LIT(0x63e96464ac64e907), W64LIT(0x2a12f1f10ef112db), 00423 W64LIT(0xcca273739573a2bf), W64LIT(0x825a121236125a90), 00424 W64LIT(0x7a5d4040c0405d3a), W64LIT(0x4828080818082840), 00425 W64LIT(0x95e8c3c358c3e856), W64LIT(0xdf7becec29ec7b33), 00426 W64LIT(0x4d90dbdb70db9096), W64LIT(0xc01fa1a1fea11f61), 00427 W64LIT(0x91838d8d8a8d831c), W64LIT(0xc8c93d3d473dc9f5), 00428 W64LIT(0x5bf19797a497f1cc), W64LIT(0x0000000000000000), 00429 W64LIT(0xf9d4cfcf4ccfd436), W64LIT(0x6e872b2b7d2b8745), 00430 W64LIT(0xe1b376769a76b397), W64LIT(0xe6b082829b82b064), 00431 W64LIT(0x28a9d6d667d6a9fe), W64LIT(0xc3771b1b2d1b77d8), 00432 W64LIT(0x745bb5b5c2b55bc1), W64LIT(0xbe29afafecaf2911), 00433 W64LIT(0x1ddf6a6abe6adf77), W64LIT(0xea0d5050f0500dba), 00434 W64LIT(0x574c4545cf454c12), W64LIT(0x3818f3f308f318cb), 00435 W64LIT(0xadf030305030f09d), W64LIT(0xc474efef2cef742b), 00436 W64LIT(0xdac33f3f413fc3e5), W64LIT(0xc71c5555ff551c92), 00437 W64LIT(0xdb10a2a2fba21079), W64LIT(0xe965eaea23ea6503), 00438 W64LIT(0x6aec6565af65ec0f), W64LIT(0x0368babad3ba68b9), 00439 W64LIT(0x4a932f2f712f9365), W64LIT(0x8ee7c0c05dc0e74e), 00440 W64LIT(0x6081dede7fde81be), W64LIT(0xfc6c1c1c241c6ce0), 00441 W64LIT(0x462efdfd1afd2ebb), W64LIT(0x1f644d4dd74d6452), 00442 W64LIT(0x76e09292ab92e0e4), W64LIT(0xfabc75759f75bc8f), 00443 W64LIT(0x361e06060a061e30), W64LIT(0xae988a8a838a9824), 00444 W64LIT(0x4b40b2b2cbb240f9), W64LIT(0x8559e6e637e65963), 00445 W64LIT(0x7e360e0e120e3670), W64LIT(0xe7631f1f211f63f8), 00446 W64LIT(0x55f76262a662f737), W64LIT(0x3aa3d4d461d4a3ee), 00447 W64LIT(0x8132a8a8e5a83229), W64LIT(0x52f49696a796f4c4), 00448 W64LIT(0x623af9f916f93a9b), W64LIT(0xa3f6c5c552c5f666), 00449 W64LIT(0x10b125256f25b135), W64LIT(0xab205959eb5920f2), 00450 W64LIT(0xd0ae84849184ae54), W64LIT(0xc5a772729672a7b7), 00451 W64LIT(0xecdd39394b39ddd5), W64LIT(0x16614c4cd44c615a), 00452 W64LIT(0x943b5e5ee25e3bca), W64LIT(0x9f857878887885e7), 00453 W64LIT(0xe5d838384838d8dd), W64LIT(0x98868c8c898c8614), 00454 W64LIT(0x17b2d1d16ed1b2c6), W64LIT(0xe40ba5a5f2a50b41), 00455 W64LIT(0xa14de2e23be24d43), W64LIT(0x4ef86161a361f82f), 00456 W64LIT(0x4245b3b3c8b345f1), W64LIT(0x34a521216321a515), 00457 W64LIT(0x08d69c9cb99cd694), W64LIT(0xee661e1e221e66f0), 00458 W64LIT(0x61524343c5435222), W64LIT(0xb1fcc7c754c7fc76), 00459 W64LIT(0x4f2bfcfc19fc2bb3), W64LIT(0x241404040c041420), 00460 W64LIT(0xe3085151f35108b2), W64LIT(0x25c79999b699c7bc), 00461 W64LIT(0x22c46d6db76dc44f), W64LIT(0x65390d0d170d3968), 00462 W64LIT(0x7935fafa13fa3583), W64LIT(0x6984dfdf7cdf84b6), 00463 W64LIT(0xa99b7e7e827e9bd7), W64LIT(0x19b424246c24b43d), 00464 W64LIT(0xfed73b3b4d3bd7c5), W64LIT(0x9a3dababe0ab3d31), 00465 W64LIT(0xf0d1cece4fced13e), W64LIT(0x9955111133115588), 00466 W64LIT(0x83898f8f8c8f890c), W64LIT(0x046b4e4ed24e6b4a), 00467 W64LIT(0x6651b7b7c4b751d1), W64LIT(0xe060ebeb20eb600b), 00468 W64LIT(0xc1cc3c3c443cccfd), W64LIT(0xfdbf81819e81bf7c), 00469 W64LIT(0x40fe9494a194fed4), W64LIT(0x1c0cf7f704f70ceb), 00470 W64LIT(0x1867b9b9d6b967a1), W64LIT(0x8b5f131335135f98), 00471 W64LIT(0x519c2c2c742c9c7d), W64LIT(0x05b8d3d368d3b8d6), 00472 W64LIT(0x8c5ce7e734e75c6b), W64LIT(0x39cb6e6eb26ecb57), 00473 W64LIT(0xaaf3c4c451c4f36e), W64LIT(0x1b0f030305030f18), 00474 W64LIT(0xdc135656fa56138a), W64LIT(0x5e494444cc44491a), 00475 W64LIT(0xa09e7f7f817f9edf), W64LIT(0x8837a9a9e6a93721), 00476 W64LIT(0x67822a2a7e2a824d), W64LIT(0x0a6dbbbbd0bb6db1), 00477 W64LIT(0x87e2c1c15ec1e246), W64LIT(0xf1025353f55302a2), 00478 W64LIT(0x728bdcdc79dc8bae), W64LIT(0x53270b0b1d0b2758), 00479 W64LIT(0x01d39d9dba9dd39c), W64LIT(0x2bc16c6cb46cc147), 00480 W64LIT(0xa4f531315331f595), W64LIT(0xf3b974749c74b987), 00481 W64LIT(0x1509f6f607f609e3), W64LIT(0x4c434646ca46430a), 00482 W64LIT(0xa526acace9ac2609), W64LIT(0xb59789898689973c), 00483 W64LIT(0xb44414143c1444a0), W64LIT(0xba42e1e13ee1425b), 00484 W64LIT(0xa64e16163a164eb0), W64LIT(0xf7d23a3a4e3ad2cd), 00485 W64LIT(0x06d06969bb69d06f), W64LIT(0x412d09091b092d48), 00486 W64LIT(0xd7ad70709070ada7), W64LIT(0x6f54b6b6c7b654d9), 00487 W64LIT(0x1eb7d0d06dd0b7ce), W64LIT(0xd67eeded2aed7e3b), 00488 W64LIT(0xe2dbcccc49ccdb2e), W64LIT(0x68574242c642572a), 00489 W64LIT(0x2cc29898b598c2b4), W64LIT(0xed0ea4a4f1a40e49), 00490 W64LIT(0x758828287828885d), W64LIT(0x86315c5ce45c31da), 00491 W64LIT(0x6b3ff8f815f83f93), W64LIT(0xc2a486869786a444), 00492 }; 00493 00494 <span class="keyword">static</span> <span class="keyword">const</span> word64 C3[256] = { 00495 W64LIT(0xc0d8781818281878), W64LIT(0x0526af23236523af), 00496 W64LIT(0x7eb8f9c6c657c6f9), W64LIT(0x13fb6fe8e825e86f), 00497 W64LIT(0x4ccba187879487a1), W64LIT(0xa91162b8b8d5b862), 00498 W64LIT(0x0809050101030105), W64LIT(0x420d6e4f4fd14f6e), 00499 W64LIT(0xad9bee36365a36ee), W64LIT(0x59ff04a6a6f7a604), 00500 W64LIT(0xde0cbdd2d26bd2bd), W64LIT(0xfb0e06f5f502f506), 00501 W64LIT(0xef968079798b7980), W64LIT(0x5f30ce6f6fb16fce), 00502 W64LIT(0xfc6def9191ae91ef), W64LIT(0xaaf8075252f65207), 00503 W64LIT(0x2747fd6060a060fd), W64LIT(0x893576bcbcd9bc76), 00504 W64LIT(0xac37cd9b9bb09bcd), W64LIT(0x048a8c8e8e8f8e8c), 00505 W64LIT(0x71d215a3a3f8a315), W64LIT(0x606c3c0c0c140c3c), 00506 W64LIT(0xff848a7b7b8d7b8a), W64LIT(0xb580e135355f35e1), 00507 W64LIT(0xe8f5691d1d271d69), W64LIT(0x53b347e0e03de047), 00508 W64LIT(0xf621acd7d764d7ac), W64LIT(0x5e9cedc2c25bc2ed), 00509 W64LIT(0x6d43962e2e722e96), W64LIT(0x62297a4b4bdd4b7a), 00510 W64LIT(0xa35d21fefe1ffe21), W64LIT(0x82d5165757f95716), 00511 W64LIT(0xa8bd4115153f1541), W64LIT(0x9fe8b677779977b6), 00512 W64LIT(0xa592eb37375937eb), W64LIT(0x7b9e56e5e532e556), 00513 W64LIT(0x8c13d99f9fbc9fd9), W64LIT(0xd32317f0f00df017), 00514 W64LIT(0x6a207f4a4ade4a7f), W64LIT(0x9e4495dada73da95), 00515 W64LIT(0xfaa2255858e85825), W64LIT(0x06cfcac9c946c9ca), 00516 W64LIT(0x557c8d29297b298d), W64LIT(0x505a220a0a1e0a22), 00517 W64LIT(0xe1504fb1b1ceb14f), W64LIT(0x69c91aa0a0fda01a), 00518 W64LIT(0x7f14da6b6bbd6bda), W64LIT(0x5cd9ab85859285ab), 00519 W64LIT(0x813c73bdbddabd73), W64LIT(0xd28f345d5de75d34), 00520 W64LIT(0x8090501010301050), W64LIT(0xf30703f4f401f403), 00521 W64LIT(0x16ddc0cbcb40cbc0), W64LIT(0xedd3c63e3e423ec6), 00522 W64LIT(0x282d1105050f0511), W64LIT(0x1f78e66767a967e6), 00523 W64LIT(0x739753e4e431e453), W64LIT(0x2502bb27276927bb), 00524 W64LIT(0x3273584141c34158), W64LIT(0x2ca79d8b8b808b9d), 00525 W64LIT(0x51f601a7a7f4a701), W64LIT(0xcfb2947d7d877d94), 00526 W64LIT(0xdc49fb9595a295fb), W64LIT(0x8e569fd8d875d89f), 00527 W64LIT(0x8b7030fbfb10fb30), W64LIT(0x23cd71eeee2fee71), 00528 W64LIT(0xc7bb917c7c847c91), W64LIT(0x1771e36666aa66e3), 00529 W64LIT(0xa67b8edddd7add8e), W64LIT(0xb8af4b171739174b), 00530 W64LIT(0x0245464747c94746), W64LIT(0x841adc9e9ebf9edc), 00531 W64LIT(0x1ed4c5caca43cac5), W64LIT(0x7558992d2d772d99), 00532 W64LIT(0x912e79bfbfdcbf79), W64LIT(0x383f1b070709071b), 00533 W64LIT(0x01ac23adadeaad23), W64LIT(0xeab02f5a5aee5a2f), 00534 W64LIT(0x6cefb583839883b5), W64LIT(0x85b6ff33335533ff), 00535 W64LIT(0x3f5cf26363a563f2), W64LIT(0x10120a020206020a), 00536 W64LIT(0x399338aaaae3aa38), W64LIT(0xafdea871719371a8), 00537 W64LIT(0x0ec6cfc8c845c8cf), W64LIT(0xc8d17d19192b197d), 00538 W64LIT(0x723b704949db4970), W64LIT(0x865f9ad9d976d99a), 00539 W64LIT(0xc3311df2f20bf21d), W64LIT(0x4ba848e3e338e348), 00540 W64LIT(0xe2b92a5b5bed5b2a), W64LIT(0x34bc928888858892), 00541 W64LIT(0xa43ec89a9ab39ac8), W64LIT(0x2d0bbe26266a26be), 00542 W64LIT(0x8dbffa32325632fa), W64LIT(0xe9594ab0b0cdb04a), 00543 W64LIT(0x1bf26ae9e926e96a), W64LIT(0x7877330f0f110f33), 00544 W64LIT(0xe633a6d5d562d5a6), W64LIT(0x74f4ba80809d80ba), 00545 W64LIT(0x99277cbebedfbe7c), W64LIT(0x26ebdecdcd4acdde), 00546 W64LIT(0xbd89e434345c34e4), W64LIT(0x7a32754848d84875), 00547 W64LIT(0xab5424ffff1cff24), W64LIT(0xf78d8f7a7a8e7a8f), 00548 W64LIT(0xf464ea9090ad90ea), W64LIT(0xc29d3e5f5fe15f3e), 00549 W64LIT(0x1d3da020206020a0), W64LIT(0x670fd56868b868d5), 00550 W64LIT(0xd0ca721a1a2e1a72), W64LIT(0x19b72caeaeefae2c), 00551 W64LIT(0xc97d5eb4b4c1b45e), W64LIT(0x9ace195454fc5419), 00552 W64LIT(0xec7fe59393a893e5), W64LIT(0x0d2faa22226622aa), 00553 W64LIT(0x0763e96464ac64e9), W64LIT(0xdb2a12f1f10ef112), 00554 W64LIT(0xbfcca273739573a2), W64LIT(0x90825a121236125a), 00555 W64LIT(0x3a7a5d4040c0405d), W64LIT(0x4048280808180828), 00556 W64LIT(0x5695e8c3c358c3e8), W64LIT(0x33df7becec29ec7b), 00557 W64LIT(0x964d90dbdb70db90), W64LIT(0x61c01fa1a1fea11f), 00558 W64LIT(0x1c91838d8d8a8d83), W64LIT(0xf5c8c93d3d473dc9), 00559 W64LIT(0xcc5bf19797a497f1), W64LIT(0x0000000000000000), 00560 W64LIT(0x36f9d4cfcf4ccfd4), W64LIT(0x456e872b2b7d2b87), 00561 W64LIT(0x97e1b376769a76b3), W64LIT(0x64e6b082829b82b0), 00562 W64LIT(0xfe28a9d6d667d6a9), W64LIT(0xd8c3771b1b2d1b77), 00563 W64LIT(0xc1745bb5b5c2b55b), W64LIT(0x11be29afafecaf29), 00564 W64LIT(0x771ddf6a6abe6adf), W64LIT(0xbaea0d5050f0500d), 00565 W64LIT(0x12574c4545cf454c), W64LIT(0xcb3818f3f308f318), 00566 W64LIT(0x9dadf030305030f0), W64LIT(0x2bc474efef2cef74), 00567 W64LIT(0xe5dac33f3f413fc3), W64LIT(0x92c71c5555ff551c), 00568 W64LIT(0x79db10a2a2fba210), W64LIT(0x03e965eaea23ea65), 00569 W64LIT(0x0f6aec6565af65ec), W64LIT(0xb90368babad3ba68), 00570 W64LIT(0x654a932f2f712f93), W64LIT(0x4e8ee7c0c05dc0e7), 00571 W64LIT(0xbe6081dede7fde81), W64LIT(0xe0fc6c1c1c241c6c), 00572 W64LIT(0xbb462efdfd1afd2e), W64LIT(0x521f644d4dd74d64), 00573 W64LIT(0xe476e09292ab92e0), W64LIT(0x8ffabc75759f75bc), 00574 W64LIT(0x30361e06060a061e), W64LIT(0x24ae988a8a838a98), 00575 W64LIT(0xf94b40b2b2cbb240), W64LIT(0x638559e6e637e659), 00576 W64LIT(0x707e360e0e120e36), W64LIT(0xf8e7631f1f211f63), 00577 W64LIT(0x3755f76262a662f7), W64LIT(0xee3aa3d4d461d4a3), 00578 W64LIT(0x298132a8a8e5a832), W64LIT(0xc452f49696a796f4), 00579 W64LIT(0x9b623af9f916f93a), W64LIT(0x66a3f6c5c552c5f6), 00580 W64LIT(0x3510b125256f25b1), W64LIT(0xf2ab205959eb5920), 00581 W64LIT(0x54d0ae84849184ae), W64LIT(0xb7c5a772729672a7), 00582 W64LIT(0xd5ecdd39394b39dd), W64LIT(0x5a16614c4cd44c61), 00583 W64LIT(0xca943b5e5ee25e3b), W64LIT(0xe79f857878887885), 00584 W64LIT(0xdde5d838384838d8), W64LIT(0x1498868c8c898c86), 00585 W64LIT(0xc617b2d1d16ed1b2), W64LIT(0x41e40ba5a5f2a50b), 00586 W64LIT(0x43a14de2e23be24d), W64LIT(0x2f4ef86161a361f8), 00587 W64LIT(0xf14245b3b3c8b345), W64LIT(0x1534a521216321a5), 00588 W64LIT(0x9408d69c9cb99cd6), W64LIT(0xf0ee661e1e221e66), 00589 W64LIT(0x2261524343c54352), W64LIT(0x76b1fcc7c754c7fc), 00590 W64LIT(0xb34f2bfcfc19fc2b), W64LIT(0x20241404040c0414), 00591 W64LIT(0xb2e3085151f35108), W64LIT(0xbc25c79999b699c7), 00592 W64LIT(0x4f22c46d6db76dc4), W64LIT(0x6865390d0d170d39), 00593 W64LIT(0x837935fafa13fa35), W64LIT(0xb66984dfdf7cdf84), 00594 W64LIT(0xd7a99b7e7e827e9b), W64LIT(0x3d19b424246c24b4), 00595 W64LIT(0xc5fed73b3b4d3bd7), W64LIT(0x319a3dababe0ab3d), 00596 W64LIT(0x3ef0d1cece4fced1), W64LIT(0x8899551111331155), 00597 W64LIT(0x0c83898f8f8c8f89), W64LIT(0x4a046b4e4ed24e6b), 00598 W64LIT(0xd16651b7b7c4b751), W64LIT(0x0be060ebeb20eb60), 00599 W64LIT(0xfdc1cc3c3c443ccc), W64LIT(0x7cfdbf81819e81bf), 00600 W64LIT(0xd440fe9494a194fe), W64LIT(0xeb1c0cf7f704f70c), 00601 W64LIT(0xa11867b9b9d6b967), W64LIT(0x988b5f131335135f), 00602 W64LIT(0x7d519c2c2c742c9c), W64LIT(0xd605b8d3d368d3b8), 00603 W64LIT(0x6b8c5ce7e734e75c), W64LIT(0x5739cb6e6eb26ecb), 00604 W64LIT(0x6eaaf3c4c451c4f3), W64LIT(0x181b0f030305030f), 00605 W64LIT(0x8adc135656fa5613), W64LIT(0x1a5e494444cc4449), 00606 W64LIT(0xdfa09e7f7f817f9e), W64LIT(0x218837a9a9e6a937), 00607 W64LIT(0x4d67822a2a7e2a82), W64LIT(0xb10a6dbbbbd0bb6d), 00608 W64LIT(0x4687e2c1c15ec1e2), W64LIT(0xa2f1025353f55302), 00609 W64LIT(0xae728bdcdc79dc8b), W64LIT(0x5853270b0b1d0b27), 00610 W64LIT(0x9c01d39d9dba9dd3), W64LIT(0x472bc16c6cb46cc1), 00611 W64LIT(0x95a4f531315331f5), W64LIT(0x87f3b974749c74b9), 00612 W64LIT(0xe31509f6f607f609), W64LIT(0x0a4c434646ca4643), 00613 W64LIT(0x09a526acace9ac26), W64LIT(0x3cb5978989868997), 00614 W64LIT(0xa0b44414143c1444), W64LIT(0x5bba42e1e13ee142), 00615 W64LIT(0xb0a64e16163a164e), W64LIT(0xcdf7d23a3a4e3ad2), 00616 W64LIT(0x6f06d06969bb69d0), W64LIT(0x48412d09091b092d), 00617 W64LIT(0xa7d7ad70709070ad), W64LIT(0xd96f54b6b6c7b654), 00618 W64LIT(0xce1eb7d0d06dd0b7), W64LIT(0x3bd67eeded2aed7e), 00619 W64LIT(0x2ee2dbcccc49ccdb), W64LIT(0x2a68574242c64257), 00620 W64LIT(0xb42cc29898b598c2), W64LIT(0x49ed0ea4a4f1a40e), 00621 W64LIT(0x5d75882828782888), W64LIT(0xda86315c5ce45c31), 00622 W64LIT(0x936b3ff8f815f83f), W64LIT(0x44c2a486869786a4), 00623 }; 00624 00625 <span class="keyword">static</span> <span class="keyword">const</span> word64 rc[R] = { 00626 W64LIT(0x1823c6e887b8014f), 00627 W64LIT(0x36a6d2f5796f9152), 00628 W64LIT(0x60bc9b8ea30c7b35), 00629 W64LIT(0x1de0d7c22e4bfe57), 00630 W64LIT(0x157737e59ff04ada), 00631 W64LIT(0x58c9290ab1a06b85), 00632 W64LIT(0xbd5d10f4cb3e0567), 00633 W64LIT(0xe427418ba77d95d8), 00634 W64LIT(0xfbee7c66dd17479e), 00635 W64LIT(0xca2dbf07ad5a8333) 00636 }; 00637 00638 <span class="comment">// Whirlpool basic transformation. Transforms state based on block.</span> 00639 <span class="keywordtype">void</span> Whirlpool::Transform(word64 *digest, <span class="keyword">const</span> word64 *block) 00640 { 00641 word64 w[8]; <span class="comment">// temporary storage</span> 00642 word64 s[8]; <span class="comment">// the cipher state</span> 00643 word64 k[8]; <span class="comment">// the round key</span> 00644 00645 <span class="comment">// Compute and apply K^0 to the cipher state</span> 00646 <span class="comment">// Also apply part of the Miyaguchi-Preneel compression function</span> 00647 digest[0] = s[0] = block[0] ^ (k[0] = digest[0]); 00648 digest[1] = s[1] = block[1] ^ (k[1] = digest[1]); 00649 digest[2] = s[2] = block[2] ^ (k[2] = digest[2]); 00650 digest[3] = s[3] = block[3] ^ (k[3] = digest[3]); 00651 digest[4] = s[4] = block[4] ^ (k[4] = digest[4]); 00652 digest[5] = s[5] = block[5] ^ (k[5] = digest[5]); 00653 digest[6] = s[6] = block[6] ^ (k[6] = digest[6]); 00654 digest[7] = s[7] = block[7] ^ (k[7] = digest[7]); 00655 00656 <span class="comment">// Iterate over all rounds:</span> 00657 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> r = 0; r < R; r++) 00658 { 00659 word64 t; 00660 00661 <span class="comment">// Compute K^r from K^{r-1}:</span> 00662 <span class="preprocessor">#define K(i,j) GETBYTE(k[(i+j+1)%8], j)</span> 00663 <span class="preprocessor"></span><span class="preprocessor">#define KS(i) \</span> 00664 <span class="preprocessor"> t = C0[K(i,3)] ^ C1[K(i,2)] ^ C2[K(i,1)] ^ C3[K(i,0)]; \</span> 00665 <span class="preprocessor"> w[i] = (t >> 32) ^ (t << 32) ^ C0[K(i,7)] ^ C1[K(i,6)] ^ C2[K(i,5)] ^ C3[K(i,4)];</span> 00666 <span class="preprocessor"></span> 00667 KS(0); KS(1); KS(2); KS(3); KS(4); KS(5); KS(6); KS(7); 00668 k[0] = w[0] ^ rc[r]; 00669 k[1] = w[1]; k[2] = w[2]; k[3] = w[3]; k[4] = w[4]; k[5] = w[5]; k[6] = w[6]; k[7] = w[7]; 00670 00671 <span class="comment">// Apply the r-th round transformation:</span> 00672 <span class="preprocessor">#define S(i,j) GETBYTE(s[(i+j+1)%8], j)</span> 00673 <span class="preprocessor"></span><span class="preprocessor">#define TS(i) \</span> 00674 <span class="preprocessor"> t = C0[S(i,3)] ^ C1[S(i,2)] ^ C2[S(i,1)] ^ C3[S(i,0)]; \</span> 00675 <span class="preprocessor"> w[i] = (t >> 32) ^ (t << 32) ^ C0[S(i,7)] ^ C1[S(i,6)] ^ C2[S(i,5)] ^ C3[S(i,4)] ^ k[i];</span> 00676 <span class="preprocessor"></span> 00677 TS(0); TS(1); TS(2); TS(3); TS(4); TS(5); TS(6); TS(7); 00678 s[0] = w[0]; s[1] = w[1]; s[2] = w[2]; s[3] = w[3]; s[4] = w[4]; s[5] = w[5]; s[6] = w[6]; s[7] = w[7]; 00679 } 00680 00681 <span class="comment">// Apply the rest of the Miyaguchi-Preneel compression function:</span> 00682 digest[0] ^= s[0]; 00683 digest[1] ^= s[1]; 00684 digest[2] ^= s[2]; 00685 digest[3] ^= s[3]; 00686 digest[4] ^= s[4]; 00687 digest[5] ^= s[5]; 00688 digest[6] ^= s[6]; 00689 digest[7] ^= s[7]; 00690 } 00691 00692 NAMESPACE_END 00693 00694 <span class="preprocessor">#endif // WORD64_AVAILABLE</span> </div></pre><hr size="1"><address style="align: right;"><small>Generated on Sun Nov 7 08:23:59 2004 for Crypto++ by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border=0 ></a> 1.3.7 </small></address> </body> </html>