<!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++: ripemd.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>ripemd.cpp</h1><pre class="fragment"><div>00001 <span class="comment">// ripemd.cpp</span> 00002 <span class="comment">// RIPEMD-160 written and placed in the public domain by Wei Dai</span> 00003 <span class="comment">// RIPEMD-320, RIPEMD-128, RIPEMD-256 written by Kevin Springle</span> 00004 <span class="comment">// and also placed in the public domain</span> 00005 00006 <span class="preprocessor">#include "pch.h"</span> 00007 <span class="preprocessor">#include "ripemd.h"</span> 00008 <span class="preprocessor">#include "misc.h"</span> 00009 00010 NAMESPACE_BEGIN(CryptoPP) 00011 00012 #define F(x, y, z) (x ^ y ^ z) 00013 <span class="preprocessor">#define G(x, y, z) (z ^ (x & (y^z)))</span> 00014 <span class="preprocessor"></span><span class="preprocessor">#define H(x, y, z) (z ^ (x | ~y))</span> 00015 <span class="preprocessor"></span><span class="preprocessor">#define I(x, y, z) (y ^ (z & (x^y)))</span> 00016 <span class="preprocessor"></span><span class="preprocessor">#define J(x, y, z) (x ^ (y | ~z))</span> 00017 <span class="preprocessor"></span> 00018 <span class="preprocessor">#define k0 0</span> 00019 <span class="preprocessor"></span><span class="preprocessor">#define k1 0x5a827999UL</span> 00020 <span class="preprocessor"></span><span class="preprocessor">#define k2 0x6ed9eba1UL</span> 00021 <span class="preprocessor"></span><span class="preprocessor">#define k3 0x8f1bbcdcUL</span> 00022 <span class="preprocessor"></span><span class="preprocessor">#define k4 0xa953fd4eUL</span> 00023 <span class="preprocessor"></span><span class="preprocessor">#define k5 0x50a28be6UL</span> 00024 <span class="preprocessor"></span><span class="preprocessor">#define k6 0x5c4dd124UL</span> 00025 <span class="preprocessor"></span><span class="preprocessor">#define k7 0x6d703ef3UL</span> 00026 <span class="preprocessor"></span><span class="preprocessor">#define k8 0x7a6d76e9UL</span> 00027 <span class="preprocessor"></span><span class="preprocessor">#define k9 0</span> 00028 <span class="preprocessor"></span> 00029 <span class="comment">// *************************************************************</span> 00030 00031 <span class="comment">// for 160 and 320</span> 00032 <span class="preprocessor">#define Subround(f, a, b, c, d, e, x, s, k) \</span> 00033 <span class="preprocessor"> a += f(b, c, d) + x + k;\</span> 00034 <span class="preprocessor"> a = rotlFixed((word32)a, s) + e;\</span> 00035 <span class="preprocessor"> c = rotlFixed((word32)c, 10U)</span> 00036 <span class="preprocessor"></span> 00037 <span class="keywordtype">void</span> RIPEMD160::InitState(HashWordType *state) 00038 { 00039 state[0] = 0x67452301L; 00040 state[1] = 0xefcdab89L; 00041 state[2] = 0x98badcfeL; 00042 state[3] = 0x10325476L; 00043 state[4] = 0xc3d2e1f0L; 00044 } 00045 00046 <span class="keywordtype">void</span> RIPEMD160::Transform (word32 *digest, <span class="keyword">const</span> word32 *X) 00047 { 00048 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> a1, b1, c1, d1, e1, a2, b2, c2, d2, e2; 00049 a1 = a2 = digest[0]; 00050 b1 = b2 = digest[1]; 00051 c1 = c2 = digest[2]; 00052 d1 = d2 = digest[3]; 00053 e1 = e2 = digest[4]; 00054 00055 Subround(F, a1, b1, c1, d1, e1, X[ 0], 11, k0); 00056 Subround(F, e1, a1, b1, c1, d1, X[ 1], 14, k0); 00057 Subround(F, d1, e1, a1, b1, c1, X[ 2], 15, k0); 00058 Subround(F, c1, d1, e1, a1, b1, X[ 3], 12, k0); 00059 Subround(F, b1, c1, d1, e1, a1, X[ 4], 5, k0); 00060 Subround(F, a1, b1, c1, d1, e1, X[ 5], 8, k0); 00061 Subround(F, e1, a1, b1, c1, d1, X[ 6], 7, k0); 00062 Subround(F, d1, e1, a1, b1, c1, X[ 7], 9, k0); 00063 Subround(F, c1, d1, e1, a1, b1, X[ 8], 11, k0); 00064 Subround(F, b1, c1, d1, e1, a1, X[ 9], 13, k0); 00065 Subround(F, a1, b1, c1, d1, e1, X[10], 14, k0); 00066 Subround(F, e1, a1, b1, c1, d1, X[11], 15, k0); 00067 Subround(F, d1, e1, a1, b1, c1, X[12], 6, k0); 00068 Subround(F, c1, d1, e1, a1, b1, X[13], 7, k0); 00069 Subround(F, b1, c1, d1, e1, a1, X[14], 9, k0); 00070 Subround(F, a1, b1, c1, d1, e1, X[15], 8, k0); 00071 00072 Subround(G, e1, a1, b1, c1, d1, X[ 7], 7, k1); 00073 Subround(G, d1, e1, a1, b1, c1, X[ 4], 6, k1); 00074 Subround(G, c1, d1, e1, a1, b1, X[13], 8, k1); 00075 Subround(G, b1, c1, d1, e1, a1, X[ 1], 13, k1); 00076 Subround(G, a1, b1, c1, d1, e1, X[10], 11, k1); 00077 Subround(G, e1, a1, b1, c1, d1, X[ 6], 9, k1); 00078 Subround(G, d1, e1, a1, b1, c1, X[15], 7, k1); 00079 Subround(G, c1, d1, e1, a1, b1, X[ 3], 15, k1); 00080 Subround(G, b1, c1, d1, e1, a1, X[12], 7, k1); 00081 Subround(G, a1, b1, c1, d1, e1, X[ 0], 12, k1); 00082 Subround(G, e1, a1, b1, c1, d1, X[ 9], 15, k1); 00083 Subround(G, d1, e1, a1, b1, c1, X[ 5], 9, k1); 00084 Subround(G, c1, d1, e1, a1, b1, X[ 2], 11, k1); 00085 Subround(G, b1, c1, d1, e1, a1, X[14], 7, k1); 00086 Subround(G, a1, b1, c1, d1, e1, X[11], 13, k1); 00087 Subround(G, e1, a1, b1, c1, d1, X[ 8], 12, k1); 00088 00089 Subround(H, d1, e1, a1, b1, c1, X[ 3], 11, k2); 00090 Subround(H, c1, d1, e1, a1, b1, X[10], 13, k2); 00091 Subround(H, b1, c1, d1, e1, a1, X[14], 6, k2); 00092 Subround(H, a1, b1, c1, d1, e1, X[ 4], 7, k2); 00093 Subround(H, e1, a1, b1, c1, d1, X[ 9], 14, k2); 00094 Subround(H, d1, e1, a1, b1, c1, X[15], 9, k2); 00095 Subround(H, c1, d1, e1, a1, b1, X[ 8], 13, k2); 00096 Subround(H, b1, c1, d1, e1, a1, X[ 1], 15, k2); 00097 Subround(H, a1, b1, c1, d1, e1, X[ 2], 14, k2); 00098 Subround(H, e1, a1, b1, c1, d1, X[ 7], 8, k2); 00099 Subround(H, d1, e1, a1, b1, c1, X[ 0], 13, k2); 00100 Subround(H, c1, d1, e1, a1, b1, X[ 6], 6, k2); 00101 Subround(H, b1, c1, d1, e1, a1, X[13], 5, k2); 00102 Subround(H, a1, b1, c1, d1, e1, X[11], 12, k2); 00103 Subround(H, e1, a1, b1, c1, d1, X[ 5], 7, k2); 00104 Subround(H, d1, e1, a1, b1, c1, X[12], 5, k2); 00105 00106 Subround(I, c1, d1, e1, a1, b1, X[ 1], 11, k3); 00107 Subround(I, b1, c1, d1, e1, a1, X[ 9], 12, k3); 00108 Subround(I, a1, b1, c1, d1, e1, X[11], 14, k3); 00109 Subround(I, e1, a1, b1, c1, d1, X[10], 15, k3); 00110 Subround(I, d1, e1, a1, b1, c1, X[ 0], 14, k3); 00111 Subround(I, c1, d1, e1, a1, b1, X[ 8], 15, k3); 00112 Subround(I, b1, c1, d1, e1, a1, X[12], 9, k3); 00113 Subround(I, a1, b1, c1, d1, e1, X[ 4], 8, k3); 00114 Subround(I, e1, a1, b1, c1, d1, X[13], 9, k3); 00115 Subround(I, d1, e1, a1, b1, c1, X[ 3], 14, k3); 00116 Subround(I, c1, d1, e1, a1, b1, X[ 7], 5, k3); 00117 Subround(I, b1, c1, d1, e1, a1, X[15], 6, k3); 00118 Subround(I, a1, b1, c1, d1, e1, X[14], 8, k3); 00119 Subround(I, e1, a1, b1, c1, d1, X[ 5], 6, k3); 00120 Subround(I, d1, e1, a1, b1, c1, X[ 6], 5, k3); 00121 Subround(I, c1, d1, e1, a1, b1, X[ 2], 12, k3); 00122 00123 Subround(J, b1, c1, d1, e1, a1, X[ 4], 9, k4); 00124 Subround(J, a1, b1, c1, d1, e1, X[ 0], 15, k4); 00125 Subround(J, e1, a1, b1, c1, d1, X[ 5], 5, k4); 00126 Subround(J, d1, e1, a1, b1, c1, X[ 9], 11, k4); 00127 Subround(J, c1, d1, e1, a1, b1, X[ 7], 6, k4); 00128 Subround(J, b1, c1, d1, e1, a1, X[12], 8, k4); 00129 Subround(J, a1, b1, c1, d1, e1, X[ 2], 13, k4); 00130 Subround(J, e1, a1, b1, c1, d1, X[10], 12, k4); 00131 Subround(J, d1, e1, a1, b1, c1, X[14], 5, k4); 00132 Subround(J, c1, d1, e1, a1, b1, X[ 1], 12, k4); 00133 Subround(J, b1, c1, d1, e1, a1, X[ 3], 13, k4); 00134 Subround(J, a1, b1, c1, d1, e1, X[ 8], 14, k4); 00135 Subround(J, e1, a1, b1, c1, d1, X[11], 11, k4); 00136 Subround(J, d1, e1, a1, b1, c1, X[ 6], 8, k4); 00137 Subround(J, c1, d1, e1, a1, b1, X[15], 5, k4); 00138 Subround(J, b1, c1, d1, e1, a1, X[13], 6, k4); 00139 00140 Subround(J, a2, b2, c2, d2, e2, X[ 5], 8, k5); 00141 Subround(J, e2, a2, b2, c2, d2, X[14], 9, k5); 00142 Subround(J, d2, e2, a2, b2, c2, X[ 7], 9, k5); 00143 Subround(J, c2, d2, e2, a2, b2, X[ 0], 11, k5); 00144 Subround(J, b2, c2, d2, e2, a2, X[ 9], 13, k5); 00145 Subround(J, a2, b2, c2, d2, e2, X[ 2], 15, k5); 00146 Subround(J, e2, a2, b2, c2, d2, X[11], 15, k5); 00147 Subround(J, d2, e2, a2, b2, c2, X[ 4], 5, k5); 00148 Subround(J, c2, d2, e2, a2, b2, X[13], 7, k5); 00149 Subround(J, b2, c2, d2, e2, a2, X[ 6], 7, k5); 00150 Subround(J, a2, b2, c2, d2, e2, X[15], 8, k5); 00151 Subround(J, e2, a2, b2, c2, d2, X[ 8], 11, k5); 00152 Subround(J, d2, e2, a2, b2, c2, X[ 1], 14, k5); 00153 Subround(J, c2, d2, e2, a2, b2, X[10], 14, k5); 00154 Subround(J, b2, c2, d2, e2, a2, X[ 3], 12, k5); 00155 Subround(J, a2, b2, c2, d2, e2, X[12], 6, k5); 00156 00157 Subround(I, e2, a2, b2, c2, d2, X[ 6], 9, k6); 00158 Subround(I, d2, e2, a2, b2, c2, X[11], 13, k6); 00159 Subround(I, c2, d2, e2, a2, b2, X[ 3], 15, k6); 00160 Subround(I, b2, c2, d2, e2, a2, X[ 7], 7, k6); 00161 Subround(I, a2, b2, c2, d2, e2, X[ 0], 12, k6); 00162 Subround(I, e2, a2, b2, c2, d2, X[13], 8, k6); 00163 Subround(I, d2, e2, a2, b2, c2, X[ 5], 9, k6); 00164 Subround(I, c2, d2, e2, a2, b2, X[10], 11, k6); 00165 Subround(I, b2, c2, d2, e2, a2, X[14], 7, k6); 00166 Subround(I, a2, b2, c2, d2, e2, X[15], 7, k6); 00167 Subround(I, e2, a2, b2, c2, d2, X[ 8], 12, k6); 00168 Subround(I, d2, e2, a2, b2, c2, X[12], 7, k6); 00169 Subround(I, c2, d2, e2, a2, b2, X[ 4], 6, k6); 00170 Subround(I, b2, c2, d2, e2, a2, X[ 9], 15, k6); 00171 Subround(I, a2, b2, c2, d2, e2, X[ 1], 13, k6); 00172 Subround(I, e2, a2, b2, c2, d2, X[ 2], 11, k6); 00173 00174 Subround(H, d2, e2, a2, b2, c2, X[15], 9, k7); 00175 Subround(H, c2, d2, e2, a2, b2, X[ 5], 7, k7); 00176 Subround(H, b2, c2, d2, e2, a2, X[ 1], 15, k7); 00177 Subround(H, a2, b2, c2, d2, e2, X[ 3], 11, k7); 00178 Subround(H, e2, a2, b2, c2, d2, X[ 7], 8, k7); 00179 Subround(H, d2, e2, a2, b2, c2, X[14], 6, k7); 00180 Subround(H, c2, d2, e2, a2, b2, X[ 6], 6, k7); 00181 Subround(H, b2, c2, d2, e2, a2, X[ 9], 14, k7); 00182 Subround(H, a2, b2, c2, d2, e2, X[11], 12, k7); 00183 Subround(H, e2, a2, b2, c2, d2, X[ 8], 13, k7); 00184 Subround(H, d2, e2, a2, b2, c2, X[12], 5, k7); 00185 Subround(H, c2, d2, e2, a2, b2, X[ 2], 14, k7); 00186 Subround(H, b2, c2, d2, e2, a2, X[10], 13, k7); 00187 Subround(H, a2, b2, c2, d2, e2, X[ 0], 13, k7); 00188 Subround(H, e2, a2, b2, c2, d2, X[ 4], 7, k7); 00189 Subround(H, d2, e2, a2, b2, c2, X[13], 5, k7); 00190 00191 Subround(G, c2, d2, e2, a2, b2, X[ 8], 15, k8); 00192 Subround(G, b2, c2, d2, e2, a2, X[ 6], 5, k8); 00193 Subround(G, a2, b2, c2, d2, e2, X[ 4], 8, k8); 00194 Subround(G, e2, a2, b2, c2, d2, X[ 1], 11, k8); 00195 Subround(G, d2, e2, a2, b2, c2, X[ 3], 14, k8); 00196 Subround(G, c2, d2, e2, a2, b2, X[11], 14, k8); 00197 Subround(G, b2, c2, d2, e2, a2, X[15], 6, k8); 00198 Subround(G, a2, b2, c2, d2, e2, X[ 0], 14, k8); 00199 Subround(G, e2, a2, b2, c2, d2, X[ 5], 6, k8); 00200 Subround(G, d2, e2, a2, b2, c2, X[12], 9, k8); 00201 Subround(G, c2, d2, e2, a2, b2, X[ 2], 12, k8); 00202 Subround(G, b2, c2, d2, e2, a2, X[13], 9, k8); 00203 Subround(G, a2, b2, c2, d2, e2, X[ 9], 12, k8); 00204 Subround(G, e2, a2, b2, c2, d2, X[ 7], 5, k8); 00205 Subround(G, d2, e2, a2, b2, c2, X[10], 15, k8); 00206 Subround(G, c2, d2, e2, a2, b2, X[14], 8, k8); 00207 00208 Subround(F, b2, c2, d2, e2, a2, X[12], 8, k9); 00209 Subround(F, a2, b2, c2, d2, e2, X[15], 5, k9); 00210 Subround(F, e2, a2, b2, c2, d2, X[10], 12, k9); 00211 Subround(F, d2, e2, a2, b2, c2, X[ 4], 9, k9); 00212 Subround(F, c2, d2, e2, a2, b2, X[ 1], 12, k9); 00213 Subround(F, b2, c2, d2, e2, a2, X[ 5], 5, k9); 00214 Subround(F, a2, b2, c2, d2, e2, X[ 8], 14, k9); 00215 Subround(F, e2, a2, b2, c2, d2, X[ 7], 6, k9); 00216 Subround(F, d2, e2, a2, b2, c2, X[ 6], 8, k9); 00217 Subround(F, c2, d2, e2, a2, b2, X[ 2], 13, k9); 00218 Subround(F, b2, c2, d2, e2, a2, X[13], 6, k9); 00219 Subround(F, a2, b2, c2, d2, e2, X[14], 5, k9); 00220 Subround(F, e2, a2, b2, c2, d2, X[ 0], 15, k9); 00221 Subround(F, d2, e2, a2, b2, c2, X[ 3], 13, k9); 00222 Subround(F, c2, d2, e2, a2, b2, X[ 9], 11, k9); 00223 Subround(F, b2, c2, d2, e2, a2, X[11], 11, k9); 00224 00225 c1 = digest[1] + c1 + d2; 00226 digest[1] = digest[2] + d1 + e2; 00227 digest[2] = digest[3] + e1 + a2; 00228 digest[3] = digest[4] + a1 + b2; 00229 digest[4] = digest[0] + b1 + c2; 00230 digest[0] = c1; 00231 } 00232 00233 <span class="comment">// *************************************************************</span> 00234 00235 <span class="keywordtype">void</span> RIPEMD320::InitState(HashWordType *state) 00236 { 00237 state[0] = 0x67452301L; 00238 state[1] = 0xefcdab89L; 00239 state[2] = 0x98badcfeL; 00240 state[3] = 0x10325476L; 00241 state[4] = 0xc3d2e1f0L; 00242 state[5] = 0x76543210L; 00243 state[6] = 0xfedcba98L; 00244 state[7] = 0x89abcdefL; 00245 state[8] = 0x01234567L; 00246 state[9] = 0x3c2d1e0fL; 00247 } 00248 00249 <span class="keywordtype">void</span> RIPEMD320::Transform (word32 *digest, <span class="keyword">const</span> word32 *X) 00250 { 00251 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> a1, b1, c1, d1, e1, a2, b2, c2, d2, e2, t; 00252 a1 = digest[0]; 00253 b1 = digest[1]; 00254 c1 = digest[2]; 00255 d1 = digest[3]; 00256 e1 = digest[4]; 00257 a2 = digest[5]; 00258 b2 = digest[6]; 00259 c2 = digest[7]; 00260 d2 = digest[8]; 00261 e2 = digest[9]; 00262 00263 Subround(F, a1, b1, c1, d1, e1, X[ 0], 11, k0); 00264 Subround(F, e1, a1, b1, c1, d1, X[ 1], 14, k0); 00265 Subround(F, d1, e1, a1, b1, c1, X[ 2], 15, k0); 00266 Subround(F, c1, d1, e1, a1, b1, X[ 3], 12, k0); 00267 Subround(F, b1, c1, d1, e1, a1, X[ 4], 5, k0); 00268 Subround(F, a1, b1, c1, d1, e1, X[ 5], 8, k0); 00269 Subround(F, e1, a1, b1, c1, d1, X[ 6], 7, k0); 00270 Subround(F, d1, e1, a1, b1, c1, X[ 7], 9, k0); 00271 Subround(F, c1, d1, e1, a1, b1, X[ 8], 11, k0); 00272 Subround(F, b1, c1, d1, e1, a1, X[ 9], 13, k0); 00273 Subround(F, a1, b1, c1, d1, e1, X[10], 14, k0); 00274 Subround(F, e1, a1, b1, c1, d1, X[11], 15, k0); 00275 Subround(F, d1, e1, a1, b1, c1, X[12], 6, k0); 00276 Subround(F, c1, d1, e1, a1, b1, X[13], 7, k0); 00277 Subround(F, b1, c1, d1, e1, a1, X[14], 9, k0); 00278 Subround(F, a1, b1, c1, d1, e1, X[15], 8, k0); 00279 00280 Subround(J, a2, b2, c2, d2, e2, X[ 5], 8, k5); 00281 Subround(J, e2, a2, b2, c2, d2, X[14], 9, k5); 00282 Subround(J, d2, e2, a2, b2, c2, X[ 7], 9, k5); 00283 Subround(J, c2, d2, e2, a2, b2, X[ 0], 11, k5); 00284 Subround(J, b2, c2, d2, e2, a2, X[ 9], 13, k5); 00285 Subround(J, a2, b2, c2, d2, e2, X[ 2], 15, k5); 00286 Subround(J, e2, a2, b2, c2, d2, X[11], 15, k5); 00287 Subround(J, d2, e2, a2, b2, c2, X[ 4], 5, k5); 00288 Subround(J, c2, d2, e2, a2, b2, X[13], 7, k5); 00289 Subround(J, b2, c2, d2, e2, a2, X[ 6], 7, k5); 00290 Subround(J, a2, b2, c2, d2, e2, X[15], 8, k5); 00291 Subround(J, e2, a2, b2, c2, d2, X[ 8], 11, k5); 00292 Subround(J, d2, e2, a2, b2, c2, X[ 1], 14, k5); 00293 Subround(J, c2, d2, e2, a2, b2, X[10], 14, k5); 00294 Subround(J, b2, c2, d2, e2, a2, X[ 3], 12, k5); 00295 Subround(J, a2, b2, c2, d2, e2, X[12], 6, k5); 00296 00297 t = a1; a1 = a2; a2 = t; 00298 00299 Subround(G, e1, a1, b1, c1, d1, X[ 7], 7, k1); 00300 Subround(G, d1, e1, a1, b1, c1, X[ 4], 6, k1); 00301 Subround(G, c1, d1, e1, a1, b1, X[13], 8, k1); 00302 Subround(G, b1, c1, d1, e1, a1, X[ 1], 13, k1); 00303 Subround(G, a1, b1, c1, d1, e1, X[10], 11, k1); 00304 Subround(G, e1, a1, b1, c1, d1, X[ 6], 9, k1); 00305 Subround(G, d1, e1, a1, b1, c1, X[15], 7, k1); 00306 Subround(G, c1, d1, e1, a1, b1, X[ 3], 15, k1); 00307 Subround(G, b1, c1, d1, e1, a1, X[12], 7, k1); 00308 Subround(G, a1, b1, c1, d1, e1, X[ 0], 12, k1); 00309 Subround(G, e1, a1, b1, c1, d1, X[ 9], 15, k1); 00310 Subround(G, d1, e1, a1, b1, c1, X[ 5], 9, k1); 00311 Subround(G, c1, d1, e1, a1, b1, X[ 2], 11, k1); 00312 Subround(G, b1, c1, d1, e1, a1, X[14], 7, k1); 00313 Subround(G, a1, b1, c1, d1, e1, X[11], 13, k1); 00314 Subround(G, e1, a1, b1, c1, d1, X[ 8], 12, k1); 00315 00316 Subround(I, e2, a2, b2, c2, d2, X[ 6], 9, k6); 00317 Subround(I, d2, e2, a2, b2, c2, X[11], 13, k6); 00318 Subround(I, c2, d2, e2, a2, b2, X[ 3], 15, k6); 00319 Subround(I, b2, c2, d2, e2, a2, X[ 7], 7, k6); 00320 Subround(I, a2, b2, c2, d2, e2, X[ 0], 12, k6); 00321 Subround(I, e2, a2, b2, c2, d2, X[13], 8, k6); 00322 Subround(I, d2, e2, a2, b2, c2, X[ 5], 9, k6); 00323 Subround(I, c2, d2, e2, a2, b2, X[10], 11, k6); 00324 Subround(I, b2, c2, d2, e2, a2, X[14], 7, k6); 00325 Subround(I, a2, b2, c2, d2, e2, X[15], 7, k6); 00326 Subround(I, e2, a2, b2, c2, d2, X[ 8], 12, k6); 00327 Subround(I, d2, e2, a2, b2, c2, X[12], 7, k6); 00328 Subround(I, c2, d2, e2, a2, b2, X[ 4], 6, k6); 00329 Subround(I, b2, c2, d2, e2, a2, X[ 9], 15, k6); 00330 Subround(I, a2, b2, c2, d2, e2, X[ 1], 13, k6); 00331 Subround(I, e2, a2, b2, c2, d2, X[ 2], 11, k6); 00332 00333 t = b1; b1 = b2; b2 = t; 00334 00335 Subround(H, d1, e1, a1, b1, c1, X[ 3], 11, k2); 00336 Subround(H, c1, d1, e1, a1, b1, X[10], 13, k2); 00337 Subround(H, b1, c1, d1, e1, a1, X[14], 6, k2); 00338 Subround(H, a1, b1, c1, d1, e1, X[ 4], 7, k2); 00339 Subround(H, e1, a1, b1, c1, d1, X[ 9], 14, k2); 00340 Subround(H, d1, e1, a1, b1, c1, X[15], 9, k2); 00341 Subround(H, c1, d1, e1, a1, b1, X[ 8], 13, k2); 00342 Subround(H, b1, c1, d1, e1, a1, X[ 1], 15, k2); 00343 Subround(H, a1, b1, c1, d1, e1, X[ 2], 14, k2); 00344 Subround(H, e1, a1, b1, c1, d1, X[ 7], 8, k2); 00345 Subround(H, d1, e1, a1, b1, c1, X[ 0], 13, k2); 00346 Subround(H, c1, d1, e1, a1, b1, X[ 6], 6, k2); 00347 Subround(H, b1, c1, d1, e1, a1, X[13], 5, k2); 00348 Subround(H, a1, b1, c1, d1, e1, X[11], 12, k2); 00349 Subround(H, e1, a1, b1, c1, d1, X[ 5], 7, k2); 00350 Subround(H, d1, e1, a1, b1, c1, X[12], 5, k2); 00351 00352 Subround(H, d2, e2, a2, b2, c2, X[15], 9, k7); 00353 Subround(H, c2, d2, e2, a2, b2, X[ 5], 7, k7); 00354 Subround(H, b2, c2, d2, e2, a2, X[ 1], 15, k7); 00355 Subround(H, a2, b2, c2, d2, e2, X[ 3], 11, k7); 00356 Subround(H, e2, a2, b2, c2, d2, X[ 7], 8, k7); 00357 Subround(H, d2, e2, a2, b2, c2, X[14], 6, k7); 00358 Subround(H, c2, d2, e2, a2, b2, X[ 6], 6, k7); 00359 Subround(H, b2, c2, d2, e2, a2, X[ 9], 14, k7); 00360 Subround(H, a2, b2, c2, d2, e2, X[11], 12, k7); 00361 Subround(H, e2, a2, b2, c2, d2, X[ 8], 13, k7); 00362 Subround(H, d2, e2, a2, b2, c2, X[12], 5, k7); 00363 Subround(H, c2, d2, e2, a2, b2, X[ 2], 14, k7); 00364 Subround(H, b2, c2, d2, e2, a2, X[10], 13, k7); 00365 Subround(H, a2, b2, c2, d2, e2, X[ 0], 13, k7); 00366 Subround(H, e2, a2, b2, c2, d2, X[ 4], 7, k7); 00367 Subround(H, d2, e2, a2, b2, c2, X[13], 5, k7); 00368 00369 t = c1; c1 = c2; c2 = t; 00370 00371 Subround(I, c1, d1, e1, a1, b1, X[ 1], 11, k3); 00372 Subround(I, b1, c1, d1, e1, a1, X[ 9], 12, k3); 00373 Subround(I, a1, b1, c1, d1, e1, X[11], 14, k3); 00374 Subround(I, e1, a1, b1, c1, d1, X[10], 15, k3); 00375 Subround(I, d1, e1, a1, b1, c1, X[ 0], 14, k3); 00376 Subround(I, c1, d1, e1, a1, b1, X[ 8], 15, k3); 00377 Subround(I, b1, c1, d1, e1, a1, X[12], 9, k3); 00378 Subround(I, a1, b1, c1, d1, e1, X[ 4], 8, k3); 00379 Subround(I, e1, a1, b1, c1, d1, X[13], 9, k3); 00380 Subround(I, d1, e1, a1, b1, c1, X[ 3], 14, k3); 00381 Subround(I, c1, d1, e1, a1, b1, X[ 7], 5, k3); 00382 Subround(I, b1, c1, d1, e1, a1, X[15], 6, k3); 00383 Subround(I, a1, b1, c1, d1, e1, X[14], 8, k3); 00384 Subround(I, e1, a1, b1, c1, d1, X[ 5], 6, k3); 00385 Subround(I, d1, e1, a1, b1, c1, X[ 6], 5, k3); 00386 Subround(I, c1, d1, e1, a1, b1, X[ 2], 12, k3); 00387 00388 Subround(G, c2, d2, e2, a2, b2, X[ 8], 15, k8); 00389 Subround(G, b2, c2, d2, e2, a2, X[ 6], 5, k8); 00390 Subround(G, a2, b2, c2, d2, e2, X[ 4], 8, k8); 00391 Subround(G, e2, a2, b2, c2, d2, X[ 1], 11, k8); 00392 Subround(G, d2, e2, a2, b2, c2, X[ 3], 14, k8); 00393 Subround(G, c2, d2, e2, a2, b2, X[11], 14, k8); 00394 Subround(G, b2, c2, d2, e2, a2, X[15], 6, k8); 00395 Subround(G, a2, b2, c2, d2, e2, X[ 0], 14, k8); 00396 Subround(G, e2, a2, b2, c2, d2, X[ 5], 6, k8); 00397 Subround(G, d2, e2, a2, b2, c2, X[12], 9, k8); 00398 Subround(G, c2, d2, e2, a2, b2, X[ 2], 12, k8); 00399 Subround(G, b2, c2, d2, e2, a2, X[13], 9, k8); 00400 Subround(G, a2, b2, c2, d2, e2, X[ 9], 12, k8); 00401 Subround(G, e2, a2, b2, c2, d2, X[ 7], 5, k8); 00402 Subround(G, d2, e2, a2, b2, c2, X[10], 15, k8); 00403 Subround(G, c2, d2, e2, a2, b2, X[14], 8, k8); 00404 00405 t = d1; d1 = d2; d2 = t; 00406 00407 Subround(J, b1, c1, d1, e1, a1, X[ 4], 9, k4); 00408 Subround(J, a1, b1, c1, d1, e1, X[ 0], 15, k4); 00409 Subround(J, e1, a1, b1, c1, d1, X[ 5], 5, k4); 00410 Subround(J, d1, e1, a1, b1, c1, X[ 9], 11, k4); 00411 Subround(J, c1, d1, e1, a1, b1, X[ 7], 6, k4); 00412 Subround(J, b1, c1, d1, e1, a1, X[12], 8, k4); 00413 Subround(J, a1, b1, c1, d1, e1, X[ 2], 13, k4); 00414 Subround(J, e1, a1, b1, c1, d1, X[10], 12, k4); 00415 Subround(J, d1, e1, a1, b1, c1, X[14], 5, k4); 00416 Subround(J, c1, d1, e1, a1, b1, X[ 1], 12, k4); 00417 Subround(J, b1, c1, d1, e1, a1, X[ 3], 13, k4); 00418 Subround(J, a1, b1, c1, d1, e1, X[ 8], 14, k4); 00419 Subround(J, e1, a1, b1, c1, d1, X[11], 11, k4); 00420 Subround(J, d1, e1, a1, b1, c1, X[ 6], 8, k4); 00421 Subround(J, c1, d1, e1, a1, b1, X[15], 5, k4); 00422 Subround(J, b1, c1, d1, e1, a1, X[13], 6, k4); 00423 00424 Subround(F, b2, c2, d2, e2, a2, X[12], 8, k9); 00425 Subround(F, a2, b2, c2, d2, e2, X[15], 5, k9); 00426 Subround(F, e2, a2, b2, c2, d2, X[10], 12, k9); 00427 Subround(F, d2, e2, a2, b2, c2, X[ 4], 9, k9); 00428 Subround(F, c2, d2, e2, a2, b2, X[ 1], 12, k9); 00429 Subround(F, b2, c2, d2, e2, a2, X[ 5], 5, k9); 00430 Subround(F, a2, b2, c2, d2, e2, X[ 8], 14, k9); 00431 Subround(F, e2, a2, b2, c2, d2, X[ 7], 6, k9); 00432 Subround(F, d2, e2, a2, b2, c2, X[ 6], 8, k9); 00433 Subround(F, c2, d2, e2, a2, b2, X[ 2], 13, k9); 00434 Subround(F, b2, c2, d2, e2, a2, X[13], 6, k9); 00435 Subround(F, a2, b2, c2, d2, e2, X[14], 5, k9); 00436 Subround(F, e2, a2, b2, c2, d2, X[ 0], 15, k9); 00437 Subround(F, d2, e2, a2, b2, c2, X[ 3], 13, k9); 00438 Subround(F, c2, d2, e2, a2, b2, X[ 9], 11, k9); 00439 Subround(F, b2, c2, d2, e2, a2, X[11], 11, k9); 00440 00441 t = e1; e1 = e2; e2 = t; 00442 00443 digest[0] += a1; 00444 digest[1] += b1; 00445 digest[2] += c1; 00446 digest[3] += d1; 00447 digest[4] += e1; 00448 digest[5] += a2; 00449 digest[6] += b2; 00450 digest[7] += c2; 00451 digest[8] += d2; 00452 digest[9] += e2; 00453 } 00454 00455 <span class="preprocessor">#undef Subround</span> 00456 <span class="preprocessor"></span> 00457 <span class="comment">// *************************************************************</span> 00458 00459 <span class="comment">// for 128 and 256</span> 00460 <span class="preprocessor">#define Subround(f, a, b, c, d, x, s, k) \</span> 00461 <span class="preprocessor"> a += f(b, c, d) + x + k;\</span> 00462 <span class="preprocessor"> a = rotlFixed((word32)a, s);</span> 00463 <span class="preprocessor"></span> 00464 <span class="keywordtype">void</span> RIPEMD128::InitState(HashWordType *state) 00465 { 00466 state[0] = 0x67452301L; 00467 state[1] = 0xefcdab89L; 00468 state[2] = 0x98badcfeL; 00469 state[3] = 0x10325476L; 00470 } 00471 00472 <span class="keywordtype">void</span> RIPEMD128::Transform (word32 *digest, <span class="keyword">const</span> word32 *X) 00473 { 00474 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> a1, b1, c1, d1, a2, b2, c2, d2; 00475 a1 = a2 = digest[0]; 00476 b1 = b2 = digest[1]; 00477 c1 = c2 = digest[2]; 00478 d1 = d2 = digest[3]; 00479 00480 Subround(F, a1, b1, c1, d1, X[ 0], 11, k0); 00481 Subround(F, d1, a1, b1, c1, X[ 1], 14, k0); 00482 Subround(F, c1, d1, a1, b1, X[ 2], 15, k0); 00483 Subround(F, b1, c1, d1, a1, X[ 3], 12, k0); 00484 Subround(F, a1, b1, c1, d1, X[ 4], 5, k0); 00485 Subround(F, d1, a1, b1, c1, X[ 5], 8, k0); 00486 Subround(F, c1, d1, a1, b1, X[ 6], 7, k0); 00487 Subround(F, b1, c1, d1, a1, X[ 7], 9, k0); 00488 Subround(F, a1, b1, c1, d1, X[ 8], 11, k0); 00489 Subround(F, d1, a1, b1, c1, X[ 9], 13, k0); 00490 Subround(F, c1, d1, a1, b1, X[10], 14, k0); 00491 Subround(F, b1, c1, d1, a1, X[11], 15, k0); 00492 Subround(F, a1, b1, c1, d1, X[12], 6, k0); 00493 Subround(F, d1, a1, b1, c1, X[13], 7, k0); 00494 Subround(F, c1, d1, a1, b1, X[14], 9, k0); 00495 Subround(F, b1, c1, d1, a1, X[15], 8, k0); 00496 00497 Subround(G, a1, b1, c1, d1, X[ 7], 7, k1); 00498 Subround(G, d1, a1, b1, c1, X[ 4], 6, k1); 00499 Subround(G, c1, d1, a1, b1, X[13], 8, k1); 00500 Subround(G, b1, c1, d1, a1, X[ 1], 13, k1); 00501 Subround(G, a1, b1, c1, d1, X[10], 11, k1); 00502 Subround(G, d1, a1, b1, c1, X[ 6], 9, k1); 00503 Subround(G, c1, d1, a1, b1, X[15], 7, k1); 00504 Subround(G, b1, c1, d1, a1, X[ 3], 15, k1); 00505 Subround(G, a1, b1, c1, d1, X[12], 7, k1); 00506 Subround(G, d1, a1, b1, c1, X[ 0], 12, k1); 00507 Subround(G, c1, d1, a1, b1, X[ 9], 15, k1); 00508 Subround(G, b1, c1, d1, a1, X[ 5], 9, k1); 00509 Subround(G, a1, b1, c1, d1, X[ 2], 11, k1); 00510 Subround(G, d1, a1, b1, c1, X[14], 7, k1); 00511 Subround(G, c1, d1, a1, b1, X[11], 13, k1); 00512 Subround(G, b1, c1, d1, a1, X[ 8], 12, k1); 00513 00514 Subround(H, a1, b1, c1, d1, X[ 3], 11, k2); 00515 Subround(H, d1, a1, b1, c1, X[10], 13, k2); 00516 Subround(H, c1, d1, a1, b1, X[14], 6, k2); 00517 Subround(H, b1, c1, d1, a1, X[ 4], 7, k2); 00518 Subround(H, a1, b1, c1, d1, X[ 9], 14, k2); 00519 Subround(H, d1, a1, b1, c1, X[15], 9, k2); 00520 Subround(H, c1, d1, a1, b1, X[ 8], 13, k2); 00521 Subround(H, b1, c1, d1, a1, X[ 1], 15, k2); 00522 Subround(H, a1, b1, c1, d1, X[ 2], 14, k2); 00523 Subround(H, d1, a1, b1, c1, X[ 7], 8, k2); 00524 Subround(H, c1, d1, a1, b1, X[ 0], 13, k2); 00525 Subround(H, b1, c1, d1, a1, X[ 6], 6, k2); 00526 Subround(H, a1, b1, c1, d1, X[13], 5, k2); 00527 Subround(H, d1, a1, b1, c1, X[11], 12, k2); 00528 Subround(H, c1, d1, a1, b1, X[ 5], 7, k2); 00529 Subround(H, b1, c1, d1, a1, X[12], 5, k2); 00530 00531 Subround(I, a1, b1, c1, d1, X[ 1], 11, k3); 00532 Subround(I, d1, a1, b1, c1, X[ 9], 12, k3); 00533 Subround(I, c1, d1, a1, b1, X[11], 14, k3); 00534 Subround(I, b1, c1, d1, a1, X[10], 15, k3); 00535 Subround(I, a1, b1, c1, d1, X[ 0], 14, k3); 00536 Subround(I, d1, a1, b1, c1, X[ 8], 15, k3); 00537 Subround(I, c1, d1, a1, b1, X[12], 9, k3); 00538 Subround(I, b1, c1, d1, a1, X[ 4], 8, k3); 00539 Subround(I, a1, b1, c1, d1, X[13], 9, k3); 00540 Subround(I, d1, a1, b1, c1, X[ 3], 14, k3); 00541 Subround(I, c1, d1, a1, b1, X[ 7], 5, k3); 00542 Subround(I, b1, c1, d1, a1, X[15], 6, k3); 00543 Subround(I, a1, b1, c1, d1, X[14], 8, k3); 00544 Subround(I, d1, a1, b1, c1, X[ 5], 6, k3); 00545 Subround(I, c1, d1, a1, b1, X[ 6], 5, k3); 00546 Subround(I, b1, c1, d1, a1, X[ 2], 12, k3); 00547 00548 Subround(I, a2, b2, c2, d2, X[ 5], 8, k5); 00549 Subround(I, d2, a2, b2, c2, X[14], 9, k5); 00550 Subround(I, c2, d2, a2, b2, X[ 7], 9, k5); 00551 Subround(I, b2, c2, d2, a2, X[ 0], 11, k5); 00552 Subround(I, a2, b2, c2, d2, X[ 9], 13, k5); 00553 Subround(I, d2, a2, b2, c2, X[ 2], 15, k5); 00554 Subround(I, c2, d2, a2, b2, X[11], 15, k5); 00555 Subround(I, b2, c2, d2, a2, X[ 4], 5, k5); 00556 Subround(I, a2, b2, c2, d2, X[13], 7, k5); 00557 Subround(I, d2, a2, b2, c2, X[ 6], 7, k5); 00558 Subround(I, c2, d2, a2, b2, X[15], 8, k5); 00559 Subround(I, b2, c2, d2, a2, X[ 8], 11, k5); 00560 Subround(I, a2, b2, c2, d2, X[ 1], 14, k5); 00561 Subround(I, d2, a2, b2, c2, X[10], 14, k5); 00562 Subround(I, c2, d2, a2, b2, X[ 3], 12, k5); 00563 Subround(I, b2, c2, d2, a2, X[12], 6, k5); 00564 00565 Subround(H, a2, b2, c2, d2, X[ 6], 9, k6); 00566 Subround(H, d2, a2, b2, c2, X[11], 13, k6); 00567 Subround(H, c2, d2, a2, b2, X[ 3], 15, k6); 00568 Subround(H, b2, c2, d2, a2, X[ 7], 7, k6); 00569 Subround(H, a2, b2, c2, d2, X[ 0], 12, k6); 00570 Subround(H, d2, a2, b2, c2, X[13], 8, k6); 00571 Subround(H, c2, d2, a2, b2, X[ 5], 9, k6); 00572 Subround(H, b2, c2, d2, a2, X[10], 11, k6); 00573 Subround(H, a2, b2, c2, d2, X[14], 7, k6); 00574 Subround(H, d2, a2, b2, c2, X[15], 7, k6); 00575 Subround(H, c2, d2, a2, b2, X[ 8], 12, k6); 00576 Subround(H, b2, c2, d2, a2, X[12], 7, k6); 00577 Subround(H, a2, b2, c2, d2, X[ 4], 6, k6); 00578 Subround(H, d2, a2, b2, c2, X[ 9], 15, k6); 00579 Subround(H, c2, d2, a2, b2, X[ 1], 13, k6); 00580 Subround(H, b2, c2, d2, a2, X[ 2], 11, k6); 00581 00582 Subround(G, a2, b2, c2, d2, X[15], 9, k7); 00583 Subround(G, d2, a2, b2, c2, X[ 5], 7, k7); 00584 Subround(G, c2, d2, a2, b2, X[ 1], 15, k7); 00585 Subround(G, b2, c2, d2, a2, X[ 3], 11, k7); 00586 Subround(G, a2, b2, c2, d2, X[ 7], 8, k7); 00587 Subround(G, d2, a2, b2, c2, X[14], 6, k7); 00588 Subround(G, c2, d2, a2, b2, X[ 6], 6, k7); 00589 Subround(G, b2, c2, d2, a2, X[ 9], 14, k7); 00590 Subround(G, a2, b2, c2, d2, X[11], 12, k7); 00591 Subround(G, d2, a2, b2, c2, X[ 8], 13, k7); 00592 Subround(G, c2, d2, a2, b2, X[12], 5, k7); 00593 Subround(G, b2, c2, d2, a2, X[ 2], 14, k7); 00594 Subround(G, a2, b2, c2, d2, X[10], 13, k7); 00595 Subround(G, d2, a2, b2, c2, X[ 0], 13, k7); 00596 Subround(G, c2, d2, a2, b2, X[ 4], 7, k7); 00597 Subround(G, b2, c2, d2, a2, X[13], 5, k7); 00598 00599 Subround(F, a2, b2, c2, d2, X[ 8], 15, k9); 00600 Subround(F, d2, a2, b2, c2, X[ 6], 5, k9); 00601 Subround(F, c2, d2, a2, b2, X[ 4], 8, k9); 00602 Subround(F, b2, c2, d2, a2, X[ 1], 11, k9); 00603 Subround(F, a2, b2, c2, d2, X[ 3], 14, k9); 00604 Subround(F, d2, a2, b2, c2, X[11], 14, k9); 00605 Subround(F, c2, d2, a2, b2, X[15], 6, k9); 00606 Subround(F, b2, c2, d2, a2, X[ 0], 14, k9); 00607 Subround(F, a2, b2, c2, d2, X[ 5], 6, k9); 00608 Subround(F, d2, a2, b2, c2, X[12], 9, k9); 00609 Subround(F, c2, d2, a2, b2, X[ 2], 12, k9); 00610 Subround(F, b2, c2, d2, a2, X[13], 9, k9); 00611 Subround(F, a2, b2, c2, d2, X[ 9], 12, k9); 00612 Subround(F, d2, a2, b2, c2, X[ 7], 5, k9); 00613 Subround(F, c2, d2, a2, b2, X[10], 15, k9); 00614 Subround(F, b2, c2, d2, a2, X[14], 8, k9); 00615 00616 c1 = digest[1] + c1 + d2; 00617 digest[1] = digest[2] + d1 + a2; 00618 digest[2] = digest[3] + a1 + b2; 00619 digest[3] = digest[0] + b1 + c2; 00620 digest[0] = c1; 00621 } 00622 00623 <span class="comment">// *************************************************************</span> 00624 00625 <span class="keywordtype">void</span> RIPEMD256::InitState(HashWordType *state) 00626 { 00627 state[0] = 0x67452301L; 00628 state[1] = 0xefcdab89L; 00629 state[2] = 0x98badcfeL; 00630 state[3] = 0x10325476L; 00631 state[4] = 0x76543210L; 00632 state[5] = 0xfedcba98L; 00633 state[6] = 0x89abcdefL; 00634 state[7] = 0x01234567L; 00635 } 00636 00637 <span class="keywordtype">void</span> RIPEMD256::Transform (word32 *digest, <span class="keyword">const</span> word32 *X) 00638 { 00639 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> a1, b1, c1, d1, a2, b2, c2, d2, t; 00640 a1 = digest[0]; 00641 b1 = digest[1]; 00642 c1 = digest[2]; 00643 d1 = digest[3]; 00644 a2 = digest[4]; 00645 b2 = digest[5]; 00646 c2 = digest[6]; 00647 d2 = digest[7]; 00648 00649 Subround(F, a1, b1, c1, d1, X[ 0], 11, k0); 00650 Subround(F, d1, a1, b1, c1, X[ 1], 14, k0); 00651 Subround(F, c1, d1, a1, b1, X[ 2], 15, k0); 00652 Subround(F, b1, c1, d1, a1, X[ 3], 12, k0); 00653 Subround(F, a1, b1, c1, d1, X[ 4], 5, k0); 00654 Subround(F, d1, a1, b1, c1, X[ 5], 8, k0); 00655 Subround(F, c1, d1, a1, b1, X[ 6], 7, k0); 00656 Subround(F, b1, c1, d1, a1, X[ 7], 9, k0); 00657 Subround(F, a1, b1, c1, d1, X[ 8], 11, k0); 00658 Subround(F, d1, a1, b1, c1, X[ 9], 13, k0); 00659 Subround(F, c1, d1, a1, b1, X[10], 14, k0); 00660 Subround(F, b1, c1, d1, a1, X[11], 15, k0); 00661 Subround(F, a1, b1, c1, d1, X[12], 6, k0); 00662 Subround(F, d1, a1, b1, c1, X[13], 7, k0); 00663 Subround(F, c1, d1, a1, b1, X[14], 9, k0); 00664 Subround(F, b1, c1, d1, a1, X[15], 8, k0); 00665 00666 Subround(I, a2, b2, c2, d2, X[ 5], 8, k5); 00667 Subround(I, d2, a2, b2, c2, X[14], 9, k5); 00668 Subround(I, c2, d2, a2, b2, X[ 7], 9, k5); 00669 Subround(I, b2, c2, d2, a2, X[ 0], 11, k5); 00670 Subround(I, a2, b2, c2, d2, X[ 9], 13, k5); 00671 Subround(I, d2, a2, b2, c2, X[ 2], 15, k5); 00672 Subround(I, c2, d2, a2, b2, X[11], 15, k5); 00673 Subround(I, b2, c2, d2, a2, X[ 4], 5, k5); 00674 Subround(I, a2, b2, c2, d2, X[13], 7, k5); 00675 Subround(I, d2, a2, b2, c2, X[ 6], 7, k5); 00676 Subround(I, c2, d2, a2, b2, X[15], 8, k5); 00677 Subround(I, b2, c2, d2, a2, X[ 8], 11, k5); 00678 Subround(I, a2, b2, c2, d2, X[ 1], 14, k5); 00679 Subround(I, d2, a2, b2, c2, X[10], 14, k5); 00680 Subround(I, c2, d2, a2, b2, X[ 3], 12, k5); 00681 Subround(I, b2, c2, d2, a2, X[12], 6, k5); 00682 00683 t = a1; a1 = a2; a2 = t; 00684 00685 Subround(G, a1, b1, c1, d1, X[ 7], 7, k1); 00686 Subround(G, d1, a1, b1, c1, X[ 4], 6, k1); 00687 Subround(G, c1, d1, a1, b1, X[13], 8, k1); 00688 Subround(G, b1, c1, d1, a1, X[ 1], 13, k1); 00689 Subround(G, a1, b1, c1, d1, X[10], 11, k1); 00690 Subround(G, d1, a1, b1, c1, X[ 6], 9, k1); 00691 Subround(G, c1, d1, a1, b1, X[15], 7, k1); 00692 Subround(G, b1, c1, d1, a1, X[ 3], 15, k1); 00693 Subround(G, a1, b1, c1, d1, X[12], 7, k1); 00694 Subround(G, d1, a1, b1, c1, X[ 0], 12, k1); 00695 Subround(G, c1, d1, a1, b1, X[ 9], 15, k1); 00696 Subround(G, b1, c1, d1, a1, X[ 5], 9, k1); 00697 Subround(G, a1, b1, c1, d1, X[ 2], 11, k1); 00698 Subround(G, d1, a1, b1, c1, X[14], 7, k1); 00699 Subround(G, c1, d1, a1, b1, X[11], 13, k1); 00700 Subround(G, b1, c1, d1, a1, X[ 8], 12, k1); 00701 00702 Subround(H, a2, b2, c2, d2, X[ 6], 9, k6); 00703 Subround(H, d2, a2, b2, c2, X[11], 13, k6); 00704 Subround(H, c2, d2, a2, b2, X[ 3], 15, k6); 00705 Subround(H, b2, c2, d2, a2, X[ 7], 7, k6); 00706 Subround(H, a2, b2, c2, d2, X[ 0], 12, k6); 00707 Subround(H, d2, a2, b2, c2, X[13], 8, k6); 00708 Subround(H, c2, d2, a2, b2, X[ 5], 9, k6); 00709 Subround(H, b2, c2, d2, a2, X[10], 11, k6); 00710 Subround(H, a2, b2, c2, d2, X[14], 7, k6); 00711 Subround(H, d2, a2, b2, c2, X[15], 7, k6); 00712 Subround(H, c2, d2, a2, b2, X[ 8], 12, k6); 00713 Subround(H, b2, c2, d2, a2, X[12], 7, k6); 00714 Subround(H, a2, b2, c2, d2, X[ 4], 6, k6); 00715 Subround(H, d2, a2, b2, c2, X[ 9], 15, k6); 00716 Subround(H, c2, d2, a2, b2, X[ 1], 13, k6); 00717 Subround(H, b2, c2, d2, a2, X[ 2], 11, k6); 00718 00719 t = b1; b1 = b2; b2 = t; 00720 00721 Subround(H, a1, b1, c1, d1, X[ 3], 11, k2); 00722 Subround(H, d1, a1, b1, c1, X[10], 13, k2); 00723 Subround(H, c1, d1, a1, b1, X[14], 6, k2); 00724 Subround(H, b1, c1, d1, a1, X[ 4], 7, k2); 00725 Subround(H, a1, b1, c1, d1, X[ 9], 14, k2); 00726 Subround(H, d1, a1, b1, c1, X[15], 9, k2); 00727 Subround(H, c1, d1, a1, b1, X[ 8], 13, k2); 00728 Subround(H, b1, c1, d1, a1, X[ 1], 15, k2); 00729 Subround(H, a1, b1, c1, d1, X[ 2], 14, k2); 00730 Subround(H, d1, a1, b1, c1, X[ 7], 8, k2); 00731 Subround(H, c1, d1, a1, b1, X[ 0], 13, k2); 00732 Subround(H, b1, c1, d1, a1, X[ 6], 6, k2); 00733 Subround(H, a1, b1, c1, d1, X[13], 5, k2); 00734 Subround(H, d1, a1, b1, c1, X[11], 12, k2); 00735 Subround(H, c1, d1, a1, b1, X[ 5], 7, k2); 00736 Subround(H, b1, c1, d1, a1, X[12], 5, k2); 00737 00738 Subround(G, a2, b2, c2, d2, X[15], 9, k7); 00739 Subround(G, d2, a2, b2, c2, X[ 5], 7, k7); 00740 Subround(G, c2, d2, a2, b2, X[ 1], 15, k7); 00741 Subround(G, b2, c2, d2, a2, X[ 3], 11, k7); 00742 Subround(G, a2, b2, c2, d2, X[ 7], 8, k7); 00743 Subround(G, d2, a2, b2, c2, X[14], 6, k7); 00744 Subround(G, c2, d2, a2, b2, X[ 6], 6, k7); 00745 Subround(G, b2, c2, d2, a2, X[ 9], 14, k7); 00746 Subround(G, a2, b2, c2, d2, X[11], 12, k7); 00747 Subround(G, d2, a2, b2, c2, X[ 8], 13, k7); 00748 Subround(G, c2, d2, a2, b2, X[12], 5, k7); 00749 Subround(G, b2, c2, d2, a2, X[ 2], 14, k7); 00750 Subround(G, a2, b2, c2, d2, X[10], 13, k7); 00751 Subround(G, d2, a2, b2, c2, X[ 0], 13, k7); 00752 Subround(G, c2, d2, a2, b2, X[ 4], 7, k7); 00753 Subround(G, b2, c2, d2, a2, X[13], 5, k7); 00754 00755 t = c1; c1 = c2; c2 = t; 00756 00757 Subround(I, a1, b1, c1, d1, X[ 1], 11, k3); 00758 Subround(I, d1, a1, b1, c1, X[ 9], 12, k3); 00759 Subround(I, c1, d1, a1, b1, X[11], 14, k3); 00760 Subround(I, b1, c1, d1, a1, X[10], 15, k3); 00761 Subround(I, a1, b1, c1, d1, X[ 0], 14, k3); 00762 Subround(I, d1, a1, b1, c1, X[ 8], 15, k3); 00763 Subround(I, c1, d1, a1, b1, X[12], 9, k3); 00764 Subround(I, b1, c1, d1, a1, X[ 4], 8, k3); 00765 Subround(I, a1, b1, c1, d1, X[13], 9, k3); 00766 Subround(I, d1, a1, b1, c1, X[ 3], 14, k3); 00767 Subround(I, c1, d1, a1, b1, X[ 7], 5, k3); 00768 Subround(I, b1, c1, d1, a1, X[15], 6, k3); 00769 Subround(I, a1, b1, c1, d1, X[14], 8, k3); 00770 Subround(I, d1, a1, b1, c1, X[ 5], 6, k3); 00771 Subround(I, c1, d1, a1, b1, X[ 6], 5, k3); 00772 Subround(I, b1, c1, d1, a1, X[ 2], 12, k3); 00773 00774 Subround(F, a2, b2, c2, d2, X[ 8], 15, k9); 00775 Subround(F, d2, a2, b2, c2, X[ 6], 5, k9); 00776 Subround(F, c2, d2, a2, b2, X[ 4], 8, k9); 00777 Subround(F, b2, c2, d2, a2, X[ 1], 11, k9); 00778 Subround(F, a2, b2, c2, d2, X[ 3], 14, k9); 00779 Subround(F, d2, a2, b2, c2, X[11], 14, k9); 00780 Subround(F, c2, d2, a2, b2, X[15], 6, k9); 00781 Subround(F, b2, c2, d2, a2, X[ 0], 14, k9); 00782 Subround(F, a2, b2, c2, d2, X[ 5], 6, k9); 00783 Subround(F, d2, a2, b2, c2, X[12], 9, k9); 00784 Subround(F, c2, d2, a2, b2, X[ 2], 12, k9); 00785 Subround(F, b2, c2, d2, a2, X[13], 9, k9); 00786 Subround(F, a2, b2, c2, d2, X[ 9], 12, k9); 00787 Subround(F, d2, a2, b2, c2, X[ 7], 5, k9); 00788 Subround(F, c2, d2, a2, b2, X[10], 15, k9); 00789 Subround(F, b2, c2, d2, a2, X[14], 8, k9); 00790 00791 t = d1; d1 = d2; d2 = t; 00792 00793 digest[0] += a1; 00794 digest[1] += b1; 00795 digest[2] += c1; 00796 digest[3] += d1; 00797 digest[4] += a2; 00798 digest[5] += b2; 00799 digest[6] += c2; 00800 digest[7] += d2; 00801 } 00802 00803 NAMESPACE_END </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>