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

Tables4kGcmMultiplier

using Org.BouncyCastle.Utilities; using System; namespace Org.BouncyCastle.Crypto.Modes.Gcm { [Obsolete("Will be removed")] public class Tables4kGcmMultiplier : IGcmMultiplier { private byte[] H; private GcmUtilities.FieldElement[] T; public void Init(byte[] H) { if (T == null) T = new GcmUtilities.FieldElement[256]; else if (Arrays.AreEqual(this.H, H)) { return; } this.H = Arrays.Clone(H); GcmUtilities.AsFieldElement(this.H, out T[1]); GcmUtilities.MultiplyP7(ref T[1]); for (int i = 1; i < 128; i++) { GcmUtilities.DivideP(ref T[i], out T[i << 1]); GcmUtilities.Xor(ref T[i << 1], ref T[1], out T[(i << 1) + 1]); } } public void MultiplyH(byte[] x) { int num = x[15]; ulong num2 = T[num].n0; ulong num3 = T[num].n1; for (int num4 = 14; num4 >= 0; num4--) { num = x[num4]; ulong num5 = num3 << 56; num3 = (T[num].n1 ^ ((num3 >> 8) | (num2 << 56))); num2 = (T[num].n0 ^ (num2 >> 8) ^ num5 ^ (num5 >> 1) ^ (num5 >> 2) ^ (num5 >> 7)); } GcmUtilities.AsBytes(num2, num3, x); } } }