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

📄 loop_serpent.c

📁 Fast and transparent file system and swap encryption package for linux. No source code changes to li
💻 C
📖 第 1 页 / 共 3 页
字号:
    if (key_len < 256)    {        while(i < 8)            l_key[i++] = 0;        i = key_len / 32; lk = 1 << key_len % 32;         l_key[i] &= lk - 1;        l_key[i] |= lk;    }    for(i = 0; i < 132; ++i)    {        lk = l_key[i] ^ l_key[i + 3] ^ l_key[i + 5]                                 ^ l_key[i + 7] ^ 0x9e3779b9 ^ i;        l_key[i + 8] = (lk << 11) | (lk >> 21);     }      GETKEY(r0, r1, r2, r3, 0);      S3(r0,r1,r2,r3,r4);      SETKEY(r1, r2, r3, r4, 0)       GETKEY(r0, r1, r2, r3, 4);      S2(r0,r1,r2,r3,r4);      SETKEY(r2, r3, r1, r4, 4)       GETKEY(r0, r1, r2, r3, 8);      S1(r0,r1,r2,r3,r4);      SETKEY(r3, r1, r2, r0, 8)       GETKEY(r0, r1, r2, r3, 12);      S0(r0,r1,r2,r3,r4);      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) };/* 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 */static void serpent_encrypt(u32 *l_key, const u8 *in, u8 *out, int wrongByteOrder){     const u32 *in_blk = (u32 *) in;     u32 *out_blk = (u32 *) out;     u32  r0,r1,r2,r3,r4;          if (wrongByteOrder) {          /* incorrect byte order */          r0 = io_swap_be(in_blk[3]);          r1 = io_swap_be(in_blk[2]);          r2 = io_swap_be(in_blk[1]);          r3 = io_swap_be(in_blk[0]);      } else {          /* correct byte order */          r0 = io_swap_le(in_blk[0]);          r1 = io_swap_le(in_blk[1]);          r2 = io_swap_le(in_blk[2]);          r3 = io_swap_le(in_blk[3]);      }      /* 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);      if (wrongByteOrder) {          /* incorrect byte order */          out_blk[3] = io_swap_be(r0);          out_blk[2] = io_swap_be(r1);           out_blk[1] = io_swap_be(r2);          out_blk[0] = io_swap_be(r3);      } else {          /* correct byte order */          out_blk[0] = io_swap_le(r0);          out_blk[1] = io_swap_le(r1);           out_blk[2] = io_swap_le(r2);          out_blk[3] = io_swap_le(r3);      }};/* decrypt a block of text  */static void serpent_decrypt(u32 *l_key, const u8 *in, u8 *out, int wrongByteOrder){    const u32 *in_blk = (const u32 *)in;    u32 *out_blk = (u32 *)out;    u32  r0,r1,r2,r3,r4;          if (wrongByteOrder) {          /* incorrect byte order */          r0 = io_swap_be(in_blk[3]);          r1 = io_swap_be(in_blk[2]);          r2 = io_swap_be(in_blk[1]);          r3 = io_swap_be(in_blk[0]);      } else {          /* correct byte order */          r0 = io_swap_le(in_blk[0]);          r1 = io_swap_le(in_blk[1]);           r2 = io_swap_le(in_blk[2]);          r3 = io_swap_le(in_blk[3]);      }      /* 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  */

⌨️ 快捷键说明

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