Sophie

Sophie

distrib > Mandriva > 10.2 > i586 > media > contrib > by-pkgid > 7457b841ac8136d3a1a9d3d960c5252e > files > 1747

libcryptopp-doc-5.2.1-2mdk.i586.rpm

<!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&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="namespacemembers.html">Namespace&nbsp;Members</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="globals.html">File&nbsp;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"> * &lt;P&gt;</span>
00011 <span class="comment"> * &lt;b&gt;References&lt;/b&gt;</span>
00012 <span class="comment"> *</span>
00013 <span class="comment"> * &lt;P&gt;</span>
00014 <span class="comment"> * The Whirlpool algorithm was developed by</span>
00015 <span class="comment"> * &lt;a href="mailto:pbarreto@scopus.com.br"&gt;Paulo S. L. M. Barreto&lt;/a&gt; and</span>
00016 <span class="comment"> * &lt;a href="mailto:vincent.rijmen@cryptomathic.com"&gt;Vincent Rijmen&lt;/a&gt;.</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"> *      &lt;https://www.cosic.esat.kuleuven.ac.be/nessie/workshop/submissions/whirlpool.zip&gt;</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 &lt; 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 &gt;&gt; 32) ^ (t &lt;&lt; 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 &gt;&gt; 32) ^ (t &lt;&lt; 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>