Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public override object MakeKey(byte[] key)
- {
- long[] w = new long[4 * (Rounds + 1)];
- int limit = key.Length / 4;
- int i, j, offset = 0;
- long t;
- for (i = 0; i < limit; i++)
- w[i] = (key[offset++] & 0xFF) |
- (key[offset++] & 0xFF) << 8 |
- (key[offset++] & 0xFF) << 16 |
- (key[offset++] & 0xFF) << 24;
- if (i < 8)
- w[i++] = 1;
- for (i = 8, j = 0; i < 16; i++)
- {
- t = (int)(w[j] ^ w[i - 5] ^ w[i - 3] ^ w[i - 1] ^ PHI ^ j++);
- w[i] = t << 11 | t >> 21;
- }
- for (i = 0, j = 8; i < 8; )
- w[i++] = w[j++];
- limit = 4 * (Rounds + 1);
- for (; i < limit; i++)
- {
- t = w[i - 8] ^ w[i - 5] ^ w[i - 3] ^ w[i - 1] ^ PHI ^ i;
- w[i] = t << 11 | t >> 21;
- }
- long x0, x1, x2, x3, y0, y1, y2, y3, z;
- byte[] sb;
- for (i = 0; i < Rounds + 1; i++)
- {
- x0 = w[4 * i];
- x1 = w[4 * i + 1];
- x2 = w[4 * i + 2];
- x3 = w[4 * i + 3];
- y0 = y1 = y2 = y3 = 0;
- sb = Sbox[(Rounds + 3 - i) % Rounds];
- for (j = 0; j < 32; j++)
- {
- z = sb[((x0 >> j) & 0x01) |
- ((x1 >> j) & 0x01) << 1 |
- ((x2 >> j) & 0x01) << 2 |
- ((x3 >> j) & 0x01) << 3];
- y0 |= (z & 0x01) << j;
- y1 |= ((z >> 1) & 0x01) << j;
- y2 |= ((z >> 2) & 0x01) << j;
- y3 |= ((z >> 3) & 0x01) << j;
- }
- w[4 * i] = y0;
- w[4 * i + 1] = y1;
- w[4 * i + 2] = y2;
- w[4 * i + 3] = y3;
- }
- return w;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement