init: function()

in src/aes.js [118:188]


        init: function(m, nk, key, iv) { /* Key=16 bytes */
            /* Key Scheduler. Create expanded encryption key */
            var CipherKey = [],
                b = [],
                i, j, k, N, nr;

            nk /= 4;

            if (nk != 4 && nk != 6 && nk != 8) {
                return false;
            }

            nr = 6 + nk;

            this.Nk = nk;
            this.Nr = nr;


            this.reset(m, iv);
            N = 4 * (nr + 1);

            for (i = j = 0; i < nk; i++, j += 4) {
                for (k = 0; k < 4; k++) {
                    b[k] = key[j + k];
                }
                CipherKey[i] = AES.pack(b);
            }

            for (i = 0; i < nk; i++) {
                this.fkey[i] = CipherKey[i];
            }

            for (j = nk, k = 0; j < N; j += nk, k++) {
                this.fkey[j] = this.fkey[j - nk] ^ AES.SubByte(AES.ROTL24(this.fkey[j - 1])) ^ (AES.rco[k]) & 0xff;

				if (nk<=6)
				{
					for (i = 1; i < nk && (i + j) < N; i++) {
						this.fkey[i + j] = this.fkey[i + j - nk] ^ this.fkey[i + j - 1];
					}
				} else {
					for (i = 1; i < 4 && (i + j) < N; i++) {
						this.fkey[i + j] = this.fkey[i + j - nk] ^ this.fkey[i + j - 1];
					}
					if ((j + 4) < N) {
						this.fkey[j + 4] = this.fkey[j + 4 - nk] ^ AES.SubByte(this.fkey[j + 3]);
					}
					for (i = 5; i < nk && (i + j) < N; i++) {
						this.fkey[i + j] = this.fkey[i + j - nk] ^ this.fkey[i + j - 1];
					}
				}
            }


            /* now for the expanded decrypt key in reverse order */

            for (j = 0; j < 4; j++) {
                this.rkey[j + N - 4] = this.fkey[j];
            }

            for (i = 4; i < N - 4; i += 4) {
                k = N - 4 - i;
                for (j = 0; j < 4; j++) {
                    this.rkey[k + j] = AES.InvMixCol(this.fkey[i + j]);
                }
            }

            for (j = N - 4; j < N; j++) {
                this.rkey[j - N + 4] = this.fkey[j];
            }
        },