📄 diamond_8cpp-source.html
字号:
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 < 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 >= 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] & 1) + (a[1] & 2) + (a[2] & 4) + (a[3] & 8) + (a[4] & 0x10) +00491 (a[5] & 0x20) + (a[6] & 0x40) + (a[7] & 0x80);00492 b[1] = (a[1] & 1) + (a[2] & 2) + (a[3] & 4) + (a[4] & 8) + (a[5] & 0x10) +00493 (a[6] & 0x20) + (a[7] & 0x40) + (a[0] & 0x80);00494 b[2] = (a[2] & 1) + (a[3] & 2) + (a[4] & 4) + (a[5] & 8) + (a[6] & 0x10) +00495 (a[7] & 0x20) + (a[0] & 0x40) + (a[1] & 0x80);00496 b[3] = (a[3] & 1) + (a[4] & 2) + (a[5] & 4) + (a[6] & 8) + (a[7] & 0x10) +00497 (a[0] & 0x20) + (a[1] & 0x40) + (a[2] & 0x80);00498 b[4] = (a[4] & 1) + (a[5] & 2) + (a[6] & 4) + (a[7] & 8) + (a[0] & 0x10) +00499 (a[1] & 0x20) + (a[2] & 0x40) + (a[3] & 0x80);00500 b[5] = (a[5] & 1) + (a[6] & 2) + (a[7] & 4) + (a[0] & 8) + (a[1] & 0x10) +00501 (a[2] & 0x20) + (a[3] & 0x40) + (a[4] & 0x80);00502 b[6] = (a[6] & 1) + (a[7] & 2) + (a[0] & 4) + (a[1] & 8) + (a[2] & 0x10) +00503 (a[3] & 0x20) + (a[4] & 0x40) + (a[5] & 0x80);00504 b[7] = (a[7] & 1) + (a[0] & 2) + (a[1] & 4) + (a[2] & 8) + (a[3] & 0x10) +00505 (a[4] & 0x20) + (a[5] & 0x40) + (a[6] & 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] & 1) + (b[7] & 2) + (b[6] & 4) + (b[5] & 8) + (b[4] & 0x10) +00515 (b[3] & 0x20) + (b[2] & 0x40) + (b[1] & 0x80);00516 a[1] = (b[1] & 1) + (b[0] & 2) + (b[7] & 4) + (b[6] & 8) + (b[5] & 0x10) +00517 (b[4] & 0x20) + (b[3] & 0x40) + (b[2] & 0x80);00518 a[2] = (b[2] & 1) + (b[1] & 2) + (b[0] & 4) + (b[7] & 8) + (b[6] & 0x10) +00519 (b[5] & 0x20) + (b[4] & 0x40) + (b[3] & 0x80);00520 a[3] = (b[3] & 1) + (b[2] & 2) + (b[1] & 4) + (b[0] & 8) + (b[7] & 0x10) +00521 (b[6] & 0x20) + (b[5] & 0x40) + (b[4] & 0x80);00522 a[4] = (b[4] & 1) + (b[3] & 2) + (b[2] & 4) + (b[1] & 8) + (b[0] & 0x10) +00523 (b[7] & 0x20) + (b[6] & 0x40) + (b[5] & 0x80);00524 a[5] = (b[5] & 1) + (b[4] & 2) + (b[3] & 4) + (b[2] & 8) + (b[1] & 0x10) +00525 (b[0] & 0x20) + (b[7] & 0x40) + (b[6] & 0x80);00526 a[6] = (b[6] & 1) + (b[5] & 2) + (b[4] & 4) + (b[3] & 8) + (b[2] & 0x10) +00527 (b[1] & 0x20) + (b[0] & 0x40) + (b[7] & 0x80);00528 a[7] = (b[7] & 1) + (b[6] & 2) + (b[5] & 4) + (b[4] & 8) + (b[3] & 0x10) +00529 (b[2] & 0x20) + (b[1] & 0x40) + (b[0] & 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 < 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 >= 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 + -