📄 cast_8cpp-source.html
字号:
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<12; ++i)00262 {00263 Omega(2*i,kappa);00264 Omega(2*i+1,kappa);00265 00266 K[8*i]=kappa[0] & 31;00267 K[8*i+1]=kappa[2] & 31;00268 K[8*i+2]=kappa[4] & 31;00269 K[8*i+3]=kappa[6] & 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<6; ++j)00279 {00280 <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i=0; i<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<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 + -