Tolong jelaskan mengenai unsigned char a[4]; dari MixColumns Rijndael

/* Larik a adalah salinan dari larik r.

* Larik b adalah larik a yang dikali dua dalam medan berhingga Rijndael.

* a[n] ^ b[n] adalah perkalian dengan tiga dalam medan berhingga Rijndael.

for (c = 0; c < 4; c++) {

/* h adalah 0xff jika bit tinggi r[c] diatur; nilainya 0 jika tidak */

h = (unsigned char) ((signed char) r[c] >> 7); /* geseran aritmetika kanan */

b[c] = r[c] << 1; /* secara tersirat menghapus bit tinggi karena b[c] adalah char 8 bit,

* maka di-XOR dengan 0x1B dan bukan 0x11B pada baris selanjutnya */

b[c] ^= 0x1B & h; /* medan berhingga Rijndael */

r[0] = b[0] ^ a[3] ^ a[2] ^ b[1] ^ a[1]; /* 2 * a0 + a3 + a2 + 3 * a1 */

r[1] = b[1] ^ a[0] ^ a[3] ^ b[2] ^ a[2]; /* 2 * a1 + a0 + a3 + 3 * a2 */

r[2] = b[2] ^ a[1] ^ a[0] ^ b[3] ^ a[3]; /* 2 * a2 + a1 + a0 + 3 * a3 */

r[3] = b[3] ^ a[2] ^ a[1] ^ b[0] ^ a[0]; /* 2 * a3 + a2 + a1 + 3 * a0 */