⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 diamond_8cpp-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 3 页
字号:
00386 00387         memcpy(x, y, 16);00388 }00389 00390 <span class="preprocessor">#endif // DIAMOND_USE_PERMTABLE</span>00391 <span class="preprocessor"></span>00392 <span class="keywordtype">void</span> Diamond2::Enc::ProcessAndXorBlock(<span class="keyword">const</span> byte *inBlock, <span class="keyword">const</span> byte *xorBlock, byte *outBlock)<span class="keyword"> const</span>00393 <span class="keyword"></span>{00394         <span class="keyword">const</span> byte *x = inBlock;00395         byte y[16];00396 00397         substitute(0, y, x);00398         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> round=1; round &lt; numrounds; round++)00399         {00400                 permute(y);00401                 substitute(round, y, y);00402         }00403 00404         <span class="keywordflow">if</span> (xorBlock)00405                 xorbuf(outBlock, xorBlock, y, BLOCKSIZE);00406         <span class="keywordflow">else</span>00407                 memcpy(outBlock, y, BLOCKSIZE);00408 }00409 00410 <span class="keywordtype">void</span> Diamond2::Dec::ProcessAndXorBlock(<span class="keyword">const</span> byte *inBlock, <span class="keyword">const</span> byte *xorBlock, byte *outBlock)<span class="keyword"> const</span>00411 <span class="keyword"></span>{00412         <span class="keyword">const</span> byte *x = inBlock;00413         byte y[16];00414 00415         substitute(numrounds-1, y, x);00416         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> round=numrounds-2; round &gt;= 0; round--)00417         {00418                 ipermute(y);00419                 substitute(round, y, y);00420         }00421 00422         <span class="keywordflow">if</span> (xorBlock)00423                 xorbuf(outBlock, xorBlock, y, BLOCKSIZE);00424         <span class="keywordflow">else</span>00425                 memcpy(outBlock, y, BLOCKSIZE);00426 }00427 00428 <span class="keywordtype">void</span> Diamond2Lite::Base::UncheckedSetKey(CipherDir direction, <span class="keyword">const</span> byte *userKey, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rounds)00429 {00430         AssertValidKeyLength(length);00431 00432         numrounds = rounds;00433         s.New(numrounds * ROUNDSIZE);00434 00435         Diamond2SboxMaker m(userKey, length, rounds, <span class="keyword">true</span>);00436         m.MakeSbox(s, direction);00437 }00438 00439 <span class="keyword">inline</span> <span class="keywordtype">void</span> Diamond2Lite::Base::substitute(<span class="keywordtype">int</span> round, byte *x, <span class="keyword">const</span> byte *y)<span class="keyword"> const</span>00440 <span class="keyword"></span>{00441         <span class="keyword">const</span> byte *sbox = s + (ROUNDSIZE*round);00442         x[0] = sbox[0*256+y[0]];00443         x[1] = sbox[1*256+y[1]];00444         x[2] = sbox[2*256+y[2]];00445         x[3] = sbox[3*256+y[3]];00446         x[4] = sbox[4*256+y[4]];00447         x[5] = sbox[5*256+y[5]];00448         x[6] = sbox[6*256+y[6]];00449         x[7] = sbox[7*256+y[7]];00450 }00451 00452 <span class="preprocessor">#ifdef DIAMOND_USE_PERMTABLE</span>00453 <span class="preprocessor"></span>00454 <span class="keyword">inline</span> <span class="keywordtype">void</span> Diamond2Lite::Base::permute(byte *a)00455 {00456         word32 temp      = permtable[0][a[0]] | permtable[1][a[1]] |00457                                            permtable[2][a[2]] | permtable[3][a[3]] |00458                                            permtable[4][a[4]] | permtable[5][a[5]] |00459                                            permtable[6][a[6]] | permtable[7][a[7]];00460 00461         ((word32 *)a)[1] = permtable[0][a[4]] | permtable[1][a[5]] |00462                                            permtable[2][a[6]] | permtable[3][a[7]] |00463                                            permtable[4][a[0]] | permtable[5][a[1]] |00464                                            permtable[6][a[2]] | permtable[7][a[3]];00465 00466         ((word32 *)a)[0] = temp;00467 }00468 00469 <span class="keyword">inline</span> <span class="keywordtype">void</span> Diamond2Lite::Base::ipermute(byte *a)00470 {00471         word32 temp      = ipermtable[0][a[0]] | ipermtable[1][a[1]] |00472                                            ipermtable[2][a[2]] | ipermtable[3][a[3]] |00473                                            ipermtable[4][a[4]] | ipermtable[5][a[5]] |00474                                            ipermtable[6][a[6]] | ipermtable[7][a[7]];00475 00476         ((word32 *)a)[1] = ipermtable[0][a[4]] | ipermtable[1][a[5]] |00477                                            ipermtable[2][a[6]] | ipermtable[3][a[7]] |00478                                            ipermtable[4][a[0]] | ipermtable[5][a[1]] |00479                                            ipermtable[6][a[2]] | ipermtable[7][a[3]];00480 00481         ((word32 *)a)[0] = temp;00482 }00483 00484 <span class="preprocessor">#else</span>00485 <span class="preprocessor"></span>00486 <span class="keyword">inline</span> <span class="keywordtype">void</span> Diamond2Lite::Base::permute(byte *a)00487 {00488         byte b[8];00489 00490         b[0] = (a[0] &amp; 1) + (a[1] &amp; 2) + (a[2] &amp; 4) + (a[3] &amp; 8) + (a[4] &amp; 0x10) +00491                 (a[5] &amp; 0x20) + (a[6] &amp; 0x40) + (a[7] &amp; 0x80);00492         b[1] = (a[1] &amp; 1) + (a[2] &amp; 2) + (a[3] &amp; 4) + (a[4] &amp; 8) + (a[5] &amp; 0x10) +00493                 (a[6] &amp; 0x20) + (a[7] &amp; 0x40) + (a[0] &amp; 0x80);00494         b[2] = (a[2] &amp; 1) + (a[3] &amp; 2) + (a[4] &amp; 4) + (a[5] &amp; 8) + (a[6] &amp; 0x10) +00495                 (a[7] &amp; 0x20) + (a[0] &amp; 0x40) + (a[1] &amp; 0x80);00496         b[3] = (a[3] &amp; 1) + (a[4] &amp; 2) + (a[5] &amp; 4) + (a[6] &amp; 8) + (a[7] &amp; 0x10) +00497                 (a[0] &amp; 0x20) + (a[1] &amp; 0x40) + (a[2] &amp; 0x80);00498         b[4] = (a[4] &amp; 1) + (a[5] &amp; 2) + (a[6] &amp; 4) + (a[7] &amp; 8) + (a[0] &amp; 0x10) +00499                 (a[1] &amp; 0x20) + (a[2] &amp; 0x40) + (a[3] &amp; 0x80);00500         b[5] = (a[5] &amp; 1) + (a[6] &amp; 2) + (a[7] &amp; 4) + (a[0] &amp; 8) + (a[1] &amp; 0x10) +00501                 (a[2] &amp; 0x20) + (a[3] &amp; 0x40) + (a[4] &amp; 0x80);00502         b[6] = (a[6] &amp; 1) + (a[7] &amp; 2) + (a[0] &amp; 4) + (a[1] &amp; 8) + (a[2] &amp; 0x10) +00503                 (a[3] &amp; 0x20) + (a[4] &amp; 0x40) + (a[5] &amp; 0x80);00504         b[7] = (a[7] &amp; 1) + (a[0] &amp; 2) + (a[1] &amp; 4) + (a[2] &amp; 8) + (a[3] &amp; 0x10) +00505                 (a[4] &amp; 0x20) + (a[5] &amp; 0x40) + (a[6] &amp; 0x80);00506 00507         memcpy(a, b, 8);00508 }00509 00510 <span class="keyword">inline</span> <span class="keywordtype">void</span> Diamond2Lite::Base::ipermute(byte *b)00511 {00512         byte a[8];00513 00514         a[0] = (b[0] &amp; 1) + (b[7] &amp; 2) + (b[6] &amp; 4) + (b[5] &amp; 8) + (b[4] &amp; 0x10) +00515                 (b[3] &amp; 0x20) + (b[2] &amp; 0x40) + (b[1] &amp; 0x80);00516         a[1] = (b[1] &amp; 1) + (b[0] &amp; 2) + (b[7] &amp; 4) + (b[6] &amp; 8) + (b[5] &amp; 0x10) +00517                 (b[4] &amp; 0x20) + (b[3] &amp; 0x40) + (b[2] &amp; 0x80);00518         a[2] = (b[2] &amp; 1) + (b[1] &amp; 2) + (b[0] &amp; 4) + (b[7] &amp; 8) + (b[6] &amp; 0x10) +00519                 (b[5] &amp; 0x20) + (b[4] &amp; 0x40) + (b[3] &amp; 0x80);00520         a[3] = (b[3] &amp; 1) + (b[2] &amp; 2) + (b[1] &amp; 4) + (b[0] &amp; 8) + (b[7] &amp; 0x10) +00521                 (b[6] &amp; 0x20) + (b[5] &amp; 0x40) + (b[4] &amp; 0x80);00522         a[4] = (b[4] &amp; 1) + (b[3] &amp; 2) + (b[2] &amp; 4) + (b[1] &amp; 8) + (b[0] &amp; 0x10) +00523                 (b[7] &amp; 0x20) + (b[6] &amp; 0x40) + (b[5] &amp; 0x80);00524         a[5] = (b[5] &amp; 1) + (b[4] &amp; 2) + (b[3] &amp; 4) + (b[2] &amp; 8) + (b[1] &amp; 0x10) +00525                 (b[0] &amp; 0x20) + (b[7] &amp; 0x40) + (b[6] &amp; 0x80);00526         a[6] = (b[6] &amp; 1) + (b[5] &amp; 2) + (b[4] &amp; 4) + (b[3] &amp; 8) + (b[2] &amp; 0x10) +00527                 (b[1] &amp; 0x20) + (b[0] &amp; 0x40) + (b[7] &amp; 0x80);00528         a[7] = (b[7] &amp; 1) + (b[6] &amp; 2) + (b[5] &amp; 4) + (b[4] &amp; 8) + (b[3] &amp; 0x10) +00529                 (b[2] &amp; 0x20) + (b[1] &amp; 0x40) + (b[0] &amp; 0x80);00530 00531         memcpy(b, a, 8);00532 }00533 00534 <span class="preprocessor">#endif // DIAMOND_USE_PERMTABLE</span>00535 <span class="preprocessor"></span>00536 <span class="keywordtype">void</span> Diamond2Lite::Enc::ProcessAndXorBlock(<span class="keyword">const</span> byte *inBlock, <span class="keyword">const</span> byte *xorBlock, byte *outBlock)<span class="keyword"> const</span>00537 <span class="keyword"></span>{00538         <span class="keyword">const</span> byte *x = inBlock;00539         byte y[8];00540 00541         substitute(0, y, x);00542         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> round=1; round &lt; numrounds; round++)00543         {00544                 permute(y);00545                 substitute(round, y, y);00546         }00547 00548         <span class="keywordflow">if</span> (xorBlock)00549                 xorbuf(outBlock, xorBlock, y, BLOCKSIZE);00550         <span class="keywordflow">else</span>00551                 memcpy(outBlock, y, BLOCKSIZE);00552 }00553 00554 <span class="keywordtype">void</span> Diamond2Lite::Dec::ProcessAndXorBlock(<span class="keyword">const</span> byte *inBlock, <span class="keyword">const</span> byte *xorBlock, byte *outBlock)<span class="keyword"> const</span>00555 <span class="keyword"></span>{00556         <span class="keyword">const</span> byte *x = inBlock;00557         byte y[8];00558 00559         substitute(numrounds-1, y, x);00560         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> round=numrounds-2; round &gt;= 0; round--)00561         {00562                 ipermute(y);00563                 substitute(round, y, y);00564         }00565 00566         <span class="keywordflow">if</span> (xorBlock)00567                 xorbuf(outBlock, xorBlock, y, BLOCKSIZE);00568         <span class="keywordflow">else</span>00569                 memcpy(outBlock, y, BLOCKSIZE);00570 }00571 00572 NAMESPACE_END</pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:12 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 + -