CSPspEmu.Core.Crypto.Crypto.rijndaelKeySetupEnc C# (CSharp) Method

rijndaelKeySetupEnc() public static method

Expand the cipher key into the encryption key schedule.
public static rijndaelKeySetupEnc ( uint rk, byte cipherKey, int keyBits ) : int
rk uint
cipherKey byte
keyBits int
return int
        public static int rijndaelKeySetupEnc(uint* rk /*4*(Nr + 1)*/, byte* cipherKey, int keyBits)
        {
            int i = 0;
            uint temp;

            rk[0] = GETuint(cipherKey     );
            rk[1] = GETuint(cipherKey +  4);
            rk[2] = GETuint(cipherKey +  8);
            rk[3] = GETuint(cipherKey + 12);
            if (keyBits == 128) {
                for (;;) {
                    temp  = rk[3];
                    rk[4] = rk[0] ^
                        (Te4[(temp >> 16) & 0xff] & 0xff000000) ^
                        (Te4[(temp >>  8) & 0xff] & 0x00ff0000) ^
                        (Te4[(temp      ) & 0xff] & 0x0000ff00) ^
                        (Te4[(temp >> 24)       ] & 0x000000ff) ^
                        rcon[i];
                    rk[5] = rk[1] ^ rk[4];
                    rk[6] = rk[2] ^ rk[5];
                    rk[7] = rk[3] ^ rk[6];
                    if (++i == 10) {
                        return 10;
                    }
                    rk += 4;
                }
            }
            rk[4] = GETuint(cipherKey + 16);
            rk[5] = GETuint(cipherKey + 20);
            if (keyBits == 192) {
                for (;;) {
                    temp = rk[ 5];
                    rk[ 6] = rk[ 0] ^
                        (Te4[(temp >> 16) & 0xff] & 0xff000000) ^
                        (Te4[(temp >>  8) & 0xff] & 0x00ff0000) ^
                        (Te4[(temp      ) & 0xff] & 0x0000ff00) ^
                        (Te4[(temp >> 24)       ] & 0x000000ff) ^
                        rcon[i];
                    rk[ 7] = rk[ 1] ^ rk[ 6];
                    rk[ 8] = rk[ 2] ^ rk[ 7];
                    rk[ 9] = rk[ 3] ^ rk[ 8];
                    if (++i == 8) {
                        return 12;
                    }
                    rk[10] = rk[ 4] ^ rk[ 9];
                    rk[11] = rk[ 5] ^ rk[10];
                    rk += 6;
                }
            }
            rk[6] = GETuint(cipherKey + 24);
            rk[7] = GETuint(cipherKey + 28);
            if (keyBits == 256) {
                for (;;) {
                    temp = rk[ 7];
                    rk[ 8] = rk[ 0] ^
                        (Te4[(temp >> 16) & 0xff] & 0xff000000) ^
                        (Te4[(temp >>  8) & 0xff] & 0x00ff0000) ^
                        (Te4[(temp      ) & 0xff] & 0x0000ff00) ^
                        (Te4[(temp >> 24)       ] & 0x000000ff) ^
                        rcon[i];
                    rk[ 9] = rk[ 1] ^ rk[ 8];
                    rk[10] = rk[ 2] ^ rk[ 9];
                    rk[11] = rk[ 3] ^ rk[10];
                    if (++i == 7) {
                        return 14;
                    }
                    temp = rk[11];
                    rk[12] = rk[ 4] ^
                        (Te4[(temp >> 24)       ] & 0xff000000) ^
                        (Te4[(temp >> 16) & 0xff] & 0x00ff0000) ^
                        (Te4[(temp >>  8) & 0xff] & 0x0000ff00) ^
                        (Te4[(temp      ) & 0xff] & 0x000000ff);
                    rk[13] = rk[ 5] ^ rk[12];
                    rk[14] = rk[ 6] ^ rk[13];
                        rk[15] = rk[ 7] ^ rk[14];
                    rk += 8;
                }
            }
            return 0;
        }