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

📄 cast_8cpp-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 2 页
字号:
00149 }00150 00151 <span class="comment">// The following CAST-256 implementation was contributed by Leonard Janke</span>00152 00153 <span class="keyword">const</span> word32 CAST256::Base::t_m[8][24]={00154         0x5a827999, 0xd151d6a1, 0x482133a9, 0xbef090b1, 0x35bfedb9, 0xac8f4ac1, 00155         0x235ea7c9, 0x9a2e04d1, 0x10fd61d9, 0x87ccbee1, 0xfe9c1be9, 0x756b78f1, 00156         0xec3ad5f9, 0x630a3301, 0xd9d99009, 0x50a8ed11, 0xc7784a19, 0x3e47a721, 00157         0xb5170429, 0x2be66131, 0xa2b5be39, 0x19851b41, 0x90547849, 0x0723d551, 00158         0xc95c653a, 0x402bc242, 0xb6fb1f4a, 0x2dca7c52, 0xa499d95a, 0x1b693662, 00159         0x9238936a, 0x0907f072, 0x7fd74d7a, 0xf6a6aa82, 0x6d76078a, 0xe4456492, 00160         0x5b14c19a, 0xd1e41ea2, 0x48b37baa, 0xbf82d8b2, 0x365235ba, 0xad2192c2, 00161         0x23f0efca, 0x9ac04cd2, 0x118fa9da, 0x885f06e2, 0xff2e63ea, 0x75fdc0f2, 00162         0x383650db, 0xaf05ade3, 0x25d50aeb, 0x9ca467f3, 0x1373c4fb, 0x8a432203, 00163         0x01127f0b, 0x77e1dc13, 0xeeb1391b, 0x65809623, 0xdc4ff32b, 0x531f5033, 00164         0xc9eead3b, 0x40be0a43, 0xb78d674b, 0x2e5cc453, 0xa52c215b, 0x1bfb7e63, 00165         0x92cadb6b, 0x099a3873, 0x8069957b, 0xf738f283, 0x6e084f8b, 0xe4d7ac93, 00166         0xa7103c7c, 0x1ddf9984, 0x94aef68c, 0x0b7e5394, 0x824db09c, 0xf91d0da4, 00167         0x6fec6aac, 0xe6bbc7b4, 0x5d8b24bc, 0xd45a81c4, 0x4b29decc, 0xc1f93bd4, 00168         0x38c898dc, 0xaf97f5e4, 0x266752ec, 0x9d36aff4, 0x14060cfc, 0x8ad56a04, 00169         0x01a4c70c, 0x78742414, 0xef43811c, 0x6612de24, 0xdce23b2c, 0x53b19834, 00170         0x15ea281d, 0x8cb98525, 0x0388e22d, 0x7a583f35, 0xf1279c3d, 0x67f6f945, 00171         0xdec6564d, 0x5595b355, 0xcc65105d, 0x43346d65, 0xba03ca6d, 0x30d32775, 00172         0xa7a2847d, 0x1e71e185, 0x95413e8d, 0x0c109b95, 0x82dff89d, 0xf9af55a5, 00173         0x707eb2ad, 0xe74e0fb5, 0x5e1d6cbd, 0xd4ecc9c5, 0x4bbc26cd, 0xc28b83d5, 00174         0x84c413be, 0xfb9370c6, 0x7262cdce, 0xe9322ad6, 0x600187de, 0xd6d0e4e6, 00175         0x4da041ee, 0xc46f9ef6, 0x3b3efbfe, 0xb20e5906, 0x28ddb60e, 0x9fad1316, 00176         0x167c701e, 0x8d4bcd26, 0x041b2a2e, 0x7aea8736, 0xf1b9e43e, 0x68894146, 00177         0xdf589e4e, 0x5627fb56, 0xccf7585e, 0x43c6b566, 0xba96126e, 0x31656f76, 00178         0xf39dff5f, 0x6a6d5c67, 0xe13cb96f, 0x580c1677, 0xcedb737f, 0x45aad087, 00179         0xbc7a2d8f, 0x33498a97, 0xaa18e79f, 0x20e844a7, 0x97b7a1af, 0x0e86feb7, 00180         0x85565bbf, 0xfc25b8c7, 0x72f515cf, 0xe9c472d7, 0x6093cfdf, 0xd7632ce7, 00181         0x4e3289ef, 0xc501e6f7, 0x3bd143ff, 0xb2a0a107, 0x296ffe0f, 0xa03f5b17, 00182         0x6277eb00, 0xd9474808, 0x5016a510, 0xc6e60218, 0x3db55f20, 0xb484bc28, 00183         0x2b541930, 0xa2237638, 0x18f2d340, 0x8fc23048, 0x06918d50, 0x7d60ea58, 00184         0xf4304760, 0x6affa468, 0xe1cf0170, 0x589e5e78, 0xcf6dbb80, 0x463d1888, 00185         0xbd0c7590, 0x33dbd298, 0xaaab2fa0, 0x217a8ca8, 0x9849e9b0, 0x0f1946b8 00186 };00187 00188 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> CAST256::Base::t_r[8][24]={ 00189         19, 27, 3, 11, 19, 27, 3, 11, 19, 27, 3, 11, 19, 27, 3, 11, 19, 27, 3, 11, 19, 27, 3, 11, 00190         4, 12, 20, 28, 4, 12, 20, 28, 4, 12, 20, 28, 4, 12, 20, 28, 4, 12, 20, 28, 4, 12, 20, 28, 00191         21, 29, 5, 13, 21, 29, 5, 13, 21, 29, 5, 13, 21, 29, 5, 13, 21, 29, 5, 13, 21, 29, 5, 13, 00192         6, 14, 22, 30, 6, 14, 22, 30, 6, 14, 22, 30, 6, 14, 22, 30, 6, 14, 22, 30, 6, 14, 22, 30, 00193         23, 31, 7, 15, 23, 31, 7, 15, 23, 31, 7, 15, 23, 31, 7, 15, 23, 31, 7, 15, 23, 31, 7, 15, 00194         8, 16, 24, 0, 8, 16, 24, 0, 8, 16, 24, 0, 8, 16, 24, 0, 8, 16, 24, 0, 8, 16, 24, 0, 00195         25, 1, 9, 17, 25, 1, 9, 17, 25, 1, 9, 17, 25, 1, 9, 17, 25, 1, 9, 17, 25, 1, 9, 17, 00196         10, 18, 26, 2, 10, 18, 26, 2, 10, 18, 26, 2, 10, 18, 26, 2, 10, 18, 26, 2, 10, 18, 26, 2 00197 };00198 00199 <span class="preprocessor">#define Q(i) \</span>00200 <span class="preprocessor">        F1(block[2],block[3],8*i+4,-4); \</span>00201 <span class="preprocessor">        F2(block[1],block[2],8*i+5,-4); \</span>00202 <span class="preprocessor">        F3(block[0],block[1],8*i+6,-4); \</span>00203 <span class="preprocessor">        F1(block[3],block[0],8*i+7,-4);</span>00204 <span class="preprocessor"></span>00205 <span class="preprocessor">#define QBar(i) \</span>00206 <span class="preprocessor">        F1(block[3],block[0],8*i+7,-4); \</span>00207 <span class="preprocessor">        F3(block[0],block[1],8*i+6,-4); \</span>00208 <span class="preprocessor">        F2(block[1],block[2],8*i+5,-4); \</span>00209 <span class="preprocessor">        F1(block[2],block[3],8*i+4,-4);</span>00210 <span class="preprocessor"></span>00211 <span class="comment">/* CAST256's encrypt/decrypt functions  are identical except for the order that</span>00212 <span class="comment">the keys are used */</span>00213 00214 <span class="keywordtype">void</span> CAST256::Base::ProcessAndXorBlock(<span class="keyword">const</span> byte *inBlock, <span class="keyword">const</span> byte *xorBlock, byte *outBlock)<span class="keyword"> const</span>00215 <span class="keyword"></span>{00216         word32 t, block[4];00217         Block::Get(inBlock)(block[0])(block[1])(block[2])(block[3]);00218 00219         <span class="comment">// Perform 6 forward quad rounds</span>00220         Q(0);00221         Q(1);00222         Q(2);00223         Q(3);00224         Q(4);00225         Q(5);00226 00227         <span class="comment">// Perform 6 reverse quad rounds</span>00228         QBar(6);00229         QBar(7);00230         QBar(8);00231         QBar(9);00232         QBar(10);00233         QBar(11);00234 00235         Block::Put(xorBlock, outBlock)(block[0])(block[1])(block[2])(block[3]);00236 }00237 00238 <span class="comment">/* Set up a CAST-256 key */</span>00239 00240 <span class="keywordtype">void</span> CAST256::Base::Omega(<span class="keywordtype">int</span> i, word32 kappa[8])00241 {00242         word32 t;00243 00244         f1(kappa[6],kappa[7],t_m[0][i],t_r[0][i]);00245         f2(kappa[5],kappa[6],t_m[1][i],t_r[1][i]);00246         f3(kappa[4],kappa[5],t_m[2][i],t_r[2][i]);00247         f1(kappa[3],kappa[4],t_m[3][i],t_r[3][i]);00248         f2(kappa[2],kappa[3],t_m[4][i],t_r[4][i]);00249         f3(kappa[1],kappa[2],t_m[5][i],t_r[5][i]);00250         f1(kappa[0],kappa[1],t_m[6][i],t_r[6][i]);00251         f2(kappa[7],kappa[0],t_m[7][i],t_r[7][i]);00252 }00253 00254 <span class="keywordtype">void</span> CAST256::Base::UncheckedSetKey(CipherDir dir, <span class="keyword">const</span> byte *userKey, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> keylength)00255 {00256         AssertValidKeyLength(keylength);00257 00258         word32 kappa[8];00259         GetUserKey(BIG_ENDIAN_ORDER, kappa, 8, userKey, keylength);00260 00261         <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0; i&lt;12; ++i)00262         {00263                 Omega(2*i,kappa);00264                 Omega(2*i+1,kappa);00265                 00266                 K[8*i]=kappa[0] &amp; 31;00267                 K[8*i+1]=kappa[2] &amp; 31;00268                 K[8*i+2]=kappa[4] &amp; 31;00269                 K[8*i+3]=kappa[6] &amp; 31;00270                 K[8*i+4]=kappa[7];00271                 K[8*i+5]=kappa[5];00272                 K[8*i+6]=kappa[3];00273                 K[8*i+7]=kappa[1];00274         }00275 00276         <span class="keywordflow">if</span> (dir == DECRYPTION)00277         {00278                 <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j=0; j&lt;6; ++j)00279                 {00280                         <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0; i&lt;4; ++i)00281                         {00282                                 <span class="keywordtype">int</span> i1=8*j+i;00283                                 <span class="keywordtype">int</span> i2=8*(11-j)+i;00284 00285                                 assert(i1&lt;i2);00286 00287                                 std::swap(K[i1],K[i2]); 00288                                 std::swap(K[i1+4],K[i2+4]); 00289                         }00290                 }00291         }00292 00293         memset(kappa, 0, <span class="keyword">sizeof</span>(kappa));00294 }00295 00296 NAMESPACE_END</pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:09 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 + -