Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 29th, 2012  |  syntax: C#  |  size: 2.41 KB  |  hits: 22  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. public string[,] MixColumns(string[,] str) // This is the array rendered from ShiftRows
  2.         {
  3.             string[] c1 = { str[0,0], str[1,0], str[2,0], str[3,0] };
  4.             string[] c2 = { str[0,1], str[1,1], str[2,1], str[3,1] };
  5.             string[] c3 = { str[0,2], str[1,2], str[2,2], str[3,2] };
  6.             string[] c4 = { str[0,3], str[1,3], str[2,3], str[3,3] };
  7.             string[][] columns = { c1, c2, c3, c4 };
  8.             string[][] resultColumns = new string[4][];
  9.  
  10.             for (int h = 0; h < 4; h++) // Each column in array
  11.             {
  12.                 int[] converted = { ToInt(columns[h][0]), ToInt(columns[h][1]), ToInt(columns[h][2]), ToInt(columns[h][3]) };
  13.                 string[] tmp = new string[4];
  14.  
  15.                 tmp[0] = (GFMultX2(converted[0]) ^ GFMultX3(converted[1]) ^ converted[2] ^ converted[3]).ToString("x2");
  16.                 tmp[1] = (converted[0] ^ GFMultX2(converted[1]) ^ GFMultX3(converted[2]) ^ converted[3]).ToString("x2");
  17.                 tmp[2] = (converted[0] ^ converted[1] ^ GFMultX2(converted[2]) ^ GFMultX3(converted[3])).ToString("x2");
  18.                 tmp[3] = (GFMultX3(converted[0]) ^ converted[1] ^ converted[2] ^ GFMultX2(converted[3])).ToString("x2");
  19.  
  20.                 resultColumns[h] = tmp;
  21.             }
  22.             string[,] result = { { resultColumns[0][0], resultColumns[1][0], resultColumns[2][0], resultColumns[3][0] },
  23.                                  { resultColumns[0][1], resultColumns[1][1], resultColumns[2][1], resultColumns[3][1] },
  24.                                  { resultColumns[0][2], resultColumns[1][2], resultColumns[2][2], resultColumns[3][2] },
  25.                                  { resultColumns[0][3], resultColumns[1][3], resultColumns[2][3], resultColumns[3][3] } };
  26.             return result;
  27.         }
  28.  
  29.         public int GFMultX2(int number)
  30.         {
  31.             string str = Convert.ToString(number, 2).PadLeft(8, '0');
  32.             str = str.Substring(1) + "0";
  33.  
  34.             int val = Convert.ToInt32(str, 2);
  35.             if (val >= 128) val ^= 27;
  36.            
  37.             return val;
  38.         }
  39.  
  40.         public int GFMultX3(int number)
  41.         {
  42.             int original = number;
  43.  
  44.             number = GFMultX2(number);
  45.  
  46.             return (number ^ original);
  47.         }
  48.  
  49.         public int ToInt(string hex)
  50.         {
  51.             return int.Parse(hex, System.Globalization.NumberStyles.HexNumber);
  52.         }