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

📄 serpent.c

📁 openswan
💻 C
📖 第 1 页 / 共 2 页
字号:
      SETKEY(r1, r4, r2, r0, 12)       GETKEY(r0, r1, r2, r3, 16);      S7(r0,r1,r2,r3,r4);      SETKEY(r2, r4, r3, r0, 16)       GETKEY(r0, r1, r2, r3, 20);      S6(r0,r1,r2,r3,r4)       SETKEY(r0, r1, r4, r2, 20)       GETKEY(r0, r1, r2, r3, 24);      S5(r0,r1,r2,r3,r4);      SETKEY(r1, r3, r0, r2, 24)       GETKEY(r0, r1, r2, r3, 28);      S4(r0,r1,r2,r3,r4)       SETKEY(r1, r4, r0, r3, 28)       GETKEY(r0, r1, r2, r3, 32);      S3(r0,r1,r2,r3,r4);      SETKEY(r1, r2, r3, r4, 32)       GETKEY(r0, r1, r2, r3, 36);      S2(r0,r1,r2,r3,r4);      SETKEY(r2, r3, r1, r4, 36)       GETKEY(r0, r1, r2, r3, 40);      S1(r0,r1,r2,r3,r4);      SETKEY(r3, r1, r2, r0, 40)       GETKEY(r0, r1, r2, r3, 44);      S0(r0,r1,r2,r3,r4);      SETKEY(r1, r4, r2, r0, 44)       GETKEY(r0, r1, r2, r3, 48);      S7(r0,r1,r2,r3,r4);      SETKEY(r2, r4, r3, r0, 48)       GETKEY(r0, r1, r2, r3, 52);      S6(r0,r1,r2,r3,r4)       SETKEY(r0, r1, r4, r2, 52)       GETKEY(r0, r1, r2, r3, 56);      S5(r0,r1,r2,r3,r4);      SETKEY(r1, r3, r0, r2, 56)       GETKEY(r0, r1, r2, r3, 60);      S4(r0,r1,r2,r3,r4)       SETKEY(r1, r4, r0, r3, 60)       GETKEY(r0, r1, r2, r3, 64);      S3(r0,r1,r2,r3,r4);      SETKEY(r1, r2, r3, r4, 64)       GETKEY(r0, r1, r2, r3, 68);      S2(r0,r1,r2,r3,r4);      SETKEY(r2, r3, r1, r4, 68)       GETKEY(r0, r1, r2, r3, 72);      S1(r0,r1,r2,r3,r4);      SETKEY(r3, r1, r2, r0, 72)       GETKEY(r0, r1, r2, r3, 76);      S0(r0,r1,r2,r3,r4);      SETKEY(r1, r4, r2, r0, 76)       GETKEY(r0, r1, r2, r3, 80);      S7(r0,r1,r2,r3,r4);      SETKEY(r2, r4, r3, r0, 80)       GETKEY(r0, r1, r2, r3, 84);      S6(r0,r1,r2,r3,r4)       SETKEY(r0, r1, r4, r2, 84)       GETKEY(r0, r1, r2, r3, 88);      S5(r0,r1,r2,r3,r4);      SETKEY(r1, r3, r0, r2, 88)       GETKEY(r0, r1, r2, r3, 92);      S4(r0,r1,r2,r3,r4)       SETKEY(r1, r4, r0, r3, 92)       GETKEY(r0, r1, r2, r3, 96);      S3(r0,r1,r2,r3,r4);      SETKEY(r1, r2, r3, r4, 96)       GETKEY(r0, r1, r2, r3, 100);      S2(r0,r1,r2,r3,r4);      SETKEY(r2, r3, r1, r4, 100)       GETKEY(r0, r1, r2, r3, 104);      S1(r0,r1,r2,r3,r4);      SETKEY(r3, r1, r2, r0, 104)       GETKEY(r0, r1, r2, r3, 108);      S0(r0,r1,r2,r3,r4);      SETKEY(r1, r4, r2, r0, 108)       GETKEY(r0, r1, r2, r3, 112);      S7(r0,r1,r2,r3,r4);      SETKEY(r2, r4, r3, r0, 112)       GETKEY(r0, r1, r2, r3, 116);      S6(r0,r1,r2,r3,r4)       SETKEY(r0, r1, r4, r2, 116)       GETKEY(r0, r1, r2, r3, 120);      S5(r0,r1,r2,r3,r4);      SETKEY(r1, r3, r0, r2, 120)       GETKEY(r0, r1, r2, r3, 124);      S4(r0,r1,r2,r3,r4)       SETKEY(r1, r4, r0, r3, 124)       GETKEY(r0, r1, r2, r3, 128);      S3(r0,r1,r2,r3,r4);      SETKEY(r1, r2, r3, r4, 128)     return 0;};/* Encryption and decryption functions. The rounds are fully inlined.  * The sboxes alters the bit order of the output, and the altered * bit ordrer is used progressivly. *//* encrypt a block of text */int serpent_encrypt(serpent_context *cx, const u8 *in, 		    u8 *out){    u32 *l_key = cx->keyinfo;     const u32 *in_blk = (const u32 *) in;     u32 *out_blk = (u32 *) out;     u32  r0,r1,r2,r3,r4;    #ifdef  BLOCK_SWAP    r0 = io_swap(in_blk[3]); r1 = io_swap(in_blk[2]);     r2 = io_swap(in_blk[1]); r3 = io_swap(in_blk[0]);#else    r0 = in_blk[0]; r1 = in_blk[1]; r2 = in_blk[2]; r3 = in_blk[3];#endif      /* round 1  */      KEYMIX(r0,r1,r2,r3,r4,0);      S0(r0,r1,r2,r3,r4);      LINTRANS(r1,r4,r2,r0,r3);      /* round 2  */      KEYMIX(r1,r4,r2,r0,r3,4);      S1(r1,r4,r2,r0,r3);      LINTRANS(r0,r4,r2,r1,r3);      /* round 3  */      KEYMIX(r0,r4,r2,r1,r3,8);      S2(r0,r4,r2,r1,r3);      LINTRANS(r2,r1,r4,r3,r0);      /* round 4  */      KEYMIX(r2,r1,r4,r3,r0,12);      S3(r2,r1,r4,r3,r0);      LINTRANS(r1,r4,r3,r0,r2);      /* round 5  */      KEYMIX(r1,r4,r3,r0,r2,16);      S4(r1,r4,r3,r0,r2)       LINTRANS(r4,r2,r1,r0,r3);      /* round 6  */      KEYMIX(r4,r2,r1,r0,r3,20);      S5(r4,r2,r1,r0,r3);      LINTRANS(r2,r0,r4,r1,r3);      /* round 7  */      KEYMIX(r2,r0,r4,r1,r3,24);      S6(r2,r0,r4,r1,r3)       LINTRANS(r2,r0,r3,r4,r1);      /* round 8  */      KEYMIX(r2,r0,r3,r4,r1,28);      S7(r2,r0,r3,r4,r1);      LINTRANS(r3,r1,r4,r2,r0);      /* round 9  */      KEYMIX(r3,r1,r4,r2,r0,32);      S0(r3,r1,r4,r2,r0);      LINTRANS(r1,r0,r4,r3,r2);      /* round 10  */      KEYMIX(r1,r0,r4,r3,r2,36);      S1(r1,r0,r4,r3,r2);      LINTRANS(r3,r0,r4,r1,r2);      /* round 11  */      KEYMIX(r3,r0,r4,r1,r2,40);      S2(r3,r0,r4,r1,r2);      LINTRANS(r4,r1,r0,r2,r3);      /* round 12  */      KEYMIX(r4,r1,r0,r2,r3,44);      S3(r4,r1,r0,r2,r3);      LINTRANS(r1,r0,r2,r3,r4);      /* round 13  */      KEYMIX(r1,r0,r2,r3,r4,48);      S4(r1,r0,r2,r3,r4)       LINTRANS(r0,r4,r1,r3,r2);      /* round 14  */      KEYMIX(r0,r4,r1,r3,r2,52);      S5(r0,r4,r1,r3,r2);      LINTRANS(r4,r3,r0,r1,r2);      /* round 15  */      KEYMIX(r4,r3,r0,r1,r2,56);      S6(r4,r3,r0,r1,r2)       LINTRANS(r4,r3,r2,r0,r1);      /* round 16  */      KEYMIX(r4,r3,r2,r0,r1,60);      S7(r4,r3,r2,r0,r1);      LINTRANS(r2,r1,r0,r4,r3);      /* round 17  */      KEYMIX(r2,r1,r0,r4,r3,64);      S0(r2,r1,r0,r4,r3);      LINTRANS(r1,r3,r0,r2,r4);      /* round 18  */      KEYMIX(r1,r3,r0,r2,r4,68);      S1(r1,r3,r0,r2,r4);      LINTRANS(r2,r3,r0,r1,r4);      /* round 19  */      KEYMIX(r2,r3,r0,r1,r4,72);      S2(r2,r3,r0,r1,r4);      LINTRANS(r0,r1,r3,r4,r2);      /* round 20  */      KEYMIX(r0,r1,r3,r4,r2,76);      S3(r0,r1,r3,r4,r2);      LINTRANS(r1,r3,r4,r2,r0);      /* round 21  */      KEYMIX(r1,r3,r4,r2,r0,80);      S4(r1,r3,r4,r2,r0)       LINTRANS(r3,r0,r1,r2,r4);      /* round 22  */      KEYMIX(r3,r0,r1,r2,r4,84);      S5(r3,r0,r1,r2,r4);      LINTRANS(r0,r2,r3,r1,r4);      /* round 23  */      KEYMIX(r0,r2,r3,r1,r4,88);      S6(r0,r2,r3,r1,r4)       LINTRANS(r0,r2,r4,r3,r1);      /* round 24  */      KEYMIX(r0,r2,r4,r3,r1,92);      S7(r0,r2,r4,r3,r1);      LINTRANS(r4,r1,r3,r0,r2);      /* round 25  */      KEYMIX(r4,r1,r3,r0,r2,96);      S0(r4,r1,r3,r0,r2);      LINTRANS(r1,r2,r3,r4,r0);      /* round 26  */      KEYMIX(r1,r2,r3,r4,r0,100);      S1(r1,r2,r3,r4,r0);      LINTRANS(r4,r2,r3,r1,r0);      /* round 27  */      KEYMIX(r4,r2,r3,r1,r0,104);      S2(r4,r2,r3,r1,r0);      LINTRANS(r3,r1,r2,r0,r4);      /* round 28  */      KEYMIX(r3,r1,r2,r0,r4,108);      S3(r3,r1,r2,r0,r4);      LINTRANS(r1,r2,r0,r4,r3);      /* round 29  */      KEYMIX(r1,r2,r0,r4,r3,112);      S4(r1,r2,r0,r4,r3)       LINTRANS(r2,r3,r1,r4,r0);      /* round 30  */      KEYMIX(r2,r3,r1,r4,r0,116);      S5(r2,r3,r1,r4,r0);      LINTRANS(r3,r4,r2,r1,r0);      /* round 31  */      KEYMIX(r3,r4,r2,r1,r0,120);      S6(r3,r4,r2,r1,r0)       LINTRANS(r3,r4,r0,r2,r1);      /* round 32  */      KEYMIX(r3,r4,r0,r2,r1,124);      S7(r3,r4,r0,r2,r1);      KEYMIX(r0,r1,r2,r3,r4,128);    #ifdef  BLOCK_SWAP    out_blk[3] = io_swap(r0); out_blk[2] = io_swap(r1);     out_blk[1] = io_swap(r2); out_blk[0] = io_swap(r3);#else    out_blk[0] = r0; out_blk[1] = r1; out_blk[2] = r2; out_blk[3] = r3;#endif    return 0;};/* decrypt a block of text  */int serpent_decrypt(serpent_context *cx, const u8 *in,		    u8 *out){   u32 *l_key = cx->keyinfo;    const u32 *in_blk = (const u32 *)in;    u32 *out_blk = (u32 *)out;    u32  r0,r1,r2,r3,r4;    #ifdef  BLOCK_SWAP    r0 = io_swap(in_blk[3]); r1 = io_swap(in_blk[2]);     r2 = io_swap(in_blk[1]); r3 = io_swap(in_blk[0]);#else    r0 = in_blk[0]; r1 = in_blk[1]; r2 = in_blk[2]; r3 = in_blk[3];#endif      /* round 1 */      KEYMIX(r0,r1,r2,r3,r4,128);      I7(r0,r1,r2,r3,r4);      KEYMIX(r3,r0,r1,r4,r2,124);      /* round 2  */      ILINTRANS(r3,r0,r1,r4,r2);      I6(r3,r0,r1,r4,r2);      KEYMIX(r0,r1,r2,r4,r3,120);      /* round 3  */      ILINTRANS(r0,r1,r2,r4,r3);      I5(r0,r1,r2,r4,r3);      KEYMIX(r1,r3,r4,r2,r0,116);      /* round 4  */      ILINTRANS(r1,r3,r4,r2,r0);      I4(r1,r3,r4,r2,r0);      KEYMIX(r1,r2,r4,r0,r3,112);      /* round 5  */      ILINTRANS(r1,r2,r4,r0,r3);      I3(r1,r2,r4,r0,r3);      KEYMIX(r4,r2,r0,r1,r3,108);      /* round 6  */      ILINTRANS(r4,r2,r0,r1,r3);      I2(r4,r2,r0,r1,r3);      KEYMIX(r2,r3,r0,r1,r4,104);      /* round 7  */      ILINTRANS(r2,r3,r0,r1,r4);      I1(r2,r3,r0,r1,r4);      KEYMIX(r4,r2,r1,r0,r3,100);      /* round 8  */      ILINTRANS(r4,r2,r1,r0,r3);      I0(r4,r2,r1,r0,r3);      KEYMIX(r4,r3,r2,r0,r1,96);      /* round 9  */      ILINTRANS(r4,r3,r2,r0,r1);      I7(r4,r3,r2,r0,r1);      KEYMIX(r0,r4,r3,r1,r2,92);      /* round 10  */      ILINTRANS(r0,r4,r3,r1,r2);      I6(r0,r4,r3,r1,r2);      KEYMIX(r4,r3,r2,r1,r0,88);      /* round 11  */      ILINTRANS(r4,r3,r2,r1,r0);      I5(r4,r3,r2,r1,r0);      KEYMIX(r3,r0,r1,r2,r4,84);      /* round 12  */      ILINTRANS(r3,r0,r1,r2,r4);      I4(r3,r0,r1,r2,r4);      KEYMIX(r3,r2,r1,r4,r0,80);      /* round 13  */      ILINTRANS(r3,r2,r1,r4,r0);      I3(r3,r2,r1,r4,r0);      KEYMIX(r1,r2,r4,r3,r0,76);      /* round 14  */      ILINTRANS(r1,r2,r4,r3,r0);      I2(r1,r2,r4,r3,r0);      KEYMIX(r2,r0,r4,r3,r1,72);      /* round 15  */      ILINTRANS(r2,r0,r4,r3,r1);      I1(r2,r0,r4,r3,r1);      KEYMIX(r1,r2,r3,r4,r0,68);      /* round 16  */      ILINTRANS(r1,r2,r3,r4,r0);      I0(r1,r2,r3,r4,r0);      KEYMIX(r1,r0,r2,r4,r3,64);      /* round 17  */      ILINTRANS(r1,r0,r2,r4,r3);      I7(r1,r0,r2,r4,r3);      KEYMIX(r4,r1,r0,r3,r2,60);      /* round 18  */      ILINTRANS(r4,r1,r0,r3,r2);      I6(r4,r1,r0,r3,r2);      KEYMIX(r1,r0,r2,r3,r4,56);      /* round 19  */      ILINTRANS(r1,r0,r2,r3,r4);      I5(r1,r0,r2,r3,r4);      KEYMIX(r0,r4,r3,r2,r1,52);      /* round 20  */      ILINTRANS(r0,r4,r3,r2,r1);      I4(r0,r4,r3,r2,r1);      KEYMIX(r0,r2,r3,r1,r4,48);      /* round 21  */      ILINTRANS(r0,r2,r3,r1,r4);      I3(r0,r2,r3,r1,r4);      KEYMIX(r3,r2,r1,r0,r4,44);      /* round 22  */      ILINTRANS(r3,r2,r1,r0,r4);      I2(r3,r2,r1,r0,r4);      KEYMIX(r2,r4,r1,r0,r3,40);      /* round 23  */      ILINTRANS(r2,r4,r1,r0,r3);      I1(r2,r4,r1,r0,r3);      KEYMIX(r3,r2,r0,r1,r4,36);      /* round 24  */      ILINTRANS(r3,r2,r0,r1,r4);      I0(r3,r2,r0,r1,r4);      KEYMIX(r3,r4,r2,r1,r0,32);      /* round 25  */      ILINTRANS(r3,r4,r2,r1,r0);      I7(r3,r4,r2,r1,r0);      KEYMIX(r1,r3,r4,r0,r2,28);      /* round 26  */      ILINTRANS(r1,r3,r4,r0,r2);      I6(r1,r3,r4,r0,r2);      KEYMIX(r3,r4,r2,r0,r1,24);      /* round 27  */      ILINTRANS(r3,r4,r2,r0,r1);      I5(r3,r4,r2,r0,r1);      KEYMIX(r4,r1,r0,r2,r3,20);      /* round 28  */      ILINTRANS(r4,r1,r0,r2,r3);      I4(r4,r1,r0,r2,r3);      KEYMIX(r4,r2,r0,r3,r1,16);      /* round 29  */      ILINTRANS(r4,r2,r0,r3,r1);      I3(r4,r2,r0,r3,r1);      KEYMIX(r0,r2,r3,r4,r1,12);      /* round 30  */      ILINTRANS(r0,r2,r3,r4,r1);      I2(r0,r2,r3,r4,r1);      KEYMIX(r2,r1,r3,r4,r0,8);      /* round 31  */      ILINTRANS(r2,r1,r3,r4,r0);      I1(r2,r1,r3,r4,r0);      KEYMIX(r0,r2,r4,r3,r1,4);      /* round 32  */      ILINTRANS(r0,r2,r4,r3,r1);      I0(r0,r2,r4,r3,r1);      KEYMIX(r0,r1,r2,r3,r4,0);    #ifdef  BLOCK_SWAP    out_blk[3] = io_swap(r0); out_blk[2] = io_swap(r1);     out_blk[1] = io_swap(r2); out_blk[0] = io_swap(r3);#else    out_blk[0] = r0; out_blk[1] = r1; out_blk[2] = r2; out_blk[3] = r3;#endif    return 0;};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -