📄 cast.c
字号:
0xb7747f9d, 0xab2af7b4, 0xefc34d20, 0x2e096b7c, 0x1741a254, 0xe5b6a035, 0x213d42f6, 0x2c1c7c26, 0x61c2f50f, 0x6552daf9, 0xd2c231f8, 0x25130f69, 0xd8167fa2, 0x0418f2c8, 0x001a96a6, 0x0d1526ab, 0x63315c21, 0x5e0a72ec, 0x49bafefd, 0x187908d9, 0x8d0dbd86, 0x311170a7, 0x3e9b640c, 0xcc3e10d7, 0xd5cad3b6, 0x0caec388, 0xf73001e1, 0x6c728aff, 0x71eae2a1, 0x1f9af36e, 0xcfcbd12f, 0xc1de8417, 0xac07be6b, 0xcb44a1d8, 0x8b9b0f56, 0x013988c3, 0xb1c52fca, 0xb4be31cd, 0xd8782806, 0x12a3a4e2, 0x6f7de532, 0x58fd7eb6, 0xd01ee900, 0x24adffc2, 0xf4990fc5, 0x9711aac5, 0x001d7b95, 0x82e5e7d2, 0x109873f6, 0x00613096, 0xc32d9521, 0xada121ff, 0x29908415, 0x7fbb977f, 0xaf9eb3db, 0x29c9ed2a, 0x5ce2a465, 0xa730f32c, 0xd0aa3fe8, 0x8a5cc091, 0xd49e2ce7, 0x0ce454a9, 0xd60acd86, 0x015f1919, 0x77079103, 0xdea03af6, 0x78a8565e, 0xdee356df, 0x21f05cbe, 0x8b75e387, 0xb3c50651, 0xb8a5c3ef, 0xd8eeb6d2, 0xe523be77, 0xc2154529, 0x2f69efdf, 0xafe67afb, 0xf470c4b2, 0xf3e0eb5b, 0xd6cc9876, 0x39e4460c, 0x1fda8538, 0x1987832f, 0xca007367, 0xa99144f8, 0x296b299e, 0x492fc295, 0x9266beab, 0xb5676e69, 0x9bd3ddda, 0xdf7e052f, 0xdb25701c, 0x1b5e51ee, 0xf65324e6, 0x6afce36c, 0x0316cc04, 0x8644213e, 0xb7dc59d0, 0x7965291f, 0xccd6fd43, 0x41823979, 0x932bcdf6, 0xb657c34d, 0x4edfd282, 0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e, 0x13ecf0b0, 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2 }};#define f1(y,x,kr,km) \ t = rotl(km + x, kr); \ u = s_box[0][byte(t,3)]; \ u ^= s_box[1][byte(t,2)]; \ u -= s_box[2][byte(t,1)]; \ u += s_box[3][byte(t,0)]; \ y ^= u#define f2(y,x,kr,km) \ t = rotl(km ^ x, kr); \ u = s_box[0][byte(t,3)]; \ u -= s_box[1][byte(t,2)]; \ u += s_box[2][byte(t,1)]; \ u ^= s_box[3][byte(t,0)]; \ y ^= u#define f3(y,x,kr,km) \ t = rotl(km - x, kr); \ u = s_box[0][byte(t,3)]; \ u += s_box[1][byte(t,2)]; \ u ^= s_box[2][byte(t,1)]; \ u -= s_box[3][byte(t,0)]; \ y ^= u#define f_rnd(x,n) \ f1(x[2],x[3],l_key[n], l_key[n + 4]); \ f2(x[1],x[2],l_key[n + 1],l_key[n + 5]); \ f3(x[0],x[1],l_key[n + 2],l_key[n + 6]); \ f1(x[3],x[0],l_key[n + 3],l_key[n + 7])#define i_rnd(x, n) \ f1(x[3],x[0],l_key[n + 3],l_key[n + 7]); \ f3(x[0],x[1],l_key[n + 2],l_key[n + 6]); \ f2(x[1],x[2],l_key[n + 1],l_key[n + 5]); \ f1(x[2],x[3],l_key[n], l_key[n + 4])#define k_rnd(k,tr,tm) \ f1(k[6],k[7],tr[0],tm[0]); \ f2(k[5],k[6],tr[1],tm[1]); \ f3(k[4],k[5],tr[2],tm[2]); \ f1(k[3],k[4],tr[3],tm[3]); \ f2(k[2],k[3],tr[4],tm[4]); \ f3(k[1],k[2],tr[5],tm[5]); \ f1(k[0],k[1],tr[6],tm[6]); \ f2(k[7],k[0],tr[7],tm[7])u4byte l_key[96];u4byte *set_key (const u4byte in_key[], const u4byte key_len){ u4byte i, j, t, u, cm, cr, lk[8], tm[8], tr[8]; for (i = 0; i < key_len / 32; ++i) lk[i] = io_swap (in_key[i]); for (; i < 8; ++i) lk[i] = 0; cm = 0x5a827999; cr = 19; for (i = 0; i < 96; i += 8) { for (j = 0; j < 8; ++j) { tm[j] = cm; cm += 0x6ed9eba1; tr[j] = cr; cr += 17; } k_rnd (lk, tr, tm); for (j = 0; j < 8; ++j) { tm[j] = cm; cm += 0x6ed9eba1; tr[j] = cr; cr += 17; } k_rnd (lk, tr, tm); l_key[i + 0] = lk[0]; l_key[i + 1] = lk[2]; l_key[i + 2] = lk[4]; l_key[i + 3] = lk[6]; l_key[i + 4] = lk[7]; l_key[i + 5] = lk[5]; l_key[i + 6] = lk[3]; l_key[i + 7] = lk[1]; } return l_key;}voidaes_encrypt (const u4byte in_blk[4], u4byte out_blk[4]){ u4byte t, u, blk[4]; blk[0] = io_swap (in_blk[0]); blk[1] = io_swap (in_blk[1]); blk[2] = io_swap (in_blk[2]); blk[3] = io_swap (in_blk[3]); f_rnd (blk, 0); f_rnd (blk, 8); f_rnd (blk, 16); f_rnd (blk, 24); f_rnd (blk, 32); f_rnd (blk, 40); i_rnd (blk, 48); i_rnd (blk, 56); i_rnd (blk, 64); i_rnd (blk, 72); i_rnd (blk, 80); i_rnd (blk, 88); out_blk[0] = io_swap (blk[0]); out_blk[1] = io_swap (blk[1]); out_blk[2] = io_swap (blk[2]); out_blk[3] = io_swap (blk[3]);}voiddecrypt (const u4byte in_blk[4], u4byte out_blk[4]){ u4byte t, u, blk[4]; blk[0] = io_swap (in_blk[0]); blk[1] = io_swap (in_blk[1]); blk[2] = io_swap (in_blk[2]); blk[3] = io_swap (in_blk[3]); f_rnd (blk, 88); f_rnd (blk, 80); f_rnd (blk, 72); f_rnd (blk, 64); f_rnd (blk, 56); f_rnd (blk, 48); i_rnd (blk, 40); i_rnd (blk, 32); i_rnd (blk, 24); i_rnd (blk, 16); i_rnd (blk, 8); i_rnd (blk, 0); out_blk[0] = io_swap (blk[0]); out_blk[1] = io_swap (blk[1]); out_blk[2] = io_swap (blk[2]); out_blk[3] = io_swap (blk[3]);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -