AesEngine_X86
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Runtime.Intrinsics;
using Org.BouncyCastle.Runtime.Intrinsics.X86;
using Org.BouncyCastle.Utilities;
using System;
using System.Buffers.Binary;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Intrinsics;
using System.Runtime.Intrinsics.X86;
namespace Org.BouncyCastle.Crypto.Engines
{
    public struct AesEngine_X86 : IBlockCipher
    {
        private enum Mode
        {
            DEC_128,
            DEC_192,
            DEC_256,
            ENC_128,
            ENC_192,
            ENC_256,
            UNINITIALIZED
        }
        private Vector128<byte>[] m_roundKeys;
        private Mode m_mode;
        public static bool IsSupported => Org.BouncyCastle.Runtime.Intrinsics.X86.Aes.IsEnabled;
        public string AlgorithmName => "AES";
        private unsafe static Vector128<byte>[] CreateRoundKeys(ReadOnlySpan<byte> key, bool forEncryption)
        {
            Vector128<byte>[] array;
            switch (key.Length) {
            case 16: {
                byte* intPtr = stackalloc byte[10];
                memcpy(intPtr, ref global::<PrivateImplementationDetails>.30EBF374C7BC4564E7437F65ECBFAC4121B61C40947F2EC471D1B7FC3B16F595, 10);
                ReadOnlySpan<byte> readOnlySpan = new Span<byte>(intPtr, 10);
                array = new Vector128<byte>[11];
                Vector128<byte> vector4 = array[0] = Load128(key.Slice(0, 16));
                int num2 = 0;
                while (num2 < 10) {
                    Vector128<byte> left3 = System.Runtime.Intrinsics.X86.Sse2.Shuffle(System.Runtime.Intrinsics.X86.Aes.KeygenAssist(vector4, readOnlySpan[num2++]).AsInt32(), byte.MaxValue).AsByte();
                    vector4 = System.Runtime.Intrinsics.X86.Sse2.Xor(vector4, System.Runtime.Intrinsics.X86.Sse2.ShiftLeftLogical128BitLane(vector4, 8));
                    vector4 = (array[num2] = System.Runtime.Intrinsics.X86.Sse2.Xor(System.Runtime.Intrinsics.X86.Sse2.Xor(left3, vector4), System.Runtime.Intrinsics.X86.Sse2.ShiftLeftLogical128BitLane(vector4, 4)));
                }
                break;
            }
            case 24: {
                array = new Vector128<byte>[13];
                Vector128<byte> vector5 = Load128(key.Slice(0, 16));
                Vector128<byte> vector6 = Load64(key.Slice(16, 8)).ToVector128();
                array[0] = vector5;
                byte b2 = 1;
                int num4 = 0;
                while (true) {
                    Vector128<byte> vector7 = System.Runtime.Intrinsics.X86.Aes.KeygenAssist(vector6, b2);
                    b2 = (byte)(b2 << 1);
                    Vector128<byte> left4 = System.Runtime.Intrinsics.X86.Sse2.Shuffle(vector7.AsInt32(), 85).AsByte();
                    vector5 = System.Runtime.Intrinsics.X86.Sse2.Xor(vector5, System.Runtime.Intrinsics.X86.Sse2.ShiftLeftLogical128BitLane(vector5, 8));
                    vector5 = System.Runtime.Intrinsics.X86.Sse2.Xor(System.Runtime.Intrinsics.X86.Sse2.Xor(left4, vector5), System.Runtime.Intrinsics.X86.Sse2.ShiftLeftLogical128BitLane(vector5, 4));
                    array[++num4] = System.Runtime.Intrinsics.X86.Sse2.Xor(vector6, System.Runtime.Intrinsics.X86.Sse2.ShiftLeftLogical128BitLane(vector5, 8));
                    Vector128<byte> vector8 = System.Runtime.Intrinsics.X86.Sse2.Xor(vector6, System.Runtime.Intrinsics.X86.Sse2.ShiftRightLogical128BitLane(vector5, 12));
                    vector8 = System.Runtime.Intrinsics.X86.Sse2.Xor(vector8, System.Runtime.Intrinsics.X86.Sse2.ShiftLeftLogical128BitLane(vector8, 4));
                    array[++num4] = System.Runtime.Intrinsics.X86.Sse2.Xor(System.Runtime.Intrinsics.X86.Sse2.ShiftRightLogical128BitLane(vector5, 8), System.Runtime.Intrinsics.X86.Sse2.ShiftLeftLogical128BitLane(vector8, 8));
                    Vector128<byte> vector9 = System.Runtime.Intrinsics.X86.Aes.KeygenAssist(vector8, b2);
                    b2 = (byte)(b2 << 1);
                    Vector128<byte> left5 = System.Runtime.Intrinsics.X86.Sse2.Shuffle(vector9.AsInt32(), 85).AsByte();
                    vector5 = System.Runtime.Intrinsics.X86.Sse2.Xor(vector5, System.Runtime.Intrinsics.X86.Sse2.ShiftLeftLogical128BitLane(vector5, 8));
                    vector5 = System.Runtime.Intrinsics.X86.Sse2.Xor(System.Runtime.Intrinsics.X86.Sse2.Xor(left5, vector5), System.Runtime.Intrinsics.X86.Sse2.ShiftLeftLogical128BitLane(vector5, 4));
                    array[++num4] = vector5;
                    if (num4 == 12)
                        break;
                    vector6 = System.Runtime.Intrinsics.X86.Sse2.Xor(vector8, System.Runtime.Intrinsics.X86.Sse2.ShiftRightLogical128BitLane(vector5, 12));
                    vector6 = System.Runtime.Intrinsics.X86.Sse2.Xor(vector6, System.Runtime.Intrinsics.X86.Sse2.ShiftLeftLogical128BitLane(vector6, 4));
                    vector6 = vector6.WithUpper(Vector64<byte>.Zero);
                }
                break;
            }
            case 32: {
                array = new Vector128<byte>[15];
                Vector128<byte> vector = Load128(key.Slice(0, 16));
                Vector128<byte> vector2 = Load128(key.Slice(16, 16));
                array[0] = vector;
                array[1] = vector2;
                byte b = 1;
                int num = 1;
                while (true) {
                    Vector128<byte> vector3 = System.Runtime.Intrinsics.X86.Aes.KeygenAssist(vector2, b);
                    b = (byte)(b << 1);
                    Vector128<byte> left = System.Runtime.Intrinsics.X86.Sse2.Shuffle(vector3.AsInt32(), byte.MaxValue).AsByte();
                    vector = System.Runtime.Intrinsics.X86.Sse2.Xor(vector, System.Runtime.Intrinsics.X86.Sse2.ShiftLeftLogical128BitLane(vector, 8));
                    vector = System.Runtime.Intrinsics.X86.Sse2.Xor(System.Runtime.Intrinsics.X86.Sse2.Xor(left, vector), System.Runtime.Intrinsics.X86.Sse2.ShiftLeftLogical128BitLane(vector, 4));
                    array[++num] = vector;
                    if (num == 14)
                        break;
                    Vector128<byte> left2 = System.Runtime.Intrinsics.X86.Sse2.Shuffle(System.Runtime.Intrinsics.X86.Aes.KeygenAssist(vector, 0).AsInt32(), 170).AsByte();
                    vector2 = System.Runtime.Intrinsics.X86.Sse2.Xor(vector2, System.Runtime.Intrinsics.X86.Sse2.ShiftLeftLogical128BitLane(vector2, 8));
                    vector2 = System.Runtime.Intrinsics.X86.Sse2.Xor(System.Runtime.Intrinsics.X86.Sse2.Xor(left2, vector2), System.Runtime.Intrinsics.X86.Sse2.ShiftLeftLogical128BitLane(vector2, 4));
                    array[++num] = vector2;
                }
                break;
            }
            default:
                throw new ArgumentException("Key length not 128/192/256 bits.");
            }
            if (!forEncryption) {
                int i = 1;
                for (int num5 = array.Length - 1; i < num5; i++) {
                    array[i] = System.Runtime.Intrinsics.X86.Aes.InverseMixColumns(array[i]);
                }
                Array.Reverse(array);
            }
            return array;
        }
        public AesEngine_X86()
        {
            m_roundKeys = null;
            m_mode = Mode.UNINITIALIZED;
            if (!IsSupported)
                throw new PlatformNotSupportedException("AesEngine_X86");
        }
        public int GetBlockSize()
        {
            return 16;
        }
        public void Init(bool forEncryption, ICipherParameters parameters)
        {
            KeyParameter keyParameter = parameters as KeyParameter;
            if (keyParameter == null) {
                ArgumentNullException.ThrowIfNull(parameters, "parameters");
                throw new ArgumentException("invalid type: " + Platform.GetTypeName(parameters), "parameters");
            }
            m_roundKeys = CreateRoundKeys(keyParameter.Key, forEncryption);
            if (m_roundKeys.Length == 11)
                m_mode = (forEncryption ? Mode.ENC_128 : Mode.DEC_128);
            else if (m_roundKeys.Length == 13) {
                m_mode = ((!forEncryption) ? Mode.DEC_192 : Mode.ENC_192);
            } else {
                m_mode = (forEncryption ? Mode.ENC_256 : Mode.DEC_256);
            }
        }
        public int ProcessBlock(byte[] inBuf, int inOff, byte[] outBuf, int outOff)
        {
            Check.DataLength(inBuf, inOff, 16, "input buffer too short");
            Check.OutputLength(outBuf, outOff, 16, "output buffer too short");
            Vector128<byte> state = Load128(inBuf.AsSpan(inOff, 16));
            ImplRounds(ref state);
            Store128(state, outBuf.AsSpan(outOff, 16));
            return 16;
        }
        public int ProcessBlock(ReadOnlySpan<byte> input, Span<byte> output)
        {
            Check.DataLength(input, 16, "input buffer too short");
            Check.OutputLength(output, 16, "output buffer too short");
            Vector128<byte> state = Load128(input.Slice(0, 16));
            ImplRounds(ref state);
            Store128(state, output.Slice(0, 16));
            return 16;
        }
        public int ProcessFourBlocks(ReadOnlySpan<byte> input, Span<byte> output)
        {
            Check.DataLength(input, 64, "input buffer too short");
            Check.OutputLength(output, 64, "output buffer too short");
            Vector128<byte> s = Load128(input.Slice(0, 16));
            Vector128<byte> s2 = Load128(input.Slice(16, 16));
            Vector128<byte> s3 = Load128(input.Slice(32, 16));
            Vector128<byte> s4 = Load128(input.Slice(48, 16));
            ImplRounds(ref s, ref s2, ref s3, ref s4);
            Store128(s, output.Slice(0, 16));
            Store128(s2, output.Slice(16, 16));
            Store128(s3, output.Slice(32, 16));
            Store128(s4, output.Slice(48, 16));
            return 64;
        }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private void ImplRounds(ref Vector128<byte> state)
        {
            switch (m_mode) {
            case Mode.DEC_128:
                Decrypt128(m_roundKeys, ref state);
                break;
            case Mode.DEC_192:
                Decrypt192(m_roundKeys, ref state);
                break;
            case Mode.DEC_256:
                Decrypt256(m_roundKeys, ref state);
                break;
            case Mode.ENC_128:
                Encrypt128(m_roundKeys, ref state);
                break;
            case Mode.ENC_192:
                Encrypt192(m_roundKeys, ref state);
                break;
            case Mode.ENC_256:
                Encrypt256(m_roundKeys, ref state);
                break;
            default:
                throw new InvalidOperationException("AesEngine_X86 not initialised");
            }
        }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private void ImplRounds(ref Vector128<byte> s1, ref Vector128<byte> s2, ref Vector128<byte> s3, ref Vector128<byte> s4)
        {
            switch (m_mode) {
            case Mode.DEC_128:
                DecryptFour128(m_roundKeys, ref s1, ref s2, ref s3, ref s4);
                break;
            case Mode.DEC_192:
                DecryptFour192(m_roundKeys, ref s1, ref s2, ref s3, ref s4);
                break;
            case Mode.DEC_256:
                DecryptFour256(m_roundKeys, ref s1, ref s2, ref s3, ref s4);
                break;
            case Mode.ENC_128:
                EncryptFour128(m_roundKeys, ref s1, ref s2, ref s3, ref s4);
                break;
            case Mode.ENC_192:
                EncryptFour192(m_roundKeys, ref s1, ref s2, ref s3, ref s4);
                break;
            case Mode.ENC_256:
                EncryptFour256(m_roundKeys, ref s1, ref s2, ref s3, ref s4);
                break;
            default:
                throw new InvalidOperationException("AesEngine_X86 not initialised");
            }
        }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private static void Decrypt128(Vector128<byte>[] roundKeys, ref Vector128<byte> state)
        {
            ref Vector128<byte> reference;
            reference = ref roundKeys[10];
            Vector128<byte> value = System.Runtime.Intrinsics.X86.Sse2.Xor(state, roundKeys[0]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[1]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[2]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[3]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[4]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[5]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[6]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[7]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[8]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[9]);
            state = System.Runtime.Intrinsics.X86.Aes.DecryptLast(value, roundKeys[10]);
        }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private static void Decrypt192(Vector128<byte>[] roundKeys, ref Vector128<byte> state)
        {
            ref Vector128<byte> reference;
            reference = ref roundKeys[12];
            Vector128<byte> value = System.Runtime.Intrinsics.X86.Sse2.Xor(state, roundKeys[0]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[1]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[2]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[3]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[4]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[5]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[6]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[7]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[8]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[9]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[10]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[11]);
            state = System.Runtime.Intrinsics.X86.Aes.DecryptLast(value, roundKeys[12]);
        }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private static void Decrypt256(Vector128<byte>[] roundKeys, ref Vector128<byte> state)
        {
            ref Vector128<byte> reference;
            reference = ref roundKeys[14];
            Vector128<byte> value = System.Runtime.Intrinsics.X86.Sse2.Xor(state, roundKeys[0]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[1]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[2]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[3]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[4]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[5]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[6]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[7]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[8]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[9]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[10]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[11]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[12]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, roundKeys[13]);
            state = System.Runtime.Intrinsics.X86.Aes.DecryptLast(value, roundKeys[14]);
        }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private static void DecryptFour128(Vector128<byte>[] rk, ref Vector128<byte> s1, ref Vector128<byte> s2, ref Vector128<byte> s3, ref Vector128<byte> s4)
        {
            ref Vector128<byte> reference;
            reference = ref rk[10];
            Vector128<byte> value = System.Runtime.Intrinsics.X86.Sse2.Xor(s1, rk[0]);
            Vector128<byte> value2 = System.Runtime.Intrinsics.X86.Sse2.Xor(s2, rk[0]);
            Vector128<byte> value3 = System.Runtime.Intrinsics.X86.Sse2.Xor(s3, rk[0]);
            Vector128<byte> value4 = System.Runtime.Intrinsics.X86.Sse2.Xor(s4, rk[0]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[1]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[1]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[1]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[1]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[2]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[2]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[2]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[2]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[3]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[3]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[3]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[3]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[4]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[4]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[4]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[4]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[5]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[5]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[5]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[5]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[6]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[6]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[6]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[6]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[7]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[7]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[7]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[7]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[8]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[8]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[8]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[8]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[9]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[9]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[9]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[9]);
            s1 = System.Runtime.Intrinsics.X86.Aes.DecryptLast(value, rk[10]);
            s2 = System.Runtime.Intrinsics.X86.Aes.DecryptLast(value2, rk[10]);
            s3 = System.Runtime.Intrinsics.X86.Aes.DecryptLast(value3, rk[10]);
            s4 = System.Runtime.Intrinsics.X86.Aes.DecryptLast(value4, rk[10]);
        }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private static void DecryptFour192(Vector128<byte>[] rk, ref Vector128<byte> s1, ref Vector128<byte> s2, ref Vector128<byte> s3, ref Vector128<byte> s4)
        {
            ref Vector128<byte> reference;
            reference = ref rk[12];
            Vector128<byte> value = System.Runtime.Intrinsics.X86.Sse2.Xor(s1, rk[0]);
            Vector128<byte> value2 = System.Runtime.Intrinsics.X86.Sse2.Xor(s2, rk[0]);
            Vector128<byte> value3 = System.Runtime.Intrinsics.X86.Sse2.Xor(s3, rk[0]);
            Vector128<byte> value4 = System.Runtime.Intrinsics.X86.Sse2.Xor(s4, rk[0]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[1]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[1]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[1]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[1]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[2]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[2]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[2]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[2]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[3]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[3]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[3]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[3]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[4]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[4]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[4]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[4]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[5]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[5]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[5]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[5]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[6]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[6]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[6]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[6]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[7]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[7]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[7]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[7]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[8]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[8]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[8]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[8]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[9]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[9]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[9]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[9]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[10]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[10]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[10]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[10]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[11]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[11]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[11]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[11]);
            s1 = System.Runtime.Intrinsics.X86.Aes.DecryptLast(value, rk[12]);
            s2 = System.Runtime.Intrinsics.X86.Aes.DecryptLast(value2, rk[12]);
            s3 = System.Runtime.Intrinsics.X86.Aes.DecryptLast(value3, rk[12]);
            s4 = System.Runtime.Intrinsics.X86.Aes.DecryptLast(value4, rk[12]);
        }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private static void DecryptFour256(Vector128<byte>[] rk, ref Vector128<byte> s1, ref Vector128<byte> s2, ref Vector128<byte> s3, ref Vector128<byte> s4)
        {
            ref Vector128<byte> reference;
            reference = ref rk[14];
            Vector128<byte> value = System.Runtime.Intrinsics.X86.Sse2.Xor(s1, rk[0]);
            Vector128<byte> value2 = System.Runtime.Intrinsics.X86.Sse2.Xor(s2, rk[0]);
            Vector128<byte> value3 = System.Runtime.Intrinsics.X86.Sse2.Xor(s3, rk[0]);
            Vector128<byte> value4 = System.Runtime.Intrinsics.X86.Sse2.Xor(s4, rk[0]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[1]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[1]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[1]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[1]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[2]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[2]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[2]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[2]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[3]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[3]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[3]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[3]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[4]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[4]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[4]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[4]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[5]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[5]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[5]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[5]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[6]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[6]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[6]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[6]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[7]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[7]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[7]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[7]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[8]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[8]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[8]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[8]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[9]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[9]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[9]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[9]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[10]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[10]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[10]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[10]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[11]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[11]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[11]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[11]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[12]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[12]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[12]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[12]);
            value = System.Runtime.Intrinsics.X86.Aes.Decrypt(value, rk[13]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value2, rk[13]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value3, rk[13]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Decrypt(value4, rk[13]);
            s1 = System.Runtime.Intrinsics.X86.Aes.DecryptLast(value, rk[14]);
            s2 = System.Runtime.Intrinsics.X86.Aes.DecryptLast(value2, rk[14]);
            s3 = System.Runtime.Intrinsics.X86.Aes.DecryptLast(value3, rk[14]);
            s4 = System.Runtime.Intrinsics.X86.Aes.DecryptLast(value4, rk[14]);
        }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private static void Encrypt128(Vector128<byte>[] roundKeys, ref Vector128<byte> state)
        {
            ref Vector128<byte> reference;
            reference = ref roundKeys[10];
            Vector128<byte> value = System.Runtime.Intrinsics.X86.Sse2.Xor(state, roundKeys[0]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[1]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[2]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[3]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[4]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[5]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[6]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[7]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[8]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[9]);
            state = System.Runtime.Intrinsics.X86.Aes.EncryptLast(value, roundKeys[10]);
        }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private static void Encrypt192(Vector128<byte>[] roundKeys, ref Vector128<byte> state)
        {
            ref Vector128<byte> reference;
            reference = ref roundKeys[12];
            Vector128<byte> value = System.Runtime.Intrinsics.X86.Sse2.Xor(state, roundKeys[0]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[1]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[2]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[3]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[4]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[5]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[6]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[7]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[8]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[9]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[10]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[11]);
            state = System.Runtime.Intrinsics.X86.Aes.EncryptLast(value, roundKeys[12]);
        }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private static void Encrypt256(Vector128<byte>[] roundKeys, ref Vector128<byte> state)
        {
            ref Vector128<byte> reference;
            reference = ref roundKeys[14];
            Vector128<byte> value = System.Runtime.Intrinsics.X86.Sse2.Xor(state, roundKeys[0]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[1]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[2]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[3]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[4]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[5]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[6]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[7]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[8]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[9]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[10]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[11]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[12]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, roundKeys[13]);
            state = System.Runtime.Intrinsics.X86.Aes.EncryptLast(value, roundKeys[14]);
        }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private static void EncryptFour128(Vector128<byte>[] rk, ref Vector128<byte> s1, ref Vector128<byte> s2, ref Vector128<byte> s3, ref Vector128<byte> s4)
        {
            ref Vector128<byte> reference;
            reference = ref rk[10];
            Vector128<byte> value = System.Runtime.Intrinsics.X86.Sse2.Xor(s1, rk[0]);
            Vector128<byte> value2 = System.Runtime.Intrinsics.X86.Sse2.Xor(s2, rk[0]);
            Vector128<byte> value3 = System.Runtime.Intrinsics.X86.Sse2.Xor(s3, rk[0]);
            Vector128<byte> value4 = System.Runtime.Intrinsics.X86.Sse2.Xor(s4, rk[0]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[1]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[1]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[1]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[1]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[2]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[2]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[2]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[2]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[3]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[3]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[3]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[3]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[4]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[4]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[4]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[4]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[5]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[5]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[5]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[5]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[6]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[6]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[6]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[6]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[7]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[7]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[7]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[7]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[8]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[8]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[8]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[8]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[9]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[9]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[9]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[9]);
            s1 = System.Runtime.Intrinsics.X86.Aes.EncryptLast(value, rk[10]);
            s2 = System.Runtime.Intrinsics.X86.Aes.EncryptLast(value2, rk[10]);
            s3 = System.Runtime.Intrinsics.X86.Aes.EncryptLast(value3, rk[10]);
            s4 = System.Runtime.Intrinsics.X86.Aes.EncryptLast(value4, rk[10]);
        }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private static void EncryptFour192(Vector128<byte>[] rk, ref Vector128<byte> s1, ref Vector128<byte> s2, ref Vector128<byte> s3, ref Vector128<byte> s4)
        {
            ref Vector128<byte> reference;
            reference = ref rk[12];
            Vector128<byte> value = System.Runtime.Intrinsics.X86.Sse2.Xor(s1, rk[0]);
            Vector128<byte> value2 = System.Runtime.Intrinsics.X86.Sse2.Xor(s2, rk[0]);
            Vector128<byte> value3 = System.Runtime.Intrinsics.X86.Sse2.Xor(s3, rk[0]);
            Vector128<byte> value4 = System.Runtime.Intrinsics.X86.Sse2.Xor(s4, rk[0]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[1]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[1]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[1]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[1]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[2]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[2]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[2]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[2]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[3]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[3]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[3]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[3]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[4]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[4]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[4]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[4]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[5]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[5]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[5]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[5]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[6]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[6]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[6]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[6]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[7]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[7]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[7]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[7]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[8]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[8]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[8]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[8]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[9]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[9]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[9]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[9]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[10]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[10]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[10]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[10]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[11]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[11]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[11]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[11]);
            s1 = System.Runtime.Intrinsics.X86.Aes.EncryptLast(value, rk[12]);
            s2 = System.Runtime.Intrinsics.X86.Aes.EncryptLast(value2, rk[12]);
            s3 = System.Runtime.Intrinsics.X86.Aes.EncryptLast(value3, rk[12]);
            s4 = System.Runtime.Intrinsics.X86.Aes.EncryptLast(value4, rk[12]);
        }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private static void EncryptFour256(Vector128<byte>[] rk, ref Vector128<byte> s1, ref Vector128<byte> s2, ref Vector128<byte> s3, ref Vector128<byte> s4)
        {
            ref Vector128<byte> reference;
            reference = ref rk[14];
            Vector128<byte> value = System.Runtime.Intrinsics.X86.Sse2.Xor(s1, rk[0]);
            Vector128<byte> value2 = System.Runtime.Intrinsics.X86.Sse2.Xor(s2, rk[0]);
            Vector128<byte> value3 = System.Runtime.Intrinsics.X86.Sse2.Xor(s3, rk[0]);
            Vector128<byte> value4 = System.Runtime.Intrinsics.X86.Sse2.Xor(s4, rk[0]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[1]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[1]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[1]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[1]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[2]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[2]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[2]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[2]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[3]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[3]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[3]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[3]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[4]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[4]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[4]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[4]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[5]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[5]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[5]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[5]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[6]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[6]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[6]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[6]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[7]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[7]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[7]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[7]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[8]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[8]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[8]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[8]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[9]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[9]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[9]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[9]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[10]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[10]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[10]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[10]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[11]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[11]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[11]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[11]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[12]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[12]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[12]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[12]);
            value = System.Runtime.Intrinsics.X86.Aes.Encrypt(value, rk[13]);
            value2 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value2, rk[13]);
            value3 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value3, rk[13]);
            value4 = System.Runtime.Intrinsics.X86.Aes.Encrypt(value4, rk[13]);
            s1 = System.Runtime.Intrinsics.X86.Aes.EncryptLast(value, rk[14]);
            s2 = System.Runtime.Intrinsics.X86.Aes.EncryptLast(value2, rk[14]);
            s3 = System.Runtime.Intrinsics.X86.Aes.EncryptLast(value3, rk[14]);
            s4 = System.Runtime.Intrinsics.X86.Aes.EncryptLast(value4, rk[14]);
        }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private static Vector128<byte> Load128(ReadOnlySpan<byte> t)
        {
            if (Vector.IsPackedLittleEndian)
                return MemoryMarshal.Read<Vector128<byte>>(t);
            return Vector128.Create(BinaryPrimitives.ReadUInt64LittleEndian(t.Slice(0, 8)), BinaryPrimitives.ReadUInt64LittleEndian(t.Slice(8, t.Length - 8))).AsByte();
        }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private static Vector64<byte> Load64(ReadOnlySpan<byte> t)
        {
            if (Vector.IsPackedLittleEndian)
                return MemoryMarshal.Read<Vector64<byte>>(t);
            return Vector64.Create(BinaryPrimitives.ReadUInt64LittleEndian(t.Slice(0, 8))).AsByte();
        }
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private static void Store128(Vector128<byte> s, Span<byte> t)
        {
            if (Vector.IsPackedLittleEndian)
                MemoryMarshal.Write(t, ref s);
            else {
                Vector128<ulong> vector = s.AsUInt64();
                BinaryPrimitives.WriteUInt64LittleEndian(t.Slice(0, 8), vector.GetElement(0));
                BinaryPrimitives.WriteUInt64LittleEndian(t.Slice(8, t.Length - 8), vector.GetElement(1));
            }
        }
    }
}