📄 rijndael_8cpp-source.html
字号:
00191 Te0[GETBYTE(s1, 3)] ^00192 Te1[GETBYTE(s2, 2)] ^00193 Te2[GETBYTE(s3, 1)] ^00194 Te3[GETBYTE(s0, 0)] ^00195 rk[5];00196 t2 =00197 Te0[GETBYTE(s2, 3)] ^00198 Te1[GETBYTE(s3, 2)] ^00199 Te2[GETBYTE(s0, 1)] ^00200 Te3[GETBYTE(s1, 0)] ^00201 rk[6];00202 t3 =00203 Te0[GETBYTE(s3, 3)] ^00204 Te1[GETBYTE(s0, 2)] ^00205 Te2[GETBYTE(s1, 1)] ^00206 Te3[GETBYTE(s2, 0)] ^00207 rk[7];00208 00209 rk += 8;00210 <span class="keywordflow">if</span> (--r == 0) {00211 <span class="keywordflow">break</span>;00212 }00213 00214 s0 =00215 Te0[GETBYTE(t0, 3)] ^00216 Te1[GETBYTE(t1, 2)] ^00217 Te2[GETBYTE(t2, 1)] ^00218 Te3[GETBYTE(t3, 0)] ^00219 rk[0];00220 s1 =00221 Te0[GETBYTE(t1, 3)] ^00222 Te1[GETBYTE(t2, 2)] ^00223 Te2[GETBYTE(t3, 1)] ^00224 Te3[GETBYTE(t0, 0)] ^00225 rk[1];00226 s2 =00227 Te0[GETBYTE(t2, 3)] ^00228 Te1[GETBYTE(t3, 2)] ^00229 Te2[GETBYTE(t0, 1)] ^00230 Te3[GETBYTE(t1, 0)] ^00231 rk[2];00232 s3 =00233 Te0[GETBYTE(t3, 3)] ^00234 Te1[GETBYTE(t0, 2)] ^00235 Te2[GETBYTE(t1, 1)] ^00236 Te3[GETBYTE(t2, 0)] ^00237 rk[3];00238 }00239 <span class="comment">/*</span>00240 <span class="comment"> * apply last round and</span>00241 <span class="comment"> * map cipher state to byte array block:</span>00242 <span class="comment"> */</span>00243 00244 s0 =00245 (Te4[GETBYTE(t0, 3)] & 0xff000000) ^00246 (Te4[GETBYTE(t1, 2)] & 0x00ff0000) ^00247 (Te4[GETBYTE(t2, 1)] & 0x0000ff00) ^00248 (Te4[GETBYTE(t3, 0)] & 0x000000ff) ^00249 rk[0];00250 s1 =00251 (Te4[GETBYTE(t1, 3)] & 0xff000000) ^00252 (Te4[GETBYTE(t2, 2)] & 0x00ff0000) ^00253 (Te4[GETBYTE(t3, 1)] & 0x0000ff00) ^00254 (Te4[GETBYTE(t0, 0)] & 0x000000ff) ^00255 rk[1];00256 s2 =00257 (Te4[GETBYTE(t2, 3)] & 0xff000000) ^00258 (Te4[GETBYTE(t3, 2)] & 0x00ff0000) ^00259 (Te4[GETBYTE(t0, 1)] & 0x0000ff00) ^00260 (Te4[GETBYTE(t1, 0)] & 0x000000ff) ^00261 rk[2];00262 s3 =00263 (Te4[GETBYTE(t3, 3)] & 0xff000000) ^00264 (Te4[GETBYTE(t0, 2)] & 0x00ff0000) ^00265 (Te4[GETBYTE(t1, 1)] & 0x0000ff00) ^00266 (Te4[GETBYTE(t2, 0)] & 0x000000ff) ^00267 rk[3];00268 00269 Block::Put(xorBlock, outBlock)(s0)(s1)(s2)(s3);00270 }00271 00272 <span class="keywordtype">void</span> Rijndael::Dec::ProcessAndXorBlock(<span class="keyword">const</span> byte *inBlock, <span class="keyword">const</span> byte *xorBlock, byte *outBlock)<span class="keyword"> const</span>00273 <span class="keyword"></span>{00274 word32 s0, s1, s2, s3, t0, t1, t2, t3;00275 <span class="keyword">const</span> word32 *rk = m_key;00276 00277 <span class="comment">/*</span>00278 <span class="comment"> * map byte array block to cipher state</span>00279 <span class="comment"> * and add initial round key:</span>00280 <span class="comment"> */</span>00281 Block::Get(inBlock)(s0)(s1)(s2)(s3);00282 s0 ^= rk[0];00283 s1 ^= rk[1];00284 s2 ^= rk[2];00285 s3 ^= rk[3];00286 <span class="comment">/*</span>00287 <span class="comment"> * Nr - 1 full rounds:</span>00288 <span class="comment"> */</span>00289 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> r = m_rounds >> 1;00290 <span class="keywordflow">for</span> (;;) {00291 t0 =00292 Td0[GETBYTE(s0, 3)] ^00293 Td1[GETBYTE(s3, 2)] ^00294 Td2[GETBYTE(s2, 1)] ^00295 Td3[GETBYTE(s1, 0)] ^00296 rk[4];00297 t1 =00298 Td0[GETBYTE(s1, 3)] ^00299 Td1[GETBYTE(s0, 2)] ^00300 Td2[GETBYTE(s3, 1)] ^00301 Td3[GETBYTE(s2, 0)] ^00302 rk[5];00303 t2 =00304 Td0[GETBYTE(s2, 3)] ^00305 Td1[GETBYTE(s1, 2)] ^00306 Td2[GETBYTE(s0, 1)] ^00307 Td3[GETBYTE(s3, 0)] ^00308 rk[6];00309 t3 =00310 Td0[GETBYTE(s3, 3)] ^00311 Td1[GETBYTE(s2, 2)] ^00312 Td2[GETBYTE(s1, 1)] ^00313 Td3[GETBYTE(s0, 0)] ^00314 rk[7];00315 00316 rk += 8;00317 <span class="keywordflow">if</span> (--r == 0) {00318 <span class="keywordflow">break</span>;00319 }00320 00321 s0 =00322 Td0[GETBYTE(t0, 3)] ^00323 Td1[GETBYTE(t3, 2)] ^00324 Td2[GETBYTE(t2, 1)] ^00325 Td3[GETBYTE(t1, 0)] ^00326 rk[0];00327 s1 =00328 Td0[GETBYTE(t1, 3)] ^00329 Td1[GETBYTE(t0, 2)] ^00330 Td2[GETBYTE(t3, 1)] ^00331 Td3[GETBYTE(t2, 0)] ^00332 rk[1];00333 s2 =00334 Td0[GETBYTE(t2, 3)] ^00335 Td1[GETBYTE(t1, 2)] ^00336 Td2[GETBYTE(t0, 1)] ^00337 Td3[GETBYTE(t3, 0)] ^00338 rk[2];00339 s3 =00340 Td0[GETBYTE(t3, 3)] ^00341 Td1[GETBYTE(t2, 2)] ^00342 Td2[GETBYTE(t1, 1)] ^00343 Td3[GETBYTE(t0, 0)] ^00344 rk[3];00345 }00346 <span class="comment">/*</span>00347 <span class="comment"> * apply last round and</span>00348 <span class="comment"> * map cipher state to byte array block:</span>00349 <span class="comment"> */</span>00350 s0 =00351 (Td4[GETBYTE(t0, 3)] & 0xff000000) ^00352 (Td4[GETBYTE(t3, 2)] & 0x00ff0000) ^00353 (Td4[GETBYTE(t2, 1)] & 0x0000ff00) ^00354 (Td4[GETBYTE(t1, 0)] & 0x000000ff) ^00355 rk[0];00356 s1 =00357 (Td4[GETBYTE(t1, 3)] & 0xff000000) ^00358 (Td4[GETBYTE(t0, 2)] & 0x00ff0000) ^00359 (Td4[GETBYTE(t3, 1)] & 0x0000ff00) ^00360 (Td4[GETBYTE(t2, 0)] & 0x000000ff) ^00361 rk[1];00362 s2 =00363 (Td4[GETBYTE(t2, 3)] & 0xff000000) ^00364 (Td4[GETBYTE(t1, 2)] & 0x00ff0000) ^00365 (Td4[GETBYTE(t0, 1)] & 0x0000ff00) ^00366 (Td4[GETBYTE(t3, 0)] & 0x000000ff) ^00367 rk[2];00368 s3 =00369 (Td4[GETBYTE(t3, 3)] & 0xff000000) ^00370 (Td4[GETBYTE(t2, 2)] & 0x00ff0000) ^00371 (Td4[GETBYTE(t1, 1)] & 0x0000ff00) ^00372 (Td4[GETBYTE(t0, 0)] & 0x000000ff) ^00373 rk[3];00374 00375 Block::Put(xorBlock, outBlock)(s0)(s1)(s2)(s3);00376 }00377 00378 NAMESPACE_END00379 00380 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:23 2003 for Crypto++ by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.2 </small></address></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -