<PackageReference Include="BouncyCastle.Cryptography" Version="2.3.1" />

AesEngine_X86

public struct AesEngine_X86 : IBlockCipher
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)); } } } }