Advertisement
sha-dow

MakeKey

May 3rd, 2015
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.60 KB | None | 0 0
  1. public override object MakeKey(byte[] key)
  2. {
  3.     long[] w = new long[4 * (Rounds + 1)];
  4.     int limit = key.Length / 4;
  5.     int i, j, offset = 0;
  6.     long t;
  7.     for (i = 0; i < limit; i++)
  8.         w[i] = (key[offset++] & 0xFF) |
  9.                (key[offset++] & 0xFF) << 8 |
  10.                (key[offset++] & 0xFF) << 16 |
  11.                (key[offset++] & 0xFF) << 24;
  12.  
  13.     if (i < 8)
  14.         w[i++] = 1;
  15.  
  16.     for (i = 8, j = 0; i < 16; i++)
  17.     {
  18.         t = (int)(w[j] ^ w[i - 5] ^ w[i - 3] ^ w[i - 1] ^ PHI ^ j++);
  19.         w[i] = t << 11 | t >> 21;
  20.     }
  21.  
  22.     for (i = 0, j = 8; i < 8; )
  23.         w[i++] = w[j++];
  24.     limit = 4 * (Rounds + 1);
  25.     for (; i < limit; i++)
  26.     {
  27.         t = w[i - 8] ^ w[i - 5] ^ w[i - 3] ^ w[i - 1] ^ PHI ^ i;
  28.         w[i] = t << 11 | t >> 21;
  29.     }
  30.  
  31.     long x0, x1, x2, x3, y0, y1, y2, y3, z;
  32.     byte[] sb;
  33.  
  34.     for (i = 0; i < Rounds + 1; i++)
  35.     {
  36.         x0 = w[4 * i];
  37.         x1 = w[4 * i + 1];
  38.         x2 = w[4 * i + 2];
  39.         x3 = w[4 * i + 3];
  40.         y0 = y1 = y2 = y3 = 0;
  41.         sb = Sbox[(Rounds + 3 - i) % Rounds];
  42.         for (j = 0; j < 32; j++)
  43.         {
  44.             z = sb[((x0 >> j) & 0x01) |
  45.                     ((x1 >> j) & 0x01) << 1 |
  46.                     ((x2 >> j) & 0x01) << 2 |
  47.                     ((x3 >> j) & 0x01) << 3];
  48.             y0 |= (z & 0x01) << j;
  49.             y1 |= ((z >> 1) & 0x01) << j;
  50.             y2 |= ((z >> 2) & 0x01) << j;
  51.             y3 |= ((z >> 3) & 0x01) << j;
  52.         }
  53.         w[4 * i] = y0;
  54.         w[4 * i + 1] = y1;
  55.         w[4 * i + 2] = y2;
  56.         w[4 * i + 3] = y3;
  57.     }
  58.  
  59.     return w;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement